Browse Source

Merge branch 'developerB' of http://git.caimei365.com/caimei-repository/caimei-applets-caimei into developerB

喻文俊 3 năm trước cách đây
mục cha
commit
550e855618
100 tập tin đã thay đổi với 12308 bổ sung2676 xóa
  1. 3 3
      .gitignore
  2. 39 17
      App.vue
  3. 0 277
      api/use.js
  4. 0 174
      api/utils.js
  5. 47 43
      common/config/addressdata.js
  6. 25 5
      common/config/authorize.js
  7. 98 93
      common/config/caimeiApi.js
  8. 11 3
      common/config/common.js
  9. 2 3
      common/config/wxLogin.js
  10. 0 3
      common/css/iconfont.scss
  11. 47 47
      components/cm-custom/custom-floor.vue
  12. 47 47
      components/cm-custom/custom-p.vue
  13. 7 7
      components/cm-module/activity/activity.vue
  14. 258 0
      components/cm-module/activity/activityBean.vue
  15. 255 0
      components/cm-module/activity/pageFloor.vue
  16. 253 0
      components/cm-module/activityContact/index.vue
  17. 112 0
      components/cm-module/articleTemplate/templateA.vue
  18. 111 0
      components/cm-module/articleTemplate/templateB.vue
  19. 113 0
      components/cm-module/articleTemplate/templateC.vue
  20. 119 0
      components/cm-module/articleTemplate/templateD.vue
  21. 2112 0
      components/cm-module/cart-components/index.vue
  22. 12 14
      components/cm-module/cm-seller/category.vue
  23. 1 1
      components/cm-module/cm-seller/home.vue
  24. 82 35
      components/cm-module/cm-seller/user.vue
  25. 280 0
      components/cm-module/coupon/tui-tabs.vue
  26. 392 0
      components/cm-module/creatOrder/coupon.vue
  27. 210 0
      components/cm-module/creatOrder/exchangeCoupon.vue
  28. 175 54
      components/cm-module/creatOrder/freight.vue
  29. 2 2
      components/cm-module/creatOrder/sellerAddress.vue
  30. 392 0
      components/cm-module/creatOrder/sellerCoupon.vue
  31. 210 0
      components/cm-module/creatOrder/sellerExchangeCoupon.vue
  32. 46 46
      components/cm-module/headerNavbar/header-poduct.vue
  33. 0 230
      components/cm-module/home/cm-custom.vue
  34. 24 15
      components/cm-module/homeIndex/banner.vue
  35. 45 0
      components/cm-module/homeIndex/coupon.vue
  36. 2 2
      components/cm-module/homeIndex/customer.vue
  37. 11 8
      components/cm-module/homeIndex/navbars.vue
  38. 102 96
      components/cm-module/homeIndex/pageFloor.vue
  39. 40 17
      components/cm-module/homeIndex/pageSpecial.vue
  40. 1 1
      components/cm-module/homeIndex/supplierList.vue
  41. 60 29
      components/cm-module/listTemplate/buyagainList.vue
  42. 51 18
      components/cm-module/listTemplate/classifyProductList.vue
  43. 0 449
      components/cm-module/listTemplate/commodityList.vue
  44. 96 46
      components/cm-module/listTemplate/immediatelyList.vue
  45. 55 26
      components/cm-module/listTemplate/productList.vue
  46. 7 8
      components/cm-module/listTemplate/secondHand.vue
  47. 103 0
      components/cm-module/liveTemplate/components/scroll-temp.vue
  48. 202 0
      components/cm-module/liveTemplate/components/swiper-temp1.vue
  49. 197 0
      components/cm-module/liveTemplate/components/swiper-temp2.vue
  50. 103 0
      components/cm-module/liveTemplate/templateA.vue
  51. 103 0
      components/cm-module/liveTemplate/templateB.vue
  52. 103 0
      components/cm-module/liveTemplate/templateC.vue
  53. 0 135
      components/cm-module/modelAlert/cancelAlert.vue
  54. 1 1
      components/cm-module/modelAlert/freightAlert.vue
  55. 1 1
      components/cm-module/modelAlert/order-alert.vue
  56. 140 0
      components/cm-module/modelAlert/shareModel.vue
  57. 0 1
      components/cm-module/modelAlert/supplierRegisreAlert.vue
  58. 0 156
      components/cm-module/modelAlert/upgradeAlert.vue
  59. 7 1
      components/cm-module/orderDetails/goodsList.vue
  60. 34 32
      components/cm-module/orderDetails/orderButton.vue
  61. 13 7
      components/cm-module/orderDetails/orderInformation.vue
  62. 34 2
      components/cm-module/orderDetails/orderListButton.vue
  63. 4 2
      components/cm-module/orderDetails/sellerDetaileButton.vue
  64. 7 2
      components/cm-module/orderDetails/sellerOrderButton.vue
  65. 7 7
      components/cm-module/orderDetails/supplierRecorgButton.vue
  66. 47 28
      components/cm-module/pageFloorTemplate/templateA.vue
  67. 47 28
      components/cm-module/pageFloorTemplate/templateB.vue
  68. 47 28
      components/cm-module/pageFloorTemplate/templateC.vue
  69. 47 28
      components/cm-module/pageFloorTemplate/templateD.vue
  70. 47 28
      components/cm-module/pageFloorTemplate/templateE.vue
  71. 47 28
      components/cm-module/pageFloorTemplate/templateF.vue
  72. 350 0
      components/cm-module/pageFloorTemplate/templateG.vue
  73. 506 0
      components/cm-module/pageFloorTemplate/templateI.vue
  74. 522 0
      components/cm-module/pageFloorTemplate/templateJ.vue
  75. 575 0
      components/cm-module/pageFloorTemplate/templateK.vue
  76. 52 33
      components/cm-module/pageTemplate/templateA.vue
  77. 47 28
      components/cm-module/pageTemplate/templateB.vue
  78. 47 28
      components/cm-module/pageTemplate/templateC.vue
  79. 47 28
      components/cm-module/pageTemplate/templateD.vue
  80. 47 28
      components/cm-module/pageTemplate/templateE.vue
  81. 47 28
      components/cm-module/pageTemplate/templateF.vue
  82. 47 28
      components/cm-module/pageTemplate/templateG.vue
  83. 54 30
      components/cm-module/pageTemplate/templateH.vue
  84. 507 0
      components/cm-module/pageTemplate/templateI.vue
  85. 523 0
      components/cm-module/pageTemplate/templateJ.vue
  86. 576 0
      components/cm-module/pageTemplate/templateK.vue
  87. 1 1
      components/cm-module/pageTemplate/templateNav.vue
  88. 172 0
      components/cm-module/pcitureTemplate/templateA.vue
  89. 186 0
      components/cm-module/pcitureTemplate/templateB.vue
  90. 80 0
      components/cm-module/pcitureTemplate/templateC.vue
  91. 96 0
      components/cm-module/pcitureTemplate/templateD.vue
  92. 181 0
      components/cm-module/pcitureTemplate/templateE.vue
  93. 95 0
      components/cm-module/pcitureTemplate/templateF.vue
  94. 102 0
      components/cm-module/pcitureTemplate/templateG.vue
  95. 103 0
      components/cm-module/pcitureTemplate/templateH.vue
  96. 1 1
      components/cm-module/productDetails/cm-activipopu.vue
  97. 30 16
      components/cm-module/productDetails/cm-price.vue
  98. 11 11
      components/cm-module/productDetails/instrument-recommend.vue
  99. 7 3
      components/cm-module/productDetails/recommend.vue
  100. 0 79
      components/cm-module/productDetails/second-price.vue

+ 3 - 3
.gitignore

@@ -1,6 +1,6 @@
 unpackage/
 .gitignore
-common/config/config.js
-services/ajax.env.js
 .idea/
-.hbuilderx/launch.json
+.hbuilderx/launch.json
+/services/config.env.js
+/services/ajax.env.js

+ 39 - 17
App.vue

@@ -8,6 +8,28 @@
 	export default {
 		onLaunch: function() {
 			let self = this
+			//小程序热更新代码
+			// if (wx.canIUse('getUpdateManager')) {
+			// 	const updateManager = wx.getUpdateManager()
+			// 	updateManager.onCheckForUpdate(function (res) {
+			//         console.log('onCheckForUpdate====', res)
+			//         // 请求完新版本信息的回调
+			//         if (res.hasUpdate) {
+			// 			console.log('res.hasUpdate====')
+			// 			updateManager.onUpdateReady(function () {// 新的版本已经下载好,调用 applyUpdate 应用新版本并重启
+			// 				self.$util.modal('更新提示','新版本已经准备好,是否重启应用?','确定','取消',true,() =>{
+			// 					updateManager.applyUpdate()
+			// 				})
+			// 			})
+			// 			updateManager.onUpdateFailed(function () {  // 新的版本下载失败
+			// 				self.$util.modal('已经有新版本了哟~','新版本已经上线啦~,请您删除当前小程序,重新搜索打开哟~','确定','取消',true,() =>{
+			// 					// 新的版本已经下载好,调用 applyUpdate 应用新版本并重启
+			// 					updateManager.applyUpdate()
+			// 				})
+			// 			})
+			//         }
+			// 	})
+			// }
 			uni.getSystemInfo({
 				success: function(e) {
 					let modelmes = e.model;
@@ -57,16 +79,12 @@
 				}
 			})
 			this.refresh()
-			// if(uni.getStorageSync('isActivityStatus')){
-			// 	const  lockTime = uni.getStorageSync('lockTime')
-			// 	const  eTime = this.diffTime(lockTime)
-			// 	this.$store.dispatch('setActivityFn',eTime)
-			// }else{
-			// 	this.$store.dispatch('setActivityFn',true)
-			// }
+		},
+		computed: {
+			...mapState(['hasLogin'])
 		},
 		methods:{
-			...mapMutations(['login','logout']),
+			...mapMutations(['login','logout','isWxAuthorize']),
 			async getWxAuthorize(){
 				const wechatCode = await authorize.getCode('weixin');// 根据微信的code获取用户登录状态:1已登录过 -1未登录过
 				const getUserInfo = await authorize.getUserInfo('weixin');
@@ -82,20 +100,24 @@
 					uni.setStorageSync('unionId',response.data.unionId)
 				})
 				.catch(error =>{
-					this.logout(response.data)
-					uni.setStorageSync('unionId',response.data.unionId)
-					this.$store.commit('updateStatus',response.data)
+					this.logout(error.data)
+					uni.setStorageSync('unionId',error.data.unionId)
+					this.$store.commit('updateStatus',error.data)
+					if(!this.hasLogin){
+						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)
+						}
+					}
 				})
 			},		
 			refresh(){
 				let TIME = (20*60)*1000;
 				setInterval(()=>{
-					authorize.checkLogin().then(res => {
-						this.getWxAuthorize()
-					})
-					.catch(err => {
-						console.log(new Date +'用户未授权微信信息')
-					})
+					this.getWxAuthorize()
 				},TIME)
 			},
 			diffTime(t){

+ 0 - 277
api/use.js

@@ -1,277 +0,0 @@
-/**
- *@des 用户模块接口
- *@author zhengjinyi
- *@date 2020/03/19 14:56:57
- *@param registerByPass
- */
-import request from '@/common/config/caimeiApi.js'
-import $reg from '@/common/config/common.js'
-/**
- *机构普通注册
- */
-export function organizationVerifyRegisterFirst(params) {
-	return new Promise(function(resolve,reject) {
-		if( params.userName == ''){
-			uni.showToast({title: '请输入联系人名称',duration: 2000,mask:true,icon:'none'})
-			return
-		}
-		if( params.bindMobile == ''){
-			uni.showToast({title: '请输入手机号',duration: 2000,mask:true,icon:'none'})
-			return
-		}
-		if(!$reg.isMobile(params.bindMobile)){
-			uni.showToast({title: '手机格式不正确',duration: 2000,mask:true,icon:'none'})
-			return
-		}
-		if( params.activationCode == ''){
-			uni.showToast({title: '请输入手机验证码',duration: 2000,mask:true,icon:'none'})
-			return
-		}
-		if(!$reg.isMobileCode(params.activationCode)){
-			uni.showToast({title: '验证码格式不正确',duration: 2000,mask:true,icon:'none'})
-			return
-		}
-		if( params.password == ''){
-			uni.showToast({title: '请输入密码',duration: 2000,mask:true,icon:'none'})
-			return
-		}
-		if(!$reg.checkPwd(params.password)){
-			uni.showToast({title: '密码必须为8-16位字母数字的组合',duration: 2000,mask:true,icon:'none'})
-			return
-		}
-		if( params.passWordConfirm == ''){
-			uni.showToast({title: '请再次确认密码',duration: 2000,mask:true,icon:'none'})
-			return
-		}
-		if( params.passWordConfirm !== params.password){
-			uni.showToast({title: '两次输入的密码不一致',duration: 2000,mask:true,icon:'none'})
-			return
-		}
-		if(params.isAgreed == 0){
-			uni.showToast({title: '请勾选同意协议',duration: 2000,mask:true,icon:'none'})
-			return
-		}
-		request.post('/club/common',params,true,res => {
-			if(res.code == 0){
-				resolve(res);
-			}else{
-				reject(res)
-			}
-		})
-	});
-}
-/**
- *绑定邮箱
- */
-export function bindingEmail(params) {
-	return new Promise(function(resolve,reject) {
-		if( params.email == ''){
-			uni.showToast({title: '请输入邮箱地址',duration: 2000,mask:true, icon:'none'})
-			return
-		}
-		if(!$reg.isEmail(params.email)){
-			uni.showToast({title: '请输入正确的邮箱地址',duration: 2000,mask:true,icon:'none'})
-			return
-		}
-		if( params.code == ''){
-			uni.showToast({title: '请输入邮箱验证码',duration: 2000,mask:true,icon:'none'})
-			return
-		}
-		if(!$reg.isEmailCode(params.code)){
-			uni.showToast({title: '验证码格式不正确',duration: 2000,mask:true,icon:'none'})
-			return
-		}
-		request.post('/user/binding',params,true, res => {
-			if(res.code == 0){
-				resolve(res);
-			}else{
-				reject(res)
-			}
-		})
-	})
-}
-/**
- *绑定微信
- */
-export function bindingWechat(params) {
-	return new Promise(function(resolve,reject) {
-		request.post('/club/bindingWx',params,true,res => {
-			if(res.code == 0){
-				resolve(res)
-			}else{
-				reject(res)
-			}
-		})
-	})
-}
-/**
- *获取个人中心信息
- */
-export function personalInfo(params) {
-	return new Promise(function(resolve,reject) {
-		request.lodingGet('/personalCenter/myCentre',params, res => {
-			resolve(res)
-		})
-	})
-}
-/**
- *获取账户余额明细
- */
-export function accountInfo(params) {
-	return new Promise(function(resolve,reject) {
-		request.lodingGet('/personalCenter/touchBalance',params, res => {
-			if(res.code == 0){
-				resolve(res)
-			}else{
-				reject(res)
-			}
-		})
-	})
-}
-
-/**
- *用户状态初始化
- */
-export function userInfoLogin(params) {
-	return new Promise(function(resolve,reject) {
-		request.post('/club/authorization',params,false, res => {
-			if(res.code == 0 || res.code == 4){
-				resolve(res)
-			}else if(res.code == -6){
-				reject(res)
-			}else{
-				reject(res)
-			}
-		})
-	})
-}
-/**
- *手机修改密码
- */
-export function mobilePassword(params) {
-	return new Promise(function(resolve,reject) {
-		if( params.mobileOrEmail == ''){
-			uni.showToast({title: '请输入手机号',duration: 2000,mask:true,icon:'none'})
-			return
-		}
-		if(!$reg.isMobile(params.mobileOrEmail)){
-			uni.showToast({title: '手机格式不正确',duration: 2000,mask:true,icon:'none'})
-			return
-		}
-		if( params.activateCode == ''){
-			uni.showToast({title: '请输入手机验证码',duration: 2000,mask:true,icon:'none'})
-			return
-		}
-		if(!$reg.isMobileCode(params.activateCode)){
-			uni.showToast({title: '验证码格式不正确',duration: 2000,mask:true,icon:'none'})
-			return
-		}
-		if( params.passWord == ''){
-			uni.showToast({title: '请输入密码',duration: 2000,mask:true,icon:'none'})
-			return
-		}
-		if(!$reg.checkPwd(params.passWord)){
-			uni.showToast({title: '密码必须为8-16位字母数字的组合',duration: 2000,mask:true,icon:'none'})
-			return
-		}
-		if( params.confirmPwd == ''){
-			uni.showToast({title: '请再次确认密码',duration: 2000,mask:true,icon:'none'})
-			return
-		}
-		if( params.confirmPwd !== params.passWord){
-			uni.showToast({title: '两次输入的密码不一致',duration: 2000,mask:true,icon:'none'})
-			return
-		}
-		request.post('/user/findCompanyPwd',params, true,res => {
-			if(res.code == 0){
-				resolve(res)
-			}else{
-				reject(res)
-			}
-		})
-	})
-}
-/**
- *邮箱修改密码
- */
-export function emailPassword(params) {
-	return new Promise(function(resolve,reject) {
-		if( params.mobileOrEmail == ''){
-			uni.showToast({title: '请输入邮箱',duration: 2000,mask:true,icon:'none'})
-			return
-		}
-		if(!$reg.isEmail(params.mobileOrEmail)){
-			uni.showToast({title: '请输入正确的邮箱地址',duration: 2000,mask:true,icon:'none'})
-			return
-		}
-		if( params.activateCode == ''){
-			uni.showToast({title: '请输入邮箱验证码',duration: 2000,mask:true,icon:'none'})
-			return
-		}
-		if(!$reg.isEmailCode(params.activateCode)){
-			uni.showToast({title: '验证码格式不正确',duration: 2000,mask:true,icon:'none'})
-			return
-		}
-		if( params.passWord == ''){
-			uni.showToast({title: '请输入密码',duration: 2000,mask:true,icon:'none'})
-			return
-		}
-		if(!$reg.checkPwd(params.passWord)){
-			uni.showToast({title: '密码必须为8-16位字母数字的组合',duration: 2000,mask:true,icon:'none'})
-			return
-		}
-		if( params.confirmPwd == ''){
-			uni.showToast({title: '请再次确认密码',duration: 2000,mask:true,icon:'none'})
-			return
-		}
-		if( params.confirmPwd !== params.passWord){
-			uni.showToast({title: '两次输入的密码不一致',duration: 2000,mask:true,icon:'none'})
-			return
-		}
-		request.post('/user/findCompanyPwd',params,true, res => {
-			if(res.code == 0){
-				resolve(res)
-			}else{
-				reject(res)
-			}
-		})
-	})
-}
-/**
- *修改手机号
- */
-export function changeMobile(params) {
-	return new Promise(function(resolve,reject) {
-		if( params.contractMobile == ''){
-			uni.showToast({title: '请输入新的手机号码',duration: 2000,mask:true,icon:'none'})
-			return
-		}
-		if(!$reg.isMobile(params.contractMobile)){
-			uni.showToast({title: '请输入正确的手机号码',duration: 2000,mask:true,icon:'none'})
-			return
-		}
-		if( params.mobileCode == ''){
-			uni.showToast({title: '请输入旧手机验证码',duration: 2000,mask:true,icon:'none'})
-			return
-		}
-		if(!$reg.isMobileCode(params.mobileCode)){
-			uni.showToast({title: '旧手机验证码格式不正确',duration: 2000,mask:true,icon:'none'})
-			return
-		}
-		if( params.newMobileCode == ''){
-			uni.showToast({title: '请输入新手机验证码',duration: 2000,mask:true,icon:'none'})
-			return
-		}
-		if(!$reg.isMobileCode(params.newMobileCode)){
-			uni.showToast({title: '新手机验证码格式不正确',duration: 2000,mask:true,icon:'none'})
-			return
-		}
-		request.post('/club/changeMobile',params,true, res => {
-			if(res.code == 0){
-				resolve(res)
-			}else{
-				reject(res)
-			}
-		})
-	})
-}

+ 0 - 174
api/utils.js

@@ -1,174 +0,0 @@
-/**
- *@des 公共接口
- *@author zhengjinyi
- *@date 2020/03/19 14:56:57
- *@param registerByPass
- */
-import requestUrl from '@/services/ajax.env.js'
-import request from '@/common/config/caimeiApi.js'
-import $reg from '@/common/config/common.js'
-
-
-/**
- *获取省市区列表
- */
-export function queryAddressInformation() {
-	return new Promise(function(resolve,reject) {
-		request.get("/club/address",{}, res => {
-			if(res.code == 0){
-				resolve(res);
-			}else{
-				reject(res)
-			}
-		})
-	});
-}
-/**
- * @新分类下的商品列表
- * @param:tinyTypeID 三级分类ID
- * @param:pageNum	页码
- * @param:pageSize	每页显示条数
- */
-export function searchQueryTinyType(url,params) {
-	return new Promise(function(resolve,reject) {
-		request.lodingGet(url,params, res => {
-			if(res.code == 0){
-				resolve(res);
-			}else{
-				reject(res)
-			}
-		})
-	});
-}
-/**
- *获取协议
- */
-export function queryProtocol() {
-	return new Promise(function(resolve,reject) {
-		request.get("/club/protocol",{}, res => {
-			if(res.code == 0){
-				resolve(res);
-			}else{
-				reject(res)
-			}
-		})
-	});
-}
-/**
- *获取邮箱验证码
- */
-export function getEmailCode(params) {
-	return new Promise(function(resolve,reject) {		
-		request.get("/user/mailbox",params, res => {
-			if(res.code == 0){
-				resolve(res);
-			}else{
-				reject(res)
-			}
-		})
-	});
-}
-/**
- *注册专用获取验证码
- */
-export function getRegisterMobileCode(params) {
-	return new Promise(function(resolve,reject) {
-		request.get("/club/captcha",params, res => {
-			if(res.code == 0){
-				resolve(res);
-			}else{
-				reject(res)
-			}
-		})
-	});
-}
-/**
- *会所资料修改手机号
- *旧手机号获取验证码
- */
-export function getClubMobileCode(params) {
-	return new Promise(function(resolve,reject) {
-		request.get("/club/modifyPhoneNumber",params, res => {
-			if(res.code == 0){
-				resolve(res);
-			}else{
-				reject(res)
-			}
-		})
-	});
-}
-/**
- *会所资料修改手机号
- *新手机号获取验证码
- */
-export function getClubNewMobileCode(params) {
-	return new Promise(function(resolve,reject) {
-		request.get("/club/modifyPhoneNumber",params, res => {
-			if(res.code == 0){
-				resolve(res);
-			}else{
-				reject(res)
-			}
-		})
-	});
-}
-/**
- *小程序机构账号绑定微信,PC微信绑定机构账号
- */
-export function getbindWechatCode(params) {
-	return new Promise(function(resolve,reject) {
-		request.get("/user/note",params, res => {
-			if(res.code == 0){
-				resolve(res);
-			}else{
-				reject(res)
-			}
-		})
-	});
-}
-/**
- *通过邀请链接绑定运营人员获取手机短信
- */
-export function getbindOperatorCode(params) {
-	return new Promise(function(resolve,reject) {
-		request.get("/seller/note",params, res => {
-			if(res.code == 0){
-				resolve(res);
-			}else{
-				reject(res)
-			}
-		})
-	});
-}
-/**
- *上传图片
- */
-export function uploadFileImage() {
-	return new Promise(function(resolve,reject) {
-		uni.chooseImage({
-			count: 1, //默认1
-			sizeType: ['original','compressed'], //可以指定是原图还是压缩图,默认二者都有
-			sourceType: ['album'], //从相册选择
-			success: (res) => {
-				const tempFilePaths = res.tempFilePaths;
-				const uploadTask = uni.uploadFile({
-					url : requestUrl+'/formData/MultiPictareaddData',
-					filePath: tempFilePaths[0],
-					name: 'file',
-					header: {
-					    "Content-Type": "multipart/form-data",
-					},
-					formData: {
-						'user': 'test'
-					},
-					success: function (res) {
-						resolve(res);
-					},
-					error : function(e){
-						reject(res)
-					}
-				})
-			}
-		});
-	});
-}

+ 47 - 43
common/config/addressdata.js

@@ -2,12 +2,16 @@
  *请求获取省市区
  *已提供给地区选择picker组件使用
  */ 
-import { queryAddressInformation } from '@/api/utils.js';
+import ajaxService from '@/services/ajax.service.js'
+import PublicService from '@/services/public.service'
+
+const _PublicService = new PublicService(ajaxService)
+
 const provinceData=[];
 const cityData=[];
 const areaData=[];
 
-queryAddressInformation().then(res =>{
+_PublicService.GetAllAddressData().then(res =>{
 	let list = res.data;
 	list.forEach(item => {
 		let xxx = handleCitys(item);
@@ -15,48 +19,48 @@ queryAddressInformation().then(res =>{
 		cityData.push(xxx.e);
 		areaData.push(xxx.f);
 	})
-})
-//获取市后继续处理
-function handleCitys(data) {
-    const x = [];
-    const s = [];
-    if (data.cityList.length) {
-        data.cityList.forEach(item => {
-			let xxx = handleTowns(item);
-			s.push(xxx);
-			x.push(item)
-        })
-    }else{
-		s.push([{name:''}]);
-		x.push([{name:''}]);
+	//获取市后继续处理
+	function handleCitys(data) {
+	    const x = [];
+	    const s = [];
+	    if (data.cityList.length) {
+	        data.cityList.forEach(item => {
+				let xxx = handleTowns(item);
+				s.push(xxx);
+				x.push(item)
+	        })
+	    }else{
+			s.push([{name:''}]);
+			x.push([{name:''}]);
+		}
+	    return {
+	        e: x,
+	        f: s,
+	    };
 	}
-    return {
-        e: x,
-        f: s,
-    };
-}
-//获取区后继续处理
-function handleTowns(data) {
-    const x = [];
-    data.townList.forEach(item => {
-        x.push(item)
-    })
-    return x;
-}
-
-function handleData3(data) {
-    const xxx = [];
-    data.forEach(item => {
-        const ooo = []
-        item.forEach(opt => {
-           opt.forEach(z => {
-               ooo.push(z);
-           })
-        })
-        xxx.push(ooo)
-    })
-    return xxx;
-}
+	//获取区后继续处理
+	function handleTowns(data) {
+	    const x = [];
+	    data.townList.forEach(item => {
+	        x.push(item)
+	    })
+	    return x;
+	}
+	
+	function handleData3(data) {
+	    const xxx = [];
+	    data.forEach(item => {
+	        const ooo = []
+	        item.forEach(opt => {
+	           opt.forEach(z => {
+	               ooo.push(z);
+	           })
+	        })
+	        xxx.push(ooo)
+	    })
+	    return xxx;
+	}
+})
 module.exports = {
 	provinceData,
 	cityData,

+ 25 - 5
common/config/authorize.js

@@ -72,7 +72,6 @@ const getCode = provider => {
         uni.login({
             provider: provider,
             success: function(loginRes) {
-				console.log(loginRes)
                 if (loginRes && loginRes.code) { 
 					resolve(loginRes.code) 
 				} else {
@@ -83,7 +82,7 @@ const getCode = provider => {
 				}
             },
 			fail:function(error){ 
-				console.log(err)
+				console.log('获取code失败',)
 				reject("获取code失败")
 			}
         });
@@ -122,6 +121,7 @@ const getUserInfo = (provider)=>{
 				}
 			}
 			,fail: (error) => {
+				console.log('获取用户信息失败')
 				reject(0); //如果用户拒绝过授权 直接走fail
 			}
 		});
@@ -132,16 +132,35 @@ const checkLogin = () => {
 	return new Promise((resolve, reject) => {
 		uni.checkSession({
 			success() {
-				resolve(1)
 				console.log('登录成功')
+				resolve(1)
 			},
-			fail(err) {
+			fail(error) {
+				console.log('获取用户信息失败',error)
 				reject(0)
 			}
 		})
 	})
 }
 
+// util.js
+const getUserProfile = () =>{
+	wx.getUserProfile({
+		desc: '用于完善个人资料',
+		success: function(res) {
+			var userInfo = res.userInfo
+			// console.log('userInfo==>', userInfo)
+			wx.setStorageSync('storage_info', 1);//本地标记
+			//下面将userInfo存入服务器中的用户个人资料
+			//...
+		  },
+		fail() {
+			console.log("用户拒绝授权")
+		}
+	})
+}
+  
+
 export default {
 	getProvider,
 	getSetting,
@@ -149,5 +168,6 @@ export default {
 	getCode,
 	login,
 	getUserInfo,
-	checkLogin
+	checkLogin,
+	getUserProfile
 }

+ 98 - 93
common/config/caimeiApi.js

@@ -24,9 +24,9 @@ const caimeiApi = {
 			success: (response) => {
 				if(response.statusCode !== 200){
 					uni.showToast({icon: 'none',title:'服务器连接错误',duration: 2000})
-					callback(response.statusCode);
+					callback(response.statusCode)
 				}else{
-					callback(response.data);
+					callback(response.data)
 				}
 			},
 			fail: (error) => {
@@ -34,7 +34,7 @@ const caimeiApi = {
 					uni.showToast({icon: 'none',title: '网络错误,请稍后重试',duration: 2000})
 				}
 			}
-		 });
+		 })
 	},
 	/**
 	 * @封装公共get数据请求方法有加载动画
@@ -42,7 +42,7 @@ const caimeiApi = {
 	 * @自定义请求头信息
 	 */
 	lodingGet:function(url,data,callback){
-		 uni.showLoading({mask: true,title:'加载中~',});
+		 uni.showLoading({mask: true,title:'加载中~',})
 		 uni.request({
 			url: requestUrl + url,
 			data:data,
@@ -56,9 +56,9 @@ const caimeiApi = {
 			success: (response) => {
 				if(response.statusCode !== 200){
 					uni.showToast({icon: 'none',title: '服务器连接错误',duration: 2000})
-					callback(response.statusCode);
+					callback(response.statusCode)
 				}else{
-					callback(response.data);
+					callback(response.data)
 				}
 			},
 			fail: (error) => {
@@ -68,10 +68,10 @@ const caimeiApi = {
 			},
 			complete: () => {
 				setTimeout(function () {
-					uni.hideLoading();
-				}, 250);
+					uni.hideLoading()
+				}, 250)
 			}
-		 });
+		 })
 	},
 	/**
 	 * @封装公共post数据请求方法
@@ -107,13 +107,13 @@ const caimeiApi = {
 			uni.getStorage({
 				key: key,
 				success: function (res){
-					resolve(res.data);
+					resolve(res.data)
 				},
 				fail: function(res){
 					reject(false)
 				}
 			})
-		});
+		})
 	},
 	setStorage:function(key,data){// 存储本地Storage
 		return new Promise(function(resolve,reject) {
@@ -123,30 +123,30 @@ const caimeiApi = {
 				success: function (res){
 				}
 			})
-		});
+		})
 	},
 	getStorage:function(){// 获取本地userInfo
 		return new Promise(function(resolve,reject) {
 			uni.getStorage({
 				key: 'userInfo',
 				success: function (res){
-					resolve(res.data);
+					resolve(res.data)
 				},
 				fail: function(res){
 					reject(false)
 				}
 			})
-		});
+		})
 	},
 	getStorageAddressKey:function(){// 获取本地地址信息
 		return new Promise(function(resolve,reject) {
 			uni.getStorage({
 				key: 'address_key',
 				success: function (res){
-					resolve(res.data);
+					resolve(res.data)
 				}
 			})
-		});
+		})
 	},
 	loginStatus:function(){
 	// 获取用户是否登陆 1:已登陆,否则未登陆
@@ -155,20 +155,20 @@ const caimeiApi = {
 				key: 'userInfo',
 				success: function (res){
 					if(res.data.code == '1'){
-						resolve(true);
+						resolve(true)
 					} else {
-						resolve(false);
+						resolve(false)
 					}
 				}
 			})
-		});
+		})
 	},
 	navToListPage:function({type,value,id,lType} = {}){	
 	// 跳转到列表页
 		if(lType=='4'){
-			const pages = getCurrentPages();
-			const prevPage = pages[pages.length-2];
-			prevPage.refresh = true;
+			const pages = getCurrentPages()
+			const prevPage = pages[pages.length-2]
+			prevPage.refresh = true
 			prevPage.listData = {
 				type: type,
 				from: value,
@@ -186,9 +186,9 @@ const caimeiApi = {
 	navigateToGoods:function({type,value,id,lType} = {}){
 	// 跳转到列表页
 		if(lType=='4'){
-			const pages = getCurrentPages();
-			const prevPage = pages[pages.length-2];
-			prevPage.refresh = true;
+			const pages = getCurrentPages()
+			const prevPage = pages[pages.length-2]
+			prevPage.refresh = true
 			prevPage.listData = {
 				type: type,
 				from: value,
@@ -207,11 +207,11 @@ const caimeiApi = {
 		if(pros.listType == 1){
 			if(pros.product.productCategory == '1'){
 				uni.navigateTo({
-				  	url:`/pages/goods/product?id=${pros.product.productID}`
+				  	url:`/pages/goods/product?id=${pros.product.productId}`
 				})
 			}else{
 				uni.navigateTo({
-				  	url:`/second/pages/product/product-details?id=${pros.product.productID}`
+				  	url:`/pages/second/product/product-details?id=${pros.product.productId}`
 				})
 			}
 		}else{
@@ -226,24 +226,27 @@ const caimeiApi = {
 				const typeMap = {
 				 	1:`/pages/goods/goods-instrument?linkId=${pros.linkParam.id}`,
 				 	2:`/pages/goods/instrument-details?id=${pros.linkParam.id}`,
-					4:`/h5/pages/activity/activity?title=${pros.crmTitle}&link=${pros.crmLink}`,
+				 	3:`/pages/h5/article/page-image?image=${pros.adsImage}&title=专题直播`,
+					4:`/pages/h5/activity/activity?title=${pros.crmTitle}&link=${pros.crmLink}`,
 				 	5:`/pages/goods/product?id=${pros.linkParam.id}`,
-				 	7:`/supplier/pages/user/my-shop?shopId=${pros.linkParam.id}`,
-				 	8:`/h5/pages/activity/activity-list`,
-				 	9:`/second/pages/form/introduce`,
-				 	10:`/second/pages/product/product-list`,
-				 	11:`/second/pages/form/form`,
-				 	12:`/search/pages/search/search?keyWord=${pros.linkParam.keyword}`,
-				 	13:`/h5/pages/article/path?link=${pros.link}`,
-				 	14:`/h5/pages/article/path?link=${pros.link}`,
-				 	15:`/h5/pages/article/path?link=${pros.link}`,
-				 	17:`/pages/login/register-select`,
-				 	18:`/h5/pages/article/path?link=${pros.link}`,
-				 	19:`/search/pages/search/search-supplier?keyWord=${pros.linkParam.keyword}`,
-					21:`/h5/pages/activity/meobohui`
-					
+				 	// 7:`/pages/supplier/user/my-shop?shopId=${pros.linkParam.id}`,
+				 	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=${pros.linkParam.keyword}`,
+				 	13:`/pages/h5/article/path?link=${pros.link}`,
+				 	14:`/pages/h5/article/path?link=${pros.link}`,
+				 	15:`/pages/h5/article/path?link=${pros.link}`,
+					// '-1':`/pages/h5/article/path?link=${pros.link}`,
+				 	17:'/pages/login/register-select',
+				 	18:`/pages/h5/article/path?link=${pros.link}`,
+				 	19:`/pages/search/search-supplier?keyWord=${pros.linkParam.keyword}`,
+					21:'/pages/h5/activity/meobohui',
+					24:'/pages/user/coupon/coupon',
+					23:`/pages/h5/activity/activity-topic?linkId=${pros.linkParam.id}`
 				}
-				const url = typeMap[pros.linkType];
+				const url = typeMap[pros.linkType]
 				uni.navigateTo({
 				  	url:url
 				})
@@ -255,23 +258,25 @@ const caimeiApi = {
 			const typeMap = {
 				1:`/pages/goods/goods-instrument?linkId=${linkId}`,
 				2:`/pages/goods/instrument-details?id=${linkId}`,
-				4:`/h5/pages/activity/activity?id=${linkId}`,
-				5:`/pages/goods/product?id=${linkId}`,
-				7:`/supplier/pages/user/my-shop?shopId=${linkId}`,
-				8:`/h5/pages/activity/activity-list`,
-				9:`/second/pages/form/introduce`,
-				10:`/second/pages/product/product-list`,
-				11:`/second/pages/form/form`,
-				12:`/search/pages/search/search?keyWord=${keyword}`,
-				13:`/h5/pages/article/path?link=${linkHref}`,
-				14:`/h5/pages/article/path?link=${linkHref}`,
-				15:`/h5/pages/article/path?link=${linkHref}`,
-				17:`/pages/login/register-select`,
-				18:`/h5/pages/article/path?link=${linkHref}`,
-				19:`/search/pages/search/search-supplier?keyWord=${keyword}`,
-				21:`/h5/pages/activity/meobohui`
+				4:`/pages/h5/activity/activity?id=${linkId}`,
+				5:`/pages/goods/product?id=${linkId}`, 
+				// 7:`/pages/supplier/user/my-shop?shopId=${linkId}`,
+				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=${keyword}`,
+				13:`/pages/h5/article/path?link=${linkHref}`,
+				14:`/pages/h5/article/path?link=${linkHref}`,
+				15:`/pages/h5/article/path?link=${linkHref}`,
+				17:'/pages/login/register-select',
+				18:`/pages/h5/article/path?link=${linkHref}`,
+				19:`/pages/search/search-supplier?keyWord=${keyword}`,
+				21:'/pages/h5/activity/meobohui',
+				// '-1':`/pages/h5/article/path?link=${pros.link}`
+				24:'/pages/user/coupon/coupon'
 			}
-			const url = typeMap[linkType];
+			const url = typeMap[linkType]
 			uni.navigateTo({
 			 	url:url
 			})
@@ -296,8 +301,8 @@ const caimeiApi = {
 		})
 	},
 	isNumber:function(value){//验证是否为数字
-	    var patrn = /^(-)?\d+(\.\d+)?$/;
-	    if (patrn.exec(value) == null || value == "") {
+	    var patrn = /^(-)?\d+(\.\d+)?$/
+	    if (patrn.exec(value) == null || value == '') {
 	         return false
 	    } else {
 	         return true  
@@ -305,8 +310,8 @@ const caimeiApi = {
 	},
 	getWindowHeight:function(){
 		// 获取窗口高度
-		const {windowHeight, pixelRatio} = wx.getSystemInfoSync();
-		return windowHeight;
+		const {windowHeight, pixelRatio} = wx.getSystemInfoSync()
+		return windowHeight
 	},
 	adaptRichTextImg:function(res){
 		/**
@@ -315,34 +320,34 @@ const caimeiApi = {
 		 */ 
 		const html = res.replace(/<img[^>]*>/gi,function(match,capture){			
 			let match1 = match.replace(/<img*/gi, '<img style="width:100% !important;height:auto !important;float:left !important;"'),
-				results = match1.replace(/style=/gi, 'style="width:100%;height:auto;float:left;"');
-			return results;
+				results = match1.replace(/style=/gi, 'style="width:100%;height:auto;float:left;"')
+			return results
 		})
-		return html;	
+		return html	
 	},
 	FormatMoney:function(num){
 		// 金额千分位
 		return num.toString().replace(/\d+/, function (n) { // 先提取整数部分
 			return n.replace(/(\d)(?=(\d{3})+$)/g, function ($1) { // 对整数部分添加分隔符
-				return $1 + ",";
-			});
-		});
+				return $1 + ','
+			})
+		})
 	},
 	formatDate:function(){
 		//获取当前时间
-		let date = new Date();
-		let y = date.getFullYear();
-		let MM = date.getMonth() + 1;
-		MM = MM < 10 ? ('0' + MM) : MM;
-		let d = date.getDate();
-		d = d < 10 ? ('0' + d) : d;
-		let h = date.getHours();
-		h = h < 10 ? ('0' + h) : h;
-		let m = date.getMinutes();
-		m = m < 10 ? ('0' + m) : m;
-		let s = date.getSeconds();
-		s = s < 10 ? ('0' + s) : s;
-	    return y + '-' + MM + '-' + d + ' ' + h + ':' + m + ':' + s;
+		let date = new Date()
+		let y = date.getFullYear()
+		let MM = date.getMonth() + 1
+		MM = MM < 10 ? ('0' + MM) : MM
+		let d = date.getDate()
+		d = d < 10 ? ('0' + d) : d
+		let h = date.getHours()
+		h = h < 10 ? ('0' + h) : h
+		let m = date.getMinutes()
+		m = m < 10 ? ('0' + m) : m
+		let s = date.getSeconds()
+		s = s < 10 ? ('0' + s) : s
+	    return y + '-' + MM + '-' + d + ' ' + h + ':' + m + ':' + s
 	},
 	regexSets:function() {
 		let sets = {
@@ -350,19 +355,19 @@ const caimeiApi = {
 			'phoneAndTelephone': /^([1]\d{10}|([\((]?0[0-9]{2,3}[)\)]?[-]?)?([2-9][0-9]{6,7})+(\-[0-9]{1,4})?)$/,
 			'bankNum': /^([1-9]{1})(\d{18})$/,
 			'invalidChar': /^[\s\u4e00-\u9fa5a-z0-9_-]{0,}$/
-		};
-		return sets;
+		}
+		return sets
 	},
 	timestampToTime:function(timestamp) {
 		// 时间戳转日期
-	   let date = new Date(timestamp * 1000);//时间戳为10位需*1000,时间戳为13位的话不需乘1000
-	   let Y = date.getFullYear() + '-';
-	   let M = (date.getMonth()+1 < 10 ? '0'+(date.getMonth()+1) : date.getMonth()+1) + '-';
-	   let D = (date.getDate() < 10 ? '0'+date.getDate() : date.getDate()) + ' ';
-	   let h = (date.getHours() < 10 ? '0'+date.getHours() : date.getHours()) + ':';
-	   let m = (date.getMinutes() < 10 ? '0'+date.getMinutes() : date.getMinutes()) + ':';
-	   let s = (date.getSeconds() < 10 ? '0'+date.getSeconds() : date.getSeconds());
-	   return `${Y}${M}${D}${h}${m}${s}`;
+	   let date = new Date(timestamp * 1000)//时间戳为10位需*1000,时间戳为13位的话不需乘1000
+	   let Y = date.getFullYear() + '-'
+	   let M = (date.getMonth()+1 < 10 ? '0'+(date.getMonth()+1) : date.getMonth()+1) + '-'
+	   let D = (date.getDate() < 10 ? '0'+date.getDate() : date.getDate()) + ' '
+	   let h = (date.getHours() < 10 ? '0'+date.getHours() : date.getHours()) + ':'
+	   let m = (date.getMinutes() < 10 ? '0'+date.getMinutes() : date.getMinutes()) + ':'
+	   let s = (date.getSeconds() < 10 ? '0'+date.getSeconds() : date.getSeconds())
+	   return `${Y}${M}${D}${h}${m}${s}`
 	}
 }
 
@@ -392,4 +397,4 @@ module.exports = {
 	timestampToTime: caimeiApi.timestampToTime,
 	BannerNavigateTo:caimeiApi.BannerNavigateTo,
 	FlooryNavigateTo:caimeiApi.FlooryNavigateTo 
-};
+}

+ 11 - 3
common/config/common.js

@@ -12,6 +12,10 @@ const utils = {
 		//是否为邮箱
 		 return RegExp(/^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/).test(value);
 	},
+	isWebsite: function(value){
+		//是否为网址
+		return RegExp(/^((http|ftp|https):\/\/[a-zA-Z0-9]|[a-zA-Z0-9])[-a-zA-Z0-9]{0,62}(.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+.?$/).test(value);
+	},
 	isMobile: function(value) {
 		//是否为手机号
 		return RegExp(/^1[1-9][0-9]{9}$/).test(value);
@@ -33,15 +37,17 @@ const utils = {
 	isCredit:function(value) {//统一社会信用代码
 	    return RegExp(/^[0-9A-HJ-NPQRTUWXY]{2}\\d{6}[0-9A-HJ-NPQRTUWXY]{10}$/).test(value);
 	},
-	checkPwd: function(value) {
-		//密码为8~20位数字和字母组合
+	checkPwd: function(value) {//密码为8~20位数字和字母组合
 		return RegExp(/^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$/).test(value);
 	},
+	isNoChinese: function(value) {//数字和字母组合
+		return RegExp(/^[A-Za-z0-9]+$/).test(value);
+	},
 	hidePhone:function(value) {
 		return value.replace(/^(\d{3})\d{4}(\d+)/,"$1****$2")
 	},
 	interceptHtmlFn: function(value){
-		return value.replace(/<[^>]+>/g,"")
+		return value ? value.replace(/<[^>]+>/g,"") : value
 	},
 	desensitizationName:function(value){
 		if(null != value && value != undefined){
@@ -165,10 +171,12 @@ module.exports = {
 	trim: utils.trim,
 	isMobile: utils.isMobile,
 	isEmail: utils.isEmail,
+	isWebsite:utils.isWebsite,
 	isFloat: utils.isFloat,
 	isNum: utils.isNum,
 	isEmailCode:utils.isEmailCode,
 	isMobileCode:utils.isMobileCode,
+	isNoChinese:utils.isNoChinese,
 	checkPwd: utils.checkPwd,
 	formatNum:utils.formatNum,
 	rmoney: utils.rmoney,

+ 2 - 3
common/config/wxLogin.js

@@ -29,7 +29,6 @@ const wxLoginAuthorize = async function(){
 const wxLoginQuick = async function(){// 根据微信的code获取用户登录状态:1已登录过 -1未登录过跳转
 		const wechatCode = await authorize.getCode('weixin');// 根据微信的code获取用户登录状态:1已登录过 -1未登录过
 		const getUserInfo = await authorize.getUserInfo('weixin');
-		const params = 
 		newUserService.UserLoginAuthApplets({ 
 			code:wechatCode,
 			encryptedData:getUserInfo.encryptedData,
@@ -42,9 +41,9 @@ const wxLoginQuick = async function(){// 根据微信的code获取用户登录
 			uni.setStorageSync('token',response.data.token)
 			uni.setStorageSync('unionId',response.data.unionId)
 			if(response.data.userIdentity ==1){
-				uni.navigateTo({url:'/seller/pages/index/index'})
+				uni.navigateTo({url:'/pages/seller/index/index'})
 			}else if(response.data.userIdentity === 3){
-				uni.navigateTo({url:'/supplier/pages/index/index'})
+				uni.navigateTo({url:'/pages/supplier/index/index'})
 			}else{
 				uni.switchTab({url:'/pages/tabBar/user/user'})
 			}

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 3
common/css/iconfont.scss


+ 47 - 47
components/cm-custom/custom-floor.vue

@@ -1,17 +1,17 @@
 <template name="headerNavbar">
 	<!-- 二级楼层导航栏 -->
-	<view class='navbar-wrap' :style="{height:navbarHeight+'px',paddingTop:statusBarHeight+'px'}"> 
-	  	<view class="navbar-icon" v-if="navbarData.showCapsule ? navbarData.showCapsule : true" 
+	<view class='navbar-wrap' :style="{height:navbarHeight+'px',paddingTop:statusBarHeight+'px'}"> 
+	  	<view class="navbar-icon" v-if="navbarData.showCapsule ? navbarData.showCapsule : true" 
 			  :style="{top:navbarBtn.top + statusBarHeight+'px;',lineHeight:navbarBtn.height+'px;',left:navbarBtn.right+'px;',width:navbarBtn.height+'px;',height:navbarBtn.height+'px;'}">
 			  <text v-if='haveBack' @click="_goBack" class="iconfont icon-fanhui"></text>
 			  <text v-else  @click="_goHome" class="iconfont icon-shouye"></text>
-	  	</view>
+	  	</view>
 		<view class="navbar-text" :style="{top:navbarBtn.top + statusBarHeight+'px;',height:navbarBtn.height+'px;',fontSize:fontSizeSetting+'px;'}">
-	    	<view class="gosearch-btn" :style="{paddingLeft:navbarBtn.height+'px;',right:(navbarBtn.width+20)+'px;',borderRadius:(navbarBtn.height/2)+'px;',width:(375-navbarBtn.width*2)+'px;',lineHeight:navbarBtn.height+'px;'}">
+	    	<view class="gosearch-btn" :style="{paddingLeft:navbarBtn.height+'px;',right:(navbarBtn.width+20)+'px;',borderRadius:(navbarBtn.height/2)+'px;',width:(375-navbarBtn.width*2)+'px;',lineHeight:navbarBtn.height+'px;'}">
 				<text class="iconfont icon-sousuo" :style="{width:navbarBtn.height+'px;',height:navbarBtn.height+'px;',lineHeight:navbarBtn.height+'px;'}"></text>
-				<view class="input" @click="this.$api.navigateTo(clickPath)">搜索商品/供应商/项目仪器</view>
+				<view class="input" @click="this.$api.navigateTo(clickPath)">搜索商品/项目仪器</view>
 			</view>
-	  	</view>
+	  	</view>
 	</view>
 </template>
 
@@ -43,16 +43,16 @@
 		data() {
 			return{
 				headerType:'',
-				clickPath:'/search/pages/search/search', 
+				clickPath:'/pages/search/search', 
 				haveBack: true, // 是否有返回按钮,true 有 false 没有 若从分享页进入则为 false
-			    statusBarHeight: 0, // 状态栏高度
-			    navbarHeight: 0, // 顶部导航栏高度,
-			    navbarBtn: { // 胶囊位置信息
-			      height: 0,
-			      width: 0,
-			      top: 0,
-			      bottom: 0,
-			      right: 0
+			    statusBarHeight: 0, // 状态栏高度
+			    navbarHeight: 0, // 顶部导航栏高度,
+			    navbarBtn: { // 胶囊位置信息
+			      height: 0,
+			      width: 0,
+			      top: 0,
+			      bottom: 0,
+			      right: 0
 				},
 				platform:'',
 				fontSizeSetting:0
@@ -63,54 +63,54 @@
 			this.fontSizeSetting = this.systeminfo.fontSizeSetting
 			let statusBarHeight = this.systeminfo.statusBarHeight // 状态栏高度
 			let headerPosi = this.headerBtnPosi // 胶囊位置信息
-		    /**
-		     * wx.getMenuButtonBoundingClientRect() 坐标信息以屏幕左上角为原点
-		     * 菜单按键宽度: 87
-		     * 菜单按键高度: 32
-		     * 菜单按键左边界坐标: 278
-		     * 菜单按键上边界坐标: 26
-		     * 菜单按键右边界坐标: 365
-		     * 菜单按键下边界坐标: 58
-		     */
+		    /**
+		     * wx.getMenuButtonBoundingClientRect() 坐标信息以屏幕左上角为原点
+		     * 菜单按键宽度: 87
+		     * 菜单按键高度: 32
+		     * 菜单按键左边界坐标: 278
+		     * 菜单按键上边界坐标: 26
+		     * 菜单按键右边界坐标: 365
+		     * 菜单按键下边界坐标: 58
+		     */
 			let btnPosi = { // 胶囊实际位置,坐标信息不是左上角原点
-			      height: headerPosi.height,
-			      width: headerPosi.width,
-			      // 胶囊top - 状态栏高度
-			      top: headerPosi.top - statusBarHeight,
-			      // 胶囊bottom - 胶囊height - 状态栏height (现胶囊bottom 为距离导航栏底部的长度)
-			      bottom: headerPosi.bottom - headerPosi.height - statusBarHeight,
-			      // 屏幕宽度 - 胶囊right
-			      right: this.systeminfo.screenWidth - headerPosi.right
+			      height: headerPosi.height,
+			      width: headerPosi.width,
+			      // 胶囊top - 状态栏高度
+			      top: headerPosi.top - statusBarHeight,
+			      // 胶囊bottom - 胶囊height - 状态栏height (现胶囊bottom 为距离导航栏底部的长度)
+			      bottom: headerPosi.bottom - headerPosi.height - statusBarHeight,
+			      // 屏幕宽度 - 胶囊right
+			      right: this.systeminfo.screenWidth - headerPosi.right
 			}
 			console.log(btnPosi)
 			let haveBack;
 			if (getCurrentPages().length === 1) { // 当只有一个页面时
-			     haveBack = false;
+			     haveBack = false;
 			} else {
-			     haveBack = true;
+			     haveBack = true;
 			}
-		    this.haveBack=haveBack, // 获取是否是通过分享进入的小程序
-		    this.statusBarHeight=statusBarHeight,
-		    this.navbarHeight= headerPosi.bottom + btnPosi.bottom, // 原胶囊bottom + 现胶囊bottom
+		    this.haveBack=haveBack, // 获取是否是通过分享进入的小程序
+		    this.statusBarHeight=statusBarHeight,
+		    this.navbarHeight= headerPosi.bottom + btnPosi.bottom, // 原胶囊bottom + 现胶囊bottom
 			this.$parent.navbarHeight = this.navbarHeight
 			this.$parent.statusBarHeight = this.statusBarHeight
 			// console.log(this.navbarHeight);
-		    this.navbarBtn=btnPosi
+		    this.navbarBtn=btnPosi
 		},
 		onLoad(){
 			
 		},
 		methods:{
 			_goBack: function () {
-		      	uni.navigateBack({
-		        	delta: this.page
-		      	});
-		    },
-		    _goHome: function () {
-		      	uni.switchTab({
-		        	url: '/pages/tabBar/home/index'
-		      	})
-		    }
+		      	uni.navigateBack({
+		        	delta: this.page
+		      	});
+		    },
+		    _goHome: function () {
+		      	uni.switchTab({
+		        	url: '/pages/tabBar/home/index'
+		      	})
+		    }
 		},
 		onShow(){
 	

+ 47 - 47
components/cm-custom/custom-p.vue

@@ -1,17 +1,17 @@
 <template name="headerNavbar">
 	<!-- 自定义导航栏 -->
-	<view class='navbar-wrap' :class="[headerColor? 'bg-color' : 'no-color']" :style="{height:navbarHeight+'px',paddingTop:statusBarHeight+'px'}"> 
-	  	<view class="navbar-icon" v-if="navbarData.showCapsule ? navbarData.showCapsule : true" 
+	<view class='navbar-wrap' :class="[headerColor? 'bg-color' : 'no-color']" :style="{height:navbarHeight+'px',paddingTop:statusBarHeight+'px'}"> 
+	  	<view class="navbar-icon" v-if="navbarData.showCapsule ? navbarData.showCapsule : true" 
 			  :style="{top:navbarBtn.top + statusBarHeight+'px;',lineHeight:navbarBtn.height+'px;',left:navbarBtn.right+'px;',width:navbarBtn.height+'px;',height:navbarBtn.height+'px;'}">
 			  <text v-if='haveBack' @click="_goBack" class="iconfont icon-fanhui"></text>
 			  <text v-else  @click="_goHome" class="iconfont icon-shouye"></text>
-	  	</view>
+	  	</view>
 		<view class="navbar-text" :style="{top:navbarBtn.top + statusBarHeight+'px;',height:navbarBtn.height+'px;',fontSize:fontSizeSetting+'px;'}">
-	    	<view class="gosearch-btn" :style="{paddingLeft:navbarBtn.height+'px;',right:(navbarBtn.width+20)+'px;',borderRadius:(navbarBtn.height/2)+'px;',width:(375-navbarBtn.width*2)+'px;',lineHeight:navbarBtn.height+'px;'}">
+	    	<view class="gosearch-btn" :style="{paddingLeft:navbarBtn.height+'px;',right:(navbarBtn.width+20)+'px;',borderRadius:(navbarBtn.height/2)+'px;',width:(375-navbarBtn.width*2)+'px;',lineHeight:navbarBtn.height+'px;'}">
 				<text class="iconfont icon-sousuo" :style="{width:navbarBtn.height+'px;',height:navbarBtn.height+'px;',lineHeight:navbarBtn.height+'px;'}"></text>
-				<view class="input" @click="this.$api.navigateTo(clickPath)">搜索商品/供应商/项目仪器</view>
+				<view class="input" @click="this.$api.navigateTo(clickPath)">搜索商品/项目仪器</view>
 			</view>
-	  	</view>
+	  	</view>
 	</view>
 </template>
 
@@ -45,16 +45,16 @@
 		data() {
 			return{
 				headerType:'',
-				clickPath:'/search/pages/search/search', 
+				clickPath:'/pages/search/search', 
 				haveBack: true, // 是否有返回按钮,true 有 false 没有 若从分享页进入则为 false
-			    statusBarHeight: 0, // 状态栏高度
-			    navbarHeight: 0, // 顶部导航栏高度,
-			    navbarBtn: { // 胶囊位置信息
-			      height: 0,
-			      width: 0,
-			      top: 0,
-			      bottom: 0,
-			      right: 0
+			    statusBarHeight: 0, // 状态栏高度
+			    navbarHeight: 0, // 顶部导航栏高度,
+			    navbarBtn: { // 胶囊位置信息
+			      height: 0,
+			      width: 0,
+			      top: 0,
+			      bottom: 0,
+			      right: 0
 				},
 				platform:'',
 				fontSizeSetting:0
@@ -65,54 +65,54 @@
 			this.fontSizeSetting = this.systeminfo.fontSizeSetting
 			let statusBarHeight = this.systeminfo.statusBarHeight // 状态栏高度
 			let headerPosi = this.headerBtnPosi // 胶囊位置信息
-		    /**
-		     * wx.getMenuButtonBoundingClientRect() 坐标信息以屏幕左上角为原点
-		     * 菜单按键宽度: 87
-		     * 菜单按键高度: 32
-		     * 菜单按键左边界坐标: 278
-		     * 菜单按键上边界坐标: 26
-		     * 菜单按键右边界坐标: 365
-		     * 菜单按键下边界坐标: 58
-		     */
+		    /**
+		     * wx.getMenuButtonBoundingClientRect() 坐标信息以屏幕左上角为原点
+		     * 菜单按键宽度: 87
+		     * 菜单按键高度: 32
+		     * 菜单按键左边界坐标: 278
+		     * 菜单按键上边界坐标: 26
+		     * 菜单按键右边界坐标: 365
+		     * 菜单按键下边界坐标: 58
+		     */
 			let btnPosi = { // 胶囊实际位置,坐标信息不是左上角原点
-			      height: headerPosi.height,
-			      width: headerPosi.width,
-			      // 胶囊top - 状态栏高度
-			      top: headerPosi.top - statusBarHeight,
-			      // 胶囊bottom - 胶囊height - 状态栏height (现胶囊bottom 为距离导航栏底部的长度)
-			      bottom: headerPosi.bottom - headerPosi.height - statusBarHeight,
-			      // 屏幕宽度 - 胶囊right
-			      right: this.systeminfo.screenWidth - headerPosi.right
+			      height: headerPosi.height,
+			      width: headerPosi.width,
+			      // 胶囊top - 状态栏高度
+			      top: headerPosi.top - statusBarHeight,
+			      // 胶囊bottom - 胶囊height - 状态栏height (现胶囊bottom 为距离导航栏底部的长度)
+			      bottom: headerPosi.bottom - headerPosi.height - statusBarHeight,
+			      // 屏幕宽度 - 胶囊right
+			      right: this.systeminfo.screenWidth - headerPosi.right
 			}
 			console.log(btnPosi)
 			let haveBack;
 			if (getCurrentPages().length === 1) { // 当只有一个页面时
-			     haveBack = false;
+			     haveBack = false;
 			} else {
-			     haveBack = true;
+			     haveBack = true;
 			}
-		    this.haveBack=haveBack, // 获取是否是通过分享进入的小程序
-		    this.statusBarHeight=statusBarHeight,
-		    this.navbarHeight= headerPosi.bottom + btnPosi.bottom, // 原胶囊bottom + 现胶囊bottom
+		    this.haveBack=haveBack, // 获取是否是通过分享进入的小程序
+		    this.statusBarHeight=statusBarHeight,
+		    this.navbarHeight= headerPosi.bottom + btnPosi.bottom, // 原胶囊bottom + 现胶囊bottom
 			this.$parent.navbarHeight = this.navbarHeight
 			this.$parent.statusBarHeight = this.statusBarHeight
 			// console.log(this.navbarHeight);
-		    this.navbarBtn=btnPosi
+		    this.navbarBtn=btnPosi
 		},
 		onLoad(){
 			
 		},
 		methods:{
 			_goBack: function () {
-		      	uni.navigateBack({
-		        	delta: this.page
-		      	});
-		    },
-		    _goHome: function () {
-		      	uni.switchTab({
-		        	url: '/pages/tabBar/home/index'
-		      	})
-		    }
+		      	uni.navigateBack({
+		        	delta: this.page
+		      	});
+		    },
+		    _goHome: function () {
+		      	uni.switchTab({
+		        	url: '/pages/tabBar/home/index'
+		      	})
+		    }
 		},
 		onShow(){
 	

+ 7 - 7
components/cm-module/activity/activity_01.vue → components/cm-module/activity/activity.vue

@@ -1,10 +1,10 @@
 <template>
 	<view>
 		<view class="tui-alert-class tui-alert-box" :class="[show?'tui-alert-show':'tui-alert-hide']"  @touchmove.stop.prevent="discard">
-			<image src="http://static.caimei365.com/app/meibohui/meibo_coupon_01.png" mode="" @click.stop="handleClick"></image>
+			<image src="https://static.caimei365.com/app/img/icon/icon-coupon-alert@2x.png" mode="" @click.stop="handleClick"></image>
 			<text class="iconfont icon-2guanbi" @click.stop="handleClickCancel"></text>
 		</view>
-	</view>
+	</view> 
 </template>
 
 <script>
@@ -72,9 +72,9 @@
 		background: rgba(0,0,0,.2);
 		z-index: 99999;
 		image{
-			width: 606rpx;
-			height: 510rpx;
-			margin-top: 130rpx;
+			width: 580rpx;
+			height: 802rpx;
+			margin-top: 100rpx;
 		}
 	}
 	.tui-alert-show {
@@ -95,8 +95,8 @@
 		text-align: center;
 		color: #FFFFFF;
 		position: absolute;
-		top: 30%;
-		left: 69%;
+		top: 25%;
+		right: 4%;
 		font-size: 52rpx;
 	}
 	.tui-alert-mask-show {

+ 258 - 0
components/cm-module/activity/activityBean.vue

@@ -0,0 +1,258 @@
+ <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%' : '13%'}" @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){
+				console.log('type================》',type)
+				this.bgImagePath = `https://static.caimei365.com/app/img/icon/bean-icon-${type}@2x.png`
+				console.log(this.bgImagePath)
+			},
+			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>

+ 255 - 0
components/cm-module/activity/pageFloor.vue

@@ -0,0 +1,255 @@
+<template>
+	<view>
+		<view class="page-content clearfix" v-for="(page, index) in pageFloorList" :key="index">
+			<view class="tui-group-name" v-if="page.floorContent">
+				<view class="tui-group-title">
+					<view class="tui-group-l">{{ page.title }}</view>
+					<view
+						class="tui-group-r"
+						v-if="isSwiperTemp.indexOf(page.floorContent.templateType) === -1"
+						@click="NavToDetailPage(page)"
+					>
+						<text>更多</text> <text class="iconfont icon-xiayibu"></text>
+					</view>
+				</view>
+				<view class="tui-sub__desc">{{ page.detail }}</view>
+			</view>
+			<!-- 图文模板 -->
+			<template v-if="page.floorContent.templateType == '3'">
+				<articleA :pageData="page" :userIdentity="userIdentity"></articleA>
+			</template>
+			<template v-if="page.floorContent.templateType == '4'">
+				<articleB :pageData="page" :userIdentity="userIdentity"></articleB>
+			</template>
+			<template v-if="page.floorContent.templateType == '5'">
+				<articleC :pageData="page" :userIdentity="userIdentity"></articleC>
+			</template>
+			<template v-if="page.floorContent.templateType == '6'">
+				<articleD :pageData="page" :userIdentity="userIdentity"></articleD>
+			</template>
+			<!-- 图片模板 -->
+			<template v-if="page.floorContent.templateType == '1'">
+				<pictureA :pageData="page" :userIdentity="userIdentity"></pictureA>
+			</template>
+			<template v-if="page.floorContent.templateType == '2'">
+				<pictureB :pageData="page" :userIdentity="userIdentity"></pictureB>
+			</template>
+			<template v-if="page.floorContent.templateType == '7'">
+				<pictureC :pageData="page" :userIdentity="userIdentity"></pictureC>
+			</template>
+			<template v-if="page.floorContent.templateType == '8'">
+				<pictureD :pageData="page" :userIdentity="userIdentity"></pictureD>
+			</template>
+			<template v-if="page.floorContent.templateType == '9'">
+				<pictureE :pageData="page" :userIdentity="userIdentity"></pictureE>
+			</template>
+			<template v-if="page.floorContent.templateType == '10'">
+				<pictureF :pageData="page" :userIdentity="userIdentity"></pictureF>
+			</template>
+			<!-- 产品模板 -->
+			<template v-if="page.floorContent.templateType == '11'">
+				<productI :pageData="page" :userIdentity="userIdentity"></productI>
+			</template>
+			<template v-if="page.floorContent.templateType == '12'">
+				<productJ :pageData="page" :userIdentity="userIdentity"></productJ>
+			</template>
+			<template v-if="page.floorContent.templateType == '13'">
+				<productK :pageData="page" :userIdentity="userIdentity"></productK>
+			</template>
+			<template v-if="page.floorContent.templateType == '14'">
+				<productG :pageData="page" :userIdentity="userIdentity"></productG>
+			</template>
+			<template v-if="page.floorContent.templateType == '15'">
+				<productD :pageData="page" :userIdentity="userIdentity"></productD>
+			</template>
+			<template v-if="page.floorContent.templateType == '16'">
+				<productC :pageData="page" :userIdentity="userIdentity"></productC>
+			</template>
+			<template v-if="page.floorContent.templateType == '17'">
+				<productB :pageData="page" :userIdentity="userIdentity"></productB>
+			</template>
+			<template v-if="page.floorContent.templateType == '18'">
+				<productA :pageData="page" :userIdentity="userIdentity"></productA>
+			</template>
+			<template v-if="page.floorContent.templateType == '19'">
+				<productE :pageData="page" :userIdentity="userIdentity"></productE>
+			</template>
+			<template v-if="page.floorContent.templateType == '20'">
+				<productF :pageData="page" :userIdentity="userIdentity"></productF>
+			</template>
+			<template v-if="page.floorContent.templateType == '21'">
+				<productH :pageData="page" :userIdentity="userIdentity"></productH>
+			</template>
+            <!-- 直播模板 -->
+            <template v-if="page.floorContent.templateType == '22'">
+            	<liveA :pageData="page" :userIdentity="userIdentity"></liveA>
+            </template>
+            <template v-if="page.floorContent.templateType == '23'">
+            	<liveC :pageData="page" :userIdentity="userIdentity"></liveC>
+            </template>
+            <template v-if="page.floorContent.templateType == '24'">
+            	<liveA :pageData="page" :userIdentity="userIdentity"></liveA>
+            </template>
+            <template v-if="page.floorContent.templateType == '25'">
+            	<liveB :pageData="page" :userIdentity="userIdentity"></liveB>
+            </template>
+            <!-- 视频模板 -->
+            <template v-if="page.floorContent.templateType == '26'">
+            	<pictureH :pageData="page" :userIdentity="userIdentity"></pictureH>
+            </template>
+            <template v-if="page.floorContent.templateType == '27'">
+            	<pictureC :pageData="page" :userIdentity="userIdentity"></pictureC>
+            </template>
+            <template v-if="page.floorContent.templateType == '28'">
+            	<pictureG :pageData="page" :userIdentity="userIdentity"></pictureG>
+            </template>
+            <template v-if="page.floorContent.templateType == '29'">
+            	<pictureD :pageData="page" :userIdentity="userIdentity"></pictureD>
+            </template>
+		</view>
+	</view>
+</template>
+
+<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 pictureA from '@/components/cm-module/pcitureTemplate/templateA.vue'
+import pictureB from '@/components/cm-module/pcitureTemplate/templateB.vue'
+import pictureC from '@/components/cm-module/pcitureTemplate/templateC.vue'
+import pictureD from '@/components/cm-module/pcitureTemplate/templateD.vue'
+import pictureE from '@/components/cm-module/pcitureTemplate/templateE.vue'
+import pictureF from '@/components/cm-module/pcitureTemplate/templateF.vue'
+import pictureG from '@/components/cm-module/pcitureTemplate/templateG.vue'
+import pictureH from '@/components/cm-module/pcitureTemplate/templateH.vue'
+//引入图文模板
+import articleA from '@/components/cm-module/articleTemplate/templateA.vue'
+import articleB from '@/components/cm-module/articleTemplate/templateB.vue'
+import articleC from '@/components/cm-module/articleTemplate/templateC.vue'
+import articleD from '@/components/cm-module/articleTemplate/templateD.vue'
+// 直播楼层模板
+import liveA from '@/components/cm-module/liveTemplate/templateA.vue' 
+import liveB from '@/components/cm-module/liveTemplate/templateB.vue' 
+import liveC from '@/components/cm-module/liveTemplate/templateC.vue' 
+
+export default {
+	name: 'pageFloor',
+	components: {
+		productA,
+		productB,
+		productC,
+		productD,
+		productE,
+		productF,
+		productG,
+		productH,
+		productI,
+		productJ,
+		productK,
+		pictureA,
+		pictureB,
+		pictureC,
+		pictureD,
+		pictureE,
+		pictureF,
+        pictureG,
+        pictureH,
+		articleA,
+		articleB,
+		articleC,
+		articleD,
+        liveA,
+        liveC, 
+        liveB
+	},
+	props: {
+		list: {
+			type: Array
+		},
+		pageType: {
+			type: Number
+		},
+		userIdentity: {
+			type: Number
+		}
+	},
+	data() {
+		return {
+			pageFloorList: [],
+			isSwiperTemp:['1','2','9','21','5','7','22','23','24','25','27']
+		}
+	},
+	created() {
+		this.initData(this.list)
+	},
+	computed: {},
+	methods: {
+		initData(data) {
+			this.pageFloorList = data
+		},
+		NavToDetailPage(page) {
+			//跳转
+			this.$api.navigateTo(
+				`/pages/h5/activity/activity-floorMore?pageType=${this.pageType}&floorId=${page.id}&title=${
+					page.title
+				}`
+			)
+		}
+	}
+}
+</script>
+
+<style lang="scss">
+.page-content {
+	background-color: #f7f7f7;
+	width: 100%;
+	height: auto;
+	box-sizing: border-box;
+	padding: 0 24rpx;
+	float: left;
+}
+.tui-group-name {
+	width: 100%;
+	height: 92rpx;
+	padding: 20rpx 0;
+}
+.tui-group-title {
+	width: 100%;
+	float: left;
+	.tui-group-l {
+		float: left;
+		font-size: 34rpx;
+		font-weight: bold;
+		text-align: left;
+		line-height: 49rpx;
+		color: #333;
+	}
+	.tui-group-r {
+		float: right;
+		font-size: $font-size-26;
+		text-align: right;
+		line-height: 49rpx;
+		color: #999999;
+		.icon-xiayibu {
+			font-size: $font-size-30;
+			color: #999999;
+		}
+	}
+}
+.tui-sub__desc {
+	width: 100%;
+	float: left;
+	color: rgba(153, 153, 153, 0.9);
+	font-size: $font-size-26;
+}
+</style>

+ 253 - 0
components/cm-module/activityContact/index.vue

@@ -0,0 +1,253 @@
+<template>
+    <view class="cm-contact" v-if="activityEntryVisiable || contactVisiable">
+        <!-- 未展开状态 -->
+        <view class="cm-close-box" v-show="!isActive">
+            <view class="cm-icon cm-entry" @click="handleToggleEntry(true)" v-if="activityEntryVisiable"></view>
+            <view class="cm-icon cm-bround cm-open-btn" @click="handleToggleAcitve(true)" v-if="contactVisiable"></view>
+        </view>
+        <!-- 展开状态 -->
+        <view class="cm-close-box" v-show="contactVisiable && isActive">
+            <view class="cm-icon cm-entry" @click="handleToggleEntry(true)" v-if="activityEntryVisiable"></view>
+            <view class="cm-icon cm-bround cm-mobile" @click="handelShowMobile">
+                <view class="cm-dialog" v-show="mobileVisiable">
+                    <view class="cm-dialog-content content1">
+                        <view class="cm-item"> <text>展会咨询电话:13766896620</text> </view>
+                        <view class="cm-line line1"></view>
+                        <view class="cm-item"> <text>业务咨询电话:13766896620</text> </view>
+                    </view>
+                </view>
+            </view>
+            <view class="cm-icon cm-bround cm-ewm" @click="handelShowWechat">
+                <view class="cm-dialog" v-show="wechatVisiable">
+                    <view class="cm-dialog-content content2">
+                        <view class="cm-item">
+                            <image
+                                src="https://static.caimei365.com/app/img/icon2/cm_entry_bg.png"
+                                mode="widthFix"
+                            ></image>
+                            <text>展会咨询微信</text>
+                        </view>
+                        <view class="cm-line line2"></view>
+                        <view class="cm-item">
+                            <image
+                                src="https://static.caimei365.com/app/img/icon2/cm_entry_bg.png"
+                                mode="widthFix"
+                            ></image>
+                            <text>业务咨询微信</text>
+                        </view>
+                    </view>
+                </view>
+            </view>
+            <view class="cm-icon cm-bround cm-close-btn" @click="handleToggleAcitve(false)"></view>
+        </view>
+        <view class="mask cover" v-if="activityEntryVisiable && entryVisiable">
+            <view class="content">
+                <image src="https://static.caimei365.com/app/img/icon2/cm_entry_bg.png" mode="widthFix" @click="navigator"></image>
+                <view class="mask-close" @click="handleToggleEntry(false)"></view>
+            </view>
+        </view>
+        <view class="mask" v-if="mobileVisiable || wechatVisiable" @click="handleClose"></view>
+    </view>
+</template>
+
+<script>
+export default {
+    props: {
+        pageInfo: {
+            type: Object
+        }
+    },
+    data() {
+        return {
+            isActive: true,
+            mobileVisiable: false,
+            wechatVisiable: false,
+            entryVisiable: true,
+            activityEntryVisiable: false,
+            contactVisiable: false
+        }
+    },
+    created() {
+        this.contactVisiable = this.pageInfo.infoBarStatus === 1
+        this.activityEntryVisiable = this.initActivityEntry(
+            this.pageInfo.redPacketBeginTime,
+            this.pageInfo.redPacketEndTime
+        )
+        console.log(this.pageInfo)
+    },
+    methods: {
+        // 是否展开
+        handleToggleAcitve(active) {
+            this.isActive = active
+            this.mobileVisiable = false
+            this.wechatVisiable = false
+        },
+        // 显示微信二维码
+        handelShowWechat() {
+            this.wechatVisiable = !this.wechatVisiable
+            this.mobileVisiable = false
+        },
+        // 显示联系电话
+        handelShowMobile() {
+            this.mobileVisiable = !this.mobileVisiable
+            this.wechatVisiable = false
+        },
+        // 隐藏微信二维码和联系电话
+        handleClose() {
+            this.mobileVisiable = false
+            this.wechatVisiable = false
+        },
+        // 显示活动入口
+        handleToggleEntry(visiable) {
+            this.entryVisiable = visiable
+        },
+		navigator(){
+			this.$api.navigateTo('/pages/user/coupon/coupon-collection')
+		},
+        // 初始化红包入口状态
+        initActivityEntry(begin, end) {
+            const nowTime = new Date().getTime()
+            const beginTime = new Date(begin).getTime()
+            const endTime = new Date(end).getTime()
+            return nowTime >= beginTime && nowTime <= endTime
+        }
+    }
+}
+</script>
+
+<style lang="scss" scoped>
+.cm-contact {
+    position: fixed;
+    right: 20rpx;
+    top: 30%;
+}
+.cm-close-box {
+    position: relative;
+    z-index: 9;
+    .cm-icon {
+        position: relative;
+        width: 80rpx;
+        height: 80rpx;
+        margin: 10rpx 0;
+        &.cm-bround {
+            border-radius: 50%;
+        }
+        &.cm-entry {
+            height: 88rpx;
+            background: url(https://static.caimei365.com/app/img/icon2/cm_entry_icon.png) no-repeat center;
+            background-size: 80rpx;
+        }
+        &.cm-open-btn {
+            background: rgba(0, 0, 0, 0.4) url(https://static.caimei365.com/app/img/icon2/cm_open.png) no-repeat center;
+            background-size: 39rpx;
+        }
+        &.cm-mobile {
+            background: rgba(0, 0, 0, 0.4) url(https://static.caimei365.com/app/img/icon2/cm_mobile.png) no-repeat
+                center;
+            background-size: 39rpx;
+        }
+        &.cm-ewm {
+            background: rgba(0, 0, 0, 0.4) url(https://static.caimei365.com/app/img/icon2/cm_ewm.png) no-repeat center;
+            background-size: 39rpx;
+        }
+        &.cm-close-btn {
+            background: rgba(0, 0, 0, 0.4) url(https://static.caimei365.com/app/img/icon2/cm_close.png) no-repeat center;
+            background-size: 39rpx;
+        }
+    }
+}
+.cm-dialog {
+    top: 0;
+    right: 110rpx;
+    position: absolute;
+    padding: 20rpx;
+    background: rgb(255, 92, 0);
+    border-radius: 16rpx;
+    &::after {
+        position: absolute;
+        top: 20rpx;
+        right: -20rpx;
+        content: '';
+        display: block;
+        width: 0;
+        height: 0;
+        border-top: 16rpx solid transparent;
+        border-bottom: 16rpx solid transparent;
+        border-left: 20rpx solid rgb(255, 92, 0);
+    }
+    .cm-line {
+        &.line1 {
+            width: 100%;
+            height: 1px;
+            background: #fff;
+            margin: 10rpx 0;
+        }
+        &.line2 {
+            width: 1px;
+            height: 200rpx;
+            background: #eee;
+            margin: 0 10rpx;
+        }
+    }
+    .content1 {
+        .cm-item {
+            color: #fff;
+            text {
+                display: block;
+                width: 400rpx;
+                font-size: 28rpx;
+                text-align: center;
+            }
+        }
+    }
+    .content2 {
+        display: flex;
+        justify-content: space-between;
+        align-items: center;
+        .cm-item {
+            color: #fff;
+            text {
+                display: block;
+                font-size: 28rpx;
+                text-align: center;
+                margin-top: 10rpx;
+            }
+            image {
+                width: 240rpx;
+                height: 240rpx;
+            }
+        }
+    }
+}
+.mask {
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    position: fixed;
+    z-index: 1;
+    top: 0;
+    left: 0;
+    width: 100vw;
+    height: 100vh;
+    .content {
+        position: relative;
+        .mask-close {
+            z-index: 9;
+            position: absolute;
+            top: -40rpx;
+            right: 40rpx;
+            width: 64rpx;
+            height: 64rpx;
+            background: url(https://static.caimei365.com/app/img/icon2/cm_float_close.png) no-repeat center;
+            background-size: 60rpx 60rpx;
+        }
+        image {
+            width: 560rpx;
+        }
+    }
+    &.cover {
+        z-index: 999;
+        background: rgba(0, 0, 0, 0.4);
+    }
+}
+</style>

+ 112 - 0
components/cm-module/articleTemplate/templateA.vue

@@ -0,0 +1,112 @@
+<template>
+	<view class="container article-list">
+		<view
+			class="section clearfix"
+			v-for="(item, index) in productList"
+			:key="index"
+			@click="navigaitionTo(item)"
+		>
+			<image :src="item.appletsImage" mode="aspectFit" class="cover"></image>
+			<view class="article-text">
+				<view class="title">{{ item.name }}</view>
+				<view class="content" v-text="item.content"></view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+import caimeiApi from '@/common/config/caimeiApi.js'
+export default {
+	data() {
+		return {
+			productList: []
+		}
+	},
+	props: {
+		pageData: {
+			type: Object
+		},
+		userIdentity: {
+			type: Number
+		},
+		flag: {
+			type: Boolean,
+			default: false
+		}
+	},
+	created() {
+		this.initData(this.pageData)
+	},
+	methods: {
+		initData(data) {
+			if (this.flag) {
+				this.productList = data.floorImageList
+			} else {
+				this.productList = data.floorImageList.slice(0, 4)
+			}
+		},
+		navigaitionTo(item) {
+			if (item.adsImage === '' && item.linkType === -1) {
+				return
+			}else if(item.linkType === -1){
+				uni.navigateTo({
+					url:`/pages/h5/activity/activity-detail?adsImage=${item.adsImage}&title=${item.name}`
+				})
+			}else{
+				caimeiApi.FlooryNavigateTo(item)
+			}
+		}
+	}
+}
+</script>
+
+<style lang="scss">
+.article-list {
+	width: 100%;
+	height: auto;
+	box-sizing: border-box;
+	.section {
+		width: 702rpx;
+		height: 250rpx;
+		background: #ffffff;
+		margin-bottom: 24rpx;
+		box-sizing: border-box;
+		padding: 24rpx;
+		border-radius: 16rpx;
+		.cover {
+			float: left;
+			width: 202rpx;
+			height: 202rpx;
+			margin-right: 20rpx;
+		}
+		.article-text {
+			width: 432rpx;
+			float: left;
+			.title {
+				font-size: 26rpx;
+				height: 37rpx;
+				color: #3a3a3a;
+				margin-bottom: 18rpx;
+				word-break: break-all;
+				overflow: hidden;
+				text-overflow: ellipsis;
+				display: -webkit-box;
+				-webkit-line-clamp: 1;
+				-webkit-box-orient: vertical;
+			}
+			.content {
+				font-size: 24rpx;
+				line-height: 38rpx;
+				color: #8a8a8a;
+				word-break: break-all;
+				overflow: hidden;
+				text-overflow: ellipsis;
+				display: -webkit-box;
+				-webkit-line-clamp: 4;
+				-webkit-box-orient: vertical;
+			}
+		}
+	}
+}
+</style>

+ 111 - 0
components/cm-module/articleTemplate/templateB.vue

@@ -0,0 +1,111 @@
+<template>
+	<view class="container article-list">
+		<view class="section clearfix" v-for="(item,index) in productList" :key="index" @click="navigaitionTo(item)">
+			<image :src="item.appletsImage" mode="aspectFit" class="cover"></image>
+			<view class="article-text">
+				<view class="title">{{item.name}}</view>
+				<view class="content" v-text="item.content"></view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+import caimeiApi from '@/common/config/caimeiApi.js'
+export default {
+	data(){
+		return{
+			productList:[]
+		}
+	},
+	props:{
+		pageData: {
+			type: Object
+		},
+		userIdentity: {
+			type: Number
+		},
+		flag:{
+			type:Boolean,
+			default:false
+		}
+	},
+	created() {
+		this.initData(this.pageData);
+	},
+	methods:{
+		initData(data){
+			if(this.flag){
+				this.productList = data.floorImageList
+			}else{
+				this.productList = data.floorImageList.slice(0,2);
+			}
+		},
+		navigaitionTo(item){
+			if (item.adsImage === '' && item.linkType === -1) {
+				return
+			}else if(item.linkType === -1){
+				uni.navigateTo({
+					url:`/pages/h5/activity/activity-detail?adsImage=${item.adsImage}&title=${item.name}`
+				})
+			}else{
+				caimeiApi.FlooryNavigateTo(item)
+			}
+		}
+	}
+}
+</script>
+
+<style lang="scss">
+.article-list {
+	width: 100%;
+	height: auto;
+	box-sizing: border-box;
+	.section {
+		width: 702rpx;
+		height: 546rpx;
+		background: #ffffff;
+		margin-bottom: 24rpx;
+		box-sizing: border-box;
+		border-radius: 16rpx;
+		.cover {
+			width: 702rpx;
+			height: 360rpx;
+			border-radius: 16rpx 16rpx 0 0;
+			overflow: hidden;
+			.cover-gg{
+				width: 702rpx;
+				height: 360rpx;
+			}
+		}
+		.article-text {
+			width: 702rpx;
+			box-sizing: border-box;
+			padding: 28rpx 30rpx 28rpx;
+			.title {
+				font-size: 26rpx;
+				height: 37rpx;
+				color: #3a3a3a;
+				margin-bottom: 16rpx;
+				word-break: break-all;
+				overflow: hidden;
+				text-overflow: ellipsis;
+				display: -webkit-box;
+				-webkit-line-clamp: 1;
+				-webkit-box-orient: vertical;
+			}
+			.content {
+				font-size: 24rpx;
+				line-height: 40rpx;
+				color: #8a8a8a;
+				word-break: break-all;
+				overflow: hidden;
+				text-overflow: ellipsis;
+				display: -webkit-box;
+				-webkit-line-clamp: 2;
+				-webkit-box-orient: vertical;
+			}
+		}
+	}
+}
+</style>

+ 113 - 0
components/cm-module/articleTemplate/templateC.vue

@@ -0,0 +1,113 @@
+<template>
+	<scroll-view scroll-x="true" class="container article-list">
+		<view class="section" v-for="(item,index) in productList" :key="index" @click="navigaitionTo(item)">
+			<view class="cover">
+				<image :src="item.appletsImage" mode="widthFix" class="cover-gg"></image>
+			</view>
+			<view class="article-text">
+				<view class="title">{{item.name}}</view>
+				<view class="content" v-text="item.content"></view>
+			</view>
+		</view>
+	</scroll-view>
+</template>
+
+<script>
+import caimeiApi from '@/common/config/caimeiApi.js'
+export default {
+	data(){
+		return{
+			productList:[]
+		}
+	},
+	props:{
+		pageData: {
+			type: Object
+		},
+		userIdentity: {
+			type: Number
+		}
+	},
+	created() {
+		this.initData(this.pageData);
+	},
+	methods:{
+		initData(data){
+			this.productList = data.floorImageList;
+		},
+		navigaitionTo(item){
+			if (item.adsImage === '' && item.linkType === -1) {
+				return
+			}else if(item.linkType === -1){
+				uni.navigateTo({
+					url:`/pages/h5/activity/activity-detail?adsImage=${item.adsImage}&title=${item.name}`
+				})
+			}else{
+				caimeiApi.FlooryNavigateTo(item)
+			}
+		}
+	}
+}
+</script>
+
+<style lang="scss">
+.article-list {
+	width: 750rpx;
+	margin-left: -24rpx;
+	height: auto;
+	box-sizing: border-box;
+	white-space: nowrap;
+	.section {
+		display: inline-block;
+		width: 310rpx;
+		height: 392rpx;
+		background: #ffffff;
+		box-sizing: border-box;
+		border-radius: 16rpx;
+		margin-right: 24rpx;
+		vertical-align: middle;
+		&:first-child{
+			margin-left: 24rpx;
+		}
+		.cover {
+			width: 310rpx;
+			height: 220rpx;
+			border-radius: 16rpx 16rpx 0 0;
+			overflow: hidden;
+			.cover-gg{
+				width: 310rpx;
+				height: 220rpx;
+			}
+		}
+		.article-text {
+			width: 310rpx;
+			box-sizing: border-box;
+			padding: 24rpx;
+			.title {
+				font-size: 26rpx;
+				height: 37rpx;
+				color: #3a3a3a;
+				margin-bottom: 16rpx;
+				word-break: break-all;
+				overflow: hidden;
+				text-overflow: ellipsis;
+				display: -webkit-box;
+				-webkit-line-clamp: 1;
+				-webkit-box-orient: vertical;
+			}
+			.content {
+				white-space: normal;
+				font-size: 24rpx;
+				line-height: 40rpx;
+				color: #8a8a8a;
+				word-break: break-all;
+				overflow: hidden;
+				text-overflow: ellipsis;
+				display: -webkit-box;
+				-webkit-line-clamp: 2;
+				-webkit-box-orient: vertical;
+			}
+		}
+	}
+}
+</style>

+ 119 - 0
components/cm-module/articleTemplate/templateD.vue

@@ -0,0 +1,119 @@
+<template>
+	<view class="container article-list clearfix">
+		<view class="section" v-for="(item,index) in productList" :key="index" @click="navigaitionTo(item)">
+			<image :src="item.appletsImage" mode="aspectFit" class="cover"></image>
+			<view class="article-text">
+				<view class="title">{{item.name}}</view>
+				<view class="content" v-text="item.content"></view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+import caimeiApi from '@/common/config/caimeiApi.js'
+export default {
+	data(){
+		return{
+			productList:[]
+		}
+	},
+	props:{
+		pageData: {
+			type: Object
+		},
+		userIdentity: {
+			type: Number
+		},
+		flag:{
+			type:Boolean,
+			default:false
+		}
+	},
+	created() {
+		this.initData(this.pageData);
+	},
+	methods:{
+		initData(data){
+			if(this.flag){
+				this.productList = data.floorImageList
+			}else{
+				this.productList = data.floorImageList.slice(0,4);
+			}
+		},
+		navigaitionTo(item){
+			if (item.adsImage === '' && item.linkType === -1) {
+				return
+			}else if(item.linkType === -1){
+				uni.navigateTo({
+					url:`/pages/h5/activity/activity-detail?adsImage=${item.adsImage}&title=${item.name}`
+				})
+			}else{
+				caimeiApi.FlooryNavigateTo(item)
+			}
+		}
+	}
+}
+</script>
+
+<style lang="scss">
+.article-list {
+	width: 100%;
+	height: auto;
+	box-sizing: border-box;
+	.section {
+		width: 339rpx;
+		height: 412rpx;
+		background: #ffffff;
+		box-sizing: border-box;
+		border-radius: 16rpx;
+		float: left;
+		margin-right: 24rpx;
+		margin-top: 24rpx;
+		&:nth-child(2n){
+			margin-right: 0;
+		}
+		&:nth-child(1),&:nth-child(2){
+			margin-top: 0;
+		}
+		.cover {
+			width: 339rpx;
+			height: 240rpx;
+			border-radius: 16rpx 16rpx 0 0;
+			overflow: hidden;
+			.cover-gg{
+				width: 339rpx;
+				height: 240rpx;
+			}
+		}
+		.article-text {
+			width: 339rpx;
+			box-sizing: border-box;
+			padding: 24rpx;
+			.title {
+				font-size: 26rpx;
+				height: 37rpx;
+				color: #3a3a3a;
+				margin-bottom: 16rpx;
+				word-break: break-all;
+				overflow: hidden;
+				text-overflow: ellipsis;
+				display: -webkit-box;
+				-webkit-line-clamp: 1;
+				-webkit-box-orient: vertical;
+			}
+			.content {
+				font-size: 24rpx;
+				line-height: 40rpx;
+				color: #8a8a8a;
+				word-break: break-all;
+				overflow: hidden;
+				text-overflow: ellipsis;
+				display: -webkit-box;
+				-webkit-line-clamp: 2;
+				-webkit-box-orient: vertical;
+			}
+		}
+	}
+}
+</style>

+ 2112 - 0
components/cm-module/cart-components/index.vue

@@ -0,0 +1,2112 @@
+<template name="navbars">
+	<view>
+		<tui-skeleton v-if="skeletonShow" backgroundColor="#fafafa" borderRadius="10rpx" :isLoading	="true" :loadingType="5"></tui-skeleton>
+		<view class="container-cart-main tui-skeleton" :style="{paddingTop:isshowDelbtn ? '0rpx':'80rpx'}">
+			<template v-if="pathType == 0">
+				<view class="foot-check-delbtn" v-if="!isshowDelbtn && goodsList.length>0">
+					<view class="foot-text">共<text>{{kindCount}}</text>件商品</view>
+					<view class="delBtn" @tap.stop="showDelManager">删除</view>
+				</view>
+			</template>
+			<template v-else>
+				<view class="foot-check-delbtn" v-if="!isshowDelbtn && goodsList.length>0" :style="{top:CustomBar+'px'}">
+					<view class="foot-text">共<text>{{kindCount}}</text>件商品</view>
+					<view class="delBtn" @tap.stop="showDelManager">删除</view>
+				</view>
+			</template>
+			<view v-if="!isEmpty" class="container-cart"> 
+				<view class="cart-content" :style="{paddingBottom :isIphoneX ? '130rpx' : '100rpx'}">
+					<view class="goods-list">
+						<view v-for="(item, index) in goodsList" :key="index" class="goods-item clearfix">
+							<view class="shoptitle">
+								<!--选择商店的全部商品"-->
+								<view class="checkbox-box" @click.stop="checkShop(item)">
+									<view class="checkbox iconfont" :class="[item.checked ?'icon-yixuanze':'icon-weixuanze']"></view>
+								</view>
+								<view v-if="item.promotions" class="floor-item-act">
+									<view class="floor-tags" @click.stop="clickPopupShow(item,2)">{{item.promotions.name}}</view>	
+								</view>
+								<view class="text">{{item.name}}</view> 
+								<view class="text-coupon" @click="showPopup(0,item)" v-if="item.couponsLogo">领券</view>
+							</view>
+							<view class="productlist">
+								<view 	class="goods-pros" v-for="(pros,idx) in item.cartList" :key="idx" >
+									<view class="goods-pros-t">
+										<!--选择商品-->
+										<view class="checkbox-box" @click.stop="ischeck(item,pros)">
+											<view class="checkbox iconfont" :class="[pros.productsChecked ? 'icon-yixuanze':'icon-weixuanze']"></view>
+										</view>
+										<view class="pros-img" @click.stop="navToListPage(pros.productId)"	><image :src="pros.image ? pros.image:''" alt="" /></view>
+										<view class="pros-product">
+											<view class="producttitle" @click.stop="navToListPage(pros.productId)"	>{{pros.name}}</view>
+											<view class="productspec">规格:{{pros.unit ? pros.unit : ''}}</view>
+											<view class="productprice">
+												<!--使用过滤器对总价改变-->
+												<view class="price" :class="PromotionsFormat(pros.promotions) ? 'disabled' : ''">
+													<text>¥</text>
+													{{ (PromotionsFormat(pros.promotions) ? pros.originalPrice : pros.price)  | NumFormat }}
+												</view>
+												<view class="count" v-if="pros.validFlag == 2 "  :class="[isshowDelbtn ? 'none':'show']">
+													<text class="count-tips" v-if="pros.number<pros.min">起订量:{{pros.min}}</text>
+													<text class="count-tips step" v-if="pros.isStep">购买量必须为起订量的整数倍</text>
+													<view class="number-box">
+														<view  class="iconfont icon-jianhao" @click="changeCountSub(item,pros)"></view>
+														<input class="btn-input" type="number" maxlength='4' v-model="pros.number" @blur="changeNnmber($event,item,pros)" @focus="changeInput(pros)">
+														<view  class="iconfont icon-jiahao"  @click="changeCountAdd(item,pros)"></view>
+													</view>
+												</view>
+											</view>
+											<view v-show="pros.actStatus==1" class="floor-item-act">
+												<view v-if="PromotionsFormat(pros.promotions)"  class="floor-tags" @click.stop="clickPopupShow(pros,1)">
+													{{pros.promotions.name}}
+													<text v-if ="pros.promotions!=null && pros.promotions.type!=3">
+														:¥{{ pros.promotions == null ? '0.00' : pros.promotions.touchPrice | NumFormat}}
+													</text>
+												</view>
+												<view v-else-if="pros.promotions.type!=3" class="floor-tags" @click.stop="clickPopupShow(pros,2)">{{pros.promotions.name}}</view>	
+											</view>
+											<view  v-if="pros.actStatus == null  &&  pros.ladderFlag == 1" class="floor-item-act">
+												<view class="floor-tags" @click.stop="clickPopupShow(pros,2)">阶梯价格</view>	
+											</view>
+										</view>	
+									</view>
+								</view>
+							</view>	
+							<view class="goods-pros-b clearfix" :class="[isshowDelbtn ? 'none':'show']" >
+								<view class="sum-none" v-if="item.reducedPrice>0">
+									<text class="money-sign">¥</text>
+									<text class="money">{{ item.totalOriginalPrice | NumFormat }}</text>
+									<text class="money-reduced">减<text>¥{{ item.reducedPrice | NumFormat}}</text></text>
+								</view>
+								<view class="sum">合计:<text class="money"><text class="money-sign">¥</text>{{item.totalPrice | NumFormat}}</text></view>
+							</view>
+						</view>
+					</view>	
+					<view class="failure-list" v-if="failureList.length>0">
+						<view class="failure-title">
+							<view class="title-txt">失效商品<text>{{failureList.length}}件</text></view>
+							<view class="title-btn" @click.stop="deletefailureList"><text class="butto">清空失效商品</text></view>
+						</view>
+						<view class="productlist">
+							<view class="goods-pros" v-for="(failure,failureIdx) in failureList" :key="failureIdx" >
+								<view class="goods-pros-t" @click.stop="failureToProduct(failure)">
+									<!--选择商品-->
+									<view class="checkbox-box" @click.stop="ischeckFailure(failure)" v-if="isshowDelbtn">
+										<button class="checkbox iconfont" 
+												:class="[ failure.productsChecked ? 'icon-yixuanze':'icon-weixuanze']">
+										</button>
+									</view>
+									<text class="img-tip">失效</text>
+									<view class="pros-img">
+										<image :src="failure.image ? failure.image:''" alt="" />
+									</view>
+									<view class="pros-product">
+										<view class="producttitle">{{failure.name}}</view>
+										<view class="productspec">规格:{{failure.unit ? failure.unit : ''}}</view>
+										<view class="productstate">{{failureStateText(failure.status)}}</view>
+									</view>
+									<view class="pros-marks" v-if="failure.isFailureLayer"></view>
+								</view>
+							</view>
+						</view>	
+					</view>
+				</view>
+				<!-- 脚部菜单 -->
+				<template v-if="pathType == 0">
+					<view class="footer">
+						<view class="footer-le">
+							<view class="foot-check checkbox-box" @tap.stop="checkAll()">
+								<button class="checkbox iconfont" :class="[isCheckAll?'icon-yixuanze':'icon-weixuanze']"></button> 
+								<view class="text">全选</view>
+							</view>
+						
+							<view class="sum">
+								<view class="sum-price" :class="isDiscount ? '' : 'none'">
+									总价:<text class="money-sign">¥</text><text class="money">{{(allPrice - couponPrice) | NumFormat}}</text>
+								</view>
+								<view class="sum-none"  v-if="isDiscount">
+									<text class="money-reduced">共减<text>¥{{ totalDiscountAmount | NumFormat}}</text></text>
+									<text class="money-popup" @click="showPopup(1)">优惠明细<text class="iconfont icon-xiangshangjiantou"></text></text>
+								</view>
+							</view>
+						</view>
+						<view v-if="!isshowDelbtn" class="footer-ri" >
+							<view class="btn hanld-btn" @tap="toConfirmation">去结算({{allCount}})</view>
+						</view>
+						<view v-else class="footer-del">
+							<view class="btn btn-cancel" @tap.stop="hideDelManage">取消</view>
+							<view class="btn btn-confirm" @tap.stop="deleteList">删除</view>
+						</view>
+					</view>
+				</template>
+				<template v-else>
+					<view class="footer" :style="{paddingBottom :isIphoneX ? '68rpx' : '0rpx'}">
+						<view class="footer-le">
+							<view class="foot-check checkbox-box" @tap.stop="checkAll()">
+								<button class="checkbox iconfont" :class="[isCheckAll?'icon-yixuanze':'icon-weixuanze']"></button> 
+								<view class="text">全选</view>
+							</view>
+							<view class="sum">
+								<view class="sum-price" :class="isDiscount ? '' : 'none'">
+									总价:<text class="money-sign">¥</text><text class="money">{{(allPrice - couponPrice) | NumFormat}}</text>
+								</view>
+								<view class="sum-none" v-if="isDiscount">
+									<text class="money-reduced">共减<text>¥{{ totalDiscountAmount | NumFormat}}</text></text>
+									<text class="money-popup" @click="showPopup(1)">优惠明细<text class="iconfont icon-xiangshangjiantou"></text></text>
+								</view>
+							</view>
+						</view>
+						<view v-if="!isshowDelbtn" class="footer-ri" >
+							<view class="btn hanld-btn" @tap="toConfirmation">去结算({{ allCount }})</view>
+						</view>
+						<view v-else class="footer-del">
+							<view class="btn btn-cancel" @tap.stop="hideDelManage">取消</view>
+							<view class="btn btn-confirm" @tap.stop="deleteList">删除</view>
+						</view>
+					</view>
+				</template>
+			</view>
+			<view v-else class="cart-content empty">
+				<view  class="empty-container">
+					<image class="empty-container-image" src="https://img.caimei365.com/group1/M00/03/71/Cmis2F3wna6AWdWzAAGlgAP0das422.png" mode="aspectFit"></image>
+					<text class="error-text">购物车空空如也,快去商城逛逛吧~</text>
+					<view class="login-btn"  @click="goIndex">去商城</view>
+				</view>
+			</view>
+		</view>
+		<!-- 促销活动弹窗 -->
+		<activi-popup :product="handlerPros" :popupShow="popupShow"></activi-popup>
+		<!-- 透明模态层 -->
+		<modal-layer v-if='modallayer'></modal-layer>
+		<!-- 优惠券 -->
+		<tui-bottom-popup :radius="true" :show="popupShow0" @close="hidePopup(0)">
+			<view class="tui-popup-box clearfix">
+				<view class="title">优惠券</view>
+				<view class="tui-popup-close" @click="hidePopup(0)">
+					<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="#e15616" 
+								  sliderBgColor="#e15616">
+					</coupon-tabs>
+				</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">
+												<text class="tags">{{ coupon.couponType | TypeFormat }}</text>
+											</view>
+											<view class="list-cell-texts" :class="currentTab == 1 || currentTab == 2 ? 'none' : ''">
+												<text v-if="coupon.couponType == 0">
+													{{ coupon.productType && coupon.productType == 1 ? '全商城商品通用' : '仅可购买指定商品'  }}
+												</text>
+												<text v-if="coupon.couponType == 1">
+													{{ coupon.categoryType == 1 ? '仅限购买产品类商品' : '仅限购买仪器类商品' }}
+												</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">
+												<view class="icon-used-btn receive" v-if="currentTab == 0" @click="receiveCoupon(coupon)">领取</view>
+												<view class="icon-used-btn make" v-if="currentTab == 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>
+				<view class="tui-popup-close" @click="hidePopup(1)">
+					<text class="iconfont icon-iconfontguanbi"></text>
+				</view>
+				<div class="tui-popup-main coupon">
+					<view class="tui-popup-coupon">
+						<view class="tui-popup-h1">
+							<view class="tui-popup-text left">商品总额</view>
+							<view class="tui-popup-text right bold">¥{{allPrice | NumFormat}}</view>
+						</view>
+						<view class="tui-popup-h1" v-if="reducedPrice>0">
+							<view class="tui-popup-text left">促销满减</view>
+							<view class="tui-popup-text right bold red">-¥{{ reducedPrice | NumFormat}}</view>
+						</view>
+						<view class="tui-popup-h1" v-if="couponPrice>0">
+							<view class="tui-popup-text left">优惠券</view>
+							<view class="tui-popup-text right bold red">-¥{{ couponPrice | NumFormat}}</view>
+						</view>
+						<view class="tui-popup-h1">
+							<view class="tui-popup-text left bold">共减</view>
+							<view class="tui-popup-text right bold red">-¥{{ totalDiscountAmount | NumFormat }}</view>
+						</view>
+						<view class="tui-popup-h1">
+							<view class="tui-popup-text left bold">总价</view>
+							<view class="tui-popup-text right bold">¥{{ (allPrice - totalDiscountAmount) | NumFormat }}</view>
+						</view>
+					</view>
+				</div>
+			</view>	
+		</tui-bottom-popup>	
+	</view>
+</template>
+
+<script>
+	import authorize from '@/common/config/authorize.js'
+	import tuiSkeleton from "@/components/tui-skeleton/tui-skeleton"
+	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 modalLayer from "@/components/modal-layer"
+	import { mapState,mapMutations } from 'vuex';
+	export default{
+		name:"cartComponents",
+		props:{
+			pathType:{
+				type:Number
+			}
+		},
+		components:{
+			tuiSkeleton,
+			tuiLoadmore,
+			tuiNomore,
+			activiPopup,
+			couponTabs,
+			modalLayer
+		},
+		data() {
+			return{
+				StaticUrl:this.$Static, 				// 静态图片路径
+				CustomBar:this.CustomBar,				// 顶部导航栏高度
+				isIphoneX:this.$store.state.isIphoneX,
+				userId:'',
+				alertType:'',
+				isStock:'',
+				handlerPros:{},							// 监听单挑促销商品
+				failureList:[],							// 失效商品列表
+				goodsList:[],							// 购物车的商品
+				promotionsList:[],						// 促销列表
+				totalCouponList:[],						// 优惠券算列表	
+				eligibleCoupons:[],						// 最终需要用到优惠券	
+				delGoodsList:'',						// 要删除的商品
+				setGoodData:'', 						// 确认订单的商品
+				isCheckAll:false,						// 是否全选
+				kindCount:0,							// 购物车宝贝数量
+				allPrice:0,								// 所有价格
+				totalOriginalPrice:0,					// 所有原价价
+				reducedPrice:0,							// 满减
+				couponPrice:0,							// 优惠金额
+				totalDiscountAmount:0,					// 总共减去金额
+				isDiscount:false,						// 控制显示优惠明细
+				allCount:0,								// 被选中的产品数量
+				isModallayer:false,
+				skeletonShow:true,
+				isshowDelbtn:false,
+				isDisabled: false, 						// 供应商/店铺全选是否禁用状态
+				isNoConfim:false,
+				isEmpty:false,							// 显示空购物车
+				scrollHeight: 'auto',
+				nomoreText: '上拉显示更多',
+				hasNextPage: false,
+				loadding: false,
+				pullUpOn: true,
+				pullFlag: true,
+				pageSize: 10,
+				pageNum: 1,
+				submitIds:[],
+				popupShow:false,
+				popupShow0:false,
+				popupShow1:false,
+				currentTab: 1,
+				navbar: [
+					{ name: "未领取",num:0 }, 
+					{ name: "已领取",num:0 } 
+				],
+				couponParam:{							// 获取弹窗优惠券领取参数
+					userId:0,
+					shopId:0,
+					status:1,
+					source:2
+				},
+				productCouponList:[],					// 优惠券弹窗列表
+				isCouponEmpty:false,
+			}
+		},
+		created(){
+			this.setScrollHeight();
+			console.log('pathType',this.pathType)
+		},
+		computed: {
+			...mapState(['hasLogin','userInfo','isWxAuthorize'])
+		},
+		watch:{//深度监听所有数据,每次改变重新计算总价和总数
+		    goodsList:{
+		        deep:true,
+		        handler(val,oldval){
+		            this.totalPeice()
+		            this.totalCount()
+		        }
+		    }
+		},
+		filters:{
+			NumFormat(value) {//处理金额
+				return Number(value).toFixed(2);
+			},
+		    totalprice(val,count){//单件商品的价格 × 数量
+		        return (val * count).toFixed(2)
+		    },
+			TypeFormat(value) {
+				switch (value) {
+					case 0:
+						return  '活动券';
+						break;
+					case 1:
+						return  '品类券';
+						break;
+					case 2:
+						return  '用户专享券';
+						break;
+					case 3:
+						return  '店铺券';
+						break;
+					case 4:
+						return  '新用户券';
+						break;
+				}
+			}
+		},	
+		methods:{
+			initData(){
+				this.isModallayer = false //遮罩层 防止多次点击
+				this.skeletonShow = true //预加载圆圈
+				this.isCheckAll=false//是否全选
+				this.submitIds = []
+				this.couponPrice = 0
+				this.totalDiscountAmount = 0
+				this.isDiscount = false
+				this.eligibleCoupons = []
+				this.$api.getStorage().then((resolve) => {
+					this.userId = this.couponParam.userId = resolve.userId ? resolve.userId : 0;
+					this.initGetCartGoodsList();
+				})	
+			},
+			initLogin(){
+				this.$api.redirectTo('/pages/login/login')
+			},
+			clickPopupShow(pros,type){
+				this.popupShow = true;
+				this.handlerPros = pros;
+			},
+			setScrollHeight() {
+				// 窗口高度-footer高度
+				const {windowHeight, pixelRatio} = uni.getSystemInfoSync();
+				setTimeout(()=> {
+					const query = uni.createSelectorQuery().in(this);
+					query.selectAll('.footer').boundingClientRect();
+					query.exec(res => {
+						this.windowHeight = windowHeight;
+						if(res[0][0]) {
+							this.scrollHeight = windowHeight - res[0][0].height;
+						}
+					})
+				}, 500)
+			},
+			initGetCartGoodsList(){//初始化购物车 index:1
+				this.ProductService.QueryShoppingCartList({userId:this.userId}).then(response =>{
+					this.skeletonShow = false
+					let data = response.data
+					this.kindCount = data.kindCount
+					this.promotionsList = data.promotions
+					this.totalCouponList = data.couponList
+					this.$store.commit('updateAllNum',data.kindCount)
+					if( data.list.length > 0 || data.invalid.length > 0){
+						this.isEmpty =false
+					}else{
+						this.isEmpty =true
+					}
+					if(data.list && data.list.length > 0 ){
+						this.goodsList = data.list;
+						this.goodsList.forEach((item,index) => {
+							item.cartList.forEach(pros => {
+								pros.shopID = item.shopID;
+								pros.isStep = false
+								if(pros.step === 2){ 
+									if(pros.number % pros.min != 0){
+										pros.number = pros.min
+										this.totalShopPeice()
+										this.updateShoppogNum(pros)
+									}
+								}
+							})
+						})
+						this.totalShopPeice()
+					} else {
+						this.goodsList = [];
+					}
+					if( data.invalid && data.invalid.length > 0){
+						let newFailureList = [],isFailureLayer;
+						data.invalid.forEach((failure,index) => {
+							if(failure.status == 1 || failure.status == 2) {
+								isFailureLayer = true
+							}else{
+								isFailureLayer = false
+							}
+							newFailureList.push(Object.assign({},failure,{isFailureLayer:isFailureLayer}))
+						})
+						this.failureList = newFailureList
+					} else {
+						this.failureList = [];
+					}
+				}).catch(error =>{
+					this.$util.msg(error.msg,2000);
+				})
+			},		
+			ischeckFailure(failure){
+				failure.productsChecked = !failure.productsChecked
+				this.updateCheckAllBtn()
+			},
+			ischeck(item,pro){//为未选中的时候改变为true,反之为true
+				pro.productsChecked = !pro.productsChecked;
+				if(pro.productsChecked) {
+					if(!this.submitIds.includes(pro.productID*1)){
+						this.submitIds.push(pro.productID);
+					}
+				} else {
+					var lent = this.submitIds.indexOf(pro.productID*1);
+					if(lent >=0 ){
+						this.submitIds.splice(lent, 1);
+					}
+				}
+				this.updateProductCheckedAllBtn(item);
+				this.updateCheckAllBtn();
+				
+			},
+			updateProductCheckedAllBtn(item) {// 单独每个供应商的勾选判断
+				let productsList = item.cartList,
+					productsCheckedLength = 0,
+					disabledLength = 0;
+				if(this.isshowDelbtn) {
+					productsList.forEach(pros => {
+						if(pros.productsChecked) {
+							productsCheckedLength++;
+						}
+					})
+				} else {
+					productsList.forEach(pros => {
+						if(pros.productsChecked) {
+							productsCheckedLength++;
+						}
+					})
+				}
+				item.checked = productsCheckedLength === productsList.length;
+			},
+			updateCheckAllBtn() {// 全选勾选判断
+				let goodsCheckedLength = 0,
+					goodsList = this.goodsList,
+					failureList = this.failureList;
+				goodsList.forEach(item => {
+					if(item.checked) {
+						goodsCheckedLength++;
+					}
+				})
+				failureList.forEach(failureItem=>{
+					if(failureItem.productsChecked){
+						goodsCheckedLength++;
+					}
+				})
+				if(this.isshowDelbtn){
+					this.isCheckAll = goodsCheckedLength === goodsList.length + failureList.length;
+				}else{
+					this.isCheckAll = goodsCheckedLength === goodsList.length;
+				}
+			},
+			checkShop(item){//与单选商品类似
+				item.checked = !item.checked;
+				this.setProductChecked(item);
+				this.updateCheckAllBtn();
+			},
+			setProductChecked(item) {
+				item.cartList.forEach(pros=>{
+					if(item.checked) {
+						pros.productsChecked = true;
+						if(!this.submitIds.includes(pros.productId*1)){
+							this.submitIds.push(pros.productId);
+						}
+					} else {
+						pros.productsChecked = false;
+						var lent = this.submitIds.indexOf(pros.productId*1);
+						if(lent >=0 ){
+							this.submitIds.splice(lent, 1);
+						}
+					}
+				})
+			},
+			updateBothCheckBtn() {
+				if(this.isshowDelbtn) {
+					// 当管理删除按钮出现时,失效的商品可被选择
+					this.goodsList.forEach((item)=>{
+						item.checked = this.isCheckAll;
+						this.setProductChecked(item);
+					})
+					//删除按钮 全选包括失效商品勾选
+					this.failureList.forEach(failureItem=>{
+						failureItem.productsChecked = this.isCheckAll;
+					})
+				} else {
+					this.goodsList.forEach((item)=>{
+						item.checked = this.isCheckAll && !item.isDisabled;
+						this.setProductChecked(item);
+					})
+				}
+			},
+			checkAll(){//全选方法内调用方法
+			    this.isCheckAll = !this.isCheckAll;
+				if(!this.isCheckAll){
+					this.popupShow1 = false
+				}
+				this.updateBothCheckBtn();     
+			},
+			totalShopPeice(){//每次所属会所下的商品增减重新计算合计价格&减去含有下架的商品
+				let touchPrice = 0;
+				let reducedPrice = 0;//商铺合计满减价
+				this.goodsList.map((item,index)=>{
+					//计算店铺满减后店铺合计
+					if(item.promotions && item.promotions.mode == 2){
+						let prosPrice=0;
+						let totalOriginalPrice = 0;//商铺合计原价
+						item.cartList.forEach(pros=>{
+							prosPrice += pros.price*pros.number
+							totalOriginalPrice += pros.originalPrice*pros.number
+						})
+						if(prosPrice >= item.promotions.touchPrice){
+							item.totalPrice = prosPrice - item.promotions.reducedPrice  
+							item.reducedPrice = item.promotions.reducedPrice
+							item.totalOriginalPrice = totalOriginalPrice
+						}else{
+							item.reducedPrice = 0  //统计合计价格
+							item.totalPrice = prosPrice
+						}
+					}else{//以下为计算除店铺满减以外的单品满减以及正常商品合计
+						let _totalPrice = 0;
+						let _reducedPrice = 0;
+						let _totalOriginalPrice =0;
+						item.cartList.forEach(pros=>{
+							let _price = pros.price*pros.number
+							_totalOriginalPrice += pros.price*pros.number;
+							if(pros.promotions && pros.promotions.type != 2 && pros.promotions.mode == 2){
+								if(_price >= pros.promotions.touchPrice){
+									_price = _price - pros.promotions.reducedPrice
+									_reducedPrice += pros.promotions.reducedPrice
+								}
+								_totalPrice +=  _price
+							}else{
+								_reducedPrice = 0;
+								_totalPrice += pros.price*pros.number;
+							}
+						})
+						item.reducedPrice = _reducedPrice
+						item.totalOriginalPrice = _totalOriginalPrice
+						item.totalPrice = _totalPrice
+					}
+				})
+			},
+			totalPeice(){//计算总价格,每次调用此方法,将初始值为0,遍历价格并累加
+				let totalPrice = 0;
+				let reducedPrice = 0;
+				let originalPrice = 0;
+				this.goodsList.forEach((item,index)=>{
+					let supplierPrice = 0;
+					let supplierReducedPrice = 0;
+					item.totalprice = 0;
+					item.reducedprice = 0;
+					item.originalprice = 0;
+					item.cartList.forEach(pros=>{	
+						if(pros.productsChecked){								
+							supplierPrice += pros.price*pros.number;
+							// 单品满减
+							if(pros.promotions && pros.promotions.type*1===1 && pros.promotions.mode*1===2){
+								// 单品满减-重新计算供应商总价/满减金额
+								if(pros.price*pros.number >= pros.promotions.touchPrice){
+									supplierPrice -= pros.promotions.reducedPrice;
+									supplierReducedPrice += pros.promotions.reducedPrice;
+								}
+							}
+						}	
+					})
+					// 店铺满减
+					if(item.promotions && item.promotions.mode*1===2){
+						// 店铺满减-计算供应商总价/满减金额
+						if(supplierPrice >= item.promotions.touchPrice){
+							supplierPrice -= item.promotions.reducedPrice;
+							supplierReducedPrice += item.promotions.reducedPrice;
+						}
+					}
+					item.totalprice = supplierPrice;
+					item.reducedprice = supplierReducedPrice;
+					item.originalprice = (supplierPrice+supplierReducedPrice);
+					totalPrice += item.totalprice;
+					reducedPrice += item.reducedprice;
+					originalPrice += item.originalprice;
+				})
+				 // 总促销计算
+				this.promotionsList.forEach(promotions =>{
+					// 凑单满减
+					if(promotions.mode*1===2 && promotions.type*1===2){
+						let total = 0;
+						 promotions.productList.forEach(pros=>{
+							if (this.submitIds.includes(pros.productId*1)){
+								total += pros.number * pros.price;
+							}
+						});
+						if(total>=promotions.touchPrice){
+							totalPrice -= promotions.reducedPrice;
+							reducedPrice += promotions.reducedPrice;
+						}
+					}
+				});
+				// 最后统计商品原价
+				this.totalOriginalPrice = originalPrice;
+				// 最后满减金额 = 店铺减去金额 + 单品减去金额 + 凑单减去金额
+				this.reducedPrice = reducedPrice;
+				// 最终合计价格 = 	店铺满减合计 + 单品满减  + 正常合计 + 凑单满减			
+				this.allPrice = totalPrice ;
+				// 计算优惠券
+				if(this.totalCouponList.length>0){
+					this.calculationCoupon()
+				}
+				// 最后满减金额 = 店铺减去金额 + 单品减去金额 + 凑单减去金额
+				this.totalDiscountAmount = this.reducedPrice + this.couponPrice;
+				// 控制显示优惠明细
+				if(this.totalDiscountAmount > 0 ){
+					this.isDiscount = true
+				}else{
+					this.isDiscount = false
+				}
+			},
+			totalCount(){//计算总数量
+			    this.allCount = 0
+				let prosAllCount=0
+				let validCount = 0
+				let validList =[];
+				let productsList =[];
+			    this.goodsList.forEach(item=>{
+					productsList = item.cartList
+					productsList.forEach(pros=>{
+						if(pros.productsChecked){
+							prosAllCount+=parseInt(pros.number);
+							this.allCount = prosAllCount
+						}
+					})
+			    })
+			},		 
+			calculationCoupon(){// 优惠券计算
+				const eligibleCoupons = [];
+				this.goodsList.forEach((shop,index)=>{
+					shop.cartList.forEach(pros=>{	
+						if(pros.productsChecked){		
+							this.totalCouponList.map((coupon,index)=>{//循环优惠券
+								const couponType = coupon.couponType;
+								if(couponType == 0){// 活动券
+									if(coupon.productType == 1){// 活动券-全商城商品
+										if(this.allPrice>=coupon.touchPrice){
+											eligibleCoupons.push(coupon)
+											eligibleCoupons.sort((a,b)=> b.couponAmount - a.couponAmount )
+										}
+									}else if(coupon.productType == 2){// 活动券-指定商品
+										if(coupon.productIds && coupon.productIds.includes(pros.productId)){
+											if(this.allPrice>=coupon.touchPrice){
+												eligibleCoupons.push(coupon)
+												eligibleCoupons.sort((a,b)=> b.couponAmount - a.couponAmount )
+											}
+										}else{
+											return false
+										}
+									}
+								// 品类券适用于产品或者仪器,购买产品类或仪器类的商品,商品金额达到优惠标准即可使用优惠券	
+								}else if(couponType == 1){// 品类券 categoryType(commodityType) : 1 产品  2 仪器 
+									if( coupon.categoryType && coupon.categoryType == pros.commodityType){
+										if(this.allPrice>=coupon.touchPrice){
+											eligibleCoupons.push(coupon)
+											eligibleCoupons.sort((a,b)=> b.couponAmount - a.couponAmount )
+										}
+									}
+								// 适用于商城全部商品
+								}else if(couponType == 2 || couponType == 4){// 用户专享券和新用户券
+									if(this.allPrice>=coupon.touchPrice){
+										eligibleCoupons.push(coupon)
+										eligibleCoupons.sort((a,b)=> b.couponAmount - a.couponAmount )
+									}
+								// 店铺券适用于某个供应商的全部商品	
+								}else if(couponType == 3){// 店铺券 supplierId
+									if(coupon.shopId && pros.supplierId == coupon.shopId){
+										if(this.allPrice>=coupon.touchPrice){
+											eligibleCoupons.push(coupon)
+											eligibleCoupons.sort((a,b)=> b.couponAmount - a.couponAmount )
+										}
+									}
+								}
+							})
+						}	
+					})
+				})
+				if(eligibleCoupons.length>0){
+					this.eligibleCoupons.push(eligibleCoupons[0])
+					this.couponPrice = this.eligibleCoupons.sort((a,b)=> b.couponAmount - a.couponAmount)[0].couponAmount
+				}
+			},
+			checkenTotalPrice(){
+				
+			},
+			changeCountAdd(item,pros){//商品数量加加
+				if(pros.step === 2){
+					pros.isStep = false
+					pros.number += pros.min
+					this.processActivityPrice(pros)
+					this.isStock = false
+				}else{
+					pros.number++
+					this.processActivityPrice(pros)
+					this.isStock = false
+				}
+				this.updateShoppogNum(pros)
+				this.totalShopPeice();
+			},
+			changeCountSub(item,pros){//商品数量减减
+				if(pros.number<=pros.min){
+					pros.number= pros.min
+					this.$util.msg(`该商品最小起订量为${pros.min}`,2000);
+					return
+				}else{
+					if(pros.step === 2){
+						pros.isStep = false
+						pros.number -= pros.min
+					}else{
+						pros.number--
+					}
+					this.processActivityPrice(pros)
+				}
+				this.updateShoppogNum(pros)
+				this.totalShopPeice();
+			},
+			changeInput(pros){//输入商品数量更新
+				pros.isStep = false
+			},
+			changeNnmber(e,item,pros){//输入商品数量更新
+				let _value = Number(e.detail.value);
+				if(!this.$api.isNumber(_value)){
+					pros.number = pros.min
+				}else if(_value < pros.min){	
+					this.$util.msg(`该商品最小起订量为${pros.min}`,2000);
+					pros.number = pros.min
+				}else if(_value % pros.min != 0){
+					pros.isStep = true
+					pros.number = pros.min
+				}else{
+					pros.isStep = false
+					pros.number = e.detail.value
+					this.processActivityPrice(pros)
+				}
+				this.updateShoppogNum(pros)
+				this.totalShopPeice();
+			},
+			processActivityPrice(pros){//单独处理活动价格和阶梯价格
+				let ladderPriceList = pros.ladderPrices;
+				if(pros.ladderFlag == '0' || pros.actStatus == 1){
+					pros.price = pros.price
+				}else{
+					ladderPriceList.forEach((item,index)=>{
+						if(pros.number>=item.buyNum){
+							pros.price = item.buyPrice
+						}
+					})
+				}
+			},
+			updateShoppogNum(pros){//加减购物车商品更新到后台
+				let params ={userID:this.userId,productID:pros.productId,productCount:pros.number}
+				this.ProductService.ShoppingCartUpdate(params).then(response =>{
+					this.isshowDelbtn = false;
+					this.initGetCartGoodsList();
+				}).catch(error =>{
+					this.$util.msg(error.msg,2000);
+				})
+			 },
+			toConfirmation(){//跳转确认订单页面			
+				let setGoodsList=[];
+				this.goodsList.forEach(res=>{
+					let products = res.cartList
+					products.forEach(pros=>{
+						if(pros.productsChecked){
+						    setGoodsList.push(pros.productId)
+						}
+					})
+				})
+				if(setGoodsList == ''){
+					this.$util.msg("请先选择结算商品~",2000);
+					return
+				}else{
+					this.isNoConfim = false
+					this.goodsList.forEach(el=>{
+						el.cartList.forEach(pros=>{
+							if(pros.productsChecked){
+							   if(pros.number<pros.min){
+								   this.isNoConfim = true
+							   }
+							}
+						})
+					})
+					if(this.isNoConfim){
+						this.$util.modal('','有商品的购买量没达到最小起订量,请修改数量后再次提交结算','去修改','',false,() =>{})
+						return;
+					}
+					let productID = '';
+					this.goodsList.forEach(el=>{//获取勾选的商品ID拼接字符串逗号隔开,最后一个逗号去掉
+						el.cartList.forEach(pros=>{
+							if(pros.productsChecked){
+							   productID += pros.productId+','
+							}
+						})
+					})
+					let cartPramsData={
+							allPrice:this.allPrice,
+							allCount:this.allCount,
+							productID:productID.substring(0,productID.lastIndexOf(',')),
+							productCount:''
+						}
+					// 友盟埋点购物车去结算点击事件
+					if(process.env.NODE_ENV != 'development'){
+						this.$uma.trackEvent('Um_Event_shoppingCartConfirmOrder', {
+							Um_Key_PageName: '去结算',
+							Um_Key_SourcePage: '底部菜单购物车',
+						})
+					}	
+					this.$api.navigateTo(`/pages/user/order/create-order?data=${JSON.stringify({data:cartPramsData})}`)
+				}
+			},
+			showDelManager(){//显示删除商品管理
+				this.isshowDelbtn = true;
+				if(this.isCheckAll) {
+					this.updateBothCheckBtn();	
+				} else {
+					this.goodsList.forEach(item => {
+						if(item.checked) {
+							item.cartList.forEach(pros => {
+								pros.productsChecked = true;
+							})
+						}
+					})
+					this.updateCheckAllBtn();
+				}
+				// 失效也被勾选
+				this.failureList.forEach(failureItem => {
+					if(failureItem.isFailureLayer){
+						failureItem.isFailureLayer = false
+					}
+				})
+			},
+			hideDelManage(){//隐藏删除商品管理			
+				this.isshowDelbtn = false;
+				let isFailureLayer,newFailureList =[];
+				if(this.isCheckAll) {
+					this.updateBothCheckBtn();	
+				} else {
+					// 失效商品取消勾选
+					this.goodsList.forEach(item => {
+						if(item.isDisabled) {
+							item.checked = false;
+						}
+						item.cartList.forEach(pros => {
+							if(pros.validFlag == 3) {
+								pros.productsChecked = false;
+							}
+						})
+					})
+					this.updateCheckAllBtn();
+				}
+				this.failureList.forEach((failure,index) => {
+					if(failure.failureState == 1 || failure.failureState == 2) {
+						isFailureLayer = true
+					}else{
+						isFailureLayer = false
+					}
+					newFailureList.push(Object.assign({},failure,{isFailureLayer:isFailureLayer}))
+				})
+				this.failureList = newFailureList;
+			},		
+			deleteList(){//删除购物车商品	
+				this.delGoodsList=[];
+				this.goodsList.forEach(delitem=>{
+					let products = delitem.cartList
+					products.forEach(pros=>{
+						if(pros.productsChecked){
+						    this.delGoodsList += pros.productId+','
+						}
+					})
+				})
+				this.failureList.forEach(failure=>{
+					if(failure.productsChecked){
+						this.delGoodsList += failure.productId+','
+					}
+				})
+				if(this.delGoodsList.length == 0){
+					this.$util.msg("请选择要删除的商品~",2000);
+					return
+				}else{			
+					this.$util.modal('','确定删除选中的商品吗?','确定','取消',true,() =>{
+						this.ProductService.ShoppingCartDelete({userID:this.userId,productIDs:this.delGoodsList}).then(response =>{
+							this.$util.msg('删除成功',2000);
+							setTimeout(()=>{
+								this.isshowDelbtn = false;
+								this.initGetCartGoodsList();
+							},2000)
+						}).catch(error =>{
+							this.$util.msg(error.msg,2000)
+						})
+					})
+				}
+			},
+			deletefailureList(){
+				this.failureList.forEach(failure=>{ this.delGoodsList += failure.productId+',' })
+				this.$util.modal('','确定清空全部失效商品吗?','确定','取消',true,() =>{
+					this.ProductService.ShoppingCartDelete({userID:this.userId,productIDs:this.delGoodsList}).then(response =>{
+						this.$util.msg('删除成功',2000);
+						setTimeout(()=>{
+							this.isshowDelbtn = false;
+							this.initGetCartGoodsList();
+						},2000)
+					}).catch(error =>{
+						this.$util.msg(error.msg,2000)
+					})
+				})
+			},
+			goIndex(){
+				uni.switchTab({
+				    url: '/pages/tabBar/home/index'
+				});
+			},
+			goNavto(url){
+				uni.navigateTo ({
+					url
+				})
+			},
+			navToListPage(id){
+				this.isModallayer = true;
+				this.$api.navigateTo(`/pages/goods/product?id=${id}`)
+			},
+			failureToProduct(failure){
+				if(failure.status == 1){
+					this.$util.msg('商品已丢失,不能查看',2000)
+					return
+				}else if(failure.status == 2){
+					this.$util.msg('商品已停售,不能查看',2000)
+					return
+				}else{
+					this.isModallayer = true;
+					this.$api.navigateTo(`/pages/goods/product?id=${failure.productId}`)
+				}
+			},
+			failureStateText(state){
+				let stateText = '',
+					stateTextObject={
+						1:'商品已丢失',
+						2:'商品已停售',
+						3:'商品已下架',
+						4:'商品已售罄',
+						5:'价格仅会员可见,您不能购买',
+						6:'未公开价格',
+						7:'库存不足'
+					}
+				Object.keys(stateTextObject).forEach(key => {
+					if(key == state){
+						stateText = stateTextObject[key]
+					}
+				})
+				return stateText;
+			},
+			setHeaderBtnPosi(){
+				// 获得胶囊按钮位置信息
+				let headerBtnPosi = uni.getMenuButtonBoundingClientRect();
+				return headerBtnPosi
+			},
+			setSysteminfo(){
+				let systeminfo;
+				uni.getSystemInfo({ // 获取设备信息
+					success: (res) => {
+						systeminfo = res
+					},
+				})
+				return systeminfo
+			},
+			PromotionsFormat(promo){//促销活动类型数据处理
+				if(promo!=null){
+					if(promo.type == 1 && promo.mode == 1){
+						return true
+					}else{
+						return false
+					}
+				}
+				return false
+			},
+			queryPopupCoupons(){// 获取弹窗优惠券列表
+				this.ProductService.ShoppingCartGetCoupon(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('获取优惠券列表失败')
+				})
+			},
+			receiveCoupon(coupon){// 点击优惠券领取按钮
+				this.ProductService.ReceiveCoupon(
+					{
+						userId:this.couponParam.userId,
+						couponId:coupon.couponId,
+						source:2
+					}
+				) 
+				.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);
+				})
+			},
+			showPopup(index,shop){// 显示popup弹窗
+				switch(index){
+					case 0:
+						this.currentTab = 0
+						this.couponParam.status = 1
+						this.couponParam.shopId = shop.id
+						this.queryPopupCoupons()
+						this.popupShow0 = true
+						break;
+					case 1:
+						this.popupShow1 = true
+						break;
+				}
+			},
+			hidePopup(index){// 隐藏popup弹窗
+				switch(index){
+					case 0:
+						this.popupShow0 = false
+						break;
+					case 1:
+						this.popupShow1 = 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;
+				}
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	page{
+		background: #f7f7f7;
+		height: auto;
+	}
+	.cart-content{
+		position: relative;
+	}
+	.container-cart-main.none{
+		display: none;
+	}
+	.container-cart-main.show{
+		display: block;
+	}
+	.cart-content.empty.none{
+		display: none;
+	}
+	.cart-content.empty.show{
+		display: block;
+	}
+	.container-cart.show{
+		display: block;
+	}
+	.container-cart.none{
+		display: none;
+	}
+	.empty-container.none{
+		display: none;
+	}
+	.empty-container.show{
+		display: flex;
+	}
+	.foot-check-delbtn{
+		width: 100%;
+		height: 80rpx;
+		position: fixed;
+		top: 0;
+		left: 0;
+		box-sizing: border-box;
+		padding: 15rpx 24rpx;
+		background-color: #F7F7F7;
+		z-index: 990;
+		.foot-text{
+			font-size: $font-size-26;
+			height: 50rpx;
+			line-height: 50rpx;
+			color:#666666;
+			float: left;
+			padding-left: 10rpx;
+			text{
+				margin: 0 6rpx;
+			}
+		}
+		.delBtn{
+			width: 100rpx;
+			display: inline-block;
+			padding: 0 15rpx;
+			font-size: $font-size-26;
+			height: 50rpx;
+			line-height: 50rpx;
+			border-radius: 30rpx;
+			background:#FFFFFF;
+			border: 1px solid #e15616;
+			color: #E15616;
+			float: right;
+			text-align: center;
+			&.none{
+				display: none;	
+			}
+		}
+	}
+	.checkbox-box{
+		display: flex;
+		align-items: center;
+		.checkbox{
+			display: flex;
+			margin: 0;
+			padding: 5rpx;
+			display: flex;
+			flex-direction: column;
+			align-items: center;
+			box-sizing: border-box;
+			text-align: center;
+			text-decoration: none;
+			border-radius: 0;
+			-webkit-tap-highlight-color: transparent;
+			overflow: hidden;
+			background-color:#FFFFFF;
+			font-size: 36rpx;
+			color:#999999;
+			&.icon-yixuanze{
+				color: $color-system;
+			}
+		}
+		&.disabled{
+			.checkbox{
+				color:#999999
+			}
+		}
+		.text{
+			font-size: $font-size-24;
+			margin-left: 10rpx;
+		}
+	}
+	.goods-list{
+		width: 100%;
+		height: auto;
+		background-color: #F7F7F7;
+		.goods-item{
+			width: 702rpx;
+			padding: 0 24rpx;
+			background: #FFFFFF;
+			margin-bottom: 24rpx;
+		}
+		.shoptitle{
+			height: 80rpx;
+			line-height: 80rpx;
+			.checkbox-box{
+				float: left;
+				height: 80rpx;
+				line-height: 80rpx;
+				display: inline-block;
+				box-sizing: border-box;
+				margin-left: 10rpx;
+			}
+			.text{
+				width: 400rpx;
+				float: left;
+				display: block;
+				overflow: hidden;
+				text-overflow:ellipsis;
+				white-space: nowrap;
+				line-height: 80rpx;
+				margin-left: 20rpx;
+				font-size: $font-size-28;
+				color: $text-color;
+				text-align: left;
+				font-weight: bold;
+			}
+			.text-coupon{
+				float: right;
+				line-height: 80rpx;
+				font-size: $font-size-30;
+				color: #e15616;
+			}
+			.floor-item-act{
+				width: 120rpx;
+				height: 80rpx;
+				text-align: center;
+				box-sizing: border-box;
+				float: left;
+				padding: 24rpx 0;
+				margin-left: 20rpx;
+				.floor-tags{
+					height: 28rpx;
+					border-radius: 6rpx;
+					background-color: #FFFFFF;
+					line-height: 28rpx;
+					color: $color-system;
+					text-align: center;
+					display: inline-block;
+					padding:0 16rpx;
+					font-size: $font-size-20;
+					border: 1px solid #E15616;
+					float: right;
+				}
+			}
+		}
+		.goods-pros{
+			width: 100%;
+			height: auto;
+			margin-bottom: 20rpx;
+		}	
+		.goods-pros-t{
+			display: flex;
+			align-items: center;
+			width: 100%;
+			height: 210rpx;
+			padding:0 0 26rpx 0;
+			.checkbox-box{
+				padding: 10rpx;
+			}
+			.pros-img{
+				width: 210rpx;
+				height: 100%;
+				border-radius: 10rpx;
+				margin:0 20rpx;
+				border:1px solid #f3f3f3;
+				image{
+					width: 100%;
+					height: 100%;
+					border-radius: 10rpx;
+				}
+			}
+		}
+		.goods-pros-b{
+			width:100%;
+			height: auto;
+			padding:0 0 24rpx 0;
+			box-sizing: border-box;
+			&.show{
+				display: block;
+			}
+			&.none{
+				display: none;
+			}
+			.sum-none{
+				width: 100%;
+				height: 48rpx;
+				line-height: 48rpx;
+				color: $text-color;
+				float: left;
+				text-align: right;
+				.money{
+					font-size: $font-size-26;
+					color: #999999;
+					text-decoration: line-through;
+				}
+				.money-sign{
+					font-size: $font-size-26;
+					color: #999999;
+					text-decoration: line-through;
+				}
+				.money-reduced{
+					margin-left: 10rpx;
+					font-size: $font-size-26;
+					color: $color-system;
+					.iconfont{
+						font-size: $font-size-34;
+					}
+				}
+			}
+			.sum{
+				width: 100%;
+				height: 40rpx;
+				font-size: $font-size-26;
+				line-height: 40rpx;
+				color: $text-color;
+				float: left;
+				display: flex;
+				justify-content: flex-end;
+				font-weight: bold;
+				.money{
+					color: #FF2A2A;
+					font-size: $font-size-26;
+				}
+				.money-sign{
+					font-size: $font-size-24;
+					color: #FF2A2A;
+				}
+			}
+		}
+		.pros-product{
+			width: 416rpx;
+			height: 100%;
+			line-height: 36rpx;
+			font-size: $font-size-28;	
+			position: relative;
+			.producttitle{
+				width: 100%;
+				display: inline-block;
+				height: auto;							
+				text-overflow:ellipsis;
+				display: -webkit-box;
+				word-break: break-all;
+				-webkit-box-orient: vertical;
+				-webkit-line-clamp: 2;
+				overflow: hidden;
+				margin-bottom: 15rpx;
+				.no-text{
+					display: inline-block;
+					height:36rpx;
+					padding: 0 12rpx;
+					line-height: 36rpx;
+					background:linear-gradient(315deg,rgba(231,0,0,1) 0%,rgba(255,104,1,1) 100%);
+					border-radius:18rpx;
+					text-align: center;
+					color: #FFFFFF;
+					font-size:$font-size-28;
+					margin-right: 24rpx;
+				}
+			}
+			.productspec{
+				height: 36rpx;
+				color: #999999;
+				font-size: $font-size-26;
+			}
+			.productprice{
+				width: 100%;
+				height: 48rpx;
+				margin: 30rpx 0 0 0;
+				.price{
+					line-height: 48rpx;
+					font-size: $font-size-26;
+					width: 48%;
+					color: #FF2A2A;
+					float: left;
+					font-weight: bold;
+					&.disabled{
+						color: #999999;
+						text-decoration: line-through;
+					}
+					.money-sign{
+						font-size: $font-size-24;
+						color: #FF2A2A;
+					}
+				}
+				.count{
+					height: 100%;
+					float: right;
+					position: relative;
+					&.show{
+						display: block;
+					}
+					&.none{
+						display: none;
+					}
+					.count-tips{
+						width: auto;
+						display: inline-block;
+						padding: 0 15rpx;
+						line-height: 44rpx;
+						height: 44rpx;
+						border-radius: 22rpx;
+						background: $btn-confirm;
+						font-size: $font-size-24;
+						text-align: center;
+						color: #FFFFFF;
+						position: absolute;
+						top:-60rpx;
+						left: -5rpx; 
+						z-index: 5;
+						&.step{
+							left:-217rpx
+						}
+						&::before{
+							content: "";
+							position: absolute;
+							bottom: -30rpx;
+							right: 15rpx;
+							z-index:1;
+							width: 0; 
+							height: 0;
+							border-width: 18rpx;
+							border-style: solid;
+							border-color:$color-system transparent transparent transparent;
+						}
+					}
+					.number-box{
+						display: flex;
+						justify-content: center;
+						align-items: center;
+						border: 2rpx solid #ffe6dc;
+						border-radius: 30rpx;
+						.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: #fff;
+							border-radius: 4rpx;
+							text-align: center;
+							font-size: $font-size-24;
+						}
+					}
+					.uni-numbox{
+						position: absolute;
+						left: 45rpx;
+						bottom: 0;
+						.uni-numbox-minus, .uni-numbox-plus{
+							width: 50rpx;
+							line-height: 40rpx;
+						}
+						.uni-numbox-value {
+							font-size: $font-size-28;
+							width: 60rpx;
+						}
+					}
+				}
+			}
+			.floor-item-act{
+				width: 100%;
+				height: 56rpx;
+				text-align: center;
+				box-sizing: border-box;
+				float: left;
+				padding:0 0 10rpx 0;
+				margin-left: 10rpx;
+				.floor-tags{
+					height: 28rpx;
+					border-radius: 6rpx;
+					background-color: #FFFFFF;
+					line-height: 28rpx;
+					color: $color-system;
+					text-align: center;
+					display: inline-block;
+					padding:0 16rpx;
+					font-size: $font-size-20;
+					border: 1px solid #E15616;
+					float: left;
+				}
+			}
+		}
+	}
+	.failure-list{
+		width: 702rpx;
+		height: auto;
+		padding: 0 24rpx;
+		margin-top: 20rpx;
+		background: #FFFFFF;
+		.failure-title{
+			width: 100%;
+			height: 82rpx;
+			line-height: 82rpx;
+			font-size: $font-size-28;
+			border-bottom: 1px solid #EBEBEB;
+			.title-txt{
+				float: left;
+				color:#666666;
+				text-align: left;
+			}
+			.title-btn{
+				float: right;
+				color: $color-system;
+				text-align: right;
+				line-height: 80rpx;
+				.butto{
+					display: inline-block;
+					padding: 0 15rpx;
+					font-size: $font-size-26;
+					height: 50rpx;
+					line-height: 50rpx;
+					border-radius: 30rpx;
+					background:#FFFFFF;
+					// border: 1px solid #C9C9C9;
+					// color: #999999;
+					margin-top: 15rpx;
+				}
+			}
+		}
+		.productlist{
+			padding-top: 10rpx;
+			.goods-pros{
+				width: 100%;
+				height: auto;
+				padding: 20rpx 0;
+			}	
+			.goods-pros-t{
+				display: flex;
+				align-items: center;
+				width: 100%;
+				height: 210rpx;
+				position: relative;
+				.img-tip{
+					display: block;
+					width: 72rpx;
+					height: 36rpx;
+					line-height: 36rpx;
+					font-size: $font-size-24;
+					text-align: center;
+					color: #FFFFFF;
+					border-radius: 24rpx;
+					background:rgba(51,51,51,0.3);
+					// position: absolute;
+					// left: 0;
+					// top: 0;
+				}
+				.checkbox-box{
+					padding: 10rpx;
+				}
+				.pros-img{
+					width: 180rpx;
+					height: 100%;
+					border-radius: 10rpx;
+					margin:0 20rpx;
+					border:1px solid #f3f3f3;
+					position: relative;
+					image{
+						width: 100%;
+						height: 100%;
+						border-radius: 10rpx;
+					}
+				}
+				.pros-marks{
+					width: 730rpx;					height: 250rpx;
+					z-index: 90;
+					background: rgba(0,0,0,.05);
+					position: absolute;
+					left:-20rpx;
+					top: -20rpx;
+				}
+			}
+			.goods-pros-b{
+				width:622rpx;
+				margin-left: 84rpx;
+				height: 40rpx;
+				padding:0 0 26rpx 0;
+				// border-top: 1px solid #EBEBEB;
+				&.show{
+					display: block;
+				}
+				&.none{
+					display: none;
+				}
+				.sum{
+					font-size: $font-size-28;
+					line-height: 40rpx;
+					color: $text-color;
+					display: flex;
+					justify-content: flex-end;
+					.money{
+						color: #FF2A2A;
+						font-size: $font-size-28;
+					}
+					.money-sign{
+						font-size: $font-size-24;
+						color: #FF2A2A;
+					}
+				}
+			}
+			.pros-product{
+				width: 402rpx;
+				height: 100%;
+				line-height: 36rpx;
+				font-size: $font-size-28;	
+				position: relative;
+				.producttitle{
+					width: 100%;
+					display: inline-block;
+					height: auto;							
+					text-overflow:ellipsis;
+					display: -webkit-box;
+					word-break: break-all;
+					-webkit-box-orient: vertical;
+					-webkit-line-clamp: 2;
+					overflow: hidden;
+					margin-bottom: 8rpx;
+					.no-text{
+						display: inline-block;
+						height:36rpx;
+						padding: 0 12rpx;
+						line-height: 36rpx;
+						background:linear-gradient(315deg,rgba(231,0,0,1) 0%,rgba(255,104,1,1) 100%);
+						border-radius:18rpx;
+						text-align: center;
+						color: #FFFFFF;
+						font-size: $font-size-28;
+						margin-right: 24rpx;
+					}
+				}
+				.productspec{
+					height: 36rpx;
+					color: #999999;
+					font-size: $font-size-26;
+					margin-top: 20rpx;
+				}
+				.productstate{
+					font-size: $font-size-28;
+					height: 44rpx;
+					color: #FF2A2A;
+					position: absolute;
+					bottom: 0;
+					left: 0;
+				}
+			}
+		}
+	}
+	.tui-popup-box {
+		position: relative;
+		box-sizing: border-box;
+		min-height: 220rpx;
+		padding:24rpx 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: 57rpx;
+									.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;
+						}
+					}
+				}
+			}	
+			.tui-popup-coupon{
+				width: 100%;
+				height: 500rpx;
+				box-sizing: border-box;
+				padding:30rpx 20rpx;
+				.tui-popup-h1{
+					width: 100%;
+					height: 66rpx;
+					display: flex;
+					align-items: center;
+					.tui-popup-text{
+						flex: 1;
+						height: 66rpx;
+						line-height: 66rpx;
+						font-size: $font-size-30;
+						color: #333333;
+						&.red{
+							color: #f94b4b;
+						}
+						&.bold{
+							font-weight: bold;
+						}
+						&.left{
+							text-align: left;
+						}
+						&.right{
+							text-align: right;
+						}
+					}
+				}
+			}
+		}
+	}			
+	.footer{
+		width: 100%;
+		background-color: #FFFFFF;
+		height: 110rpx;
+		position: fixed;
+		bottom: 0rpx;
+		z-index: 990;
+		.footer-le{
+			width: 520rpx;
+			height: 100%;
+			padding-left: 24rpx;
+			float: left;
+			box-sizing: border-box;
+			.foot-check{
+				width: 100rpx;
+				float: left;
+				line-height: 110rpx;
+				font-size: $font-size-24;
+				.checkbox{
+					width: 40rpx;
+					text-align: center;
+				}
+				.text{
+					width: 60rpx;
+					float: right;
+				}
+			}
+			.sum{
+				width: 360rpx;
+				height: 110rpx;
+				float: right;
+				box-sizing: border-box;
+				padding: 10rpx;
+				.sum-none{
+					width: 100%;
+					height: 45rpx;
+					line-height: 45rpx;
+					color: $text-color;
+					float: left;
+					text-align: left;
+					.money{
+						font-size: $font-size-24;
+						color: #999999;
+						text-decoration: line-through;
+					}
+					.money-sign{
+						font-size: $font-size-24;
+						color: #999999;
+						text-decoration: line-through;
+					}
+					.money-reduced{
+						margin-left: 10rpx;
+						font-size: $font-size-24;
+						color: #FF2A2A;
+					}
+					.money-popup{
+						height: 45rpx;
+						line-height: 45rpx;
+						display: inline-block;
+						float: right;
+						font-size: $font-size-24;
+						color: #FF2A2A;
+						.icon-xiangshangjiantou{
+							font-size: $font-size-30;
+							margin-left: 5rpx;
+						}
+					}
+				}
+				.sum-price{
+					width: 100%;
+					height: 45rpx;
+					line-height: 45rpx;
+					font-size: $font-size-30;
+					color: $text-color;
+					float: left;
+					font-weight: normal;
+					text-align: left;
+					&.none{
+						height: 90rpx;
+						line-height: 90rpx;
+					}
+					.money{
+						color: #FF2A2A;
+					}
+					.money-sign{
+						font-size: $font-size-24;
+						color: #FF2A2A;
+					}
+				}
+			}
+		}
+		.footer-ri{
+			width: 230rpx;
+			height: 100%;
+			float: right;
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			z-index: 999;
+			box-sizing: border-box;
+			padding: 13rpx 15rpx 13rpx 5rpx;
+			&.none{
+				display: none;
+			}
+			.btn{
+				width: 200rpx;
+				height: 100%;
+				background:linear-gradient(135deg,rgba(242,143,49,1) 0%,rgba(225,86,22,1) 100%);
+				font-size: $font-size-28;
+				line-height: 84rpx;
+				color: #FFFFFF;
+				display: flex;
+				border-radius: 42rpx;
+				justify-content: center;
+				align-items: center;
+			}
+		}
+		.footer-del{
+			width: 400rpx;
+			height: 110rpx;
+			position: absolute;
+			padding-left: 200rpx;
+			background: #FFFFFF;
+			right: 0;
+			top: 0;
+			z-index: 1000;
+			&.show{
+				animation: showDelbtn 0s linear both;
+			}
+			&.none{
+				animation: hideDelbtn 0s linear both;
+			}
+			.btn{
+				width: 50%;
+				height: 100%;
+				line-height: 110rpx;
+				font-size: $font-size-28;
+				color: #FFFFFF;
+				text-align: center;
+				float: left;
+			}
+			.btn.btn-cancel{
+				background:#EEC1AB;
+			}
+			.btn.btn-confirm{
+				background:#FF2A2A;
+			}
+			@keyframes showDelbtn {
+				0% {
+					transform: translateX(0);
+				}
+				100% {
+					transform: translateX(-100%);
+				}
+			}
+			@keyframes hideDelbtn {
+				0% {
+					transform: translateX(-100%);
+				}
+				100% {
+					transform: translateX(0);
+				}
+			}
+		}
+	}
+</style>

+ 12 - 14
components/cm-module/cm-seller/category.vue

@@ -16,11 +16,11 @@
 			<!--右侧子导航-->
 			<scroll-view  scroll-y="true" class="right-aside" :style="{top:(CustomBar+38)+'px',height:(windowHeight-CustomBar+38)+'px'}">
 				<view class="category" v-for="(first,index) in categoryList" :key="index" v-show="index==showCategoryIndex" >
-					<template v-if="first.smalltypeList">
-						<view class="category-box AAA" v-for="(small,oIndex) in first.smalltypeList" :key="oIndex">
+					<template v-if="first.smallTypeList && first.smallTypeList.length > 0">
+						<view class="category-box AAA" v-for="(small,oIndex) in first.smallTypeList" :key="oIndex">
 							<view class="title">{{small.name}}</view>
-							<view class="list" v-if="small.tinytypeList.length > 0">
-								<view class="box" v-for="(pro,proIndex) in small.tinytypeList" :key="proIndex" @click.stop="navToListPage(pro,3)">
+							<view class="list" v-if="small.tinyTypeList && small.tinyTypeList.length > 0">
+								<view class="box" v-for="(pro,proIndex) in small.tinyTypeList" :key="proIndex" @click.stop="navToListPage(pro,3)">
 									<image :src="pro.crmIcon ? pro.crmIcon : 'https://static.caimei365.com/app/img/icon/icon-noneproduct.jpg'"></image>
 									<view class="text">{{pro.name}}</view>
 								</view>
@@ -39,7 +39,7 @@
 							<view class="no-data">
 								<view class="box" @click.stop="navToListPage(first,1)">
 									<image :src="first.crmIcon ? first.crmIcon : 'https://static.caimei365.com/app/img/icon/icon-noneproduct.jpg'"></image>
-									<view class="text">全部商品</view>
+									<view class="text">全部商品a</view>
 								</view>
 							</view>
 						</view>
@@ -80,8 +80,7 @@
 			this.initData();
 		},
 		methods: {
-			// 数据初始化
-			initData() {
+			initData() {// 数据初始化
 				this.GetProductCate(this.categoryTabIndex);
 				const {windowHeight, pixelRatio} = wx.getSystemInfoSync();
 				this.windowHeight = windowHeight - 1;
@@ -91,13 +90,12 @@
 				this.categoryList = []
 				this.GetProductCate(data);
 			},
-			// 获取商品分类列表
-			GetProductCate (index) {
+			GetProductCate (index) {// 获取商品分类列表
 				this.CommonService.GetFirstClassly({typeSort:index,source :'crm'}).then(response =>{
 					this.categoryList = response.data
 					// 查询第一个拥有二级菜单的子菜单
 					for (let i = 0; i < this.categoryList.length; i++) {
-						if (this.categoryList[i].smalltypeList.length > 0) {
+						if (this.categoryList[i].smallTypeList.length > 0) {
 							this.showCategoryIndex = i;
 							break;
 						}
@@ -113,19 +111,19 @@
 			},
 			toSearch () {// 跳转至搜索详情页
 				uni.navigateTo({
-					url: `/search/pages/search/search?search=${JSON.stringify(this.search)}`
+					url: `/pages/search/search?search=${JSON.stringify(this.search)}`
 				})
 			},
 			navToListPage(item,index){//分类导航跳转
 				switch(index){
 					case 1:
-						this.$api.navigateTo(`/pages/goods/goods-classify?classType=1&id=${item.bigTypeID}&title=${item.name}`)
+						this.$api.navigateTo(`/pages/goods/goods-classify?classType=1&id=${item.bigTypeId}&title=${item.name}`)
 						break;
 					case 2:
-						this.$api.navigateTo(`/pages/goods/goods-classify?classType=2&id=${item.smallTypeID}&title=${item.name}`)
+						this.$api.navigateTo(`/pages/goods/goods-classify?classType=2&id=${item.smallTypeId}&title=${item.name}`)
 						break;
 					case 3:
-						this.$api.navigateTo(`/pages/goods/goods-classify?classType=3&id=${item.tinyTypeID}&title=${item.name}`)
+						this.$api.navigateTo(`/pages/goods/goods-classify?classType=3&id=${item.tinyTypeId}&title=${item.name}`)
 						break;
 				}
 			},

+ 1 - 1
components/cm-module/cm-seller/home.vue

@@ -134,7 +134,7 @@
 				})
 			},
 			handleClick(data){
-				this.$api.navigateTo(`/h5/pages/activity/meobohui`)
+				this.$api.navigateTo(`/pages/h5/activity/meobohui`)
 				this.$store.commit('setActivity',data)
 			},
 			handleCancelClick(data){

+ 82 - 35
components/cm-module/cm-seller/user.vue

@@ -16,13 +16,13 @@
 				</view>
 				<!-- 订单 -->
 				<view class="user-order">
-					<view class="tab-title" @click="navigator('/seller/pages/order/order-list?listType=0')">
+					<view class="tab-title" @click="navigator('/pages/seller/order/order-list?listType=0')">
 						<text class="cell-tit">我的订单</text>
 						<text class="cell-more">全部订单</text>
 						<text class="iconfont icon-xiayibu"></text>
 					</view>
 					<view class="order-section">
-						<view class="order-item" @click="navigator('/seller/pages/order/order-list?listType=1')" hover-class="common-hover"  :hover-stay-time="50">
+						<view class="order-item" @click="navigator('/pages/seller/order/order-list?listType=1')" hover-class="common-hover"  :hover-stay-time="50">
 							<view class="order-icon">
 								<image src="https://static.caimei365.com/app/img/icon/order5@3x.png" mode=""></image>
 								<text 	v-if="beforeConfirmCount>0" 
@@ -33,7 +33,7 @@
 							</view>
 							<text class="order-t">待确认</text>
 						</view>
-						<view class="order-item" @click="navigator('/seller/pages/order/order-list?listType=2')"  hover-class="common-hover" :hover-stay-time="50">
+						<view class="order-item" @click="navigator('/pages/seller/order/order-list?listType=2')"  hover-class="common-hover" :hover-stay-time="50">
 							<view class="order-icon">
 								<image src="https://static.caimei365.com/app/img/icon/order1@3x.png" mode=""></image>
 								<text  v-if="beforePayCount >0" 
@@ -44,7 +44,7 @@
 							</view>
 							<text class="order-t">待付款</text>
 						</view>
-						<view class="order-item" @click="navigator('/seller/pages/order/order-list?listType=3')" hover-class="common-hover"  :hover-stay-time="50">
+						<view class="order-item" @click="navigator('/pages/seller/order/order-list?listType=3')" hover-class="common-hover"  :hover-stay-time="50">
 							<view class="order-icon">
 								<image src="https://static.caimei365.com/app/img/icon/order2@3x.png" mode=""></image>
 								<text   v-if="beforeShipCount >0" 
@@ -55,7 +55,7 @@
 							</view>
 							<text class="order-t">待发货</text>
 						</view>
-						<view class="order-item" @click="navigator('/seller/pages/order/order-list?listType=4')" hover-class="common-hover"  :hover-stay-time="50">
+						<view class="order-item" @click="navigator('/pages/seller/order/order-list?listType=4')" hover-class="common-hover"  :hover-stay-time="50">
 							<view class="order-icon">
 								<image src="https://static.caimei365.com/app/img/icon/order3@3x.png" mode=""></image>
 								<text 	v-if="shippedCount>0" 
@@ -66,7 +66,7 @@
 							</view>
 							<text class="order-t">已发货</text>
 						</view>
-						<view class="order-item" @click="navigator('/seller/pages/order/order-list?listType=5')" hover-class="common-hover"  :hover-stay-time="50">
+						<view class="order-item" @click="navigator('/pages/seller/order/order-list?listType=5')" hover-class="common-hover"  :hover-stay-time="50">
 							<view class="order-icon">
 								<image src="https://static.caimei365.com/app/img/icon/order4@3x.png" mode=""></image>
 								<text 	v-if="refundsCount >0"
@@ -84,15 +84,26 @@
 			<view class="foot-list">
 				<view class="list-cell-item">
 					<view class="list-cell"  v-for="(item, index) in firstList" :key="index" @click="navigator(item.path)" hover-class="cell-hover" :hover-stay-time="50">
-						<text class="cell-icon"><text class="iconfont" :class="item.icon"></text></text>
+						<view class="cell-icon">
+							<image class="cell-icon-image" :src="item.icon" mode=""></image>
+						</view>
 						<text class="cell-tit">{{item.name}}</text>
-						<text 	v-if="index == 0 && orderNum >0"
+						<text 	v-if="index == 1 && orderNum >0"
 								class="uni-badge uni-badge-error uni-small uni-badge--small icon-num">
 								{{orderNum == 99 ? '99+' : orderNum}}
 						</text>
 						<text class="cell-more iconfont icon-xiayibu"></text>
 					</view>
 				</view>
+				<view class="list-cell-item">
+					<view class="list-cell"  v-for="(item, index) in twoList" :key="index" @click="navigator(item.path)" hover-class="cell-hover" :hover-stay-time="50">
+						<view class="cell-icon">
+							<image class="cell-icon-image" :src="item.icon" mode=""></image>
+						</view>
+						<text class="cell-tit">{{item.name}}</text>
+						<text class="cell-more iconfont icon-xiayibu"></text>
+					</view>
+				</view>
 			</view>
 		</view>	
 	</view>
@@ -132,11 +143,39 @@
 				refundsCount:'', //退货/款角标
 				institutionsCont:120,
 				firstList:[
-					{name:'机构列表',path:'/seller/pages/club/list',icon:'icon-jigouliebiao'},
-					{name:'帮机构下单',path:'/seller/pages/club/club-list',icon:'icon-bangjigouxiadan'},
-					{name:'拉机构上线',path:'/seller/pages/login/register-select',icon:'icon-lajigoushangxian'},
-					{name:'邀请运营人员',path:'/seller/pages/club/allClub-list',icon:'icon-yaoqingyunyingrenyuan'}
+					{
+						name:'待注册机构',
+						path:'/pages/seller/club/stayClub-list',
+						icon:'https://static.caimei365.com/app/img/icon/icon_seller_1@2x.png',
+					},
+					{
+						name:'机构列表',
+						path:'/pages/seller/club/list',
+						icon:'https://static.caimei365.com/app/img/icon/icon_seller_2@2x.png',
+					},
+					{
+						name:'拉机构上线',
+						path:'/pages/seller/login/register-select',
+						icon:'https://static.caimei365.com/app/img/icon/icon_seller_3@2x.png',
+					},
+					{
+						name:'邀请运营人员',
+						path:'/pages/seller/club/allClub-list',
+						icon:'https://static.caimei365.com/app/img/icon/icon_seller_4@2x.png',
+					}
 				],
+				twoList:[
+					{
+						name:'帮机构下单',
+						path:'/pages/seller/club/club-list',
+						icon:'https://static.caimei365.com/app/img/icon/icon_seller_5@2x.png',
+					},
+					{
+						name:'发布二手商品',
+						path:'/pages/second/form/form-seller',
+						icon:'https://static.caimei365.com/app/img/icon/icon_seller_6@2x.png',
+					}
+				]
 			}
 		},
 		created() {
@@ -167,7 +206,7 @@
 						this.logout()
 						uni.setStorageSync('unionId',response.data.unionId)
 						this.$store.commit('updateStatus',response.data)
-						this.$api.navigateTo('/seller/pages/login/login')
+						this.$api.navigateTo('/pages/seller/login/login')
 					}
 				})
 			},	
@@ -191,18 +230,18 @@
 				})	
 			},
 			TestZHIboFn(){//测试跳转直播小程序
-				uni.navigateToMiniProgram({
-					appId: 'wx92d650b253f8f2e3',
-					path: '/pages/index/index',
-					extraData: {
-						'data1': 'test'
-					},
-					envVersion: 'develop',
-					success(res) {
-						// 打开成功
-						console.log(res)
-					}
-				})
+				// uni.navigateToMiniProgram({
+				// 	appId: 'wx92d650b253f8f2e3',
+				// 	path: '/pages/index/index',
+				// 	extraData: {
+				// 		'data1': 'test'
+				// 	},
+				// 	envVersion: 'develop',
+				// 	success(res) {
+				// 		// 打开成功
+				// 		console.log(res)
+				// 	}
+				// })
 			},
 			navigator(url){
 				this.$api.navigateTo(url)
@@ -235,7 +274,6 @@
 		width: 100%;
 		position: relative;
 		background-size: cover;
-		border-radius: 0 0 100rpx 100rpx;
 	}	
 	.header-main{
 		width: 702rpx;
@@ -475,14 +513,12 @@
 		border-radius: 20rpx;
 	}
 	.list-cell{
-		display:flex;
 		width: 100%;
-		align-items:baseline;
 		line-height:100rpx;
 		position:relative;
 		background: $bg-color;
-		justify-content: center;
 		border-bottom: 1px solid #EBEBEB;
+		height: 100rpx;
 		&:last-child{
 			border-bottom: none;
 		}
@@ -492,15 +528,24 @@
 		.cell-icon{
 			width: 60rpx;
 			height: 100rpx;
-			line-height: 100rpx;
 			text-align: center;
-			.iconfont{
-				font-size: $font-size-34;
-				color: #666666;
+			box-sizing: border-box;
+			padding: 32rpx 12rpx;
+			float: left;
+			.cell-icon-image{
+				width: 36rpx;
+				height: 36rpx;
+				display: block;
 			}
 		}
 		.cell-more{
-			align-self: baseline;
+			width: 60rpx;
+			height: 100rpx;
+			line-height: 100rpx;
+			text-align: right;
+			position: absolute;
+			right: 0;
+			top: 0;
 			font-size:$font-size-28;
 			color:#666666;
 			.txt{
@@ -509,7 +554,9 @@
 			}
 		}
 		.cell-tit{
-			flex: 1;
+			width: 465rpx;
+			display: block;
+			float: left;
 			font-size: $font-size-28;
 			color: #666666;
 			margin-right:10rpx;

+ 280 - 0
components/cm-module/coupon/tui-tabs.vue

@@ -0,0 +1,280 @@
+<template>
+	<view class="tui-tabs-view"
+		:class="[isFixed ? 'tui-tabs-fixed' : 'tui-tabs-relative', unlined ? 'tui-unlined' : '']" :style="{
+			width: tabsWidth + 'px',
+			height: height + 'rpx',
+			padding: `0 ${padding}rpx`,
+			background: backgroundColor,
+			top: isFixed ? top + 'px' : 'auto',
+			zIndex: isFixed ? zIndex : 'auto'
+		}" v-if="tabsWidth>0">
+		<view v-for="(item, index) in tabs" :key="index" class="tui-tabs-item" :style="{ width: itemWidth }"
+			@tap.stop="swichTabs(index)">
+			<view class="tui-tabs-title"
+				:class="{ 'tui-tabs-active': currentTab == index, 'tui-tabs-disabled': item.disabled }" :style="{
+					color: currentTab == index ? selectedColor : color,
+					fontSize: size + 'rpx',
+					fontWeight: bold && currentTab == index ? 'bold' : 'normal'
+				}">
+				{{ item.name }}
+				{{ item.num ? item.num : 0 }}
+			</view>
+		</view>
+		<view class="tui-tabs-slider" :style="{
+				transform: 'translateX(' + scrollLeft + 'px)',
+				width: sliderWidth + 'rpx',
+				height: sliderHeight + 'rpx',
+				borderRadius: sliderRadius,
+				bottom: bottom,
+				background: sliderBgColor,
+				marginBottom: bottom == '50%' ? '-' + sliderHeight / 2 + 'rpx' : 0
+			}"></view>
+	</view>
+</template>
+
+<script>
+	export default {
+		name: 'tuiTabs',
+		props: {
+			//标签页
+			tabs: {
+				type: Array,
+				default () {
+					return [];
+				}
+			},
+			//tabs宽度,不传值则默认使用windowWidth,单位px
+			width: {
+				type: Number,
+				default: 0
+			},
+			//rpx
+			height: {
+				type: Number,
+				default: 80
+			},
+			//rpx 只对左右padding起作用,上下为0
+			padding: {
+				type: Number,
+				default: 30
+			},
+			//背景色
+			backgroundColor: {
+				type: String,
+				default: '#FFFFFF'
+			},
+			//是否固定
+			isFixed: {
+				type: Boolean,
+				default: false
+			},
+			//px
+			top: {
+				type: Number,
+				// #ifndef H5
+				default: 0,
+				// #endif
+				// #ifdef H5
+				default: 44
+				// #endif
+			},
+			//是否去掉底部线条
+			unlined: {
+				type: Boolean,
+				default: false
+			},
+			//当前选项卡
+			currentTab: {
+				type: Number,
+				default: 0
+			},
+			//滑块宽度
+			sliderWidth: {
+				type: Number,
+				default: 68
+			},
+			//滑块高度
+			sliderHeight: {
+				type: Number,
+				default: 6
+			},
+			//滑块背景颜色
+			sliderBgColor: {
+				type: String,
+				default: '#5677fc'
+			},
+			sliderRadius: {
+				type: String,
+				default: '50rpx'
+			},
+			//滑块bottom
+			bottom: {
+				type: String,
+				default: '0'
+			},
+			//标签页宽度
+			itemWidth: {
+				type: String,
+				default: '25%'
+			},
+			//字体颜色
+			color: {
+				type: String,
+				default: '#666'
+			},
+			//选中后字体颜色
+			selectedColor: {
+				type: String,
+				default: '#5677fc'
+			},
+			//字体大小
+			size: {
+				type: Number,
+				default: 28
+			},
+			//选中后 是否加粗 ,未选中则无效
+			bold: {
+				type: Boolean,
+				default: false
+			},
+			//角标字体颜色
+			badgeColor: {
+				type: String,
+				default: '#fff'
+			},
+			//角标背景颜色
+			badgeBgColor: {
+				type: String,
+				default: '#F74D54'
+			},
+			zIndex: {
+				type: [Number, String],
+				default: 996
+			}
+		},
+		watch: {
+			currentTab() {
+				this.checkCor();
+			},
+			tabs() {
+				this.checkCor();
+			},
+			width(val) {
+				this.tabsWidth = val;
+				this.checkCor();
+			}
+		},
+		created() {
+			// 高度自适应
+			setTimeout(() => {
+				uni.getSystemInfo({
+					success: res => {
+						this.winWidth = res.windowWidth;
+						this.tabsWidth = this.width == 0 ? this.winWidth : this.width;
+						this.checkCor();
+					}
+				});
+			}, 0);
+		},
+		data() {
+			return {
+				winWidth: 0,
+				tabsWidth: 0,
+				scrollLeft: 0
+			};
+		},
+		methods: {
+			checkCor: function() {
+				let tabsNum = this.tabs.length;
+				let padding = (this.winWidth / 750) * this.padding;
+				let width = this.tabsWidth - padding * 2;
+				let left = (width / tabsNum - (this.winWidth / 750) * this.sliderWidth) / 2 + padding;
+				let scrollLeft = left;
+				if (this.currentTab > 0) {
+					scrollLeft = scrollLeft + (width / tabsNum) * this.currentTab;
+				}
+				this.scrollLeft = scrollLeft;
+			},
+			// 点击标题切换当前页时改变样式
+			swichTabs: function(index) {
+				let item = this.tabs[index];
+				if (item && item.disabled) return;
+				if (this.currentTab == index) {
+					return false;
+				} else {
+					this.$emit('change', {
+						index: Number(index)
+					});
+				}
+			}
+		}
+	};
+</script>
+
+<style scoped>
+	.tui-tabs-view {
+		width: 100%;
+		box-sizing: border-box;
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+	}
+
+	.tui-tabs-relative {
+		position: relative;
+	}
+
+	.tui-tabs-fixed {
+		position: fixed;
+		left: 0;
+	}
+
+	.tui-tabs-fixed::before,
+	.tui-tabs-relative::before {
+		content: '';
+		position: absolute;
+		border-bottom: 1rpx solid #eaeef1;
+		-webkit-transform: scaleY(0.5) translateZ(0);
+		transform: scaleY(0.5) translateZ(0);
+		transform-origin: 0 100%;
+		bottom: 0;
+		right: 0;
+		left: 0;
+	}
+
+	.tui-unlined::before {
+		border-bottom: 0 !important;
+	}
+
+	.tui-tabs-item {
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		overflow: visible;
+	}
+
+	.tui-tabs-disabled {
+		opacity: 0.6;
+	}
+
+	.tui-tabs-title {
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		position: relative;
+		z-index: 3;
+		overflow: visible;
+	}
+
+	.tui-tabs-active {
+		transition: all 0.15s ease-in-out;
+	}
+
+	.tui-tabs-slider {
+		position: absolute;
+		left: 0;
+		transition: all 0.15s ease-in-out;
+		z-index: 1;
+		transform-style: preserve-3d;
+	}
+</style>

+ 392 - 0
components/cm-module/creatOrder/coupon.vue

@@ -0,0 +1,392 @@
+<template name="coupon">
+	<view class="coupon-template">
+		<view class="coupon-title" @tap.stop="showPopup">
+			<text class="text">优惠券:</text>
+			<text class="text-coupon">-¥{{ coupon.couponAmount | NumFormat }}</text>
+			<text class="iconfont icon-xiayibu"></text>
+		</view>
+		<!-- 优惠券 -->
+		<tui-bottom-popup :radius="true" :show="popupShow" @close="hidePopup">
+			<view class="tui-popup-box clearfix">
+				<view class="title">
+					<view class="title-l">优惠券</view>
+					<view class="title-r" @click="showExchangePopup">兑换优惠券</view>
+				</view>
+				<div class="tui-popup-main coupon">
+					<scroll-view class="tui-popup-scroll"  scroll-y="true">
+						<view v-for="(coupon,index) in dataList" :key="index" class="coupon-list"  @click.stop="checkedCoupon(index)">
+							<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">
+											<text class="tags">{{ coupon.couponType | TypeFormat }}</text>
+										</view>
+										<view class="list-cell-texts">
+											<text v-if="coupon.couponType == 0">
+												{{ coupon.productType && coupon.productType == 1 ? '全商城商品通用' : '仅可购买指定商品'  }}
+											</text>
+											<text v-if="coupon.couponType == 1">
+												{{ coupon.categoryType == 1 ? '仅限购买产品类商品' : '仅限购买仪器类商品' }}
+											</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="list-cell-checkbox">
+											<view class="checkbox iconfont"											 
+												  :class="[ coupon.ischecked ? 'icon-yixuanze' : 'icon-weixuanze' ]"
+											>
+											</view>
+										</view>
+									</view>
+								</view>
+								<view class="list-cell-time">{{ coupon.startDate }} - {{ coupon.endDate }}</view>
+							</view>
+						</view>
+					</scroll-view>
+				</div>
+				<view class="tui-right-flex tui-popup-btn">
+					<view class="tui-flex-1">
+						<view class="tui-button" @click="hidePopup">确定</view>
+					</view>
+				</view>
+			</view>	
+		</tui-bottom-popup>	
+	</view>
+</template>
+
+<script>
+	export default{
+		name:"coupon",
+		props:{
+			couponList:{
+				type:Array
+			}
+		},
+		data() {
+			return{
+				popupShow:false,
+				isIphoneX:this.$store.state.isIphoneX,
+				checkedIndex:0,
+				dataList:[],
+				coupon:{
+					couponAmount:0,
+					clubCouponId:0,
+				},
+			}
+		},
+		filters:{
+			NumFormat(value) {//处理金额
+				return Number(value).toFixed(2);
+			},
+			TypeFormat(value) {
+				switch (value) {
+					case 0:
+						return  '活动券';
+						break;
+					case 1:
+						return  '品类券';
+						break;
+					case 2:
+						return  '用户专享券';
+						break;
+					case 3:
+						return  '店铺券';
+						break;
+					case 4:
+						return  '新用户券';
+						break;
+				}
+			}
+		},	
+		created(){
+			this.initData(this.couponList)
+		},
+		computed: {
+
+		},
+		methods:{
+			initData(data){
+				data.forEach((el,index) => {
+					this.dataList.push(Object.assign({},el,{ischecked:false}))
+				})
+				this.coupon.couponAmount = data[0].couponAmount
+				this.dataList[0].ischecked = true
+			},
+			checkedCoupon(idx){// 选择优惠券
+				this.checkedIndex = idx;
+				this.dataList.forEach((el,index) => {
+					if(this.checkedIndex == index){
+						el.ischecked = !el.ischecked;
+					}else{
+						el.ischecked = false
+					}
+				})
+			},
+			showExchangePopup(){
+				this.popupShow = false
+				this.$parent.isExchangePopup = true
+			},
+			showPopup(){
+				this.popupShow = true
+			},
+			hidePopup(){
+				this.popupShow = false
+				let coupon = {
+						couponAmount:0,
+						clubCouponId:0,
+					};
+				this.dataList.forEach((el,index) => {
+					if(el.ischecked){
+						coupon.couponAmount = el.couponAmount
+						coupon.clubCouponId = el.clubCouponId
+					}
+				})
+				this.coupon = coupon
+				this.$emit('handleChoiceaCoupon',this.coupon);
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.coupon-template{
+		width: 100%;
+		height: auto;
+		background: #FFFFFF;
+		float: left;
+		margin-top: 24rpx;
+		.coupon-title{
+			width: 702rpx;
+			padding: 0 24rpx;
+			height: 88rpx;
+			line-height: 88rpx;
+			position: relative;
+			.text{
+				font-size: $font-size-28;
+				color: $text-color;
+			}
+			.text-coupon{
+				display: inline-block;
+				float: right;
+				padding-right: 30rpx;
+				line-height: 88rpx;
+				font-size: 28rpx;
+				color: #f94b4b;
+			}
+			.iconfont{
+				width: 50rpx;
+				height: 88rpx;
+				line-height: 88rpx;
+				color: #999999;
+				display: block;
+				position: absolute;
+				right: 0;
+				top: 0;
+			}
+		}
+	}	
+	.tui-popup-box {
+		position: relative;
+		box-sizing: border-box;
+		min-height: 220rpx;
+		padding:24rpx 24rpx 0 24rpx;
+		.title{
+			font-size: $font-size-34;
+			color: $text-color;
+			line-height: 88rpx;
+			text-align: center;
+			float: left;
+			width: 100%;
+			height: 88rpx;
+			display: flex;
+			box-sizing: border-box;
+			padding: 0 24rpx;
+			.title-l{
+				flex: 1;
+				text-align: left;
+			}
+			.title-r{
+				flex: 1;
+				text-align: right;
+				color: #f94b4b;
+			}
+		}
+		.tui-popup-main{
+			width: 100%;
+			float: left;
+			padding-top: 10rpx;
+			.tui-popup-scroll{
+				width: 100%;
+				height: 600rpx;
+				.coupon-list{
+					width: 100%;
+					height: 200rpx;
+					margin-bottom: 24rpx;
+					box-sizing: border-box;
+					background: url(https://static.caimei365.com/app/img/icon/icon-coupon-uesb@2x.png);
+					background-size: cover;
+					.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;
+								.list-cell-checkbox{
+									width: 100%;
+									height: 50%;
+									.checkbox{
+										width: 40rpx;
+										line-height: 60rpx;
+										float: right;
+										box-sizing: border-box;
+										text-align: center;
+										text-decoration: none;
+										-webkit-tap-highlight-color: transparent;
+										overflow: hidden;
+										color: #f94b4b;
+									}
+								}
+							}
+						}
+						.list-cell-time{
+							width: 100%;
+							height: 58rpx;
+							line-height: 58rpx;
+							text-align: left;
+							font-size: $font-size-20;
+							color: #999999;
+						}
+					}
+				}
+			}	
+			.tui-popup-coupon{
+				width: 100%;
+				height: 500rpx;
+				box-sizing: border-box;
+				padding:30rpx 20rpx;
+				.tui-popup-h1{
+					width: 100%;
+					height: 66rpx;
+					display: flex;
+					align-items: center;
+					.tui-popup-text{
+						flex: 1;
+						height: 66rpx;
+						line-height: 66rpx;
+						font-size: $font-size-30;
+						color: #333333;
+						&.red{
+							color: #f94b4b;
+						}
+						&.bold{
+							font-weight: bold;
+						}
+						&.left{
+							text-align: left;
+						}
+						&.right{
+							text-align: right;
+						}
+					}
+				}
+			}
+		}
+		.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;
+			}
+		}
+	}		
+</style>

+ 210 - 0
components/cm-module/creatOrder/exchangeCoupon.vue

@@ -0,0 +1,210 @@
+<template name="alert">
+	<view class="alert spec" :class="specClass">
+		<!-- 运费弹窗说明 -->
+		<view class="coupon-popup">
+			<view class="content">
+				<view class="title">
+					<text>兑换优惠券</text>
+					<text class="iconfont icon-iconfontguanbi" @click.stop="hidePopup"></text>
+				</view>
+				<view class="text-content">
+					<view class="coupon-input">
+						<input class="input" type="text" v-model="params.redemptionCode" maxlength="16"  placeholder="请输入16位兑换码"/>
+					</view>
+					<view class="coupon-main">
+						<view class="coupon-button" @click="exchangeConfirm">立即兑换</view>
+						<view class="coupon-text">
+							<view class="coupon-h1">注意事项:</view>
+							<view class="coupon-h2">1. 兑换码获取:可通过采美线下发放或者销售顾问</view>
+							<view class="coupon-h2 indet">线上发放获得优惠券兑换码,兑换码由16位数字</view>
+							<view class="coupon-h2 indet">和字母组成。</view>
+							<view class="coupon-h2">2. 兑换码使用:在当前页面输入兑换码即可兑换相</view>
+							<view class="coupon-h2 indet">应优惠券一个兑换码只能兑换一张优惠券,</view>
+							<view class="coupon-h2 indet">不可重复使用。</view>
+							<view class="coupon-h2">3. 输入兑换码时请区分字母大小写。</view>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default{
+		name:'alert',
+		props:{},
+		data() {
+			return{
+				params:{
+					userId:0,
+					redemptionCode:'',
+					source:2,
+				},
+			}
+		},
+		created() {
+			this.$api.getComStorage('userInfo').then((resolve) =>{
+				this.params.userId = resolve.userId ? resolve.userId : 0;
+			}).catch(error =>{
+				console.log('暂无用户信息~')
+			})
+		},
+		onLoad(){
+			
+		},
+		methods:{
+			exchangeConfirm(){// 立即兑换
+				if( this.params.redemptionCode == ''){
+					this.$util.msg('请输入位兑换码',2000)
+					return
+				}
+				this.ExchangeCoupon(this.params)
+			},
+			ExchangeCoupon(param){// 兑换优惠券
+				this.ProductService.ExchangeCoupon(param).then(response =>{
+					this.$parent.ExchangeCouponData = response.data
+					this.$parent.isExchangePopup = false
+					this.$parent.isCouponModel = true
+				})
+				.catch(error =>{
+					this.$util.msg(error.msg,2000);
+				})
+			},
+			hidePopup(){
+				this.$parent.isExchangePopup = false
+			},
+		},
+		onShow(){
+	
+		}
+	}
+</script>
+
+<style lang="scss">
+	/*弹窗*/
+	.model-warp.none{
+		display: none;
+	}
+	.model-warp.show{
+		display: block;
+	}
+	.coupon-popup{
+		width: 100%;
+		height: 100%;
+		background: rgba(0,0,0,.5);
+		position: fixed;
+		top: 0;
+		left: 0;
+		z-index: 8888;
+		transition: all 0.4s;
+		&.none{
+			display: none;			
+		}
+		&.show{
+			display: block;
+		}
+		.content{
+			width: 580rpx;
+			height: 700rpx;
+			position: absolute;
+			background: $bg-color;
+			left: 0;
+			right: 0;
+			bottom: 0;
+			top: 0;
+			margin: auto;
+			padding: 20rpx 25rpx;
+			border-radius: 12rpx;
+			.title{
+				width: 100%;
+				height: 68rpx;
+				line-height: 68rpx;
+				font-size: $font-size-28;
+				color: $text-color;
+				text-align: center;
+				margin-bottom: 32rpx;
+				position: relative;
+				font-weight: bold;
+				.icon-iconfontguanbi{
+					width: 68rpx;
+					height: 68rpx;
+					text-align: center;
+					line-height: 68rpx;
+					position: absolute;
+					right: 0;
+					top: 0;
+					font-size: $font-size-36;
+					color: #999999;
+				}
+			}
+			.text-content{
+				width: 100%;
+				height: auto;
+				.coupon-input{
+					width: 100%;
+					height: auto;
+					margin-bottom: 48rpx;
+					.input{
+						width: 100%;
+						height: 66rpx;
+						box-sizing: border-box;
+						border: 1px solid #e2e2e2;
+						line-height: 66rpx;
+						padding: 0 20rpx;
+						font-size: $font-size-26;
+						color: #333333;
+						border-radius: 2rpx;
+					}
+				}
+				.coupon-main{
+					width: 100%;
+					height: auto;
+					box-sizing: border-box;
+					.coupon-button{
+						width: 520rpx;
+						height: 84rpx;
+						margin: 0 auto;
+						border-radius: 50rpx;
+						line-height: 84rpx;
+						text-align: center;
+						background: $btn-confirm;
+						color: #FFFFFF;
+						font-size: $font-size-30;
+					}
+					.coupon-text{
+						width: 100%;
+						box-sizing: border-box;
+						padding: 0 20rpx;
+						margin-top: 40rpx;
+						line-height: 44rpx;
+						text-align: justify;
+						font-size: $font-size-24;
+						.coupon-h1{
+							color: #333333;
+						}
+						.coupon-h2{
+							color: #999999;
+							&.indet{
+								text-indent: 28rpx;
+							}
+						}
+					}
+				}
+			}
+			.btn{
+				width: 100%;
+				height: 88rpx;
+				float: left;
+				background: $btn-confirm;
+				line-height: 88rpx;
+				font-size: $font-size-28;
+				text-align: center;
+				color: #FFFFFF;
+				border-radius: 0;
+				padding: 0;
+				margin-top: 2rpx;
+			}
+		}
+	}
+</style>

+ 175 - 54
components/cm-module/creatOrder/freight.vue

@@ -2,12 +2,28 @@
 	<view class="freight-template" @click.stop="discard">
 		 <!-- 运费信息 -->
 		<view class="invoice-freight">
-			<view class="freight-left">运费<text class="tips" v-if="freightData.freePostFlag == 1">运费可选择到付哟~</text></view>
-			<view class="freight-right" >
-				<view class="freight-text">{{freightText}}</view>
-				<view class="select" v-if="freightData.freePostFlag == 1"  @click.stop="selectFreight">
-					<text class="select-text">{{orderPriceToFixed(freightMoney)}}</text>
-					<text class="iconfont icon-xiayibu"></text>
+			<view class="freight-main">
+				<view class="freight-left">运费<text class="tips" v-if="freightData.freePostFlag == 1">运费可选择到付哟~</text></view>
+				<view class="freight-right" >
+					<view class="freight-text">{{freightText}}</view>
+					<view class="select" v-if="freightData.freePostFlag == 1"  @click.stop="selectFreight">
+						<text class="select-text">{{orderPriceToFixed(freightMoney)}}</text>
+						<text class="iconfont icon-xiayibu"></text>
+					</view>
+				</view>
+			</view>
+			<view class="freight-bean" v-if="isBeansShow">
+				<view class="bean-le" v-if="freePostFlag == 1">可用{{ deductionBeans }}采美豆抵用{{ freightMoney }}元运费</view>
+				<view class="bean-le" v-if="freePostFlag == -1">可用{{ deductionBeans }}采美豆抵用{{ freightMoney }}运费</view>
+				<view class="bean-ri">
+					<view class="checkbox-box">
+						<button class="checkbox iconfont"
+								hover-class="btn-hover"
+								@click.stop="checkedBalabce"
+								:class="[ischecked ?'icon-yixuanze':'icon-weixuanze']"
+						>
+						</button>
+					</view>
 				</view>
 			</view>
 		</view>
@@ -30,6 +46,11 @@
 				isShowOption:false,
 				optionList:['到付'],
 				freePostFlag:'',
+				ischecked:false,
+				isBeansShow:false,
+				userBeans:0,
+				deductionBeans:0,
+				freightBeansMoney:0,
 				
 			}
 		},
@@ -46,19 +67,47 @@
 					case 0:
 						this.freightText = '包邮'
 						this.freightData.freight  = 0
+						this.freePostFlag = res.freePostFlag
+						this.isBeansShow = false
 						break
 					case 1:
 						this.freightText = ''
-						this.freightMoney = res.freight
+						this.freightMoney = this.freightBeansMoney =  res.freight
+						this.userBeans = res.userBeans
+						this.freePostFlag = res.freePostFlag
 						this.optionList.unshift(this.orderPriceToFixed(this.freightMoney))
+						if( res.userBeans > 0 ){
+							this.isBeansShow = true
+						}else{
+							this.isBeansShow = false
+						}
+						if(res.userBeans >= this.freightBeansMoney*100){
+							this.deductionBeans = this.freightBeansMoney*100
+						}else{
+							this.deductionBeans = res.userBeans
+						}
 						break
 					case -1:
 						this.freightText = '到付'
+						this.freightMoney = '到付'
+						this.userBeans = res.userBeans
+						this.freePostFlag = res.freePostFlag
 						this.freightData.freight  = 0
+						this.freightBeansMoney = 30
+						if( res.userBeans >0 ){
+							this.isBeansShow = true
+						}else{
+							this.isBeansShow = false
+						}
+						if(res.userBeans >= this.freightBeansMoney*100){
+							this.deductionBeans = this.freightBeansMoney*100
+						}else{
+							this.deductionBeans = res.userBeans
+						}
 						break
 				}
 			},
-			selectFreight (){
+			selectFreight (){//切换运费
 				let self = this,value;
 				uni.showActionSheet({
 				    itemList: self.optionList,
@@ -67,19 +116,51 @@
 							case 0:
 								self.freightMoney = self.infoData.freight
 								self.freePostFlag = 1
+								if( self.userBeans > 0 ){
+									self.isBeansShow = true
+									self.freightBeansMoney = self.freightMoney
+									if(self.userBeans >= self.freightBeansMoney*100){
+										self.deductionBeans = self.freightBeansMoney*100
+									}else{
+										self.deductionBeans = self.userBeans
+									}
+								}else{
+									self.isBeansShow = false
+									self.freightBeansMoney = 0
+								}
 								break
 							case 1:
 								self.freePostFlag = -1
-								self.freightMoney ='到付'
+								self.freightMoney = '到付'
+								if( self.userBeans > 0 ){
+									self.freightBeansMoney = 30
+									self.isBeansShow = true
+									if(self.userBeans >= self.freightBeansMoney*100){
+										self.deductionBeans = self.freightBeansMoney*100
+									}else{
+										self.deductionBeans = self.userBeans
+									}
+								}else{
+									self.freightBeansMoney = 0
+									self.isBeansShow = false
+								}
 								break
 						}
-						self.$emit('confirmFreight',self.freePostFlag);
+						let obj = {
+								freePostFlag :self.freePostFlag,
+								freightBeansMoney: self.freightBeansMoney
+							}
+						self.$emit('confirmFreight',obj);
 				    },
 				    fail: function (res) {
 				        console.log(res.errMsg);
 				    }
 				});
 			},
+			checkedBalabce(){//勾选使用采美豆抵扣
+				this.ischecked = !this.ischecked
+				this.$emit('confirmFreightBeans',this.ischecked);
+			},
 			orderPriceToFixed (value){
 				let price ='';
 				if(value == '到付'){
@@ -108,61 +189,101 @@
 		float: left;
 		margin-top: 24rpx;
 		.invoice-freight{
-			width: 702rpx;
-			padding: 0 24rpx;
-			height: 86rpx;
-			line-height: 86rpx;
-			font-size: $font-size-28;
-			color: $text-color;
-			background: #FFFFFF;
-			float: left;
-			font-weight: bold;
-			.freight-left{
+			width: 100%;
+			box-sizing: border-box;
+			padding: 10rpx 24rpx;
+			.freight-main{
+				width: 100%;
+				height: 78rpx;
+				line-height: 78rpx;
+				font-size: $font-size-28;
+				color: $text-color;
+				background: #FFFFFF;
 				float: left;
-				.tips{
-					font-size: $font-size-24;
-					color: $color-system;
-					font-weight: normal;
-					margin-left: 20rpx;
-				}
-				.icon-yunfeishuoming{
-					height: 100%;
-					padding:15rpx;
-					color: $color-system;
-					font-weight: normal;
-				}
-			}
-			.freight-right{
-				float: right;
-				color: #2A81FF;
-				position: relative;
-				.freight-text{
+				font-weight: bold;
+				.freight-left{
 					float: left;
+					.tips{
+						font-size: $font-size-24;
+						color: $color-system;
+						font-weight: normal;
+						margin-left: 20rpx;
+					}
+					.icon-yunfeishuoming{
+						height: 100%;
+						padding:15rpx;
+						color: $color-system;
+						font-weight: normal;
+					}
 				}
-				.select{
+				.freight-right{
 					float: right;
-					height: 60rpx;
-					padding: 0 20rpx;
-					margin-top: 14rpx;
-					line-height: 60rpx;
 					color: #2A81FF;
-					font-weight: normal;
 					position: relative;
-					.select-text{
-						display: inline-block;
+					.freight-text{
 						float: left;
-						margin-right: 30rpx;
 					}
-					.iconfont{
-						width: 60rpx;
+					.select{
+						float: right;
 						height: 60rpx;
+						padding: 0 20rpx;
+						margin-top: 14rpx;
 						line-height: 60rpx;
-						text-align: right;
-						position: absolute;
-						right: 0;
-						top: 0;
-						font-size: $font-size-28;
 						color: #2A81FF;
+						font-weight: normal;
+						position: relative;
+						.select-text{
+							display: inline-block;
+							float: left;
+							margin-right: 30rpx;
+						}
+						.iconfont{
+							width: 60rpx;
+							height: 60rpx;
+							line-height: 60rpx;
+							text-align: right;
+							position: absolute;
+							right: 0;
+							top: 0;
+							font-size: $font-size-28;
+							color: #2A81FF;
+						}
+					}
+				}
+			}
+			.freight-bean{
+				width: 100%;
+				height: 58rpx;
+				line-height: 58rpx;
+				float: left;
+				.bean-le{
+					float: left;
+					color: #666666;
+					font-size: $font-size-26;
+					font-weight: normal;
+				}
+				.bean-ri{
+					float: right;
+					display: flex;
+					align-items: center;
+					.checkbox-box{
+						display: flex;
+						width: 60rpx;
+						float: left;
+						height: 100%;
+						font-size: $font-size-26;
+						margin-top: 8rpx;
+						.checkbox{
+							width: 40rpx;
+							text-align: right;
+							box-sizing: border-box;
+							text-align: center;
+							text-decoration: none;
+							border-radius: 0;
+							-webkit-tap-highlight-color: transparent;
+							overflow: hidden;
+							color: $color-system;
+						}
 					}
 				}
 			}

+ 2 - 2
components/cm-module/creatOrder/sellerAddress.vue

@@ -62,11 +62,11 @@
 			initData(res) {
 				if(Object.keys(res).length == 0){
 					this.isEmpty = true
-					this.addressSrc = '/seller/pages/address/addressManage'
+					this.addressSrc = '/pages/seller/address/addressManage'
 				}else{
 					this.isEmpty = false
 					this.$parent.isFreight = false
-					this.addressSrc = '/seller/pages/address/address?type=select'
+					this.addressSrc = '/pages/seller/address/address?type=select'
 				}
 			}
 		}

+ 392 - 0
components/cm-module/creatOrder/sellerCoupon.vue

@@ -0,0 +1,392 @@
+<template name="coupon">
+	<view class="coupon-template">
+		<view class="coupon-title" @tap.stop="showPopup">
+			<text class="text">优惠券:</text>
+			<text class="text-coupon">-¥{{ coupon.couponAmount | NumFormat }}</text>
+			<text class="iconfont icon-xiayibu"></text>
+		</view>
+		<!-- 优惠券 -->
+		<tui-bottom-popup :radius="true" :show="popupShow" @close="hidePopup">
+			<view class="tui-popup-box clearfix">
+				<view class="title">
+					<view class="title-l">优惠券</view>
+					<view class="title-r" @click="showExchangePopup">兑换优惠券</view>
+				</view>
+				<div class="tui-popup-main coupon">
+					<scroll-view class="tui-popup-scroll"  scroll-y="true">
+						<view v-for="(coupon,index) in dataList" :key="index" class="coupon-list"  @click.stop="checkedCoupon(index)">
+							<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">
+											<text class="tags">{{ coupon.couponType | TypeFormat }}</text>
+										</view>
+										<view class="list-cell-texts">
+											<text v-if="coupon.couponType == 0">
+												{{ coupon.productType && coupon.productType == 1 ? '全商城商品通用' : '仅可购买指定商品'  }}
+											</text>
+											<text v-if="coupon.couponType == 1">
+												{{ coupon.categoryType == 1 ? '仅限购买产品类商品' : '仅限购买仪器类商品' }}
+											</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="list-cell-checkbox">
+											<view class="checkbox iconfont"											 
+												  :class="[coupon.ischecked ?'icon-yixuanze':'icon-weixuanze']"
+											>
+											</view>
+										</view>
+									</view>
+								</view>
+								<view class="list-cell-time">{{ coupon.startDate }} - {{ coupon.endDate }}</view>
+							</view>
+						</view>
+					</scroll-view>
+				</div>
+				<view class="tui-right-flex tui-popup-btn">
+					<view class="tui-flex-1">
+						<view class="tui-button" @click="hidePopup">确定</view>
+					</view>
+				</view>
+			</view>	
+		</tui-bottom-popup>	
+	</view>
+</template>
+
+<script>
+	export default{
+		name:"coupon",
+		props:{
+			couponList:{
+				type:Array
+			}
+		},
+		data() {
+			return{
+				popupShow:false,
+				isIphoneX:this.$store.state.isIphoneX,
+				checkedIndex:null,
+				dataList:[],
+				coupon:{
+					couponAmount:0,
+					clubCouponId:0,
+				},
+			}
+		},
+		filters:{
+			NumFormat(value) {//处理金额
+				return Number(value).toFixed(2);
+			},
+			TypeFormat(value) {
+				switch (value) {
+					case 0:
+						return  '活动券';
+						break;
+					case 1:
+						return  '品类券';
+						break;
+					case 2:
+						return  '用户专享券';
+						break;
+					case 3:
+						return  '店铺券';
+						break;
+					case 4:
+						return  '新用户券';
+						break;
+				}
+			}
+		},	
+		created(){
+			this.initData(this.couponList)
+		},
+		computed: {
+
+		},
+		methods:{
+			initData(data){
+				data.forEach((el,index) => {
+					this.dataList.push(Object.assign({},el,{ischecked:false}))
+				})
+				this.coupon.couponAmount = data[0].couponAmount
+				this.dataList[0].ischecked = true
+			},
+			checkedCoupon(idx){// 选择优惠券
+				this.checkedIndex = idx;
+				this.dataList.forEach((el,index) => {
+					if(this.checkedIndex == index){
+						el.ischecked = !el.ischecked;
+					}else{
+						el.ischecked = false
+					}
+				})
+			},
+			showExchangePopup(){
+				this.popupShow = false
+				this.$parent.isExchangePopup = true
+			},
+			showPopup(){
+				this.popupShow = true
+			},
+			hidePopup(){
+				this.popupShow = false
+				let coupon = {
+						couponAmount:0,
+						clubCouponId:0,
+					};
+				this.dataList.forEach((el,index) => {
+					if(el.ischecked){
+						coupon.couponAmount = el.couponAmount
+						coupon.clubCouponId = el.clubCouponId
+					}
+				})
+				this.coupon = coupon
+				this.$emit('handleChoiceaCoupon',this.coupon);
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.coupon-template{
+		width: 100%;
+		height: auto;
+		background: #FFFFFF;
+		float: left;
+		margin-top: 24rpx;
+		.coupon-title{
+			width: 702rpx;
+			padding: 0 24rpx;
+			height: 88rpx;
+			line-height: 88rpx;
+			position: relative;
+			.text{
+				font-size: $font-size-28;
+				color: $text-color;
+			}
+			.text-coupon{
+				display: inline-block;
+				float: right;
+				padding-right: 30rpx;
+				line-height: 88rpx;
+				font-size: 28rpx;
+				color: #f94b4b;
+			}
+			.iconfont{
+				width: 50rpx;
+				height: 88rpx;
+				line-height: 88rpx;
+				color: #999999;
+				display: block;
+				position: absolute;
+				right: 0;
+				top: 0;
+			}
+		}
+	}	
+	.tui-popup-box {
+		position: relative;
+		box-sizing: border-box;
+		min-height: 220rpx;
+		padding:24rpx 24rpx 0 24rpx;
+		.title{
+			font-size: $font-size-34;
+			color: $text-color;
+			line-height: 88rpx;
+			text-align: center;
+			float: left;
+			width: 100%;
+			height: 88rpx;
+			display: flex;
+			box-sizing: border-box;
+			padding: 0 24rpx;
+			.title-l{
+				flex: 1;
+				text-align: left;
+			}
+			.title-r{
+				flex: 1;
+				text-align: right;
+				color: #f94b4b;
+			}
+		}
+		.tui-popup-main{
+			width: 100%;
+			float: left;
+			padding-top: 10rpx;
+			.tui-popup-scroll{
+				width: 100%;
+				height: 600rpx;
+				.coupon-list{
+					width: 100%;
+					height: 200rpx;
+					margin-bottom: 24rpx;
+					box-sizing: border-box;
+					background: url(https://static.caimei365.com/app/img/icon/icon-coupon-uesb@2x.png);
+					background-size: cover;
+					.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;
+								.list-cell-checkbox{
+									width: 100%;
+									height: 50%;
+									.checkbox{
+										width: 40rpx;
+										line-height: 60rpx;
+										float: right;
+										box-sizing: border-box;
+										text-align: center;
+										text-decoration: none;
+										-webkit-tap-highlight-color: transparent;
+										overflow: hidden;
+										color: #f94b4b;
+									}
+								}
+							}
+						}
+						.list-cell-time{
+							width: 100%;
+							height: 58rpx;
+							line-height: 58rpx;
+							text-align: left;
+							font-size: $font-size-20;
+							color: #999999;
+						}
+					}
+				}
+			}	
+			.tui-popup-coupon{
+				width: 100%;
+				height: 500rpx;
+				box-sizing: border-box;
+				padding:30rpx 20rpx;
+				.tui-popup-h1{
+					width: 100%;
+					height: 66rpx;
+					display: flex;
+					align-items: center;
+					.tui-popup-text{
+						flex: 1;
+						height: 66rpx;
+						line-height: 66rpx;
+						font-size: $font-size-30;
+						color: #333333;
+						&.red{
+							color: #f94b4b;
+						}
+						&.bold{
+							font-weight: bold;
+						}
+						&.left{
+							text-align: left;
+						}
+						&.right{
+							text-align: right;
+						}
+					}
+				}
+			}
+		}
+		.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;
+			}
+		}
+	}		
+</style>

+ 210 - 0
components/cm-module/creatOrder/sellerExchangeCoupon.vue

@@ -0,0 +1,210 @@
+<template name="alert">
+	<view class="alert spec" :class="specClass">
+		<!-- 运费弹窗说明 -->
+		<view class="coupon-popup">
+			<view class="content">
+				<view class="title">
+					<text>兑换优惠券</text>
+					<text class="iconfont icon-iconfontguanbi" @click.stop="hidePopup"></text>
+				</view>
+				<view class="text-content">
+					<view class="coupon-input">
+						<input class="input" type="text" v-model="params.redemptionCode" maxlength="16"  placeholder="请输入16位兑换码"/>
+					</view>
+					<view class="coupon-main">
+						<view class="coupon-button" @click="exchangeConfirm">立即兑换</view>
+						<view class="coupon-text">
+							<view class="coupon-h1">注意事项:</view>
+							<view class="coupon-h2">1. 兑换码获取:可通过采美线下发放或者销售顾问</view>
+							<view class="coupon-h2 indet">线上发放获得优惠券兑换码,兑换码由16位数字</view>
+							<view class="coupon-h2 indet">和字母组成。</view>
+							<view class="coupon-h2">2. 兑换码使用:在当前页面输入兑换码即可兑换相</view>
+							<view class="coupon-h2 indet">应优惠券一个兑换码只能兑换一张优惠券,</view>
+							<view class="coupon-h2 indet">不可重复使用。</view>
+							<view class="coupon-h2">3. 输入兑换码时请区分字母大小写。</view>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default{
+		name:'alert',
+		props:{},
+		data() {
+			return{
+				params:{
+					userId:0,
+					redemptionCode:'',
+					source:2,
+				},
+			}
+		},
+		created() {
+			this.$api.getComStorage('orderUserInfo').then((resolve) =>{
+				this.params.userId = resolve.userID ? resolve.userID : 0;
+			}).catch(error =>{
+				console.log('暂无用户信息~')
+			})
+		},
+		onLoad(){
+			
+		},
+		methods:{
+			exchangeConfirm(){// 立即兑换
+				if( this.params.redemptionCode == ''){
+					this.$util.msg('请输入位兑换码',2000)
+					return
+				}
+				this.ExchangeCoupon(this.params)
+			},
+			ExchangeCoupon(param){// 兑换优惠券
+				this.ProductService.ExchangeCoupon(param).then(response =>{
+					this.$parent.ExchangeCouponData = response.data
+					this.$parent.isExchangePopup = false
+					this.$parent.isCouponModel = true
+				})
+				.catch(error =>{
+					this.$util.msg(error.msg,2000);
+				})
+			},
+			hidePopup(){
+				this.$parent.isExchangePopup = false
+			},
+		},
+		onShow(){
+	
+		}
+	}
+</script>
+
+<style lang="scss">
+	/*弹窗*/
+	.model-warp.none{
+		display: none;
+	}
+	.model-warp.show{
+		display: block;
+	}
+	.coupon-popup{
+		width: 100%;
+		height: 100%;
+		background: rgba(0,0,0,.5);
+		position: fixed;
+		top: 0;
+		left: 0;
+		z-index: 8888;
+		transition: all 0.4s;
+		&.none{
+			display: none;			
+		}
+		&.show{
+			display: block;
+		}
+		.content{
+			width: 580rpx;
+			height: 700rpx;
+			position: absolute;
+			background: $bg-color;
+			left: 0;
+			right: 0;
+			bottom: 0;
+			top: 0;
+			margin: auto;
+			padding: 20rpx 25rpx;
+			border-radius: 12rpx;
+			.title{
+				width: 100%;
+				height: 68rpx;
+				line-height: 68rpx;
+				font-size: $font-size-28;
+				color: $text-color;
+				text-align: center;
+				margin-bottom: 32rpx;
+				position: relative;
+				font-weight: bold;
+				.icon-iconfontguanbi{
+					width: 68rpx;
+					height: 68rpx;
+					text-align: center;
+					line-height: 68rpx;
+					position: absolute;
+					right: 0;
+					top: 0;
+					font-size: $font-size-36;
+					color: #999999;
+				}
+			}
+			.text-content{
+				width: 100%;
+				height: auto;
+				.coupon-input{
+					width: 100%;
+					height: auto;
+					margin-bottom: 48rpx;
+					.input{
+						width: 100%;
+						height: 66rpx;
+						box-sizing: border-box;
+						border: 1px solid #e2e2e2;
+						line-height: 66rpx;
+						padding: 0 20rpx;
+						font-size: $font-size-26;
+						color: #333333;
+						border-radius: 2rpx;
+					}
+				}
+				.coupon-main{
+					width: 100%;
+					height: auto;
+					box-sizing: border-box;
+					.coupon-button{
+						width: 520rpx;
+						height: 84rpx;
+						margin: 0 auto;
+						border-radius: 50rpx;
+						line-height: 84rpx;
+						text-align: center;
+						background: $btn-confirm;
+						color: #FFFFFF;
+						font-size: $font-size-30;
+					}
+					.coupon-text{
+						width: 100%;
+						box-sizing: border-box;
+						padding: 0 20rpx;
+						margin-top: 40rpx;
+						line-height: 44rpx;
+						text-align: justify;
+						font-size: $font-size-24;
+						.coupon-h1{
+							color: #333333;
+						}
+						.coupon-h2{
+							color: #999999;
+							&.indet{
+								text-indent: 28rpx;
+							}
+						}
+					}
+				}
+			}
+			.btn{
+				width: 100%;
+				height: 88rpx;
+				float: left;
+				background: $btn-confirm;
+				line-height: 88rpx;
+				font-size: $font-size-28;
+				text-align: center;
+				color: #FFFFFF;
+				border-radius: 0;
+				padding: 0;
+				margin-top: 2rpx;
+			}
+		}
+	}
+</style>

+ 46 - 46
components/cm-module/headerNavbar/header-poduct.vue

@@ -1,20 +1,20 @@
 <template name="headerNavbar">
 	<!-- 自定义导航栏 -->
-	<view class='navbar-wrap' :class="[headerColor? 'bg-color' : 'bg-color']" :style="{height:navbarHeight+'px',paddingTop:CustomBar/2+'px'}"> 
-	  	<view class="navbar-icon" v-if="navbarData.showCapsule ? navbarData.showCapsule : true" 
+	<view class='navbar-wrap' :class="[headerColor? 'bg-color' : 'bg-color']" :style="{height:navbarHeight+'px',paddingTop:CustomBar/2+'px'}"> 
+	  	<view class="navbar-icon" v-if="navbarData.showCapsule ? navbarData.showCapsule : true" 
 			  :style="{top:navbarBtn.top + statusBarHeight+'px;',lineHeight:navbarBtn.height+'px;',left:12+'px;',width:navbarBtn.height+'px;',height:navbarBtn.height+'px;'}">
 			  <text v-if='haveBack' @click="_goBack" class="iconfont icon-fanhui"></text>
 			  <text v-else  @click="_goHome" class="iconfont icon-shouye"></text>
-	  	</view>
+	  	</view>
 		<view class="navbar-text" :style="{top:navbarBtn.top + statusBarHeight+'px;',height:navbarBtn.height+'px;',fontSize:fontSizeSetting+'px;'}">
 			<image class="logo" :style="{width:navbarBtn.height+'px;',height:navbarBtn.height+'px;'}" src="https://static.caimei365.com/app/img/icon/logo-top@2x.png" mode=""></image>
 		</view>
  		<!--<view class="navbar-text" :style="{top:navbarBtn.top + statusBarHeight+'px;',height:navbarBtn.height+'px;',fontSize:fontSizeSetting+'px;'}">
-	    	<view class="gosearch-btn" :style="{paddingLeft:navbarBtn.height+'px;',right:(navbarBtn.width+30)+'px;',borderRadius:(navbarBtn.height/2)+'px;',width:(375-navbarBtn.width*2)+'px;',lineHeight:navbarBtn.height+'px;'}">
+	    	<view class="gosearch-btn" :style="{paddingLeft:navbarBtn.height+'px;',right:(navbarBtn.width+30)+'px;',borderRadius:(navbarBtn.height/2)+'px;',width:(375-navbarBtn.width*2)+'px;',lineHeight:navbarBtn.height+'px;'}">
 				<text class="iconfont icon-sousuo" :style="{width:navbarBtn.height+'px;',height:navbarBtn.height+'px;',lineHeight:navbarBtn.height+'px;'}"></text>
 				<view class="input" @click="this.$api.navigateTo(clickPath)">搜索商品/供应商/项目仪器</view>
 			</view>
-	  	</view> -->
+	  	</view> -->
 	</view>
 </template>
 
@@ -49,16 +49,16 @@
 			return{
 				headerType:'',
 				CustomBar:this.CustomBar,// 顶部导航栏高度
-				clickPath:'/search/pages/search/search',
+				clickPath:'/pages/search/search',
 				haveBack: true, // 是否有返回按钮,true 有 false 没有 若从分享页进入则为 false
-			    statusBarHeight: 0, // 状态栏高度
-			    navbarHeight: 0, // 顶部导航栏高度,
-			    navbarBtn: { // 胶囊位置信息
-			      height: 0,
-			      width: 0,
-			      top: 0,
-			      bottom: 0,
-			      right: 0
+			    statusBarHeight: 0, // 状态栏高度
+			    navbarHeight: 0, // 顶部导航栏高度,
+			    navbarBtn: { // 胶囊位置信息
+			      height: 0,
+			      width: 0,
+			      top: 0,
+			      bottom: 0,
+			      right: 0
 				},
 				platform:'',
 				fontSizeSetting:0
@@ -69,54 +69,54 @@
 			this.fontSizeSetting = this.systeminfo.fontSizeSetting
 			let statusBarHeight = this.systeminfo.statusBarHeight // 状态栏高度
 			let headerPosi = this.headerBtnPosi // 胶囊位置信息
-		    /**
-		     * wx.getMenuButtonBoundingClientRect() 坐标信息以屏幕左上角为原点
-		     * 菜单按键宽度: 87
-		     * 菜单按键高度: 32
-		     * 菜单按键左边界坐标: 278
-		     * 菜单按键上边界坐标: 26
-		     * 菜单按键右边界坐标: 365
-		     * 菜单按键下边界坐标: 58
-		     */
+		    /**
+		     * wx.getMenuButtonBoundingClientRect() 坐标信息以屏幕左上角为原点
+		     * 菜单按键宽度: 87
+		     * 菜单按键高度: 32
+		     * 菜单按键左边界坐标: 278
+		     * 菜单按键上边界坐标: 26
+		     * 菜单按键右边界坐标: 365
+		     * 菜单按键下边界坐标: 58
+		     */
 			let btnPosi = { // 胶囊实际位置,坐标信息不是左上角原点
-			      height: headerPosi.height,
-			      width: headerPosi.width,
-			      // 胶囊top - 状态栏高度
-			      top: headerPosi.top - statusBarHeight,
-			      // 胶囊bottom - 胶囊height - 状态栏height (现胶囊bottom 为距离导航栏底部的长度)
-			      bottom: headerPosi.bottom - headerPosi.height - statusBarHeight,
-			      // 屏幕宽度 - 胶囊right
-			      right: this.systeminfo.screenWidth - headerPosi.right
+			      height: headerPosi.height,
+			      width: headerPosi.width,
+			      // 胶囊top - 状态栏高度
+			      top: headerPosi.top - statusBarHeight,
+			      // 胶囊bottom - 胶囊height - 状态栏height (现胶囊bottom 为距离导航栏底部的长度)
+			      bottom: headerPosi.bottom - headerPosi.height - statusBarHeight,
+			      // 屏幕宽度 - 胶囊right
+			      right: this.systeminfo.screenWidth - headerPosi.right
 			}
 			console.log(btnPosi)
 			let haveBack;
 			if (getCurrentPages().length === 1) { // 当只有一个页面时
-			     haveBack = false;
+			     haveBack = false;
 			} else {
-			     haveBack = true;
+			     haveBack = true;
 			}
-		    this.haveBack=haveBack, // 获取是否是通过分享进入的小程序
-		    this.statusBarHeight=statusBarHeight,
-		    this.navbarHeight= headerPosi.bottom + btnPosi.bottom, // 原胶囊bottom + 现胶囊bottom
+		    this.haveBack=haveBack, // 获取是否是通过分享进入的小程序
+		    this.statusBarHeight=statusBarHeight,
+		    this.navbarHeight= headerPosi.bottom + btnPosi.bottom, // 原胶囊bottom + 现胶囊bottom
 			this.$parent.navbarHeight = this.navbarHeight
 			this.$parent.statusBarHeight = this.statusBarHeight
 			// console.log(this.navbarHeight);
-		    this.navbarBtn=btnPosi
+		    this.navbarBtn=btnPosi
 		},
 		onLoad(){
 			
 		},
 		methods:{
 			_goBack: function () {
-		      	uni.navigateBack({
-		        	delta: this.page
-		      	});
-		    },
-		    _goHome: function () {
-		      	uni.switchTab({
-		        	url: '/pages/tabBar/home/index'
-		      	})
-		    }
+		      	uni.navigateBack({
+		        	delta: this.page
+		      	});
+		    },
+		    _goHome: function () {
+		      	uni.switchTab({
+		        	url: '/pages/tabBar/home/index'
+		      	})
+		    }
 		},
 		onShow(){
 	

+ 0 - 230
components/cm-module/home/cm-custom.vue

@@ -1,230 +0,0 @@
-<template name="headerNavbar">
-	<!-- 自定义导航栏 -->
-	<view class='navbar-wrap' :style="{height:(CustomBar+55)+'px',paddingTop:StatusBar+'px'}" @touchmove.stop.prevent="discard" @tap="hideBubble"> 		
-	  	<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="search-tab">
-				<view class="search-tab-btn"  @click="topBubble">
-					<text>{{ tabValue }}</text>
-					<text class="iconfont icon-xiangxiajiantou"></text>
-				</view>
-				<tui-bubble-popup :show="show" :mask="true" position="absolute" direction="top" @close="topBubble" width="140rpx"
-				 left="10rpx" bottom="0rpx" translateY="100%" triangleRight="60rpx" triangleTop="-22rpx" :maskBgColor="maskBgColor">
-					<view class="tui-menu-item" @tap="selectTabs(1)">产品</view>
-					<view class="tui-menu-item" @tap="selectTabs(2)">供应商</view>
-					<view class="tui-menu-item" @tap="selectTabs(3)">项目仪器</view>
-				</tui-bubble-popup>
-			</view>
-			<view class="gosearch-btn" @click="this.$api.navigateTo(clickPath)">
-				<text class="iconfont icon-iconfonticonfontsousuo1"></text>
-				<input class="input" type="text" v-model="SearchText" value="" placeholder="你想要的这里都有"/>
-			</view>
-			<view class="search-service">
-				<!-- #ifdef MP-WEIXIN -->
-				<button class="contact-btn" open-type="contact" @bindcontact="handleContact">
-					<text class="iconfont icon-liuyan"></text>
-				</button>	
-				<!-- #endif -->
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-	var self;
-	import btSearch from '@/components/uni-search/bt-search.vue'
-	export default{
-		name:'headerNavbar',
-		components:{
-			btSearch,
-		},
-		props:{
-		    navbarData: { // 由父页面传递的数据
-				type: Object
-		    },
-			maskBgColor: {//遮罩背景色
-				type: String,
-				default: 'transparent'
-			},
-		},
-		data() {
-			return{
-				show:false,
-				clickPath:'/search/pages/search/search',
-				SearchText:'',
-				tabValue:'产品',
-				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:{
-			handleContact(e){
-				console.log(e.detail.path)
-				console.log(e.detail.query)
-			},
-			topBubble() {
-				this.show = !this.show;
-			},
-			selectTabs(index){
-				this.show = false
-				switch(index){
-					case 1:
-						this.tabValue='产品'
-						break;
-					case 2:
-						this.tabValue='供应商'
-						break;
-					case 3:
-						this.tabValue='项目仪器'
-						break;
-				}
-			},
-			hideBubble(){
-				this.shwo = false
-			},
-			discard(){
-				//丢弃
-			},
-		},
-		onShow(){
-	
-		}
-	}
-</script>
-
-<style lang="scss">
-	.navbar-wrap {
-		 position: fixed;
-		 width: 100%;
-		 top: 0;
-		 z-index: 100000;
-		 box-sizing: border-box;
-		 background: url(https://img.caimei365.com/group1/M00/03/B0/Cmis217Z9LCAF_anAADHlsIu3aE475.png);
-		 background-size: cover;
-		 border-bottom:none;
-	}
-	.navbar-text {
-		width: 100%;
-		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: 70rpx;
-		padding: 20rpx 0;
-		.search-tab{
-			width: 180rpx;
-			height: 70rpx;
-			line-height: 70rpx;
-			color: #FFFFFF;
-			font-size: $font-size-28;
-			text-align: center;
-			float: left;
-			position: relative;
-			.icon-xiangxiajiantou{
-				margin-left: 10rpx;
-			}
-		}
-		.gosearch-btn{
-			width: 470rpx;
-			height: 100%;
-			float: left;
-			border-radius: 40rpx;
-			background: #F0F0F0;
-			margin: 0 auto;
-			padding:0 20rpx;
-			font-size: 28rpx;
-			line-height: 70rpx;
-			padding-left: 70rpx;
-			color: #8A8A8A;
-			background: #FFFFFF;
-			position: relative;
-			box-sizing: border-box;
-			.icon-iconfonticonfontsousuo1{
-				width: 70rpx;
-				height: 70rpx;
-				line-height: 70rpx;
-				text-align: center;
-				display: block;
-				position: absolute;
-				left: 0;
-				top: 0;
-				font-size: 34rpx;
-				color: #8A8A8A;
-				z-index: 10;
-			}
-			.input{
-				width: 400rpx;
-				height: 100%;
-				float: left;
-			}
-		}
-		.search-service{
-			width: 100rpx;
-			height: 70rpx;
-			line-height: 70rpx;
-			float: right;
-			text-align: center;
-			color: #FFFFFF;
-			.contact-btn{
-				width: 100%;
-				height: 70rpx;
-				background-color: rgba(0,0,0,0);
-				line-height: 70rpx;
-				.icon-liuyan{
-					font-size: 64rpx;
-					color: #FFFFFF;
-				}
-			}
-		}
-	}
-</style>

+ 24 - 15
components/cm-module/homeIndex/banner.vue

@@ -1,17 +1,19 @@
 <template>
 	<view>
-		<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 list" :key="index" @click.stop="NavToDetailPage(item)">
-					<image :src="item.image" class="tui-slide-image" mode="scaleToFill"/>
-				</swiper-item>
-			</swiper>
-			<view class="swiper__dots-box" v-if="list.length > 1">
-				<view v-for="(item,idx) in list" 
-					  :key="idx" 
-					  :class="[idx===current?'swiper__dots-long':'none']" 
-					  :data-index="current" class="swiper__dots-item">
-				</view>	  
+		<view class="swiper-banner-content">
+			<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 list" :key="index" @click.stop="NavToDetailPage(item)">
+						<image :src="item.image" class="tui-slide-image" mode="scaleToFill"/>
+					</swiper-item>
+				</swiper>
+				<view class="swiper__dots-box" v-if="list.length > 1">
+					<view v-for="(item,idx) in list" 
+						  :key="idx" 
+						  :class="[idx===current?'swiper__dots-long':'none']" 
+						  :data-index="current" class="swiper__dots-item">
+					</view>	  
+				</view>
 			</view>
 		</view>
 		<view class="swiper-banner-msg">
@@ -62,11 +64,18 @@
 </script>
 
 <style lang="scss">
+	.swiper-banner-content{
+		width: 100%;
+		height: 200rpx;
+		padding-top:100rpx;
+		background:#F28F31;
+		position: relative;
+		background-size: cover;
+		margin-bottom: 170rpx;
+	}
 	.swiper-banner-box{
 		width: 100%;
 		height: 360rpx;
-		padding-top:100rpx;
-		background:#FFFFFF url(https://img.caimei365.com/group1/M00/03/B0/Cmis217Z9LCALu9wAAAv45Bdpsk814.png)no-repeat;
 		position: relative;
 		background-size: cover;
 	}	
@@ -120,7 +129,7 @@
 		height: 54rpx;
 		box-sizing: border-box;
 		padding: 0 24rpx;
-		margin-top: 20rpx;
+		margin-top: 24rpx;
 		.content{
 			width: 100%;
 			height: 54rpx;

+ 45 - 0
components/cm-module/homeIndex/coupon.vue

@@ -0,0 +1,45 @@
+<template name="navbars">
+	<view>
+		<view class="coupon-content clearfix" @click="navigator('/pages/user/coupon/coupon-collection')">
+			<image src="https://static.caimei365.com/app/img/icon/icon-coupon-banner@2x.png" mode=""></image>
+		</view>
+	</view>
+</template>
+
+<script>
+	import { mapState,mapMutations } from 'vuex'
+	export default{
+		name:"navbars",
+		data() {
+			return{
+				
+			}
+		},
+		created(){
+			
+		},
+		computed: {
+			...mapState(['hasLogin','userInfo','isWxAuthorize'])
+		},
+		methods:{
+			navigator(url){
+				this.$api.navigateTo(url)
+			},
+		}
+	}
+</script>
+
+<style lang="scss">
+	.coupon-content{
+		width: 100%;
+		height: 254rpx;
+		box-sizing: border-box;
+		padding: 32rpx 24rpx 12rpx 24rpx;
+		background-color: #f7f7f7;
+		image{
+			width: 100%;
+			height: 210rpx;
+			display: block;
+		}
+	}
+</style>

+ 2 - 2
components/cm-module/homeIndex/customer.vue

@@ -31,7 +31,7 @@
 		},
 		data() {
 			return{
-				clickPath:'/search/pages/search/search',
+				clickPath:'/pages/search/search',
 				hotSearchText:'搜索商品/项目仪器',
 				CustomBar:this.CustomBar,// 顶部导航栏高度
 				StatusBar: this.StatusBar,
@@ -77,7 +77,7 @@
 		 top: 0;
 		 z-index: 100000;
 		 box-sizing: border-box;
-		 background: url(https://img.caimei365.com/group1/M00/03/B0/Cmis217Z9LCAF_anAADHlsIu3aE475.png);
+		 background: url(https://static.caimei365.com/app/img/bg/home_cumres@2x.png);
 		 background-size: cover;
 		 border-bottom:none;
 	}

+ 11 - 8
components/cm-module/homeIndex/navbars.vue

@@ -41,19 +41,22 @@
 				 * 1、二级页面,2、搜索项目仪器,3、直播页面,4、自由页面,5、商品详情,6、仪器项目详情,7、供应商主页
 				 * 8、专题活动页,9、二手市场介绍,10、二手商品列表,11、二手商品发布,12、商品搜索,13、信息详情
 				 * 14、品牌招商介绍页,15、维修保养介绍页,16、首页,17、注册页,18、信息中心,19、供应商列表
+				 * 23、新活动专题页面
 				 **/
 				console.log(pros);
 				if(pros.linkType){
 					 const typeMap = {
 						1:`/pages/goods/goods-instrument?linkId=${pros.linkParam.id}&title=${pros.name}`,
-						3:`/h5/pages/article/path-live`,
-						10:`/second/pages/product/product-list`,
-						14:`/h5/pages/other/brand`,
-						15:`/h5/pages/other/repair`,
-						18:`/h5/pages/article/path?link=${pros.link}`,
+						3:`/pages/h5/article/path-live`,
+						4:`/pages/h5/other/brands`,
+						10:`/pages/second/product/product-list`,
+						14:`/pages/h5/other/brand`,
+						15:`/pages/h5/other/repair`,
+						18:`/pages/h5/article/path?link=${pros.link}`,
 						20:`/pages/goods/good-floor?linkId=${pros.linkParam.id}&title=${pros.name}`,
-						21:`/h5/pages/activity/meobohui`,
-						22:`/pages/goods/good-floor-temp?linkId=${pros.linkParam.id}&title=${pros.name}`
+						21:`/pages/h5/activity/meobohui`,
+						22:`/pages/goods/good-floor-temp?linkId=${pros.linkParam.id}&title=${pros.name}`,
+						23:`/pages/h5/activity/activity-topic?linkId=${pros.linkParam.id}`  //活动专题页面
 					 }
 					const url = typeMap[pros.linkType];
 					this.$api.navigateTo(url)
@@ -69,7 +72,7 @@
 		height: auto;
 		box-sizing: border-box;
 		padding: 0 24rpx;
-		margin-top: 30rpx;
+		margin-top: 24rpx;
 		.nav-item{
 			width: 164rpx;
 			height: auto;

+ 102 - 96
components/cm-module/homeIndex/pageFloor.vue

@@ -1,140 +1,146 @@
 <template>
 	<view>
-		<view class="page-content clearfix" v-for="(page,index) in pageFloorList" :key="index">
+		<view class="page-content clearfix" v-for="(page, index) in pageFloorList" :key="index">
 			<view class="tui-group-name" v-if="page.floorContent">
 				<view class="tui-group-title">
 					<view class="tui-group-l">{{ page.title }}</view>
-					<view class="tui-group-r"  v-if="page.floorContent.templateType != '8'" @click="NavToDetailPage(page)">
-						<text>更多</text>
-						<text class="iconfont icon-xiayibu"></text>
+					<view
+						class="tui-group-r"
+						v-if="page.floorContent.templateType != '8'"
+						@click="NavToDetailPage(page)"
+					>
+						<text>更多</text> <text class="iconfont icon-xiayibu"></text>
 					</view>
-					
 				</view>
 				<view class="tui-sub__desc">{{ page.detail }}</view>
 			</view>
+
 			<template v-if="page.floorContent.templateType == '1'">
 				<templateA :pageData="page" :userIdentity="userIdentity"></templateA>
-			</template>	 
+			</template>
 			<template v-if="page.floorContent.templateType == '2'">
 				<templateB :pageData="page" :userIdentity="userIdentity"></templateB>
-			</template>	 
+			</template>
 			<template v-if="page.floorContent.templateType == '3'">
 				<templateC :pageData="page" :userIdentity="userIdentity"></templateC>
-			</template>	 
+			</template>
 			<template v-if="page.floorContent.templateType == '4'">
 				<templateD :pageData="page" :userIdentity="userIdentity"></templateD>
-			</template>	 
+			</template>
 			<template v-if="page.floorContent.templateType == '5'">
 				<templateE :pageData="page" :userIdentity="userIdentity"></templateE>
-			</template>	 
+			</template>
 			<template v-if="page.floorContent.templateType == '6'">
 				<templateF :pageData="page" :userIdentity="userIdentity"></templateF>
-			</template>	 
+			</template>
 			<template v-if="page.floorContent.templateType == '7'">
 				<templateG :pageData="page" :userIdentity="userIdentity"></templateG>
-			</template>	 
+			</template>
 			<template v-if="page.floorContent.templateType == '8'">
 				<templateH :pageData="page" :userIdentity="userIdentity"></templateH>
-			</template>	  
+			</template>
 		</view>
 	</view>
 </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'
-	export default{
-		name:"pageFloor",
-		components:{
-			templateA,
-			templateB,
-			templateC,
-			templateD,
-			templateE,
-			templateF,
-			templateG,
-			templateH,
-		},
-		props:{
-			list:{
-				type:Array
-			},
-			pageType:{
-				type:Number
-			},
-			userIdentity:{
-				type:Number
-			}
-		},
-		data() {
-			return{
-				pageFloorList:[]
-			}
+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'
+export default {
+	name: 'pageFloor',
+	components: {
+		templateA,
+		templateB,
+		templateC,
+		templateD,
+		templateE,
+		templateF,
+		templateG,
+		templateH
+	},
+	props: {
+		list: {
+			type: Array
 		},
-		created(){
-			this.initData(this.list)
+		pageType: {
+			type: Number
 		},
-		computed: {
-	
+		userIdentity: {
+			type: Number
+		}
+	},
+	data() {
+		return {
+			pageFloorList: []
+		}
+	},
+	created() {
+		this.initData(this.list)
+	},
+	computed: {},
+	methods: {
+		initData(data) {
+			this.pageFloorList = data
 		},
-		methods:{
-			initData(data){
-				this.pageFloorList = data
-			},
-			NavToDetailPage(page) {//跳转
-				this.$api.navigateTo(`/pages/goods/good-floorMore?pageType=${this.pageType}&floorId=${page.id}&title=${page.title}`)
-			}
+		NavToDetailPage(page) {
+			//跳转
+			this.$api.navigateTo(
+				`/pages/goods/good-floorMore?pageType=${this.pageType}&floorId=${page.id}&title=${
+					page.title
+				}`
+			)
 		}
 	}
+}
 </script>
 
 <style lang="scss">
-	.page-content{
-		background-color: #F7F7F7;
-		width: 100%;
-		height: auto;
-		box-sizing: border-box;
-		padding: 0 24rpx;
+.page-content {
+	background-color: #f7f7f7;
+	width: 100%;
+	height: auto;
+	box-sizing: border-box;
+	padding: 0 24rpx;
+	float: left;
+}
+.tui-group-name {
+	width: 100%;
+	height: 92rpx;
+	padding: 20rpx 0;
+}
+.tui-group-title {
+	width: 100%;
+	float: left;
+	.tui-group-l {
 		float: left;
+		font-size: 34rpx;
+		font-weight: bold;
+		text-align: left;
+		line-height: 49rpx;
+		color: #333;
 	}
-	.tui-group-name {
-		width: 100%;
-		height: 92rpx;
-		padding: 20rpx 0;
-	}
-	.tui-group-title{
-		width: 100%;
-		float: left;
-		.tui-group-l{
-			float: left;
-			font-size: 34rpx;
-			font-weight: bold;
-			text-align: left;
-			line-height: 49rpx;
-			color: #333;
-		}
-		.tui-group-r{
-			float: right;
-			font-size: $font-size-26;
-			text-align: right;
-			line-height: 49rpx;
+	.tui-group-r {
+		float: right;
+		font-size: $font-size-26;
+		text-align: right;
+		line-height: 49rpx;
+		color: #999999;
+		.icon-xiayibu {
+			font-size: $font-size-30;
 			color: #999999;
-			.icon-xiayibu{
-				font-size: $font-size-30;
-				color: #999999;
-			}
 		}
 	}
-	.tui-sub__desc {
-		width: 100%;
-		float: left;
-		color: rgba(153,153,153,0.9);
-		font-size: $font-size-26;
-	}
+}
+.tui-sub__desc {
+	width: 100%;
+	float: left;
+	color: rgba(153, 153, 153, 0.9);
+	font-size: $font-size-26;
+}
 </style>

+ 40 - 17
components/cm-module/homeIndex/pageSpecial.vue

@@ -95,12 +95,28 @@
 				this.tempData = data
 			},
 			NavArticlePath(LINK){
-				 this.$api.navigateTo(`/h5/pages/article/path?link=${LINK}`)
+				// 友盟埋点首页文章模块点击
+				if(process.env.NODE_ENV != 'development'){
+					this.$uma.trackEvent('Um_Event_HomeArticleTemplateClick', {
+						Um_Key_ArticleLink: `${LINK}`,
+						Um_Key_PageName: '首页文章模块',
+						Um_Key_SourcePage: '商城首页',
+					})
+				}
+				this.$api.navigateTo(`/pages/h5/article/path?link=${LINK}`)
 			},
 			NewActivityList(){
-				this.$api.navigateTo('/h5/pages/activity/activity-list')
+				this.$api.navigateTo('/pages/h5/activity/activity-list')
 			},
 			NewActivityListPath(pros){
+				// 友盟埋点首页活动模块点击
+				if(process.env.NODE_ENV != 'development'){
+					this.$uma.trackEvent('Um_Event_HomeActivityTemplateClick', {
+						Um_Key_ActivityName: `${pros.title}`,
+						Um_Key_PageName: '首页活动模块',
+						Um_Key_SourcePage: '商城首页',
+					})
+				}
 				/**
 				 * 页面跳转类型
 				 * 1、二级页面,2、搜索项目仪器,3、直播页面,4、自由页面,5、商品详情,6、仪器项目详情,7、供应商主页
@@ -112,20 +128,20 @@
 					const typeMap = {
 					 	1:`/pages/goods/goods-instrument?linkId=${pros.linkParam.id}&title=${pros.name}`,
 					 	2:`/pages/goods/instrument-details?id=${pros.linkParam.id}`,
-						4:`/h5/pages/activity/activity?title=${pros.title}&link=${pros.appletsLink}`,
+						4:`/pages/h5/activity/activity?title=${pros.title}&link=${pros.appletsLink}`,
 					 	5:`/pages/goods/product?id=${pros.linkParam.id}`,
-					 	7:`/supplier/pages/user/my-shop?shopId=${pros.linkParam.id}`,
-					 	8:`/h5/pages/activity/activity-list`,
-					 	9:`/second/pages/form/introduce`,
-					 	10:`/second/pages/product/product-list`,
-					 	11:`/second/pages/form/form`,
-					 	12:`/search/pages/search/search?keyWord=${pros.linkParam.keyword}`,
-					 	13:`/h5/pages/article/path?link=${pros.link}`,
-					 	14:`/h5/pages/article/path?link=${pros.link}`,
-					 	15:`/h5/pages/article/path?link=${pros.link}`,
+					 	// 7:`/pages/supplier/user/my-shop?shopId=${pros.linkParam.id}`,
+					 	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=${pros.linkParam.keyword}`,
+					 	13:`/pages/h5/article/path?link=${pros.link}`,
+					 	14:`/pages/h5/article/path?link=${pros.link}`,
+					 	15:`/pages/h5/article/path?link=${pros.link}`,
 					 	17:`/pages/login/register-select`,
-					 	18:`/h5/pages/article/path?link=${pros.link}`,
-					 	19:`/search/pages/search/search-supplier?keyWord=${pros.linkParam.keyword}`
+					 	18:`/pages/h5/article/path?link=${pros.link}`,
+					 	19:`/pages/search/search-supplier?keyWord=${pros.linkParam.keyword}`
 					}
 					const url = typeMap[pros.linkType];
 					uni.navigateTo({
@@ -134,7 +150,7 @@
 				}
 			},
 			LiveGoPath(){//查看直播
-				this.$api.navigateTo('/h5/pages/article/path-live')
+				this.$api.navigateTo('/pages/h5/article/path-live')
 				
 				// uni.navigateToMiniProgram({
 				// 	appId: 'wx92d650b253f8f2e3',
@@ -150,7 +166,15 @@
 				// })
 			},
 			LiveGoPathPros(live){
-				this.$api.navigateTo(`/h5/pages/article/page-image?title=${live.liveTitle}&image=${live.advertisingImage}`)
+				// 友盟埋点首页直播模块点击
+				if(process.env.NODE_ENV != 'development'){
+					this.$uma.trackEvent('Um_Event_HomeLiveTemplateClick', {
+						Um_Key_LiveName: `${live.liveTitle}`,
+						Um_Key_PageName: '首页直播模块',
+						Um_Key_SourcePage: '商城首页',
+					})
+				}
+				this.$api.navigateTo(`/pages/h5/article/page-image?title=${live.liveTitle}&image=${live.advertisingImage}`)
 			}
 		}
 	}
@@ -163,7 +187,6 @@
 		padding: 24rpx;
 		float: left;
 		background-color: #F7F7F7;
-		margin-top: 16rpx;
 		box-sizing: border-box;
 		background-color: #F7F7F7;
 		overflow: hidden;

+ 1 - 1
components/cm-module/homeIndex/supplierList.vue

@@ -47,7 +47,7 @@
 				this.$api.BannerNavigateTo(linkType,linkId,linkHref,keyword)
 			},
 			NavToDetailPage(item) {//跳转
-				this.$api.navigateTo(`/supplier/pages/user/my-shop?shopId=${item.linkParam.id}`)
+				this.$api.navigateTo(`/pages/supplier/user/my-shop?shopId=${item.linkParam.id}`)
 			}
 		}
 	}

+ 60 - 29
components/cm-module/listTemplate/buyagainList.vue

@@ -3,35 +3,39 @@
 		<list-skeleton v-if="showSkeleton"></list-skeleton>
 		<view class="product-container" v-if="!isShowEmpty" :style="{paddingTop:searchStatus?'112rpx':''}">
 			<scroll-view :style="{'height':scrollHeight+'px'}" @scrolltolower="scrolltolower" scroll-y v-if="productList.length > 0">
-				<view v-for="(item,index) in productList" :key="index" :id="item.id" class="all-type-list-content commodity-list" @click.stop="navToDetailPage(item.productID)">
-					<image mode='widthFix' :src="item.mainImage"  class="list-img" alt="list-img"></image>
+				<view v-for="(item,index) in productList" :key="index" :id="item.productId" class="all-type-list-content commodity-list" @click.stop="navToDetailPage(item.productId)">
+					<image mode='widthFix' :src="item.image"  class="list-img" alt="list-img"></image>
 					<view class="list-details-info">
 						<text class="list-details-title">{{item.name}}</text>
 						<text class="list-details-specs">规格:{{item.unit !=null ? item.unit : ''}}</text>
-						<text class="list-details-miniQuantity">起订量:{{item.ladderPriceFlag == '1' ? item.maxBuyNumber : item.minBuyNumber}}</text>
+						<text class="list-details-miniQuantity">起订量:{{item.ladderPriceFlag == 1 ? item.maxBuyNumber : item.minBuyNumber}}</text>
 						<view class="list-details-price">
 							<view class="list-shop">
-								<view class="list-price-none" v-if="item.repurchasePriceState">
-									<text class="price-none">¥{{item.discountPrice}}</text>
+								<view class="list-price-none" v-if="item.repurchaseFlag == 1">
+									<text class="price-none">¥{{item.originalPrice}}</text>
 									<text class="iconfont icon-wenhao" @click.stop="repurchModel"></text>
 								</view>
 								<view class="list-price" v-else>
 									<text class="price-larger" :class="PromotionsFormat(item.promotions) ? 'none' : ''">
-										¥{{ (PromotionsFormat(item.promotions) ? item.price1 : item.retailPrice) | NumFormat }}
+										¥{{ (PromotionsFormat(item.promotions) ? item.originalPrice : item.price) | NumFormat }}
 									</text>
 								</view>
 							</view>
 							<button class="add-cart-btn" @click.stop="operationHanld(item)">数量</button>
 						</view>
-						<view class="list-details-price" v-if="item.actStatus==1">
-							<view class="floor-item-act">
-								<view class="floor-tags" v-if="PromotionsFormat(item.promotions)">
-									{{item.promotions.name}}<text>:¥{{ item.retailPrice | NumFormat }}</text>
-								</view>
-								<view class="floor-tags" v-else>{{item.promotions.name}}</view>	
+						<view class="list-details-price">
+							<view class="floor-item-act" v-if="item.actStatus==1">
+								<view class="coupon-tags" v-if="item.couponsLogo">优惠券</view>
+								<template v-if="item.actStatus==1">
+									<view class="floor-tags" v-if="PromotionsFormat(item.promotions)">
+										{{item.promotions.name}}<text>:¥{{ item.price | NumFormat }}</text>
+									</view>
+									<view class="floor-tags" v-else>{{item.promotions.name}}</view>	
+								</template>
 							</view>
-							<view class="floor-item-act" v-if="item.actStatus ==0  &&  item.ladderPriceFlag==1">
-								<view class="floor-tags">阶梯价格</view>	
+							<view class="floor-item-act" v-if="item.actStatus==0">
+								<view class="coupon-tags" v-if="item.couponsLogo">优惠券</view>
+								<view class="floor-tags" v-if="item.actStatus ==0  &&  item.ladderPriceFlag==1">阶梯价格</view>	
 							</view>
 						</view>	
 					</view>
@@ -81,7 +85,7 @@
 				windowHeight: '',
 				showSkeleton: true,
 				isShowEmpty: false,
-				userID: '',
+				userId: '',
 				scrollHeight: '',
 				productList: [],
 				showLoading: false,
@@ -103,8 +107,8 @@
 			this.setScrollHeight();		
 			this.$parent.getClubProductNum()
 			this.$api.getComStorage('orderUserInfo').then((resolve) =>{
-				this.userID = resolve.userID
-				this.getProductAgainInfo()
+				this.userId = resolve.userID
+				this.getProductAgainInfo(false)
 			})
 		},
 		filters: {
@@ -132,22 +136,30 @@
 				this.loadingText = '加载中';
 				this.isShowEmpty = false;				
 				if(loadMore) {this.pageNum += 1;}
-				let params = {userId:this.userID,pageNum:this.pageNum,pageSize:this.pageSize}
-				this.ProductService.GetRepeatBuyAgainProductList(params).then(response =>{
+				this.ProductService.GetRepeatBuyAgainProductList(
+					{
+						userId:this.userId,
+						pageNum:this.pageNum,
+						pageSize:this.pageSize,
+					}
+				)
+				.then(response =>{
 					this.isShowWrapper = true
-					const responseData = response.data.pageDate;
-					if(responseData.results && responseData.results.length > 0){
-						this.hasNextPage = responseData.hasNextPage;
+					this.showSkeleton = false;
+					const listData = response.data.results;
+					if(listData && listData.length > 0){
+						this.hasNextPage = response.data.hasNextPage;
 						this.isShowEmpty = false;
 						if(loadMore) {
-							this.productList = [...this.productList,...responseData.results];
+							this.productList = [...this.productList,...listData];
 						} else {
-							this.productList = [...responseData.results];
-							this.showSkeleton = false;
+							this.productList = listData;
+							console.log(this.productList)
 						}
 						//价格显示处理
 						let isActFlg,newProductList=[];
 						this.productList.map((item, index)=> {
+							console.log(item)
 							if(item.actStatus == 1){
 								isActFlg = true
 							}else if(item.actStatus == 1 && item.ladderPriceFlag == 1){
@@ -158,6 +170,7 @@
 							newProductList.push(Object.assign({},item,{isShowActFlg:isActFlg}))
 						})
 						this.productList = newProductList
+						console.log(this.productList)
 						// 防上拉暴滑
 						this.pullFlag = false;
 						setTimeout(()=>{
@@ -175,7 +188,8 @@
 							this.isShowEmpty = true;
 						}
 					}
-				}).catch(error =>{
+				})
+				.catch(error =>{
 					this.$util.msg(error.msg,2000);
 				})
 			},
@@ -299,9 +313,26 @@
 			text-align: center;
 			box-sizing: border-box;
 			float: left;
+			padding: 11rpx 0;
+			.coupon-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: left;
+				margin-right: 12rpx;
+			}
 			.floor-tags{
-				height: 28rpx;
-				border-radius: 6rpx;
+				height: 32rpx;
+				box-sizing: border-box;
+				border-radius: 8rpx;
 				background-color: #FFFFFF;
 				line-height: 28rpx;
 				color: $color-system;
@@ -309,8 +340,8 @@
 				display: inline-block;
 				padding:0 16rpx;
 				font-size: $font-size-20;
-				margin-left: 15rpx;
 				border: 1px solid #E15616;
+				float: left;
 			}
 		}
 		.price-icon {

+ 51 - 18
components/cm-module/listTemplate/classifyProductList.vue

@@ -11,25 +11,35 @@
 					<view class="list-details-specs" v-if="item.productCode!=''&&item.productCode!=null">商品编码:{{item.productCode}}</view>
 					<view class="list-details-price">
 						<template v-if="userIdentity == 3">
-							<view class="floor-item-act" v-if="item.actStatus==1">
-								<view class="floor-tags" v-if="PromotionsFormat(item.promotions)">
-									{{item.promotions.name}}<text v-if="item.price1TextFlag != '1' && item.supplierId === shopId">:¥{{ item.price | NumFormat }}</text>
-								</view>
-								<view class="floor-tags" v-else>{{item.promotions.name}}</view>	
+							<view class="floor-item-act" v-if="item.actStatus==1">>
+								<view class="coupon-tags" v-if="item.couponsLogo">优惠券</view>
+								<template>
+									<view class="floor-tags" v-if="PromotionsFormat(item.promotions)">
+										{{item.promotions.name}}
+										<text v-if="item.price1TextFlag != '1' && item.supplierId === shopId">:¥{{ item.price | NumFormat }}</text>
+									</view>
+									<view class="floor-tags" v-else>{{item.promotions.name}}</view>	
+								</template>
 							</view>
-							<view class="floor-item-act" v-if="item.actStatus ==0  &&  item.ladderPriceFlag==1">
-								<view class="floor-tags">阶梯价格</view>	
+							<view class="floor-item-act" v-if="item.actStatus ==0">
+								<view class="coupon-tags" v-if="item.couponsLogo">优惠券</view>
+								<view class="floor-tags" v-if="item.actStatus ==0  &&  item.ladderPriceFlag==1">阶梯价格</view>	
 							</view>
 						</template>
 						<template v-else>
 							<view class="floor-item-act" v-if="item.actStatus==1">
-								<view class="floor-tags" v-if="PromotionsFormat(item.promotions)">
-									{{item.promotions.name}}<text v-if="hasLogin && item.price1TextFlag != '1'">:¥{{ item.price | NumFormat }}</text>
-								</view>
-								<view class="floor-tags" v-else>{{item.promotions.name}}</view>	
+								<view class="coupon-tags" v-if="item.couponsLogo">优惠券</view>
+								<template>
+									<view class="floor-tags" v-if="PromotionsFormat(item.promotions)">
+										{{item.promotions.name}}
+										<text v-if="hasLogin && userIdentity == 2 && item.price1TextFlag != '1'">:¥{{ item.price | NumFormat }}</text>
+									</view>
+									<view class="floor-tags" v-else>{{item.promotions.name}}</view>	
+								</template>
 							</view>
-							<view class="floor-item-act" v-if="item.actStatus ==0  &&  item.ladderPriceFlag==1">
-								<view class="floor-tags">阶梯价格</view>	
+							<view class="floor-item-act" v-if="item.actStatus ==0">
+								<view class="coupon-tags" v-if="item.couponsLogo">优惠券</view>
+								<view class="floor-tags" v-if="item.actStatus ==0  &&  item.ladderPriceFlag==1">阶梯价格</view>	
 							</view>
 						</template>
 						<view v-if="hasLogin" class="list-price">
@@ -214,7 +224,13 @@
 					productIdArr.push(item.productID)
 				})
 				this.productIds = productIdArr.join(",");
-				this.ProductService.querySearchProductPrice({userId: this.userID,productIds:this.productIds}).then(response =>{
+				this.ProductService.querySearchProductPrice(
+					{
+						userId: this.userID,
+						productIds:this.productIds,
+						source: 2
+					}
+				).then(response =>{
 					if (response.data) {
 						this.listData = this.ReturnNewProducts(this.listData,response.data);
 					}
@@ -329,9 +345,26 @@
 			text-align: center;
 			box-sizing: border-box;
 			float: right;
-			.floor-tags{			
-				height: 28rpx;
-				border-radius: 6rpx;
+			padding: 11rpx 0;
+			.coupon-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: left;
+				margin-right: 12rpx;
+			}
+			.floor-tags{
+				height: 32rpx;
+				box-sizing: border-box;
+				border-radius: 8rpx;
 				background-color: #FFFFFF;
 				line-height: 28rpx;
 				color: $color-system;
@@ -339,8 +372,8 @@
 				display: inline-block;
 				padding:0 16rpx;
 				font-size: $font-size-20;
-				margin-left: 15rpx;
 				border: 1px solid #E15616;
+				float: left;
 			}
 		}
 		.price-icon {

+ 0 - 449
components/cm-module/listTemplate/commodityList.vue

@@ -1,449 +0,0 @@
-<!-- 分类商品模块 -->
-<template>
-	<view class="container commodity-list-wrapper" :style="{'overflow':(showSkeleton? 'hidden' : 'auto'),'height': (showSkeleton? windowHeight + 'px' : 'auto')}">
-		<list-skeleton v-if="showSkeleton" :listType='0'></list-skeleton>
-		<scroll-view :style="{'height':scrollHeight+'px'}" @scrolltolower="toLower" scroll-y v-if="listData.length > 0">
-			<view v-for="(item,index) in listData" :key="index" :id="item.id" class="all-type-list-content commodity-list" @click.stop="navToDetailPage(item.p_id)">
-				<image mode='widthFix' :src="item.p_image"  class="list-img" alt="list-img"></image>
-				<view class="list-details-info">
-					<text class="list-details-title">{{item.p_name}}</text>
-					<text class="list-details-specs">规格:{{item.p_unit}}</text>
-					<view class="list-details-specs" v-if="item.p_code!=''&&item.p_code!=null">商品编码:{{item.p_code}}</view>
-					<view class="list-details-price">
-						<template v-if="userIdentity == 3">
-							<view class="floor-item-act" v-if="item.actStatus==1">
-								<view class="floor-tags" v-if="PromotionsFormat(item.promotions)">
-									{{item.promotions.name}}<text v-if="item.p_price_flag != '1' && item.supplierId === shopId">:¥{{ item.price | NumFormat }}</text>
-								</view>
-								<view class="floor-tags" v-else>{{item.promotions.name}}</view>	
-							</view>
-							<view class="floor-item-act" v-if="item.actStatus ==0  &&  item.ladderPriceFlag==1">
-								<view class="floor-tags">阶梯价格</view>	
-							</view>
-						</template>
-						<template v-else>
-							<view class="floor-item-act" v-if="item.actStatus==1">
-								<view class="floor-tags" v-if="PromotionsFormat(item.promotions)">
-									{{item.promotions.name}}<text v-if="hasLogin && item.p_price_flag != '1'">:¥{{ item.price | NumFormat }}</text>
-								</view>
-								<view class="floor-tags" v-else>{{item.promotions.name}}</view>	
-							</view>
-							<view class="floor-item-act" v-if="item.actStatus ==0  &&  item.ladderPriceFlag==1">
-								<view class="floor-tags">阶梯价格</view>	
-							</view>
-						</template>
-						<view v-if="hasLogin" class="list-price">
-							<template v-if="userIdentity == 1">
-								<text v-if="priceLoading" class="price-larger small">正在获取价格...</text>
-								<template v-else>
-									<text class="price-larger" :class="PromotionsFormat(item.promotions) ? 'none' : ''">
-										¥{{ (PromotionsFormat(item.promotions) ? item.originalPrice : item.price) | NumFormat}}
-									</text>
-								</template>
-							</template>	
-							<template v-if="userIdentity == 4">
-								<view class="price-larger" v-if="item.p_price_flag == '1'">
-									<text class="txt">¥未公开价格</text>
-								</view>
-								<view class="price-larger" v-if="item.p_price_flag == '2'">
-									<text class="txt">¥价格仅会员可见</text>
-								</view>
-								<text v-else-if="priceLoading" class="price-larger small">正在获取价格...</text>
-								<template v-else>
-									<text class="price-larger" :class="PromotionsFormat(item.promotions) ? 'none' : ''">
-										¥{{ (PromotionsFormat(item.promotions) ? item.originalPrice : item.price) | NumFormat}}
-									</text>
-								</template>
-							</template>
-							<template v-if="userIdentity == 3">
-								<template v-if="item.supplierId === shopId">
-									<view class="price-larger" v-if="item.p_price_flag == '1'">
-										<text class="txt">¥未公开价格</text>
-									</view>
-									<text v-else-if="priceLoading" class="price-larger small">正在获取价格...</text>
-									<text v-else class="price-larger" :class="PromotionsFormat(item.promotions) ? 'none' : ''">
-										¥{{ (PromotionsFormat(item.promotions) ? item.originalPrice : item.price) | NumFormat}}
-									</text>
-								</template>
-								<template v-else>
-									<view  class="list-login-now">
-										<text class="p-no">¥</text>
-										<uni-grader :grade="Number(item.p_price_grade)"></uni-grader>
-									</view>
-								</template>
-							</template>
-							<template v-if="userIdentity == 2">
-								<view class="price-larger" v-if="item.p_price_flag == '1'">
-									<text class="txt">¥未公开价格</text>
-								</view>
-								<text v-else-if="priceLoading" class="price-larger small">正在获取价格...</text>
-								<template v-else>
-									<text class="price-larger" :class="PromotionsFormat(item.promotions) ? 'none' : ''">
-										¥{{ (PromotionsFormat(item.promotions) ? item.originalPrice : item.price) | NumFormat}}
-									</text>
-								</template>
-							</template>
-						</view>	
-						<view  v-else class="list-login-now">
-							<text class="p-no">¥</text>
-							<uni-grader :grade="Number(item.p_price_grade)"></uni-grader>
-						</view>
-					</view>
-				</view>
-			</view>
-			<view v-if="showLoading && listData.length > 4">
-				<view class="loading-wrapper loading-wrapper-now" v-if="loadingNow">{{loadingText}}<text v-if="loadingText === '已至底部'">‧ ‧ ‧</text></view>
-				<view class="loading-wrapper loading-wrapper-btm" v-else>———<text class="btm-text">已至底部</text>———</view>
-			</view>
-		</scroll-view>
-		<view class="empty-container" v-if="showEmpty">
-			<image class="empty-container-image" src="https://img.caimei365.com/group1/M00/03/71/Cmis2F3wna6AY2ZjAABpmnBICH4247.png"></image>
-			<text class="error-text">{{emptyText}}</text>
-		</view>
-		<!-- 透明模态层 -->
-		<modal-layer v-if='isModallayer'></modal-layer>
-	</view>
-</template>
-
-<script>
-	import listSkeleton from '@/components/cm-module/listTemplate/listSkeleton'
-	import modalLayer from "@/components/modal-layer"
-	import uniGrader from '@/components/uni-grade/uni-grade.vue'
-	import { searchQueryTinyType} from "@/api/utils.js"
-	import { mapState,mapMutations } from 'vuex';
-	export default{
-		name:'CommodityList',
-		components:{
-			listSkeleton,
-			modalLayer,
-			uniGrader
-		},
-		props: {
-			emptyText: {
-				type: String
-			},
-			serverUrl: {
-				type: String
-			},
-			typeId: {
-				type:Number
-			}
-		},
-		data(){
-			return{
-				clubStatus:'',
-				isModallayer:false,
-				windowHeight: '',
-				showSkeleton: true,
-				showEmpty: false,
-				userID:0,
-				shopId:0,
-				userIdentity:'',
-				priceLoading:true,
-				scrollHeight: '',
-				listData: [],
-				showLoading: false,
-				loadingNow: true,
-				loadingText: '上拉加载更多',
-				pageSize: 20,
-				pageNum: 1,
-				totalPage: 1,
-				pullFlag: true,
-				cartNum: 0,
-			}
-		},
-		created() {		
-			// console.log(this.typeId)
-			this.setScrollHeight();		
-			this.$api.getComStorage('userInfo').then((resolve) =>{
-				this.clubStatus = resolve.clubStatus
-				this.userID = resolve.userId ? resolve.userId : 0;
-				this.shopId = resolve.shopId ? resolve.shopId : 0;
-				this.userIdentity = resolve.userIdentity
-				this.getListFromServer();
-			}).catch(error =>{
-				this.getListFromServer();
-			})
-		},
-		filters: {
-			NumFormat:function(text) {//处理金额
-				return Number(text).toFixed(2);
-			},
-		},
-		computed: {
-			...mapState(['hasLogin','userInfo','identity'])
-		},
-		methods:{
-			toLower() {
-				if(this.totalPage>this.listData.length && this.pullFlag) {
-					this.getListFromServer(true);
-				}
-			},
-			setScrollHeight() {
-				const {windowHeight, pixelRatio} = wx.getSystemInfoSync();
-				this.windowHeight = windowHeight - 1;
-				this.scrollHeight = windowHeight - 1;
-			},
-			getListFromServer(loadMore) {
-				this.getQueryGoodslist(loadMore)
-			},
-			getQueryGoodslist(loadMore){
-				this.showLoading = true;
-				this.loadingNow = true;
-				this.loadingText = '加载中';
-				if(loadMore) { this.pageNum += 1; }
-				let params ={
-						id:this.typeId,
-						identity:this.identity,
-						pageNum:this.pageNum,
-						pageSize:this.pageSize,
-						sortField:'',
-						sortType:''
-				}
-				searchQueryTinyType(this.serverUrl,params).then(response=>{
-					const resData = JSON.parse(response.data);
-					const resList = resData.items;
-					if(resList && resList.length > 0){
-						this.showEmpty = false
-						this.totalPage = resData.total;
-						if(loadMore) {
-							this.listData = [...this.listData,...resList];
-							this.getProductPrice()
-							this.showSkeleton = false
-						} else {
-							this.listData = [...resList];
-							this.getProductPrice()
-							this.showSkeleton = false
-						}
-						// 防上拉暴滑
-						this.pullFlag = false;
-						setTimeout(()=>{ this.pullFlag = true; },500)
-						// 底部提示文案
-						if(this.totalPage>this.listData.length) {
-							this.loadingText = '上拉加载更多';
-						} else {
-							this.showLoading = true;
-							this.loadingNow = false;
-						}
-					} else {
-						if(!loadMore) { this.showEmpty = true; }
-					}
-					
-				}).catch(error =>{
-					this.$util.msg(error.msg,2000);
-				})
-			},
-			getProductPrice(){//获取价格
-				let productIdArr = [];
-				this.listData.map(item=>{// 0公开价格 1不公开价格 2仅对会员机构公开
-					productIdArr.push(item.p_id)
-				})
-				this.productIds = productIdArr.join(",");
-				this.ProductService.querySearchProductPrice({userId: this.userID,productIds:this.productIds}).then(response =>{
-					if (response.data) {
-						this.listData = this.ReturnNewProducts(this.listData,response.data);
-					}
-					this.priceLoading = false;
-				}).catch(error =>{
-					this.$util.msg(error.msg,2000)
-				})
-			},
-			ReturnNewProducts(Array,list){//处理对应商品ID的商品价格
-				let NewArray = []
-				Array.map(item=>{
-					for (let i = 0; i < list.length; i++) {
-						if( item.p_id == list[i].productId ){
-							NewArray.push(Object.assign(item,list[i])) 
-						}
-					}
-				});
-				return NewArray
-			},
-			navToDetailPage(id) {
-				this.isModallayer = true;
-				this.$api.navigateTo(`/pages/goods/product?id=${id}`);
-				this.isModallayer = false;
-			},
-			PromotionsFormat(promo){//促销活动类型数据处理
-				if(promo!=null){
-					if(promo.type == 1 && promo.mode == 1){
-						return true
-					}else{
-						return false
-					}
-				}
-				return false
-			}
-		}
-	}
-</script>
-
-<style lang="scss">
-	.commodity-list-wrapper {
-		scroll-view {
-			height: 100%;
-			border-top: 2rpx solid rgba(0,0,0,0.07);
-		}
-		.empty-container-image {
-			margin-top: -300rpx;
-		}
-		.toIndexPage {
-			bottom: 390rpx;
-		}
-		.show-more-btn {
-			width: 276rpx;
-			height: 52rpx;
-			line-height: 52rpx;
-			border: 2rpx solid #D8D8D8;
-			background: #F7F7F7;
-			font-size: 26rpx;
-			margin: 26rpx 0;
-			position: absolute;
-			left: 50%;
-			margin-left: -138rpx;
-		}
-	}
-	.all-type-list-content {
-		height: 216rpx;
-		padding: 24rpx;
-		background: #fff;
-		margin-bottom: 2rpx;
-		display: flex;
-		flex-direction: row;
-		box-sizing: content-box;
-		.list-img {
-			width: 210rpx;
-			height: 218rpx !important;
-			margin-right: 26rpx;
-			border-radius: 10rpx;
-			border: 2rpx solid #f3f3f3;
-		}
-	}
-	.list-details-info {
-		width: 466rpx;
-		display: flex;
-		flex-direction: column;
-		font-size: 26rpx;
-		position: relative;
-		.list-details-title {
-			line-height: 36rpx;
-			text-overflow: ellipsis;
-			overflow: hidden;
-			display: -webkit-box;
-			-webkit-line-clamp: 2;
-			line-clamp: 2;
-			-webkit-box-orient: vertical;
-		}
-		.list-details-specs {
-			margin-top: 8rpx;
-			color: #666666;
-		}
-		.list-details-miniQuantity {
-			margin-top: 7rpx;
-		}
-	}
-	.list-details-price {
-		width: 100%;
-		height: 54rpx;
-		line-height: 54rpx;
-		.floor-item-act{
-			height: 54rpx;
-			text-align: center;
-			box-sizing: border-box;
-			float: right;
-			.floor-tags{
-				height: 28rpx;
-				border-radius: 6rpx;
-				background-color: #FFFFFF;
-				line-height: 28rpx;
-				color: $color-system;
-				text-align: center;
-				display: inline-block;
-				padding:0 16rpx;
-				font-size: $font-size-20;
-				margin-left: 15rpx;
-				border: 1px solid #E15616;
-			}
-		}
-		.price-icon {
-			width: 22rpx;
-			height: 28rpx;
-			vertical-align: middle;
-			margin-right: 10rpx;
-		}
-		.price-icon + text {
-			font-size: 25rpx;
-			vertical-align: middle;
-		}
-		.list-login-now {
-			color: #F8C499;
-			float: left;
-			line-height: 54rpx;
-			.p-no{
-				float: left;
-				font-size: $font-size-24;
-				color: $text-color;
-			}
-		}
-		.login-now {
-			padding: 10rpx 10rpx 10rpx 0;
-		}
-		.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;
-				}
-			}
-		}
-		.add-cart-btn {
-			width: 156rpx;
-			height: 64rpx;
-			line-height: 64rpx;
-			border-radius: 32rpx;
-			color: #fff;
-			font-size: 26rpx;
-			margin-right: 0;
-			background:linear-gradient(45deg,rgba(255,41,41,1) 0%,rgba(255,109,27,1) 100%);
-		}
-	}
-	.cart-icon {
-		width: 92rpx;
-		height: 92rpx;
-		border-radius: 50%;
-		background: rgba(255, 147, 0, 0.5);
-		position: fixed;
-		right: 24rpx;
-		bottom: 30%;
-		display: flex;
-		align-items: center;
-		justify-content: center;
-		cursor: pointer;
-		image {
-			width: 58rpx;
-			height: 58rpx;
-		}
-		text {
-			font-size: 28rpx;
-			position: absolute;
-			top: -10rpx;
-			right: 0;
-		}
-	}
-</style>

+ 96 - 46
components/cm-module/listTemplate/immediatelyList.vue

@@ -31,14 +31,14 @@
 		<view class="product-container" v-else >
 			<view :class="tabIndex" v-if="tabIndex === 0"  :style="{paddingTop:searchStatus?'128rpx':''}">
 				<scroll-view :style="{'height':scrollHeight+'px'}" @scrolltolower="scrolltolower(tabIndex)" scroll-y v-if="listData.length > 0">
-					<view v-for="(item,index) in listData" :key="index" :id="item.id" class="all-type-list-content commodity-list" @click.stop="navToDetailPage(item.p_id)"  >
-					    <image mode='widthFix' :src="item.p_image"  class="list-img" alt="list-img"></image>
+					<view v-for="(pros,index) in listData" :key="index" :id="pros.productId" class="all-type-list-content commodity-list" @click.stop="navToDetailPage(pros.productId)"  >
+					    <image mode='widthFix' :src="pros.image"  class="list-img" alt="list-img"></image>
 						<view class="list-details-info">
-							<text class="list-details-title">{{isInterceptHtmlFn(item.p_name)}}</text>
-							<text class="list-details-specs">规格:{{item.p_unit?item.p_unit:''}}</text>
-							<text class="list-details-miniQuantity list-details-specs">起订量:{{item.minBuyNumber}}</text>
-							<view class="list-details-specs" v-if="item.p_code!=''&&item.p_code!=null">
-								<view>商品编码:{{item.p_code}}</view>
+							<text class="list-details-title">{{isInterceptHtmlFn(pros.name)}}</text>
+							<text class="list-details-specs">规格:{{pros.unit ? pros.unit : ''}}</text>
+							<text class="list-details-miniQuantity list-details-specs">起订量:{{pros.minBuyNumber}}</text>
+							<view class="list-details-specs" v-if="pros.code!=''&& pros.code!=null">
+								<view>商品编码:{{pros.code}}</view>
 							</view>
 							<view class="list-details-price">
 								<template v-if="priceLoading">
@@ -47,23 +47,27 @@
 								<template v-else>
 									<view class="list-shop">
 										<view class="list-price">
-											<text class="price-larger" :class="PromotionsFormat(item.promotions) ? 'none' : ''">
-												¥{{ (PromotionsFormat(item.promotions) ? item.originalPrice : item.price) | NumFormat }}
+											<text class="price-larger" :class="PromotionsFormat(pros.promotions) ? 'none' : ''">
+												¥{{ (PromotionsFormat(pros.promotions) ? pros.originalPrice : pros.price) | NumFormat }}
 											</text>
 										</view>
 									</view>
-									<button class="add-cart-btn" @click.stop="operationHanld(item)">数量</button>
+									<button class="add-cart-btn" @click.stop="operationHanld(pros)">数量</button>
 								</template>
 							</view>
-							<view class="list-details-price">
-								<view class="floor-item-act" v-if="item.actStatus==1">
-									<view class="floor-tags" v-if="PromotionsFormat(item.promotions)">
-										{{item.promotions.name}}<text>:¥{{ item.price | NumFormat }}</text>
-									</view>
-									<view class="floor-tags" v-else>{{item.promotions.name}}</view>	
+							<view class="list-details-price"> 
+								<view class="floor-item-act" v-if="pros.actStatus==1">
+									<view class="coupon-tags" v-if="pros.couponsLogo">优惠券</view>
+									<template>
+										<view class="floor-tags" v-if="PromotionsFormat(pros.promotions)">
+											{{pros.promotions.name}}<text>:¥{{ pros.price | NumFormat }}</text>
+										</view>
+										<view class="floor-tags" v-else>{{pros.promotions.name}}</view>
+									</template>
 								</view>
-								<view class="floor-item-act" v-if="item.actStatus ==0  &&  item.ladderPriceFlag==1">
-									<view class="floor-tags">阶梯价格</view>	
+								<view class="floor-item-act" v-if="pros.actStatus == 0">
+									<view class="coupon-tags" v-if="pros.couponsLogo">优惠券</view>
+									<view class="floor-tags" v-if="pros.actStatus ==0  &&  pros.ladderPriceFlag==1">阶梯价格</view>	
 								</view>
 							</view>	
 						</view>
@@ -79,29 +83,33 @@
 				<scroll-view :style="{'height':scrollHeight+'px',paddingTop:searchStatus?'112rpx':''}" @scrolltolower="scrolltolower(tabIndex)" scroll-y>
 					<view class="all-zuhe-list" v-for="(item,index) in combinationProduct" :key="index" :id="item.id">
 						<view class="zuhe_title" :class="index%2==0 ? 'active' : ''">{{item.name}}</view>
-						<view v-for="(pros,proIndex) in item.combinationProductList" :class="index%2==0 ? 'stylecontent' : ''" :key="proIndex" :id="pros.productID" class="zuhe-list-content commodity-list" >
+						<view v-for="(pros,proIndex) in item.combinationProductList" :class="index%2==0 ? 'stylecontent' : ''" :key="proIndex" :id="pros.productId" class="zuhe-list-content commodity-list" >
 							<view class="list-details-info" >
-								<text class="list-details-title zuhe_list_text">商品编码:{{pros.productCode}}</text>
-								<text class="list-details-specs zuhe_list_text" @click.stop="navToDetailPage(pros.productID)">{{pros.name}}</text>
+								<text class="list-details-title zuhe_list_text">商品编码:{{pros.code}}</text>
+								<text class="list-details-specs zuhe_list_text" @click.stop="navToDetailPage(pros.productId)">{{pros.name}}</text>
 								<view class="list-details-price zuhe_list_price">
 									<view class="list-shop com">
 										<view class="list-price zuhe_list_price" >
 											<view class="zuhe_price-larger zuhe_list_text" >
-												<view class="list-price-none" v-if="pros.repurchasePriceState">
-													<text class="price-none">价格:¥{{pros.discountPrice}}</text>
+												<view class="list-price-none" v-if="pros.repurchaseFlag == 1">
+													<text class="price-none">价格:¥{{ pros.originalPrice }}</text>
 													<text class="iconfont icon-wenhao" @click.stop="repurchModel"></text>
 												</view>
-												<view class="price-larger">价格:¥{{ pros.retailPrice | NumFormat }}</view>
+												<view class="price-larger">价格:¥{{ pros.price | NumFormat }}</view>
 											</view>
 											<view class="zuhe_price-larger zuhe_list_text" >
 												<view class="floor-item-act" v-if="pros.actStatus==1">
-													<view class="floor-tags" v-if="PromotionsFormat(pros.promotions)">
-														{{pros.promotions.name}}<text>:¥{{ pros.price | NumFormat }}</text>
-													</view>
-													<view class="floor-tags" v-else>{{pros.promotions.name}}</view>	
+													<view class="coupon-tags" v-if="pros.couponsLogo">优惠券</view>
+													<template>
+														<view class="floor-tags" v-if="PromotionsFormat(pros.promotions)">
+															{{pros.promotions.name}}<text>:¥{{ pros.price | NumFormat }}</text>
+														</view>
+														<view class="floor-tags" v-else>{{pros.promotions.name}}</view>	
+													</template>
 												</view>
-												<view class="floor-item-act" v-if="pros.actStatus ==0  &&  pros.ladderPriceFlag==1">
-													<view class="floor-tags">阶梯价格</view>	
+												<view class="floor-item-act" v-if="pros.actStatus==0">
+													<view class="coupon-tags" v-if="pros.couponsLogo">优惠券</view>
+													<view class="floor-tags" v-if="pros.actStatus ==0  &&  pros.ladderPriceFlag==1">阶梯价格</view>	
 												</view>
 												<view class="count">
 													<view class="number-box">
@@ -257,8 +265,17 @@
 				this.loadingText = '加载中';
 				this.isShowEmpty = false;				
 				if(loadMore) {this.pageNum += 1;}
-				let params = {identity:this.identity,keyword:this.searchInputVal,pageNum:this.pageNum,pageSize:this.pageSize,sortField:'',sortType:''}
-				this.ProductService.GetProductSearchList(params).then(response =>{
+				this.ProductService.GetProductSearchList(
+					{
+						identity:this.identity,
+						keyword:this.searchInputVal,
+						pageNum:this.pageNum,
+						pageSize:this.pageSize,
+						sortField:'',
+						sortType:'',
+					}
+				)
+				.then(response =>{
 					this.isShowWrapper = true
 					const resData = JSON.parse(response.data);
 					const resList = resData.items;
@@ -289,7 +306,8 @@
 							this.isShowEmptyText ='暂无相关商品'
 						}
 					}
-				}).catch(error =>{
+				})
+				.catch(error =>{
 					this.$util.msg(error.msg,2000);
 				})
 			},
@@ -297,10 +315,16 @@
 				let productIdArr = [];
 				let productIds ='';
 				this.listData.map(item=>{// 0公开价格 1不公开价格 2仅对会员机构公开
-					productIdArr.push(item.p_id)
+					productIdArr.push(item.productId)
 				})
 				productIds = productIdArr.join(",");
-				this.ProductService.querySearchProductPrice({userId: this.clubUserId,productIds:productIds}).then(response =>{
+				this.ProductService.querySearchProductPrice(
+					{
+						userId: this.clubUserId,
+						productIds:productIds,
+						source: 2
+					}
+				).then(response =>{
 					this.listData = this.ReturnNewProducts(this.listData,response.data);
 					this.priceLoading = false;
 				}).catch(error =>{
@@ -311,7 +335,7 @@
 				let NewArray = []
 				Array.map(item=>{
 					for (let i = 0; i < list.length; i++) {
-						if( item.p_id == list[i].productId ){
+						if( item.productId == list[i].productId ){
 							NewArray.push(Object.assign(item,list[i])) 
 						}
 					}
@@ -341,10 +365,18 @@
 				this.loadingText = '加载中';
 				this.isShowEmpty = false;				
 				if(loadMore) {this.pageNum += 1;}
-				let params = {clubUserId:this.clubUserId,pageNum:this.pageNum,pageSize:this.zuhepageSize,searchWord:this.searchInputVal}
-				this.SellerService.GetCombinationProduct(params).then(response =>{
+				this.ProductService.GetSearchCombinationProduct(
+					{
+						clubUserId:this.clubUserId,
+						pageNum:this.pageNum,
+						pageSize:this.zuhepageSize,
+						searchWord:this.searchInputVal,
+						}
+					)
+				.then(response =>{
 					this.isShowWrapper = true
 					const responseData = response.data;
+					console.log(responseData)
 					if(responseData.results && responseData.results.length > 0){
 						this.hasNextPage = responseData.hasNextPage;
 						this.isShowEmpty = false;
@@ -371,7 +403,8 @@
 						this.isShowEmpty = true;
 						this.isShowEmptyText ='暂无相关商品'
 					}
-				}).catch(error =>{
+				})
+				.catch(error =>{
 					this.$util.msg(error.msg,2000);
 				})
 			},
@@ -422,7 +455,7 @@
 				let productsList =[];
 				productsList=item.combinationProductList;
 				productsList.forEach(pros=>{	
-					prosPrice+=pros.retailPrice*pros.initProductNum;
+					prosPrice+=pros.price*pros.initProductNum;
 					item.productTotalAmount = prosPrice;
 				})
 				// console.log(prosPrice)
@@ -451,13 +484,13 @@
 				})
 			},
 			processActivityPrice(pros){//单独处理活动价格和阶梯价格
-				let ladderPriceList = pros.ladderPriceList;
+				let ladderPriceList = pros.ladderPrices;
 				if(pros.ladderPriceFlag == '0' || pros.actStatus == 1){
-					pros.totalPrice = pros.initProductNum*pros.retailPrice
+					pros.totalPrice = pros.initProductNum*pros.price
 				}else{
 					ladderPriceList.forEach((item,index)=>{
 						if(pros.initProductNum>=item.buyNum){
-							pros.retailPrice = item.buyPrice
+							pros.price = item.buyPrice
 							pros.totalPrice = pros.initProductNum*item.buyPrice
 						}
 					})
@@ -778,9 +811,26 @@
 			text-align: center;
 			box-sizing: border-box;
 			float: left;
+			padding: 11rpx 0;
+			.coupon-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: left;
+				margin-right: 12rpx;
+			}
 			.floor-tags{
-				height:28rpx;
-				border-radius: 6rpx;
+				height: 32rpx;
+				box-sizing: border-box;
+				border-radius: 8rpx;
 				background-color: #FFFFFF;
 				line-height: 28rpx;
 				color: $color-system;
@@ -788,8 +838,8 @@
 				display: inline-block;
 				padding:0 16rpx;
 				font-size: $font-size-20;
-				margin-left: 15rpx;
 				border: 1px solid #E15616;
+				float: left;
 			}
 		}
 		.price-icon {

+ 55 - 26
components/cm-module/listTemplate/productList.vue

@@ -3,38 +3,43 @@
 		<list-skeleton v-if="showSkeleton" :listType='0'></list-skeleton>
 		<view class="product-container" v-if="!isShowEmpty">
 			<scroll-view :style="{'height':scrollHeight+'px'}" @scrolltolower="scrolltolower" scroll-y v-if="productList.length > 0">
-				<view v-for="(item,index) in productList" :key="index" :id="item.id" class="all-type-list-content commodity-list" @click.stop="navToDetailPage(item.productID)">
-					<image mode='widthFix' :src="item.mainImage"  class="list-img" alt="list-img"></image>
+				<view v-for="(item,index) in productList" :key="index" :id="item.id" class="all-type-list-content commodity-list" @click.stop="navToDetailPage(item.productId)">
+					<image mode='widthFix' :src="item.image"  class="list-img" alt="list-img"></image>
 					<view class="list-details-info">
 						<text class="list-details-title">{{item.name}}</text>
 						<text class="list-details-specs">规格:{{item.unit !=null ? item.unit : ''}}</text>
 						<text class="list-details-miniQuantity">起订量:{{ item.ladderPriceFlag == '1' ? item.maxBuyNumber : item.minBuyNumber}}</text>
-						<view class="list-details-price" v-if="item.price1TextFlag == 1">
+						<view class="list-details-price" v-if="item.priceFlag == 1">
 							<view class="list-none"><view class="price-small">未公开价格</view></view>
 						</view>
 						<view class="list-details-price" v-else>
 							<view class="list-shop">
-								<view class="list-price-none" v-if="item.repurchasePriceState">
-									<text class="price-none">¥{{item.discountPrice}}</text>
+								<view class="list-price-none" v-if="item.repurchaseFlag == 1">
+									<text class="price-none">¥{{item.originalPrice}}</text>
 									<text class="iconfont icon-wenhao" @click.stop="repurchModel"></text>
 								</view>
 								<view class="list-price" v-else>
 									<text class="price-larger" :class="PromotionsFormat(item.promotions) ? 'none' : ''">
-										¥{{ (PromotionsFormat(item.promotions) ? item.price1 : item.retailPrice) | NumFormat }}
+										¥{{ (PromotionsFormat(item.promotions) ? item.originalPrice : item.price) | NumFormat }}
 									</text>
 								</view>
 							</view>
 							<button class="add-cart-btn" @click.stop="operationHanld(item)">数量</button>
 						</view>
-						<view class="list-details-price" v-if="item.actStatus==1">
-							<view class="floor-item-act">
-								<view class="floor-tags" v-if="PromotionsFormat(item.promotions)">
-									{{item.promotions.name}}<text v-if="item.price1TextFlag != 1">:¥{{ item.retailPrice | NumFormat }}</text>
-								</view>
-								<view class="floor-tags" v-else>{{item.promotions.name}}</view>	
+						<view class="list-details-price">
+							<view class="floor-item-act" v-if="item.actStatus==1">
+								<view class="coupon-tags" v-if="item.couponsLogo">优惠券</view>
+								<template v-if="item.actStatus==0">
+									<view class="floor-tags" v-if="PromotionsFormat(item.promotions)">
+										{{item.promotions.name}}
+										<text v-if="item.priceFlag != 1">:¥{{ item.price | NumFormat }}</text>
+									</view>
+									<view class="floor-tags" v-else>{{item.promotions.name}}</view>	
+								</template>
 							</view>
-							<view class="floor-item-act" v-if="item.actStatus ==0  &&  item.ladderPriceFlag==1">
-								<view class="floor-tags">阶梯价格</view>	
+							<view class="floor-item-act" v-if="item.actStatus==0">
+								<view class="coupon-tags" v-if="item.couponsLogo">优惠券</view>
+								<view class="floor-tags" v-if="item.actStatus ==0  &&  item.ladderPriceFlag==1">阶梯价格</view>	
 							</view>
 						</view>	
 					</view>
@@ -90,7 +95,7 @@
 				windowHeight: '',
 				showSkeleton: true,
 				isShowEmpty: false,
-				userID: '',
+				userId: '',
 				scrollHeight: '',
 				productList: [],
 				showLoading: false,
@@ -109,7 +114,7 @@
 		created() {
 			this.setScrollHeight();		
 			this.$api.getStorage().then((resolve) =>{
-				this.userID = resolve.userId ? resolve.userId : 0
+				this.userId = resolve.userId ? resolve.userId : 0
 				this.getProductAgainInfo()
 			})
 		},
@@ -138,18 +143,25 @@
 				this.loadingText = '加载中';
 				this.isShowEmpty = false;				
 				if(loadMore) {this.pageNum += 1;}
-				let params = {userId:this.userID,identity:this.identity,pageNum:this.pageNum,pageSize:this.pageSize}
-				this.ProductService.GetRepeatBuyAgainProductList(params).then(response =>{
+				this.ProductService.GetRepeatBuyAgainProductList(
+					{
+						userId:this.userId,
+						identity:this.identity,
+						pageNum:this.pageNum,
+						pageSize:this.pageSize,
+					}
+				)
+				.then(response =>{
 					this.isShowWrapper = true
 					this.cartQuantity = response.data.cartQuantity
-					const responseData = response.data.pageDate;
-					if(responseData.results && responseData.results.length > 0){
-						this.hasNextPage = responseData.hasNextPage;
+					const listData = response.data.results;
+					if(listData && listData.length > 0){
+						this.hasNextPage = response.data.hasNextPage;
 						this.isShowEmpty = false;
 						if(loadMore) {
-							this.productList = [...this.productList,...responseData.results];
+							this.productList = [...this.productList,...listData];
 						} else {
-							this.productList = [...responseData.results];
+							this.productList = listData;
 							this.showSkeleton = false;
 						}
 						//价格显示处理
@@ -301,9 +313,26 @@
 			text-align: center;
 			box-sizing: border-box;
 			float: left;
+			padding: 11rpx 0;
+			.coupon-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: left;
+				margin-right: 12rpx;
+			}
 			.floor-tags{
-				height: 28rpx;
-				border-radius: 6rpx;
+				height: 32rpx;
+				box-sizing: border-box;
+				border-radius: 8rpx;
 				background-color: #FFFFFF;
 				line-height: 28rpx;
 				color: $color-system;
@@ -311,8 +340,8 @@
 				display: inline-block;
 				padding:0 16rpx;
 				font-size: $font-size-20;
-				margin-left: 15rpx;
 				border: 1px solid #E15616;
+				float: left;
 			}
 		}
 		.price-icon {

+ 7 - 8
components/cm-module/listTemplate/secondHand.vue

@@ -26,7 +26,6 @@
 						  @click="changeTabsFirst(1)">{{tabIndexSelectText}}
 						  <text class="iconfont icon-xiangxia1" :class="isTabIndexSelect ? 'reto': '' "></text>
 					</view>
-					<view class="tabs-item" :class="{ active: tabIndex === 2 }" @click="changeTabs(2)">临期产品</view>
 					<view class="tabs-item" :class="{ active: tabIndex === 3 }" @click="changeTabs(3)">其他</view>
 				</view>
 				<view class="tabs-item-first clearfix" v-if="isTabIndexSelect">
@@ -55,8 +54,8 @@
 		<view class="product-container" v-else >
 			<view :class="tabIndex"  :style="{paddingTop:searchStatus?'160rpx':''}">
 				<scroll-view :style="{'height':scrollHeight+'px'}" @scrolltolower="scrolltolower" scroll-y v-if="listData.length > 0">
-					<view v-for="(item,index) in listData" :key="index" :id="item.id" :productid="item.productID" class="all-type-list-content commodity-list" @click.stop="navToDetailPage(item.productID)"  >
-					    <image mode='widthFix' :src="item.mainImage"  class="list-img" alt="list-img"></image>
+					<view v-for="(item,index) in listData" :key="index" :id="item.id" :productid="item.productId" class="all-type-list-content commodity-list" @click.stop="navToDetailPage(item.productId)"  >
+					    <image mode='widthFix' :src="item.image"  class="list-img" alt="list-img"></image>
 						<view class="list-details-info">
 							<view class="list-details-title"> 
 								<view class="tabs" v-if="item.newAdded == 1">
@@ -67,7 +66,7 @@
 							<view class="list-details-price">
 								<view class="list-shop">
 									<view class="list-price">
-										<text class="price-larger">¥{{toFixedFn(item.price1)}}</text>
+										<text class="price-larger">¥{{toFixedFn(item.price)}}</text>
 									</view>
 								</view>
 								<button class="add-cart-btn" @click.stop="operationHanld(item)">数量</button>
@@ -143,7 +142,7 @@
 				ladderPriceList:[],//是否 阶梯,
 				goodsList:[],
 				isShow: false,
-				screenTabs:['二手仪器','轻光电','重光电','耗材配件'],
+				screenTabs:['二手仪器','美容仪器'],
 				tabIndex:1,
 				screenTab:0,
 				isTabIndexSelect:false,
@@ -243,7 +242,7 @@
 			},
 			navToDetailPage(id) {
 				this.isModallayer = true;
-				this.$api.navigateTo(`/second/pages/product/product-details?id=${id}`);
+				this.$api.navigateTo(`/pages/second/product/product-details?id=${id}`);
 				this.isModallayer = false;
 			},
 			onShowClose () {//输入框失去焦点时触发
@@ -273,7 +272,7 @@
 				this.tabIndex = index
 				this.secondHandType = index
 				this.isTabIndexSelect = false
-				if(this.tabIndex == 2 || this.tabIndex ==3){
+				if(this.tabIndex == 3){
 					this.instrumentType = ''
 					this.getProductAgainInfo()
 				}
@@ -543,7 +542,7 @@
 			}
 			.tabs-item-first{
 				position: absolute;
-				bottom: -308rpx;
+				bottom: -160rpx;
 				left: -24rpx;
 				height: auto;
 				width: 702rpx;

+ 103 - 0
components/cm-module/liveTemplate/components/scroll-temp.vue

@@ -0,0 +1,103 @@
+<template>
+    <scroll-view scroll-x="true" class="picture">
+        <view class="section" v-for="(item, index) in floorImageList" @click="navigaitionTo(item)" :key="index">
+            <image :src="item.appletsImage"></image>
+            <view class="cm-cover" :class="'color' + checkDisplayDate">{{ coverText[checkDisplayDate] }}</view>
+        </view>
+    </scroll-view>
+</template>
+
+<script>
+import caimeiApi from '@/common/config/caimeiApi.js'
+export default {
+    name: 'ScrollTemp',
+    data() {
+        return {
+            coverText: ['未开始', '已开始', '已结束']
+        }
+    },
+    props: {
+        floorImageList: {
+            type: Array
+        },
+        displayDate: String
+    },
+    computed: {
+        checkDisplayDate() {
+            const nowDate = new Date().getTime()
+            const displayDate = new Date(this.displayDate).getTime()
+            const oneDay = 60 * 60 * 24 * 1000
+            // 未开始
+            if (nowDate < displayDate && nowDate > displayDate - oneDay) {
+                return 0
+            }
+            // 已开始
+            if (nowDate > displayDate && nowDate < displayDate + oneDay) {
+                return 1
+            }
+            // 已结束
+            if (nowDate > displayDate + oneDay) {
+                return 2
+            }
+        }
+    },
+    methods: {
+        navigaitionTo(item) {
+            if (item.adsImage === '' && item.linkType === -1) {
+                return
+            } else if (item.linkType === -1) {
+                uni.navigateTo({
+                    url: `/pages/h5/activity/activity-detail?adsImage=${item.adsImage}&title=${item.name}`
+                })
+            } else {
+                caimeiApi.FlooryNavigateTo(item)
+            }
+        }
+    }
+}
+</script>
+
+<style lang="scss">
+.picture {
+    width: 750rpx;
+    margin-left: -24rpx;
+    white-space: nowrap;
+    .section {
+        position: relative;
+        display: inline-block;
+        margin-right: 24rpx;
+        width: 310rpx;
+        height: 240rpx;
+        overflow: hidden;
+        border-radius: 16rpx;
+        image {
+            width: 310rpx;
+            height: 240rpx;
+        }
+        &:first-child {
+            margin-left: 24rpx;
+        }
+        .cm-cover {
+            position: absolute;
+            width: 96rpx;
+            height: 40rpx;
+            top: 0;
+            right: 0;
+            border-radius: 0 16rpx 0 16rpx;
+            color: #fff;
+            font-size: 24rpx;
+            text-align: center;
+            line-height: 36rpx;
+            &.color2 {
+                background: rgba(0, 0, 0, 0.5);
+            }
+            &.color1 {
+                background: rgb(255, 92, 0);
+            }
+            &.color0 {
+                background: rgb(30, 206, 112);
+            }
+        }
+    }
+}
+</style>

+ 202 - 0
components/cm-module/liveTemplate/components/swiper-temp1.vue

@@ -0,0 +1,202 @@
+<template>
+    <view class="section_page_main clearfix">
+        <view class="recommend-list">
+            <swiper
+                class="tui-banner-swiper"
+                :autoplay="true"
+                :interval="5000"
+                :duration="500"
+                :circular="true"
+                @change="swiperChange"
+                :class="{ minHeigth: hasLessImage }"
+            >
+                <swiper-item class="clearfix" v-for="(item, index1) in list" :key="index1">
+                    <view
+                        class="img-box"
+                        v-for="(product, index2) in item"
+                        :key="index2"
+                        @click="navigaitionTo(product)"
+                    >
+                        <view class="cm-cover" :class="'color' + checkDisplayDate">{{coverText[checkDisplayDate]}}</view>
+                        <image :src="product.appletsImage" mode="scaleToFill"></image>
+                    </view>
+                </swiper-item>
+            </swiper>
+            <view class="swiper__recommenddots-box" v-if="list.length > 1">
+                <view
+                    v-for="(item, idx) in list"
+                    :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 caimeiApi from '@/common/config/caimeiApi.js'
+export default {
+    name: 'SwiperTemp',
+    props: {
+        floorImageList: {
+            type: Array
+        },
+        displayDate: String
+    },
+    data() {
+        return {
+            list: [],
+            swiperCurrent: 0,
+            pageSize: 4,
+            imageCount: 0,
+            coverText: ['未开始', '已开始', '已结束']
+        }
+    },
+    created() {
+        this.initData()
+    },
+    computed: {
+        hasLessImage() {
+            return this.imageCount <= 2
+        },
+        checkDisplayDate() {
+            const nowDate = new Date().getTime()
+            const displayDate = new Date(this.displayDate).getTime()
+            const oneDay = 60 * 60 * 24 * 1000
+            // 未开始
+            if (nowDate < displayDate) {
+                return 0
+            }
+            // 已开始
+            if (nowDate > displayDate && nowDate < displayDate + oneDay) {
+                return 1
+            }
+            // 已结束
+            if (nowDate > displayDate + oneDay) {
+                return 2
+            }
+        }
+    },
+    methods: {
+        initData() {
+            this.imageCount = this.floorImageList.length
+            while (this.floorImageList.length > 0) {
+                this.list.push(this.floorImageList.splice(0, this.pageSize))
+            }
+        },
+        swiperChange(e) {
+            //轮播切换
+            const index = e.detail.current
+            this.swiperCurrent = index
+        },
+        navigaitionTo(item) {
+            if (item.adsImage === '' && item.linkType === -1) {
+                return
+            } else if (item.linkType === -1) {
+                uni.navigateTo({
+                    url: `/pages/h5/activity/activity-detail?adsImage=${item.adsImage}&title=${item.name}`
+                })
+            } else {
+                caimeiApi.FlooryNavigateTo(item)
+            }
+        }
+    }
+}
+</script>
+
+<style lang="scss" scoped>
+.minHeigth {
+    height: 250rpx !important;
+}
+.section_page_main {
+    width: 100%;
+    height: auto;
+    box-sizing: border-box;
+    .recommend-list {
+        width: 100%;
+        position: relative;
+        padding-bottom: 20rpx;
+        .tui-banner-swiper {
+            height: 550rpx;
+            width: 100%;
+            margin: 0 auto;
+            background: #f7f7f7;
+            overflow: hidden;
+            transform: translateY(0);
+            .img-box {
+                position: relative;
+                width: 339rpx;
+                height: 240rpx;
+                float: left;
+                margin: 24rpx 24rpx 0 0;
+                overflow: hidden;
+                border-radius: 16rpx;
+                image {
+                    width: 339rpx;
+                    height: 240rpx;
+                }
+                &:nth-child(2n) {
+                    margin-right: 0;
+                }
+                &:nth-child(1),
+                &:nth-child(2) {
+                    margin-top: 0;
+                }
+                .cm-cover {
+                    position: absolute;
+                    width: 96rpx;
+                    height: 40rpx;
+                    top: 0;
+                    right: 0;
+                    border-radius: 0 16rpx 0 16rpx;
+                    color: #fff;
+                    font-size: 24rpx;
+                    text-align: center;
+                    line-height: 36rpx;
+                    &.color2 {
+                        background: rgba(0, 0, 0, 0.5);
+                    }
+                    &.color1 {
+                        background: rgb(255, 92, 0);
+                    }
+                    &.color0 {
+                        background: rgb(30, 206, 112);
+                    }
+                }
+            }
+        }
+    }
+    .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: #e15616;
+            transition: all 0.4s;
+        }
+    }
+}
+</style>

+ 197 - 0
components/cm-module/liveTemplate/components/swiper-temp2.vue

@@ -0,0 +1,197 @@
+<template>
+    <view class="section_page_main clearfix">
+        <view class="recommend-list">
+            <swiper
+                class="tui-banner-swiper"
+                :autoplay="true"
+                :interval="5000"
+                :duration="500"
+                :circular="true"
+                @change="swiperChange"
+                :class="{ minHeigth: hasLessImage }"
+            >
+                <swiper-item class="clearfix" v-for="(item, index1) in list" :key="index1">
+                    <view
+                        class="img-box"
+                        v-for="(product, index2) in item"
+                        :key="index2"
+                        @click="navigaitionTo(product)"
+                    >
+                        <view class="cm-cover" :class="'color' + checkDisplayDate">{{coverText[checkDisplayDate]}}</view>
+                        <image :src="product.appletsImage" mode="scaleToFill"></image>
+                    </view>
+                </swiper-item>
+            </swiper>
+            <view class="swiper__recommenddots-box" v-if="list.length > 1">
+                <view
+                    v-for="(item, idx) in list"
+                    :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 caimeiApi from '@/common/config/caimeiApi.js'
+export default {
+    name: 'SwiperTemp',
+    props: {
+        floorImageList: {
+            type: Array
+        },
+        displayDate: String
+    },
+    data() {
+        return {
+            list: [],
+            swiperCurrent: 0,
+            pageSize: 2,
+            imageCount: 0,
+            coverText: ['未开始', '已开始', '已结束']
+        }
+    },
+    created() {
+        this.initData()
+    },
+    computed: {
+        hasLessImage() {
+            return this.imageCount <= 1
+        },
+        checkDisplayDate() {
+            const nowDate = new Date().getTime()
+            const displayDate = new Date(this.displayDate).getTime()
+            const oneDay = 60 * 60 * 24 * 1000
+            // 未开始
+            if (nowDate < displayDate) {
+                return 0
+            }
+            // 已开始
+            if (nowDate > displayDate && nowDate < displayDate + oneDay) {
+                return 1
+            }
+            // 已结束
+            if (nowDate > displayDate + oneDay) {
+                return 2
+            }
+        }
+    },
+    methods: {
+        initData() {
+            this.imageCount = this.floorImageList.length
+            while (this.floorImageList.length > 0) {
+                this.list.push(this.floorImageList.splice(0, this.pageSize))
+            }
+        },
+        swiperChange(e) {
+            //轮播切换
+            const index = e.detail.current
+            this.swiperCurrent = index
+        },
+        navigaitionTo(item) {
+            if (item.adsImage === '' && item.linkType === -1) {
+                return
+            } else if (item.linkType === -1) {
+                uni.navigateTo({
+                    url: `/pages/h5/activity/activity-detail?adsImage=${item.adsImage}&title=${item.name}`
+                })
+            } else {
+                caimeiApi.FlooryNavigateTo(item)
+            } 
+        }
+    }
+}
+</script>
+
+<style lang="scss" scoped>
+.minHeigth {
+    height: 380rpx !important;
+}
+.section_page_main {
+    width: 100%;
+    height: auto;
+    box-sizing: border-box;
+    .recommend-list {
+        width: 100%;
+        position: relative;
+        padding-bottom: 20rpx;
+        .tui-banner-swiper {
+            height: 780rpx;
+            width: 100%;
+            margin: 0 auto;
+            background: #f7f7f7;
+            overflow: hidden;
+            transform: translateY(0);
+            .img-box {
+                position: relative;
+                width: 702rpx;
+                height: 360rpx;
+                margin-bottom: 24rpx;
+                overflow: hidden;
+                border-radius: 16rpx;
+                image {
+                    width: 702rpx;
+                    height: 360rpx;
+                }
+                &:last-child{
+                    margin-bottom: 0;
+                }
+                .cm-cover {
+                    position: absolute;
+                    width: 96rpx;
+                    height: 40rpx;
+                    top: 0;
+                    right: 0;
+                    border-radius: 0 16rpx 0 16rpx;
+                    color: #fff;
+                    font-size: 24rpx;
+                    text-align: center;
+                    line-height: 36rpx;
+                    &.color2 {
+                        background: rgba(0, 0, 0, 0.5);
+                    }
+                    &.color1 {
+                        background: rgb(255, 92, 0);
+                    }
+                    &.color0 {
+                        background: rgb(30, 206, 112);
+                    }
+                }
+            }
+        }
+    }
+    .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: #e15616;
+            transition: all 0.4s;
+        }
+    }
+}
+</style>

+ 103 - 0
components/cm-module/liveTemplate/templateA.vue

@@ -0,0 +1,103 @@
+<template>
+    <view class="live-container">
+        <view class="cm-tabs">
+            <view
+                class="cm-tab-item"
+                :class="{ on: index === currentTab }"
+                v-for="(tab, index) in tablist"
+                :key="index"
+                @click="handleTabChange(index)"
+                >{{ tab.title | dateFormat }}</view
+            >
+        </view>
+        <!-- 轮播图区域 -->
+        <view class="cm-swiper-list">
+            <swiper-temp
+                :displayDate="pageData.floorContent.displayDate1"
+                :floorImageList="pageData.floorImageList"
+                v-show="currentTab === 0"
+            ></swiper-temp>
+            <swiper-temp
+                :displayDate="pageData.floorContent.displayDate2"
+                :floorImageList="pageData.floorImageList2"
+                v-show="currentTab === 1"
+            ></swiper-temp>
+            <swiper-temp
+                :displayDate="pageData.floorContent.displayDate3"
+                :floorImageList="pageData.floorImageList3"
+                v-show="currentTab === 2"
+            ></swiper-temp>
+        </view>
+    </view>
+</template>
+
+<script>
+import SwiperTemp from './components/swiper-temp1.vue'
+export default {
+    components: { SwiperTemp },
+    props: {
+        pageData: {
+            type: Object
+        },
+        userIdentity: {
+            type: Number
+        }
+    },
+    data() {
+        return {
+            tablist: [],
+            currentTab: 0
+        }
+    },
+    filters: {
+        dateFormat(val) {
+            // 2021-08-16 00:00:00
+            const str = val.split(' ')[0].split('-')
+            return str[1] + '-' + str[2]
+        }
+    },
+    created() {
+        this.initTabs()
+    },
+    methods: {
+        // 初始化tab列表
+        initTabs() {
+            for (let i = 1; i < 4; i++) {
+                this.tablist.push({ title: this.pageData.floorContent['displayDate' + i] })
+            }
+        },
+        // tab点击事件
+        handleTabChange(index) {
+            this.currentTab = index
+        }
+    }
+}
+</script>
+
+<style scoped lang="scss">
+.live-container {
+    position: relative;
+}
+.cm-tabs {
+    position: absolute;
+    border-radius: 18rpx;
+    overflow: hidden;
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    width: 250rpx;
+    top: -80rpx;
+    right: 0;
+    .cm-tab-item {
+        width: 80rpx;
+        font-size: 20rpx;
+        line-height: 36rpx;
+        text-align: center;
+        background: #fff;
+        &.on {
+            color: #fff;
+            background: rgb(255, 92, 0);
+        }
+    }
+}
+</style>

+ 103 - 0
components/cm-module/liveTemplate/templateB.vue

@@ -0,0 +1,103 @@
+<template>
+    <view class="live-container">
+        <view class="cm-tabs">
+            <view
+                class="cm-tab-item"
+                :class="{ on: index === currentTab }"
+                v-for="(tab, index) in tablist"
+                :key="index"
+                @click="handleTabChange(index)"
+                >{{ tab.title | dateFormat }}</view
+            >
+        </view>
+        <!-- 轮播图区域 -->
+        <view class="cm-swiper-list">
+            <swiper-temp
+                :displayDate="pageData.floorContent.displayDate1"
+                :floorImageList="pageData.floorImageList"
+                v-show="currentTab === 0"
+            ></swiper-temp>
+            <swiper-temp
+                :displayDate="pageData.floorContent.displayDate2"
+                :floorImageList="pageData.floorImageList2"
+                v-show="currentTab === 1"
+            ></swiper-temp>
+            <swiper-temp
+                :displayDate="pageData.floorContent.displayDate3"
+                :floorImageList="pageData.floorImageList3"
+                v-show="currentTab === 2"
+            ></swiper-temp>
+        </view>
+    </view>
+</template>
+
+<script>
+import SwiperTemp from './components/swiper-temp2.vue'
+export default {
+    components: { SwiperTemp },
+    props: {
+        pageData: {
+            type: Object
+        },
+        userIdentity: {
+            type: Number
+        }
+    },
+    data() {
+        return {
+            tablist: [],
+            currentTab: 0
+        }
+    },
+    filters: {
+        dateFormat(val) {
+            // 2021-08-16 00:00:00
+            const str = val.split(' ')[0].split('-')
+            return str[1] + '-' + str[2]
+        }
+    },
+    created() {
+        this.initTabs()
+    },
+    methods: {
+        // 初始化tab列表
+        initTabs() {
+            for (let i = 1; i < 4; i++) {
+                this.tablist.push({ title: this.pageData.floorContent['displayDate' + i] })
+            }
+        },
+        // tab点击事件
+        handleTabChange(index) {
+            this.currentTab = index
+        }
+    }
+}
+</script>
+
+<style scoped lang="scss">
+.live-container {
+    position: relative;
+}
+.cm-tabs {
+    position: absolute;
+    border-radius: 18rpx;
+    overflow: hidden;
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    width: 250rpx;
+    top: -80rpx;
+    right: 0;
+    .cm-tab-item {
+        width: 80rpx;
+        font-size: 20rpx;
+        line-height: 36rpx;
+        text-align: center;
+        background: #fff;
+        &.on {
+            color: #fff;
+            background: rgb(255, 92, 0);
+        }
+    }
+}
+</style>

+ 103 - 0
components/cm-module/liveTemplate/templateC.vue

@@ -0,0 +1,103 @@
+<template>
+    <view class="live-container">
+        <view class="cm-tabs">
+            <view
+                class="cm-tab-item"
+                :class="{ on: index === currentTab }"
+                v-for="(tab, index) in tablist"
+                :key="index"
+                @click="handleTabChange(index)"
+                >{{ tab.title | dateFormat }}</view
+            >
+        </view>
+        <!-- 轮播图区域 -->
+        <view class="cm-scroll-list">
+            <scroll-temp
+                :displayDate="pageData.floorContent.displayDate1"
+                :floorImageList="pageData.floorImageList"
+                v-show="currentTab === 0"
+            ></scroll-temp>
+            <scroll-temp
+                :displayDate="pageData.floorContent.displayDate2"
+                :floorImageList="pageData.floorImageList2"
+                v-show="currentTab === 1"
+            ></scroll-temp>
+            <scroll-temp
+                :displayDate="pageData.floorContent.displayDate3"
+                :floorImageList="pageData.floorImageList3"
+                v-show="currentTab === 2"
+            ></scroll-temp>
+        </view>
+    </view>
+</template>
+
+<script>
+import ScrollTemp from './components/scroll-temp.vue'
+export default {
+    components: { ScrollTemp },
+    props: {
+        pageData: {
+            type: Object
+        },
+        userIdentity: {
+            type: Number
+        }
+    },
+    data() {
+        return {
+            tablist: [],
+            currentTab: 0
+        }
+    },
+    filters: {
+        dateFormat(val) {
+            // 2021-08-16 00:00:00
+            const str = val.split(' ')[0].split('-')
+            return str[1] + '-' + str[2]
+        }
+    },
+    created() {
+        this.initTabs()
+    },
+    methods: {
+        // 初始化tab列表
+        initTabs() {
+            for (let i = 1; i < 4; i++) {
+                this.tablist.push({ title: this.pageData.floorContent['displayDate' + i] })
+            }
+        },
+        // tab点击事件
+        handleTabChange(index) {
+            this.currentTab = index
+        }
+    }
+}
+</script>
+
+<style scoped lang="scss">
+.live-container {
+    position: relative;
+}
+.cm-tabs {
+    position: absolute;
+    border-radius: 18rpx;
+    overflow: hidden;
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    width: 250rpx;
+    top: -80rpx;
+    right: 0;
+    .cm-tab-item {
+        width: 80rpx;
+        font-size: 20rpx;
+        line-height: 36rpx;
+        text-align: center;
+        background: #fff;
+        &.on {
+            color: #fff;
+            background: rgb(255, 92, 0);
+        }
+    }
+}
+</style>

+ 0 - 135
components/cm-module/modelAlert/cancelAlert.vue

@@ -1,135 +0,0 @@
-<template name="alert">
-	<view class="alert spec">
-		<view class="model-warp">
-			<view class="model-alert">
-				<view class="model-content">
-					<view class="sm"><text>{{cenceAlertText}}</text></view>
-				</view>
-				<view class="alert-btn">
-					<view class="btn btn-cancel" @click="hideConfirm">放弃</view>
-					<view class="btn btn-confirm" @click="btnConfirm()">确定取消</view>
-				</view>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-	export default{
-		name:'alert',
-		props:['isCenceModal','cenceAlertText'],
-		data() {
-			return{
-
-			}
-		},
-		created() {
-			
-		},
-		onLoad(){
-			
-		},
-		methods:{
-			hideConfirm(){
-				this.$parent.isCenceModal = false
-			},
-			//点击事件
-			btnConfirm(){
-				this.$emit('cenceConfirm')
-			}
-		},
-		onShow(){
-	
-		}
-	}
-</script>
-
-<style lang="scss">
-	/*弹窗*/
-	 .model-warp.none{
-		 display: none;
-	 }
-	 .model-warp.show{
-		 display: block;
-	 }
-	 .model-warp{
-		width: 100%;
-		height: 100%;
-		background: rgba(0,0,0,.5);
-		position: fixed;
-		top: 0;
-		left: 0;
-		z-index: 8888;
-		transition: all 0.4s;
-		&.none{
-			display: none;			
-		}
-		&.show{
-			display: block;
-		}
-		.model-alert{
-			width: 518rpx;
-			height: 316rpx;
-			position: absolute;
-			background: $bg-color;
-			left: 0;
-			right: 0;
-			bottom: 0;
-			top: 0;
-			margin: auto;
-			.alert-content{
-				width: 466rpx;
-				height: 152rpx;
-				padding: 40rpx 26rpx;					
-				.t-h1,.t-p{
-					font-size: $font-size-28;
-					line-height: 40rpx;
-					color: #333333;
-					text-align:justify;
-					padding: 10rpx;
-				}
-				.t-h1{
-					border-bottom: 1px solid $border-color;
-				}
-			}
-			.model-content{
-				width: 466rpx;
-				height: 152rpx;
-				padding: 40rpx 26rpx;	
-				display: flex;
-				flex-direction: column;
-				align-items: center;
-				.sm{
-					display: flex;
-					flex: 1;
-					line-height: 152rpx;
-					flex-direction: column;
-					align-items: center;
-					text-align: center;
-					font-size: $font-size-28;
-					color: #333333;
-				}
-			}
-			.alert-btn{
-				width: 100%;
-				height: 88rpx;
-				display: flex;
-				.btn{
-					flex: 1;
-					line-height: 88rpx;
-					font-size: $font-size-28;
-					text-align: center;
-					color: #FFFFFF;
-					border-radius: 0;
-					padding: 0;
-					&.btn-cancel{
-						background: $btn-cancel;
-					}
-					&.btn-confirm{
-						background: $btn-confirm;
-					}
-				}
-			}
-		}
-	}
-</style>

+ 1 - 1
components/cm-module/modelAlert/freightAlert.vue

@@ -137,4 +137,4 @@
 		}
 	}
 	
-</style>
+</style>

+ 1 - 1
components/cm-module/modelAlert/order-alert.vue

@@ -113,7 +113,7 @@
 				top: -53rpx;
 				width: 100%;
 				height: 232rpx;
-				background: url(https://admin-b.caimei365.com/userfiles/1/images/photo/2020/08/alert%402x.png) no-repeat;
+				background: url(https://static.caimei365.com/app/img/icon/icon-orderAlert@2x.png) no-repeat;
 				background-size: contain;
 			}
 			.text-content{

+ 140 - 0
components/cm-module/modelAlert/shareModel.vue

@@ -0,0 +1,140 @@
+<template name="sharealert">
+	<view class="alert spec" :class="specClass">
+		<view class="model-warp">
+			<view class="content">
+				<view class="text-content">
+					<view class="title">分享登录</view>
+					<view class="text">
+						<text>分享后,机构联系人可直接通过分享页面登录并绑定微信成为运营人员</text>
+					</view>
+				</view>				
+				<view class="alert-btn">
+					<view class="btn btn-cancel" @click="hideConfirm">取消</view>
+					<!-- #ifdef MP-WEIXIN -->
+					<button class="btn btn-confirm" open-type="share" @click="btnConfirm(bindId)">去分享</button>
+					<!-- #endif -->
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default{
+		name:'sharealert',
+		props:{
+			bindId:{
+				type:Number
+			}
+		},
+		data() {
+			return{
+				shareCode:'',
+			}
+		},
+		created() {
+			
+		},
+		methods:{
+			hideConfirm(){
+				this.$parent.isShareModal = false
+			},
+			btnConfirm(orderID){//点击事件
+				this.$emit('btnConfirm')
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	/*弹窗*/
+	 .model-warp.none{
+		 display: none;
+	 }
+	 .model-warp.show{
+		 display: block;
+	 }
+	 .model-warp{
+		width: 100%;
+		height: 100%;
+		background: rgba(0,0,0,0.3);
+		position: fixed;
+		top: 0;
+		left: 0;
+		z-index: 10000;
+		transition: all 0.4s;
+		&.none{
+			display: none;			
+		}
+		&.show{
+			display: block;
+		}
+		.content{
+			width: 518rpx;
+			height: 360rpx;
+			position: absolute;
+			background: $bg-color;
+			left: 0;
+			right: 0;
+			bottom: 0;
+			top: 0;
+			margin: auto;
+			border-radius: 24rpx;
+			.text-content{
+				width: 448rpx;
+				height: 200rpx;
+				padding: 30rpx 35rpx;
+				float: left;
+				.title{
+					line-height: 44rpx;
+					font-size: $font-size-28;
+					color: $text-color;
+					text-align: center;
+					font-weight: bold;
+					margin-bottom: 36rpx;
+				}
+				.share{
+					line-height: 36rpx;
+					font-size: $font-size-26;
+					color: $text-color;
+					text-align: justify;
+					margin-top: 22rpx;
+					font-weight: normal;
+					.txt{
+						margin-left: 10rpx;
+						color: #FF2A2A;
+					}
+				}
+				.text{
+					line-height: 44rpx;
+					font-size: $font-size-28;
+					color: $text-color;
+					text-align: justify;
+					margin-top: 22rpx;
+				}
+			}
+			.alert-btn{
+				width: 80%;
+				height: 70rpx;
+				display: flex;
+				margin: 0 auto;
+				.btn{
+					flex: 1;
+					line-height: 70rpx;
+					font-size: $font-size-28;
+					text-align: center;
+					color: #FFFFFF;
+					border-radius: 35rpx;
+					padding: 0;
+					margin: 0 15rpx;
+					&.btn-cancel{
+						background: #e1e1e1;
+					}
+					&.btn-confirm{
+						background: #4ad04c;
+					}
+				}
+			}
+		}	
+	}
+</style>

+ 0 - 1
components/cm-module/modelAlert/supplierRegisreAlert.vue

@@ -23,7 +23,6 @@
 </template>
 
 <script>
-	import { cancelPrompt } from "@/api/use.js"
 	export default{
 		name:'alert',
 		props:{

+ 0 - 156
components/cm-module/modelAlert/upgradeAlert.vue

@@ -1,156 +0,0 @@
-<template name="alert">
-	<view class="alert spec" :class="specClass">
-		<!-- 运费弹窗说明 -->
-		<view class="freight-alert"  @click.stop="unBindUpgrade">
-			<view class="content clearfix">
-				<view class="title"><text class="iconfont icon-iconfontguanbi" @click.stop="unBindUpgrade"></text></view>
-				<view class="text-content">
-					<view class="text-h1">您目前为<text class="col">普通机构用户</text></view>
-					<view class="text-h1">可以升级<text class="col">会员机构</text>享受更多更好的服务</view>
-				</view>
-				<view class="text-btn">
-					<view class="btn" @click.stop="GoApply">去升级</view>
-					<view class="btn-none" @click.stop="unBindUpgrade">暂不升级</view>
-				</view>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-	import { cancelPrompt } from "@/api/use.js"
-	export default{
-		name:'alert',
-		props:{
-			clubStatus:{
-				type:Number
-			}
-		},
-		data() {
-			return{
-				status:""
-			}
-		},
-		created() {
-			this.status = this.clubStatus
-		},
-		onLoad(){
-			
-		},
-		methods:{
-			GoApply(){
-				this.$emit('GoApply')
-			},
-			unBindUpgrade(){
-				this.$emit('unBindUpgrade')
-			}
-		},
-		onShow(){
-	
-		}
-	}
-</script>
-
-<style lang="scss">
-	/*弹窗*/
-	.model-warp.none{
-		display: none;
-	}
-	.model-warp.show{
-		display: block;
-	}
-	.freight-alert{
-		width: 100%;
-		height: 100%;
-		background: rgba(0,0,0,.5);
-		position: fixed;
-		top: 0;
-		left: 0;
-		z-index: 8888;
-		transition: all 0.4s;
-		&.none{
-			display: none;			
-		}
-		&.show{
-			display: block;
-		}
-		.content{
-			width: 492rpx;
-			height: 710rpx;
-			position: absolute;
-			background: url(https://img.caimei365.com/group1/M00/03/B0/Cmis217Z9BSAERyCAAG9lz_TNN0938.png) no-repeat;
-			background-size: contain;
-			left: 0;
-			right: 0;
-			bottom: 0;
-			top: 0;
-			margin: auto;
-			padding:0 24rpx 20rpx 24rpx;
-			border-radius: 12rpx;
-			.title{
-				width: 100%;
-				height: 68rpx;
-				line-height: 68rpx;
-				text-align: center;
-				position: relative;
-				.icon-iconfontguanbi{
-					width: 50rpx;
-					height: 50rpx;
-					text-align: center;
-					line-height: 50rpx;
-					border-radius: 50%;
-					border: 1px solid #FFFFFF;
-					position: absolute;
-					right: -20rpx;
-					top: 0;
-					font-size: $font-size-32;
-					color: #FFFFFF;
-				}
-			}
-			.text-content{
-				width: 100%;
-				height: auto;
-				margin-top: 280rpx;
-				.text-h1{
-					line-height: 60rpx;
-					font-size: $font-size-28;
-					color: $text-color;
-					text-align: justify;
-					.col{
-						color: $color-system;
-						margin: 0 6rpx;
-					}
-				}
-			}
-			.text-btn{
-				width: 100%;
-				height: auto;
-				margin-top: 40rpx;
-				.btn{
-					width: 100%;
-					height: 88rpx;
-					float: left;
-					background: $btn-confirm;
-					line-height: 88rpx;
-					font-size: $font-size-28;
-					text-align: center;
-					color: #FFFFFF;
-					border-radius: 44rpx;
-					padding: 0;
-				}
-				.btn-none{
-					width: 100%;
-					height: 88rpx;
-					float: left;
-					line-height: 88rpx;
-					font-size: $font-size-28;
-					text-align: center;
-					color: #666666;
-					padding: 0;
-					margin-top: 20rpx;
-				}
-			}
-		}
-	}
-	
-</style>

+ 7 - 1
components/cm-module/orderDetails/goodsList.vue

@@ -123,7 +123,7 @@
 		},
 		methods:{
 			goShophome(id){
-				this.$api.navigateTo(`/supplier/pages/user/my-shop?shopId=${id}`)
+				this.$api.navigateTo(`/pages/supplier/user/my-shop?shopId=${id}`)
 			},
 			details(pros){
 				if(pros.validFlag == 9){
@@ -305,6 +305,12 @@
 					height: 44rpx;
 					color: #999999;
 					line-height: 44rpx;
+					text-overflow:ellipsis;
+					display: -webkit-box;
+					word-break: break-all;
+					-webkit-box-orient: vertical;
+					-webkit-line-clamp: 1;
+					overflow: hidden;
 				}
 				.productprice{
 					height: 48rpx;

+ 34 - 32
components/cm-module/orderDetails/orderButton.vue

@@ -10,9 +10,12 @@
 				分享订单
 			</view>
 			<view class="btn btn-cancel" v-if="btnState.isCancel" @click.stop="btnConfirm('cancel',order)">取消订单</view>
-			<view class="btn btn-delete" v-if="btnState.isDelete" @click.stop="btnConfirm('delete',order)">删除订单</view>
+			<!-- <view class="btn btn-delete" v-if="btnState.isDelete" @click.stop="btnConfirm('delete',order)">删除订单</view> -->
 			<view class="btn btn-query" v-if="btnState.isQuery && order.secondHandOrderFlag!=1" @click.stop="btnConfirm('query',order)">查看物流</view>
-			<view class="btn " v-if="btnState.isConfirm" @click.stop="btnConfirm('confirm',order)">确认收货</view>
+			<view class="btn btn-firm" v-if="btnState.isConfirm" @click.stop="btnConfirm('confirm',order)">
+				确认收货
+				<view class="tips">采美豆<text class="line"></text></view>
+			</view>
 		</view>
 	</view>
 </template>
@@ -159,36 +162,6 @@
 					position: relative;
 				}
 			}
-			.btn-color{
-				background: $btn-confirm;
-				margin: 22rpx 0 22rpx 22rpx;
-				.tips{
-					width: 160rpx;
-					height: 34rpx;
-					padding: 10rpx 10rpx;
-					background:linear-gradient(45deg,rgba(0,0,0,1) 0%,rgba(87,87,87,1) 100%);
-					box-shadow:0px 2px 4px 0px rgba(0,0,0,0.2);
-					border-radius: 8rpx;
-					position: absolute;
-					color: #FFFFFF;
-					line-height: 34rpx;
-					font-size: $font-size-24;
-					text-align: left;
-					right: 24rpx;
-					top: -45rpx;
-					&:before{
-						content: "";
-						width: 25rpx;
-						height: 25rpx;
-						background:linear-gradient(45deg,rgba(0,0,0,1) 0%,rgba(87,87,87,1) 100%);
-						position: absolute;
-						bottom: -8rpx;
-						right: 30rpx;
-						z-index: -1;
-						transform:rotate(45deg);
-					}
-				}
-			}
 			.btn-confirm{
 				background:#ff7a51;
 				border-color:#ff7a51;
@@ -200,6 +173,35 @@
 				border: 2rpx solid #f94b4b;
 				color: #fff;
 			}
+			.btn-firm{
+				position:relative;
+				.tips{
+					width: 74rpx;
+					height: 32rpx;
+					line-height: 32rpx;
+					padding: 0 7rpx;
+					border-radius: 16rpx;
+					background-color: #ffe6dc;
+					color: $color-system;
+					text-align: center;
+					font-size: $font-size-20;
+					position:absolute;
+					right: 0;
+					top: -40rpx;
+					z-index: 90;
+					.line{
+						display: block;
+						width: 20rpx;
+						height: 20rpx;
+						background-color: #ffe6dc;
+						position: relative;
+						bottom: 18rpx;
+						left: 15rpx;
+						z-index: -1;
+						transform:rotate(45deg);
+					}
+				}
+			}
 			.btn-share{
 				.tips{
 					width: 160rpx;

+ 13 - 7
components/cm-module/orderDetails/orderInformation.vue

@@ -26,24 +26,30 @@
 					<!-- <view class="view-type">{{ orderData.status | TextFormat }}</view> -->
 				</view>
 				<view class="information-view same">
-					<view class="view-man">应付总额:<label class="red">¥{{ orderData.payableAmount =='undefined' ? '0.00' : orderData.payableAmount | NumFormat }}</label></view>
-				</view>
-				<view class="information-view">
 					<view class="view-num">余额抵扣:<label class="label">¥{{ orderData.balancePayFee =='undefined' ? '' : orderData.balancePayFee | NumFormat}}</label></view>
 				</view>
-				<view class="information-view same">
+				<view class="information-view ">
 					<view class="view-num" v-if="orderData.freePostFlag == '0'">运费:<label class="label">包邮</label></view>
 					<view class="view-num" v-if="orderData.freePostFlag == '-1'">运费:<label class="label">到付</label></view>
 					<view class="view-num" v-if="orderData.freePostFlag == '1'">运费:<label class="label">¥{{ orderData.freight | NumFormat}}</label></view>
 				</view>
-				<view class="information-view" v-show="orderData.promotionFullReduction>0">
+				<view class="information-view same" v-show="orderData.userBeans>0">
+					<view class="view-man" >采美豆抵用运费:<label class="label">{{ orderData.userBeans }}</label></view>
+				</view>
+				<view class="information-view" v-show="orderData.discountFee>0">
+					<view class="view-num">经理折扣:<label class="label">¥{{ orderData.discountFee =='undefined' ? '' : orderData.discountFee | NumFormat}}</label></view>
+				</view>
+				<view class="information-view same" v-show="orderData.promotionFullReduction>0">
 					<view class="view-man" >促销满减:<label class="label">¥{{ orderData.promotionFullReduction | NumFormat}}</label></view>
 				</view>
-				<view class="information-view same">
+				<view class="information-view" v-show="orderData.couponAmount>0">
+					<view class="view-man" >优惠券:<label class="label">¥{{ orderData.couponAmount | NumFormat}}</label></view>
+				</view>
+				<view class="information-view same" v-show="(orderData.presentCount + orderData.promotionalGiftsCount)>0">
 					<view class="view-man">赠品总数:<label class="label">{{ orderData.presentCount + orderData.promotionalGiftsCount}}</label></view>
 				</view>
 				<view class="information-view">
-					<view class="view-num">经理折扣:<label class="label">¥{{ orderData.discountFee =='undefined' ? '' : orderData.discountFee | NumFormat}}</label></view>
+					<view class="view-man">应付总额:<label class="red">¥{{ orderData.payableAmount =='undefined' ? '0.00' : orderData.payableAmount | NumFormat }}</label></view>
 				</view>
 				<view class="information-view same">
 					<view class="view-num">已支付:<label class="red">¥{{ orderData.receiptAmount == null ? '0.00' : orderData.receiptAmount | NumFormat }}</label></view>

+ 34 - 2
components/cm-module/orderDetails/orderListButton.vue

@@ -7,9 +7,12 @@
 			<view class="btn btn-confirm" v-if="btnState.isConfirmation" @click.stop="btnConfirm('confirmation',order)">确认订单</view>
 			<view class="btn btn-share"  @click.stop="onShareCode(order.orderID)">分享订单</view>
 			<view class="btn btn-cancel" v-if="btnState.isCancel" @click.stop="btnConfirm('cancel',order)">取消订单</view>
-			<view class="btn btn-delete" v-if="btnState.isDelete" @click.stop="btnConfirm('delete',order)">删除订单</view>
+			<!-- <view class="btn btn-delete" v-if="btnState.isDelete" @click.stop="btnConfirm('delete',order)">删除订单</view> -->
 			<view class="btn btn-query" v-if="btnState.isQuery && order.secondHandOrderFlag!=1" @click.stop="btnConfirm('query',order)">查看物流</view>
-			<view class="btn " v-if="btnState.isConfirm" @click.stop="btnConfirm('confirm',order)">确认收货</view>
+			<view class="btn btn-firm" v-if="btnState.isConfirm" @click.stop="btnConfirm('confirm',order)">
+				确认收货
+				<view class="tips">采美豆<text class="line"></text></view>
+			</view>
 		</view>
 	</view>
 </template>
@@ -177,6 +180,35 @@
 				color: #FFFFFF;
 				border: 2rpx solid #f94b4b;
 			}
+			.btn-firm{
+				position:relative;
+				.tips{
+					width: 74rpx;
+					height: 32rpx;
+					line-height: 32rpx;
+					padding: 0 7rpx;
+					border-radius: 16rpx;
+					background-color: #ffe6dc;
+					color: $color-system;
+					text-align: center;
+					font-size: $font-size-20;
+					position:absolute;
+					right: 0;
+					top: -40rpx;
+					z-index: 90;
+					.line{
+						display: block;
+						width: 20rpx;
+						height: 20rpx;
+						background-color: #ffe6dc;
+						position: relative;
+						bottom: 18rpx;
+						left: 15rpx;
+						z-index: -1;
+						transform:rotate(45deg);
+					}
+				}
+			}
 			.btn-share{
 				// background:linear-gradient(315deg,rgba(0,212,150,1) 0%,rgba(126,243,174,1) 100%);
 				position: relative;

+ 4 - 2
components/cm-module/orderDetails/sellerDetaileButton.vue

@@ -2,14 +2,15 @@
 	<view class="button-template" :style="{paddingBottom :isIphoneX ? '68rpx' : '0rpx'}">
 		<!-- 底部按钮 -->
 		<view class="button-content">
-			<view class="btn btn-cancel"  v-if="secondHandOrderFlag!=1"  @click.stop="btnConfirm('again',order)">再来一单</view>
+			<view class="btn btn-cancel"  v-if="secondHandOrderFlag!=1 && !rechargeGoods"  @click.stop="btnConfirm('again',order)">再来一单</view>
 			<view class="btn btn-cancel" v-if="btnState.isCancel"  @click.stop="btnConfirm('cancel',order)">取消订单</view>
-			<view class="btn btn-cancel" v-if="btnState.isDelete"  @click.stop="btnConfirm('delete',order)">删除订单</view>
+			<!-- <view class="btn btn-cancel" v-if="btnState.isDelete"  @click.stop="btnConfirm('delete',order)">删除订单</view> -->
 			<view class="btn btn-share" @click.stop="onShareCode">
 				<view class="tips" v-if="shareCode">分享码:{{shareCode}}</view>
 				分享订单
 			</view>	
 			<view class="btn btn-color" v-if="btnState.isConfirm" @click.stop="btnConfirm('confirm',order)">确认订单</view>
+			<view class="btn btn-query" v-if="btnState.isQuery && order.secondHandOrderFlag!=1" @click.stop="btnConfirm('query',order)">查看物流</view>
 			<view class="btn btn-color" v-if="btnState.isPay && ableUserMoney > 0 && !rechargeGoods" @click.stop="btnConfirm('balance',order)">余额抵扣</view>
 		</view>
 	</view>
@@ -55,6 +56,7 @@
 				isIphoneX:this.$store.state.isIphoneX,
 				invoiceStatus:false,
 				mapStateArr:[
+					{label:'isQuery',val:[4,5,12,13,33,22,23,32,77],status: true},
 					{label:'isDelete',val:[6],status: true},
 					{label:'isCancel',val:[0,111],status: true},
 					{label:'isConfirm',val:[0],status: true},

+ 7 - 2
components/cm-module/orderDetails/sellerOrderButton.vue

@@ -2,10 +2,11 @@
 	<view class="button-template">
 		<!-- 底部按钮 -->
 		<view class="button-content"> 
+			<view class="btn btn-cancel" v-if="secondHandOrderFlag!=1 && !rechargeGoods"  @click.stop="btnConfirm('again',orderID)">再来一单</view>
 			<view class="btn btn-cancel" v-if="btnState.isCancel" @click.stop="btnConfirm('cancel',orderID)">取消订单</view>
-			<view class="btn btn-cancel" v-if="btnState.isDelete" @click.stop="btnConfirm('delete',orderID)">删除订单</view>
-			<view class="btn btn-cancel" v-if="secondHandOrderFlag!=1"  @click.stop="btnConfirm('again',orderID)">再来一单</view>
+			<!-- <view class="btn btn-cancel" v-if="btnState.isDelete" @click.stop="btnConfirm('delete',orderID)">删除订单</view> -->
 			<view class="btn btn-cancel"  @click.stop="onShareCode(orderID,userID)">分享订单</view>	
+			<view class="btn btn-query" v-if="btnState.isQuery && order.secondHandOrderFlag!=1" @click.stop="btnConfirm('query',order)">查看物流</view>
 			<view class="btn btn-color" v-if="btnState.isConfirm" @click.stop="btnConfirm('confirm',orderID)">确认订单</view>
 		</view>
 	</view>
@@ -24,6 +25,9 @@
 			userID:{
 				type:Number
 			},
+			rechargeGoods:{
+				type:Boolean
+			},
 			serviceProviderId:{
 				type:Number
 			},
@@ -37,6 +41,7 @@
 				shareCode:'',
 				btnState:this.initStatus(),
 				mapStateArr:[
+					{label:'isQuery',val:[4,5,12,13,33,22,23,32,77],status: true},
 					{label:'isDelete',val:[6],status: true},
 					{label:'isCancel',val:[0,111],status: true},
 					{label:'isConfirm',val:[0],status: true},

+ 7 - 7
components/cm-module/orderDetails/supplierRecorgButton.vue

@@ -2,8 +2,9 @@
 	<view class="button-template">
 		<!-- 底部按钮 -->
 		<view class="button-content">
-			<view class="btn btn-color" v-if="hanldData.mailer == '1'" @click.stop="btnConfirm('cancel',hanldData)">撤销发货</view>
-			<view class="btn btn-color" @click.stop="btnConfirm('add',hanldData)">添加物流</view>
+			<view class="btn btn-cancel" v-if="hanldData.mailer == '1'" @click.stop="btnConfirm('cancel',hanldData)">撤销发货</view>
+			<view class="btn btn-cancel" @click.stop="btnConfirm('add',hanldData)">添加物流</view>
+			<view class="btn btn-cancel" @click.stop="btnConfirm('qualifications',hanldData)">商品资质</view>
 		</view>
 	</view>
 </template>
@@ -68,8 +69,9 @@
 				font-size:$font-size-26;
 				color: #FFFFFF;
 				text-align: center;
-				border-radius: 10rpx;
+				border-radius: 34rpx;
 				float: right;
+				margin-right: 0;
 			}
 			.btn-color{
 				background: $btn-confirm;
@@ -77,10 +79,8 @@
 			}
 			.btn-cancel{
 				background:#FFFFFF;
-				color: #999999;
-				float: left;
-				margin: 22rpx 0;
-				text-align: left;
+				color: #666666;
+				border: 1px solid #666666;
 			}
 			.btn-delete{
 				background:linear-gradient(315deg,rgba(255,163,3,1) 0%,rgba(255,53,1,1) 100%);

+ 47 - 28
components/cm-module/pageFloorTemplate/templateA.vue

@@ -24,11 +24,12 @@
 				</view>
 				<view class="floor-item-price" v-if="item.listType == 1">
 					<view class="floor-item-act">
+						<view class="coupon-tags" v-if="item.product.couponsLogo">优惠券</view>
 						<template v-if="userIdentity === 3">
 							<template v-if="item.product.actStatus===1">
 								<view class="floor-tags" v-if="PromotionsFormat(item.product.promotions)">
 									{{item.product.promotions.name}}
-									<text v-if="hasLogin && item.product.price1TextFlag != 1 && item.product.shopID == shopId">:¥{{item.product.retailPrice | NumFormat}}</text>
+									<text v-if="hasLogin && item.product.priceFlag != 1 && item.product.shopID == shopId">:¥{{item.product.price | NumFormat}}</text>
 								</view>
 								<view class="floor-tags" v-else>{{item.product.promotions.name}}</view>	
 							</template>
@@ -40,7 +41,7 @@
 							<template v-if="item.product.actStatus===1">
 								<view class="floor-tags" v-if="PromotionsFormat(item.product.promotions)">
 									{{item.product.promotions.name}}
-									<text v-if="hasLogin && item.product.price1TextFlag != 1">:¥{{item.product.retailPrice | NumFormat}}</text>
+									<text v-if="hasLogin && item.product.priceFlag != 1">:¥{{item.product.price | NumFormat}}</text>
 								</view>
 								<view class="floor-tags" v-else>{{item.product.promotions.name}}</view>	
 							</template>
@@ -53,42 +54,42 @@
 						<template v-if="item.product.productCategory == 1">
 							<template v-if="userIdentity == 3">
 								<template v-if="item.product.shopID == shopId">
-									<view class="title-none" v-if="item.product.price1TextFlag === '1'">
+									<view class="title-none" v-if="item.product.priceFlag === 1">
 										<text class="p big">¥未公开价格</text>
 									</view>
 									<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
 										<text class="p sm">¥</text>
-										<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+										<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.originalPrice : item.product.price ) | NumFormat}}</text>
 									</view>
 								</template>	
 								<template v-else>
 									<view class="no-price">
 										<view class="p-stars">
 											<text class="p-no">¥</text>
-											<uni-grader :grade="Number(item.product.price1Grade)" :margin="14"></uni-grader>
+											<uni-grader :grade="Number(item.product.priceGrade)" :margin="14"></uni-grader>
 										</view>
 									</view>	
 								</template>
 							</template>
 							<template v-else-if="userIdentity ===4">
-								<view class="title-none" v-if="item.product.price1TextFlag === '1'">
+								<view class="title-none" v-if="item.product.priceFlag === 1">
 									<text class="p big">¥未公开价格</text>
 								</view>
-								<view class="title-none"  v-if="item.product.price1TextFlag === '2'">
+								<view class="title-none"  v-if="item.product.priceFlag === 2">
 									<text class="p big">¥价格仅会员可见</text>
 								</view>
-								<view class="price tui-skeleton-rect" v-if="item.product.price1TextFlag === '0'" :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+								<view class="price tui-skeleton-rect" v-if="item.product.priceFlag === 0" :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
 									<text class="p sm">¥</text>
-									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.originalPrice : item.product.price ) | NumFormat}}</text>
 								</view>
 							</template>
 							<template v-else>
-								<view class="title-none" v-if="item.product.price1TextFlag === '1'">
+								<view class="title-none" v-if="item.product.priceFlag === 1">
 									<text class="p big">¥未公开价格</text>
 								</view>
 								<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
 									<text class="p sm">¥</text>
-									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.originalPrice : item.product.price ) | NumFormat}}</text>
 								</view>
 							</template>
 						</template>	
@@ -99,7 +100,7 @@
 							</view>
 							<view class="price tui-skeleton-rect" v-else>
 								<text class="p sm">¥</text>
-								<text class="p big">{{ item.product.retailPrice | NumFormat }}</text>
+								<text class="p big">{{ item.product.price | NumFormat }}</text>
 							</view>
 						</template>
 					</view>
@@ -107,7 +108,7 @@
 						<template v-if="item.product.productCategory == 1">
 							<view class="p-stars">
 								<text class="p-no">¥</text>
-								<uni-grader :grade="Number(item.product.price1Grade)" :margin="14"></uni-grader>
+								<uni-grader :grade="Number(item.product.priceGrade)" :margin="14"></uni-grader>
 							</view>
 						</template>
 						<template v-else>
@@ -166,11 +167,13 @@
 		},
 		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)
 				})
-				this.floorData = data
-				console.log(this.floorData)
 			},
 			PromotionsFormat(promo){//促销活动类型数据处理
 				if(promo!=null){
@@ -256,19 +259,35 @@
 				height: 32rpx;
 				text-align: center;
 				box-sizing: border-box;
-			}
-			.floor-tags{
-				height: 28rpx;
-				border-radius: 6rpx;
-				background-color: #FFFFFF;
-				line-height: 28rpx;
-				color: $color-system;
-				text-align: center;
-				display: inline-block;
-				padding:0 16rpx;
-				font-size: $font-size-20;
-				border: 1px solid #E15616;
-				float: left;
+				.coupon-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: left;
+					margin-right: 12rpx;
+				}
+				.floor-tags{
+					height: 32rpx;
+					box-sizing: border-box;
+					border-radius: 8rpx;
+					background-color: #FFFFFF;
+					line-height: 28rpx;
+					color: $color-system;
+					text-align: center;
+					display: inline-block;
+					padding:0 16rpx;
+					font-size: $font-size-20;
+					border: 1px solid #E15616;
+					float: left;
+				}
 			}
 			.title-none{
 				font-size: $font-size-26;

+ 47 - 28
components/cm-module/pageFloorTemplate/templateB.vue

@@ -36,11 +36,12 @@
 				</view>
 				<view class="floor-item-price" v-if="item.listType == 1">
 					<view class="floor-item-act">
+						<view class="coupon-tags" v-if="item.product.couponsLogo">优惠券</view>
 						<template v-if="userIdentity === 3">
 							<template v-if="item.product.actStatus===1">
 								<view class="floor-tags" v-if="PromotionsFormat(item.product.promotions)">
 									{{item.product.promotions.name}}
-									<text v-if="hasLogin && item.product.price1TextFlag != 1 && item.product.shopID == shopId">:¥{{item.product.retailPrice | NumFormat}}</text>
+									<text v-if="hasLogin && item.product.priceFlag != 1 && item.product.shopID == shopId">:¥{{item.product.price | NumFormat}}</text>
 								</view>
 								<view class="floor-tags" v-else>{{item.product.promotions.name}}</view>	
 							</template>
@@ -52,7 +53,7 @@
 							<template v-if="item.product.actStatus===1">
 								<view class="floor-tags" v-if="PromotionsFormat(item.product.promotions)">
 									{{item.product.promotions.name}}
-									<text v-if="hasLogin && item.product.price1TextFlag != 1">:¥{{item.product.retailPrice | NumFormat}}</text>
+									<text v-if="hasLogin && item.product.priceFlag != 1">:¥{{item.product.price | NumFormat}}</text>
 								</view>
 								<view class="floor-tags" v-else>{{item.product.promotions.name}}</view>	
 							</template>
@@ -65,42 +66,42 @@
 						<template v-if="item.product.productCategory == 1">
 							<template v-if="userIdentity == 3">
 								<template v-if="item.product.shopID == shopId">
-									<view class="title-none" v-if="item.product.price1TextFlag === '1'">
+									<view class="title-none" v-if="item.product.priceFlag === 1">
 										<text class="p big">¥未公开价格</text>
 									</view>
 									<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
 										<text class="p sm">¥</text>
-										<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+										<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.originalPrice : item.product.price ) | NumFormat}}</text>
 									</view>
 								</template>	
 								<template v-else>
 									<view class="no-price">
 										<view class="p-stars">
 											<text class="p-no">¥</text>
-											<uni-grader :grade="Number(item.product.price1Grade)" :margin="14"></uni-grader>
+											<uni-grader :grade="Number(item.product.priceGrade)" :margin="14"></uni-grader>
 										</view>
 									</view>	
 								</template>
 							</template>
 							<template v-else-if="userIdentity ===4">
-								<view class="title-none" v-if="item.product.price1TextFlag === '1'">
+								<view class="title-none" v-if="item.product.priceFlag === 1">
 									<text class="p big">¥未公开价格</text>
 								</view>
-								<view class="title-none"  v-if="item.product.price1TextFlag === '2'">
+								<view class="title-none"  v-if="item.product.priceFlag === 2">
 									<text class="p big">¥价格仅会员可见</text>
 								</view>
-								<view class="price tui-skeleton-rect" v-if="item.product.price1TextFlag === '0'" :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+								<view class="price tui-skeleton-rect" v-if="item.product.priceFlag === 0" :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
 									<text class="p sm">¥</text>
-									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.originalPrice : item.product.price ) | NumFormat}}</text>
 								</view>
 							</template>
 							<template v-else>
-								<view class="title-none" v-if="item.product.price1TextFlag === '1'">
+								<view class="title-none" v-if="item.product.priceFlag === 1">
 									<text class="p big">¥未公开价格</text>
 								</view>
 								<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
 									<text class="p sm">¥</text>
-									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.originalPrice : item.product.price ) | NumFormat}}</text>
 								</view>
 							</template>
 						</template>	
@@ -111,7 +112,7 @@
 							</view>
 							<view class="price tui-skeleton-rect" v-else>
 								<text class="p sm">¥</text>
-								<text class="p big">{{ item.product.retailPrice | NumFormat }}</text>
+								<text class="p big">{{ item.product.price | NumFormat }}</text>
 							</view>
 						</template>
 					</view>
@@ -119,7 +120,7 @@
 						<template v-if="item.product.productCategory == 1">
 							<view class="p-stars">
 								<text class="p-no">¥</text>
-								<uni-grader :grade="Number(item.product.price1Grade)" :margin="14"></uni-grader>
+								<uni-grader :grade="Number(item.product.priceGrade)" :margin="14"></uni-grader>
 							</view>
 						</template>
 						<template v-else>
@@ -178,11 +179,13 @@
 		},
 		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)
 				})
-				this.floorData = data
-				// console.log(this.floorData)
 			},
 			PromotionsFormat(promo){//促销活动类型数据处理
 				if(promo!=null){
@@ -268,19 +271,35 @@
 				height: 32rpx;
 				text-align: center;
 				box-sizing: border-box;
-			}
-			.floor-tags{
-				height: 28rpx;
-				border-radius: 6rpx;
-				background-color: #FFFFFF;
-				line-height: 28rpx;
-				color: $color-system;
-				text-align: center;
-				display: inline-block;
-				padding:0 16rpx;
-				font-size: $font-size-20;
-				border: 1px solid #E15616;
-				float: left;
+				.coupon-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: left;
+					margin-right: 12rpx;
+				}
+				.floor-tags{
+					height: 32rpx;
+					box-sizing: border-box;
+					border-radius: 8rpx;
+					background-color: #FFFFFF;
+					line-height: 28rpx;
+					color: $color-system;
+					text-align: center;
+					display: inline-block;
+					padding:0 16rpx;
+					font-size: $font-size-20;
+					border: 1px solid #E15616;
+					float: left;
+				}
 			}
 			.title-none{
 				font-size: $font-size-26;

+ 47 - 28
components/cm-module/pageFloorTemplate/templateC.vue

@@ -36,11 +36,12 @@
 				</view>
 				<view class="floor-item-price" v-if="item.listType == 1">
 					<view class="floor-item-act">
+						<view class="coupon-tags" v-if="item.product.couponsLogo">优惠券</view>
 						<template v-if="userIdentity === 3">
 							<template v-if="item.product.actStatus===1">
 								<view class="floor-tags" v-if="PromotionsFormat(item.product.promotions)">
 									{{item.product.promotions.name}}
-									<text v-if="hasLogin && item.product.price1TextFlag != 1 && item.product.shopID == shopId">:¥{{item.product.retailPrice | NumFormat}}</text>
+									<text v-if="hasLogin && item.product.priceFlag != 1 && item.product.shopID == shopId">:¥{{item.product.price | NumFormat}}</text>
 								</view>
 								<view class="floor-tags" v-else>{{item.product.promotions.name}}</view>	
 							</template>
@@ -52,7 +53,7 @@
 							<template v-if="item.product.actStatus===1">
 								<view class="floor-tags" v-if="PromotionsFormat(item.product.promotions)">
 									{{item.product.promotions.name}}
-									<text v-if="hasLogin && item.product.price1TextFlag != 1">:¥{{item.product.retailPrice | NumFormat}}</text>
+									<text v-if="hasLogin && item.product.priceFlag != 1">:¥{{item.product.price | NumFormat}}</text>
 								</view>
 								<view class="floor-tags" v-else>{{item.product.promotions.name}}</view>	
 							</template>
@@ -65,42 +66,42 @@
 						<template v-if="item.product.productCategory == 1">
 							<template v-if="userIdentity == 3">
 								<template v-if="item.product.shopID == shopId">
-									<view class="title-none" v-if="item.product.price1TextFlag === '1'">
+									<view class="title-none" v-if="item.product.priceFlag === 1">
 										<text class="p big">¥未公开价格</text>
 									</view>
 									<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
 										<text class="p sm">¥</text>
-										<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+										<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.originalPrice : item.product.price ) | NumFormat}}</text>
 									</view>
 								</template>	
 								<template v-else>
 									<view class="no-price">
 										<view class="p-stars">
 											<text class="p-no">¥</text>
-											<uni-grader :grade="Number(item.product.price1Grade)" :margin="14"></uni-grader>
+											<uni-grader :grade="Number(item.product.priceGrade)" :margin="14"></uni-grader>
 										</view>
 									</view>	
 								</template>
 							</template>
 							<template v-else-if="userIdentity ===4">
-								<view class="title-none" v-if="item.product.price1TextFlag === '1'">
+								<view class="title-none" v-if="item.product.priceFlag === 1">
 									<text class="p big">¥未公开价格</text>
 								</view>
-								<view class="title-none"  v-if="item.product.price1TextFlag === '2'">
+								<view class="title-none"  v-if="item.product.priceFlag === 2">
 									<text class="p big">¥价格仅会员可见</text>
 								</view>
-								<view class="price tui-skeleton-rect" v-if="item.product.price1TextFlag === '0'" :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+								<view class="price tui-skeleton-rect" v-if="item.product.priceFlag === 0" :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
 									<text class="p sm">¥</text>
-									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.originalPrice : item.product.price ) | NumFormat}}</text>
 								</view>
 							</template>
 							<template v-else>
-								<view class="title-none" v-if="item.product.price1TextFlag === '1'">
+								<view class="title-none" v-if="item.product.priceFlag === 1">
 									<text class="p big">¥未公开价格</text>
 								</view>
 								<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
 									<text class="p sm">¥</text>
-									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.originalPrice : item.product.price ) | NumFormat}}</text>
 								</view>
 							</template>
 						</template>	
@@ -111,7 +112,7 @@
 							</view>
 							<view class="price tui-skeleton-rect" v-else>
 								<text class="p sm">¥</text>
-								<text class="p big">{{ item.product.retailPrice | NumFormat }}</text>
+								<text class="p big">{{ item.product.price | NumFormat }}</text>
 							</view>
 						</template>
 					</view>
@@ -119,7 +120,7 @@
 						<template v-if="item.product.productCategory == 1">
 							<view class="p-stars">
 								<text class="p-no">¥</text>
-								<uni-grader :grade="Number(item.product.price1Grade)" :margin="14"></uni-grader>
+								<uni-grader :grade="Number(item.product.priceGrade)" :margin="14"></uni-grader>
 							</view>
 						</template>
 						<template v-else>
@@ -178,11 +179,13 @@
 		},
 		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)
 				})
-				this.floorData = data
-				// console.log(this.floorData)
 			},
 			PromotionsFormat(promo){//促销活动类型数据处理
 				if(promo!=null){
@@ -301,19 +304,35 @@
 				height: 32rpx;
 				text-align: center;
 				box-sizing: border-box;
-			}
-			.floor-tags{
-				height: 28rpx;
-				border-radius: 6rpx;
-				background-color: #FFFFFF;
-				line-height: 28rpx;
-				color: $color-system;
-				text-align: center;
-				display: inline-block;
-				padding:0 16rpx;
-				font-size: $font-size-20;
-				border: 1px solid #E15616;
-				float: left;
+				.coupon-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: left;
+					margin-right: 12rpx;
+				}
+				.floor-tags{
+					height: 32rpx;
+					box-sizing: border-box;
+					border-radius: 8rpx;
+					background-color: #FFFFFF;
+					line-height: 28rpx;
+					color: $color-system;
+					text-align: center;
+					display: inline-block;
+					padding:0 16rpx;
+					font-size: $font-size-20;
+					border: 1px solid #E15616;
+					float: left;
+				}
 			}
 			.title-none{
 				font-size: $font-size-26;

+ 47 - 28
components/cm-module/pageFloorTemplate/templateD.vue

@@ -48,11 +48,12 @@
 				</view>
 				<view class="floor-item-price" v-if="item.listType == 1">
 					<view class="floor-item-act">
+						<view class="coupon-tags" v-if="item.product.couponsLogo">优惠券</view>
 						<template v-if="userIdentity === 3">
 							<template v-if="item.product.actStatus===1">
 								<view class="floor-tags" v-if="PromotionsFormat(item.product.promotions)">
 									{{item.product.promotions.name}}
-									<text v-if="hasLogin && item.product.price1TextFlag != 1 && item.product.shopID == shopId">:¥{{item.product.retailPrice | NumFormat}}</text>
+									<text v-if="hasLogin && item.product.priceFlag != 1 && item.product.shopID == shopId">:¥{{item.product.price | NumFormat}}</text>
 								</view>
 								<view class="floor-tags" v-else>{{item.product.promotions.name}}</view>	
 							</template>
@@ -64,7 +65,7 @@
 							<template v-if="item.product.actStatus===1">
 								<view class="floor-tags" v-if="PromotionsFormat(item.product.promotions)">
 									{{item.product.promotions.name}}
-									<text v-if="hasLogin && item.product.price1TextFlag != 1">:¥{{item.product.retailPrice | NumFormat}}</text>
+									<text v-if="hasLogin && item.product.priceFlag != 1">:¥{{item.product.price | NumFormat}}</text>
 								</view>
 								<view class="floor-tags" v-else>{{item.product.promotions.name}}</view>	
 							</template>
@@ -77,42 +78,42 @@
 						<template v-if="item.product.productCategory == 1">
 							<template v-if="userIdentity == 3">
 								<template v-if="item.product.shopID == shopId">
-									<view class="title-none" v-if="item.product.price1TextFlag === '1'">
+									<view class="title-none" v-if="item.product.priceFlag === 1">
 										<text class="p big">¥未公开价格</text>
 									</view>
 									<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
 										<text class="p sm">¥</text>
-										<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+										<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.originalPrice : item.product.price ) | NumFormat}}</text>
 									</view>
 								</template>	
 								<template v-else>
 									<view class="no-price">
 										<view class="p-stars">
 											<text class="p-no">¥</text>
-											<uni-grader :grade="Number(item.product.price1Grade)" :margin="14"></uni-grader>
+											<uni-grader :grade="Number(item.product.priceGrade)" :margin="14"></uni-grader>
 										</view>
 									</view>	
 								</template>
 							</template>
 							<template v-else-if="userIdentity ===4">
-								<view class="title-none" v-if="item.product.price1TextFlag === '1'">
+								<view class="title-none" v-if="item.product.priceFlag === 1">
 									<text class="p big">¥未公开价格</text>
 								</view>
-								<view class="title-none"  v-if="item.product.price1TextFlag === '2'">
+								<view class="title-none"  v-if="item.product.priceFlag === 2">
 									<text class="p big">¥价格仅会员可见</text>
 								</view>
-								<view class="price tui-skeleton-rect" v-if="item.product.price1TextFlag === '0'" :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+								<view class="price tui-skeleton-rect" v-if="item.product.priceFlag === 0" :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
 									<text class="p sm">¥</text>
-									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.originalPrice : item.product.price ) | NumFormat}}</text>
 								</view>
 							</template>
 							<template v-else>
-								<view class="title-none" v-if="item.product.price1TextFlag === '1'">
+								<view class="title-none" v-if="item.product.priceFlag === 1">
 									<text class="p big">¥未公开价格</text>
 								</view>
 								<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
 									<text class="p sm">¥</text>
-									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.originalPrice : item.product.price ) | NumFormat}}</text>
 								</view>
 							</template>
 						</template>	
@@ -123,7 +124,7 @@
 							</view>
 							<view class="price tui-skeleton-rect" v-else>
 								<text class="p sm">¥</text>
-								<text class="p big">{{ item.product.retailPrice | NumFormat }}</text>
+								<text class="p big">{{ item.product.price | NumFormat }}</text>
 							</view>
 						</template>
 					</view>
@@ -131,7 +132,7 @@
 						<template v-if="item.product.productCategory == 1">
 							<view class="p-stars">
 								<text class="p-no">¥</text>
-								<uni-grader :grade="Number(item.product.price1Grade)" :margin="14"></uni-grader>
+								<uni-grader :grade="Number(item.product.priceGrade)" :margin="14"></uni-grader>
 							</view>
 						</template>
 						<template v-else>
@@ -190,11 +191,13 @@
 		},
 		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)
 				})
-				this.floorData = data
-				// console.log(this.floorData)
 			},
 			PromotionsFormat(promo){//促销活动类型数据处理
 				if(promo!=null){
@@ -291,19 +294,35 @@
 				height: 32rpx;
 				text-align: center;
 				box-sizing: border-box;
-			}
-			.floor-tags{
-				height: 28rpx;
-				border-radius: 6rpx;
-				background-color: #FFFFFF;
-				line-height: 28rpx;
-				color: $color-system;
-				text-align: center;
-				display: inline-block;
-				padding:0 16rpx;
-				font-size: $font-size-20;
-				border: 1px solid #E15616;
-				float: left;
+				.coupon-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: left;
+					margin-right: 12rpx;
+				}
+				.floor-tags{
+					height: 32rpx;
+					box-sizing: border-box;
+					border-radius: 8rpx;
+					background-color: #FFFFFF;
+					line-height: 28rpx;
+					color: $color-system;
+					text-align: center;
+					display: inline-block;
+					padding:0 16rpx;
+					font-size: $font-size-20;
+					border: 1px solid #E15616;
+					float: left;
+				}
 			}
 			.title-none{
 				font-size: $font-size-26;

+ 47 - 28
components/cm-module/pageFloorTemplate/templateE.vue

@@ -24,11 +24,12 @@
 				</view>
 				<view class="floor-item-price" v-if="item.listType == 1">
 					<view class="floor-item-act">
+						<view class="coupon-tags" v-if="item.product.couponsLogo">优惠券</view>
 						<template v-if="userIdentity === 3">
 							<template v-if="item.product.actStatus===1">
 								<view class="floor-tags" v-if="PromotionsFormat(item.product.promotions)">
 									{{item.product.promotions.name}}
-									<text v-if="hasLogin && item.product.price1TextFlag != 1 && item.product.shopID == shopId">:¥{{item.product.retailPrice | NumFormat}}</text>
+									<text v-if="hasLogin && item.product.priceFlag != 1 && item.product.shopID == shopId">:¥{{item.product.price | NumFormat}}</text>
 								</view>
 								<view class="floor-tags" v-else>{{item.product.promotions.name}}</view>	
 							</template>
@@ -40,7 +41,7 @@
 							<template v-if="item.product.actStatus===1">
 								<view class="floor-tags" v-if="PromotionsFormat(item.product.promotions)">
 									{{item.product.promotions.name}}
-									<text v-if="hasLogin && item.product.price1TextFlag != 1">:¥{{item.product.retailPrice | NumFormat}}</text>
+									<text v-if="hasLogin && item.product.priceFlag != 1">:¥{{item.product.price | NumFormat}}</text>
 								</view>
 								<view class="floor-tags" v-else>{{item.product.promotions.name}}</view>	
 							</template>
@@ -53,42 +54,42 @@
 						<template v-if="item.product.productCategory == 1">
 							<template v-if="userIdentity == 3">
 								<template v-if="item.product.shopID == shopId">
-									<view class="title-none" v-if="item.product.price1TextFlag === '1'">
+									<view class="title-none" v-if="item.product.priceFlag === 1">
 										<text class="p big">¥未公开价格</text>
 									</view>
 									<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
 										<text class="p sm">¥</text>
-										<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+										<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.originalPrice : item.product.price ) | NumFormat}}</text>
 									</view>
 								</template>	
 								<template v-else>
 									<view class="no-price">
 										<view class="p-stars">
 											<text class="p-no">¥</text>
-											<uni-grader :grade="Number(item.product.price1Grade)" :margin="14"></uni-grader>
+											<uni-grader :grade="Number(item.product.priceGrade)" :margin="14"></uni-grader>
 										</view>
 									</view>	
 								</template>
 							</template>
 							<template v-else-if="userIdentity ===4">
-								<view class="title-none" v-if="item.product.price1TextFlag === '1'">
+								<view class="title-none" v-if="item.product.priceFlag === 1">
 									<text class="p big">¥未公开价格</text>
 								</view>
-								<view class="title-none"  v-if="item.product.price1TextFlag === '2'">
+								<view class="title-none"  v-if="item.product.priceFlag === 2">
 									<text class="p big">¥价格仅会员可见</text>
 								</view>
-								<view class="price tui-skeleton-rect" v-if="item.product.price1TextFlag === '0'" :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+								<view class="price tui-skeleton-rect" v-if="item.product.priceFlag === 0" :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
 									<text class="p sm">¥</text>
-									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.originalPrice : item.product.price ) | NumFormat}}</text>
 								</view>
 							</template>
 							<template v-else>
-								<view class="title-none" v-if="item.product.price1TextFlag === '1'">
+								<view class="title-none" v-if="item.product.priceFlag === 1">
 									<text class="p big">¥未公开价格</text>
 								</view>
 								<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
 									<text class="p sm">¥</text>
-									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.originalPrice : item.product.price ) | NumFormat}}</text>
 								</view>
 							</template>
 						</template>	
@@ -99,7 +100,7 @@
 							</view>
 							<view class="price tui-skeleton-rect" v-else>
 								<text class="p sm">¥</text>
-								<text class="p big">{{ item.product.retailPrice | NumFormat }}</text>
+								<text class="p big">{{ item.product.price | NumFormat }}</text>
 							</view>
 						</template>
 					</view>
@@ -107,7 +108,7 @@
 						<template v-if="item.product.productCategory == 1">
 							<view class="p-stars">
 								<text class="p-no">¥</text>
-								<uni-grader :grade="Number(item.product.price1Grade)" :margin="14"></uni-grader>
+								<uni-grader :grade="Number(item.product.priceGrade)" :margin="14"></uni-grader>
 							</view>
 						</template>
 						<template v-else>
@@ -166,11 +167,13 @@
 		},
 		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)
 				})
-				this.floorData = data
-				// console.log(this.floorData)
 			},
 			PromotionsFormat(promo){//促销活动类型数据处理
 				if(promo!=null){
@@ -269,19 +272,35 @@
 				height: 32rpx;
 				text-align: center;
 				box-sizing: border-box;
-			}
-			.floor-tags{
-				height: 28rpx;
-				border-radius: 6rpx;
-				background-color: #FFFFFF;
-				line-height: 28rpx;
-				color: $color-system;
-				text-align: center;
-				display: inline-block;
-				padding:0 16rpx;
-				font-size: $font-size-20;
-				border: 1px solid #E15616;
-				float: left;
+				.coupon-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: left;
+					margin-right: 12rpx;
+				}
+				.floor-tags{
+					height: 32rpx;
+					box-sizing: border-box;
+					border-radius: 8rpx;
+					background-color: #FFFFFF;
+					line-height: 28rpx;
+					color: $color-system;
+					text-align: center;
+					display: inline-block;
+					padding:0 16rpx;
+					font-size: $font-size-20;
+					border: 1px solid #E15616;
+					float: left;
+				}
 			}
 			.title-none{
 				font-size: $font-size-26;

+ 47 - 28
components/cm-module/pageFloorTemplate/templateF.vue

@@ -12,11 +12,12 @@
 				</view>
 				<view class="floor-item-price" v-if="item.listType == 1">
 					<view class="floor-item-act">
+						<view class="coupon-tags" v-if="item.product.couponsLogo">优惠券</view>
 						<template v-if="userIdentity === 3">
 							<template v-if="item.product.actStatus===1">
 								<view class="floor-tags" v-if="PromotionsFormat(item.product.promotions)">
 									{{item.product.promotions.name}}
-									<text v-if="hasLogin && item.product.price1TextFlag != 1 && item.product.shopID == shopId">:¥{{item.product.retailPrice | NumFormat}}</text>
+									<text v-if="hasLogin && item.product.priceFlag != 1 && item.product.shopID == shopId">:¥{{item.product.price | NumFormat}}</text>
 								</view>
 								<view class="floor-tags" v-else>{{item.product.promotions.name}}</view>	
 							</template>
@@ -28,7 +29,7 @@
 							<template v-if="item.product.actStatus===1">
 								<view class="floor-tags" v-if="PromotionsFormat(item.product.promotions)">
 									{{item.product.promotions.name}}
-									<text v-if="hasLogin && item.product.price1TextFlag != 1">:¥{{item.product.retailPrice | NumFormat}}</text>
+									<text v-if="hasLogin && item.product.priceFlag != 1">:¥{{item.product.price | NumFormat}}</text>
 								</view>
 								<view class="floor-tags" v-else>{{item.product.promotions.name}}</view>	
 							</template>
@@ -41,42 +42,42 @@
 						<template v-if="item.product.productCategory == 1">
 							<template v-if="userIdentity == 3">
 								<template v-if="item.product.shopID == shopId">
-									<view class="title-none" v-if="item.product.price1TextFlag === '1'">
+									<view class="title-none" v-if="item.product.priceFlag === 1">
 										<text class="p big">¥未公开价格</text>
 									</view>
 									<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
 										<text class="p sm">¥</text>
-										<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+										<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.originalPrice : item.product.price ) | NumFormat}}</text>
 									</view>
 								</template>	
 								<template v-else>
 									<view class="no-price">
 										<view class="p-stars">
 											<text class="p-no">¥</text>
-											<uni-grader :grade="Number(item.product.price1Grade)" :margin="14"></uni-grader>
+											<uni-grader :grade="Number(item.product.priceGrade)" :margin="14"></uni-grader>
 										</view>
 									</view>	
 								</template>
 							</template>
 							<template v-else-if="userIdentity ===4">
-								<view class="title-none" v-if="item.product.price1TextFlag === '1'">
+								<view class="title-none" v-if="item.product.priceFlag === 1">
 									<text class="p big">¥未公开价格</text>
 								</view>
-								<view class="title-none"  v-if="item.product.price1TextFlag === '2'">
+								<view class="title-none"  v-if="item.product.priceFlag === 2">
 									<text class="p big">¥价格仅会员可见</text>
 								</view>
-								<view class="price tui-skeleton-rect" v-if="item.product.price1TextFlag === '0'" :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+								<view class="price tui-skeleton-rect" v-if="item.product.priceFlag === 0" :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
 									<text class="p sm">¥</text>
-									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.originalPrice : item.product.price ) | NumFormat}}</text>
 								</view>
 							</template>
 							<template v-else>
-								<view class="title-none" v-if="item.product.price1TextFlag === '1'">
+								<view class="title-none" v-if="item.product.priceFlag === 1">
 									<text class="p big">¥未公开价格</text>
 								</view>
 								<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
 									<text class="p sm">¥</text>
-									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.originalPrice : item.product.price ) | NumFormat}}</text>
 								</view>
 							</template>
 						</template>	
@@ -87,7 +88,7 @@
 							</view>
 							<view class="price tui-skeleton-rect" v-else>
 								<text class="p sm">¥</text>
-								<text class="p big">{{ item.product.retailPrice | NumFormat }}</text>
+								<text class="p big">{{ item.product.price | NumFormat }}</text>
 							</view>
 						</template>
 					</view>
@@ -95,7 +96,7 @@
 						<template v-if="item.product.productCategory == 1">
 							<view class="p-stars">
 								<text class="p-no">¥</text>
-								<uni-grader :grade="Number(item.product.price1Grade)" :margin="14"></uni-grader>
+								<uni-grader :grade="Number(item.product.priceGrade)" :margin="14"></uni-grader>
 							</view>
 						</template>
 						<template v-else>
@@ -154,11 +155,13 @@
 		},
 		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)
 				})
-				this.floorData = data
-				// console.log(this.floorData)
 			},
 			PromotionsFormat(promo){//促销活动类型数据处理
 				if(promo!=null){
@@ -241,19 +244,35 @@
 				height: 32rpx;
 				text-align: center;
 				box-sizing: border-box;
-			}
-			.floor-tags{
-				height: 28rpx;
-				border-radius: 6rpx;
-				background-color: #FFFFFF;
-				line-height: 28rpx;
-				color: $color-system;
-				text-align: center;
-				display: inline-block;
-				padding:0 16rpx;
-				font-size: $font-size-20;
-				border: 1px solid #E15616;
-				float: left;
+				.coupon-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: left;
+					margin-right: 12rpx;
+				}
+				.floor-tags{
+					height: 32rpx;
+					box-sizing: border-box;
+					border-radius: 8rpx;
+					background-color: #FFFFFF;
+					line-height: 28rpx;
+					color: $color-system;
+					text-align: center;
+					display: inline-block;
+					padding:0 16rpx;
+					font-size: $font-size-20;
+					border: 1px solid #E15616;
+					float: left;
+				}
 			}
 			.title-none{
 				font-size: $font-size-26;

+ 350 - 0
components/cm-module/pageFloorTemplate/templateG.vue

@@ -0,0 +1,350 @@
+<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>
+			<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">
+					<view class="floor-item-act">
+						<view class="coupon-tags" v-if="item.product.couponsLogo">优惠券</view>
+						<template v-if="userIdentity === 3">
+							<template v-if="item.product.actStatus===1">
+								<view class="floor-tags" v-if="PromotionsFormat(item.product.promotions)">
+									{{item.product.promotions.name}}
+									<text v-if="hasLogin && item.product.priceFlag != 1 && item.product.shopID == shopId">:¥{{item.product.price | NumFormat}}</text>
+								</view>
+								<view class="floor-tags" v-else>{{item.product.promotions.name}}</view>	
+							</template>
+							<template v-if="item.product.actStatus ===0  &&  item.product.ladderPriceFlag===1">
+								<view class="floor-tags">阶梯价格</view>	
+							</template>
+						</template>	
+						<template v-else>
+							<template v-if="item.product.actStatus===1">
+								<view class="floor-tags" v-if="PromotionsFormat(item.product.promotions)">
+									{{item.product.promotions.name}}
+									<text v-if="hasLogin && item.product.priceFlag != 1">:¥{{item.product.price | NumFormat}}</text>
+								</view>
+								<view class="floor-tags" v-else>{{item.product.promotions.name}}</view>	
+							</template>
+							<template v-if="item.product.actStatus ===0  &&  item.product.ladderPriceFlag===1">
+								<view class="floor-tags">阶梯价格</view>	
+							</template>
+						</template>
+					</view>	
+					<view v-if="hasLogin">
+						<template v-if="item.product.productCategory == 1">
+							<template v-if="userIdentity == 3">
+								<template v-if="item.product.shopID == shopId">
+									<view class="title-none" v-if="item.product.priceFlag === 1">
+										<text class="p big">¥未公开价格</text>
+									</view>
+									<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+										<text class="p sm">¥</text>
+										<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.originalPrice : item.product.price ) | NumFormat}}</text>
+									</view>
+								</template>	
+								<template v-else>
+									<view class="no-price">
+										<view class="p-stars">
+											<text class="p-no">¥</text>
+											<uni-grader :grade="Number(item.product.priceGrade)" :margin="14"></uni-grader>
+										</view>
+									</view>	
+								</template>
+							</template>
+							<template v-else-if="userIdentity ===4">
+								<view class="title-none" v-if="item.product.priceFlag === 1">
+									<text class="p big">¥未公开价格</text>
+								</view>
+								<view class="title-none"  v-if="item.product.priceFlag === 2">
+									<text class="p big">¥价格仅会员可见</text>
+								</view>
+								<view class="price tui-skeleton-rect" v-if="item.product.priceFlag === 0" :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+									<text class="p sm">¥</text>
+									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.originalPrice : item.product.price ) | NumFormat}}</text>
+								</view>
+							</template>
+							<template v-else>
+								<view class="title-none" v-if="item.product.priceFlag === 1">
+									<text class="p big">¥未公开价格</text>
+								</view>
+								<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+									<text class="p sm">¥</text>
+									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.originalPrice : item.product.price ) | NumFormat}}</text>
+								</view>
+							</template>
+						</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'
+	export default{
+		name:"templateG",
+		components:{
+			uniGrader
+		},
+		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;
+				.coupon-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: left;
+					margin-right: 12rpx;
+				}
+				.floor-tags{
+					height: 32rpx;
+					box-sizing: border-box;
+					border-radius: 8rpx;
+					background-color: #FFFFFF;
+					line-height: 28rpx;
+					color: $color-system;
+					text-align: center;
+					display: inline-block;
+					padding:0 16rpx;
+					font-size: $font-size-20;
+					border: 1px solid #E15616;
+					float: left;
+				}
+			}
+			.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>

+ 506 - 0
components/cm-module/pageFloorTemplate/templateI.vue

@@ -0,0 +1,506 @@
+<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>
+			<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">
+					<view class="floor-item-act">
+						<view class="coupon-tags" v-if="item.product.couponsLogo">优惠券</view>
+						<template v-if="userIdentity === 3">
+							<template v-if="item.product.actStatus === 1">
+								<view
+									class="floor-tags"
+									v-if="PromotionsFormat(item.product.promotions)"
+								>
+									{{ item.product.promotions.name }}
+									<text
+										v-if="
+											hasLogin &&
+												item.product.priceFlag != 1 &&
+												item.product.shopID == shopId
+										"
+										>:¥{{ item.product.price | NumFormat }}</text
+									>
+								</view>
+								<view class="floor-tags" v-else>{{
+									item.product.promotions.name
+								}}</view>
+							</template>
+							<template
+								v-if="
+									item.product.actStatus === 0 &&
+										item.product.ladderPriceFlag === 1
+								"
+							>
+								<view class="floor-tags">阶梯价格</view>
+							</template>
+						</template>
+						<template v-else>
+							<template v-if="item.product.actStatus === 1">
+								<view
+									class="floor-tags"
+									v-if="PromotionsFormat(item.product.promotions)"
+								>
+									{{ item.product.promotions.name }}
+									<text v-if="hasLogin && item.product.priceFlag != 1"
+										>:¥{{ item.product.price | NumFormat }}</text
+									>
+								</view>
+								<view class="floor-tags" v-else>{{
+									item.product.promotions.name
+								}}</view>
+							</template>
+							<template
+								v-if="
+									item.product.actStatus === 0 &&
+										item.product.ladderPriceFlag === 1
+								"
+							>
+								<view class="floor-tags">阶梯价格</view>
+							</template>
+						</template>
+					</view>
+					<view v-if="hasLogin">
+						<template v-if="item.product.productCategory == 1">
+							<template v-if="userIdentity == 3">
+								<template v-if="item.product.shopID == shopId">
+									<view
+										class="title-none"
+										v-if="item.product.priceFlag === 1"
+									>
+										<text class="p big">¥未公开价格</text>
+									</view>
+									<view
+										class="price tui-skeleton-rect"
+										v-else
+										:class="
+											PromotionsFormat(item.product.promotions) ? 'none' : ''
+										"
+									>
+										<text class="p sm">¥</text>
+										<text class="p big">{{
+											(PromotionsFormat(item.product.promotions)
+												? item.product.originalPrice
+												: item.product.price) | NumFormat
+										}}</text>
+									</view>
+								</template>
+								<template v-else>
+									<view class="no-price">
+										<view class="p-stars">
+											<text class="p-no">¥</text>
+											<uni-grader
+												:grade="Number(item.product.priceGrade)"
+												:margin="14"
+											></uni-grader>
+										</view>
+									</view>
+								</template>
+							</template>
+							<template v-else-if="userIdentity === 4">
+								<view class="title-none" v-if="item.product.priceFlag === 1">
+									<text class="p big">¥未公开价格</text>
+								</view>
+								<view class="title-none" v-if="item.product.priceFlag === 2">
+									<text class="p big">¥价格仅会员可见</text>
+								</view>
+								<view
+									class="price tui-skeleton-rect"
+									v-if="item.product.priceFlag === 0"
+									:class="PromotionsFormat(item.product.promotions) ? 'none' : ''"
+								>
+									<text class="p sm">¥</text>
+									<text class="p big">{{
+										(PromotionsFormat(item.product.promotions)
+											? item.product.originalPrice
+											: item.product.price) | NumFormat
+									}}</text>
+								</view>
+							</template>
+							<template v-else>
+								<view class="title-none" v-if="item.product.priceFlag === 1">
+									<text class="p big">¥未公开价格</text>
+								</view>
+								<view
+									class="price tui-skeleton-rect"
+									v-else
+									:class="PromotionsFormat(item.product.promotions) ? 'none' : ''"
+								>
+									<text class="p sm">¥</text>
+									<text class="p big">{{
+										(PromotionsFormat(item.product.promotions)
+											? item.product.originalPrice
+											: item.product.price) | NumFormat
+									}}</text>
+								</view>
+							</template>
+						</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'
+export default {
+	name: 'templateD',
+	components: {
+		uniGrader
+	},
+	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;
+			.coupon-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: left;
+				margin-right: 12rpx;
+			}
+			.floor-tags{
+				height: 32rpx;
+				box-sizing: border-box;
+				border-radius: 8rpx;
+				background-color: #FFFFFF;
+				line-height: 28rpx;
+				color: $color-system;
+				text-align: center;
+				display: inline-block;
+				padding:0 16rpx;
+				font-size: $font-size-20;
+				border: 1px solid #E15616;
+				float: left;
+			}
+		}
+		.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>

+ 522 - 0
components/cm-module/pageFloorTemplate/templateJ.vue

@@ -0,0 +1,522 @@
+<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>
+			<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">
+					<view class="floor-item-act">
+						<view class="coupon-tags" v-if="item.product.couponsLogo">优惠券</view>
+						<template v-if="userIdentity === 3">
+							<template v-if="item.product.actStatus === 1">
+								<view
+									class="floor-tags"
+									v-if="PromotionsFormat(item.product.promotions)"
+								>
+									{{ item.product.promotions.name }}
+									<text
+										v-if="
+											hasLogin &&
+												item.product.priceFlag != 1 &&
+												item.product.shopID == shopId
+										"
+										>:¥{{ item.product.price | NumFormat }}</text
+									>
+								</view>
+								<view class="floor-tags" v-else>{{
+									item.product.promotions.name
+								}}</view>
+							</template>
+							<template
+								v-if="
+									item.product.actStatus === 0 &&
+										item.product.ladderPriceFlag === 1
+								"
+							>
+								<view class="floor-tags">阶梯价格</view>
+							</template>
+						</template>
+						<template v-else>
+							<template v-if="item.product.actStatus === 1">
+								<view
+									class="floor-tags"
+									v-if="PromotionsFormat(item.product.promotions)"
+								>
+									{{ item.product.promotions.name }}
+									<text v-if="hasLogin && item.product.priceFlag != 1"
+										>:¥{{ item.product.price | NumFormat }}</text
+									>
+								</view>
+								<view class="floor-tags" v-else>{{
+									item.product.promotions.name
+								}}</view>
+							</template>
+							<template
+								v-if="
+									item.product.actStatus === 0 &&
+										item.product.ladderPriceFlag === 1
+								"
+							>
+								<view class="floor-tags">阶梯价格</view>
+							</template>
+						</template>
+					</view>
+					<view v-if="hasLogin">
+						<template v-if="item.product.productCategory == 1">
+							<template v-if="userIdentity == 3">
+								<template v-if="item.product.shopID == shopId">
+									<view
+										class="title-none"
+										v-if="item.product.priceFlag === 1"
+									>
+										<text class="p big">¥未公开价格</text>
+									</view>
+									<view
+										class="price tui-skeleton-rect"
+										v-else
+										:class="
+											PromotionsFormat(item.product.promotions) ? 'none' : ''
+										"
+									>
+										<text class="p sm">¥</text>
+										<text class="p big">{{
+											(PromotionsFormat(item.product.promotions)
+												? item.product.originalPrice
+												: item.product.price) | NumFormat
+										}}</text>
+									</view>
+								</template>
+								<template v-else>
+									<view class="no-price">
+										<view class="p-stars">
+											<text class="p-no">¥</text>
+											<uni-grader
+												:grade="Number(item.product.priceGrade)"
+												:margin="14"
+											></uni-grader>
+										</view>
+									</view>
+								</template>
+							</template>
+							<template v-else-if="userIdentity === 4">
+								<view class="title-none" v-if="item.product.priceFlag === 1">
+									<text class="p big">¥未公开价格</text>
+								</view>
+								<view class="title-none" v-if="item.product.priceFlag === 2">
+									<text class="p big">¥价格仅会员可见</text>
+								</view>
+								<view
+									class="price tui-skeleton-rect"
+									v-if="item.product.priceFlag === 0"
+									:class="PromotionsFormat(item.product.promotions) ? 'none' : ''"
+								>
+									<text class="p sm">¥</text>
+									<text class="p big">{{
+										(PromotionsFormat(item.product.promotions)
+											? item.product.originalPrice
+											: item.product.price) | NumFormat
+									}}</text>
+								</view>
+							</template>
+							<template v-else>
+								<view class="title-none" v-if="item.product.priceFlag === 1">
+									<text class="p big">¥未公开价格</text>
+								</view>
+								<view
+									class="price tui-skeleton-rect"
+									v-else
+									:class="PromotionsFormat(item.product.promotions) ? 'none' : ''"
+								>
+									<text class="p sm">¥</text>
+									<text class="p big">{{
+										(PromotionsFormat(item.product.promotions)
+											? item.product.originalPrice
+											: item.product.price) | NumFormat
+									}}</text>
+								</view>
+							</template>
+						</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'
+export default {
+	name: 'templateD',
+	components: {
+		uniGrader
+	},
+	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;
+			.coupon-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: left;
+				margin-right: 12rpx;
+			}
+			.floor-tags{
+				height: 32rpx;
+				box-sizing: border-box;
+				border-radius: 8rpx;
+				background-color: #FFFFFF;
+				line-height: 28rpx;
+				color: $color-system;
+				text-align: center;
+				display: inline-block;
+				padding:0 16rpx;
+				font-size: $font-size-20;
+				border: 1px solid #E15616;
+				float: left;
+			}
+		}
+		.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>

+ 575 - 0
components/cm-module/pageFloorTemplate/templateK.vue

@@ -0,0 +1,575 @@
+<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>
+			<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">
+					<view class="floor-item-act">
+						<view class="coupon-tags" v-if="item.product.couponsLogo">优惠券</view>
+						<template v-if="userIdentity === 3">
+							<template v-if="item.product.actStatus === 1">
+								<view
+									class="floor-tags"
+									v-if="PromotionsFormat(item.product.promotions)"
+								>
+									{{ item.product.promotions.name }}
+									<text
+										v-if="
+											hasLogin &&
+												item.product.priceFlag != 1 &&
+												item.product.shopID == shopId
+										"
+										>:¥{{ item.product.price | NumFormat }}</text
+									>
+								</view>
+								<view class="floor-tags" v-else>{{
+									item.product.promotions.name
+								}}</view>
+							</template>
+							<template
+								v-if="
+									item.product.actStatus === 0 &&
+										item.product.ladderPriceFlag === 1
+								"
+							>
+								<view class="floor-tags">阶梯价格</view>
+							</template>
+						</template>
+						<template v-else>
+							<template v-if="item.product.actStatus === 1">
+								<view
+									class="floor-tags"
+									v-if="PromotionsFormat(item.product.promotions)"
+								>
+									{{ item.product.promotions.name }}
+									<text v-if="hasLogin && item.product.priceFlag != 1"
+										>:¥{{ item.product.price | NumFormat }}</text
+									>
+								</view>
+								<view class="floor-tags" v-else>{{
+									item.product.promotions.name
+								}}</view>
+							</template>
+							<template
+								v-if="
+									item.product.actStatus === 0 &&
+										item.product.ladderPriceFlag === 1
+								"
+							>
+								<view class="floor-tags">阶梯价格</view>
+							</template>
+						</template>
+					</view>
+					<view v-if="hasLogin">
+						<template v-if="item.product.productCategory == 1">
+							<template v-if="userIdentity == 3">
+								<template v-if="item.product.shopID == shopId">
+									<view
+										class="title-none"
+										v-if="item.product.priceFlag === 1"
+									>
+										<text class="p big">¥未公开价格</text>
+									</view>
+									<view
+										class="price tui-skeleton-rect"
+										v-else
+										:class="
+											PromotionsFormat(item.product.promotions) ? 'none' : ''
+										"
+									>
+										<text class="p sm">¥</text>
+										<text class="p big">{{
+											(PromotionsFormat(item.product.promotions)
+												? item.product.originalPrice
+												: item.product.price) | NumFormat
+										}}</text>
+									</view>
+								</template>
+								<template v-else>
+									<view class="no-price">
+										<view class="p-stars">
+											<text class="p-no">¥</text>
+											<uni-grader
+												:grade="Number(item.product.priceGrade)"
+												:margin="14"
+											></uni-grader>
+										</view>
+									</view>
+								</template>
+							</template>
+							<template v-else-if="userIdentity === 4">
+								<view class="title-none" v-if="item.product.priceFlag === 1">
+									<text class="p big">¥未公开价格</text>
+								</view>
+								<view class="title-none" v-if="item.product.priceFlag === 2">
+									<text class="p big">¥价格仅会员可见</text>
+								</view>
+								<view
+									class="price tui-skeleton-rect"
+									v-if="item.product.priceFlag === 0"
+									:class="PromotionsFormat(item.product.promotions) ? 'none' : ''"
+								>
+									<text class="p sm">¥</text>
+									<text class="p big">{{
+										(PromotionsFormat(item.product.promotions)
+											? item.product.originalPrice
+											: item.product.price) | NumFormat
+									}}</text>
+								</view>
+							</template>
+							<template v-else>
+								<view class="title-none" v-if="item.product.priceFlag === 1">
+									<text class="p big">¥未公开价格</text>
+								</view>
+								<view
+									class="price tui-skeleton-rect"
+									v-else
+									:class="PromotionsFormat(item.product.promotions) ? 'none' : ''"
+								>
+									<text class="p sm">¥</text>
+									<text class="p big">{{
+										(PromotionsFormat(item.product.promotions)
+											? item.product.originalPrice
+											: item.product.price) | NumFormat
+									}}</text>
+								</view>
+							</template>
+						</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'
+export default {
+	name: 'templateD',
+	components: {
+		uniGrader
+	},
+	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;
+			.coupon-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: left;
+				margin-right: 12rpx;
+			}
+			.floor-tags{
+				height: 32rpx;
+				box-sizing: border-box;
+				border-radius: 8rpx;
+				background-color: #FFFFFF;
+				line-height: 28rpx;
+				color: $color-system;
+				text-align: center;
+				display: inline-block;
+				padding:0 16rpx;
+				font-size: $font-size-20;
+				border: 1px solid #E15616;
+				float: left;
+			}
+		}
+		.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>

+ 52 - 33
components/cm-module/pageTemplate/templateA.vue

@@ -23,12 +23,13 @@
 					<text class="mclap" :class="item.product.beautyActFlag == '1' ? 'indent' : ''">{{item.name}} </text>
 				</view>
 				<view class="floor-item-price" v-if="item.listType == 1">
-					<view class="floor-item-act" >
+					<view class="floor-item-act">
+						<view class="coupon-tags" v-if="item.product.couponsLogo">优惠券</view>
 						<template v-if="userIdentity === 3">
 							<template v-if="item.product.actStatus===1">
 								<view class="floor-tags" v-if="PromotionsFormat(item.product.promotions)">
 									{{item.product.promotions.name}}
-									<text v-if="hasLogin && item.product.price1TextFlag != 1 && item.product.shopID == shopId">:¥{{item.product.retailPrice | NumFormat}}</text>
+									<text v-if="hasLogin && item.product.priceFlag != 1 && item.product.shopID == shopId">:¥{{item.product.price | NumFormat}}</text>
 								</view>
 								<view class="floor-tags" v-else>{{item.product.promotions.name}}</view>	
 							</template>
@@ -40,7 +41,7 @@
 							<template v-if="item.product.actStatus===1">
 								<view class="floor-tags" v-if="PromotionsFormat(item.product.promotions)">
 									{{item.product.promotions.name}}
-									<text v-if="hasLogin && item.product.price1TextFlag != 1">:¥{{item.product.retailPrice | NumFormat}}</text>
+									<text v-if="hasLogin && item.product.priceFlag != 1">:¥{{item.product.price | NumFormat}}</text>
 								</view>
 								<view class="floor-tags" v-else>{{item.product.promotions.name}}</view>	
 							</template>
@@ -53,42 +54,42 @@
 						<template v-if="item.product.productCategory == 1">
 							<template v-if="userIdentity == 3">
 								<template v-if="item.product.shopID == shopId">
-									<view class="title-none" v-if="item.product.price1TextFlag === '1'">
+									<view class="title-none" v-if="item.product.priceFlag === 1">
 										<text class="p big">¥未公开价格</text>
 									</view>
 									<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
 										<text class="p sm">¥</text>
-										<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+										<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.originalPrice : item.product.price ) | NumFormat}}</text>
 									</view>
 								</template>	
 								<template v-else>
 									<view class="no-price">
 										<view class="p-stars">
 											<text class="p-no">¥</text>
-											<uni-grader :grade="Number(item.product.price1Grade)" :margin="14"></uni-grader>
+											<uni-grader :grade="Number(item.product.priceGrade)" :margin="14"></uni-grader>
 										</view>
 									</view>	
 								</template>
 							</template>
 							<template v-else-if="userIdentity ===4">
-								<view class="title-none" v-if="item.product.price1TextFlag === '1'">
+								<view class="title-none" v-if="item.product.priceFlag === 1">
 									<text class="p big">¥未公开价格</text>
 								</view>
-								<view class="title-none"  v-if="item.product.price1TextFlag === '2'">
+								<view class="title-none"  v-if="item.product.priceFlag === 2">
 									<text class="p big">¥价格仅会员可见</text>
 								</view>
-								<view class="price tui-skeleton-rect" v-if="item.product.price1TextFlag === '0'" :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+								<view class="price tui-skeleton-rect" v-if="item.product.priceFlag === 0" :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
 									<text class="p sm">¥</text>
-									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.originalPrice : item.product.price ) | NumFormat}}</text>
 								</view>
 							</template>
 							<template v-else>
-								<view class="title-none" v-if="item.product.price1TextFlag === '1'">
+								<view class="title-none" v-if="item.product.priceFlag === 1">
 									<text class="p big">¥未公开价格</text>
 								</view>
 								<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
 									<text class="p sm">¥</text>
-									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.originalPrice : item.product.price ) | NumFormat}}</text>
 								</view>
 							</template>
 						</template>	
@@ -99,7 +100,7 @@
 							</view>
 							<view class="price tui-skeleton-rect" v-else>
 								<text class="p sm">¥</text>
-								<text class="p big">{{ item.product.retailPrice | NumFormat }}</text>
+								<text class="p big">{{ item.product.price | NumFormat }}</text>
 							</view>
 						</template>
 					</view>
@@ -107,7 +108,7 @@
 						<template v-if="item.product.productCategory == 1">
 							<view class="p-stars">
 								<text class="p-no">¥</text>
-								<uni-grader :grade="Number(item.product.price1Grade)" :margin="14"></uni-grader>
+								<uni-grader :grade="Number(item.product.priceGrade)" :margin="14"></uni-grader>
 							</view>
 						</template>
 						<template v-else>
@@ -149,12 +150,12 @@
 				return Number(text).toFixed(2);			
 			},		
 		},
-		created(){
-			this.initData(this.pageData)
-		},
 		computed: {
 			...mapState(['hasLogin','userInfo','isActivity'])
 		},
+		created(){
+			this.initData(this.pageData)
+		},
 		watch: {
 			pageData: {
 				handler: function (el) {//监听对象的变换使用 function,箭头函数容易出现this指向不正确
@@ -166,11 +167,12 @@
 		},
 		methods:{
 			initData(data){
+				this.floorData = data
 				this.$api.getStorage().then((resolve) =>{
 					this.shopId = resolve.shopId ? resolve.shopId : 0
+				}).catch(err => {
+					console.log('err',err)
 				})
-				this.floorData = data
-				// console.log(this.floorData)
 			},
 			PromotionsFormat(promo){//促销活动类型数据处理
 				if(promo!=null){
@@ -187,7 +189,8 @@
 			},
 			BannerNavigateTo(linkType,linkId,linkHref,keyword) {//跳转
 				this.$api.BannerNavigateTo(linkType,linkId,linkHref,keyword)
-			}
+			},
+			
 		}
 	}
 </script>
@@ -256,19 +259,35 @@
 				height: 32rpx;
 				text-align: center;
 				box-sizing: border-box;
-			}
-			.floor-tags{
-				height: 28rpx;
-				border-radius: 6rpx;
-				background-color: #FFFFFF;
-				line-height: 28rpx;
-				color: $color-system;
-				text-align: center;
-				display: inline-block;
-				padding:0 16rpx;
-				font-size: $font-size-20;
-				border: 1px solid #E15616;
-				float: left;
+				.coupon-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: left;
+					margin-right: 12rpx;
+				}
+				.floor-tags{
+					height: 32rpx;
+					box-sizing: border-box;
+					border-radius: 8rpx;
+					background-color: #FFFFFF;
+					line-height: 28rpx;
+					color: $color-system;
+					text-align: center;
+					display: inline-block;
+					padding:0 16rpx;
+					font-size: $font-size-20;
+					border: 1px solid #E15616;
+					float: left;
+				}
 			}
 			.title-none{
 				font-size: $font-size-26;

+ 47 - 28
components/cm-module/pageTemplate/templateB.vue

@@ -36,11 +36,12 @@
 				</view>
 				<view class="floor-item-price" v-if="item.listType == 1">
 					<view class="floor-item-act">
+						<view class="coupon-tags" v-if="item.product.couponsLogo">优惠券</view>
 						<template v-if="userIdentity === 3">
 							<template v-if="item.product.actStatus===1">
 								<view class="floor-tags" v-if="PromotionsFormat(item.product.promotions)">
 									{{item.product.promotions.name}}
-									<text v-if="hasLogin && item.product.price1TextFlag != 1 && item.product.shopID == shopId">:¥{{item.product.retailPrice | NumFormat}}</text>
+									<text v-if="hasLogin && item.product.priceFlag != 1 && item.product.shopID == shopId">:¥{{item.product.price | NumFormat}}</text>
 								</view>
 								<view class="floor-tags" v-else>{{item.product.promotions.name}}</view>	
 							</template>
@@ -52,7 +53,7 @@
 							<template v-if="item.product.actStatus===1">
 								<view class="floor-tags" v-if="PromotionsFormat(item.product.promotions)">
 									{{item.product.promotions.name}}
-									<text v-if="hasLogin && item.product.price1TextFlag != 1">:¥{{item.product.retailPrice | NumFormat}}</text>
+									<text v-if="hasLogin && item.product.priceFlag != 1">:¥{{item.product.price | NumFormat}}</text>
 								</view>
 								<view class="floor-tags" v-else>{{item.product.promotions.name}}</view>	
 							</template>
@@ -65,42 +66,42 @@
 						<template v-if="item.product.productCategory == 1">
 							<template v-if="userIdentity == 3">
 								<template v-if="item.product.shopID == shopId">
-									<view class="title-none" v-if="item.product.price1TextFlag === '1'">
+									<view class="title-none" v-if="item.product.priceFlag === 1">
 										<text class="p big">¥未公开价格</text>
 									</view>
 									<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
 										<text class="p sm">¥</text>
-										<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+										<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.originalPrice : item.product.price ) | NumFormat}}</text>
 									</view>
 								</template>	
 								<template v-else>
 									<view class="no-price">
 										<view class="p-stars">
 											<text class="p-no">¥</text>
-											<uni-grader :grade="Number(item.product.price1Grade)" :margin="14"></uni-grader>
+											<uni-grader :grade="Number(item.product.priceGrade)" :margin="14"></uni-grader>
 										</view>
 									</view>	
 								</template>
 							</template>
 							<template v-else-if="userIdentity ===4">
-								<view class="title-none" v-if="item.product.price1TextFlag === '1'">
+								<view class="title-none" v-if="item.product.priceFlag === 1">
 									<text class="p big">¥未公开价格</text>
 								</view>
-								<view class="title-none"  v-if="item.product.price1TextFlag === '2'">
+								<view class="title-none"  v-if="item.product.priceFlag === 2">
 									<text class="p big">¥价格仅会员可见</text>
 								</view>
-								<view class="price tui-skeleton-rect" v-if="item.product.price1TextFlag === '0'" :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+								<view class="price tui-skeleton-rect" v-if="item.product.priceFlag === 0" :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
 									<text class="p sm">¥</text>
-									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.originalPrice : item.product.price ) | NumFormat}}</text>
 								</view>
 							</template>
 							<template v-else>
-								<view class="title-none" v-if="item.product.price1TextFlag === '1'">
+								<view class="title-none" v-if="item.product.priceFlag === 1">
 									<text class="p big">¥未公开价格</text>
 								</view>
 								<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
 									<text class="p sm">¥</text>
-									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.originalPrice : item.product.price ) | NumFormat}}</text>
 								</view>
 							</template>
 						</template>	
@@ -111,7 +112,7 @@
 							</view>
 							<view class="price tui-skeleton-rect" v-else>
 								<text class="p sm">¥</text>
-								<text class="p big">{{ item.product.retailPrice | NumFormat }}</text>
+								<text class="p big">{{ item.product.price | NumFormat }}</text>
 							</view>
 						</template>
 					</view>
@@ -119,7 +120,7 @@
 						<template v-if="item.product.productCategory == 1">
 							<view class="p-stars">
 								<text class="p-no">¥</text>
-								<uni-grader :grade="Number(item.product.price1Grade)" :margin="14"></uni-grader>
+								<uni-grader :grade="Number(item.product.priceGrade)" :margin="14"></uni-grader>
 							</view>
 						</template>
 						<template v-else>
@@ -178,11 +179,13 @@
 		},
 		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)
 				})
-				this.floorData = data
-				// console.log(this.floorData)
 			},
 			PromotionsFormat(promo){//促销活动类型数据处理
 				if(promo!=null){
@@ -268,19 +271,35 @@
 				height: 32rpx;
 				text-align: center;
 				box-sizing: border-box;
-			}
-			.floor-tags{
-				height: 28rpx;
-				border-radius: 6rpx;
-				background-color: #FFFFFF;
-				line-height: 28rpx;
-				color: $color-system;
-				text-align: center;
-				display: inline-block;
-				padding:0 16rpx;
-				font-size: $font-size-20;
-				border: 1px solid #E15616;
-				float: left;
+				.coupon-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: left;
+					margin-right: 12rpx;
+				}
+				.floor-tags{
+					height: 32rpx;
+					box-sizing: border-box;
+					border-radius: 8rpx;
+					background-color: #FFFFFF;
+					line-height: 28rpx;
+					color: $color-system;
+					text-align: center;
+					display: inline-block;
+					padding:0 16rpx;
+					font-size: $font-size-20;
+					border: 1px solid #E15616;
+					float: left;
+				}
 			}
 			.title-none{
 				font-size: $font-size-26;

+ 47 - 28
components/cm-module/pageTemplate/templateC.vue

@@ -36,11 +36,12 @@
 				</view>
 				<view class="floor-item-price" v-if="item.listType == 1">
 					<view class="floor-item-act">
+						<view class="coupon-tags" v-if="item.product.couponsLogo">优惠券</view>
 						<template v-if="userIdentity === 3">
 							<template v-if="item.product.actStatus===1">
 								<view class="floor-tags" v-if="PromotionsFormat(item.product.promotions)">
 									{{item.product.promotions.name}}
-									<text v-if="hasLogin && item.product.price1TextFlag != 1 && item.product.shopID == shopId">:¥{{item.product.retailPrice | NumFormat}}</text>
+									<text v-if="hasLogin && item.product.priceFlag != 1 && item.product.shopID == shopId">:¥{{item.product.price | NumFormat}}</text>
 								</view>
 								<view class="floor-tags" v-else>{{item.product.promotions.name}}</view>	
 							</template>
@@ -52,7 +53,7 @@
 							<template v-if="item.product.actStatus===1">
 								<view class="floor-tags" v-if="PromotionsFormat(item.product.promotions)">
 									{{item.product.promotions.name}}
-									<text v-if="hasLogin && item.product.price1TextFlag != 1">:¥{{item.product.retailPrice | NumFormat}}</text>
+									<text v-if="hasLogin && item.product.priceFlag != 1">:¥{{item.product.price | NumFormat}}</text>
 								</view>
 								<view class="floor-tags" v-else>{{item.product.promotions.name}}</view>	
 							</template>
@@ -65,42 +66,42 @@
 						<template v-if="item.product.productCategory == 1">
 							<template v-if="userIdentity == 3">
 								<template v-if="item.product.shopID == shopId">
-									<view class="title-none" v-if="item.product.price1TextFlag === '1'">
+									<view class="title-none" v-if="item.product.priceFlag === 1">
 										<text class="p big">¥未公开价格</text>
 									</view>
 									<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
 										<text class="p sm">¥</text>
-										<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+										<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.originalPrice : item.product.price ) | NumFormat}}</text>
 									</view>
 								</template>	
 								<template v-else>
 									<view class="no-price">
 										<view class="p-stars">
 											<text class="p-no">¥</text>
-											<uni-grader :grade="Number(item.product.price1Grade)" :margin="14"></uni-grader>
+											<uni-grader :grade="Number(item.product.priceGrade)" :margin="14"></uni-grader>
 										</view>
 									</view>	
 								</template>
 							</template>
 							<template v-else-if="userIdentity ===4">
-								<view class="title-none" v-if="item.product.price1TextFlag === '1'">
+								<view class="title-none" v-if="item.product.priceFlag === 1">
 									<text class="p big">¥未公开价格</text>
 								</view>
-								<view class="title-none"  v-if="item.product.price1TextFlag === '2'">
+								<view class="title-none"  v-if="item.product.priceFlag === 2">
 									<text class="p big">¥价格仅会员可见</text>
 								</view>
-								<view class="price tui-skeleton-rect" v-if="item.product.price1TextFlag === '0'" :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+								<view class="price tui-skeleton-rect" v-if="item.product.priceFlag === 0" :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
 									<text class="p sm">¥</text>
-									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.originalPrice : item.product.price ) | NumFormat}}</text>
 								</view>
 							</template>
 							<template v-else>
-								<view class="title-none" v-if="item.product.price1TextFlag === '1'">
+								<view class="title-none" v-if="item.product.priceFlag === 1">
 									<text class="p big">¥未公开价格</text>
 								</view>
 								<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
 									<text class="p sm">¥</text>
-									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.originalPrice : item.product.price ) | NumFormat}}</text>
 								</view>
 							</template>
 						</template>	
@@ -111,7 +112,7 @@
 							</view>
 							<view class="price tui-skeleton-rect" v-else>
 								<text class="p sm">¥</text>
-								<text class="p big">{{ item.product.retailPrice | NumFormat }}</text>
+								<text class="p big">{{ item.product.price | NumFormat }}</text>
 							</view>
 						</template>
 					</view>
@@ -119,7 +120,7 @@
 						<template v-if="item.product.productCategory == 1">
 							<view class="p-stars">
 								<text class="p-no">¥</text>
-								<uni-grader :grade="Number(item.product.price1Grade)" :margin="14"></uni-grader>
+								<uni-grader :grade="Number(item.product.priceGrade)" :margin="14"></uni-grader>
 							</view>
 						</template>
 						<template v-else>
@@ -178,11 +179,13 @@
 		},
 		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)
 				})
-				this.floorData = data
-				// console.log(this.floorData)
 			},
 			PromotionsFormat(promo){//促销活动类型数据处理
 				if(promo!=null){
@@ -301,19 +304,35 @@
 				height: 32rpx;
 				text-align: center;
 				box-sizing: border-box;
-			}
-			.floor-tags{
-				height: 28rpx;
-				border-radius: 6rpx;
-				background-color: #FFFFFF;
-				line-height: 28rpx;
-				color: $color-system;
-				text-align: center;
-				display: inline-block;
-				padding:0 16rpx;
-				font-size: $font-size-20;
-				border: 1px solid #E15616;
-				float: left;
+				.coupon-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: left;
+					margin-right: 12rpx;
+				}
+				.floor-tags{
+					height: 32rpx;
+					box-sizing: border-box;
+					border-radius: 8rpx;
+					background-color: #FFFFFF;
+					line-height: 28rpx;
+					color: $color-system;
+					text-align: center;
+					display: inline-block;
+					padding:0 16rpx;
+					font-size: $font-size-20;
+					border: 1px solid #E15616;
+					float: left;
+				}
 			}
 			.title-none{
 				font-size: $font-size-26;

+ 47 - 28
components/cm-module/pageTemplate/templateD.vue

@@ -48,11 +48,12 @@
 				</view>
 				<view class="floor-item-price" v-if="item.listType == 1">
 					<view class="floor-item-act">
+						<view class="coupon-tags" v-if="item.product.couponsLogo">优惠券</view>
 						<template v-if="userIdentity === 3">
 							<template v-if="item.product.actStatus===1">
 								<view class="floor-tags" v-if="PromotionsFormat(item.product.promotions)">
 									{{item.product.promotions.name}}
-									<text v-if="hasLogin && item.product.price1TextFlag != 1 && item.product.shopID == shopId">:¥{{item.product.retailPrice | NumFormat}}</text>
+									<text v-if="hasLogin && item.product.priceFlag != 1 && item.product.shopID == shopId">:¥{{item.product.price | NumFormat}}</text>
 								</view>
 								<view class="floor-tags" v-else>{{item.product.promotions.name}}</view>	
 							</template>
@@ -64,7 +65,7 @@
 							<template v-if="item.product.actStatus===1">
 								<view class="floor-tags" v-if="PromotionsFormat(item.product.promotions)">
 									{{item.product.promotions.name}}
-									<text v-if="hasLogin && item.product.price1TextFlag != 1">:¥{{item.product.retailPrice | NumFormat}}</text>
+									<text v-if="hasLogin && item.product.priceFlag != 1">:¥{{item.product.price | NumFormat}}</text>
 								</view>
 								<view class="floor-tags" v-else>{{item.product.promotions.name}}</view>	
 							</template>
@@ -77,42 +78,42 @@
 						<template v-if="item.product.productCategory == 1">
 							<template v-if="userIdentity == 3">
 								<template v-if="item.product.shopID == shopId">
-									<view class="title-none" v-if="item.product.price1TextFlag === '1'">
+									<view class="title-none" v-if="item.product.priceFlag === 1">
 										<text class="p big">¥未公开价格</text>
 									</view>
 									<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
 										<text class="p sm">¥</text>
-										<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+										<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.originalPrice : item.product.price ) | NumFormat}}</text>
 									</view>
 								</template>	
 								<template v-else>
 									<view class="no-price">
 										<view class="p-stars">
 											<text class="p-no">¥</text>
-											<uni-grader :grade="Number(item.product.price1Grade)" :margin="14"></uni-grader>
+											<uni-grader :grade="Number(item.product.priceGrade)" :margin="14"></uni-grader>
 										</view>
 									</view>	
 								</template>
 							</template>
 							<template v-else-if="userIdentity ===4">
-								<view class="title-none" v-if="item.product.price1TextFlag === '1'">
+								<view class="title-none" v-if="item.product.priceFlag === 1">
 									<text class="p big">¥未公开价格</text>
 								</view>
-								<view class="title-none"  v-if="item.product.price1TextFlag === '2'">
+								<view class="title-none"  v-if="item.product.priceFlag === 2">
 									<text class="p big">¥价格仅会员可见</text>
 								</view>
-								<view class="price tui-skeleton-rect" v-if="item.product.price1TextFlag === '0'" :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+								<view class="price tui-skeleton-rect" v-if="item.product.priceFlag === 0" :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
 									<text class="p sm">¥</text>
-									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.originalPrice : item.product.price ) | NumFormat}}</text>
 								</view>
 							</template>
 							<template v-else>
-								<view class="title-none" v-if="item.product.price1TextFlag === '1'">
+								<view class="title-none" v-if="item.product.priceFlag === 1">
 									<text class="p big">¥未公开价格</text>
 								</view>
 								<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
 									<text class="p sm">¥</text>
-									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.originalPrice : item.product.price ) | NumFormat}}</text>
 								</view>
 							</template>
 						</template>	
@@ -123,7 +124,7 @@
 							</view>
 							<view class="price tui-skeleton-rect" v-else>
 								<text class="p sm">¥</text>
-								<text class="p big">{{ item.product.retailPrice | NumFormat }}</text>
+								<text class="p big">{{ item.product.price | NumFormat }}</text>
 							</view>
 						</template>
 					</view>
@@ -131,7 +132,7 @@
 						<template v-if="item.product.productCategory == 1">
 							<view class="p-stars">
 								<text class="p-no">¥</text>
-								<uni-grader :grade="Number(item.product.price1Grade)" :margin="14"></uni-grader>
+								<uni-grader :grade="Number(item.product.priceGrade)" :margin="14"></uni-grader>
 							</view>
 						</template>
 						<template v-else>
@@ -190,11 +191,13 @@
 		},
 		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)
 				})
-				this.floorData = data
-				// console.log(this.floorData)
 			},
 			PromotionsFormat(promo){//促销活动类型数据处理
 				if(promo!=null){
@@ -291,19 +294,35 @@
 				height: 32rpx;
 				text-align: center;
 				box-sizing: border-box;
-			}
-			.floor-tags{
-				height: 28rpx;
-				border-radius: 6rpx;
-				background-color: #FFFFFF;
-				line-height: 28rpx;
-				color: $color-system;
-				text-align: center;
-				display: inline-block;
-				padding:0 16rpx;
-				font-size: $font-size-20;
-				border: 1px solid #E15616;
-				float: left;
+				.coupon-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: left;
+					margin-right: 12rpx;
+				}
+				.floor-tags{
+					height: 32rpx;
+					box-sizing: border-box;
+					border-radius: 8rpx;
+					background-color: #FFFFFF;
+					line-height: 28rpx;
+					color: $color-system;
+					text-align: center;
+					display: inline-block;
+					padding:0 16rpx;
+					font-size: $font-size-20;
+					border: 1px solid #E15616;
+					float: left;
+				}
 			}
 			.title-none{
 				font-size: $font-size-26;

+ 47 - 28
components/cm-module/pageTemplate/templateE.vue

@@ -24,11 +24,12 @@
 				</view>
 				<view class="floor-item-price" v-if="item.listType == 1">
 					<view class="floor-item-act">
+						<view class="coupon-tags" v-if="item.product.couponsLogo">优惠券</view>
 						<template v-if="userIdentity === 3">
 							<template v-if="item.product.actStatus===1">
 								<view class="floor-tags" v-if="PromotionsFormat(item.product.promotions)">
 									{{item.product.promotions.name}}
-									<text v-if="hasLogin && item.product.price1TextFlag != 1 && item.product.shopID == shopId">:¥{{item.product.retailPrice | NumFormat}}</text>
+									<text v-if="hasLogin && item.product.priceFlag != 1 && item.product.shopID == shopId">:¥{{item.product.price | NumFormat}}</text>
 								</view>
 								<view class="floor-tags" v-else>{{item.product.promotions.name}}</view>	
 							</template>
@@ -40,7 +41,7 @@
 							<template v-if="item.product.actStatus===1">
 								<view class="floor-tags" v-if="PromotionsFormat(item.product.promotions)">
 									{{item.product.promotions.name}}
-									<text v-if="hasLogin && item.product.price1TextFlag != 1">:¥{{item.product.retailPrice | NumFormat}}</text>
+									<text v-if="hasLogin && item.product.priceFlag != 1">:¥{{item.product.price | NumFormat}}</text>
 								</view>
 								<view class="floor-tags" v-else>{{item.product.promotions.name}}</view>	
 							</template>
@@ -53,42 +54,42 @@
 						<template v-if="item.product.productCategory == 1">
 							<template v-if="userIdentity == 3">
 								<template v-if="item.product.shopID == shopId">
-									<view class="title-none" v-if="item.product.price1TextFlag === '1'">
+									<view class="title-none" v-if="item.product.priceFlag === 1">
 										<text class="p big">¥未公开价格</text>
 									</view>
 									<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
 										<text class="p sm">¥</text>
-										<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+										<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.originalPrice : item.product.price ) | NumFormat}}</text>
 									</view>
 								</template>	
 								<template v-else>
 									<view class="no-price">
 										<view class="p-stars">
 											<text class="p-no">¥</text>
-											<uni-grader :grade="Number(item.product.price1Grade)" :margin="14"></uni-grader>
+											<uni-grader :grade="Number(item.product.priceGrade)" :margin="14"></uni-grader>
 										</view>
 									</view>	
 								</template>
 							</template>
 							<template v-else-if="userIdentity ===4">
-								<view class="title-none" v-if="item.product.price1TextFlag === '1'">
+								<view class="title-none" v-if="item.product.priceFlag === 1">
 									<text class="p big">¥未公开价格</text>
 								</view>
-								<view class="title-none"  v-if="item.product.price1TextFlag === '2'">
+								<view class="title-none"  v-if="item.product.priceFlag === 2">
 									<text class="p big">¥价格仅会员可见</text>
 								</view>
-								<view class="price tui-skeleton-rect" v-if="item.product.price1TextFlag === '0'" :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+								<view class="price tui-skeleton-rect" v-if="item.product.priceFlag === 0" :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
 									<text class="p sm">¥</text>
-									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.originalPrice : item.product.price ) | NumFormat}}</text>
 								</view>
 							</template>
 							<template v-else>
-								<view class="title-none" v-if="item.product.price1TextFlag === '1'">
+								<view class="title-none" v-if="item.product.priceFlag === 1">
 									<text class="p big">¥未公开价格</text>
 								</view>
 								<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
 									<text class="p sm">¥</text>
-									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.originalPrice : item.product.price ) | NumFormat}}</text>
 								</view>
 							</template>
 						</template>	
@@ -99,7 +100,7 @@
 							</view>
 							<view class="price tui-skeleton-rect" v-else>
 								<text class="p sm">¥</text>
-								<text class="p big">{{ item.product.retailPrice | NumFormat }}</text>
+								<text class="p big">{{ item.product.price | NumFormat }}</text>
 							</view>
 						</template>
 					</view>
@@ -107,7 +108,7 @@
 						<template v-if="item.product.productCategory == 1">
 							<view class="p-stars">
 								<text class="p-no">¥</text>
-								<uni-grader :grade="Number(item.product.price1Grade)" :margin="14"></uni-grader>
+								<uni-grader :grade="Number(item.product.priceGrade)" :margin="14"></uni-grader>
 							</view>
 						</template>
 						<template v-else>
@@ -166,11 +167,13 @@
 		},
 		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)
 				})
-				this.floorData = data
-				// console.log(this.floorData)
 			},
 			PromotionsFormat(promo){//促销活动类型数据处理
 				if(promo!=null){
@@ -269,19 +272,35 @@
 				height: 32rpx;
 				text-align: center;
 				box-sizing: border-box;
-			}
-			.floor-tags{
-				height: 28rpx;
-				border-radius: 6rpx;
-				background-color: #FFFFFF;
-				line-height: 28rpx;
-				color: $color-system;
-				text-align: center;
-				display: inline-block;
-				padding:0 16rpx;
-				font-size: $font-size-20;
-				border: 1px solid #E15616;
-				float: left;
+				.coupon-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: left;
+					margin-right: 12rpx;
+				}
+				.floor-tags{
+					height: 32rpx;
+					box-sizing: border-box;
+					border-radius: 8rpx;
+					background-color: #FFFFFF;
+					line-height: 28rpx;
+					color: $color-system;
+					text-align: center;
+					display: inline-block;
+					padding:0 16rpx;
+					font-size: $font-size-20;
+					border: 1px solid #E15616;
+					float: left;
+				}
 			}
 			.title-none{
 				font-size: $font-size-26;

+ 47 - 28
components/cm-module/pageTemplate/templateF.vue

@@ -12,11 +12,12 @@
 				</view>
 				<view class="floor-item-price" v-if="item.listType == 1">
 					<view class="floor-item-act">
+						<view class="coupon-tags" v-if="item.product.couponsLogo">优惠券</view>
 						<template v-if="userIdentity === 3">
 							<template v-if="item.product.actStatus===1">
 								<view class="floor-tags" v-if="PromotionsFormat(item.product.promotions)">
 									{{item.product.promotions.name}}
-									<text v-if="hasLogin && item.product.price1TextFlag != 1 && item.product.shopID == shopId">:¥{{item.product.retailPrice | NumFormat}}</text>
+									<text v-if="hasLogin && item.product.priceFlag != 1 && item.product.shopID == shopId">:¥{{item.product.price | NumFormat}}</text>
 								</view>
 								<view class="floor-tags" v-else>{{item.product.promotions.name}}</view>	
 							</template>
@@ -28,7 +29,7 @@
 							<template v-if="item.product.actStatus===1">
 								<view class="floor-tags" v-if="PromotionsFormat(item.product.promotions)">
 									{{item.product.promotions.name}}
-									<text v-if="hasLogin && item.product.price1TextFlag != 1">:¥{{item.product.retailPrice | NumFormat}}</text>
+									<text v-if="hasLogin && item.product.priceFlag != 1">:¥{{item.product.price | NumFormat}}</text>
 								</view>
 								<view class="floor-tags" v-else>{{item.product.promotions.name}}</view>	
 							</template>
@@ -41,42 +42,42 @@
 						<template v-if="item.product.productCategory == 1">
 							<template v-if="userIdentity == 3">
 								<template v-if="item.product.shopID == shopId">
-									<view class="title-none" v-if="item.product.price1TextFlag === '1'">
+									<view class="title-none" v-if="item.product.priceFlag === 1">
 										<text class="p big">¥未公开价格</text>
 									</view>
 									<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
 										<text class="p sm">¥</text>
-										<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+										<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.originalPrice : item.product.price ) | NumFormat}}</text>
 									</view>
 								</template>	
 								<template v-else>
 									<view class="no-price">
 										<view class="p-stars">
 											<text class="p-no">¥</text>
-											<uni-grader :grade="Number(item.product.price1Grade)" :margin="14"></uni-grader>
+											<uni-grader :grade="Number(item.product.priceGrade)" :margin="14"></uni-grader>
 										</view>
 									</view>	
 								</template>
 							</template>
 							<template v-else-if="userIdentity ===4">
-								<view class="title-none" v-if="item.product.price1TextFlag === '1'">
+								<view class="title-none" v-if="item.product.priceFlag === 1">
 									<text class="p big">¥未公开价格</text>
 								</view>
-								<view class="title-none"  v-if="item.product.price1TextFlag === '2'">
+								<view class="title-none"  v-if="item.product.priceFlag === 2">
 									<text class="p big">¥价格仅会员可见</text>
 								</view>
-								<view class="price tui-skeleton-rect" v-if="item.product.price1TextFlag === '0'" :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+								<view class="price tui-skeleton-rect" v-if="item.product.priceFlag === 0" :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
 									<text class="p sm">¥</text>
-									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.originalPrice : item.product.price ) | NumFormat}}</text>
 								</view>
 							</template>
 							<template v-else>
-								<view class="title-none" v-if="item.product.price1TextFlag === '1'">
+								<view class="title-none" v-if="item.product.priceFlag === 1">
 									<text class="p big">¥未公开价格</text>
 								</view>
 								<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
 									<text class="p sm">¥</text>
-									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.originalPrice : item.product.price ) | NumFormat}}</text>
 								</view>
 							</template>
 						</template>	
@@ -87,7 +88,7 @@
 							</view>
 							<view class="price tui-skeleton-rect" v-else>
 								<text class="p sm">¥</text>
-								<text class="p big">{{ item.product.retailPrice | NumFormat }}</text>
+								<text class="p big">{{ item.product.price | NumFormat }}</text>
 							</view>
 						</template>
 					</view>
@@ -95,7 +96,7 @@
 						<template v-if="item.product.productCategory == 1">
 							<view class="p-stars">
 								<text class="p-no">¥</text>
-								<uni-grader :grade="Number(item.product.price1Grade)" :margin="14"></uni-grader>
+								<uni-grader :grade="Number(item.product.priceGrade)" :margin="14"></uni-grader>
 							</view>
 						</template>
 						<template v-else>
@@ -166,11 +167,13 @@
 		},
 		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)
 				})
-				this.floorData = data
-				// console.log(this.floorData)
 			},
 			PromotionsFormat(promo){//促销活动类型数据处理
 				if(promo!=null){
@@ -287,19 +290,35 @@
 				height: 32rpx;
 				text-align: center;
 				box-sizing: border-box;
-			}
-			.floor-tags{
-				height: 28rpx;
-				border-radius: 6rpx;
-				background-color: #FFFFFF;
-				line-height: 28rpx;
-				color: $color-system;
-				text-align: center;
-				display: inline-block;
-				padding:0 16rpx;
-				font-size: $font-size-20;
-				border: 1px solid #E15616;
-				float: left;
+				.coupon-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: left;
+					margin-right: 12rpx;
+				}
+				.floor-tags{
+					height: 32rpx;
+					box-sizing: border-box;
+					border-radius: 8rpx;
+					background-color: #FFFFFF;
+					line-height: 28rpx;
+					color: $color-system;
+					text-align: center;
+					display: inline-block;
+					padding:0 16rpx;
+					font-size: $font-size-20;
+					border: 1px solid #E15616;
+					float: left;
+				}
 			}
 			.title-none{
 				font-size: $font-size-26;

+ 47 - 28
components/cm-module/pageTemplate/templateG.vue

@@ -12,11 +12,12 @@
 				</view>
 				<view class="floor-item-price" v-if="item.listType == 1">
 					<view class="floor-item-act">
+						<view class="coupon-tags" v-if="item.product.couponsLogo">优惠券</view>
 						<template v-if="userIdentity === 3">
 							<template v-if="item.product.actStatus===1">
 								<view class="floor-tags" v-if="PromotionsFormat(item.product.promotions)">
 									{{item.product.promotions.name}}
-									<text v-if="hasLogin && item.product.price1TextFlag != 1 && item.product.shopID == shopId">:¥{{item.product.retailPrice | NumFormat}}</text>
+									<text v-if="hasLogin && item.product.priceFlag != 1 && item.product.shopID == shopId">:¥{{item.product.price | NumFormat}}</text>
 								</view>
 								<view class="floor-tags" v-else>{{item.product.promotions.name}}</view>	
 							</template>
@@ -28,7 +29,7 @@
 							<template v-if="item.product.actStatus===1">
 								<view class="floor-tags" v-if="PromotionsFormat(item.product.promotions)">
 									{{item.product.promotions.name}}
-									<text v-if="hasLogin && item.product.price1TextFlag != 1">:¥{{item.product.retailPrice | NumFormat}}</text>
+									<text v-if="hasLogin && item.product.priceFlag != 1">:¥{{item.product.price | NumFormat}}</text>
 								</view>
 								<view class="floor-tags" v-else>{{item.product.promotions.name}}</view>	
 							</template>
@@ -41,42 +42,42 @@
 						<template v-if="item.product.productCategory == 1">
 							<template v-if="userIdentity == 3">
 								<template v-if="item.product.shopID == shopId">
-									<view class="title-none" v-if="item.product.price1TextFlag === '1'">
+									<view class="title-none" v-if="item.product.priceFlag === 1">
 										<text class="p big">¥未公开价格</text>
 									</view>
 									<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
 										<text class="p sm">¥</text>
-										<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+										<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.originalPrice : item.product.price ) | NumFormat}}</text>
 									</view>
 								</template>	
 								<template v-else>
 									<view class="no-price">
 										<view class="p-stars">
 											<text class="p-no">¥</text>
-											<uni-grader :grade="Number(item.product.price1Grade)" :margin="14"></uni-grader>
+											<uni-grader :grade="Number(item.product.priceGrade)" :margin="14"></uni-grader>
 										</view>
 									</view>	
 								</template>
 							</template>
 							<template v-else-if="userIdentity ===4">
-								<view class="title-none" v-if="item.product.price1TextFlag === '1'">
+								<view class="title-none" v-if="item.product.priceFlag === 1">
 									<text class="p big">¥未公开价格</text>
 								</view>
-								<view class="title-none"  v-if="item.product.price1TextFlag === '2'">
+								<view class="title-none"  v-if="item.product.priceFlag === 2">
 									<text class="p big">¥价格仅会员可见</text>
 								</view>
-								<view class="price tui-skeleton-rect" v-if="item.product.price1TextFlag === '0'" :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+								<view class="price tui-skeleton-rect" v-if="item.product.priceFlag === 0" :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
 									<text class="p sm">¥</text>
-									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.originalPrice : item.product.price ) | NumFormat}}</text>
 								</view>
 							</template>
 							<template v-else>
-								<view class="title-none" v-if="item.product.price1TextFlag === '1'">
+								<view class="title-none" v-if="item.product.priceFlag === 1">
 									<text class="p big">¥未公开价格</text>
 								</view>
 								<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
 									<text class="p sm">¥</text>
-									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.originalPrice : item.product.price ) | NumFormat}}</text>
 								</view>
 							</template>
 						</template>	
@@ -87,7 +88,7 @@
 							</view>
 							<view class="price tui-skeleton-rect" v-else>
 								<text class="p sm">¥</text>
-								<text class="p big">{{ item.product.retailPrice | NumFormat }}</text>
+								<text class="p big">{{ item.product.price | NumFormat }}</text>
 							</view>
 						</template>
 					</view>
@@ -95,7 +96,7 @@
 						<template v-if="item.product.productCategory == 1">
 							<view class="p-stars">
 								<text class="p-no">¥</text>
-								<uni-grader :grade="Number(item.product.price1Grade)" :margin="14"></uni-grader>
+								<uni-grader :grade="Number(item.product.priceGrade)" :margin="14"></uni-grader>
 							</view>
 						</template>
 						<template v-else>
@@ -154,11 +155,13 @@
 		},
 		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)
 				})
-				this.floorData = data
-				// console.log(this.floorData)
 			},
 			PromotionsFormat(promo){//促销活动类型数据处理
 				if(promo!=null){
@@ -242,19 +245,35 @@
 				height: 32rpx;
 				text-align: center;
 				box-sizing: border-box;
-			}
-			.floor-tags{
-				height: 28rpx;
-				border-radius: 6rpx;
-				background-color: #FFFFFF;
-				line-height: 28rpx;
-				color: $color-system;
-				text-align: center;
-				display: inline-block;
-				padding:0 16rpx;
-				font-size: $font-size-20;
-				border: 1px solid #E15616;
-				float: left;
+				.coupon-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: left;
+					margin-right: 12rpx;
+				}
+				.floor-tags{
+					height: 32rpx;
+					box-sizing: border-box;
+					border-radius: 8rpx;
+					background-color: #FFFFFF;
+					line-height: 28rpx;
+					color: $color-system;
+					text-align: center;
+					display: inline-block;
+					padding:0 16rpx;
+					font-size: $font-size-20;
+					border: 1px solid #E15616;
+					float: left;
+				}
 			}
 			.title-none{
 				font-size: $font-size-26;

+ 54 - 30
components/cm-module/pageTemplate/templateH.vue

@@ -1,7 +1,7 @@
 <template>
 	<view class="section_page_main clearfix">
-		<view class="recommend-list">
-			<swiper class="tui-banner-swiper" :autoplay="true" :interval="5000" :duration="500" :circular="true" @change="swiperChange">
+		<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>
@@ -15,11 +15,12 @@
 							</view>
 							<view class="floor-item-price" v-if="item.listType == 1">
 								<view class="floor-item-act">
+									<view class="coupon-tags" v-if="item.product.couponsLogo">优惠券</view>
 									<template v-if="userIdentity === 3">
 										<template v-if="item.product.actStatus===1">
 											<view class="floor-tags" v-if="PromotionsFormat(item.product.promotions)">
 												{{item.product.promotions.name}}
-												<text v-if="hasLogin && item.product.price1TextFlag != 1 && item.product.shopID == shopId">:¥{{item.product.retailPrice | NumFormat}}</text>
+												<text v-if="hasLogin && item.product.priceFlag != 1 && item.product.shopID == shopId">:¥{{item.product.price | NumFormat}}</text>
 											</view>
 											<view class="floor-tags" v-else>{{item.product.promotions.name}}</view>	
 										</template>
@@ -31,7 +32,7 @@
 										<template v-if="item.product.actStatus===1">
 											<view class="floor-tags" v-if="PromotionsFormat(item.product.promotions)">
 												{{item.product.promotions.name}}
-												<text v-if="hasLogin && item.product.price1TextFlag != 1">:¥{{item.product.retailPrice | NumFormat}}</text>
+												<text v-if="hasLogin && item.product.priceFlag != 1">:¥{{item.product.price | NumFormat}}</text>
 											</view>
 											<view class="floor-tags" v-else>{{item.product.promotions.name}}</view>	
 										</template>
@@ -44,42 +45,42 @@
 									<template v-if="item.product.productCategory == 1">
 										<template v-if="userIdentity == 3">
 											<template v-if="item.product.shopID == shopId">
-												<view class="title-none" v-if="item.product.price1TextFlag === '1'">
+												<view class="title-none" v-if="item.product.priceFlag === 1">
 													<text class="p big">¥未公开价格</text>
 												</view>
 												<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
 													<text class="p sm">¥</text>
-													<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+													<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.originalPrice : item.product.price ) | NumFormat}}</text>
 												</view>
 											</template>	
 											<template v-else>
 												<view class="no-price">
 													<view class="p-stars">
 														<text class="p-no">¥</text>
-														<uni-grader :grade="Number(item.product.price1Grade)" :margin="14"></uni-grader>
+														<uni-grader :grade="Number(item.product.priceGrade)" :margin="14"></uni-grader>
 													</view>
 												</view>	
 											</template>
 										</template>
 										<template v-else-if="userIdentity ===4">
-											<view class="title-none" v-if="item.product.price1TextFlag === '1'">
+											<view class="title-none" v-if="item.product.priceFlag === 1">
 												<text class="p big">¥未公开价格</text>
 											</view>
-											<view class="title-none"  v-if="item.product.price1TextFlag === '2'">
+											<view class="title-none"  v-if="item.product.priceFlag === 2">
 												<text class="p big">¥价格仅会员可见</text>
 											</view>
-											<view class="price tui-skeleton-rect" v-if="item.product.price1TextFlag === '0'" :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+											<view class="price tui-skeleton-rect" v-if="item.product.priceFlag === 0" :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
 												<text class="p sm">¥</text>
-												<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+												<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.originalPrice : item.product.price ) | NumFormat}}</text>
 											</view>
 										</template>
 										<template v-else>
-											<view class="title-none" v-if="item.product.price1TextFlag === '1'">
+											<view class="title-none" v-if="item.product.priceFlag === 1">
 												<text class="p big">¥未公开价格</text>
 											</view>
 											<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
 												<text class="p sm">¥</text>
-												<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+												<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.originalPrice : item.product.price ) | NumFormat}}</text>
 											</view>
 										</template>
 									</template>	
@@ -90,7 +91,7 @@
 										</view>
 										<view class="price tui-skeleton-rect" v-else>
 											<text class="p sm">¥</text>
-											<text class="p big">{{ item.product.retailPrice | NumFormat }}</text>
+											<text class="p big">{{ item.product.price | NumFormat }}</text>
 										</view>
 									</template>
 								</view>
@@ -98,7 +99,7 @@
 									<template v-if="item.product.productCategory == 1">
 										<view class="p-stars">
 											<text class="p-no">¥</text>
-											<uni-grader :grade="Number(item.product.price1Grade)" :margin="14"></uni-grader>
+											<uni-grader :grade="Number(item.product.priceGrade)" :margin="14"></uni-grader>
 										</view>
 									</template>
 									<template v-else>
@@ -146,6 +147,7 @@
 				current:100,
 				swiperCurrent:0,
 				pageSize:4,
+				productCount:0
 			}
 		},
 		filters: {
@@ -157,7 +159,10 @@
 			this.initData(this.pageData)
 		},
 		computed: {
-			...mapState(['hasLogin','userInfo','isActivity'])
+			...mapState(['hasLogin','userInfo','isActivity']),
+			hasLessProduct(){
+				return this.productCount <= 2
+			}
 		},
 		watch: {
 			pageData: {
@@ -172,8 +177,11 @@
 			initData(data){
 				this.$api.getStorage().then((resolve) =>{
 					this.shopId = resolve.shopId ? resolve.shopId : 0
+				}).catch(err => {
+					console.log('err',err)
 				})
-				if(data.floorImageList.length>0){
+				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));
@@ -274,19 +282,35 @@
 						height: 32rpx;
 						text-align: center;
 						box-sizing: border-box;
-					}
-					.floor-tags{
-						height: 28rpx;
-						border-radius: 6rpx;
-						background-color: #FFFFFF;
-						line-height: 28rpx;
-						color: $color-system;
-						text-align: center;
-						display: inline-block;
-						padding:0 16rpx;
-						font-size: $font-size-20;
-						border: 1px solid #E15616;
-						float: left;
+						.coupon-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: left;
+							margin-right: 12rpx;
+						}
+						.floor-tags{
+							height: 32rpx;
+							box-sizing: border-box;
+							border-radius: 8rpx;
+							background-color: #FFFFFF;
+							line-height: 28rpx;
+							color: $color-system;
+							text-align: center;
+							display: inline-block;
+							padding:0 16rpx;
+							font-size: $font-size-20;
+							border: 1px solid #E15616;
+							float: left;
+						}
 					}
 					.title-none{
 						font-size: $font-size-26;

+ 507 - 0
components/cm-module/pageTemplate/templateI.vue

@@ -0,0 +1,507 @@
+<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>
+			<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">
+					<view class="floor-item-act">
+						<view class="coupon-tags" v-if="item.product.couponsLogo">优惠券</view>
+						<template v-if="userIdentity === 3">
+							<template v-if="item.product.actStatus === 1">
+								<view
+									class="floor-tags"
+									v-if="PromotionsFormat(item.product.promotions)"
+								>
+									{{ item.product.promotions.name }}
+									<text
+										v-if="
+											hasLogin &&
+												item.product.priceFlag != 1 &&
+												item.product.shopID == shopId
+										"
+										>:¥{{ item.product.price | NumFormat }}</text
+									>
+								</view>
+								<view class="floor-tags" v-else>{{
+									item.product.promotions.name
+								}}</view>
+							</template>
+							<template
+								v-if="
+									item.product.actStatus === 0 &&
+										item.product.ladderPriceFlag === 1
+								"
+							>
+								<view class="floor-tags">阶梯价格</view>
+							</template>
+						</template>
+						<template v-else>
+							<template v-if="item.product.actStatus === 1">
+								<view
+									class="floor-tags"
+									v-if="PromotionsFormat(item.product.promotions)"
+								>
+									{{ item.product.promotions.name }}
+									<text v-if="hasLogin && item.product.priceFlag != 1"
+										>:¥{{ item.product.price | NumFormat }}</text
+									>
+								</view>
+								<view class="floor-tags" v-else>{{
+									item.product.promotions.name
+								}}</view>
+							</template>
+							<template
+								v-if="
+									item.product.actStatus === 0 &&
+										item.product.ladderPriceFlag === 1
+								"
+							>
+								<view class="floor-tags">阶梯价格</view>
+							</template>
+						</template>
+					</view>
+					<view v-if="hasLogin">
+						<template v-if="item.product.productCategory == 1">
+							<template v-if="userIdentity == 3">
+								<template v-if="item.product.shopID == shopId">
+									<view
+										class="title-none"
+										v-if="item.product.priceFlag === 1"
+									>
+										<text class="p big">¥未公开价格</text>
+									</view>
+									<view
+										class="price tui-skeleton-rect"
+										v-else
+										:class="
+											PromotionsFormat(item.product.promotions) ? 'none' : ''
+										"
+									>
+										<text class="p sm">¥</text>
+										<text class="p big">{{
+											(PromotionsFormat(item.product.promotions)
+												? item.product.originalPrice
+												: item.product.price) | NumFormat
+										}}</text>
+									</view>
+								</template>
+								<template v-else>
+									<view class="no-price">
+										<view class="p-stars">
+											<text class="p-no">¥</text>
+											<uni-grader
+												:grade="Number(item.product.priceGrade)"
+												:margin="14"
+											></uni-grader>
+										</view>
+									</view>
+								</template>
+							</template>
+							<template v-else-if="userIdentity === 4">
+								<view class="title-none" v-if="item.product.priceFlag === 1">
+									<text class="p big">¥未公开价格</text>
+								</view>
+								<view class="title-none" v-if="item.product.priceFlag === 2">
+									<text class="p big">¥价格仅会员可见</text>
+								</view>
+								<view
+									class="price tui-skeleton-rect"
+									v-if="item.product.priceFlag === 0"
+									:class="PromotionsFormat(item.product.promotions) ? 'none' : ''"
+								>
+									<text class="p sm">¥</text>
+									<text class="p big">{{
+										(PromotionsFormat(item.product.promotions)
+											? item.product.originalPrice
+											: item.product.price) | NumFormat
+									}}</text>
+								</view>
+							</template>
+							<template v-else>
+								<view class="title-none" v-if="item.product.priceFlag === 1">
+									<text class="p big">¥未公开价格</text>
+								</view>
+								<view
+									class="price tui-skeleton-rect"
+									v-else
+									:class="PromotionsFormat(item.product.promotions) ? 'none' : ''"
+								>
+									<text class="p sm">¥</text>
+									<text class="p big">{{
+										(PromotionsFormat(item.product.promotions)
+											? item.product.originalPrice
+											: item.product.price) | NumFormat
+									}}</text>
+								</view>
+							</template>
+						</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'
+export default {
+	name: 'templateD',
+	components: {
+		uniGrader
+	},
+	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;
+			.coupon-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: left;
+				margin-right: 12rpx;
+			}
+			.floor-tags{
+				height: 32rpx;
+				box-sizing: border-box;
+				border-radius: 8rpx;
+				background-color: #FFFFFF;
+				line-height: 28rpx;
+				color: $color-system;
+				text-align: center;
+				display: inline-block;
+				padding:0 16rpx;
+				font-size: $font-size-20;
+				border: 1px solid #E15616;
+				float: left;
+			}
+		}
+		.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>

+ 523 - 0
components/cm-module/pageTemplate/templateJ.vue

@@ -0,0 +1,523 @@
+<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"
+			v-if="idx < 2"
+			:key="idx"
+			@click.stop="navToDetailPage(item)"
+		>
+			<image class="item-img tui-skeleton-fillet" :src="item.image" mode="aspectFill"></image>
+			<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">
+					<view class="floor-item-act">
+						<view class="coupon-tags" v-if="item.product.couponsLogo">优惠券</view>
+						<template v-if="userIdentity === 3">
+							<template v-if="item.product.actStatus === 1">
+								<view
+									class="floor-tags"
+									v-if="PromotionsFormat(item.product.promotions)"
+								>
+									{{ item.product.promotions.name }}
+									<text
+										v-if="
+											hasLogin &&
+												item.product.priceFlag != 1 &&
+												item.product.shopID == shopId
+										"
+										>:¥{{ item.product.price | NumFormat }}</text
+									>
+								</view>
+								<view class="floor-tags" v-else>{{
+									item.product.promotions.name
+								}}</view>
+							</template>
+							<template
+								v-if="
+									item.product.actStatus === 0 &&
+										item.product.ladderPriceFlag === 1
+								"
+							>
+								<view class="floor-tags">阶梯价格</view>
+							</template>
+						</template>
+						<template v-else>
+							<template v-if="item.product.actStatus === 1">
+								<view
+									class="floor-tags"
+									v-if="PromotionsFormat(item.product.promotions)"
+								>
+									{{ item.product.promotions.name }}
+									<text v-if="hasLogin && item.product.priceFlag != 1"
+										>:¥{{ item.product.price | NumFormat }}</text
+									>
+								</view>
+								<view class="floor-tags" v-else>{{
+									item.product.promotions.name
+								}}</view>
+							</template>
+							<template
+								v-if="
+									item.product.actStatus === 0 &&
+										item.product.ladderPriceFlag === 1
+								"
+							>
+								<view class="floor-tags">阶梯价格</view>
+							</template>
+						</template>
+					</view>
+					<view v-if="hasLogin">
+						<template v-if="item.product.productCategory == 1">
+							<template v-if="userIdentity == 3">
+								<template v-if="item.product.shopID == shopId">
+									<view
+										class="title-none"
+										v-if="item.product.priceFlag === 1"
+									>
+										<text class="p big">¥未公开价格</text>
+									</view>
+									<view
+										class="price tui-skeleton-rect"
+										v-else
+										:class="
+											PromotionsFormat(item.product.promotions) ? 'none' : ''
+										"
+									>
+										<text class="p sm">¥</text>
+										<text class="p big">{{
+											(PromotionsFormat(item.product.promotions)
+												? item.product.originalPrice
+												: item.product.price) | NumFormat
+										}}</text>
+									</view>
+								</template>
+								<template v-else>
+									<view class="no-price">
+										<view class="p-stars">
+											<text class="p-no">¥</text>
+											<uni-grader
+												:grade="Number(item.product.priceGrade)"
+												:margin="14"
+											></uni-grader>
+										</view>
+									</view>
+								</template>
+							</template>
+							<template v-else-if="userIdentity === 4">
+								<view class="title-none" v-if="item.product.priceFlag === 1">
+									<text class="p big">¥未公开价格</text>
+								</view>
+								<view class="title-none" v-if="item.product.priceFlag === 2">
+									<text class="p big">¥价格仅会员可见</text>
+								</view>
+								<view
+									class="price tui-skeleton-rect"
+									v-if="item.product.priceFlag === 0"
+									:class="PromotionsFormat(item.product.promotions) ? 'none' : ''"
+								>
+									<text class="p sm">¥</text>
+									<text class="p big">{{
+										(PromotionsFormat(item.product.promotions)
+											? item.product.originalPrice
+											: item.product.price) | NumFormat
+									}}</text>
+								</view>
+							</template>
+							<template v-else>
+								<view class="title-none" v-if="item.product.priceFlag === 1">
+									<text class="p big">¥未公开价格</text>
+								</view>
+								<view
+									class="price tui-skeleton-rect"
+									v-else
+									:class="PromotionsFormat(item.product.promotions) ? 'none' : ''"
+								>
+									<text class="p sm">¥</text>
+									<text class="p big">{{
+										(PromotionsFormat(item.product.promotions)
+											? item.product.originalPrice
+											: item.product.price) | NumFormat
+									}}</text>
+								</view>
+							</template>
+						</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'
+export default {
+	name: 'templateD',
+	components: {
+		uniGrader
+	},
+	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;
+			.coupon-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: left;
+				margin-right: 12rpx;
+			}
+			.floor-tags{
+				height: 32rpx;
+				box-sizing: border-box;
+				border-radius: 8rpx;
+				background-color: #FFFFFF;
+				line-height: 28rpx;
+				color: $color-system;
+				text-align: center;
+				display: inline-block;
+				padding:0 16rpx;
+				font-size: $font-size-20;
+				border: 1px solid #E15616;
+				float: left;
+			}
+		}
+		.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>

+ 576 - 0
components/cm-module/pageTemplate/templateK.vue

@@ -0,0 +1,576 @@
+<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"
+			v-if="idx < 2"
+			:key="idx"
+			@click.stop="navToDetailPage(item)"
+		>
+			<image class="item-img tui-skeleton-fillet" :src="item.image" mode="aspectFill"></image>
+			<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">
+					<view class="floor-item-act">
+						<view class="coupon-tags" v-if="item.product.couponsLogo">优惠券</view>
+						<template v-if="userIdentity === 3">
+							<template v-if="item.product.actStatus === 1">
+								<view
+									class="floor-tags"
+									v-if="PromotionsFormat(item.product.promotions)"
+								>
+									{{ item.product.promotions.name }}
+									<text
+										v-if="
+											hasLogin &&
+												item.product.priceFlag != 1 &&
+												item.product.shopID == shopId
+										"
+										>:¥{{ item.product.price | NumFormat }}</text
+									>
+								</view>
+								<view class="floor-tags" v-else>{{
+									item.product.promotions.name
+								}}</view>
+							</template>
+							<template
+								v-if="
+									item.product.actStatus === 0 &&
+										item.product.ladderPriceFlag === 1
+								"
+							>
+								<view class="floor-tags">阶梯价格</view>
+							</template>
+						</template>
+						<template v-else>
+							<template v-if="item.product.actStatus === 1">
+								<view
+									class="floor-tags"
+									v-if="PromotionsFormat(item.product.promotions)"
+								>
+									{{ item.product.promotions.name }}
+									<text v-if="hasLogin && item.product.priceFlag != 1"
+										>:¥{{ item.product.price | NumFormat }}</text
+									>
+								</view>
+								<view class="floor-tags" v-else>{{
+									item.product.promotions.name
+								}}</view>
+							</template>
+							<template
+								v-if="
+									item.product.actStatus === 0 &&
+										item.product.ladderPriceFlag === 1
+								"
+							>
+								<view class="floor-tags">阶梯价格</view>
+							</template>
+						</template>
+					</view>
+					<view v-if="hasLogin">
+						<template v-if="item.product.productCategory == 1">
+							<template v-if="userIdentity == 3">
+								<template v-if="item.product.shopID == shopId">
+									<view
+										class="title-none"
+										v-if="item.product.priceFlag === 1"
+									>
+										<text class="p big">¥未公开价格</text>
+									</view>
+									<view
+										class="price tui-skeleton-rect"
+										v-else
+										:class="
+											PromotionsFormat(item.product.promotions) ? 'none' : ''
+										"
+									>
+										<text class="p sm">¥</text>
+										<text class="p big">{{
+											(PromotionsFormat(item.product.promotions)
+												? item.product.originalPrice
+												: item.product.price) | NumFormat
+										}}</text>
+									</view>
+								</template>
+								<template v-else>
+									<view class="no-price">
+										<view class="p-stars">
+											<text class="p-no">¥</text>
+											<uni-grader
+												:grade="Number(item.product.priceGrade)"
+												:margin="14"
+											></uni-grader>
+										</view>
+									</view>
+								</template>
+							</template>
+							<template v-else-if="userIdentity === 4">
+								<view class="title-none" v-if="item.product.priceFlag === 1">
+									<text class="p big">¥未公开价格</text>
+								</view>
+								<view class="title-none" v-if="item.product.priceFlag === 2">
+									<text class="p big">¥价格仅会员可见</text>
+								</view>
+								<view
+									class="price tui-skeleton-rect"
+									v-if="item.product.priceFlag === 0"
+									:class="PromotionsFormat(item.product.promotions) ? 'none' : ''"
+								>
+									<text class="p sm">¥</text>
+									<text class="p big">{{
+										(PromotionsFormat(item.product.promotions)
+											? item.product.originalPrice
+											: item.product.price) | NumFormat
+									}}</text>
+								</view>
+							</template>
+							<template v-else>
+								<view class="title-none" v-if="item.product.priceFlag === 1">
+									<text class="p big">¥未公开价格</text>
+								</view>
+								<view
+									class="price tui-skeleton-rect"
+									v-else
+									:class="PromotionsFormat(item.product.promotions) ? 'none' : ''"
+								>
+									<text class="p sm">¥</text>
+									<text class="p big">{{
+										(PromotionsFormat(item.product.promotions)
+											? item.product.originalPrice
+											: item.product.price) | NumFormat
+									}}</text>
+								</view>
+							</template>
+						</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'
+export default {
+	name: 'templateD',
+	components: {
+		uniGrader
+	},
+	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;
+			.coupon-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: left;
+				margin-right: 12rpx;
+			}
+			.floor-tags{
+				height: 32rpx;
+				box-sizing: border-box;
+				border-radius: 8rpx;
+				background-color: #FFFFFF;
+				line-height: 28rpx;
+				color: $color-system;
+				text-align: center;
+				display: inline-block;
+				padding:0 16rpx;
+				font-size: $font-size-20;
+				border: 1px solid #E15616;
+				float: left;
+			}
+		}
+		.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>

+ 1 - 1
components/cm-module/pageTemplate/templateNav.vue

@@ -37,7 +37,7 @@
 				console.log(this.navList)
 			},
 			NavToDetailPage(item){//分类导航跳转
-				this.$api.navigateTo(`/pages/goods/goods-classify?classType=1&id=${item.bigTypeID}&title=${item.name}`)
+				this.$api.navigateTo(`/pages/goods/goods-classify?classType=1&id=${item.bigTypeId}&title=${item.name}`)
 				// uni.setStorage({
 				// 	key: 'commodity_id',
 				// 	data: pro.tinyTypeID,

+ 172 - 0
components/cm-module/pcitureTemplate/templateA.vue

@@ -0,0 +1,172 @@
+<template>
+	<view class="section_page_main clearfix">
+		<view class="recommend-list" :style="hasLessImage?'height:82px':''">
+			<swiper
+				class="tui-banner-swiper"
+				:autoplay="true"
+				:interval="5000"
+				:duration="500"
+				:circular="true"
+				@change="swiperChange"
+				:style="hasLessImage?'height:82px':''" 
+			>
+				<swiper-item class="clearfix" v-for="(list,index1) in productList" :key="index1">
+					<view class="img-box" v-for="(product,index2) in list" :key="index2" @click="navigaitionTo(product)">
+						<image :src="product.appletsImage" ></image>
+					</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 caimeiApi from '@/common/config/caimeiApi.js'
+export default {
+	name: 'templateH',
+	components: {
+		uniGrader
+	},
+	props: {
+		pageData: {
+			type: Object
+		},
+		userIdentity: {
+			type: Number
+		}
+	},
+	data() {
+		return {
+			productList: [],
+			swiperCurrent: 0,
+			pageSize: 8,
+			imageCount:0
+		}
+	},
+	created() {
+		this.initData(this.pageData)
+	},
+	watch: {
+		pageData: {
+			handler: function(el) {
+				//监听对象的变换使用 function,箭头函数容易出现this指向不正确
+				this.pageData = el
+				this.initData(this.pageData)
+			},
+			deep: true
+		}
+	},
+	computed:{
+		hasLessImage(){
+			return this.imageCount <= 4
+		}
+	},
+	methods: {
+		initData(data) {
+			this.imageCount = data.floorImageList.length
+			while(data.floorImageList.length > 0){
+				this.productList.push(data.floorImageList.splice(0,this.pageSize))
+			}
+		},
+		swiperChange(e) {
+			//轮播切换
+			const index = e.detail.current
+			this.swiperCurrent = index
+		},
+		navigaitionTo(item){
+			if (item.adsImage === '' && item.linkType === -1) {
+				return
+			}else if(item.linkType === -1){
+				uni.navigateTo({
+					url:`/pages/h5/activity/activity-detail?adsImage=${item.adsImage}&title=${item.name}`
+				})
+			}else{
+				caimeiApi.FlooryNavigateTo(item)
+			}
+		}
+	}
+}
+</script>
+
+<style lang="scss">
+.section_page_main {
+	width: 100%;
+	height: auto;
+	box-sizing: border-box;
+	.recommend-list {
+		width: 100%;
+		height: 390rpx;
+		position: relative;
+		padding-bottom: 20rpx;
+		.tui-banner-swiper {
+			width: 100%;
+			margin: 0 auto;
+			background: #f7f7f7;
+			height: 350rpx;
+			overflow: hidden;
+			transform: translateY(0);
+			.img-box {
+				width: 164rpx;
+				height: 164rpx;
+				float: left;
+				margin: 15rpx 15rpx 0 0;
+				overflow: hidden;
+				border-radius: 8rpx;
+				image {
+					width: 164rpx;
+					height: 164rpx;
+				}
+				&:nth-child(4n) {
+					margin-right: 0;
+				}
+				&:nth-child(1),
+				&:nth-child(2),
+				&:nth-child(3),
+				&:nth-child(4) {
+					margin-top: 0;
+				}
+			}
+		}
+	}
+	.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: #e15616;
+			transition: all 0.4s;
+		}
+	}
+}
+</style>

+ 186 - 0
components/cm-module/pcitureTemplate/templateB.vue

@@ -0,0 +1,186 @@
+<template>
+	<view class="section_page_main clearfix">
+		<view class="recommend-list" :style="hasLessImage?'height:78px':''" >
+			<swiper
+				class="tui-banner-swiper"
+				:autoplay="true"
+				:interval="5000"
+				:duration="500"
+				:circular="true"
+				@change="swiperChange"
+				:style="hasLessImage?'height:78px':''" 
+			>
+				<swiper-item class="clearfix" v-for="(list,index1) in productList" :key="index1">
+					<view class="img-box"  v-for="(product,index2) in list" :key="index2" @click="navigaitionTo(product)">
+						<image :src="product.appletsImage" ></image>
+                        <view class="cm-cover" v-if="pageData.floorContent.templateClassify === 4"></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 caimeiApi from '@/common/config/caimeiApi.js'
+export default {
+	name: 'templateH',
+	components: {
+		uniGrader
+	},
+	props: {
+		pageData: {
+			type: Object
+		},
+		userIdentity: {
+			type: Number
+		}
+	},
+	data() {
+		return {
+			productList: [],
+			swiperCurrent: 0,
+			pageSize: 6,
+			imageCount:0
+		}
+	},
+	created() {
+		this.initData(this.pageData)
+	},
+	computed:{
+		hasLessImage(){
+			return this.imageCount <= 3
+		}
+	},
+	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.imageCount = data.floorImageList.length
+			while(data.floorImageList.length > 0){
+				this.productList.push(data.floorImageList.splice(0,this.pageSize))
+			}
+		},
+		swiperChange(e) {
+			//轮播切换
+			const index = e.detail.current
+			this.swiperCurrent = index
+		},
+		navigaitionTo(item){
+			if (item.adsImage === '' && item.linkType === -1) {
+				return
+			}else if(item.linkType === -1){
+				uni.navigateTo({
+					url:`/pages/h5/activity/activity-detail?adsImage=${item.adsImage}&title=${item.name}`
+				})
+			}else{
+				caimeiApi.FlooryNavigateTo(item)
+			}
+		}
+	}
+}
+</script>
+
+<style lang="scss">
+.section_page_main {
+	width: 100%;
+	height: auto;
+	box-sizing: border-box;
+	.recommend-list {
+		width: 100%;
+		height: 380rpx;
+		position: relative;
+		padding-bottom: 20rpx;
+		.tui-banner-swiper {
+			width: 100%;
+			margin: 0 auto;
+			background: #f7f7f7;
+			height: 330rpx;
+			overflow: hidden;
+			transform: translateY(0);
+			.img-box {
+                position: relative;
+				width: 224rpx;
+				height: 156rpx;
+				float: left;
+				margin: 15rpx 15rpx 0 0;
+				overflow: hidden;
+				border-radius: 8rpx;
+				image {
+					width: 224rpx;
+					height: 156rpx;
+				}
+				&:nth-child(3n) {
+					margin-right: 0;
+				}
+				&:nth-child(1),
+				&:nth-child(2),
+				&:nth-child(3) {
+					margin-top: 0;
+				}
+                .cm-cover{
+                    z-index: 99;
+                    top: 0;
+                    left: 0;
+                    position: absolute;
+                    width: 100%;
+                    height: 100%;
+                    background:url(https://static.caimei365.com/app/img/icon2/cm_player.png) no-repeat center;
+                    background-size: 40rpx 40rpx;
+                }
+			}
+		}
+	}
+	.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: #e15616;
+			transition: all 0.4s;
+		}
+	}
+}
+</style>

+ 80 - 0
components/cm-module/pcitureTemplate/templateC.vue

@@ -0,0 +1,80 @@
+<template>
+	<scroll-view scroll-x="true" class="picture">
+		<view class="section" v-for="(item , index) in productList" @click="navigaitionTo(item)" :key="index">
+			<image :src="item.appletsImage" ></image>
+            <view class="cm-cover" v-if="pageData.floorContent.templateClassify === 4"></view>
+		</view>
+	</scroll-view>
+</template>
+
+<script>
+import caimeiApi from '@/common/config/caimeiApi.js'
+export default{
+	data(){
+		return{
+			productList:[]
+		}
+	},
+	props:{
+		pageData: {
+			type: Object
+		},
+		userIdentity: {
+			type: Number
+		}
+	},
+	created() {
+		this.initData(this.pageData)
+	},
+	methods:{
+		initData(data){
+			this.productList = data.floorImageList
+		},
+		navigaitionTo(item){
+			if (item.adsImage === '' && item.linkType === -1) {
+				return
+			}else if(item.linkType === -1){
+				uni.navigateTo({
+					url:`/pages/h5/activity/activity-detail?adsImage=${item.adsImage}&title=${item.name}`
+				})
+			}else{
+				caimeiApi.FlooryNavigateTo(item)
+			}
+		}
+	}
+}
+</script>
+
+<style lang="scss">
+.picture{
+	width: 750rpx;
+	margin-left: -24rpx;
+	white-space: nowrap;
+	.section{
+        position: relative;
+		display: inline-block;
+		margin-right: 24rpx;
+		width: 310rpx;
+		height: 240rpx;
+		overflow: hidden;
+		border-radius: 16rpx;
+		image{
+			width: 310rpx;
+			height: 240rpx;
+		}
+		&:first-child{
+			margin-left: 24rpx;
+		}
+        .cm-cover{
+            z-index: 99;
+            top: 0;
+            left: 0;
+            position: absolute;
+            width: 100%;
+            height: 100%;
+            background:url(https://static.caimei365.com/app/img/icon2/cm_player.png) no-repeat center;
+            background-size: 40rpx 40rpx;
+        }
+	}
+}
+</style>

+ 96 - 0
components/cm-module/pcitureTemplate/templateD.vue

@@ -0,0 +1,96 @@
+<template>
+	<view class="picture">
+		<view class="section" v-for="(item,index) in productList" :key="index" @click="navigaitionTo(item)">
+			<image :src="item.appletsImage" ></image>
+            <view class="cm-cover" v-if="pageData.floorContent.templateClassify === 4"></view>
+		</view>
+	</view>
+</template>
+
+<script>
+import caimeiApi from '@/common/config/caimeiApi.js'
+export default{
+	data(){
+		return{
+			productList:[]
+		}
+	},
+	props:{
+		pageData: {
+			type: Object
+		},
+		userIdentity: {
+			type: Number
+		},
+		flag:{
+			type:Boolean,
+			default:false
+		}
+	},
+	created() {
+		this.initData(this.pageData)
+	},
+	watch: {
+		pageData: {
+			handler: function(el) {
+				//监听对象的变换使用 function,箭头函数容易出现this指向不正确
+				this.pageData = el
+				this.initData(this.pageData)
+			},
+			deep: true
+		}
+	},
+	methods:{
+		initData(data){
+			if(this.flag){
+				this.productList = data.floorImageList
+			}else{
+				this.productList = data.floorImageList.slice(0,2)
+			}
+			
+		},
+		navigaitionTo(item){
+			if (item.adsImage === '' && item.linkType === -1) {
+				return
+			}else if(item.linkType === -1){
+				uni.navigateTo({
+					url:`/pages/h5/activity/activity-detail?adsImage=${item.adsImage}&title=${item.name}`
+				})
+			}else{
+				caimeiApi.FlooryNavigateTo(item)
+			}
+		}
+	}
+}
+</script>
+
+<style lang="scss">
+.picture{
+	width: 100%;
+	.section{
+        position: relative;
+		margin-bottom: 24rpx;
+		width: 702rpx;
+		height: 360rpx;
+		overflow: hidden;
+		border-radius: 16rpx;
+		image{
+			width: 702rpx;
+			height: 360rpx;
+		}
+		&:first-child{
+			margin-top: 0;
+		}
+        .cm-cover{
+            z-index: 99;
+            top: 0;
+            left: 0;
+            position: absolute;
+            width: 100%;
+            height: 100%;
+            background: url(https://static.caimei365.com/app/img/icon2/cm_player.png) no-repeat center;
+            background-size: 40rpx 40rpx;
+        }
+	}
+}
+</style>

+ 181 - 0
components/cm-module/pcitureTemplate/templateE.vue

@@ -0,0 +1,181 @@
+<template>
+	<view class="section_page_main clearfix">
+		<view class="recommend-list" :style="hasLessImage?'height:105px':''" >
+			<swiper
+				class="tui-banner-swiper"
+				:autoplay="true"
+				:interval="5000"
+				:duration="500"
+				:circular="true"
+				@change="swiperChange"
+				:style="hasLessImage?'height:105px':''" 
+			>
+				<swiper-item class="clearfix"  v-for="(list,index1) in productList" :key="index1">
+					<view class="img-box"  v-for="(product,index2) in list" :key="index2" @click="navigaitionTo(product)">
+						<image :src="product.appletsImage" ></image>
+                        <view class="cm-cover" v-if="pageData.floorContent.templateClassify === 4"></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 caimeiApi from '@/common/config/caimeiApi.js'
+export default {
+	name: 'templateH',
+	components: {
+		uniGrader
+	},
+	props: {
+		pageData: {
+			type: Object
+		},
+		userIdentity: {
+			type: Number
+		}
+	},
+	data() {
+		return {
+			productList: [],
+			swiperCurrent: 0,
+			pageSize: 4
+		}
+	},
+	created() {
+		this.initData(this.pageData)
+	},
+	computed:{
+		hasLessImage(){
+			return this.imageCount <= 2
+		}
+	},
+	watch: {
+		pageData: {
+			handler: function(el) {
+				//监听对象的变换使用 function,箭头函数容易出现this指向不正确
+				this.pageData = el
+				this.initData(this.pageData)
+			},
+			deep: true
+		}
+	},
+	methods: {
+		initData(data) {
+			this.imageCount = data.floorImageList.length
+			while(data.floorImageList.length > 0){
+				this.productList.push(data.floorImageList.splice(0,this.pageSize))
+			}
+		},
+		swiperChange(e) {
+			//轮播切换
+			const index = e.detail.current
+			this.swiperCurrent = index
+		},
+		navigaitionTo(item){
+			if (item.adsImage === '' && item.linkType === -1) {
+				return
+			}else if(item.linkType === -1){
+				uni.navigateTo({
+					url:`/pages/h5/activity/activity-detail?adsImage=${item.adsImage}&title=${item.name}`
+				})
+			}else{
+				caimeiApi.FlooryNavigateTo(item)
+			}
+		}
+	}
+}
+</script>
+
+<style lang="scss">
+.section_page_main {
+	width: 100%;
+	height: auto;
+	box-sizing: border-box;
+	.recommend-list {
+		width: 100%;
+		height: 500rpx;
+		position: relative;
+		padding-bottom: 20rpx;
+		.tui-banner-swiper {
+			width: 100%;
+			margin: 0 auto;
+			background: #f7f7f7;
+			height: 445rpx;
+			overflow: hidden;
+			transform: translateY(0);
+			.img-box {
+                position: relative;
+				width: 339rpx;
+				height: 210rpx;
+				float: left;
+				margin: 24rpx 24rpx 0 0;
+				overflow: hidden;
+				border-radius: 16rpx;
+				image {
+					width: 339rpx;
+					height: 210rpx;
+				}
+				&:nth-child(2n) {
+					margin-right: 0;
+				}
+				&:nth-child(1),
+				&:nth-child(2) {
+					margin-top: 0;
+				}
+                .cm-cover{
+                    z-index: 99;
+                    top: 0;
+                    left: 0;
+                    position: absolute;
+                    width: 100%;
+                    height: 100%;
+                    background: url(https://static.caimei365.com/app/img/icon2/cm_player.png) no-repeat center;
+                    background-size: 40rpx 40rpx;
+                }
+			}
+		}
+	}
+	.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: #e15616;
+			transition: all 0.4s;
+		}
+	}
+}
+</style>

+ 95 - 0
components/cm-module/pcitureTemplate/templateF.vue

@@ -0,0 +1,95 @@
+<template>
+	<view class="picture">
+		<view class="section" v-for="(item,index) in productList" :key="index" @click="navigaitionTo(item)">
+			<image :src="item.appletsImage" ></image>
+            <view class="cm-cover" v-if="pageData.floorContent.templateClassify === 4"></view>
+		</view>
+	</view>
+</template>
+
+<script>
+import caimeiApi from '@/common/config/caimeiApi.js'
+export default{
+	data(){
+		return{
+			productList:[]
+		}
+	},
+	props:{
+		pageData: {
+			type: Object
+		},
+		userIdentity: {
+			type: Number
+		},
+		flag:{
+			type:Boolean,
+			default:false
+		}
+	},
+	created() {
+		this.initData(this.pageData)
+	},
+	watch: {
+		pageData: {
+			handler: function(el) {
+				//监听对象的变换使用 function,箭头函数容易出现this指向不正确
+				this.pageData = el
+				this.initData(this.pageData)
+			},
+			deep: true
+		}
+	},
+	methods:{
+		initData(data){
+			if(this.flag){
+				this.productList = data.floorImageList
+			}else{
+				this.productList = data.floorImageList.slice(0,1)
+			}
+		},
+		navigaitionTo(item){
+			console.log(item.linkType)
+			if (item.adsImage === '' && item.linkType === -1) {
+				return
+			}else if(item.linkType === -1){
+				uni.navigateTo({
+					url:`/pages/h5/activity/activity-detail?adsImage=${item.adsImage}&title=${item.name}`
+				})
+			}else{
+				caimeiApi.FlooryNavigateTo(item)
+			}
+		}
+	}
+}
+</script>
+
+<style lang="scss">
+.picture{
+	.section{
+        position: relative;
+		width: 702rpx;
+		height: 340rpx;
+		overflow: hidden;
+		border-radius: 16rpx;
+		margin-top: 24rpx;
+		&:first-child{
+			margin-top: 0;
+		}
+		image{
+			width: 702rpx;
+			height: 340rpx;
+		}
+        .cm-cover{
+            z-index: 99;
+            top: 0;
+            left: 0;
+            position: absolute;
+            width: 100%;
+            height: 100%;
+            background: url(https://static.caimei365.com/app/img/icon2/cm_player.png) no-repeat center;
+            background-size: 40rpx 40rpx;
+        }
+	}
+}
+</style>

+ 102 - 0
components/cm-module/pcitureTemplate/templateG.vue

@@ -0,0 +1,102 @@
+<template>
+	<view class="picture">
+		<view class="section" v-for="(item,index) in productList" :key="index" @click="navigaitionTo(item)">
+			<image :src="item.appletsImage" ></image>
+            <view class="cm-cover" v-if="pageData.floorContent.templateClassify === 4"></view>
+		</view>
+	</view>
+</template>
+
+<script>
+import caimeiApi from '@/common/config/caimeiApi.js'
+export default{
+	data(){
+		return{
+			productList:[]
+		}
+	},
+	props:{
+		pageData: {
+			type: Object
+		},
+		userIdentity: {
+			type: Number
+		},
+		flag:{
+			type:Boolean,
+			default:false
+		}
+	},
+	created() {
+		this.initData(this.pageData)
+	},
+	watch: {
+		pageData: {
+			handler: function(el) {
+				//监听对象的变换使用 function,箭头函数容易出现this指向不正确
+				this.pageData = el
+				this.initData(this.pageData)
+			},
+			deep: true
+		}
+	},
+	methods:{
+		initData(data){
+			if(this.flag){
+				this.productList = data.floorImageList
+			}else{
+				this.productList = data.floorImageList.slice(0,4)
+			}
+			
+		},
+		navigaitionTo(item){
+			if (item.adsImage === '' && item.linkType === -1) {
+				return
+			}else if(item.linkType === -1){
+				uni.navigateTo({
+					url:`/pages/h5/activity/activity-detail?adsImage=${item.adsImage}&title=${item.name}`
+				})
+			}else{
+				caimeiApi.FlooryNavigateTo(item)
+			}
+		}
+	}
+}
+</script>
+
+<style lang="scss">
+.picture{
+	width: 100%;
+	.section{
+        float: left;
+        position: relative;
+		margin-bottom: 24rpx;
+        margin-right: 24rpx;
+		width: 339rpx;
+		height: 230rpx;
+		overflow: hidden;
+		border-radius: 16rpx;
+		image{
+			width: 339rpx;
+			height: 230rpx;
+		}
+		&:nth-child(1),
+        &:nth-child(2){
+			margin-top: 0;
+		}
+        &:nth-child(2n){
+            margin-right: 0;
+        }
+        .cm-cover{
+            z-index: 99;
+            top: 0;
+            left: 0;
+            position: absolute;
+            width: 100%;
+            height: 100%;
+            background:url(https://static.caimei365.com/app/img/icon2/cm_player.png) no-repeat center;
+            background-size: 40rpx 40rpx;
+        }
+	}
+}
+</style>

+ 103 - 0
components/cm-module/pcitureTemplate/templateH.vue

@@ -0,0 +1,103 @@
+<template>
+	<view class="picture">
+		<view class="section" v-for="(item,index) in productList" :key="index" @click="navigaitionTo(item)">
+			<image :src="item.appletsImage" ></image>
+            <view class="cm-cover" v-if="pageData.floorContent.templateClassify === 4"></view>
+		</view>
+	</view>
+</template>
+
+<script>
+import caimeiApi from '@/common/config/caimeiApi.js'
+export default{
+	data(){
+		return{
+			productList:[]
+		}
+	},
+	props:{
+		pageData: {
+			type: Object
+		},
+		userIdentity: {
+			type: Number
+		},
+		flag:{
+			type:Boolean,
+			default:false
+		}
+	},
+	created() {
+		this.initData(this.pageData)
+	},
+	watch: {
+		pageData: {
+			handler: function(el) {
+				//监听对象的变换使用 function,箭头函数容易出现this指向不正确
+				this.pageData = el
+				this.initData(this.pageData)
+			},
+			deep: true
+		}
+	},
+	methods:{
+		initData(data){
+			if(this.flag){
+				this.productList = data.floorImageList
+			}else{
+				this.productList = data.floorImageList.slice(0,6)
+			}
+			
+		},
+		navigaitionTo(item){
+			if (item.adsImage === '' && item.linkType === -1) {
+				return
+			}else if(item.linkType === -1){
+				uni.navigateTo({
+					url:`/pages/h5/activity/activity-detail?adsImage=${item.adsImage}&title=${item.name}`
+				})
+			}else{
+				caimeiApi.FlooryNavigateTo(item)
+			}
+		}
+	}
+}
+</script>
+
+<style lang="scss">
+.picture{
+	width: 100%;
+	.section{
+        float: left;
+        position: relative;
+		margin-bottom: 14rpx;
+        margin-right: 14rpx;
+		width: 224rpx;
+		height: 157rpx;
+		overflow: hidden;
+		border-radius: 16rpx;
+		image{
+			width: 224rpx;
+			height: 257rpx;
+		}
+		&:nth-child(1),
+        &:nth-child(2),
+        &:nth-child(3){
+			margin-top: 0;
+		}
+        &:nth-child(3n){
+            margin-right: 0;
+        }
+        .cm-cover{
+            z-index: 99;
+            top: 0;
+            left: 0;
+            position: absolute;
+            width: 100%;
+            height: 100%;
+            background: url(https://static.caimei365.com/app/img/icon2/cm_player.png) no-repeat center;
+            background-size: 40rpx 40rpx;
+        }
+	}
+}
+</style>

+ 1 - 1
components/cm-module/productDetails/cm-activipopu.vue

@@ -34,7 +34,7 @@
 					</view>
 					<view class="box-product" v-show="product.promotions.mode==3">
 						<view class="box-product-main"  v-for="(item, index) in product.promotions.giftList" :key="index">
-							<view class="image"><image :src="item.image" mode="widthFix"></image></view>
+							<view class="image"><image :src="item.image" mode=""></image></view>
 							<view class="info">
 								<view class="name">{{ item.name }}</view>
 								<view class="num">X{{ item.number }}</view>

+ 30 - 16
components/cm-module/productDetails/cm-price.vue

@@ -4,7 +4,7 @@
 		<template v-if="!hasLogin">
 			<view class="p-login grade tui-skeleton-fillet">
 				<text class="p-no">¥</text>
-				<uni-grader :grade="Number(product.price1Grade)"></uni-grader>
+				<uni-grader :grade="Number(product.priceGrade)"></uni-grader>
 				<view v-if="product.actStatus==1" class="floor-item-act">
 					<view v-if="product.promotions.type == 1 && product.promotions.mode==1"  class="floor-tags" @click.stop="clickPopupShow()">
 						{{product.promotions.name}}<text v-if="hasLogin">:¥{{ product.price | NumFormat }}</text>
@@ -25,7 +25,7 @@
 				<view class="wrap-main-item">
 					<view class="p-price tui-skeleton-fillet" :class="PromotionsFormat(product.promotions) ? 'none' : ''">
 						<text class="txt sm">¥</text>
-						<text class="txt big">{{ (PromotionsFormat(product.promotions) ? product.price1 : product.retailPrice) | NumFormat }}</text>
+						<text class="txt big">{{ (PromotionsFormat(product.promotions) ? product.originalPrice : product.price) | NumFormat }}</text>
 					</view>
 					<view v-if="product.actStatus==1" class="floor-item-act">
 						<view v-if="product.promotions.type == 1 && product.promotions.mode == 1"  class="floor-tags" @click.stop="clickPopupShow(1)">
@@ -41,14 +41,14 @@
 			<!-- 会员机构  -->
 			<template v-if="userIdentity == 2">
 				<view class="wrap-main-item">
-					<view v-if="product.price1TextFlag == '1'" class="wrap-main-text">¥未公开价格</view>
+					<view v-if="product.priceFlag == 1" class="wrap-main-text">¥未公开价格</view>
 					<view v-else class="p-price tui-skeleton-fillet" :class="PromotionsFormat(product.promotions) ? 'none' : ''">
 						<text class="txt sm">¥</text>
-						<text class="txt big">{{ (PromotionsFormat(product.promotions) ? product.price1 : product.retailPrice) | NumFormat }}</text>
+						<text class="txt big">{{ (PromotionsFormat(product.promotions) ? product.originalPrice : product.price) | NumFormat }}</text>
 					</view>
 					<view v-if="product.actStatus==1" class="floor-item-act">
 						<view v-if="product.promotions.type == 1 && product.promotions.mode == 1"  class="floor-tags" @click.stop="clickPopupShow(1)">
-							{{product.promotions.name}}<text v-if="hasLogin && product.price1TextFlag != '1'">:¥{{ product.promotions == null ? '0.00' : product.promotions.touchPrice | NumFormat }}</text>
+							{{product.promotions.name}}<text v-if="hasLogin && product.priceFlag != 1">:¥{{ product.promotions == null ? '0.00' : product.promotions.touchPrice | NumFormat }}</text>
 						</view>
 						<view v-else class="floor-tags" @click.stop="clickPopupShow()">{{product.promotions.name}}</view>	
 					</view>
@@ -61,14 +61,14 @@
 			<template v-if="userIdentity == 3">
 				<template v-if="product.shopID === shopID">
 					<view class="wrap-main-item">
-						<view v-if="product.price1TextFlag == '1'" class="wrap-main-text">¥未公开价格</view>
+						<view v-if="product.priceFlag == 1" class="wrap-main-text">¥未公开价格</view>
 						<view v-else class="p-price tui-skeleton-fillet" :class="PromotionsFormat(product.promotions) ? 'none' : ''">
 							<text class="txt sm">¥</text>
-							<text class="txt big">{{ (PromotionsFormat(product.promotions) ? product.price1 : product.retailPrice) | NumFormat }}</text>
+							<text class="txt big">{{ (PromotionsFormat(product.promotions) ? product.originalPrice : product.price) | NumFormat }}</text>
 						</view>
 						<view v-if="product.actStatus==1" class="floor-item-act">
 							<view v-if="product.promotions.type == 1 && product.promotions.mode == 1"  class="floor-tags" @click.stop="clickPopupShow(1)">
-								{{product.promotions.name}}<text v-if="hasLogin && product.price1TextFlag != '1'">:¥{{ product.promotions == null ? '0.00' : product.promotions.touchPrice | NumFormat }}</text>
+								{{product.promotions.name}}<text v-if="hasLogin && product.priceFlag != 1">:¥{{ product.promotions == null ? '0.00' : product.promotions.touchPrice | NumFormat }}</text>
 							</view>
 							<view v-else class="floor-tags" @click.stop="clickPopupShow()">{{product.promotions.name}}</view>	
 						</view>
@@ -80,30 +80,30 @@
 				<template v-else>
 					<view class="p-login grade tui-skeleton-fillet">
 						<text class="p-no">¥</text>
-						<uni-grader :grade="Number(product.price1Grade)"></uni-grader>
+						<uni-grader :grade="Number(product.priceGrade)"></uni-grader>
 					</view>
 				</template>	
 			</template>
 			<!-- 普通机构  -->
 			<template v-if="userIdentity == 4">
-				<template v-if="product.price1TextFlag == '1'">
+				<template v-if="product.priceFlag == 1">
 					<text class="wrap-main-text">¥未公开价格</text>
 				</template>
-				<template v-if="product.price1TextFlag == '2'">
+				<template v-if="product.priceFlag == 2">
 					<text class="wrap-main-text">¥价格仅会员可见</text>
 					<view class="floor-item-btn">
 						<view class="btn" @click.stop="goUpgradeApply">升级会员查看价格</view>
 					</view>
 				</template>
-				<template v-if="product.price1TextFlag == '0'">
+				<template v-if="product.priceFlag == 0">
 					<view class="wrap-main-item">
 						<view class="p-price tui-skeleton-fillet" :class="PromotionsFormat(product.promotions) ? 'none' : ''">
 							<text class="txt sm">¥</text>
-							<text class="txt big">{{ (PromotionsFormat(product.promotions) ? product.price1 : product.retailPrice) | NumFormat }}</text>
+							<text class="txt big">{{ (PromotionsFormat(product.promotions) ? product.originalPrice : product.price) | NumFormat }}</text>
 						</view>
 						<view v-if="product.actStatus==1" class="floor-item-act">
 							<view v-if="product.promotions.type == 1 && product.promotions.mode == 1"  class="floor-tags" @click.stop="clickPopupShow(1)">
-								{{product.promotions.name}}<text v-if="hasLogin && product.price1TextFlag != '1'">:¥{{ product.promotions == null ? '0.00' : product.promotions.touchPrice | NumFormat }}</text>
+								{{product.promotions.name}}<text v-if="hasLogin && product.priceFlag != 1">:¥{{ product.promotions == null ? '0.00' : product.promotions.touchPrice | NumFormat }}</text>
 							</view>
 							<view v-else class="floor-tags" @click.stop="clickPopupShow()">{{product.promotions.name}}</view>	
 						</view>
@@ -124,7 +124,7 @@
 									<view class="ladder-item-td">价格</view>
 								</view>
 								<view class="ladder-item" v-for="(ladd, index) in product.ladderPriceList" :key="index">
-									<view class="ladder-item-td">{{ ladd.buyNumRangeShow }}</view>
+									<view class="ladder-item-td">{{ ladd.numRange }}</view>
 									<view class="ladder-item-td">{{ ladd.buyPrice | NumFormat }}</view>
 								</view>
 							</view>
@@ -148,7 +148,7 @@
 							</view>
 							<view class="box-product" v-show="product.promotions.mode==3">
 								<view class="box-product-main"  v-for="(item, index) in product.promotions.giftList" :key="index">
-									<view class="image"><image :src="item.image" mode="widthFix"></image></view>
+									<view class="image"><image :src="item.image" mode=""></image></view>
 									<view class="info">
 										<view class="name">{{ item.name }}</view>
 										<view class="num">X{{ item.number }}</view>
@@ -233,9 +233,23 @@
 				return false
 			},
 			goUpgradeApply(){
+				// 友盟埋点升级查看价格点击事件
+				if(process.env.NODE_ENV != 'development'){
+					this.$uma.trackEvent('Um_Event_ProductUpgrade', {
+						Um_Key_PageName: '升级查看价格',
+						Um_Key_SourcePage: '商品详情',
+					})
+				}
 				this.$api.navigateTo('/pages/login/apply')
 			},
 			loginClick(){
+				// 友盟埋点商品详情登录查看价格点击事件
+				if(process.env.NODE_ENV != 'development'){
+					this.$uma.trackEvent('Um_Event_ProductLogin', {
+						Um_Key_PageName: '去登录',
+						Um_Key_SourcePage: '商品详情登录查看价格',
+					})
+				}		
 				this.$api.navigateTo('/pages/login/login')
 			},
 			goGoodActiveFn(id){

+ 11 - 11
components/cm-module/productDetails/instrument-recommend.vue

@@ -49,18 +49,18 @@
 					 	1:`/pages/goods/goods-instrument?linkId=${value.linkParam.id}&title=${value.title}`,
 						2:`/pages/goods/instrument-details?id=${value.linkParam.id}`,
 					 	5:`/pages/goods/product?id=${value.linkParam.id}`,
-					 	7:`/supplier/pages/user/my-shop?shopId=${value.linkParam.id}`,
-					 	8:`/h5/pages/activity/activity-list`,
-					 	9:`/second/pages/form/introduce`,
-					 	10:`/second/pages/product/product-list`,
-					 	11:`/second/pages/form/form`,
-					 	12:`/search/pages/search/search?keyWord=${value.title}`,
-					 	13:`/h5/pages/article/path?link=${value.link}`,
-					 	14:`/h5/pages/article/path?link=${value.link}`,
-					 	15:`/h5/pages/article/path?link=${value.link}`,
+					 	// 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`,
+					 	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`,
-					 	18:`/h5/pages/article/path?link=${value.link}`,
-					 	19:`/search/pages/search/search-supplier?keyWord=${value.title}`
+					 	18:`/pages/h5/article/path?link=${value.link}`,
+					 	19:`/pages/search/search-supplier?keyWord=${value.title}`
 					 }
 					 const url = typeMap[value.linkType];
 					 this.$api.navigateTo(url)

+ 7 - 3
components/cm-module/productDetails/recommend.vue

@@ -40,18 +40,22 @@
 				isEmpty:false,
 				pageSize:4,
 				productID:'',
+				userId:0,
 			}
 		},
 		created() {
 			this.productID = this.queryProductid
-			this.infoRecommend(this.queryProductid,this.queryType)
+			this.$api.getStorage().then((resolve) => {
+				this.userId = resolve.userId ? resolve.userId : 0;
+				this.infoRecommend(this.queryProductid,this.queryType)
+			})	
 		},
 		computed: {
 			...mapState(['identity'])
 		},
 		methods:{
 			infoRecommend(id,type){
-				this.ProductService.queryProductDetilsRelevant({ productId:id,recommendType:type ? type : 0,identity:this.identity }).then(response =>{
+				this.ProductService.queryProductDetilsRelevant({ productId:id,recommendType:type ? type : 0,userId : this.userId }).then(response =>{
 					if( response.data && response.data.length > 0){
 						this.isEmpty = false
 						this.recommendList = response.data
@@ -85,7 +89,7 @@
 		padding: 0 24rpx;
 		font-size: $font-size-28;
 		color: #999999;
-		text-align: center;
+		text-align: left;
 	}
 	.recommend-list{
 		width: 100%;

+ 0 - 79
components/cm-module/productDetails/second-price.vue

@@ -1,79 +0,0 @@
-<template name="cm-price">
-	<!-- 商品详情价格判断 -->
-	<view class="wrap-main">
-		<view class="" v-if="userIdentity == 1">
-			<view class="wrap-main-price">
-				<view class="p-price tui-skeleton-fillet">
-					<text class="txt sm">¥</text>
-					<text class="txt big">{{product.price1Str}}</text>
-					<text class="txt big">{{smallMoney== '0'?'.00':smallMoney}}</text>
-				</view>
-			</view>	
-		</view>
-	</view>
-</template>
-
-<script>
-	export default{
-		name:'cm-price',
-		props:{
-			product:{
-				type:Object,
-			},
-			userIdentity: {
-				type: Number,
-				default: 2
-			},
-			ladderPriceList:{
-				type: Array,
-			},
-			retailPrice:{
-				type:String,
-			},
-			smallMoney:{
-				type:String,
-			},
-			minBuyNumber:{
-				type: Number,
-				default: 1
-			}
-		},
-		data() {
-			return{
-				
-			}
-		},
-		created() {
-			
-		},
-		methods:{
-
-		},
-		
-	}
-</script>
-
-<style lang="scss">	
-
-</style>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-

Một số tệp đã không được hiển thị bởi vì quá nhiều tập tin thay đổi trong này khác