Parcourir la source

commit-m 整理分支

zhengjinyi il y a 3 ans
Parent
commit
100ec15414
100 fichiers modifiés avec 13642 ajouts et 5199 suppressions
  1. 4 1
      .gitignore
  2. 63 12
      App.vue
  3. 0 109
      api/cart.js
  4. 0 69
      api/operator.js
  5. 0 314
      api/order.js
  6. 0 83
      api/other.js
  7. 0 262
      api/product.js
  8. 0 401
      api/seller.js
  9. 0 409
      api/use.js
  10. 0 186
      api/utils.js
  11. 47 43
      common/config/addressdata.js
  12. 51 4
      common/config/authorize.js
  13. 160 58
      common/config/caimeiApi.js
  14. 11 3
      common/config/common.js
  15. 0 13
      common/config/config.js
  16. 49 44
      common/config/wxLogin.js
  17. BIN
      common/css/HelveticaNeue.ttf
  18. 8 3
      common/css/common.scss
  19. 366 134
      common/css/iconfont.scss
  20. 2 0
      common/css/style/icon.css
  21. 2480 0
      common/css/style/thorui.css
  22. 0 2
      common/css/stylesheet.css
  23. 17 4
      common/json/data.json.js
  24. 0 12
      common/utils/module.js
  25. 0 131
      common/utils/ys-validate.js
  26. 0 102
      components/badge/badge.vue
  27. 4 11
      components/cm-custom/au-custom.vue
  28. 1 1
      components/cm-custom/cm-custom.vue
  29. 1 1
      components/cm-custom/cm-drag.vue
  30. 1 1
      components/cm-custom/cu-custom.vue
  31. 0 87
      components/cm-custom/cu-tabbar.vue
  32. 0 122
      components/cm-custom/custom-b.vue
  33. 0 199
      components/cm-custom/custom-c.vue
  34. 221 0
      components/cm-custom/custom-floor.vue
  35. 85 50
      components/cm-custom/custom-p.vue
  36. 0 69
      components/cm-custom/custom-seller.vue
  37. 14 16
      components/cm-module/activity/activity.vue
  38. 258 0
      components/cm-module/activity/activityBean.vue
  39. 255 0
      components/cm-module/activity/pageFloor.vue
  40. 253 0
      components/cm-module/activityContact/index.vue
  41. 112 0
      components/cm-module/articleTemplate/templateA.vue
  42. 111 0
      components/cm-module/articleTemplate/templateB.vue
  43. 113 0
      components/cm-module/articleTemplate/templateC.vue
  44. 119 0
      components/cm-module/articleTemplate/templateD.vue
  45. 0 209
      components/cm-module/bottomMenu/bottomMenu.vue
  46. 2116 0
      components/cm-module/cart-components/index.vue
  47. 113 69
      components/cm-module/cm-seller/category.vue
  48. 96 590
      components/cm-module/cm-seller/home.vue
  49. 132 56
      components/cm-module/cm-seller/user.vue
  50. 280 0
      components/cm-module/coupon/tui-tabs.vue
  51. 0 1
      components/cm-module/creatOrder/choiceAddress.vue
  52. 390 0
      components/cm-module/creatOrder/coupon.vue
  53. 210 0
      components/cm-module/creatOrder/exchangeCoupon.vue
  54. 175 54
      components/cm-module/creatOrder/freight.vue
  55. 140 30
      components/cm-module/creatOrder/goodsList.vue
  56. 24 26
      components/cm-module/creatOrder/invoiceTent.vue
  57. 2 2
      components/cm-module/creatOrder/sellerAddress.vue
  58. 390 0
      components/cm-module/creatOrder/sellerCoupon.vue
  59. 210 0
      components/cm-module/creatOrder/sellerExchangeCoupon.vue
  60. 2 2
      components/cm-module/creatOrder/sellerFreight.vue
  61. 367 0
      components/cm-module/creatOrder/sellerGoodsList.vue
  62. 58 47
      components/cm-module/creatOrder/sellerInvoice.vue
  63. 440 0
      components/cm-module/creatOrder/sellerRegulations.vue
  64. 0 143
      components/cm-module/drag-button/drag-button.vue
  65. 2 2
      components/cm-module/headerNavbar/header-back.vue
  66. 93 50
      components/cm-module/headerNavbar/header-poduct.vue
  67. 1 1
      components/cm-module/headerNavbar/headerNavbar.vue
  68. 166 0
      components/cm-module/homeIndex/banner.vue
  69. 45 0
      components/cm-module/homeIndex/coupon.vue
  70. 32 20
      components/cm-module/homeIndex/customer.vue
  71. 163 0
      components/cm-module/homeIndex/navbars.vue
  72. 146 0
      components/cm-module/homeIndex/pageFloor.vue
  73. 331 0
      components/cm-module/homeIndex/pageSpecial.vue
  74. 137 0
      components/cm-module/homeIndex/supplierList.vue
  75. 115 58
      components/cm-module/listTemplate/buyagainList.vue
  76. 455 0
      components/cm-module/listTemplate/classifyProductList.vue
  77. 168 78
      components/cm-module/listTemplate/commodityList.vue
  78. 211 117
      components/cm-module/listTemplate/immediatelyList.vue
  79. 0 224
      components/cm-module/listTemplate/memberList.vue
  80. 112 57
      components/cm-module/listTemplate/productList.vue
  81. 0 3
      components/cm-module/listTemplate/richTextTemplate.vue
  82. 7 8
      components/cm-module/listTemplate/secondHand.vue
  83. 103 0
      components/cm-module/liveTemplate/components/scroll-temp.vue
  84. 202 0
      components/cm-module/liveTemplate/components/swiper-temp1.vue
  85. 197 0
      components/cm-module/liveTemplate/components/swiper-temp2.vue
  86. 103 0
      components/cm-module/liveTemplate/templateA.vue
  87. 103 0
      components/cm-module/liveTemplate/templateB.vue
  88. 103 0
      components/cm-module/liveTemplate/templateC.vue
  89. 0 135
      components/cm-module/modelAlert/cancelAlert.vue
  90. 2 2
      components/cm-module/modelAlert/errorAlert.vue
  91. 1 1
      components/cm-module/modelAlert/freightAlert.vue
  92. 148 0
      components/cm-module/modelAlert/order-alert.vue
  93. 3 4
      components/cm-module/modelAlert/sellerShareAlert.vue
  94. 2 3
      components/cm-module/modelAlert/shareAlert.vue
  95. 140 0
      components/cm-module/modelAlert/shareModel.vue
  96. 157 0
      components/cm-module/modelAlert/supplierRegisreAlert.vue
  97. 8 9
      components/cm-module/modelAlert/supplierShareAlert.vue
  98. 0 156
      components/cm-module/modelAlert/upgradeAlert.vue
  99. 0 86
      components/cm-module/noLogin/nologin.vue
  100. 235 0
      components/cm-module/orderDetails/activipopu.vue

+ 4 - 1
.gitignore

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

+ 63 - 12
App.vue

@@ -5,10 +5,31 @@
 	import Vue from 'vue'
 	import { mapState,mapMutations} from 'vuex';
 	import authorize from '@/common/config/authorize.js'
-	import wxLogin from "@/common/config/wxLogin.js"
 	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;
@@ -58,26 +79,54 @@
 				}
 			})
 			this.refresh()
-			this.$store.dispatch('setActivityFn',true)
+		},
+		computed: {
+			...mapState(['hasLogin'])
 		},
 		methods:{
+			...mapMutations(['login','logout','isWxAuthorize']),
+			async getWxAuthorize(){
+				const wechatCode = await authorize.getCode('weixin');// 根据微信的code获取用户登录状态:1已登录过 -1未登录过
+				const getUserInfo = await authorize.getUserInfo('weixin');
+				this.UserService.UserLoginAuthApplets({ 
+					code:wechatCode,
+					encryptedData:getUserInfo.encryptedData,
+					iv:getUserInfo.iv
+				})
+				.then(response =>{
+					this.$store.commit('updateStatus',response.data)
+					this.login(response.data);
+					uni.setStorageSync('token',response.data.token)
+					uni.setStorageSync('unionId',response.data.unionId)
+				})
+				.catch(error =>{
+					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.getSetting().then(res =>{// console.log('是否已授权',res);//0:为取消授权 1:为已授权 2:为未操作
-						if(res == 1){
-							wxLogin.wxLoginAuthorize()
-						}else{
-							console.log('授权失败============>:'+'用户取消授权或者未操作')
-						}
-					}).catch(error=>{
-						console.log('授权失败============>:'+'用户授权失败,提醒用户重新授权')
-					})
+					this.getWxAuthorize()
 				},TIME)
+			},
+			diffTime(t){
+				let date = Date.now();
+				return (date -t) < 2*60*1000 ? false : true
 			}
 		},
 		onShow: function() {
-			// this.getCheekeyCode()
+			
 		},
 		onHide: function() {
 			console.log('App Hide')
@@ -89,6 +138,8 @@
 	/*每个页面公共css */
 	@import "@/common/css/common.scss";
 	@import "@/common/css/iconfont.scss";
+	@import "@/common/css/style/thorui.css";
+	@import "@/common/css/style/icon.css";
 
 view,
 scroll-view,

+ 0 - 109
api/cart.js

@@ -1,109 +0,0 @@
-/**
- *@des 购物车模块接口
- *@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 shoppingAddCart(params) {
-	return new Promise(function(resolve,reject) {
-		request.post('/shoppingCart/addCart',params, true,res => {
-			if(res.code == 0){
-				resolve(res)
-			}else{
-				reject(res)
-			}
-		})
-	})
-}
-/**
- *获取购物车列表
- */
-export function queryShoppingCartList(params) {
-	return new Promise(function(resolve,reject) {
-		request.get('/shoppingCart/shoppingInfo',params, res => {
-			if(res.code == 0){
-				resolve(res)
-			}else{
-				reject(res)
-			}
-		})
-	})
-}
-/**
- *更新购物车商品增减
- */
-export function shoppingCartUpdate(params) {
-	return new Promise(function(resolve,reject) {
-		request.post('/shoppingCart/update',params, true, res => {
-			if(res.code == 0){
-				resolve(res)
-			}else{
-				reject(res)
-			}
-		})
-	})
-}
-/**
- *购物车删除商品
- */
-export function shoppingCartDelete(params) {
-	return new Promise(function(resolve,reject) {
-		request.post('/shoppingCart/delete',params, true, res => {
-			if(res.code == 0){
-				resolve(res)
-			}else{
-				reject(res)
-			}
-		})
-	})
-}
-/**
- *查询地址列表
- */
-export function queryAddressList(params) {
-	return new Promise(function(resolve,reject) {
-		request.lodingGet('/personalCenter/findAddress',params, res => {
-			if(res.code == 0){
-				resolve(res)
-			}else{
-				reject(res)
-			}
-		})
-	})
-}
-/**
- *修改保存
- */
-export function addNewAddress(params) {
-	return new Promise(function(resolve,reject) {
-		request.post('/personalCenter/saveAddress',params,true, res => {
-			if(res.code == 0){
-				resolve(res)
-			}else{
-				reject(res)
-			}
-		})
-	})
-}
-/**
- *删除地址
- */
-export function deleteNewAddress(params) {
-	return new Promise(function(resolve,reject) {
-		request.lodingGet('/personalCenter/deleteAddress',params, res => {
-			if(res.code == 0){
-				resolve(res)
-			}else{
-				reject(res)
-			}
-		})
-	})
-}
-

+ 0 - 69
api/operator.js

@@ -1,69 +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'
-
-/**
- *获取运营人员管理列表
- *@param status
- *@param pageNum
- *@param pageSize
- */
-export function queryOperatorList(params) {
-	return new Promise(function(resolve,reject) {
-		request.get('/operation/list',params, res => {
-			if(res.code == 0){
-				resolve(res)
-			}else{
-				reject(res)
-			}
-		})
-	})
-}
-/**
- *添加运营人员
- */
-export function addOperator(params) {
-	return new Promise(function(resolve,reject) {
-		request.post('/operation/add',params,true, res => {
-			if(res.code == 0){
-				resolve(res)
-			}else{
-				reject(res)
-			}
-		})
-	})
-}
-/**
- *删除运营人员
- */
-export function deleteOperator(params) {
-	return new Promise(function(resolve,reject) {
-		request.post('/operation/delete',params,true,res => {
-			if(res.code == 0){
-				resolve(res)
-			}else{
-				reject(res)
-			}
-		})
-	})
-}
-/**
- *更新邀请码
- */
-export function updateCode(params) {
-	return new Promise(function(resolve,reject) {
-		request.post('/operation/updateInvitationCode',params,true, res => {
-			if(res.code == 0){
-				resolve(res)
-			}else{
-				reject(res)
-			}
-		})
-	})
-}
-

+ 0 - 314
api/order.js

@@ -1,314 +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 createOrderInfo(params) {
-	return new Promise(function(resolve,reject) {
-		request.get('/order/confirm',params, res => {
-			if(res.code == 0){
-				resolve(res)
-			}else{
-				reject(res)
-			}
-		})
-	})
-}
-/**
- *@提交订单
- */
-export function createOrderSubmit(params) {
-	return new Promise(function(resolve,reject) {
-		request.post('/order/submit',params, true,res => {
-			resolve(res)
-		})
-	})
-}
-/**
- *@获取运费
- *@param productIds 商品ID【”,”分割】
- *@param totalPrice	商品总额
- *@param userId		用户ID
- *@param townID		地址区ID
- */
-export function getOrderPostage(params) {
-	return new Promise(function(resolve,reject) {
-		request.get('/order/postage',params,res => {
-			if(res.code == 0){
-				resolve(res)
-			}else{
-				reject(res)
-			}
-		})
-	})
-}
-/**
- *@发票信息回显
- *@param userId	机构的userID
- */
-export function getFindInvoice(params) {
-	return new Promise(function(resolve,reject) {
-		request.get('/personalCenter/findInvoice',params,res => {
-			if(res.code == 0){
-				resolve(res)
-			}else{
-				reject(res)
-			}
-		})
-	})
-}
-/**
- *@保存发票信息
- *@param userId	机构的userID
- */
-export function updateInvoice(params) {
-	return new Promise(function(resolve,reject) {
-		request.post('/personalCenter/invoice',params, true,res => {
-			if(res.code == 0){
-				resolve(res)
-			}else{
-				reject(res)
-			}
-		})
-	})
-}
-/**
- *@获取订单列表
- *@param orderState 订单状态 1 2 3 4
- *@param pageNum	页码
- *@param pageSize	条数
- */
-export function queryOrderList(params) {
-	return new Promise(function(resolve,reject) {
-		request.lodingGet('/order/list',params, res => {
-			if(res.code == 0){
-				resolve(res)
-			}else{
-				reject(res)
-			}
-		})
-	})
-}
-/**
- *查询订单详情
- *@param orderID 订单ID
- */
-export function queryOrderDetails(params) {
-	return new Promise(function(resolve,reject) {
-		request.get('/order/detail',params, res => {
-			if(res.code == 0){
-				resolve(res)
-			}else{
-				reject(res)
-			}
-		})
-	})
-}
-/**
- *取消订单
- * @param orderID
- */
-export function cancelOrder(params) {
-	return new Promise(function(resolve,reject) {
-		request.get('/order/cancel',params, res => {
-			if(res.code == 0){
-				resolve(res)
-			}else{
-				reject(res)
-			}
-		})
-	})
-}
-/**
- *删除订单
- * @param orderID
- */
-export function deleteOrder(params) {
-	return new Promise(function(resolve,reject) {
-		request.get('/order/delete',params, res => {
-			if(res.code == 0){
-				resolve(res)
-			}else{
-				reject(res)
-			}
-		})
-	})
-}
-/**
- *确认订单
- * @param orderID
- */
-export function affirmOrder(params) {
-	return new Promise(function(resolve,reject) {
-		request.post('/order/affirmOrder',params,true,res => {
-			if(res.code == 0){
-				resolve(res)
-			}else{
-				reject(res)
-			}
-		})
-	})
-}
-/**
- *确认收货
- * @param orderID
- */
-export function confirmReceipt(params) {
-	return new Promise(function(resolve,reject) {
-		request.get('/order/affirm',params, res => {
-			if(res.code == 0){
-				resolve(res)
-			}else{
-				reject(res)
-			}
-		})
-	})
-}
-/**
- *查询物流信息
- * @param orderID
- */
-export function queryLogistics(params) {
-	return new Promise(function(resolve,reject) {
-		request.get('/order/logistics',params, res => {
-			if(res.code == 0){
-				resolve(res)
-			}else{
-				reject(res)
-			}
-		})
-	})
-}
-/**
- *获取订单分享码
- * @param orderID
- */
-export function queryOrderShareCode(params) {
-	return new Promise(function(resolve,reject) {
-		request.get('/order/share',params, res => {
-			if(res.code == 0){
-				resolve(res)
-			}else{
-				reject(res)
-			}
-		})
-	})
-}
-/**
- *分享订单登录
- * @param orderID
- */
-export function orderShareCode(params) {
-	return new Promise(function(resolve,reject) {
-		request.get('/order/shareCode',params, res => {
-			resolve(res)
-		})
-	})
-}
-/**
- *搜索订单
- *@param searchWord 关键词
- *@param userId		用户ID
- *@param pageNum	页码
- *@param pageSize	条数
- */
-export function searchOrderInfo(params) {
-	return new Promise(function(resolve,reject) {
-		request.lodingGet('/order/search',params, res => {
-			if(res.code == 0){
-				resolve(res)
-			}else{
-				reject(res)
-			}
-		})
-	})
-}
-/**
- *搜索订单历史记录
- *@param userId
- */
-export function searchOrderHistory(params) {
-	return new Promise(function(resolve,reject) {
-		request.get('/order/searchHistory',params, res => {
-			if(res.code == 0){
-				resolve(res)
-			}else{
-				reject(res)
-			}
-		})
-	})
-}
-/**
- *清楚订单历史记录
- *@param
- */
-export function clearOrderHistory(params) {
-	return new Promise(function(resolve,reject) {
-		request.lodingGet('/order/searchHistory/delete',params, res => {
-			if(res.code == 0){
-				resolve(res)
-			}else{
-				reject(res)
-			}
-		})
-	})
-}
-/**
- *初始化收银台
- *@param  orderId 订单ID
- */
-export function PayOrderCheckoutCounter(params) {
-	return new Promise(function(resolve,reject) {
-		request.lodingGet('/PayOrder/checkoutCounter',params, res => {
-			if(res.code == 0){
-				resolve(res)
-			}else{
-				reject(res)
-			}
-		})
-	})
-}
-
-/**
- *微信支付
- *@param  amount支付金额,单位分,必须大于2
- *@param  payWay银联:UNIONPAY,微信:WEIXIN,支付宝:ALIPAY
- *@param  payType 微信小程序支付: MINIAPP_WEIXIN ,微信公众号支付: JSAPI_WEIXIN
- *@param  code  微信小程序code,微信小程序支付使用
- *@param  orderId  主订单ID
- */
-export function WeChatMiniWxPay(params) {
-	return new Promise(function(resolve,reject) {
-		request.post('/PayOrder/miniWxPay',params,true,res => {
-			if(res.code == 0){
-				resolve(res)
-			}else{
-				reject(res)
-			}
-		})
-	})
-}
-/**
- *生成支付链接
- *@param  unpaidAmount 本次待付款金额
- *@param  orderId  主订单ID
- */
-export function PayOrderPayLink(params) {
-	return new Promise(function(resolve,reject) {
-		request.post('/PayOrder/payLink',params,true,res => {
-			if(res.code == 0){
-				resolve(res)
-			}else{
-				reject(res)
-			}
-		})
-	})
-}
-

+ 0 - 83
api/other.js

@@ -1,83 +0,0 @@
-/**
- *@des 其他模块接口
- *@author zhengjinyi
- *@date 2020/03/19 14:56:57
- *@param registerByPass
- */
-import request from '@/common/config/caimeiApi.js'
-
-/**
- *医美机构正品联盟
- * @param
- */
-export function queryMember(params) {
-	return new Promise(function(resolve,reject) {
-		request.get('/home/member',params, res => {
-			if(res.code == 0){
-				resolve(res)
-			}else{
-				reject(res)
-			}
-		})
-	})
-}
-/**
- *售后无忧,购物须知
- * @param
- */
-export function queryAfterSale(params) {
-	return new Promise(function(resolve,reject) {
-		request.get('/home/afterSale',params, res => {
-			if(res.code == 0){
-				resolve(res)
-			}else{
-				reject(res)
-			}
-		})
-	})
-}
-/**
- *机构协议,用户协议,隐私权政策
- *@param helpPageID 隐私权政策id:1013,平台规则id:1023,机构协议:1036
- */
-export function protocolAgree(params) {
-	return new Promise(function(resolve,reject) {
-		request.get('/club/protocol',params, res => {
-			if(res.code == 0){
-				resolve(res)
-			}else{
-				reject(res)
-			}
-		})
-	})
-}
-/**
- *@发票信息回显
- *@param
- */
-export function queryInvoice(params) {
-	return new Promise(function(resolve,reject) {
-		request.get('/personalCenter/findInvoice',params, res => {
-			if(res.code == 0){
-				resolve(res)
-			}else{
-				reject(res)
-			}
-		})
-	})
-}
-/**
- *@发票信息保存
- *@param
- */
-export function querySaveInvoice(params) {
-	return new Promise(function(resolve,reject) {
-		request.post('/personalCenter/invoice',params, true,res => {
-			if(res.code == 0){
-				resolve(res)
-			}else{
-				reject(res)
-			}
-		})
-	})
-}

+ 0 - 262
api/product.js

@@ -1,262 +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 queryGoodscategory() {
-	return new Promise(function(resolve,reject) {
-		request.get("/product/classify",{}, res => {
-			if(res.code == 0){
-				resolve(res);
-			}else{
-				reject(res)
-			}
-		})
-	});
-}
-/**
- * @三级分类下的商品列表
- * @param:tinyTypeID 三级分类ID
- * @param:pageNum	页码
- * @param:pageSize	每页显示条数
- */
-export function queryGoodslist(url,params) {
-	return new Promise(function(resolve,reject) {
-		request.lodingGet(url,params, 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)
-			}
-		})
-	});
-}
-/**
- * @商品搜索
- * @param:userId 用户ID
- * @param:searchWord 关键词
- * @param:pageNum	页码
- * @param:pageSize	每页显示条数
- */
-export function querySearchProduct(params) {
-	return new Promise(function(resolve,reject) {
-		request.lodingGet("/product/search",params, res => {
-			if(res.code == 0){
-				resolve(res);
-			}else{
-				reject(res)
-			}
-		})
-	});
-}
-/**
- * @新商品搜索
- * @param:keyword 关键词
- * @param:pageNum	页码
- * @param:pageSize	每页显示条数
- * @param:sortField	价格排序
- * @param:sortType	类型排序
- */
-export function queryNewSearchProduct(params) {
-	return new Promise(function(resolve,reject) {
-		request.lodingGet("/search/query/product",params, res => {
-			if(res.code == 0){
-				resolve(res);
-			}else{
-				reject(res)
-			}
-		})
-	});
-}
-/**
- * @新商品搜索重新请求价格
- * @param:productIds 商品ID
- * @param:userId	用户ID
- */
-export function querySearchProductPrice(params) {
-	return new Promise(function(resolve,reject) {
-		request.get("/product/listPrice",params, res => {
-			if(res.code == 0){
-				resolve(res);
-			}else{
-				reject(res)
-			}
-		})
-	});
-}
-/**
- * @新商品搜索查询商品阶梯价格
- * @param:productIds 商品ID
- * @param:userId	用户ID
- */
-export function querySearchProductLadderPrice(params) {
-	return new Promise(function(resolve,reject) {
-		request.get("/product/ladderPrice",params, res => {
-			if(res.code == 0){
-				resolve(res);
-			}else{
-				reject(res)
-			}
-		})
-	});
-}
-/**
- * @搜索历史记录
- * @param:userId 用户ID
- */
-export function querySearchHistory(params) {
-	return new Promise(function(resolve,reject) {
-		request.get("/product/searchHistory",params, res => {
-			resolve(res);
-		})
-	});
-}
-/**
- * @添加搜索历史记录
- * @param:userId 用户ID
- * @param:keyword 用户ID
- */
-export function searchHistoryAdd(params) {
-	return new Promise(function(resolve,reject) {
-		request.get("/product/history/add",params, res => {
-			resolve(res);
-		})
-	});
-}
-
-/**
- * @清除历史记录
- * @param:userId 用户ID
- */
-export function clearSearchHistory(params) {
-	return new Promise(function(resolve,reject) {
-		request.lodingGet("/product/searchHistory/delete",params, res => {
-			if(res.code == 0){
-				resolve(res);
-			}else{
-				reject(res)
-			}
-		})
-	});
-}
-/**
- * @商品详情
- * @param:productID 商品ID
- */
-export function queryProductDetils(params) {
-	return new Promise(function(resolve,reject) {
-		request.get("/product/details",params, res => {
-			if(res.code == 0){
-				resolve(res);
-			}else{
-				reject(res)
-			}
-		})
-	});
-}
-/**
- * @商品相关推荐
- * @param:productID 商品ID
- */
-export function queryRelevant(params) {
-	return new Promise(function(resolve,reject) {
-		request.get("/product/relevant",params, res => {
-			if(res.code == 0){
-				resolve(res);
-			}else{
-				reject(res)
-			}
-		})
-	});
-}
-/**
- * @商品评价
- * @param:productID 商品ID
- */
-export function queryEvaluate(params) {
-	return new Promise(function(resolve,reject) {
-		request.get("/product/evaluate",params, res => {
-			if(res.code == 0){
-				resolve(res);
-			}else{
-				reject(res)
-			}
-		})
-	});
-}
-/**
- * @常用商品,精品推荐,热门推荐列表
- * @param:preferredFlag 新品上线(001) 优惠商品(010) 常用商品(100),,
- * @param:pageNum 页码
- * @param:pageSize 每页条数
- */
-export function queryPreferred(params) {
-	return new Promise(function(resolve,reject) {
-		request.get("/product/preferred",params, res => {
-			if(res.code == 0){
-				resolve(res);
-			}else{
-				reject(res)
-			}
-		})
-	});
-}
-/**
- * @再次购买商品列表
- * @param:userId  用户ID
- * @param:pageNum 页码
- * @param:pageSize 每页条数
- */
-export function queryAgaingoodslist(params) {
-	return new Promise(function(resolve,reject) {
-		request.lodingGet("/repeat/buyAgain",params, res => {
-			if(res.code == 0){
-				resolve(res);
-			}else{
-				reject(res)
-			}
-		})
-	});
-}
-/**
- * @加入购物车
- * @param:
- * @param:pageNum 页码
- * @param:pageSize 每页条数
- */
-export function addCart(params) {
-	return new Promise(function(resolve,reject) {
-		request.get("/product//preferred",params, res => {
-			if(res.code == 0){
-				resolve(res);
-			}else{
-				reject(res)
-			}
-		})
-	});
-}
-

+ 0 - 401
api/seller.js

@@ -1,401 +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'
-
-/**
- *@协销微信授权登录
- *@param code 微信Code
- */
-export function sellerWxLogin(params) {
-	return new Promise(function(resolve,reject) {
-		request.post('/seller/wxLogin',params, true,res => {
-			if(res.code == 0){
-				resolve(res)
-			}else{
-				reject(res)
-			}
-		})
-	})
-}
-/**
- *@协销登录
- *@param mobile 手机号
- *@param password 密码
- */
-export function sellerLogin(params) {
-	return new Promise(function(resolve,reject) {
-		request.post('/seller/login',params, true,res => {
-			resolve(res)
-		})
-	})
-}
-
-/**
- *@协销账户中心
- *@param userID 协销ID
- */
-export function getSellerHome(params) {
-	return new Promise(function(resolve,reject) {
-		request.get('/seller/home',params,res => {
-			if(res.code == 0){
-				resolve(res)
-			}else{
-				reject(res)
-			}
-		})
-	})
-}
-/**
- *@协销拉机构上线
- *@param userID 协销ID
- */
-export function sellerClubRegister(params) {
-	return new Promise(function(resolve,reject) {
-		request.post('/seller/club/register',params,true,res => {
-			if(res.code == 0){
-				resolve(res)
-			}else{
-				reject(res)
-			}
-		})
-	})
-}
-/**
- *@协销拉机构上线检测手机号和邮箱
- *@param mobileOrEmail 手机号和邮箱
- */
-export function sellerClubCheck(params) {
-	return new Promise(function(resolve,reject) {
-		request.post('/seller/club/check',params,true,res => {
-			if(res.code == 0){
-				resolve(res)
-			}else{
-				reject(res)
-			}
-		})
-	})
-}
-/**
- *@协销修改机构资料
- *@param userID 协销ID
- */
-export function sellerClubUpdate(params) {
-	return new Promise(function(resolve,reject) {
-		request.post('/seller/club/update',params,true,res => {
-			if(res.code == 0){
-				resolve(res)
-			}else{
-				reject(res)
-			}
-		})
-	})
-}
-/**
- *@协销机构列表
- *@param name 	  机构名字关键字(搜索用)
- *@param pageNum  页码
- *@param pageSize 条数
- *@param spId 	  协销ID
- *@param status   机构状态
- */
-export function getSellerClubList(params) {
-	return new Promise(function(resolve,reject) {
-		request.lodingGet('/seller/club/list',params,res => {
-			if(res.code == 0){
-				resolve(res)
-			}else{
-				reject(res)
-			}
-		})
-	})
-}
-/**
- *@协销机构列表
- *@param name 	  机构名字关键字(搜索用)
- *@param pageNum  页码
- *@param pageSize 条数
- */
-export function getFindAllClubList(params) {
-	return new Promise(function(resolve,reject) {
-		request.lodingGet('/seller/findAllClub',params,res => {
-			if(res.code == 0){
-				resolve(res)
-			}else{
-				reject(res)
-			}
-		})
-	})
-}
-
-/**
- *@协销订单列表(搜索订单)
- *@param listType 订单类型
- *@param orderNo  订单号
- *@param pageNum  页码
- *@param pageSize 条数
- *@param serviceProviderId 协销ID
- */
-export function getSellerOrderList(params) {
-	return new Promise(function(resolve,reject) {
-		request.lodingGet('/seller/order/list',params,res => {
-			if(res.code == 0){
-				resolve(res)
-			}else{
-				reject(res)
-			}
-		})
-	})
-}
-/**
- *@协销下机构订单列表
- *@param clubID   机构ID
- *@param pageNum  页码
- *@param pageSize 条数
- */
-export function getSellerClubOrderList(params) {
-	return new Promise(function(resolve,reject) {
-		request.lodingGet('/seller/clubOrder',params,res => {
-			if(res.code == 0){
-				resolve(res)
-			}else{
-				reject(res)
-			}
-		})
-	})
-}
-/**
- *@协销帮机构下单购物车商品加减数量
- *@param clubId 机构的clubId
- *@param serviceProviderId 	协销ID
- */
-export function sellerAddProductNum(params) {
-	return new Promise(function(resolve,reject) {
-		request.post('/seller/addProductNum',params,true,res => {
-			if(res.code == 0){
-				resolve(res)
-			}else{
-				reject(res)
-			}
-		})
-	})
-}
-/**
- *@协销帮机构下单获取购物车数量
- *@param clubId 机构的clubId
- *@param serviceProviderId 	协销ID
- */
-export function getSellerProductNum(params) {
-	return new Promise(function(resolve,reject) {
-		request.get('/seller/productNum',params,res => {
-			if(res.code == 0){
-				resolve(res)
-			}else{
-				reject(res)
-			}
-		})
-	})
-}
-/**
- *@协销帮机构下单购物车删除商品
- *@param sellerCartIds 	购物车ID
- */
-export function deleteSellerCart(params) {
-	return new Promise(function(resolve,reject) {
-		request.post('/seller/deleteSellerCart',params,true,res => {
-			if(res.code == 0){
-				resolve(res)
-			}else{
-				reject(res)
-			}
-		})
-	})
-}
-/**
- *@协销帮机构下单去结算初始化
- *@param clubId 	机构ID
- *@param serviceProviderId 协销ID
- *@param productIds 	商品ID
- */
-export function sellerSettlement(params) {
-	return new Promise(function(resolve,reject) {
-		request.post('/seller/settlement',params,true,res => {
-			if(res.code == 0){
-				resolve(res)
-			}else{
-				reject(res)
-			}
-		})
-	})
-}
-
-/**
- *@协销帮机构下单提交订单
- *@param orderSource 2,//提交来源
- *@param clubUserId//机构UserID
- *@param cartType	//从购物车提交
- *@param serviceProviderId//帮下单协销ID
- *@param addressId//地址ID
- *@param orderInfo//商品信息
- *@param payInfo//订单信息
- *@param orderInvoice//发票信息
- */
-export function sellerCreateOrderSubmit(params) {
-	return new Promise(function(resolve,reject) {
-		request.post('/seller/order/submit',params,true,res => {
-			resolve(res)
-		})
-	})
-}
-
-
-/**
- *@协销帮机构下单商品搜索
- *@param clubUserId 机构的userID
- *@param pageNum 	页码
- *@param pageSize 	条数
- *@param searchWord 搜索关键词
- */
-export function getSellerProduct(params) {
-	return new Promise(function(resolve,reject) {
-		request.lodingGet('/seller/product/search',params,res => {
-			if(res.code == 0){
-				resolve(res)
-			}else{
-				reject(res)
-			}
-		})
-	})
-}
-/**
- *@协销帮机构下单组合商品搜索
- *@param clubUserId 机构的userID
- *@param pageNum 	页码
- *@param pageSize 	条数
- *@param searchWord 搜索关键词
- */
-export function getcombinationProduct(params) {
-	return new Promise(function(resolve,reject) {
-		request.lodingGet('/seller/combinationProduct/search',params,res => {
-			if(res.code == 0){
-				resolve(res)
-			}else{
-				reject(res)
-			}
-		})
-	})
-}
-/**
- *@协销商品搜索
- *@param clubId 会所的ID
- *@param serviceProviderId 页码 
- */
-export function getSellerShoppingInfo(params) {
-	return new Promise(function(resolve,reject) {
-		request.get('/seller/shoppingInfo',params,res => {
-			if(res.code == 0){
-				resolve(res)
-			}else{
-				reject(res)
-			}
-		})
-	})
-}
-/**
- *@协销购物车
- *@param clubId 会所ID
- *@param serviceProviderId 页码
- */
-export function shoppingCartAddCart(params) {
-	return new Promise(function(resolve,reject) {
-		request.post('/seller/addCart',params, true,res => {
-			if(res.code == 0){
-				resolve(res)
-			}else{
-				reject(res)
-			}
-		})
-	})
-}
-// 组合商品添加购物车
-export function getCartAddCart(params) {
-	return new Promise(function(resolve,reject) {
-		request.post('/seller/batchAddCart',params, true,res => {
-			if(res.code == 0){
-				resolve(res)
-			}else{
-				reject(res)
-			}
-		})
-	})
-}
-
-/**
- *@协销购物车删除商品
- *@param clubId 会所ID
- *@param serviceProviderId 页码
- */
-export function shoppingCartDelete(params) {
-	return new Promise(function(resolve,reject) {
-		request.post('/shoppingCart/delete',params, true,res => {
-			if(res.code == 0){
-				resolve(res)
-			}else{
-				reject(res)
-			}
-		})
-	})
-}
-/**
- *@协销购物车删除商品
- *@param clubId 会所ID
- *@param serviceProviderId 页码
- */
-export function getshoppingCartInfo(params) {
-	return new Promise(function(resolve,reject) {
-		request.lodingGet('/shoppingCart/shoppingInfo',params,res => {
-			if(res.code == 0){
-				resolve(res)
-			}else{
-				reject(res)
-			}
-		})
-	})
-}
-/**
- *@协销购物车商品增减
- *@param clubId 会所ID
- *@param serviceProviderId 页码
- */
-export function shoppingCartUpdate(params) {
-	return new Promise(function(resolve,reject) {
-		request.post('/shoppingCart/update',params,true,res => {
-			if(res.code == 0){
-				resolve(res)
-			}else{
-				reject(res)
-			}
-		})
-	})
-}
-/**
- *@协销邀请运营人员
- *@param userID  机构userID
- */
-export function sellerBindingOperation(params) {
-	return new Promise(function(resolve,reject) {
-		request.post('/seller/bindingOperation',params,true,res => {
-			if(res.code == 0 || res.code == 4){
-				resolve(res)
-			}else{
-				reject(res)
-			}
-		})
-	})
-}
-
-

+ 0 - 409
api/use.js

@@ -1,409 +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 quickConsultation(params) {
-	return new Promise(function(resolve,reject) {
-		request.post('/club/advisory',params,false, res => {
-			if(res.code == 0 ){
-				resolve(res)
-			}else{
-				reject(res)
-			}
-		})
-	})
-}
-/**
- *机构普通注册
- */
-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 organizationRegister(params) {
-	return new Promise(function(resolve,reject) {
-		request.post('/club/upgrade',params,true, res => {
-			if(res.code == 0){
-				resolve(res)
-			}else{
-				reject(res)
-			}
-		})
-	})
-}
-/**
- *机构修改资料
- */
-export function organizationUpdateModifyInfo(params) {
-	return new Promise(function(resolve,reject) {
-		request.lodingGet('/user/club/applicationData',params, res => {
-			if(res.code == 0){
-				resolve(res)
-			}else{
-				reject(res)
-			}
-		})
-	})
-}
-/**
- *机构提交修改申请信息
- */
-export function organizationModifyUpdate(params) {
-	return new Promise(function(resolve,reject) {
-		request.post('/user/club/updateCompanyInfo',params,true,res => {
-			if(res.code == 0){
-				resolve(res)
-			}else{
-				reject(res)
-			}
-		})
-	})
-}
-/**
- *保存机构修改信息
- */
-export function organizationUpdate(params) {
-	return new Promise(function(resolve,reject) {
-		request.post('/operation/modifiedData',params,true,res => {
-			if(res.code == 0){
-				resolve(res)
-			}else{
-				reject(res)
-			}
-		})
-	})
-}
-/**
- *机构登录
- * @param mobileOrEmail 邮箱或手机
- * @param password	密码
- * @param source 来源 PC与小程序传:'www'crm就传'crm'
- */
-export function organizationLogin(params) {
-	return new Promise(function(resolve,reject) {
-		request.post('/user/login',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 invitationCodeLogin(params) {
-	return new Promise(function(resolve,reject) {
-		request.post('/club/invitationCode',params,true, res => {
-			if(res.code == 0 || res.code == 4){
-				resolve(res)
-			}else{
-				reject(res)
-			}
-		})
-	})
-}
-/**
- *获取个人中心信息
- */
-export function personalInfo(params) {
-	return new Promise(function(resolve,reject) {
-		request.lodingGet('/personalCenter/myCentre',params, res => {
-			resolve(res)
-		})
-	})
-}
-/**
- *取消提示
- * userId
- */
-export function cancelPrompt(params) {
-	return new Promise(function(resolve,reject) {
-		request.post('/personalCenter/cancelPrompt',params,false, res => {
-			if(res.code == 0){
-				resolve(res)
-			}else{
-				reject(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 queryHomeInfo(params) {
-	return new Promise(function(resolve,reject) {
-		request.get('/home/modules',{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 - 186
api/utils.js

@@ -1,186 +0,0 @@
-/**
- *@des 公共接口
- *@author zhengjinyi
- *@date 2020/03/19 14:56:57
- *@param registerByPass
- */
-import requestUrl from '@/common/config/config.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)
-			}
-		})
-	});
-}
-/**
- *获取协议
- */
-export function queryProtocol() {
-	return new Promise(function(resolve,reject) {
-		request.get("/club/protocol",{}, res => {
-			if(res.code == 0){
-				resolve(res);
-			}else{
-				reject(res)
-			}
-		})
-	});
-}
-/**
- *获取图形验证码
- * platformType:小程序 2  WWW 0  CRM 1 
- */
-export function getImageCode() {
-	return new Promise(function(resolve,reject) {
-		request.get("/user/getImgVerifyCode",{platformType:2}, 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 getMobileCode(params) {
-	return new Promise(function(resolve,reject) {
-		request.get("/user/activateCodeByReg",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,

+ 51 - 4
common/config/authorize.js

@@ -77,11 +77,14 @@ const getCode = provider => {
 				} else {
 					reject("获取code失败") 
 					uni.navigateTo({
-						url:'/pages/tabBar/home/home'
+						url:'/pages/tabBar/home/index'
 					})
 				}
             },
-			fail:function(){ reject("获取code失败")}
+			fail:function(error){ 
+				console.log('获取code失败',)
+				reject("获取code失败")
+			}
         });
     })
 }
@@ -96,7 +99,8 @@ const getSetting = function() {
                 if(authSetting['scope.userInfo']===false){resolve(0);return;}//拒绝授权
                 resolve(2) //2未操作
             },
-            fail:function() { 
+            fail:function(error) { 
+				console.log(error)
 				reject("获取用户授权失败") 
 			}
         })
@@ -117,10 +121,53 @@ const getUserInfo = (provider)=>{
 				}
 			}
 			,fail: (error) => {
+				console.log('获取用户信息失败')
 				reject(0); //如果用户拒绝过授权 直接走fail
 			}
 		});
 	})
 }
+// 获取用户登录状态
+const checkLogin = () => {
+	return new Promise((resolve, reject) => {
+		uni.checkSession({
+			success() {
+				console.log('登录成功')
+				resolve(1)
+			},
+			fail(error) {
+				console.log('获取用户信息失败',error)
+				reject(0)
+			}
+		})
+	})
+}
 
-export default {getProvider,getSetting,checkSessionKey,getCode,login,getUserInfo}
+// 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,
+	checkSessionKey,
+	getCode,
+	login,
+	getUserInfo,
+	checkLogin,
+	getUserProfile
+}

+ 160 - 58
common/config/caimeiApi.js

@@ -3,7 +3,7 @@
  * @Author Zhengjingyi
  * @Action 全局公共方法
  */
-import requestUrl from './config.js'
+import requestUrl from '@/services/ajax.env.js'
 const caimeiApi = {
 	/**
 	 * @封装公共get数据请求方法无加载动画
@@ -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,
@@ -183,6 +183,105 @@ const caimeiApi = {
 			})
 		}
 	},
+	navigateToGoods:function({type,value,id,lType} = {}){
+	// 跳转到列表页
+		if(lType=='4'){
+			const pages = getCurrentPages()
+			const prevPage = pages[pages.length-2]
+			prevPage.refresh = true
+			prevPage.listData = {
+				type: type,
+				from: value,
+				id: id
+			}
+			uni.navigateBack({
+				delta: 1
+			})
+		}else{
+			uni.navigateTo({
+				url:`/pages/goods/goods-classify?type=${type}&from=${value}&id=${id}`
+			})
+		}
+	},
+	FlooryNavigateTo:function(pros){
+		if(pros.listType == 1){
+			if(pros.product.productCategory == '1'){
+				uni.navigateTo({
+				  	url:`/pages/goods/product?id=${pros.product.productId}`
+				})
+			}else{
+				uni.navigateTo({
+				  	url:`/pages/second/product/product-details?id=${pros.product.productId}`
+				})
+			}
+		}else{
+			/**
+			 * 页面跳转类型
+			 * 1、二级页面,2、搜索项目仪器,3、直播页面,4、自由页面,5、商品详情,6、仪器项目详情,7、供应商主页
+			 * 8、专题活动页,9、二手市场介绍,10、二手商品列表,11、二手商品发布,12、商品搜索,13、信息详情
+			 * 14、品牌招商介绍页,15、维修保养介绍页,16、首页,17、注册页,18、信息中心,19、供应商列表
+			 **/
+			if(pros.linkType){
+				console.log(pros.linkType)
+				const typeMap = {
+				 	1:`/pages/goods/goods-instrument?linkId=${pros.linkParam.id}`,
+				 	2:`/pages/goods/instrument-details?id=${pros.linkParam.id}`,
+				 	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:`/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]
+				uni.navigateTo({
+				  	url:url
+				})
+			}
+		}
+	},
+	BannerNavigateTo:function(linkType,linkId,linkHref,keyword){//楼层跳转判断
+		if(linkType){
+			const typeMap = {
+				1:`/pages/goods/goods-instrument?linkId=${linkId}`,
+				2:`/pages/goods/instrument-details?id=${linkId}`,
+				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]
+			uni.navigateTo({
+			 	url:url
+			})
+		}
+	},
 	navigateTo:function(url){
 		//路由跳转:页面之间路由跳转
 		uni.navigateTo({
@@ -202,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  
@@ -211,8 +310,8 @@ const caimeiApi = {
 	},
 	getWindowHeight:function(){
 		// 获取窗口高度
-		const {windowHeight, pixelRatio} = wx.getSystemInfoSync();
-		return windowHeight;
+		const {windowHeight, pixelRatio} = wx.getSystemInfoSync()
+		return windowHeight
 	},
 	adaptRichTextImg:function(res){
 		/**
@@ -221,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 = {
@@ -256,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}`
 	}
 }
 
@@ -290,9 +389,12 @@ module.exports = {
 	getStorage: caimeiApi.getStorage,
 	getComStorage: caimeiApi.getComStorage,
 	navToListPage: caimeiApi.navToListPage,
+	navigateToGoods: caimeiApi.navigateToGoods,
 	getWindowHeight: caimeiApi.getWindowHeight,
 	adaptRichTextImg: caimeiApi.adaptRichTextImg,
 	getStorageAddressKey: caimeiApi.getStorageAddressKey,
 	regexSets: caimeiApi.regexSets,
-	timestampToTime: caimeiApi.timestampToTime
-};
+	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,

+ 0 - 13
common/config/config.js

@@ -1,13 +0,0 @@
-let URL_CONFIG = ""
-if(process.env.NODE_ENV === 'development'){
-    // 开发环境
-	// URL_CONFIG = 'http://192.168.1.33:8008'	 //俊俊联调地址
-	// URL_CONFIG = 'http://192.168.1.40:8008'	 //裴裴联调地址
-	// URL_CONFIG = 'http://192.168.1.20:8008'	 //超超联调地址
-    URL_CONFIG = 'https://spi-b.caimei365.com'	 //采美测试地址
-	// URL_CONFIG = 'https://spi.caimei365.com'
-}else{
-    // 生产环境
-    URL_CONFIG = 'https://spi.caimei365.com'
-}
-export default URL_CONFIG

+ 49 - 44
common/config/wxLogin.js

@@ -1,52 +1,57 @@
 import store from '@/store/index.js'
 import authorize from '@/common/config/authorize.js'
-import { userInfoLogin } from "@/api/use.js"
+import ajaxService from '@/services/ajax.service.js'
+import UserService from '@/services/user.service'
+
+const newUserService = new UserService(ajaxService)
+
 // 根据微信的code获取用户登录状态:1已登录过 -1未登录过
-const wxLoginAuthorize = function(){
-	authorize.getCode('weixin').then(wechatcode =>{
-		authorize.getUserInfo('weixin').then(wxResponse =>{
-			userInfoLogin({code:wechatcode,encryptedData:wxResponse.encryptedData,iv:wxResponse.iv}).then(response =>{
-				store.commit('updateStatus',response.data)
-				store.commit('login',response.data);
-				store.commit('wxLogin',wxResponse.userInfo);
-				uni.setStorageSync('token',response.data.token)
-				uni.removeStorageSync('sessionid')
-				uni.setStorageSync('sessionid','JSESSIONID='+response.data.sessionId)
-			}).catch(error =>{
-				uni.removeStorageSync('sessionid')
-				uni.setStorageSync('sessionid','JSESSIONID='+error.data)
-				store.commit('logout',error.data)
-				store.commit('updateStatus',error.data)
-				store.commit('wxLogin',wxResponse.userInfo);
-			})
-		})
+const wxLoginAuthorize = async function(){
+	const wechatCode = await authorize.getCode('weixin');// 根据微信的code获取用户登录状态:1已登录过 -1未登录过
+	const getUserInfo = await authorize.getUserInfo('weixin');
+	newUserService.UserLoginAuthApplets({ 
+		code:wechatCode,
+		encryptedData:getUserInfo.encryptedData,
+		iv:getUserInfo.iv
+	})
+	.then(response =>{
+		store.commit('updateStatus',response.data)
+		store.commit('login',response.data);
+		uni.setStorageSync('token',response.data.token)
+		uni.setStorageSync('unionId',response.data.unionId)
+	})
+	.catch(error =>{
+		uni.setStorageSync('unionId',error.data.unionId)
+		store.commit('logout',error.data)
+		store.commit('updateStatus',error.data)
 	})
 }
-const wxLoginQuick = function(){// 根据微信的code获取用户登录状态:1已登录过 -1未登录过跳转
-		authorize.getCode('weixin').then(wechatcode =>{
-			// 根据微信的code获取用户登录状态:1已登录过 -1未登录过
-			authorize.getUserInfo('weixin').then(wxResponse =>{
-				userInfoLogin({code:wechatcode,encryptedData:wxResponse.encryptedData,iv:wxResponse.iv}).then(response =>{
-					console.log(response)
-					store.commit('updateStatus',response.data)
-					store.commit('login',response.data);
-					store.commit('wxLogin',wxResponse.userInfo);
-					uni.setStorageSync('token',response.data.token)
-					uni.removeStorageSync('sessionid')
-					uni.setStorageSync('sessionid','JSESSIONID='+response.data.sessionId)
-					if(response.data.userIdentity ==1){
-						uni.navigateTo({url:'/seller/pages/index/index'})
-					}else{
-						uni.switchTab({url:'/pages/tabBar/user/user'})
-					}
-				}).catch(error =>{
-					uni.removeStorageSync('sessionid')
-					uni.setStorageSync('sessionid','JSESSIONID='+error.data)
-					store.commit('logout',error.data)
-					store.commit('updateStatus',error.data)
-					store.commit('wxLogin',wxResponse.userInfo);
-				})
-			})
+const wxLoginQuick = async function(){// 根据微信的code获取用户登录状态:1已登录过 -1未登录过跳转
+		const wechatCode = await authorize.getCode('weixin');// 根据微信的code获取用户登录状态:1已登录过 -1未登录过
+		const getUserInfo = await authorize.getUserInfo('weixin');
+		newUserService.UserLoginAuthApplets({ 
+			code:wechatCode,
+			encryptedData:getUserInfo.encryptedData,
+			iv:getUserInfo.iv
+		})
+		.then(response =>{
+			console.log(response)
+			store.commit('updateStatus',response.data)
+			store.commit('login',response.data);
+			uni.setStorageSync('token',response.data.token)
+			uni.setStorageSync('unionId',response.data.unionId)
+			if(response.data.userIdentity ==1){
+				uni.navigateTo({url:'/pages/seller/index/index'})
+			}else if(response.data.userIdentity === 3){
+				uni.navigateTo({url:'/pages/supplier/index/index'})
+			}else{
+				uni.switchTab({url:'/pages/tabBar/user/user'})
+			}
+		})
+		.catch(error =>{
+			uni.setStorageSync('unionId',error.data.unionId)
+			store.commit('logout',error.data)
+			store.commit('updateStatus',error.data)
 		})
 }
 export default{

BIN
common/css/HelveticaNeue.ttf


+ 8 - 3
common/css/common.scss

@@ -96,7 +96,7 @@ button::after{
 		line-height: 44rpx;
 	}
 	.login-btn{
-		width: 702rpx;
+		width: 600rpx;
 		height: 88rpx;
 		font-size: $font-size-28;
 		line-height: 88rpx;
@@ -104,7 +104,7 @@ button::after{
 		margin: 0 auto;
 		text-align: center;
 		background: $btn-confirm;
-		border-radius: 14rpx;
+		border-radius: 44rpx;
 		margin-top: 40rpx;
 	}
 }
@@ -230,6 +230,11 @@ button::after{
 	}
 }
 /*富文本样式调整*/
+.product-rich-text{
+	rich-text.h4,rich-text.p,rich-text.h2{
+		padding: 0 24rpx;
+	}
+}
 .rich-text-temp {
 	rich-text.div, rich-text.h4, rich-text.p {
 		line-height: 58rpx;
@@ -274,7 +279,7 @@ button::after{
 	color: #FFFFFF;
 	text-align: center;
 	background: $btn-confirm;
-	border-radius: 14rpx;
+	border-radius: 44rpx;
 }
 // 小红点
 .uni-badge--small {

+ 366 - 134
common/css/iconfont.scss

@@ -1,148 +1,224 @@
-
-/*全局公共样式和字体图标*/
 @font-face {
-	font-family: iconfont;
-	font-weight: normal;
-	font-style: normal;
-	src: url('https://at.alicdn.com/t/font_1519039_mkxy06756m.ttf') format('truetype');
+  font-family: "iconfont"; /* Project id 1519039 */
+  src: url('//at.alicdn.com/t/font_1519039_jpci2izhta9.woff2?t=1622614721342') format('woff2'),
+       url('//at.alicdn.com/t/font_1519039_jpci2izhta9.woff?t=1622614721342') format('woff'),
+       url('//at.alicdn.com/t/font_1519039_jpci2izhta9.ttf?t=1622614721342') format('truetype');
 }
+
 .iconfont {
-	font-family: "iconfont" !important;
-	font-size: 16px;
-	font-style: normal;
-	-webkit-font-smoothing: antialiased;
-	-moz-osx-font-smoothing: grayscale;
+  font-family: "iconfont" !important;
+  font-size: 16px;
+  font-style: normal;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
 }
-.icon-xingxing:before {
-  content: "\e870";
+
+.icon-zichan:before {
+  content: "\e72c";
 }
 
-.icon-icon-cross-squre:before {
-  content: "\e668";
+.icon-daizhucejigou:before {
+  content: "\e72b";
 }
 
-.icon-saomafukuan-:before {
-  content: "\e645";
+.icon-shangpin:before {
+  content: "\e727";
 }
 
-.icon-icon-test:before {
-  content: "\e604";
+.icon-duigou:before {
+  content: "\e659";
 }
 
-.icon-xiangxia1:before {
-  content: "\e771";
+.icon-gerenwangyinzhifu:before {
+  content: "\e6fe";
 }
 
-.icon-gou:before {
-  content: "\e628";
+.icon-qiyewangyinzhifu:before {
+  content: "\e6fd";
 }
 
-.icon-gougou:before {
-  content: "\e6a3";
+.icon-shangxiajiantou:before {
+  content: "\e6c7";
 }
 
-.icon-weixinzhifu:before {
-  content: "\e62a";
+.icon-shaixuan1:before {
+  content: "\e692";
 }
 
-.icon-yinlianzhifu:before {
-  content: "\e62d";
+.icon-shaixuan:before {
+  content: "\e6fa";
 }
 
-.icon-kefunv:before {
-  content: "\e672";
+.icon-xiangxia:before {
+  content: "\e6f9";
 }
 
-.icon-xiangshangjiantou:before {
-  content: "\e661";
+.icon-xiangshang:before {
+  content: "\e6f8";
 }
 
-.icon-dingdanxuanzhong:before {
-  content: "\e6c2";
+.icon-jieshu:before {
+  content: "\e6f6";
 }
 
-.icon-xieboke:before {
-  content: "\e629";
+.icon-weikaishi:before {
+  content: "\e6f4";
 }
 
-.icon-shenhebutongguo:before {
-  content: "\e624";
+.icon-resou:before {
+  content: "\e6f3";
 }
 
-.icon-shenhetongguo:before {
-  content: "\e626";
+.icon-bangzhuzhongxin:before {
+  content: "\e6f2";
 }
 
-.icon-lishidingdan:before {
-  content: "\e627";
+.icon-zaicigoumai:before {
+  content: "\e6ee";
 }
 
-.icon-shouyeyong:before {
-  content: "\e65e";
+.icon-shengjihuiyuanjigou:before {
+  content: "\e6ec";
 }
 
-.icon-wenhao:before {
-  content: "\e671";
+.icon-lajigoushangxian:before {
+  content: "\e6ea";
 }
 
-.icon-dkw_jine:before {
-  content: "\e625";
+.icon-bangjigouxiadan:before {
+  content: "\e6e7";
 }
 
-.icon-aixin:before {
-  content: "\e663";
+.icon-jigouliebiao:before {
+  content: "\e6e6";
 }
 
-.icon-qian1:before {
-  content: "\e62c";
+.icon-yaoqingyunyingrenyuan:before {
+  content: "\e6e5";
 }
 
-.icon-iconfontguanbi:before {
-  content: "\e623";
+.icon-zhanghuyuemingxi1:before {
+  content: "\e6e4";
 }
 
-.icon-iconfontweixin:before {
-  content: "\e635";
+.icon-shanchu3:before {
+  content: "\e6e0";
 }
 
-.icon-xiangxiajiantou:before {
-  content: "\e62b";
+.icon-gou1:before {
+  content: "\e6df";
 }
 
-.icon-shuaxin:before {
-  content: "\e622";
+.icon-shouhuodizhiguanli:before {
+  content: "\e6de";
 }
 
-.icon-yanjing_xianshi_o:before {
-  content: "\ebcc";
+.icon-jigouziliao:before {
+  content: "\e6dd";
 }
 
-.icon-yanjing_yincang_o:before {
-  content: "\ebcd";
+.icon-zhanghuyuemingxi:before {
+  content: "\e6dc";
 }
 
-.icon-shanchu1:before {
-  content: "\e64b";
+.icon-juxingweigouxuan:before {
+  content: "\e6d6";
+}
+
+.icon-yinlian:before {
+  content: "\e6d5";
+}
+
+.icon-weixinzhifu1:before {
+  content: "\e6d4";
+}
+
+.icon-zhifubao:before {
+  content: "\e6d3";
+}
+
+.icon-bianji1:before {
+  content: "\e610";
+}
+
+.icon-weixinzhifu:before {
+  content: "\e62a";
+}
+
+.icon-gouxuan:before {
+  content: "\e63c";
+}
+
+.icon-gouwuchebeifenx:before {
+  content: "\e60d";
+}
+
+.icon-xiangxia1:before {
+  content: "\e771";
+}
+
+.icon-gantanhao-yuankuang:before {
+  content: "\e763";
+}
+
+.icon-shuoming:before {
+  content: "\e6ad";
 }
 
 .icon-iconfonticonfontsousuo1:before {
   content: "\e62f";
 }
 
-.icon-vertical_line:before {
-  content: "\e63a";
+.icon-shouyeyong:before {
+  content: "\e65e";
+}
+
+.icon-shouyebeifenx:before {
+  content: "\e608";
+}
+
+.icon-tishi1:before {
+  content: "\e6a1";
+}
+
+.icon-shouhuodizhi1:before {
+  content: "\e61c";
 }
 
 .icon-fanhui:before {
   content: "\e621";
 }
 
-.icon-shouye:before {
-  content: "\e638";
+.icon-xiayibu:before {
+  content: "\e60e";
+}
+
+.icon-shangyibu:before {
+  content: "\e609";
+}
+
+.icon-jianhao:before {
+  content: "\eaf5";
+}
+
+.icon-jiahao:before {
+  content: "\eaf3";
+}
+
+.icon-shuaxin1:before {
+  content: "\e622";
+}
+
+.icon-weigouxuan:before {
+  content: "\e641";
+}
+
+.icon-gouxuanl:before {
+  content: "\e618";
 }
 
-.icon-shouyebeifen:before {
-  content: "\e620";
+.icon-gou:before {
+  content: "\e628";
 }
 
 .icon-web_xiangxiazhankai:before {
@@ -153,60 +229,252 @@
   content: "\e623e";
 }
 
-.icon-dingdandibu:before {
-  content: "\e61f";
+.icon-saomafukuan-:before {
+  content: "\e645";
 }
 
-.icon-tianjiadizhi:before {
-  content: "\e617";
+.icon-xingxing:before {
+  content: "\e870";
+}
+
+.icon-yinlianzhifu:before {
+  content: "\e62d";
+}
+
+.icon-vertical_line:before {
+  content: "\e63a";
+}
+
+.icon-dui:before {
+  content: "\e616";
+}
+
+.icon-iconfontweixin:before {
+  content: "\e635";
+}
+
+.icon-xieboke:before {
+  content: "\e629";
+}
+
+.icon-qian1:before {
+  content: "\e62c";
+}
+
+.icon-aixin:before {
+  content: "\e663";
 }
 
 .icon-liuyan:before {
   content: "\e619";
 }
 
-.icon-genghuan:before {
-  content: "\e61a";
+.icon-shangchuantupian:before {
+  content: "\e6d2";
+}
+
+.icon-xiangshangshouqi:before {
+  content: "\e6d0";
+}
+
+.icon-xiangxiazhankai:before {
+  content: "\e6cf";
+}
+
+.icon-gengduo:before {
+  content: "\e6ce";
+}
+
+.icon-shijian1:before {
+  content: "\e6cd";
+}
+
+.icon-fubiao:before {
+  content: "\e6cc";
+}
+
+.icon-liulanguo:before {
+  content: "\e6cb";
+}
+
+.icon-chuangzuozhe:before {
+  content: "\e6ca";
+}
+
+.icon-sousuo:before {
+  content: "\e6c9";
+}
+
+.icon-yixiajia:before {
+  content: "\e6c8";
+}
+
+.icon-yishangjia:before {
+  content: "\e6c6";
+}
+
+.icon-quanbushangpin:before {
+  content: "\e6c5";
+}
+
+.icon-wodedingdan:before {
+  content: "\e6c4";
+}
+
+.icon-yunyingrenyuanguanli:before {
+  content: "\e6c3";
+}
+
+.icon-wodeziliao:before {
+  content: "\e6c1";
+}
+
+.icon-zhanghushezhi:before {
+  content: "\e6c0";
+}
+
+.icon-lianxiwomen:before {
+  content: "\e6bf";
+}
+
+.icon-guanyuwomen:before {
+  content: "\e6be";
+}
+
+.icon-shuaxin:before {
+  content: "\e6bd";
 }
 
-.icon-yunfeishuoming:before {
-  content: "\e61b";
+.icon-tishi:before {
+  content: "\e6bc";
 }
 
 .icon-shouhuodizhi:before {
-  content: "\e61c";
+  content: "\e6bb";
 }
 
-.icon-zhankai:before {
-  content: "\e61d";
+.icon-jinrudianpu:before {
+  content: "\e6ba";
 }
 
-.icon-shouqi:before {
-  content: "\e61e";
+.icon-fanhui1:before {
+  content: "\e6b9";
 }
 
-.icon-weigouxuan:before {
-  content: "\e641";
+.icon-xiangyou:before {
+  content: "\e6b8";
 }
 
-.icon-gouxuanl:before {
-  content: "\e618";
+.icon-wuyoutuihuo:before {
+  content: "\e6b7";
 }
 
-.icon-gouxuan:before {
-  content: "\e63c";
+.icon-shanchu1:before {
+  content: "\e6b6";
 }
 
-.icon-jiahao:before {
-  content: "\eaf3";
+.icon-jiagexiangliao:before {
+  content: "\e6b5";
 }
 
-.icon-jianhao:before {
-  content: "\eaf5";
+.icon-yixuanze:before {
+  content: "\e6b4";
 }
 
-.icon-dui:before {
-  content: "\e616";
+.icon-weixuanze:before {
+  content: "\e6b3";
+}
+
+.icon-jigou:before {
+  content: "\e6b2";
+}
+
+.icon-zhengpin:before {
+  content: "\e6b1";
+}
+
+.icon-gongyingshang:before {
+  content: "\e6b0";
+}
+
+.icon-kejian1:before {
+  content: "\e6ac";
+}
+
+.icon-bukejian:before {
+  content: "\e6aa";
+}
+
+.icon-dizhi1:before {
+  content: "\e6a7";
+}
+
+.icon-shijian:before {
+  content: "\e6a6";
+}
+
+.icon-zhiding:before {
+  content: "\e6a5";
+}
+
+.icon-zixunrexian:before {
+  content: "\e6a4";
+}
+
+.icon-fenxiang1:before {
+  content: "\e6a2";
+}
+
+.icon-biaoqian:before {
+  content: "\e633";
+}
+
+.icon-icon-test:before {
+  content: "\e604";
+}
+
+.icon-xiangshangjiantou:before {
+  content: "\e661";
+}
+
+.icon-dingdanxuanzhong:before {
+  content: "\e6c2";
+}
+
+.icon-shenhebutongguo:before {
+  content: "\e624";
+}
+
+.icon-shenhetongguo:before {
+  content: "\e626";
+}
+
+.icon-lishidingdan:before {
+  content: "\e627";
+}
+
+.icon-wenhao:before {
+  content: "\e671";
+}
+
+.icon-iconfontguanbi:before {
+  content: "\e623";
+}
+
+.icon-xiangxiajiantou:before {
+  content: "\e62b";
+}
+
+.icon-shouye:before {
+  content: "\e638";
+}
+
+.icon-tianjiadizhi:before {
+  content: "\e617";
+}
+
+.icon-genghuan:before {
+  content: "\e61a";
 }
 
 .icon-bianzu:before {
@@ -225,26 +493,10 @@
   content: "\e684";
 }
 
-.icon-shuoming:before {
-  content: "\e6ad";
-}
-
 .icon-2guanbi:before {
   content: "\e602";
 }
 
-.icon-close:before {
-  content: "\e606";
-}
-
-.icon-gantanhao-yuankuang:before {
-  content: "\e763";
-}
-
-.icon-bianji:before {
-  content: "\e603";
-}
-
 .icon-shanchu:before {
   content: "\e612";
 }
@@ -253,14 +505,6 @@
   content: "\e607";
 }
 
-.icon-shouyebeifenx:before {
-  content: "\e608";
-}
-
-.icon-shangyibu:before {
-  content: "\e609";
-}
-
 .icon-bukexiangyouhua:before {
   content: "\e60a";
 }
@@ -273,22 +517,10 @@
   content: "\e60c";
 }
 
-.icon-gouwuchebeifenx:before {
-  content: "\e60d";
-}
-
-.icon-xiayibu:before {
-  content: "\e60e";
-}
-
 .icon-shanchu2:before {
   content: "\e60f";
 }
 
-.icon-bianji1:before {
-  content: "\e610";
-}
-
 .icon-wodebeifenx:before {
   content: "\e611";
 }

Fichier diff supprimé car celui-ci est trop grand
+ 2 - 0
common/css/style/icon.css


+ 2480 - 0
common/css/style/thorui.css

@@ -0,0 +1,2480 @@
+/* Thor UI 基础组件 样式*/
+
+/*!
+ * =====================================================
+ * Thor UI v1.5.0 (https://www.thorui.cn/)
+ * =====================================================
+ */
+.tui-mask {
+	width: 100%;
+	height: 100%;
+	position: fixed;
+	top: 0;
+	left: 0;
+	background: rgba(0, 0, 0, 0.4);
+	z-index: 999;
+}
+
+.tui-ellipsis {
+	overflow: hidden;
+	white-space: nowrap;
+	text-overflow: ellipsis;
+}
+
+.tui-ellipsis-2 {
+	display: -webkit-box;
+	overflow: hidden;
+	white-space: normal !important;
+	text-overflow: ellipsis;
+	word-wrap: break-word;
+	-webkit-line-clamp: 2;
+	-webkit-box-orient: vertical;
+}
+
+.tui-opcity {
+	opacity: 0.5;
+}
+
+.tui-scale-small {
+	transform: scale(0.9);
+	transform-origin: center center;
+}
+
+.tui-height-full {
+	height: 100%;
+}
+
+.tui-width-full {
+	width: 100%;
+}
+
+.tui-ptop-zero {
+	padding-top: 0;
+}
+
+.tui-pbottom-zero {
+	padding-bottom: 0;
+}
+
+.tui-pleft-zero {
+	padding-left: 0;
+}
+
+.tui-pright-zero {
+	padding-right: 0;
+}
+
+
+/* color start*/
+
+.tui-color-primary {
+	color: #5677fc;
+}
+
+.tui-color-success {
+	color: #19be6b;
+}
+
+.tui-color-warning {
+	color: #ff7900;
+}
+
+.tui-color-error {
+	color: #EB0909;
+}
+
+.tui-color-blue {
+	color: #007AFF;
+}
+
+.tui-color-blue {
+	color: #007AFF;
+}
+
+.tui-color-white {
+	color: #ffffff;
+}
+
+.tui-color-pink {
+	color: #f74d54;
+}
+
+.tui-primary {
+	background-color: #5677fc !important;
+	color: #fff;
+}
+
+.tui-light-primary {
+	background-color: #5c8dff !important;
+	color: #fff;
+}
+
+.tui-dark-primary {
+	background-color: #4a67d6 !important;
+	color: #fff;
+}
+
+.tui-dLight-primary {
+	background-color: #4e77d9 !important;
+	color: #fff;
+}
+
+.tui-danger {
+	background-color: #ed3f14 !important;
+	color: #fff;
+}
+
+.tui-warning {
+	background-color: #ff7900 !important;
+	color: #fff;
+}
+
+.tui-blue {
+	background-color: #007AFF !important;
+	color: #fff;
+}
+
+.tui-green {
+	background-color: #19be6b !important;
+	color: #fff;
+}
+
+.tui-black {
+	background-color: #000 !important;
+	color: #fff;
+}
+
+.tui-white {
+	background-color: #fff !important;
+	color: #333 !important;
+}
+
+.tui-translucent {
+	background-color: rgba(0, 0, 0, 0.7);
+}
+
+.tui-light-black {
+	background-color: #333 !important;
+}
+
+.tui-gray {
+	background-color: #80848f;
+}
+
+.tui-phcolor-gray {
+	background-color: #ccc !important;
+}
+
+.tui-divider-gray {
+	background-color: #eaeef1 !important;
+}
+
+.tui-btn-gray {
+	background-color: #ededed !important;
+	color: #999 !important;
+}
+
+.tui-hover-gray {
+	background-color: #f7f7f9 !important;
+}
+
+.tui-bg-gray {
+	background-color: #fafafa !important;
+}
+
+.tui-light-blue {
+	background-color: #ecf6fd;
+	color: #4dabeb !important;
+}
+
+.tui-light-brownish {
+	background-color: #fcebef;
+	color: #8a5966 !important;
+}
+
+.tui-light-orange {
+	background-color: #fef5eb;
+	color: #faa851 !important;
+}
+
+.tui-light-green {
+	background-color: #e8f6e8;
+	color: #44cf85 !important;
+}
+
+/* color end*/
+
+
+/* flex start */
+
+.tui-flex {
+	display: -webkit-flex;
+	display: flex;
+}
+
+.tui-flex-1 {
+	flex: 1;
+}
+
+.tui-align-center {
+	justify-content: center;
+}
+
+.tui-align-left {
+	justify-content: flex-start !important;
+}
+
+.tui-align-right {
+	justify-content: flex-end !important;
+}
+
+.tui-align-between {
+	justify-content: space-between !important;
+}
+
+.tui-align-around {
+	justify-content: space-around !important;
+}
+
+.tui-vertical-center {
+	align-items: center;
+}
+
+.tui-vertical-top {
+	align-items: flex-start;
+}
+
+.tui-vertical-top {
+	align-items: flex-end;
+}
+
+.tui-center {
+	display: flex;
+	align-items: center;
+	justify-content: center;
+}
+
+.tui-line-feed {
+	flex-direction: row;
+	flex-wrap: wrap;
+}
+
+.tui-col-12 {
+	width: 100%;
+}
+
+.tui-col-11 {
+	width: 91.66666667%;
+}
+
+.tui-col-10 {
+	width: 83.33333333%;
+}
+
+.tui-col-9 {
+	width: 75%;
+}
+
+.tui-col-8 {
+	width: 66.66666667%;
+}
+
+.tui-col-7 {
+	width: 58.33333333%;
+}
+
+.tui-col-6 {
+	width: 50%;
+}
+
+.tui-col-5 {
+	width: 41.66666667%;
+}
+
+.tui-col-4 {
+	width: 33.33333333%;
+}
+
+.tui-col-3 {
+	width: 25%;
+}
+
+.tui-col-2 {
+	width: 16.66666667%;
+}
+
+.tui-col-1 {
+	width: 8.33333333%;
+}
+
+/* flex end */
+
+
+/* icon start */
+.tui-icon {
+	font-family: 'thoruiFont' !important;
+	font-style: normal;
+	-webkit-font-smoothing: antialiased;
+	text-align: center;
+	text-decoration: none;
+	font-size: 32px;
+	color: #999;
+}
+
+.tui-icon-about:before {
+	content: '\e772';
+}
+
+.tui-icon-about-fill:before {
+	content: '\e771';
+}
+
+.tui-icon-add:before {
+	content: '\e770';
+}
+
+.tui-icon-add-fill:before {
+	content: '\e76f';
+}
+
+.tui-icon-addmessage:before {
+	content: '\e76e';
+}
+
+.tui-icon-addressbook:before {
+	content: '\e76d';
+}
+
+.tui-icon-agree:before {
+	content: '\e76c';
+}
+
+.tui-icon-agree-fill:before {
+	content: '\e76b';
+}
+
+.tui-icon-alarm:before {
+	content: '\e76a';
+}
+
+.tui-icon-alarm-fill:before {
+	content: '\e769';
+}
+
+.tui-icon-alipay:before {
+	content: '\e768';
+}
+
+.tui-icon-android:before {
+	content: '\e767';
+}
+
+.tui-icon-applets:before {
+	content: '\e766';
+}
+
+.tui-icon-arrowdown:before {
+	content: '\e765';
+}
+
+.tui-icon-arrowleft:before {
+	content: '\e764';
+}
+
+.tui-icon-arrowright:before {
+	content: '\e763';
+}
+
+.tui-icon-arrowup:before {
+	content: '\e762';
+}
+
+.tui-icon-attestation:before {
+	content: '\e761';
+}
+
+.tui-icon-back:before {
+	content: '\e760';
+}
+
+.tui-icon-bag:before {
+	content: '\e75f';
+}
+
+.tui-icon-bag-fill:before {
+	content: '\e75e';
+}
+
+.tui-icon-balloon:before {
+	content: '\e75d';
+}
+
+.tui-icon-bankcard:before {
+	content: '\e75c';
+}
+
+.tui-icon-bankcard-fill:before {
+	content: '\e75b';
+}
+
+.tui-icon-bottom:before {
+	content: '\e75a';
+}
+
+.tui-icon-calendar:before {
+	content: '\e759';
+}
+
+.tui-icon-camera:before {
+	content: '\e758';
+}
+
+.tui-icon-camera-fill:before {
+	content: '\e757';
+}
+
+.tui-icon-camera-add:before {
+	content: '\e756';
+}
+
+.tui-icon-card:before {
+	content: '\e755';
+}
+
+.tui-icon-card-fill:before {
+	content: '\e754';
+}
+
+.tui-icon-cart:before {
+	content: '\e753';
+}
+
+.tui-icon-cart-fill:before {
+	content: '\e752';
+}
+
+.tui-icon-category:before {
+	content: '\e751';
+}
+
+.tui-icon-category-fill:before {
+	content: '\e750';
+}
+
+.tui-icon-check:before {
+	content: '\e74f';
+}
+
+.tui-icon-circle:before {
+	content: '\e74e';
+}
+
+.tui-icon-circle-fill:before {
+	content: '\e74d';
+}
+
+.tui-icon-circle-selected:before {
+	content: '\e74c';
+}
+
+.tui-icon-clock:before {
+	content: '\e74b';
+}
+
+.tui-icon-clock-fill:before {
+	content: '\e74a';
+}
+
+.tui-icon-close:before {
+	content: '\e749';
+}
+
+.tui-icon-close-fill:before {
+	content: '\e748';
+}
+
+.tui-icon-community:before {
+	content: '\e747';
+}
+
+.tui-icon-community-fill:before {
+	content: '\e746';
+}
+
+.tui-icon-computer:before {
+	content: '\e745';
+}
+
+.tui-icon-computer-fill:before {
+	content: '\e744';
+}
+
+.tui-icon-coupon:before {
+	content: '\e743';
+}
+
+.tui-icon-delete:before {
+	content: '\e742';
+}
+
+.tui-icon-deletekey:before {
+	content: '\e741';
+}
+
+.tui-icon-dingtalk:before {
+	content: '\e740';
+}
+
+.tui-icon-dissatisfied:before {
+	content: '\e73f';
+}
+
+.tui-icon-down:before {
+	content: '\e73e';
+}
+
+.tui-icon-download:before {
+	content: '\e73d';
+}
+
+.tui-icon-edit:before {
+	content: '\e73c';
+}
+
+.tui-icon-ellipsis:before {
+	content: '\e73b';
+}
+
+.tui-icon-enlarge:before {
+	content: '\e73a';
+}
+
+.tui-icon-evaluate:before {
+	content: '\e739';
+}
+
+.tui-icon-exchange:before {
+	content: '\e738';
+}
+
+.tui-icon-explain:before {
+	content: '\e737';
+}
+
+.tui-icon-explain-fill:before {
+	content: '\e736';
+}
+
+.tui-icon-explore:before {
+	content: '\e735';
+}
+
+.tui-icon-explore-fill:before {
+	content: '\e734';
+}
+
+.tui-icon-eye:before {
+	content: '\e733';
+}
+
+.tui-icon-feedback:before {
+	content: '\e732';
+}
+
+.tui-icon-fingerprint:before {
+	content: '\e730';
+}
+
+.tui-icon-friendadd:before {
+	content: '\e72f';
+}
+
+.tui-icon-friendadd-fill:before {
+	content: '\e72e';
+}
+
+.tui-icon-gps:before {
+	content: '\e72d';
+}
+
+.tui-icon-histogram:before {
+	content: '\e72c';
+}
+
+.tui-icon-home:before {
+	content: '\e72b';
+}
+
+.tui-icon-home-fill:before {
+	content: '\e72a';
+}
+
+.tui-icon-house:before {
+	content: '\e729';
+}
+
+.tui-icon-imface:before {
+	content: '\e728';
+}
+
+.tui-icon-imkeyboard:before {
+	content: '\e727';
+}
+
+.tui-icon-immore:before {
+	content: '\e726';
+}
+
+.tui-icon-imvoice:before {
+	content: '\e725';
+}
+
+.tui-icon-ios:before {
+	content: '\e724';
+}
+
+.tui-icon-kefu:before {
+	content: '\e723';
+}
+
+.tui-icon-label:before {
+	content: '\e722';
+}
+
+.tui-icon-label-fill:before {
+	content: '\e721';
+}
+
+.tui-icon-like:before {
+	content: '\e720';
+}
+
+.tui-icon-like-fill:before {
+	content: '\e71f';
+}
+
+.tui-icon-link:before {
+	content: '\e71e';
+}
+
+.tui-icon-listview:before {
+	content: '\e71d';
+}
+
+.tui-icon-loading:before {
+	content: '\e71c';
+}
+
+.tui-icon-location:before {
+	content: '\e71b';
+}
+
+.tui-icon-mail:before {
+	content: '\e71a';
+}
+
+.tui-icon-mail-fill:before {
+	content: '\e719';
+}
+
+.tui-icon-manage:before {
+	content: '\e718';
+}
+
+.tui-icon-manage-fill:before {
+	content: '\e717';
+}
+
+.tui-icon-member:before {
+	content: '\e716';
+}
+
+.tui-icon-member-fill:before {
+	content: '\e715';
+}
+
+.tui-icon-message:before {
+	content: '\e714';
+}
+
+.tui-icon-message-fill:before {
+	content: '\e713';
+}
+
+.tui-icon-mobile:before {
+	content: '\e712';
+}
+
+.tui-icon-moments:before {
+	content: '\e711';
+}
+
+.tui-icon-more:before {
+	content: '\e710';
+}
+
+.tui-icon-more-fill:before {
+	content: '\e70f';
+}
+
+.tui-icon-narrow:before {
+	content: '\e70e';
+}
+
+.tui-icon-news:before {
+	content: '\e70d';
+}
+
+.tui-icon-news-fill:before {
+	content: '\e70c';
+}
+
+.tui-icon-nodata:before {
+	content: '\e70b';
+}
+
+.tui-icon-notice:before {
+	content: '\e699';
+}
+
+.tui-icon-notice-fill:before {
+	content: '\e698';
+}
+
+.tui-icon-offline:before {
+	content: '\e697';
+}
+
+.tui-icon-offline-fill:before {
+	content: '\e696';
+}
+
+.tui-icon-oppose:before {
+	content: '\e695';
+}
+
+.tui-icon-oppose-fill:before {
+	content: '\e694';
+}
+
+.tui-icon-order:before {
+	content: '\e693';
+}
+
+.tui-icon-partake:before {
+	content: '\e692';
+}
+
+.tui-icon-people:before {
+	content: '\e691';
+}
+
+.tui-icon-people-fill:before {
+	content: '\e690';
+}
+
+.tui-icon-pic:before {
+	content: '\e68f';
+}
+
+.tui-icon-pic-fill:before {
+	content: '\e68e';
+}
+
+.tui-icon-picture:before {
+	content: '\e68d';
+}
+
+.tui-icon-pie:before {
+	content: '\e68c';
+}
+
+.tui-icon-play:before {
+	content: '\e68b';
+}
+
+.tui-icon-plus:before {
+	content: '\e689';
+}
+
+.tui-icon-polygonal:before {
+	content: '\e688';
+}
+
+.tui-icon-position:before {
+	content: '\e687';
+}
+
+.tui-icon-position-fill:before {
+	content: '\e686';
+}
+
+.tui-icon-pwd:before {
+	content: '\e685';
+}
+
+.tui-icon-qq:before {
+	content: '\e684';
+}
+
+.tui-icon-qrcode:before {
+	content: '\e682';
+}
+
+.tui-icon-redpacket:before {
+	content: '\e681';
+}
+
+.tui-icon-redpacket-fill:before {
+	content: '\e680';
+}
+
+.tui-icon-reduce:before {
+	content: '\e67f';
+}
+
+.tui-icon-refresh:before {
+	content: '\e67e';
+}
+
+.tui-icon-revoke:before {
+	content: '\e67d';
+}
+
+.tui-icon-satisfied:before {
+	content: '\e67c';
+}
+
+.tui-icon-screen:before {
+	content: '\e67b';
+}
+
+.tui-icon-search:before {
+	content: '\e67a';
+}
+
+.tui-icon-search-2:before {
+	content: '\e679';
+}
+
+.tui-icon-send:before {
+	content: '\e678';
+}
+
+.tui-icon-service:before {
+	content: '\e677';
+}
+
+.tui-icon-service-fill:before {
+	content: '\e676';
+}
+
+.tui-icon-setup:before {
+	content: '\e675';
+}
+
+.tui-icon-setup-fill:before {
+	content: '\e674';
+}
+
+.tui-icon-share:before {
+	content: '\e673';
+}
+
+.tui-icon-share-fill:before {
+	content: '\e672';
+}
+
+.tui-icon-shield:before {
+	content: '\e671';
+}
+
+.tui-icon-shop:before {
+	content: '\e670';
+}
+
+.tui-icon-shop-fill:before {
+	content: '\e66f';
+}
+
+.tui-icon-shut:before {
+	content: '\e66e';
+}
+
+.tui-icon-signin:before {
+	content: '\e66d';
+}
+
+.tui-icon-sina:before {
+	content: '\e66c';
+}
+
+.tui-icon-skin:before {
+	content: '\e66b';
+}
+
+.tui-icon-soso:before {
+	content: '\e669';
+}
+
+.tui-icon-square:before {
+	content: '\e668';
+}
+
+.tui-icon-square-fill:before {
+	content: '\e667';
+}
+
+.tui-icon-square-selected:before {
+	content: '\e666';
+}
+
+.tui-icon-star:before {
+	content: '\e665';
+}
+
+.tui-icon-star-fill:before {
+	content: '\e664';
+}
+
+.tui-icon-strategy:before {
+	content: '\e663';
+}
+
+.tui-icon-sweep:before {
+	content: '\e662';
+}
+
+.tui-icon-time:before {
+	content: '\e661';
+}
+
+.tui-icon-time-fill:before {
+	content: '\e660';
+}
+
+.tui-icon-todown:before {
+	content: '\e65f';
+}
+
+.tui-icon-toleft:before {
+	content: '\e65e';
+}
+
+.tui-icon-tool:before {
+	content: '\e65d';
+}
+
+.tui-icon-top:before {
+	content: '\e65c';
+}
+
+.tui-icon-toright:before {
+	content: '\e65b';
+}
+
+.tui-icon-towardsleft:before {
+	content: '\e65a';
+}
+
+.tui-icon-towardsright:before {
+	content: '\e659';
+}
+
+.tui-icon-towardsright-fill:before {
+	content: '\e658';
+}
+
+.tui-icon-transport:before {
+	content: '\e657';
+}
+
+.tui-icon-transport-fill:before {
+	content: '\e656';
+}
+
+.tui-icon-turningdown:before {
+	content: '\e654';
+}
+
+.tui-icon-turningleft:before {
+	content: '\e653';
+}
+
+.tui-icon-turningright:before {
+	content: '\e652';
+}
+
+.tui-icon-turningup:before {
+	content: '\e651';
+}
+
+.tui-icon-unreceive:before {
+	content: '\e650';
+}
+
+.tui-icon-unseen:before {
+	content: '\e64f';
+}
+
+.tui-icon-up:before {
+	content: '\e64e';
+}
+
+.tui-icon-upload:before {
+	content: '\e64c';
+}
+
+.tui-icon-video:before {
+	content: '\e64b';
+}
+
+.tui-icon-voice:before {
+	content: '\e649';
+}
+
+.tui-icon-voice-fill:before {
+	content: '\e648';
+}
+
+.tui-icon-voipphone:before {
+	content: '\e647';
+}
+
+.tui-icon-wallet:before {
+	content: '\e646';
+}
+
+.tui-icon-warning:before {
+	content: '\e645';
+}
+
+.tui-icon-wealth:before {
+	content: '\e644';
+}
+
+.tui-icon-wealth-fill:before {
+	content: '\e643';
+}
+
+.tui-icon-weather:before {
+	content: '\e642';
+}
+
+.tui-icon-wechat:before {
+	content: '\e641';
+}
+
+.tui-icon-wifi:before {
+	content: '\e640';
+}
+
+/* icon end */
+
+/*Button start*/
+.tui-btn-primary {
+	background: #5677fc !important;
+	color: #fff;
+}
+
+.tui-shadow-primary {
+	box-shadow: 0 10rpx 14rpx 0 rgba(86, 119, 252, 0.2);
+}
+
+.tui-btn-danger {
+	background: #eb0909 !important;
+	color: #fff;
+}
+
+.tui-shadow-danger {
+	box-shadow: 0 10rpx 14rpx 0 rgba(235, 9, 9, 0.2);
+}
+
+.tui-btn-warning {
+	background: #fc872d !important;
+	color: #fff;
+}
+
+.tui-shadow-warning {
+	box-shadow: 0 10rpx 14rpx 0 rgba(252, 135, 45, 0.2);
+}
+
+.tui-btn-green {
+	background: #35b06a !important;
+	color: #fff;
+}
+
+.tui-shadow-green {
+	box-shadow: 0 10rpx 14rpx 0 rgba(53, 176, 106, 0.2);
+}
+
+.tui-btn-blue {
+	background: #007AFF !important;
+	color: #fff;
+}
+
+.tui-shadow-blue {
+	box-shadow: 0 10rpx 14rpx 0 rgba(0, 122, 255, 0.2);
+}
+
+.tui-btn-white {
+	background: #fff !important;
+	color: #333 !important;
+}
+
+.tui-btn-gray {
+	background: #bfbfbf !important;
+	color: #fff !important;
+}
+
+.tui-btn-black {
+	background: #333 !important;
+	color: #fff !important;
+}
+
+.tui-shadow-gray {
+	box-shadow: 0 10rpx 14rpx 0 rgba(191, 191, 191, 0.2);
+}
+
+.tui-hover-gray {
+	background: #f7f7f9 !important;
+}
+
+.tui-black-hover {
+	background: #555 !important;
+	color: #e5e5e5 !important;
+}
+
+/* button start 
+ * 宽高通过覆盖样式改变
+**/
+
+.tui-btn {
+	width: 100%;
+	height: 96rpx;
+	line-height: 96rpx;
+	font-size: 32rpx;
+	position: relative;
+	border: 0 !important;
+	border-radius: 6rpx;
+	padding-left: 0;
+	padding-right: 0;
+	overflow: visible;
+}
+
+.tui-btn-base {
+	width: auto;
+	/* #ifdef MP-ALIPAY */
+	min-width: 200rpx;
+	/* #endif */
+	font-size: 30rpx;
+	height: 70rpx;
+	line-height: 70rpx;
+}
+
+.tui-btn-small {
+	width: auto;
+	/* #ifdef MP-ALIPAY */
+	min-width: 140rpx;
+	/* #endif */
+	font-size: 30rpx;
+	height: 60rpx;
+	line-height: 60rpx;
+}
+
+.tui-btn::after {
+	content: '';
+	position: absolute;
+	width: 200%;
+	height: 200%;
+	transform-origin: 0 0;
+	transform: scale(0.5, 0.5) translateZ(0);
+	box-sizing: border-box;
+	left: 0;
+	top: 0;
+	border-radius: 12rpx;
+	border: 0;
+}
+
+.tui-btn-white::after {
+	border: 1rpx solid #bfbfbf;
+}
+
+.tui-white-hover {
+	background: #e5e5e5 !important;
+	color: #2e2e2e !important;
+}
+
+.tui-dark-disabled {
+	opacity: 0.6 !important;
+	color: #fafbfc !important;
+}
+
+.tui-dark-disabled-outline {
+	opacity: 0.5 !important;
+}
+
+.tui-gray-disabled {
+	background: #f3f3f3 !important;
+	color: #919191 !important;
+	box-shadow: none;
+}
+
+.tui-outline-hover {
+	opacity: 0.5;
+}
+
+.tui-primary-hover {
+	background: #4a67d6 !important;
+	color: #e5e5e5 !important;
+}
+
+.tui-primary-outline::after {
+	border: 1rpx solid #5677fc !important;
+}
+
+.tui-primary-outline {
+	color: #5677fc !important;
+	background: transparent;
+}
+
+.tui-danger-hover {
+	background: #c80808 !important;
+	color: #e5e5e5 !important;
+}
+
+.tui-danger-outline {
+	color: #eb0909 !important;
+	background: transparent;
+}
+
+.tui-danger-outline::after {
+	border: 1rpx solid #eb0909 !important;
+}
+
+.tui-warning-hover {
+	background: #d67326 !important;
+	color: #e5e5e5 !important;
+}
+
+.tui-warning-outline {
+	color: #fc872d !important;
+	background: transparent;
+}
+
+.tui-warning-outline::after {
+	border: 1px solid #fc872d !important;
+}
+
+.tui-green-hover {
+	background: #2d965a !important;
+	color: #e5e5e5 !important;
+}
+
+.tui-green-outline {
+	color: #35b06a !important;
+	background: transparent;
+}
+
+.tui-green-outline::after {
+	border: 1rpx solid #35b06a !important;
+}
+
+.tui-blue-hover {
+	background: #0062CC !important;
+	color: #e5e5e5 !important;
+}
+
+.tui-blue-outline {
+	color: #007AFF !important;
+	background: transparent;
+}
+
+.tui-blue-outline::after {
+	border: 1rpx solid #007AFF !important;
+}
+
+/* #ifndef APP-NVUE */
+.tui-btn-gradual {
+	background: linear-gradient(90deg, rgb(255, 89, 38), rgb(240, 14, 44)) !important;
+	color: #fff !important;
+}
+
+.tui-shadow-gradual {
+	box-shadow: 0 10rpx 14rpx 0 rgba(235, 9, 9, 0.15);
+}
+
+/* #endif */
+
+.tui-gray-hover {
+	background: #a3a3a3 !important;
+	color: #898989;
+}
+
+/* #ifndef APP-NVUE */
+.tui-gradual-hover {
+	background: linear-gradient(90deg, #d74620, #cd1225) !important;
+	color: #fff !important;
+}
+
+/* #endif */
+
+.tui-gray-outline {
+	color: #999 !important;
+	background: transparent !important;
+}
+
+.tui-white-outline {
+	color: #fff !important;
+	background: transparent !important;
+}
+
+.tui-black-outline {
+	background: transparent !important;
+	color: #333 !important;
+}
+
+.tui-gray-outline::after {
+	border: 1rpx solid #ccc !important;
+}
+
+.tui-white-outline::after {
+	border: 1px solid #fff !important;
+}
+
+.tui-black-outline::after {
+	border: 1px solid #333 !important;
+}
+
+/*圆角 */
+
+.tui-fillet {
+	border-radius: 50rpx;
+}
+
+.tui-btn-white.tui-fillet::after {
+	border-radius: 98rpx;
+}
+
+.tui-outline-fillet::after {
+	border-radius: 98rpx;
+}
+
+/*平角*/
+.tui-rightAngle {
+	border-radius: 0;
+}
+
+.tui-btn-white.tui-rightAngle::after {
+	border-radius: 0;
+}
+
+.tui-outline-rightAngle::after {
+	border-radius: 0;
+}
+
+/*Button end*/
+
+/*Tag start*/
+
+.tui-tag {
+	padding: 16rpx 26rpx;
+	font-size: 28rpx;
+	display: flex;
+	align-items: center;
+	justify-content: center;
+	border-radius: 6rpx;
+}
+
+.tui-tag-outline {
+	position: relative;
+	background-color: none;
+	color: #5677fc;
+}
+
+.tui-tag-outline::after {
+	content: '';
+	position: absolute;
+	width: 200%;
+	height: 200%;
+	-webkit-transform-origin: 0 0;
+	transform-origin: 0 0;
+	-webkit-transform: scale(0.5, 0.5);
+	transform: scale(0.5, 0.5);
+	-webkit-box-sizing: border-box;
+	box-sizing: border-box;
+	left: 0;
+	top: 0;
+	border-radius: 12rpx;
+}
+
+.tui-tag-fillet {
+	border-radius: 50rpx;
+}
+
+.tui-white.tui-tag-fillet::after {
+	border-radius: 80rpx;
+}
+
+.tui-tag-outline-fillet::after {
+	border-radius: 80rpx;
+}
+
+.tui-tag-fillet-left {
+	border-radius: 50rpx 0 0 50rpx;
+}
+
+.tui-tag-fillet-right {
+	border-radius: 0 50rpx 50rpx 0;
+}
+
+.tui-tag-fillet-left.tui-tag-outline::after {
+	border-radius: 100rpx 0 0 100rpx;
+}
+
+.tui-tag-fillet-right.tui-tag-outline::after {
+	border-radius: 0 100rpx 100rpx 0;
+}
+
+/*Tag end*/
+
+/*Badge start*/
+.tui-badge-dot {
+	height: 16rpx;
+	width: 16rpx;
+	border-radius: 50%;
+}
+
+.tui-badge {
+	font-size: 24rpx;
+	height: 36rpx;
+	min-width: 12rpx;
+	padding: 0 12rpx;
+	border-radius: 36rpx;
+	display: flex;
+	align-items: center;
+	justify-content: center;
+	z-index: 10;
+}
+
+.tui-badge-scale {
+	transform-origin: center center;
+}
+
+/*Badge end*/
+
+/*List start*/
+.tui-list-cell {
+	position: relative;
+	width: 100%;
+	padding: 26rpx 30rpx;
+	background-color: #fff;
+	box-sizing: border-box;
+}
+
+.tui-list-radius {
+	border-radius: 6rpx;
+	overflow: hidden;
+}
+
+.tui-cell-hover {
+	background-color: #f1f1f1 !important;
+}
+
+.tui-list-cell::after {
+	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-line-left::after {
+	left: 30rpx !important;
+}
+
+.tui-line-right::after {
+	right: 30rpx !important;
+}
+
+.tui-cell-unlined::after {
+	border-bottom: 0 !important;
+}
+
+.tui-cell-arrow::before {
+	content: ' ';
+	height: 10px;
+	width: 10px;
+	border-width: 2px 2px 0 0;
+	border-color: #c0c0c0;
+	border-style: solid;
+	-webkit-transform: matrix(0.5, 0.5, -0.5, 0.5, 0, 0);
+	transform: matrix(0.5, 0.5, -0.5, 0.5, 0, 0);
+	position: absolute;
+	top: 50%;
+	margin-top: -6px;
+	right: 30rpx;
+}
+
+.tui-arrow-right::before {
+	right: 0 !important;
+}
+
+.tui-arrow-gray::before {
+	border-color: #666666 !important;
+}
+
+.tui-arrow-white::before {
+	border-color: #ffffff !important;
+}
+
+.tui-arrow-warning::before {
+	border-color: #ff7900 !important;
+}
+
+.tui-arrow-success::before {
+	border-color: #19be6b !important;
+}
+
+.tui-arrow-danger::before {
+	border-color: #eb0909 !important;
+}
+
+/*List end*/
+
+/*Card start*/
+.tui-card {
+	margin: 0 30rpx;
+	font-size: 28rpx;
+	background-color: #fff;
+	border-radius: 10rpx;
+	box-shadow: 0 0 10rpx #eee;
+	box-sizing: border-box;
+	overflow: hidden;
+}
+
+.tui-card-full {
+	margin: 0 !important;
+	border-radius: 0 !important;
+}
+
+.tui-card-full::after {
+	border-radius: 0 !important;
+}
+
+.tui-card-border {
+	position: relative;
+	box-shadow: none !important
+}
+
+.tui-card-border::after {
+	content: ' ';
+	position: absolute;
+	height: 200%;
+	width: 200%;
+	border: 1px solid #ddd;
+	transform-origin: 0 0;
+	-webkit-transform-origin: 0 0;
+	-webkit-transform: scale(0.5);
+	transform: scale(0.5);
+	left: 0;
+	top: 0;
+	border-radius: 20rpx;
+	box-sizing: border-box;
+	pointer-events: none;
+}
+
+.tui-card-header {
+	width: 100%;
+	padding: 20rpx;
+	display: flex;
+	align-items: center;
+	justify-content: space-between;
+	position: relative;
+	box-sizing: border-box;
+	overflow: hidden;
+	border-top-left-radius: 10rpx;
+	border-top-right-radius: 10rpx;
+}
+
+.tui-card-header::after {
+	content: '';
+	position: absolute;
+	border-bottom: 1rpx solid #eaeef1;
+	-webkit-transform: scaleY(0.5);
+	transform: scaleY(0.5);
+	bottom: 0;
+	right: 0;
+	left: 0;
+	pointer-events: none;
+}
+
+.tui-header-line::after {
+	border-bottom: 0 !important;
+}
+
+.tui-header-thumb {
+	height: 60rpx;
+	width: 60rpx;
+	vertical-align: middle;
+	margin-right: 20rpx;
+	border-radius: 6rpx;
+}
+
+.tui-thumb-circle {
+	border-radius: 50% !important;
+}
+
+.tui-header-title {
+	display: inline-block;
+	font-size: 30rpx;
+	color: #7a7a7a;
+	vertical-align: middle;
+	max-width: 460rpx;
+	overflow: hidden;
+	white-space: nowrap;
+	text-overflow: ellipsis;
+}
+
+.tui-header-right {
+	font-size: 24rpx;
+	color: #b2b2b2;
+}
+
+.tui-card-body {
+	font-size: 32rpx;
+	color: #262b3a;
+	box-sizing: border-box;
+}
+
+.tui-card-footer {
+	font-size: 28rpx;
+	color: #596d96;
+	border-bottom-left-radius: 10rpx;
+	border-bottom-right-radius: 10rpx;
+	box-sizing: border-box;
+}
+
+/*Card end*/
+
+/*Grid start*/
+.tui-grids {
+	width: 100%;
+	position: relative;
+	overflow: hidden;
+}
+
+.tui-grids::after {
+	content: " ";
+	position: absolute;
+	left: 0;
+	top: 0;
+	width: 100%;
+	height: 1px;
+	border-top: 1px solid #eaeef1;
+	-webkit-transform-origin: 0 0;
+	transform-origin: 0 0;
+	-webkit-transform: scaleY(0.5);
+	transform: scaleY(0.5);
+}
+
+.tui-border-top::after {
+	border-top: 0 !important;
+}
+
+.tui-grid {
+	position: relative;
+	padding: 40rpx 20rpx;
+	box-sizing: border-box;
+	background: #fff;
+	float: left;
+}
+
+.tui-grid-2 {
+	width: 50%;
+}
+
+.tui-grid-3 {
+	width: 33.333333333%;
+}
+
+.tui-grid-4 {
+	width: 25%;
+	padding: 30rpx 20rpx !important;
+}
+
+.tui-grid-5 {
+	width: 20%;
+	padding: 20rpx !important;
+}
+
+.tui-grid-2:nth-of-type(2n)::before {
+	width: 0;
+	border-right: 0;
+}
+
+.tui-grid-3:nth-of-type(3n)::before {
+	width: 0;
+	border-right: 0;
+}
+
+.tui-grid-4:nth-of-type(4n)::before {
+	width: 0;
+	border-right: 0;
+}
+
+.tui-grid-5:nth-of-type(5n)::before {
+	width: 0;
+	border-right: 0;
+}
+
+.tui-grid::before {
+	content: " ";
+	position: absolute;
+	right: 0;
+	top: 0;
+	width: 1px;
+	bottom: 0;
+	border-right: 1px solid #eaeef1;
+	-webkit-transform-origin: 100% 0;
+	transform-origin: 100% 0;
+	-webkit-transform: scaleX(0.5);
+	transform: scaleX(0.5);
+}
+
+.tui-grid::after {
+	content: " ";
+	position: absolute;
+	left: 0;
+	bottom: 0;
+	right: 0;
+	height: 1px;
+	border-bottom: 1px solid #eaeef1;
+	-webkit-transform-origin: 0 100%;
+	transform-origin: 0 100%;
+	-webkit-transform: scaleY(0.5);
+	transform: scaleY(0.5);
+}
+
+.tui-grid-bottom::after {
+	height: 0 !important;
+	border-bottom: 0 !important
+}
+
+.tui-grid-bg {
+	position: relative;
+	padding: 0;
+	width: 100%;
+	box-sizing: border-box;
+}
+
+.tui-item-hover {
+	background-color: #f7f7f9 !important;
+}
+
+/*Grid end*/
+
+/*Loading start*/
+.tui-loading-init {
+	min-width: 200rpx;
+	min-height: 200rpx;
+	max-width: 500rpx;
+	display: flex;
+	align-items: center;
+	justify-content: center;
+	flex-direction: column;
+	position: fixed;
+	top: 50%;
+	left: 50%;
+	transform: translate(-50%, -50%);
+	z-index: 9999;
+	font-size: 26rpx;
+	color: #fff;
+	background-color: rgba(0, 0, 0, 0.7);
+	border-radius: 10rpx;
+}
+
+.tui-loading-center {
+	width: 50rpx;
+	height: 50rpx;
+	border: 3px solid #fff;
+	border-radius: 50%;
+	margin: 0 6px;
+	display: inline-block;
+	vertical-align: middle;
+	clip-path: polygon(0% 0%, 100% 0%, 100% 40%, 0% 40%);
+	animation: rotate 1s linear infinite;
+	margin-bottom: 36rpx;
+}
+
+.tui-loadmore-tips {
+	text-align: center;
+	padding: 0 20rpx;
+	box-sizing: border-box;
+}
+
+@-webkit-keyframes rotate {
+	from {
+		transform: rotatez(0deg);
+	}
+
+	to {
+		transform: rotatez(360deg);
+	}
+}
+
+@keyframes rotate {
+	from {
+		transform: rotatez(0deg);
+	}
+
+	to {
+		transform: rotatez(360deg);
+	}
+}
+
+.tui-loadmore {
+	width: 48%;
+	margin: 1.5em auto;
+	line-height: 1.5em;
+	font-size: 24rpx;
+	text-align: center;
+}
+
+.tui-loading-1 {
+	margin: 0 5px;
+	width: 20px;
+	height: 20px;
+	display: inline-block;
+	vertical-align: middle;
+	-webkit-animation: a 1s steps(12) infinite;
+	animation: a 1s steps(12) infinite;
+	background: transparent url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAiIGhlaWdodD0iMTIwIiB2aWV3Qm94PSIwIDAgMTAwIDEwMCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgxMDB2MTAwSDB6Ii8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjRTlFOUU5IiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgLTMwKSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iIzk4OTY5NyIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgzMCAxMDUuOTggNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjOUI5OTlBIiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKDYwIDc1Ljk4IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0EzQTFBMiIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSg5MCA2NSA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNBQkE5QUEiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoMTIwIDU4LjY2IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0IyQjJCMiIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgxNTAgNTQuMDIgNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjQkFCOEI5IiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKDE4MCA1MCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNDMkMwQzEiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTE1MCA0NS45OCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNDQkNCQ0IiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTEyMCA0MS4zNCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNEMkQyRDIiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTkwIDM1IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0RBREFEQSIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgtNjAgMjQuMDIgNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjRTJFMkUyIiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKC0zMCAtNS45OCA2NSkiLz48L3N2Zz4=) no-repeat;
+	background-size: 100%;
+}
+
+@-webkit-keyframes a {
+	0% {
+		-webkit-transform: rotate(0deg);
+		transform: rotate(0deg);
+	}
+
+	to {
+		-webkit-transform: rotate(1turn);
+		transform: rotate(1turn);
+	}
+}
+
+@keyframes a {
+	0% {
+		-webkit-transform: rotate(0deg);
+		transform: rotate(0deg);
+	}
+
+	to {
+		-webkit-transform: rotate(1turn);
+		transform: rotate(1turn);
+	}
+}
+
+.tui-loadmore-tips {
+	display: inline-block;
+	vertical-align: middle;
+}
+
+.tui-loading-2 {
+	width: 28rpx;
+	height: 28rpx;
+	border: 1px solid #8f8d8e;
+	border-radius: 50%;
+	margin: 0 6px;
+	display: inline-block;
+	vertical-align: middle;
+	clip-path: polygon(0% 0%, 100% 0%, 100% 30%, 0% 30%);
+	animation: rotate 1s linear infinite;
+}
+
+@-webkit-keyframes rotate {
+	from {
+		transform: rotatez(0deg);
+	}
+
+	to {
+		transform: rotatez(360deg);
+	}
+}
+
+@keyframes rotate {
+	from {
+		transform: rotatez(0deg);
+	}
+
+	to {
+		transform: rotatez(360deg);
+	}
+}
+
+.tui-loading-3 {
+	display: inline-block;
+	margin: 0 6px;
+	vertical-align: middle;
+	width: 28rpx;
+	height: 28rpx;
+	background: 0 0;
+	border-radius: 50%;
+	border: 2px solid;
+	border-color: #e5e5e5 #e5e5e5 #e5e5e5 #8f8d8e;
+	animation: tui-rotate 0.7s linear infinite;
+}
+
+.tui-loading-3.tui-loading-primary {
+	border-color: #e5e5e5 #e5e5e5 #e5e5e5 #5677fc;
+}
+
+.tui-loading-3.tui-loading-green {
+	border-color: #e5e5e5 #e5e5e5 #e5e5e5 #19be6b;
+}
+
+.tui-loading-3.tui-loading-orange {
+	border-color: #e5e5e5 #e5e5e5 #e5e5e5 #ff7900;
+}
+
+.tui-loading-3.tui-loading-red {
+	border-color: #ededed #ededed #ededed #ed3f14;
+}
+
+@-webkit-keyframes tui-rotate {
+	0% {
+		transform: rotate(0);
+	}
+
+	100% {
+		transform: rotate(360deg);
+	}
+}
+
+@keyframes tui-rotate {
+	0% {
+		transform: rotate(0);
+	}
+
+	100% {
+		transform: rotate(360deg);
+	}
+}
+
+.tui-loadmore-none {
+	width: 50%;
+	margin: 1.5em auto;
+	line-height: 1.5em;
+	font-size: 24rpx;
+	display: flex;
+	justify-content: center;
+}
+
+.tui-nomore {
+	width: 100%;
+	height: 100%;
+	position: relative;
+	display: flex;
+	justify-content: center;
+	margin-top: 10rpx;
+	padding-bottom: 6rpx;
+}
+
+.tui-nomore::before {
+	content: ' ';
+	position: absolute;
+	border-bottom: 1rpx solid #e5e5e5;
+	-webkit-transform: scaleY(0.5);
+	transform: scaleY(0.5);
+	width: 100%;
+	top: 18rpx;
+	left: 0;
+}
+
+.tui-nomore-text {
+	color: #999;
+	font-size: 24rpx;
+	text-align: center;
+	padding: 0 18rpx;
+	height: 36rpx;
+	line-height: 36rpx;
+	position: relative;
+	z-index: 1;
+}
+
+.tui-nomore-dot {
+	position: relative;
+	text-align: center;
+	-webkit-display: flex;
+	display: flex;
+	-webkit-justify-content: center;
+	justify-content: center;
+	margin-top: 10rpx;
+	padding-bottom: 6rpx;
+}
+
+.tui-nomore-dot::before {
+	content: '';
+	position: absolute;
+	border-bottom: 1rpx solid #e5e5e5;
+	-webkit-transform: scaleY(0.5);
+	transform: scaleY(0.5);
+	width: 360rpx;
+	top: 18rpx;
+}
+
+.tui-dot-text {
+	position: relative;
+	color: #e5e5e5;
+	font-size: 10px;
+	text-align: center;
+	width: 50rpx;
+	height: 36rpx;
+	line-height: 36rpx;
+	-webkit-transform: scale(0.8);
+	transform: scale(0.8);
+	-webkit-transform-origin: center center;
+	transform-origin: center center;
+	z-index: 1;
+}
+
+/*Loading end*/
+
+/*Footer start*/
+.tui-footer {
+	width: 100%;
+	overflow: hidden;
+	padding: 30rpx 24rpx;
+	box-sizing: border-box;
+	font-size: 24rpx;
+	color: #A7A7A7;
+}
+
+.tui-fixed {
+	position: fixed;
+	z-index: 9999;
+	/* #ifdef H5 */
+	bottom: 0;
+	/* #endif */
+	/* #ifndef H5 */
+	bottom: env(safe-area-inset-bottom);
+	/* #endif */
+}
+
+.tui-footer-link {
+	color: #596d96;
+	display: flex;
+	align-items: center;
+	justify-content: center;
+	font-size: 28rpx;
+}
+
+.tui-link {
+	position: relative;
+	padding: 0 18rpx;
+	line-height: 1;
+}
+
+.tui-link::before {
+	content: " ";
+	position: absolute;
+	right: 0;
+	top: 0;
+	width: 1px;
+	bottom: 0;
+	border-right: 1px solid #d3d3d3;
+	-webkit-transform-origin: 100% 0;
+	transform-origin: 100% 0;
+	-webkit-transform: scaleX(0.5);
+	transform: scaleX(0.5);
+}
+
+.tui-link:last-child::before {
+	border-right: 0 !important
+}
+
+.tui-link-hover {
+	opacity: 0.5
+}
+
+.tui-footer-copyright {
+	font-size: 24rpx;
+	color: #A7A7A7;
+	line-height: 1;
+	text-align: center;
+	padding-top: 16rpx
+}
+
+/*Footer end*/
+
+
+/*layout start*/
+
+/*形状*/
+.tui-triangle {
+	border: 16rpx solid;
+	width: 0;
+	height: 0;
+}
+
+.tui-triangle-left {
+	border-color: transparent #5c8dff transparent transparent;
+}
+
+.tui-triangle-right {
+	border-color: transparent transparent transparent #5c8dff;
+}
+
+.tui-triangle-top {
+	border-color: transparent transparent #5c8dff transparent;
+}
+
+.tui-triangle-bottom {
+	border-color: #5c8dff transparent transparent transparent;
+}
+
+
+.tui-parallelogram {
+	width: 100rpx;
+	height: 50rpx;
+	transform: skew(-10deg);
+	background: #19be6b;
+	margin-left: 10rpx;
+}
+
+.tui-crescent {
+	width: 60rpx;
+	height: 60rpx;
+	border-radius: 50%;
+	box-shadow: 12rpx 12rpx 0 0 yellowgreen;
+}
+
+/*聊天框*/
+.tui-chatbox {
+	max-width: 60%;
+	border-radius: 10rpx;
+	position: relative;
+	padding: 20rpx 26rpx;
+	font-size: 28rpx;
+	color: #fff;
+	/* word-break: break-all;
+  word-wrap: break-word; */
+}
+
+.tui-chatbox-left {
+	background: #5c8dff;
+	border: 1rpx solid #5c8dff;
+	display: inline-block;
+}
+
+.tui-chatbox-right {
+	background: #19be6b;
+	border: 1rpx solid #19be6b;
+}
+
+.tui-chatbox::before {
+	content: "";
+	position: absolute;
+	width: 0;
+	height: 0;
+	top: 20rpx;
+	border: 16rpx solid;
+}
+
+.tui-chatbox-left::before {
+	right: 100%;
+	border-color: transparent #5c8dff transparent transparent;
+}
+
+.tui-chatbox-right::before {
+	left: 100%;
+	border-color: transparent transparent transparent #19be6b;
+}
+
+/*checkbox 整体大小  */
+
+/* #ifdef MP-WEIXIN */
+.tui-checkbox .wx-checkbox-input {
+	width: 36rpx;
+	height: 36rpx;
+	border-radius: 50%;
+	margin: 0;
+}
+
+.tui-checkbox .wx-checkbox-input.wx-checkbox-input-checked {
+	background: #F82400;
+	width: 40rpx;
+	height: 40rpx;
+	border: none;
+}
+
+/* #endif */
+
+/* #ifndef MP-WEIXIN */
+>>>.tui-checkbox .uni-checkbox-input {
+	width: 36rpx;
+	height: 36rpx;
+	border-radius: 50% !important;
+	margin: 0;
+	border-color: #d1d1d1 !important;
+}
+
+>>>.tui-checkbox .uni-checkbox-input.uni-checkbox-input-checked {
+	background: #F82400;
+	width: 40rpx;
+	height: 40rpx;
+	border: none;
+}
+
+/* #endif */
+
+/*textarea*/
+
+.tui-textarea-box {
+	border-radius: 4rpx;
+	height: 280rpx;
+	box-sizing: border-box;
+	padding: 20rpx 20rpx 0 20rpx;
+	position: relative;
+}
+
+.tui-textarea-box::after {
+	content: '';
+	position: absolute;
+	height: 200%;
+	width: 200%;
+	border: 1px solid #e6e6e6;
+	transform-origin: 0 0;
+	-webkit-transform-origin: 0 0;
+	-webkit-transform: scale(0.5);
+	transform: scale(0.5);
+	left: 0;
+	top: 0;
+	border-radius: 8rpx;
+	pointer-events: none;
+}
+
+.tui-textarea {
+	height: 210rpx;
+	width: 100%;
+	color: #666;
+	font-size: 28rpx;
+	z-index: 2;
+}
+
+.tui-phcolor-color {
+	color: #ccc !important;
+}
+
+.tui-textarea-counter {
+	font-size: 24rpx;
+	color: #999;
+	text-align: right;
+	height: 40rpx;
+	line-height: 40rpx;
+	padding-top: 4rpx;
+}
+
+/*Input输入框*/
+.tui-input-item {
+	width: 100%;
+	display: flex;
+	align-items: center;
+	font-size: 32rpx;
+
+}
+
+.tui-input {
+	flex: 1;
+	font-size: 32rpx;
+	overflow: visible;
+}
+
+.tui-input-title {
+	min-width: 140rpx;
+	padding-right: 12rpx;
+	flex-shrink: 0;
+}
+
+.tui-phcolor {
+	color: #ccc;
+	font-size: 32rpx;
+	overflow: visible;
+}
+
+.tui-input-border {
+	/* border: 1rpx solid #eaeef1; */
+	padding: 20rpx 30rpx;
+	border-radius: 4rpx;
+	position: relative;
+	font-size: 32rpx;
+}
+
+.tui-input-border::after {
+	content: '';
+	position: absolute;
+	height: 200%;
+	width: 200%;
+	border: 1px solid #e6e6e6;
+	transform-origin: 0 0;
+	-webkit-transform-origin: 0 0;
+	-webkit-transform: scale(0.5);
+	transform: scale(0.5);
+	left: 0;
+	top: 0;
+	border-radius: 8rpx;
+	pointer-events: none;
+}
+
+.tui-text-right {
+	text-align: right;
+}
+
+/*上传*/
+.tui-upload-box {
+	width: 100%;
+	display: flex;
+	flex-wrap: wrap;
+}
+
+.tui-upload-item {
+	width: 220rpx;
+	height: 220rpx;
+	position: relative;
+	margin-right: 20rpx;
+	margin-bottom: 20rpx;
+}
+
+.tui-upload-item:nth-of-type(3n) {
+	margin-right: 0;
+}
+
+.tui-upload-img {
+	width: 220rpx;
+	height: 220rpx;
+	display: block;
+}
+
+.tui-upload-del {
+	position: absolute;
+	right: -18rpx;
+	top: -18rpx;
+	display: flex;
+	align-items: center;
+	justify-content: center;
+}
+
+.tui-upload-add {
+	width: 220rpx;
+	height: 220rpx;
+	font-size: 68rpx;
+	font-weight: 100;
+	color: #888;
+	background-color: #F7F7F7;
+	display: flex;
+	align-items: center;
+	justify-content: center;
+	padding: 0;
+}
+
+/* 操作条*/
+.tui-operation {
+	width: 100%;
+	height: 100rpx;
+	box-sizing: border-box;
+	overflow: hidden;
+	background: rgba(255, 255, 255, 0.9);
+	position: relative;
+	display: flex;
+	align-items: center;
+	justify-content: space-between;
+}
+
+.tui-operation::before {
+	content: '';
+	position: absolute;
+	top: 0px;
+	right: 0;
+	left: 0;
+	border-top: 1rpx solid #eaeef1;
+	-webkit-transform: scaleY(0.5);
+	transform: scaleY(0.5);
+}
+
+.tui-operation-left {
+	display: flex;
+	align-items: center;
+}
+
+.tui-operation-item {
+	flex: 1;
+	display: flex;
+	align-items: center;
+	justify-content: center;
+	flex-direction: column;
+	position: relative;
+}
+
+.tui-operation-text {
+	font-size: 22rpx;
+	color: #333;
+}
+
+.tui-operation-right {
+	flex: 1;
+	height: 100rpx;
+	box-sizing: border-box;
+	padding-top: 0;
+}
+
+.tui-relative {
+	position: relative;
+}
+
+.tui-btn-comment {
+	height: 64rpx;
+	width: 84%;
+	background: #ededed;
+	color: #999;
+	border-radius: 8rpx;
+	font-size: 28rpx;
+	display: flex;
+	align-items: center;
+	padding-left: 20rpx;
+	box-sizing: border-box;
+	padding-top: 0;
+	margin-left: 30rpx;
+}
+
+.tui-chat-operation {
+	background: #F6F6F6 !important;
+	padding-right: 18rpx;
+	box-sizing: border-box;
+}
+
+.tui-input-box {
+	width: 78%;
+	justify-content: flex-start;
+}
+
+.tui-chat-input {
+	background: #fff;
+	height: 72rpx;
+	border-radius: 6rpx;
+	padding-left: 20rpx;
+	padding-right: 20rpx;
+	flex: 1;
+}
+
+.tui-voice-icon {
+	margin-left: 20rpx;
+	margin-right: 20rpx
+}
+
+/*layout end*/

Fichier diff supprimé car celui-ci est trop grand
+ 0 - 2
common/css/stylesheet.css


+ 17 - 4
common/json/data.json.js

@@ -1,7 +1,7 @@
 const beautyList =  [
-						{value:'1',name:'诊所'},
-						{value:'2',name:'门诊'},
-						{value:'3',name:'医院'},
+						{value:1,name:'诊所'},
+						{value:2,name:'门诊'},
+						{value:3,name:'医院'},
 					]
 const mentuzCampNullList = [
 						{value:'1',name:'整形'},
@@ -19,8 +19,21 @@ const medicaCampNullList = [
 						{value:'8',name:'spa'},
 					]
 
+const supplierList = [
+						{value:1,name:'一类器械'},
+						{value:2,name:'二类器械'},
+						{value:3,name:'三类器械'},
+						{value:4,name:'其他'},
+					]
+const supplierMedicaCampNullList = [
+						{value:'1',name:'产品'},
+						{value:'2',name:'仪器'},
+						{value:'3',name:'服务'},
+					]
 module.exports = {
 	beautyList,
 	mentuzCampNullList,
-	medicaCampNullList
+	medicaCampNullList,
+	supplierList,
+	supplierMedicaCampNullList
 }

+ 0 - 12
common/utils/module.js

@@ -1,12 +0,0 @@
-import Vue from 'vue'
-import customA from '@/components/cm-custom/custom-a.vue'
-import customB from '@/components/cm-custom/custom-b.vue'
-import customC from '@/components/cm-custom/custom-c.vue'
-import customD from '@/components/cm-custom/custom-d.vue'
-import customP from '@/components/cm-custom/custom-p.vue'
-
-Vue.component('custom-a',customA)
-Vue.component('custom-b',customB)
-Vue.component('custom-c',customC)
-Vue.component('custom-d',customD)
-Vue.component('custom-p',customP)

+ 0 - 131
common/utils/ys-validate.js

@@ -1,131 +0,0 @@
-
-const numberReg = /^-?[1-9][0-9]?.?[0-9]*$/
-const intReg = /^-?[1-9][0-9]*$/
-const phoneReg = /^1[0-9]{10,10}$/
-const emailReg = /^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/
-const pwdReg = /^.{6,16}$/
-const inviteCodeReg = /^[a-zA-Z0-9]{6,16}$/
-
-export default {
-	isNumber: function(val) {
-		return numberReg.test(val)
-	},
-	isInt: function(val) {
-		return intReg.test(val)
-	},
-	isPhone: function(val) {
-		return phoneReg.test(val)
-	},
-	isEmail: function(val) {
-		return emailReg.test(val)
-	},
-	isPwd: function(val) {
-		return pwdReg.test(val)
-	},
-	isInviteCode: function(val) {
-		return inviteCodeReg.test(val)
-	},
-	validate: function(data, rules) {
-		let res = { isOk: true, errmsg: '' }
-		if (!rules || !rules.length) {
-			return res
-		}
-		for (let rule of rules) {
-			// rule: {name:'', type:'', errmsg:'', min:1, max:2, eq:'', required:Boolean, regex:''}
-			if (!rule || !rule.name || !rule.type) {
-				continue
-			}
-			
-			// 如果值不存在
-			if (!data[rule.name]) {
-				// 如果是必填项就返回错误提示,required可以作为type是为了不同的type能给用户不同的提示
-				if (rule.type === 'required' || rule.required) {
-					res = { isOk: false, errmsg: rule.errmsg }
-					if (!res.errmsg) {
-						res.errmsg = '请正确输入所有数据' //默认提示
-					}
-					return res
-				}
-				// 如果不是必填项就跳过
-				continue
-			}
-			switch (rule.type) {
-				// required 上面已经判断过了
-				case 'equals':
-				case 'eq':
-					if (data[rule.name] !== data[rule.eqName]) {
-						res = { isOk: false, errmsg: rule.errmsg }
-					}
-				break
-				case 'number':
-					if (!numberReg.test(data[rule.name])) {
-						res = { isOk: false, errmsg: rule.errmsg }
-					}
-				break
-				case 'int':
-					if (!intReg.test(data[rule.name])) {
-						res = { isOk: false, errmsg: rule.errmsg }
-					}
-				break
-				case 'phone':
-					if (!phoneReg.test(data[rule.name])) {
-						res = { isOk: false, errmsg: rule.errmsg }
-					}
-				break
-				case 'email':
-					if (!emailReg.test(data[rule.name])) {
-						res = { isOk: false, errmsg: rule.errmsg }
-					}
-				break
-				case 'pwd':
-					if (!pwdReg.test(data[rule.name])) {
-						res = { isOk: false, errmsg: rule.errmsg }
-					}
-				break
-				case 'inviteCode':
-					if (!inviteCodeReg.test(data[rule.name])) {
-						res = { isOk: false, errmsg: rule.errmsg }
-					}
-				break
-				case 'range': // 数字类型的值取值范围
-					// {name: 'xxx', type: 'range', min: 6, max: 6, required: true, errmsg: 'xxx'}
-					let val = data[rule.name]
-					if (val) {
-						if (numberReg.test(val)) {
-							if (rule.min && val < rule.min) {
-								res = { isOk: false, errmsg: rule.errmsg }
-							} else if (rule.max && val > rule.max) {
-								res = { isOk: false, errmsg: rule.errmsg }
-							}
-						} else {
-							res = { isOk: false, errmsg: rule.errmsg }
-						}
-					}
-				break
-				case 'lengthRange': // 字符串长度取值范围
-					// {name: 'xxx', type: 'lengthRange', min: 6, max: 6, errmsg: 'xxx'}
-					let le = data[rule.name] ? data[rule.name].length : 0
-					if (rule.min && le < rule.min) {
-						res = { isOk: false, errmsg: rule.errmsg }
-					} else if (rule.max && le > rule.max) {
-						res = { isOk: false, errmsg: rule.errmsg }
-					}
-				break
-				case 'regex': // 自定义正则表达式
-					// {name: 'xxx', type: 'regex', regex: /^1[0-9]{10,10}$/, errmsg: 'xxx'}
-					if (rule.regex && !rule.regex.test(data[rule.name])) {
-						res = { isOk: false, errmsg: rule.errmsg }
-					}
-				break
-			}
-			// 发现任何一个错误就立即返回,后面的不再判断
-			if (!res.isOk) {
-				if (!res.errmsg) {
-					res.errmsg = '请正确输入所有数据' //默认提示
-				}
-				return res
-			}
-		}
-		return res
-	}
-}

+ 0 - 102
components/badge/badge.vue

@@ -1,102 +0,0 @@
-<template>
-	<view class="tui-badge-class" :class="[dot?'tui-badge-dot':'tui-badge','tui-'+type, size?'tui-badge-small':'']" v-if="visible">
-		<slot></slot>
-	</view>
-</template>
-
-<script>
-	export default {
-		name: "tuiBadge",
-		props: {
-			//primary,warning,green,danger,white,black,gray
-			type: {
-				type: String,
-				default: 'primary'
-			},
-			// '', small
-			size: {
-				type: String,
-				default: ''
-			},
-			//是否是圆点
-			dot: {
-				type: Boolean,
-				default: false
-			},
-			//是否可见
-			visible: {
-				type: Boolean,
-				default: true
-			}
-		}
-	}
-</script>
-
-<style>
-	/* color start*/
-
-	.tui-primary {
-		background: #5677fc;
-		color: #fff;
-	}
-
-	.tui-danger {
-		background: #ed3f14;
-		color: #fff;
-	}
-
-	.tui-red {
-		background: #ff201f;
-		color: #fff;
-	}
-
-	.tui-warning {
-		background: #ff7900;
-		color: #fff;
-	}
-
-	.tui-green {
-		background: #19be6b;
-		color: #fff;
-	}
-
-	.tui-white {
-		background: #fff;
-		color: #333;
-	}
-
-	.tui-black {
-		background: #000;
-		color: #fff;
-	}
-
-	.tui-gray {
-		background: #ededed !important;
-		color: #999 !important;
-	}
-
-	/* color end*/
-
-	/* badge start*/
-
-	.tui-badge-dot {
-		height: 8px;
-		width: 8px;
-		border-radius: 4px;
-		line-height: 1;
-	}
-
-	.tui-badge {
-		font-size: 12px;
-		line-height: 1;
-		padding: 3px 6px;
-		border-radius: 50px;
-	}
-
-	.tui-badge-small {
-		transform: scale(0.8);
-		transform-origin: center center;
-	}
-
-	/* badge end*/
-</style>

+ 4 - 11
components/cm-custom/custom-a.vue → components/cm-custom/au-custom.vue

@@ -1,18 +1,13 @@
 <template name="headerNavbar">
 	<!-- 自定义导航栏 -->
-	<view class='navbar-wrap' :style="{height:CustomBar+'px',paddingTop:StatusBar+'px',background:navbarData.bgColor ? navbarData.bgColor : '#FFFFFF'}"> 
+	<view class='navbar-wrap' :style="{height:CustomBar+'px',paddingTop:StatusBar+'px'}"> 
 	  	<view class="navbar-text" 
-			  :style="{color:navbarData.textColor ? navbarData.textColor:'',lineHeight:(CustomBar - StatusBar)+'px;',fontSize:fontSizeSetting+'px;',paddingLeft:navbarData.textLeft ? '' : capsule.height+'px'}" :class="platformClass">
+			  :style="{color:navbarData.textColor ? navbarData.textColor:'',lineHeight:(CustomBar - StatusBar)+'px;',fontSize:fontSizeSetting+'px;',paddingLeft:navbarData.textLeft ? '' : (capsule.height+10)+'px'}" :class="platformClass">
 	    	  {{navbarData.title ? navbarData.title : " "}}
 	  	</view>
 	  	<view class="navbar-icon" v-if="navbarData.showCapsule == 1 ? true : false" 
-			  :style="{top:capsule.top +'px;',left:((screenWidth-capsule.right)+5)+'px;',height:capsule.height+'px;',lineHeight:capsule.height+'px;'}">
+			  :style="{color:navbarData.textColor ? navbarData.textColor:'',top:capsule.top +'px;',left:((screenWidth-capsule.right)+5)+'px;',height:capsule.height+'px;',lineHeight:capsule.height+'px;'}">
 			  <text v-if="navbarData.haveBack" @tap="BackPage" class="iconfont icon-fanhui"></text>
-			  <text v-if="navbarData.haveHome" @tap="_goHome" class="iconfont icon-shouye"></text>
-	  	</view>
-		<view class="navbar-icon" v-if="navbarData.showSearch == 1 ? true : false"
-			  :style="{top:capsule.top+'px;',right:(capsule.width)+'px;',height:capsule.height+'px;',lineHeight:capsule.height+'px;'}">
-			  <text @click.stop="_goSearchPath" class="iconfont icon-iconfonticonfontsousuo1"></text>
 	  	</view>
 	</view>
 </template>
@@ -55,7 +50,7 @@
 			},
 			_goHome:function(){
 				uni.switchTab({
-		        	url: '/pages/tabBar/home/home'
+		        	url: '/pages/tabBar/home/index'
 		      	})
 			}
 		},
@@ -72,8 +67,6 @@
 		 top: 0;
 		 z-index: 100000;
 		 box-sizing: border-box;
-		 background: #FFFFFF;
-		 border-bottom: 1px solid #F7F7F7;
 	}
 	.navbar-text {
 		 font-size: 30rpx;

+ 1 - 1
components/cm-custom/cm-custom.vue

@@ -65,7 +65,7 @@
 			},
 			_goHome:function(){
 				uni.switchTab({
-		        	url: '/pages/tabBar/home/home'
+		        	url: '/pages/tabBar/home/index'
 		      	})
 			}
 		},

+ 1 - 1
components/cm-custom/cm-drag.vue

@@ -13,7 +13,7 @@
 			<text v-if="cartNum > 0" class="uni-badge uni-badge-error uni-small uni-badge--small icon-num">
 				{{cartNum >= 100 ? '99+' : cartNum}}
 			</text>
-			<image src='../../static/icon-cart-active@3x.png' mode="widthFix"></image>
+			<image src='https://static.caimei365.com/app/img/icon/icon-cart-active@3x.png' mode="widthFix"></image>
 		</view>
 	</view>
 </template>

+ 1 - 1
components/cm-custom/cu-custom.vue

@@ -55,7 +55,7 @@
 			},
 			_goHome:function(){
 				uni.switchTab({
-		        	url: '/pages/tabBar/home/home'
+		        	url: '/pages/tabBar/home/index'
 		      	})
 			}
 		},

+ 0 - 87
components/cm-custom/cu-tabbar.vue

@@ -1,87 +0,0 @@
-<template>
-	<view class="content">
-		<!-- isIphoneX判断是否为刘海屏在main.js里,好像uniapp有一个css变量获取刘海屏的安全区域 -->
-		<view class="tabBar" :style="{height:isIphoneX?'140rpx':'98rpx'}">
-			<view class="tabBar_list" :style="{paddingBottom:isIphoneX?'40rpx':''}">
-				<view  @tap="cut_index('/seller/pages/home/home')" class="tabBar_item">
-					<image v-if="show_index == 0" src="../static/icon-home-active@3x.png"></image>
-					<image v-else src="../static/icon-home@3x.png"></image>
-					<view :class="{'tabBar_name':true,'nav_active':show_index == 0}">首页</view>
-				</view>
-				<view @tap="cut_index('/seller/pages/category/category')" class="tabBar_item">
-					<image v-if="show_index == 1" src="../static/icon-sort-active@3x.png"></image>
-					<image v-else src="../static/icon-sort@3x.png"></image>
-					<view :class="{'tabBar_name':true,'nav_active':show_index == 1}">分类</view>
-				</view>
-				<view  @tap="cut_index('/seller/pages/user/user')" class="tabBar_item">
-					<image v-if="show_index == 2" src="../static/icon-user-active@3x.png"></image>
-					<image v-else src="../static/icon-user@3x.png"></image>
-					<view :class="{'tabBar_name':true,'nav_active':show_index == 2}">我的</view>
-				</view>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-	export default {
-		props:{
-			activeIndex:{
-				type:Number
-			}
-		},
-		data() {
-			return {
-				show_index:0,//控制显示那个组件
-				isIphoneX:this.$store.state.isIphoneX
-			}
-		},
-		created() {
-			this.show_index = this.activeIndex
-		},
-		methods: {
-			// 切换组件
-			cut_index(url){
-				this.$api.navigateTo(url)
-			}
-		}
-	}
-</script>
-
-<style lang="scss">
-	.tabBar{ 
-		width:100%;
-		height: 98rpx;
-		background: #fff;
-		border-top:1px solid #E5E5E5;
-		position: fixed;
-		bottom:0px;
-		left:0px;
-		right:0px;
-		display: flex;
-		align-items: center;
-		justify-content: center;
-		.tabBar_list{ 
-			width:86%;
-			display: flex;
-			justify-content: space-between;
-			image{ 
-				width:48rpx;
-				height: 48rpx;
-				margin-bottom:2rpx
-			}
-			.tabBar_item{ 
-				width:68rpx;
-				display: flex;
-				justify-content: center;
-				align-items: center;
-				flex-direction: column;
-				font-size: 20rpx;
-				color: #999999;
-			}
-		 } 
-	}
-	.nav_active{
-		color: $color-system;
-	}
-</style>

+ 0 - 122
components/cm-custom/custom-b.vue

@@ -1,122 +0,0 @@
-<template name="headerNavbar">
-	<!-- 自定义导航栏 -->
-	<view class='navbar-wrap' :style="{height:CustomBar+'px',paddingTop:StatusBar+'px',background:navbarData.bgColor ? navbarData.bgColor : ''}"> 
-	  	<view class="navbar-text" 
-			  :style="{color:navbarData.textColor ? navbarData.textColor:'',lineHeight:(CustomBar - StatusBar)+'px;',fontSize:fontSizeSetting+'px;',paddingLeft:navbarData.textLeft ? '' : capsule.height+'px'}" :class="platformClass">
-	    	  {{navbarData.title ? navbarData.title : " "}}
-	  	</view>
-	  	<view class="navbar-icon" v-if="navbarData.showCapsule == 1 ? true : false" 
-			  :style="{top:capsule.top +'px;',left:((screenWidth-capsule.right)+5)+'px;',height:capsule.height+'px;',lineHeight:capsule.height+'px;'}">
-			  <text v-if="navbarData.haveBack" @tap="BackPage" class="iconfont icon-fanhui"></text>
-			  <text v-if="navbarData.haveHome" @tap="_goHome" class="iconfont icon-shouye"></text>
-	  	</view>
-		<view class="navbar-icon" v-if="navbarData.showSearch == 1 ? true : false"
-			  :style="{top:capsule.top+'px;',right:(capsule.width)+'px;',height:capsule.height+'px;',lineHeight:capsule.height+'px;'}">
-			  <text @click.stop="_goSearchPath" class="iconfont icon-iconfonticonfontsousuo1"></text>
-	  	</view>
-	</view>
-</template>
-
-<script>
-	var self;
-	export default{
-		name:'headerNavbar',
-		props:{
-		    navbarData: { // 由父页面传递的数据
-				type: Object,
-				default: () =>({
-					showCapsule: 1, // 是否显示左上角图标  1表示显示  0表示不显示,
-					showSearch: 0,
-					title: '', // 导航栏 中间的标题
-					haveBack:false,
-					home:false,
-					textLeft:false,
-					bgColor:'',
-					textColor:'#000000'
-				})
-		    }
-		},
-		data() {
-			return{
-				CustomBar:this.CustomBar,// 顶部导航栏高度
-				StatusBar: this.StatusBar,
-				fontSizeSetting:this.fontSizeSetting,
-				screenWidth:this.screenWidth,
-				capsule:this.capsule,
-				platformClass:this.platformClass,
-			}
-		},
-		created() {
-			if (getCurrentPages().length === 1) { // 当只有一个页面时
-			      this.navbarData.haveBack = false;
-			} else {
-			      this.navbarData.haveBack = true;
-			}
-		},
-		onLoad(){
-			
-		},
-		methods:{
-			BackPage: function () {
-				this.$emit('navigateBack')
-		    },
-			_goSearchPath:function () {
-				this.$emit('goSearchPath')
-			},
-			_goHome:function(){
-				uni.switchTab({
-		        	url: '/pages/tabBar/home/home'
-		      	})
-			}
-		},
-		onShow(){
-	
-		}
-	}
-</script>
-
-<style lang="scss">
-	.navbar-wrap {
-		 position: fixed;
-		 width: 100%;
-		 top: 0;
-		 z-index: 100000;
-		 box-sizing: border-box;
-	}
-	.navbar-text {
-		 font-size: 30rpx;
-		 color: #000000;
-		 font-weight: 500;
-	}
-	.navbar-text.center{
-		text-align: center;
-	}
-	.navbar-text.left{
-		text-align: left;
-		padding-left: 45px;
-	}
-	.navbar-icon {
-		 position: fixed;
-		 display: flex;
-		 box-sizing: border-box;
-	}
-	.navbar-icon .iconfont {
-		 display: inline-block;
-		 overflow: hidden;
-		 font-size: 44rpx;
-		 padding-right:40rpx;
-		 margin-top: 1px;
-	}
-	.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;
-	}
-</style>

+ 0 - 199
components/cm-custom/custom-c.vue

@@ -1,199 +0,0 @@
-<template name="headerNavbar">
-	<!-- 自定义导航栏 -->
-	<view class='navbar-wrap' :style="{height:navbarHeight+'px',paddingTop:statusBarHeight+'px'}"> 
-	  	<view class="navbar-text" :style="{lineHeight:(navbarHeight - statusBarHeight)+'px;',fontSize:fontSizeSetting+'px;'}" :class="platformClass">
-	    	{{navbarData.title ? navbarData.title : " "}}
-	  	</view>
-	  	<view class="navbar-icon" v-if="navbarData.showCapsule == 1 ? true : false" 
-			  :style="{top:navbarBtn.top + statusBarHeight+'px;',left:(navbarBtn.right)+'px;',height:navbarBtn.height+'px;',lineHeight:navbarBtn.height+'px;'}">
-			  <text v-if='haveBack' @click="_goBack" class="iconfont icon-fanhui"></text>
-	  	</view>
-		<view class="navbar-icon" v-if="navbarData.showSearch == 1 ? true : false"
-			  :style="{top:navbarBtn.top + statusBarHeight+'px;',right:(navbarBtn.width)+'px;',height:navbarBtn.height+'px;',lineHeight:navbarBtn.height+'px;'}">
-			  <text @click.stop="_goSearchPath" class="iconfont icon-iconfonticonfontsousuo1"></text>
-	  	</view>
-	</view>
-</template>
-
-<script>
-	var self;
-	export default{
-		name:'headerNavbar',
-		props:{
-		    navbarData: { // 由父页面传递的数据
-				type: Object
-		    },
-			systeminfo:{
-				type:Object
-			},
-			headerBtnPosi:{
-				type:Object
-			},
-			isShare:{
-				type:Boolean
-			},
-			isDelete:{
-				type:Boolean
-			},
-			isUsertype:{
-				type:Number
-			}
-		},
-		data() {
-			return{
-				haveBack: true,     // 是否有返回按钮,true 有 false 没有 若从分享页进入则为 false
-			    statusBarHeight: 0, // 状态栏高度
-			    navbarHeight: 0,    // 顶部导航栏高度
-			    navbarBtn: {        // 胶囊位置信息
-			      height: 0,
-			      width: 0,
-			      top: 0,
-			      bottom: 0,
-			      right: 0
-				},
-				platformClass:'',
-				fontSizeSetting:0,
-				
-			}
-		},
-		created() {
-			let statusBarHeight = this.systeminfo.statusBarHeight // 状态栏高度
-			let headerPosi = this.headerBtnPosi // 胶囊位置信息
-			this.fontSizeSetting = this.systeminfo.fontSizeSetting
-			if(this.systeminfo.platform == 'android'){
-				this.platformClass = 'left'
-			}else{
-				this.platformClass = 'center'
-			}
-		    /**
-		     * 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
-			}
-			let haveBack;
-			if (getCurrentPages().length === 1) { // 当只有一个页面时
-			     haveBack = false;
-			} else {
-			     haveBack = true;
-			}
-		    this.haveBack=haveBack, // 获取是否是通过分享进入的小程序
-		    this.statusBarHeight=statusBarHeight,
-		    this.navbarHeight= headerPosi.bottom + btnPosi.bottom, // 原胶囊bottom + 现胶囊bottom
-		    this.navbarBtn=btnPosi
-		},
-		onLoad(){
-			
-		},
-		methods:{
-			_goBack: function () {
-				if(this.isShare){
-					this._goHome()
-				}else if(this.isDelete){
-					this._goUser()
-				}else{
-					uni.navigateBack({
-			        	delta: 1
-			      	});
-				}
-		    },
-		    _goHome: function () {
-		      	uni.switchTab({
-		        	url: '/pages/tabBar/home/home'
-		      	})
-		    },
-		    _goUser: function () {
-		      	uni.switchTab({
-		        	url: '/pages/tabBar/user/user'
-		      	})
-		    },
-			_goSearchPath:function () {
-				this.$emit('goSearchPath')
-			}
-		},
-		onShow(){
-	
-		}
-	}
-</script>
-
-<style lang="scss">
-	.navbar-wrap {
-		 position: fixed;
-		 width: 100%;
-		 top: 0;
-		 z-index: 100000;
-		 box-sizing: border-box;
-		 background: #FFFFFF;
-	}
-	.navbar-text {
-		 font-size: 30rpx;
-		 color: #000000;
-		 font-weight: 500;
-	}
-	.navbar-text.center{
-		text-align: center;
-	}
-	.navbar-text.left{
-		text-align: left;
-		padding-left: 38px;
-	}
-	.navbar-icon {
-		 position: fixed;
-		 display: flex;
-		 box-sizing: border-box;
-	}
-	.navbar-icon .iconfont {
-		 display: inline-block;
-		 overflow: hidden;
-		 font-size: 42rpx;
-		 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;
-	}
-</style>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-

+ 221 - 0
components/cm-custom/custom-floor.vue

@@ -0,0 +1,221 @@
+<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" 
+			  :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 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;'}">
+				<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>
+</template>
+
+<script>
+	var self;
+	export default{
+		name:'headerNavbar',
+		props:{
+		    navbarData: { // 由父页面传递的数据
+				type: Object
+		    },
+			systeminfo:{
+				type:Object
+			},
+			headerBtnPosi:{
+				type:Object
+			},
+			page:{
+				type:Number,
+				default:1
+			},
+			headerTitle:{
+				type:String
+			},
+			type:{
+				type:String
+			},
+		},
+		data() {
+			return{
+				headerType:'',
+				clickPath:'/pages/search/search', 
+				haveBack: true, // 是否有返回按钮,true 有 false 没有 若从分享页进入则为 false
+			    statusBarHeight: 0, // 状态栏高度
+			    navbarHeight: 0, // 顶部导航栏高度,
+			    navbarBtn: { // 胶囊位置信息
+			      height: 0,
+			      width: 0,
+			      top: 0,
+			      bottom: 0,
+			      right: 0
+				},
+				platform:'',
+				fontSizeSetting:0
+			}
+		},
+		created() {
+			this.headerType = this.type
+			this.fontSizeSetting = this.systeminfo.fontSizeSetting
+			let statusBarHeight = this.systeminfo.statusBarHeight // 状态栏高度
+			let headerPosi = this.headerBtnPosi // 胶囊位置信息
+		    /**
+		     * 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
+			}
+			console.log(btnPosi)
+			let haveBack;
+			if (getCurrentPages().length === 1) { // 当只有一个页面时
+			     haveBack = false;
+			} else {
+			     haveBack = true;
+			}
+		    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
+		},
+		onLoad(){
+			
+		},
+		methods:{
+			_goBack: function () {
+		      	uni.navigateBack({
+		        	delta: this.page
+		      	});
+		    },
+		    _goHome: function () {
+		      	uni.switchTab({
+		        	url: '/pages/tabBar/home/index'
+		      	})
+		    }
+		},
+		onShow(){
+	
+		}
+	}
+</script>
+
+<style lang="scss">
+	.navbar-wrap {
+		 position: fixed;
+		 width: 100%;
+		 top: 0;
+		 z-index: 100000;
+		 background-color: #FFFFFF;
+		 box-sizing: border-box;
+	}
+	.navbar-text {
+		 width: 100%;
+		 color: #000000;
+		 font-weight: 500;
+		 position: fixed;
+	}
+	.gosearch-btn{
+		height: 100%;
+		background: rgba(255, 255, 255, 0.6);
+		font-size: 28rpx;
+		color: #999999;
+		position: relative;
+		box-sizing: border-box;
+		position:absolute ;
+		top: 0;
+		border: 0.5px solid rgba(0, 0, 0, 0.1);
+		.icon-sousuo{
+			height: 100%;
+			text-align: center;
+			display: block;
+			position: absolute;
+			left: 0;
+			top: 0;
+			font-size: 34rpx;
+			color: #999999;
+			z-index: 10;
+		}
+		.input{
+			height: 100%;
+			float: left;
+			font-size: $font-size-24;
+			text-align: left;
+		}
+	}
+	.navbar-icon {
+		 position: fixed;
+		 display: flex;
+		 border-radius: 50%;
+		 text-align: center;
+		 background: rgba(255,255,255,0.6);
+		 box-sizing: border-box;
+		 z-index: 9999;
+	}
+	.navbar-icon .iconfont {
+		 height: 100%;
+		 width: 100%;
+		 font-size: 38rpx;
+		 font-weight: bold;
+		 display: inline-block;
+		 overflow: hidden;
+	}
+	.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;
+	}
+	@keyframes showColor {
+		0% {background: rgba(255,255,255,0);}
+		50% {background: rgba(255,255,255,0.5);}
+		100% {background: rgba(255,255,255,1);}
+	}
+	@keyframes hideColor {
+		0% {background: rgba(255,255,255,1);}
+		50% {background: rgba(255,255,255,0.5);}
+		100% {background: rgba(255,255,255,0);}
+	}
+</style>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+ 85 - 50
components/cm-custom/custom-p.vue

@@ -1,14 +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-text" :style="{lineHeight:(navbarHeight - statusBarHeight)+'px;',fontSize:fontSizeSetting+'px;'}">
-	    	{{navbarData.title ? navbarData.title : " "}}
-	  	</view>
-	  	<view class="navbar-icon" v-if="navbarData.showCapsule ? navbarData.showCapsule : true" 
-			  :style="{top:navbarBtn.top + statusBarHeight+'px;',lineHeight:navbarBtn.height+'px;',left:(navbarBtn.right+5)+'px;',width:navbarBtn.height+'px;',height:navbarBtn.height+'px;'}">
+	<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;'}">
+				<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>
 </template>
 
@@ -42,15 +45,16 @@
 		data() {
 			return{
 				headerType:'',
+				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
@@ -61,53 +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/home'
-		      	})
-		    }
+		      	uni.navigateBack({
+		        	delta: this.page
+		      	});
+		    },
+		    _goHome: function () {
+		      	uni.switchTab({
+		        	url: '/pages/tabBar/home/index'
+		      	})
+		    }
 		},
 		onShow(){
 	
@@ -130,18 +135,48 @@
 		 }
 	}
 	.navbar-text {
-		 text-align: center;
+		 width: 100%;
 		 color: #000000;
 		 font-weight: 500;
+		 position: fixed;
+	}
+	.gosearch-btn{
+		height: 100%;
+		background: rgba(255, 255, 255, 0.6);
+		font-size: 28rpx;
+		color: #999999;
+		position: relative;
+		box-sizing: border-box;
+		position:absolute ;
+		top: 0;
+		border: 0.5px solid rgba(0, 0, 0, 0.1);
+		.icon-sousuo{
+			height: 100%;
+			text-align: center;
+			display: block;
+			position: absolute;
+			left: 0;
+			top: 0;
+			font-size: 34rpx;
+			color: #999999;
+			z-index: 10;
+		}
+		.input{
+			height: 100%;
+			float: left;
+			font-size: $font-size-24;
+			text-align: left;
+		}
 	}
 	.navbar-icon {
 		 position: fixed;
 		 display: flex;
 		 border-radius: 50%;
 		 text-align: center;
-		 background: rgba(255,255,255,0.2);
-		 border: 1px solid rgba(0,0,0, 0.1);
+		 background: rgba(255,255,255,0.6);
+		 border: 0.5px solid rgba(0,0,0, 0.1);
 		 box-sizing: border-box;
+		 z-index: 9999;
 	}
 	.navbar-icon .iconfont {
 		 height: 100%;

+ 0 - 69
components/cm-custom/custom-seller.vue

@@ -1,69 +0,0 @@
-<template name="headerNavbar">
-	<!-- 自定义导航栏 -->
-	<view class='navbar-wrap' :style="{height:CustomBar+'px',paddingTop:StatusBar+'px',background:navbarData.bgColor ? navbarData.bgColor : ''}"> 
-	  	<view class="navbar-text" 
-			  :style="{color:navbarData.textColor ? navbarData.textColor:'',lineHeight:(CustomBar - StatusBar)+'px;',fontSize:fontSizeSetting+'px;',paddingLeft:navbarData.textLeft ? '' : 12+'px'}" :class="platformClass">
-	    	  {{navbarData.title ? navbarData.title : " "}}
-	  	</view>
-	</view>
-</template>
-
-<script>
-	var self;
-	export default{
-		name:'headerNavbar',
-		props:{
-		    navbarData: { // 由父页面传递的数据
-				type: Object
-		    }
-		},
-		data() {
-			return{
-				CustomBar:this.CustomBar,// 顶部导航栏高度
-				StatusBar: this.StatusBar,
-				fontSizeSetting:this.fontSizeSetting,
-				screenWidth:this.screenWidth,
-				capsule:this.capsule,
-				platformClass:this.platformClass,
-			}
-		},
-		created() {
-			if (getCurrentPages().length === 1) { // 当只有一个页面时
-			      this.navbarData.haveBack = false;
-			} else {
-			      this.navbarData.haveBack = true;
-			}
-		},
-		onLoad(){
-			
-		},
-		methods:{
-			
-		},
-		onShow(){
-	
-		}
-	}
-</script>
-
-<style lang="scss">
-	.navbar-wrap {
-		 position: fixed;
-		 width: 100%;
-		 top: 0;
-		 z-index: 100000;
-		 box-sizing: border-box;
-	}
-	.navbar-text {
-		 font-size: 30rpx;
-		 color: #000000;
-		 font-weight: 500;
-	}
-	.navbar-text.center{
-		text-align: center;
-	}
-	.navbar-text.left{
-		text-align: left;
-		padding-left: 45px;
-	}
-</style>

+ 14 - 16
components/cm-module/activity/activity_on_1.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="https://admin-b.caimei365.com/userfiles/1/images/photo/2020/08/aa%402x.png" mode="" @click.stop="handleClick"></image>
-			<text class="iconfont icon-iconfontguanbi" @click.stop="handleClickCancel"></text>
+			<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>
@@ -69,25 +69,25 @@
 		left: 0;
 		top: 100%;
 		opacity: 0;
-		background: rgba(0,0,0,.5);
-		z-index: 99990;
+		background: rgba(0,0,0,.2);
+		z-index: 99999;
 		image{
-			width: 560rpx;
-			height: 784rpx;
+			width: 580rpx;
+			height: 802rpx;
 			margin-top: 100rpx;
 		}
 	}
 	.tui-alert-show {
 		top: 0;
 		opacity: 1;
-		animation:rundtop 0.5s;
+		// animation:rundtop 0.5s;
 	}
 	.tui-alert-hide{
 		top: 100%;
 		opacity: 0;
-		animation:rundbottom 0.5s;
+		// animation:rundbottom 0.5s;
 	}
-	.icon-iconfontguanbi{
+	.icon-2guanbi{
 		display: block;
 		width: 100rpx;
 		height: 100rpx;
@@ -95,11 +95,9 @@
 		text-align: center;
 		color: #FFFFFF;
 		position: absolute;
-		bottom: 10%;
-		left: 50%;
-		font-size: $font-size-48;
-		font-weight: bold;
-		margin-left: -50rpx;
+		top: 25%;
+		right: 4%;
+		font-size: 52rpx;
 	}
 	.tui-alert-mask-show {
 		visibility: visible;
@@ -138,4 +136,4 @@
 		0%{top: 0;opacity: 1;}
 		100%{top:100%;opacity: 0;}
 	}
-</style>
+</style>

+ 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>

+ 0 - 209
components/cm-module/bottomMenu/bottomMenu.vue

@@ -1,209 +0,0 @@
-<template name="menu">
-	<view class="menu">
-		<view class="isLower" v-if="disabled">该商品已下架~</view>
-		<view class="bottom-btn">
-			<view class="bottom-le">
-				<view class="item-bt" @click="navSwitchTab('/pages/tabBar/home/home')">
-					<image src="../../../static/tab-home-current.png"></image>
-					<text>首页</text>
-				</view>
-				<view class="item-bt">
-					<!-- #ifdef MP-WEIXIN -->
-					<button class="contact-btn" open-type="contact" @bindcontact="handleContact">
-						<image src="../../../static/severs@3x.png"></image>
-						<text>客服</text>
-					</button>	
-					<!-- #endif -->
-				</view>
-				<view class="item-bt" @click="navSwitchTab('/pages/tabBar/cart/cart')">
-					<image src="../../../static/tab-cart-current.png"></image>
-					<text>购物车</text>
-					<text  	v-if="cartCount !==''"
-							class="uni-badge uni-badge-error uni-small uni-badge--small icon-num"
-							:class="[cartCount < 10 ? 'goleft':'']">
-							{{ cartCount >= 100 ? '99+': cartCount }}
-					</text>
-				</view>
-			</view>
-			<view class="bottom-ri">
-				<button  
-						:disabled="disabled" 
-						class="btn btn-cart" 
-						:class="[disabled ? 'disabled':'']"
-						@tap="btnConfirm('add')">加入购物车</button>
-				<button  
-						:disabled="disabled" 
-						class="btn btn-bay" 
-						:class="[disabled ? 'disabled':'']"
-						@tap="btnConfirm('buy')">立即购买</button>
-			</view>
-		</view>	
-	</view>
-</template>
-
-<script>
-	export default{
-		name:'menu',
-		props:{
-			goodsData:Object
-		},
-		data() {
-			return{
-				 cartCount:0,
-				 disabled:false
-			}
-		},
-		created() {
-			this.cartCount = this.goodsData.cartCount
-			this.disabled = this.goodsData.disabled
-		},
-		methods:{
-			handleContact(e){//跳转客服
-				console.log(e.detail.query)
-			},
-			//点击事件
-			btnConfirm(type){
-				console.log(type)
-				this.$emit('showSpec',type)
-			},	
-			navSwitchTab(url){
-				uni.switchTab({
-				    url
-				});
-			},
-			navto(url){
-				uni.navigateTo({
-					url
-				})
-			},
-		},
-	}
-</script>
-
-<style lang="scss">
-	.isLower{
-		width: 100%;
-		height: 90rpx;
-		background-color: rgba(0,0,0,.8);
-		line-height: 90rpx;
-		text-align: center;
-		color: #FFFFFF;
-		font-size: $font-size-28;
-		position: fixed;
-		bottom: 110rpx;
-		left: 0;
-	}
-	.bottom-btn{
-		width: 100%;
-		height: 110rpx;
-		position: fixed;
-		bottom: 0;
-		left: 0;
-		background: #FFFFFF;
-		z-index: 99;
-		.bottom-le{
-			width: 302rpx;
-			height: 86rpx;
-			padding:12rpx 24rpx;
-			float: left;
-			.item-bt{
-				width: 86rpx;
-				height: 100%;
-				margin-right:22rpx;
-				display: flex;
-				float: left;
-				flex-direction: column;
-				align-items: center;
-				font-size: $font-size-24;
-				color: $text-color;
-				line-height: 34rpx;
-				position: relative;
-				.icon-num{
-					position: absolute;
-					right:-9rpx;
-					top: -9rpx;
-				}
-				.icon-num.goleft{
-					right: 4rpx;
-				}
-				&:last-child{
-					margin-right: 0;
-				}
-				image {
-					width: 40rpx;
-					height: 40rpx;
-					margin-bottom: 8rpx;
-				}
-				button.contact-btn{
-					width: 100%;
-					height: 100%;
-					margin: 0;
-					padding: 0;
-					display: flex;
-					flex-direction: column;
-					align-items: center;
-					box-sizing: border-box;
-					font-size: $font-size-24;
-					text-align: center;
-					text-decoration: none;
-					line-height: 34rpx;
-					border-radius: 0;
-					-webkit-tap-highlight-color: transparent;
-					overflow: hidden;
-					color: $text-color;
-					background-color:#FFFFFF;
-				}
-			}
-		}
-		.bottom-ri{
-			width: 400rpx;
-			height: 100%;
-			float: left;
-			display: flex;
-			.btn{
-				flex: 1;
-				width: 200rpx;
-				line-height: 110rpx;
-				text-align: center;
-				font-size: $font-size-28;
-				color: #FFFFFF;
-			}
-			.btn-cart{
-				background-color: #000000;
-			}
-			.btn-cart.disabled{
-				background-color: #7F7F7F;
-			}
-			.btn-bay{
-				background-color: #FF2A2A;
-			}
-			.btn-bay.disabled{
-				background-color: #FF9494;
-			}
-		}
-	}
-	.uni-badge--small {
-		-webkit-transform: scale(.8);
-		-ms-transform: scale(.8);
-		transform: scale(.8);
-		-webkit-transform-origin: center center;
-		-ms-transform-origin: center center;
-		transform-origin: center center;
-	}
-	.uni-badge {
-		font-family: 'Helvetica Neue', Helvetica, sans-serif;
-		-webkit-box-sizing: border-box;
-		box-sizing: border-box;
-		font-size: 12px;
-		line-height: 1;
-		display: inline-block;
-		padding: 3px 6px;
-		color: #333;
-		border-radius: 100px;
-		background-color: #f1f1f1;
-	}
-	.uni-badge-error {
-		color: #fff;
-		background-color: #dd524d;
-	}
-</style>

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

@@ -0,0 +1,2116 @@
+<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 | NumFormat}}</text>
+								</view>
+								<view class="sum-none"  v-if="isDiscount">
+									<!-- <text class="money-sign">¥</text> -->
+									<!-- <text class="money">{{ totalOriginalPrice | NumFormat }}</text> -->
+									<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 | NumFormat}}</text>
+								</view>
+								<view class="sum-none" v-if="isDiscount">
+									<!-- <text class="money-sign">¥</text> -->
+									<!-- <text class="money">{{ totalOriginalPrice | NumFormat }}</text> -->
+									<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.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>

+ 113 - 69
components/cm-module/cm-seller/category.vue

@@ -1,95 +1,108 @@
 <template>
-	<view class="category-container clearfix" :style="{paddingTop:CustomBar+'px'}">
-		<cm-custom :navbar-data='nvabarData'></cm-custom>
-		<!-- 头部轮播 -->
+	<view id="category" :style="{paddingTop:CustomBar+'px'}">
+		<!--顶部搜索导航栏-->
+		<view class="'search-input-fixed" :style="{top:CustomBar/2+'px'}">
+			<cat-search :systeminfo='systeminfo' :navbar-data='nvabarData' :headerBtnPosi ="headerBtnPosi" @click="hanldTabClick"></cat-search>
+		</view>
 		<tui-skeleton v-if="skeletonShow" backgroundColor="#fafafa" borderRadius="10rpx" :isLoading	="true" :loadingType="5"></tui-skeleton>
-		<view class="category-list tui-skeleton">
-			<!--顶部搜索导航栏-->
-<!-- 		<view class="'search-input-fixed">
-				<bt-search :clickPath="clickPath" :toestText='hotSearchText'></bt-search>
-			</view> -->
+		<view class="category-list" v-else>
 			<!-- 左侧分类导航 -->
-			<scroll-view class="left-aside" scroll-y="true" scroll-with-animation :scroll-top="verticalNavTop" style="height:calc(100vh - 202rpx)" :style="{top:CustomBar+'px'}">
-				<view class="row" v-if="m.smalltypeList.length > 0" v-for="(m, index) in categoryList" :key="index" :class="[index==showCategoryIndex?'on':'']" @tap="showCategory($event,index)" :data-id="index">
-					<view class="text tui-skeleton-fillet">
-						{{m.name}}
-					</view>
+			<scroll-view class="left-aside" scroll-y="true" scroll-with-animation :scroll-top="verticalNavTop" :style="{top:(CustomBar+38)+'px',height:(windowHeight-CustomBar+38)+'px'}">
+				<view class="row" v-for="(m, index) in categoryList" :key="index" :class="[index==showCategoryIndex?'on':'']" @tap="showCategory($event,index)" :data-id="index">
+					<view class="text">{{m.name}}</view>
 					<view class="block"></view>
 				</view>
 			</scroll-view>
 			<!--右侧子导航-->
-			<scroll-view  scroll-y="true" class="right-aside" style="height:calc(100vh - 202rpx)" :style="{top:CustomBar+'px'}">
-				<view class="category" v-if="n.smalltypeList.length > 0" v-for="(n,index) in categoryList" :key="index" v-show="index==showCategoryIndex" >
-					<view class="category-box" v-for="(o,oIndex) in n.smalltypeList" :key="oIndex">
-						<view class="title tui-skeleton-fillet">{{o.name}}</view>
-						<view class="list" v-if="o.tinytypeList.length > 0">
-							<view class="box" v-for="(pro,proIndex) in o.tinytypeList" :key="proIndex" @click.stop="navToListPage(pro,proIndex)">
-								<image :src="pro.icon" class="tui-skeleton-fillet"></image>
-								<view class="text tui-skeleton-fillet">{{pro.name}}</view>
+			<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 && 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 && 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>
+							</view>
+							<view v-else class="no-data">
+								<view class="box" @click.stop="navToListPage(small,2)">
+									<image :src="small.crmIcon ? small.crmIcon : 'https://static.caimei365.com/app/img/icon/icon-noneproduct.jpg'"></image>
+									<view class="text">全部商品</view>
+								</view>
 							</view>
 						</view>
-						<view v-else class="no-data">
-							该栏目暂无分类~
+					</template>
+					<template v-else>
+						<view class="category-box BBB">
+							<view class="title">{{first.name}}</view>
+							<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">全部商品a</view>
+								</view>
+							</view>
 						</view>
-					</view>
+					</template>
 				</view>
 			</scroll-view>
 		</view>
 	</view>
 </template>
 <script>
-	import btSearch from '@/components/uni-search/bt-search.vue'
-	import { queryGoodscategory } from "@/api/product.js"
-
+	import catSearch from '@/components/uni-search/cat-search.vue'
 	export default {
 		components: {
-			btSearch,
+			catSearch
 		},
 		data() {
 			return {
-				nvabarData: {		//顶部自定义导航
-					title: '商品分类',  // 导航栏 中间的标题
-					haveBack:false,
-					textLeft:this.$store.state.isIphone,
-					textColor:'#333333',
-					bgColor:'#FFFFFF'
+				nvabarData: {							 //顶部自定义导航
+					showCapsule: 1, // 是否显示左上角图标   1表示显示    0表示不显示
+					title: ''		// 导航栏 中间的标题
 				},
-				isIphoneX:this.$store.state.isIphoneX,
 				CustomBar:this.CustomBar,// 顶部导航栏高度
-				skeletonShow: true,
+				headerBtnPosi:	this.setHeaderBtnPosi(), //获取设备顶部胶囊高度
+				systeminfo: this.setSysteminfo(),		 //获取设备信息
 				headerShow:true,
-				hotSearchText: '你想要的这里都有',
-				clickPath:'/pages/search/search',
 				showCategoryIndex: 0,
 				categoryList: [],//分类列表
 				search: '',
 				cateTop: {},
 				verticalNavTop: 0,
-				CustomBar:this.CustomBar,// 顶部导航栏高度
+				categoryTabIndex:1,
+				windowHeight:0,
+				scrollHeight:0,
+				skeletonShow:true
 			}
 		},
 		created() {
-			this.getProductCate();
+			this.initData();
 		},
 		methods: {
-			// 跳转至商品列表
-			navToList(id){
-				this.$api.navigateTo(`/pages/product/list?cate_id=${id}`)
+			initData() {// 数据初始化
+				this.GetProductCate(this.categoryTabIndex);
+				const {windowHeight, pixelRatio} = wx.getSystemInfoSync();
+				this.windowHeight = windowHeight - 1;
+				this.scrollHeight = windowHeight - 1;
 			},
-			// 获取商品分类列表
-			getProductCate () {
-				queryGoodscategory().then(res =>{
-					this.categoryList = res.data
+			hanldTabClick(data){
+				this.categoryList = []
+				this.GetProductCate(data);
+			},
+			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;
 						}
 					}
-					this.skeletonShow = false;
-				}).catch(res =>{
-					this.$util.msg(res.msg,2000);
+					this.skeletonShow = false
+				}).catch(error =>{
+					this.$util.msg(error.msg,2000)
 				})
 			},
 			showCategory(e,index){//分类切换显示
@@ -101,20 +114,37 @@
 					url: `/pages/search/search?search=${JSON.stringify(this.search)}`
 				})
 			},
-			navToListPage(pro,index){//分类导航跳转
-				let self = this;
-				uni.setStorage({
-					key: 'commodity_id',
-					data: pro.tinyTypeID,
-					success: function () {
-						self.$api.navToListPage({type:'4',value:pro.name,id:pro.tinyTypeID});
-					}
+			navToListPage(item,index){//分类导航跳转
+				switch(index){
+					case 1:
+						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}`)
+						break;
+					case 3:
+						this.$api.navigateTo(`/pages/goods/goods-classify?classType=3&id=${item.tinyTypeId}&title=${item.name}`)
+						break;
+				}
+			},
+			setHeaderBtnPosi(){
+				// 获得胶囊按钮位置信息
+				let headerBtnPosi = uni.getMenuButtonBoundingClientRect();
+				return headerBtnPosi
+			},
+			setSysteminfo(){
+				let systeminfo;
+				uni.getSystemInfo({ // 获取设备信息
+					success: (res) => {
+						systeminfo = res
+					},
 				})
-			}
+				return systeminfo
+			},
 		}
 	}
 </script>
-<style scoped lang="scss">
+<style lang="scss">
 	page {
 		background-color: #fff;
 	}
@@ -127,18 +157,14 @@
 		z-index: 1000;
 		background: #FFFFFF;
 		border-bottom: 1px solid #F7F7F7;
-	}	
-	.category-container{
-		height: 100%;
-	}
-	/*模块分类*/
+	}		
 	.category-list{
 		width: 100%;
 		background-color: #fff;
 		display: flex;
-		
 		.left-aside,.right-aside{
 			position: absolute;
+			top: 100rpx;
 			/*  #ifdef  APP-PLUS  */
 			top: calc(100rpx + var(--status-bar-height));
 			/*  #endif  */
@@ -195,7 +221,6 @@
 		.right-aside{
 			width: 550rpx;
 			left: 200rpx;
-			background: #FFFFFF;
 			.category{
 				width: calc(100%);
 				padding: 0 15rpx 20rpx 0;
@@ -241,9 +266,28 @@
 					.no-data {
 						text-align: center;
 						margin: 30rpx 0;
-						color: #999999;
+						color: #666666;
 						font-size: 24rpx;
 						line-height: 80rpx;
+						.box{
+							width: calc(71.44vw / 3);
+							margin-bottom: 40rpx;
+							display: flex;
+							justify-content: center;
+							align-items: center;
+							flex-wrap: wrap;
+							image{
+								width: 140rpx;
+								height: 140rpx;
+							}
+							.text{
+								margin-top: 8rpx;
+								width: 100%;
+								display: flex;
+								justify-content: center;
+								font-size: $font-size-24;
+							}
+						}
 					}
 				}
 			}

+ 96 - 590
components/cm-module/cm-seller/home.vue

@@ -1,156 +1,50 @@
 <template>
-	<view class="container home clearfix" :style="{paddingTop:CustomBar+'px'}">	
-		<cm-custom :navbar-data='nvabarData'></cm-custom>
-		<!-- 头部轮播 -->
+	<view class="container home clearfix" :style="{paddingTop:CustomBar+'px'}">
+		<customer ref="customer" :navbar-data='nvabarData'></customer>
+		<!-- 主页内容 -->
 		<tui-skeleton v-if="skeletonShow" backgroundColor="#fafafa" borderRadius="10rpx" :isLoading	="true" :loadingType="5"></tui-skeleton>
 		<view class="container-home tui-skeleton">
-			<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 bannerImageList" :key="index" @click.stop="handleBannerActivity(item,index)">
-						<image :src="item" class="tui-slide-image" mode="scaleToFill"/>
-					</swiper-item>
-				</swiper>
-				<view class="swiper__dots-box" v-if="bannerImageList.length > 1">
-					<view v-for="(item,idx) in bannerImageList" 
-						  :key="idx" 
-						  :class="[idx===current?'swiper__dots-long':'none']" 
-						  :data-index="current" class="swiper__dots-item">
-					</view>	  
-				</view>
-			</view>
-			<view class="cate-section clearfix">
-				<!-- 自定义分类导航栏 -->
-				<view class="tabbar clearfix">
-					<view class="cate-item" v-for="(nav,idx) in productsClassifyList" :key="idx" @click.stop="navToListPage(nav)">
-						<image class="tui-skeleton-circular" :src="nav.classifyImage"></image>
-						<text class="tui-skeleton-fillet">{{nav.classifyName}}</text>
-					</view>
-				</view>
-				<!-- 优选分类 -->
-				<view class="tabbar bot clearfix">
-					<view class="cate-item-info" @click.stop="this.$api.navToListPage({type:'1',value:firstModulesName})">
-						<image class="tui-skeleton-circular" :src="firstModulesImage"></image>
-						<text class="tui-skeleton-fillet">{{firstModulesName}}</text>
-					</view>
-					<view class="cate-item-info" @click.stop="this.$api.navToListPage({type:'2',value:secondModulesName})">
-						<image class="tui-skeleton-circular" :src="secondModulesImage"></image>
-						<text class="tui-skeleton-fillet">{{secondModulesName}}</text>
-					</view>
-					<view class="cate-item-info" @click="showTost">
-						<image class="tui-skeleton-circular" :src="navInforList[0].icon"></image>
-						<text class="tui-skeleton-fillet">{{navInforList[0].text}}</text>
-					</view>
-					<view class="cate-item-info">
-						<!-- #ifdef MP-WEIXIN -->
-						<button class="contact-btn" open-type="contact" @bindcontact="handleContact">
-							<image class="tui-skeleton-circular" :src="navInforList[1].icon"></image>
-						</button>	
-						<!-- #endif -->
-						<text class="tui-skeleton-fillet">{{navInforList[1].text}}</text>
-					</view>
-				</view>
-			</view>
-			<!-- 热销商品 -->
-			<view class="hotgoods-section">
-				<view class="s-header" @click="this.$api.navToListPage({type:'3',value:thirdModulesName})">
-					<text class="tip tui-skeleton-fillet">{{thirdModulesName}}</text>
-					<text class="tit tui-skeleton-fillet">更多</text>
-					<text class="iconfont icon-xiayibu"></text>
-				</view>
-				<view class="hotgoods-swiper">
-					<view class="scoll-wrapper clearfix">
-						<view class="floor-item" v-for="(item, index) in organizeProducts" :key="index" @click.stop="navToDetailPage(item.productID)">
-							<image class="tui-skeleton-fillet" :src="item.mainImage" mode="aspectFill"></image>
-							<view class="floor-item-content">
-								<view class="title tui-skeleton-rect">
-									<text class="mclap">{{item.name}}</text>
-								</view>
-								<view class="" v-if="hasLogin">
-									<view class="price tui-skeleton-rect">
-										<text class="p sm">¥</text>
-										<text class="p big">{{item.retailPrice!=null ? item.retailPrice.toFixed(2):''}}</text>
-									</view>
-								</view>
-								<view v-else class="no-price">
-									<text class="p-no">价格:</text>
-									<view class="p-stars">
-										<uni-stars :stars="parseInt(item.price1Grade)"></uni-stars>
-									</view>
-								</view>	
-							</view>
-						</view>
-					</view>
-				</view>	
-			</view>
-			<!-- 底部 -->
-			<view class="footer-section ">
-				<view class="s-header member  tui-skeleton-fillet">
-					<text class="tip">医美机构正品联盟</text>
-				</view>
-				<view class="f-content tui-skeleton-fillet" @click="navto('/pages/service/member')">
-					<image class="tui-banner" src="https://img.caimei365.com/group1/M00/03/71/Cmis2F3wna6AEwQlAAjGFdpI2LM357.png" mode="scaleToFill"></image>
-				</view>
-				<view class="f-tab-section">
-					<!-- 优选分类 -->
-					<view class="tabbar clearfix">
-						<view class="cate-item" @click="showTost">
-							<image class="tui-skeleton-circular" :src="navServerList[0].icon"></image>
-							<text class="tui-skeleton-fillet">{{navServerList[0].text}}</text>
-						</view>
-						<view class="cate-item" @click="navto(navServerList[1].path)">
-							<image class="tui-skeleton-circular" :src="navServerList[1].icon"></image>
-							<text class="tui-skeleton-fillet">{{navServerList[1].text}}</text>
-						</view>
-						<view class="cate-item" @click="navto(navServerList[2].path)">
-							<image class="tui-skeleton-circular" :src="navServerList[2].icon"></image>
-							<text class="tui-skeleton-fillet">{{navServerList[2].text}}</text>
-						</view>
-						<view class="cate-item" @click="telPhoneTo">
-							<image class="tui-skeleton-circular" :src="navServerList[3].icon"></image>
-							<text class="tui-skeleton-fillet">{{navServerList[3].text}}</text>
-						</view>
-					</view>
-				</view>
-				<view class="f-text tui-skeleton-fillet">
-					<view class="">
-						<image class="logo" src="../../../static/logo-c@2x.png" mode=""></image>
-						<text class="">采美365网</text>
-					</view>
-				</view>
-			</view>	
+			<!-- 轮播 -->
+			<banner :list="bannerImageList" v-if="isNavRequest"></banner>
+			<!-- 金刚区菜单 -->
+			<navbars :list="navBarsList" v-if="isNavRequest"></navbars>
+			<!-- 直播 -->
+			<page-special :templateData="templateData" v-if="isLiveRequest"></page-special>
+		</view>	
+		<!-- 楼层 -->
+		<view class="container-section tui-skeleton">
+			<page-floor :list="pageList" :userIdentity="userIdentity" :pageType='1' v-if="isRequest"></page-floor>
+			<supplier-list :supplierObj="supplierObj" v-if="isRequest"></supplier-list>
 		</view>
 		<!-- 活动弹窗 -->
 		<activityAlert :show="isActivity" @click="handleClick" @cancel="handleCancelClick"></activityAlert>
-		<!-- 透明模态层 -->
-		<modal-layer v-if='modallayer'></modal-layer>
+		<!-- 侧边 -->
+		<scroll-top :isScrollTop="isScrollTop" :bottom="50"></scroll-top>
 	</view>
 </template>
 
 <script>
 	import tuiSkeleton from "@/components/tui-skeleton/tui-skeleton"
 	import authorize from '@/common/config/authorize.js'
-	import modalLayer from "@/components/modal-layer"
-	import cmCustom from '@/components/cm-module/home/cm-custom.vue'
-	import activityAlert from '@/components/cm-module/activity/activity_on_1.vue'
-	import uniStars from '@/components/uni-stars/uni-stars.vue'
-	import { userInfoLogin, queryHomeInfo } from "@/api/use.js"
-	import { queryPreferred } from "@/api/product.js"
+	import customer from '@/components/cm-module/homeIndex/customer.vue'
+	import banner from '@/components/cm-module/homeIndex/banner.vue'
+	import navbars from '@/components/cm-module/homeIndex/navbars.vue'
+	import pageFloor from '@/components/cm-module/homeIndex/pageFloor.vue'
+	import pageSpecial from '@/components/cm-module/homeIndex/pageSpecial.vue'
+	import supplierList from '@/components/cm-module/homeIndex/supplierList.vue'
 	import { mapState,mapMutations} from 'vuex';
 	export default {
 		components:{
 			tuiSkeleton,
-			modalLayer,
-			cmCustom,
-			uniStars,
-			activityAlert
+			customer,
+			banner,
+			navbars,
+			pageFloor,
+			pageSpecial,
+			supplierList
 		},
 		data() {
 			return {
-				webviewStyles: {
-					progress: {
-						color: '#FF3333'
-					}
-				},
 				nvabarData: {//顶部自定义导航
 					showCapsule: 1, // 是否显示左上角图标  1表示显示  0表示不显示,
 					showSearch: 0,
@@ -160,152 +54,91 @@
 					textColor:'#FFFFFF'
 				},
 				CustomBar:this.CustomBar,// 顶部导航栏高度
-				userID:'',
+				userID:0,
 				clubStatus:'',
 				current:0,
 				mode:'round',
 				modallayer:false,
 				isLogin:false,
-				bannerImageList:[],
 				skeletonShow: true,
 				userIdentity:'',
-				organizeProducts:[],//常用商品
-				productsClassifyList:[
-					{classifyImage:'https://admin-b.caimei365.com/userfiles/1/images/photo/2020/04/%E7%BB%84%201238.png',classifyName:'采美'},
-					{classifyImage:'https://admin-b.caimei365.com/userfiles/1/images/photo/2020/04/%E7%BB%84%201238.png',classifyName:'采美'},
-					{classifyImage:'https://admin-b.caimei365.com/userfiles/1/images/photo/2020/04/%E7%BB%84%201238.png',classifyName:'采美'},
-					{classifyImage:'https://admin-b.caimei365.com/userfiles/1/images/photo/2020/04/%E7%BB%84%201238.png',classifyName:'采美'},
-					{classifyImage:'https://admin-b.caimei365.com/userfiles/1/images/photo/2020/04/%E7%BB%84%201238.png',classifyName:'采美'}
-				],//分类导航
-				firstModulesName:'https://img.caimei365.com/group1/M00/03/8C/Cmis215XHXSAAZU0AACaPrfbB8I435.png', //优惠模块1
-				secondModulesName:'', //优惠模块2
-				firstModulesImage:'https://img.caimei365.com/group1/M00/03/8C/Cmis215XHXSAAZU0AACaPrfbB8I435.png',//优惠模块icon1
-				secondModulesImage:'',//优惠模块icon2
-				thirdModulesName:'', //优惠模块3
-				navInforList:[
-					{text:'会员中心',icon:'https://img.caimei365.com/group1/M00/03/B0/Cmis217Z9LCABdf_AAAfdMmM_xY655.png'},
-					{text:'在线客服',icon:'https://img.caimei365.com/group1/M00/03/B0/Cmis217Z9BSAXPobAAApo6I0Tlo684.png'}
-				],
-				navServerList:[
-					{text:'会员优惠',icon:'../../../static/temp/server1@2x.png',path:'/pages/service/member'},
-					{text:'售后无忧',icon:'../../../static/temp/server2@2x.png',path:'/pages/service/aftersale'},
-					{text:'购物须知',icon:'../../../static/temp/server3@2x.png',path:'/pages/service/shoppingnotice'},
-					{text:'联系我们',icon:'../../../static/temp/server4@2x.png',path:''},
-				]
+				flootData:[],//楼层
+				bannerImageList:[],//轮播
+				navBarsList:[],//导航分类
+				templateData:{},
+				pageList:[],//楼层
+				supplierObj:{},//供应商列表
+				isScrollTop:false,
+				isRequest:false,
+				isNavRequest:false,
+				isLiveRequest:false,
 			}
 		},
 		created() {
-			this.getSellerHomeInfo()
+			this.$api.getStorage().then((resolve) =>{
+				this.userID = resolve.userId ? resolve.userId : 0
+				this.userIdentity = resolve.userIdentity
+				this.getHomeInformation()
+			})
+		},
+		filters: {
+			NumFormat:function(text) {//处理金额
+				return Number(text).toFixed(2);
+			},
 		},
 		computed: {
-			...mapState(['hasLogin'])
+			...mapState(['hasLogin','userInfo','isActivity'])
 		},
 		methods: {
-			getSellerHomeInfo(){
-				this.getHomeInformation()
-				this.getOrganizeProducts()
-			},		
-			getHomeInformation(){		
-				queryHomeInfo({}).then(res =>{
-					let data = res.data;
-					this.bannerImageList = data.bannerImageList
-					this.mallPageModules = data.mallPageModules
-					this.firstModulesName= data.firstModulesName
-					this.secondModulesName= data.secondModulesName
-					this.firstModulesImage= data.firstModulesImage
-					this.secondModulesImage= data.secondModulesImage
-					this.thirdModulesName= data.thirdModulesName
-					this.productsClassifyList = data.productsClassifyList
-					this.skeletonShow = false;
-					this.$store.commit('updateAllNum',data.shoppingCartCount)
+			...mapMutations(['login','logout']),
+			GetHomeInit(){//金刚区分类
+				this.CommonService.GetHomeInit({source:2}).then(response =>{
+					let data = response.data
+					this.navBarsList = data.topMenuList
+					this.isNavRequest = true
 				}).catch(error =>{
 					this.$util.msg(error.msg,2000)
 				})
 			},
-			getOrganizeProducts(){//获取模块三商品
-				queryPreferred({userId:this.userID,preferredFlag:100,pageNum:1,pageSize:6}).then(res =>{
-					this.organizeProducts = res.data.results
+			GetHomeTopDataInfo(){//直播、活动、文章模块
+				this.CommonService.GetHomeTopDataInfo({source:2}).then(response =>{
+					this.templateData = response.data
+					this.isLiveRequest = true
 				}).catch(error =>{
 					this.$util.msg(error.msg,2000)
 				})
 			},
-			//轮播图切换修改背景色
-			swiperChange(e) {
-				const index = e.detail.current;
-				this.current = index;
-			},
-			formatMoney(num){
-				return num.toString().replace(/\d+/, function (n) { // 先提取整数部分
-					return n.replace(/(\d)(?=(\d{3})+$)/g, function ($1) { // 对整数部分添加分隔符
-						return $1 + ",";
-					});
-				});
+			GetHomeFloorInfo(){//初始化首页楼层数据
+				this.CommonService.GetHomeDataInfo({userId:this.userID,soure:2}).then(response =>{
+					let data = response.data;
+					this.liveList = data.liveList;
+					this.pageList = data.homePageFloor;
+					this.supplierObj = data.supplierImage;
+					this.isRequest = true;
+				}).catch(error =>{
+					this.$util.msg(error.msg,2000)
+				})
 			},
-			handleBannerActivity(item,index){
-				switch(index){
-					case 0:
-						this.$api.navigateTo(`/h5/pages/activity/activity_mid`)
-						break;
-				}
+			getHomeInformation(){//初始化首页数据	
+				this.CommonService.GetHomeModulesDataInfo({ userId:this.userID }).then(res =>{
+					let data = res.data;
+					this.bannerImageList = data.bannerImageList
+					this.mallPageModules = data.mallPageModules
+					this.$store.commit('updateAllNum',data.shoppingCartCount)
+					this.skeletonShow = false;
+					this.GetHomeInit()
+					this.GetHomeTopDataInfo()
+					this.GetHomeFloorInfo()
+				}).catch(error =>{
+					this.$util.msg(error.msg,2000)
+				})
 			},
 			handleClick(data){
-				this.$api.navigateTo(`/h5/pages/activity/activity_mid`)
+				this.$api.navigateTo(`/pages/h5/activity/meobohui`)
 				this.$store.commit('setActivity',data)
 			},
 			handleCancelClick(data){
 				this.$store.commit('setActivity',data)
-			},
-			//分类导航跳转
-			navToListPage(nav){
-				let self = this;
-				uni.setStorage({
-					key: 'commodity_id',
-					data: nav.id,
-					success: function () {
-						self.$api.navToListPage({type:'0',value:nav.classifyName,id:nav.id});
-					}
-				})
-			},
-			navToDetailPage(id) {//跳转商品详情页
-				this.modallayer = true;
-				this.$api.navigateTo(`/pages/goods/product?id=${id}`)
-				this.modallayer = false;
-			},
-			handleContact(e){
-				console.log(e.detail.path)
-				console.log(e.detail.query)
-			},
-			showTost(){
-				this.$util.msg("正在开发中,敬请期待~",2000)
-				// uni.navigateToMiniProgram({
-				// 	appId: 'wx5a5cda32926f55ac',
-				// 	path: '/pages/tabBar/home/home',
-				// 	extraData: {
-				// 		'data1': 'test'
-				// 	},
-				// 	envVersion: 'develop',
-				// 	success(res) {
-				// 		console.log(res)
-				// 		// 打开成功
-				// 	}
-				// })
-			},
-			navto(url){
-				this.$api.navigateTo(url)
-			},
-			swiperNavtopage(link){
-				this.$api.navigateTo(`/h5/pages/activity/activity?productID=4204&path=${link}`)
-			},
-			telPhoneTo(){
-				let self = this;
-				this.$api.get('/home/afterSale',{organizeID:this.userOrganizeID}, 
-					response => {
-						console.log(response.data.contactNumber)
-						uni.makePhoneCall({
-							phoneNumber:response.data.contactNumber //仅为示例
-						});
-					}
-				)	
 			}
 		},
 		onPageScroll(e){//实时获取到滚动的值
@@ -314,10 +147,14 @@
 			}else{
 				this.inputActive = 'float'
 			}	
+			if(e.scrollTop>400){
+				this.isScrollTop = true
+			}else{
+				this.isScrollTop = false
+			}	
 		},
 		onPullDownRefresh() {//下拉刷新
 			this.getHomeInformation()
-			this.getOrganizeProducts()
 			uni.stopPullDownRefresh()
 		},
 		onShareAppMessage(res){//分享转发
@@ -325,352 +162,21 @@
 		      // 来自页面内转发按钮
 		    }
 			return {
-			  title: '采美采购商城-生美/医美采购服务平台',
-			  path: 'pages/tabBar/home/home',
-			  imageUrl:'https://img.caimei365.com/group1/M00/03/8C/Cmis215XHXSAWWkhAAXDP4-6m_c397.png'
+			  title: '生美医美正品采购服务平台',
+			  path: 'pages/tabBar/home/index',
+			  imageUrl:'https://static.caimei365.com/app/img/bg/min-banner.jpg'
 			}
 		}
 	}
 </script>
 
 <style lang="scss">
-	page,.home{
-		width: 100%;
-		height: auto;
-	}	
-	.container-home{
-		background: #FFFFFF;
+	page{
+		background-color: #FFFFFF;
 	}
-	.swiper-banner-box{
+	.container-section{
 		width: 100%;
-		height: 360rpx;
-		padding-top:100rpx;
-		background:#FFFFFF url(https://admin-b.caimei365.com/userfiles/1/images/photo/2020/05/%E8%83%8C%E6%99%AF2%402x.png)no-repeat;
-		position: relative;
-		background-size: cover;
-		margin-top: 10rpx;
-	}	
-	.tui-banner-swiper {
-		width: 700rpx;
-		margin: 0 auto;
-		height: 340rpx;
-		border-radius: 24rpx;
-		overflow: hidden;
-		transform: translateY(0);
-		box-shadow:0px 3px 6px rgba(225,86,22,0.08);
-		margin-top: 16rpx;
-		.banner-item{
-			border-radius: 24rpx;
-		}
-		.tui-slide-image {
-			width: 100%;
-			height: 340rpx;
-			display: block;
-		}
-	}
-	.swiper__dots-box{
-		position: absolute;
-		bottom: 30rpx;
-		left: 0;
-		right: 0;
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		flex: 1;
-		flex-direction: row;
-		justify-content: center;
-		align-items: center;
-		.swiper__dots-item{
-			width: 8rpx;
-			height: 8rpx;
-			border-radius: 100%;
-			margin-left: 6px;
-			background-color:rgba(255,255,255,.7);
-		}
-		.swiper__dots-long{
-			width: 35rpx;
-			height: 8rpx;
-			border-radius: 4rpx;
-			background-color: #ffff;
-			transition: all 0.4s;
-		}
-	}
-	/* 分类 */
-	.cate-section {
-		width: 702rpx;
 		height: auto;
-		padding:34rpx 24rpx 14rpx 24rpx; 
-		background: #fff;
-		.tabbar{
-			margin-bottom: 26rpx;
-			&.bot{
-				padding: 16rpx 24rpx;
-				border-radius: 20rpx;
-				box-shadow:0px 3px 6px rgba(225,86,22,0.07);
-				border: 1px solid #F9F9F9;
-			}
-		}
-		.cate-item {
-			width: 118rpx;
-			margin-right:28rpx;
-			display: flex;
-			float: left;
-			flex-direction: column;
-			align-items: center;
-			font-size: $font-size-26;
-			color: $text-color;
-			line-height: 36rpx;
-			&:last-child{
-				margin-right: 0;
-			}
-			&:nth-child(5n){
-				margin-right: 0;
-			}
-			image {
-				width: 90rpx;
-				height: 90rpx;
-				margin-bottom: 8rpx;
-				border-radius: 32rpx;
-			}	
-		}
-		.cate-item-info {
-			width: 118rpx;
-			margin-right:59.5rpx;
-			display: flex;
-			float: left;
-			flex-direction: column;
-			align-items: center;
-			font-size: $font-size-26;
-			color: $text-color;
-			line-height: 36rpx;
-			&:last-child{
-				margin-right: 0;
-			}
-			image {
-				width: 90rpx;
-				height: 90rpx;
-				margin-bottom: 16rpx;
-				border-radius: 32rpx;
-			}	
-			button.contact-btn{
-				width: 118rpx;
-				height: 90rpx;
-				margin: 0;
-				padding: 0;
-				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;
-				margin-bottom: 16rpx;
-				image{
-					width: 90rpx;
-					height: 90rpx;
-					margin-bottom: 0;
-					border-radius: 32rpx;
-				}
-			}
-		}
-	}
-	.hotgoods-section{
-		background: #FFFFFF;
-		.s-header{
-			display:flex;
-			align-items:center;
-			height: 50rpx;
-			line-height: 50rpx;
-			border-radius: 20rpx 20rpx 0 0;
-			.tip{
-				flex: 4;
-				font-size: 30rpx;
-				color: $text-color;
-				font-weight: bolder;
-				padding-left: 24rpx;
-			}
-			.tit{
-				flex: 4.4;
-				font-size: $font-size-28;
-				color: $text-color;
-				text-align: right;
-			}
-			.icon-xiayibu{
-				flex: 0.6;
-				color: $text-color;
-				text-align: left;
-				font-size: $font-size-24;
-			}
-		}
-	}	
-	.hotgoods-swiper{
-		width: 100%;
-		height: auto;				
-		overflow: hidden;
-		padding-top: 24rpx;
-		background: #FFFFFF;
-		border-radius: 20rpx;
-		margin-bottom: 20rpx;
-		// box-shadow:0px 3px 6px rgba(225,86,22,0.07);
-		.scoll-wrapper{
-			width: 702rpx;
-			height: auto;
-			padding:24rpx 24rpx 0 24rpx;
-			background: #F7F7F7;
-			border-radius: 20rpx;
-			.floor-item{
-				width: 341rpx;
-				margin-right: 20rpx;
-				font-size: $font-size-24;
-				color: $text-color;
-				background: #FFFFFF;
-				line-height: 36rpx;
-				border-radius: 20rpx;
-				margin-bottom: 20rpx;
-				float: left;
-				&:nth-child(2n){
-					margin-right: 0;
-				}
-				image{
-					width: 341rpx;
-					height: 341rpx;
-					border-radius: 20rpx 20rpx 0 0;
-					display: block;
-					margin-bottom: 20rpx;
-				}
-				.floor-item-content{
-					width: 311rpx;
-					padding: 0 15rpx;
-				}
-				.title-none{
-					font-size: $font-size-26;
-					color: #FF2A2A;
-					line-height: 80rpx;
-					.btn{
-						display: inline-block;
-						float: right;
-						width: 112rpx;
-						height: 44rpx;
-						background: $btn-confirm;
-						line-height: 44rpx;
-						font-size: $font-size-24;
-						color: #FFFFFF;
-						text-align: center;
-						border-radius: 22rpx;
-						margin-top: 17rpx;
-					}
-				}
-				.title{
-					width: 100%;
-					height: 72rpx;
-					display: flex;
-					flex-direction: column;
-					.mclap{
-						width: 100%;
-						line-height: 36rpx;
-						text-overflow:ellipsis;
-						display: -webkit-box;
-						word-break: break-all;
-						-webkit-box-orient: vertical;
-						-webkit-line-clamp: 2;
-						overflow: hidden;
-						font-size: 26rpx;
-					}
-				}
-				.no-price{
-					height: 76rpx;
-					line-height: 76rpx;
-					display: flex;
-					.p-no{
-						font-size: $font-size-24;
-						color: $color-system;
-						margin-right: 5rpx;
-					}
-					.p-stars{
-						margin-top: 3rpx;
-					}
-				}
-				.price{
-					color:#FF2A2A;
-					line-height: 80rpx;
-					.sm{
-						font-size: $font-size-24;
-					}
-					.big{
-						font-size: $font-size-28;
-					}
-				}
-			}
-		}
-	}
-	.footer-section{
-		width: 702rpx;
-		padding: 0  24rpx 0 24rpx;
-		background: #FFFFFF;
-		border-radius: 20rpx;
-		.s-header{
-			display:flex;
-			align-items:center;
-			height: 80rpx;
-			line-height: 80rpx;
-			.tip{
-				flex: 1;
-				font-size: 30rpx;
-				color: $text-color;
-				font-weight: bolder;
-			}
-		}
-		.f-content{
-			width: 100%;
-			image{
-				width: 100%;
-				height: 350rpx;
-			}
-		}
-		/*底部服务导航*/
-		.f-tab-section {
-			width: 100%;
-			height: auto;
-			padding: 38rpx 0; 
-			background: #fff;
-			/*底部服务导航*/
-			.cate-item {
-				width: 99rpx;
-				margin-right: 102rpx;
-				float: left;
-				display: flex;
-				flex-direction: column;
-				align-items: center;
-				font-size: $font-size-24;
-				color: $text-color;
-				&:last-child{
-					margin-right: 0;
-				}
-				image {
-					width: 75rpx;
-					height: 75rpx;
-					margin-bottom: 8rpx;
-					border-radius: 50%;
-				}
-			}
-		}	
-		.f-text{
-			.logo{
-				width: 80rpx;
-				height: 80rpx;
-				float: left;
-				margin: 0 6rpx;
-			}
-			display: flex;
-			flex-direction: column;
-			align-items: center;
-			font-size: $font-size-24;
-			color: $text-color;
-			line-height: 80rpx;
-			padding-top: 20rpx;
-		}
+		background-color: #F7F7F7;
 	}
 </style>

+ 132 - 56
components/cm-module/cm-seller/user.vue

@@ -12,67 +12,67 @@
 							<text class="u-tips">协销人员</text>
 						</view>
 					</view>
-					<view class="header-icon"><image :src="headpic == null? '../../../static/temp/icon-seller@3x.png' : headpic" mode=""></image></view>
+					<view class="header-icon" @click="TestZHIboFn()"><image :src="headpic == null? 'https://static.caimei365.com/app/img/icon/icon-seller@3x.png' : headpic" mode=""></image></view>
 				</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="../../../static/temp/order5@3x.png" mode=""></image>
+								<image src="https://static.caimei365.com/app/img/icon/order5@3x.png" mode=""></image>
 								<text 	v-if="beforeConfirmCount>0" 
 										class="uni-badge uni-badge-error uni-small uni-badge--small icon-num" 
 										:class="[beforeConfirmCount < 10 ? 'goleft':'']">
-										{{beforeConfirmCount == 99? '99+' : beforeConfirmCount}}
+										{{beforeConfirmCount >= 99? '99+' : beforeConfirmCount}}
 								</text>
 							</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="../../../static/temp/order1@3x.png" mode=""></image>
+								<image src="https://static.caimei365.com/app/img/icon/order1@3x.png" mode=""></image>
 								<text  v-if="beforePayCount >0" 
 									   class="uni-badge uni-badge-error uni-small uni-badge--small icon-num " 
 									   :class="[beforePayCount < 10 ? 'goleft':'']">
-									   {{beforePayCount == 99? '99+' : beforePayCount}}
+									   {{beforePayCount >= 99? '99+' : beforePayCount}}
 								</text>
 							</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="../../../static/temp/order2@3x.png" mode=""></image>
+								<image src="https://static.caimei365.com/app/img/icon/order2@3x.png" mode=""></image>
 								<text   v-if="beforeShipCount >0" 
 										class="uni-badge uni-badge-error uni-small uni-badge--small icon-num" 
 										:class="[beforeShipCount < 10 ? 'goleft':'']">
-										{{beforeShipCount == 99? '99+' : beforeShipCount}}
+										{{beforeShipCount >= 99? '99+' : beforeShipCount}}
 								</text>
 							</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="../../../static/temp/order3@3x.png" mode=""></image>
+								<image src="https://static.caimei365.com/app/img/icon/order3@3x.png" mode=""></image>
 								<text 	v-if="shippedCount>0" 
 										class="uni-badge uni-badge-error uni-small uni-badge--small icon-num" 
 										:class="[shippedCount < 10 ? 'goleft':'']">
-										{{shippedCount == 99? '99+' : shippedCount}}
+										{{shippedCount >= 99? '99+' : shippedCount}}
 								</text>
 							</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="../../../static/temp/order4@3x.png" mode=""></image>
+								<image src="https://static.caimei365.com/app/img/icon/order4@3x.png" mode=""></image>
 								<text 	v-if="refundsCount >0"
 										class="uni-badge uni-badge-error uni-small uni-badge--small icon-num" 
 										:class="[refundsCount < 10 ? 'goleft':'']">
-										{{refundsCount == 99 ? '99+' : refundsCount}}
+										{{refundsCount >= 99 ? '99+' : refundsCount}}
 								</text>
 							</view>
 							<text class="order-t">退货/款</text>
@@ -84,14 +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">
+						<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>
@@ -100,8 +112,6 @@
 	import authorize from '@/common/config/authorize.js'
 	import uniBadge from '@/components/uni-badge/uni-badge.vue'
 	import { mapState,mapMutations } from 'vuex'
-	import { userInfoLogin } from "@/api/use.js"
-	import { getSellerHome } from "@/api/seller.js"
 	
 	export default{
 		components: {
@@ -133,11 +143,39 @@
 				refundsCount:'', //退货/款角标
 				institutionsCont:120,
 				firstList:[
-					{name:'机构列表',path:'/seller/pages/club/list'},
-					{name:'帮机构下单',path:'/seller/pages/club/club-list'},
-					{name:'拉机构上线',path:'/seller/pages/login/register'},
-					{name:'邀请运营人员',path:'/seller/pages/club/allClub-list'}
+					{
+						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() {
@@ -148,30 +186,34 @@
 		},
 		methods:{
 			...mapMutations(['login','logout']),
-			initData(){
-				authorize.getCode('weixin').then(wechatcode =>{// 根据微信的code获取用户登录状态:1已登录过 -1未登录过
-					authorize.getUserInfo('weixin').then(wxResponse =>{
-						userInfoLogin({code:wechatcode,encryptedData:wxResponse.encryptedData,iv:wxResponse.iv}).then(response =>{
-							this.$store.commit('updateStatus',response.data)
-							this.login(response.data);
-							uni.setStorageSync('token',response.data.token)
-							uni.removeStorageSync('sessionid')
-							uni.setStorageSync('sessionid','JSESSIONID='+response.data.sessionId)
-							this.getUserSellerHome()
-						}).catch(response =>{
-							this.logout()
-							uni.removeStorageSync('sessionid')
-							uni.setStorageSync('sessionid','JSESSIONID='+response.data)
-							this.$store.commit('updateStatus',response.data)
-							this.$api.navigateTo('/seller/pages/login/login')
-						})
-					})
+			async initData(){
+				const wechatCode = await authorize.getCode('weixin');// 根据微信的code获取用户登录状态:1已登录过 -1未登录过
+				const getUserInfo = await authorize.getUserInfo('weixin');
+				const params = { code:wechatCode,encryptedData:getUserInfo.encryptedData,iv:getUserInfo.iv }
+				this.UserService.UserLoginAuthApplets(params).then(response =>{
+					if(response.code == 0 || response.code == 4){
+						this.isLogin = true;
+						this.userID = response.data.userId;						
+						this.userIdentity = response.data.userIdentity;						
+						this.clubStatus = response.data.clubStatus;						
+						this.$store.commit('updateStatus',response.data)
+						this.login(response.data);
+						uni.setStorageSync('token',response.data.token)
+						uni.setStorageSync('unionId',response.data.unionId)
+						this.getUserSellerHome()
+					}else{
+						this.isLogin = false;
+						this.logout()
+						uni.setStorageSync('unionId',response.data.unionId)
+						this.$store.commit('updateStatus',response.data)
+						this.$api.navigateTo('/pages/seller/login/login')
+					}
 				})
-			},
+			},	
 			getUserSellerHome(){
 				this.$api.getStorage().then((resolve) =>{
-					this.userId = resolve.userID
-					getSellerHome({userId:this.userId}).then(response =>{
+					this.userId = resolve.userId ? resolve.userId : 0
+					this.SellerService.GetSellerHome({userId:this.userId}).then(response =>{
 						let sellerData = response.data
 						this.name = sellerData.seller.linkMan1?sellerData.seller.linkMan1:'' 	//协销名称
 						this.headpic = sellerData.seller.logo //会所头像
@@ -187,6 +229,20 @@
 					})
 				})	
 			},
+			TestZHIboFn(){//测试跳转直播小程序
+				// uni.navigateToMiniProgram({
+				// 	appId: 'wx92d650b253f8f2e3',
+				// 	path: '/pages/index/index',
+				// 	extraData: {
+				// 		'data1': 'test'
+				// 	},
+				// 	envVersion: 'develop',
+				// 	success(res) {
+				// 		// 打开成功
+				// 		console.log(res)
+				// 	}
+				// })
+			},
 			navigator(url){
 				this.$api.navigateTo(url)
 			},			
@@ -372,7 +428,6 @@
 		bottom: -170rpx;
 		left: 24rpx;
 		border-radius: 20rpx;
-		box-shadow:0px 3px 6px rgba(225,86,22,0.07);
 	}	
 	.tab-title{
 		font-size: $font-size-28;
@@ -389,7 +444,7 @@
 			float: right;
 			line-height: 80rpx;
 			font-size: $font-size-24;
-			color: $text-color;
+			color: #666666;
 			padding-right: 30rpx;
 		}
 		.iconfont{
@@ -456,33 +511,54 @@
 		padding:0 24rpx;
 		background: $bg-color;
 		border-radius: 20rpx;
-		box-shadow:0px 3px 6px rgba(225,86,22,0.07);
 	}
 	.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;
+		border-bottom: 1px solid #EBEBEB;
+		height: 100rpx;
+		&:last-child{
+			border-bottom: none;
+		}
 		&.cell-hover{
 			background:#fafafa;
 		}
+		.cell-icon{
+			width: 60rpx;
+			height: 100rpx;
+			text-align: center;
+			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:$text-color;
+			color:#666666;
 			.txt{
 				color: #FB4343;
 				padding-right: 10rpx;
 			}
 		}
 		.cell-tit{
-			flex: 1;
+			width: 465rpx;
+			display: block;
+			float: left;
 			font-size: $font-size-28;
-			color: $text-color;
+			color: #666666;
 			margin-right:10rpx;
 		}
 		.cell-tip{

+ 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>

+ 0 - 1
components/cm-module/creatOrder/choiceAddress.vue

@@ -16,7 +16,6 @@
 							<text class="iconfont icon-shouhuodizhi"></text>
 						</view>
 						<view class="address-text">
-							收货地址:
 							{{addressData.province !== undefined ? addressData.province : ''}}
 							{{addressData.city !== undefined ? addressData.city : ''}}
 							{{addressData.town !== undefined ? addressData.town : ''}}

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

@@ -0,0 +1,390 @@
+<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.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}))
+				})
+			},
+			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;
+						}
 					}
 				}
 			}

+ 140 - 30
components/cm-module/creatOrder/goodsList.vue

@@ -4,12 +4,17 @@
 		<view class="goods-list">
 			<view v-for="(item, index) in goodsData" :key="index" class="goods-item">
 				<view class="shoptitle">
-					<view class="title-logo"><image :src="item.logo" mode=""></image></view>
+					<view v-if="item.promotions" class="floor-item-act">
+						<view class="floor-tags">{{item.promotions.name}}</view>	
+					</view>
 					<view class="title-text">{{item.name}}</view> 
 				</view>
-				<view class="productlist" v-for="(pros,idx) in item.productsList" :key="idx">
+				<view class="productlist" v-for="(pros,idx) in item.cartList" :key="idx">
 					<view class="goods-pros-t">
-						<view class="pros-img"><image :src="pros.mainImage" alt="" /></view>
+						<view class="pros-img">
+							<image :src="pros.image" alt="" />
+							<text class="tips" v-if="pros.productType ==2 || pros.productType ==1">赠品</text>
+						</view>
 						<view class="pros-product">
 							<view class="producttitle">{{pros.name}}</view>
 							<view class="productspec"  v-if="pros.productCategory!=2">规格:{{pros.unit}}</view>
@@ -17,12 +22,17 @@
 								<view >商品编码:{{pros.productCode}}</view>
 							</view>
 							<view class="productprice">
-								<view class="price">
-									<text>¥{{pros.retailPrice.toFixed(2)}}</text>
-								</view>
-								<view class="count">
-									<text class="small">x</text>{{pros.productCount}}
+								<view class="price"><text>¥{{pros.price | NumFormat}}</text></view>
+								<view class="count"><text class="small">x</text>{{pros.number}}</view>
+							</view>
+							<view class="floor-item-act" v-if="pros.promotions!=null">
+								<view v-if="PromotionsFormat(pros.promotions)" class="floor-tags">
+									{{pros.promotions.name}}
+									<text v-if ="pros.promotions!=null">
+										:¥{{ pros.promotions == null ? '0.00' : pros.promotions.touchPrice | NumFormat}}
+									</text>
 								</view>
+								<view v-else-if="pros.promotions.type !=3" class="floor-tags">{{pros.promotions.name}}</view>	
 							</view>
 						</view>	
 					</view>
@@ -39,7 +49,12 @@
 						</view>
 				</view>
 				<view class="goods-pros-b">
-					<view class="sum">合计:<text class="money">¥{{item.totalPrice.toFixed(2)}}</text></view>
+					<view class="sum-none" v-if="(item.originalPrice - item.totalPrice)>0">
+						<text class="money-sign">¥</text>
+						<text class="money">{{ item.originalPrice | NumFormat }}</text>
+						<text class="money-reduced">减<text>¥{{ (item.originalPrice - item.totalPrice) | NumFormat}}</text></text>
+					</view>
+					<view class="sum">合计:<text class="money">¥{{ item.totalPrice | NumFormat }}</text></view>
 				</view>
 			</view>
 		</view>	
@@ -62,6 +77,11 @@
 		created(){
 			
 		},
+		filters:{
+			NumFormat(value) {//处理金额
+				return Number(value).toFixed(2);
+			},
+		},	
 		watch: {
 			goodsData: {
 				handler: function (el) {//监听对象的变换使用 function,箭头函数容易出现this指向不正确
@@ -74,6 +94,16 @@
 
 		},
 		methods:{
+			PromotionsFormat(promo){//促销活动类型数据处理
+				if(promo!=null){
+					if(promo.type == 1 && promo.mode == 1){
+						return true
+					}else{
+						return false
+					}
+				}
+				return false
+			},
 			changeHandle (index) {//输入框的值被改变后
 				this.goodsData[index].note = this.remark[index]
 				this.$emit('handleGoodList',this.goodsData)
@@ -107,24 +137,39 @@
 				align-items: center;
 				height: 80rpx;
 				line-height: 80rpx;
-				.title-logo{
-					width: 48rpx;
-					height: 48rpx;
-					float: left;
-					image{
-						width: 48rpx;
-						height: 48rpx;
-					}
-				}
 				.title-text{
+					width: 400rpx;
+					overflow: hidden;
+					text-overflow:ellipsis;
+					white-space: nowrap;
 					float: left;
-					margin-left: 16rpx;
 					font-size: $font-size-28;
 					color: $text-color;
 					text-align: left;
 					line-height: 56rpx;
 					font-weight: bold;
 				}
+				.floor-item-act{
+					height: 56rpx;
+					text-align: center;
+					box-sizing: border-box;
+					float: left;
+					padding: 12rpx 0;
+					margin-right: 12rpx;
+					.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;
+					}
+				}
 			}
 			.productlist{
 				width: 100%;
@@ -134,25 +179,40 @@
 				display: flex;
 				align-items: center;
 				width: 100%;
-				height: 217rpx;
+				height: auto;
 				padding:12rpx 0;
 				.pros-img{
 					width: 210rpx;
 					height: 100%;
 					border-radius: 10rpx;
 					margin:0 26rpx 0 0;
-					border:1px solid #f3f3f3;
+					position: relative;
+					.tips{
+						display: inline-block;
+						width: 80rpx;
+						height: 40rpx;
+						background-image: linear-gradient(214deg, #ff4500 0%, #ff5800 53%, #ff4367 100%);
+						line-height: 40rpx;
+						text-align: center;
+						font-size: $font-size-24;
+						color: #FFFFFF;
+						border-radius:10rpx 0 10rpx 0 ;
+						position: absolute;
+						top:0;
+						left: 0;
+					}
 					image{
-						width: 100%;
-						height: 100%;
+						width: 210rpx;
+						height: 210rpx;
 						border-radius: 10rpx;
+						border:1px solid #f3f3f3;
 					}
 				}
 			}
 			.pros-product{
 				width: 468rpx;
 				height: 100%;
-				line-height: 36rpx;
+				line-height: 40rpx;
 				font-size: $font-size-26;	
 				position: relative;
 				.producttitle{
@@ -168,7 +228,8 @@
 					margin-bottom: 8rpx;
 				}
 				.productspec{
-					height: 36rpx;
+					height: 40rpx;
+					line-height: 40rpx;
 					color: #999999;
 					text-overflow:ellipsis;
 					display: -webkit-box;
@@ -178,12 +239,11 @@
 					overflow: hidden;
 				}
 				.productprice{
-					height: 48rpx;
-					position: absolute;
+					height: 54rpx;
 					width: 100%;
-					bottom: 0;
+					float: left;
 					.price{
-						line-height: 48rpx;
+						line-height: 54rpx;
 						font-size: $font-size-28;
 						width: 48%;
 						color: #FF2A2A;
@@ -198,6 +258,27 @@
 						}
 					}
 				}
+				.floor-item-act{
+					width: 100%;
+					height: 56rpx;
+					text-align: center;
+					box-sizing: border-box;
+					float: left;
+					padding:0 0 10rpx 0;
+					.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;
+					}
+				}
 			}
 			.goods-pros-m{
 				height: 76rpx;
@@ -238,9 +319,38 @@
 			.goods-pros-b{
 				width:100%;
 				height: auto;
+				padding: 10rpx 0;
+				.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: 48rpx;
 					font-size: $font-size-28;
-					line-height: 60rpx;
+					line-height: 48rpx;
 					color: $text-color;
 					display: flex;
 					justify-content: flex-end;

+ 24 - 26
components/cm-module/creatOrder/invoiceTent.vue

@@ -23,7 +23,7 @@
 							</label>
 						</radio-group>
 					</view>
-					<view class="invoice-main from" v-if="invoiceType == '3'">
+					<view class="invoice-main from" v-if="invoiceType == '2'">
 						<view class="invoice-from">
 							<view class="label">单位名称:</view>
 							<input class="form-input" type="text" v-model="invoiceData.invoiceTitle" placeholder="请填写单位信息(必填)" maxlength="20">
@@ -34,7 +34,7 @@
 						</view>
 						<view class="invoice-from">
 							<view class="label">注册地址:</view>
-							<input class="form-input" type="text" v-model="invoiceData.registeredAddress" placeholder="请填写单位注册地址(必填)" maxlength="30">
+							<input class="form-input" type="text" v-model="invoiceData.registeredAddress" placeholder="请填写单位注册地址(必填)" maxlength="100">
 						</view>
 						<view class="invoice-from">
 							<view class="label">注册电话:</view>
@@ -53,7 +53,7 @@
 								   maxlength="19">
 						</view>
 					</view>
-					<view class="invoice-main" v-if="invoiceType == '2'">
+					<view class="invoice-main" v-if="invoiceType == '3'">
 						<view class="invoice-ltitle">发票内容</view>
 						<view class="invoice-group tit">
 							<checkbox-group class="row-group" @change="checkboxChange">
@@ -95,21 +95,19 @@
 </template>
 
 <script>
-	import { getFindInvoice,updateInvoice } from "@/api/order.js"
 	export default{
 		name:"invoice",
 		data() {
 			return{
-				invoiceText:'不发票',
+				invoiceText:'不发票',
 				specClass: '',//规格弹窗css类,控制开关动画
 				invoiceType:'1',//发票类型
 				current:0,
 				titleCurrent:0,
 				inventoryChecked:false,
 				invoiceTypeList:[
-					{value:'1',name:'不开发票'},
-					{value:'2',name:'普通发票'},
-					{value:'3',name:'增值税发票'},
+					{value:'1',name:'不要发票'},
+					{value:'2',name:'要发票'},
 				],
 				invoiceTitleList:[
 					{value:'0',name:'个人'},
@@ -122,7 +120,6 @@
 					invoiceTitleType:'0'//发票抬头类型 1企业 0个人
 				},
 				invoiceData:{
-					id:null,
 					invoiceTitle:'',	 //单位名称
 					corporationTaxNum:'',//纳税人识别号
 					registeredAddress: '',//单位地址
@@ -141,7 +138,7 @@
 		methods:{
 			getUseFindInvoice(){//获取发票信息
 				this.$api.getStorage().then((resolve) => {
-					getFindInvoice({userId:resolve.userID}).then(response =>{
+					this.OrderService.GetFindInvoice({userId:resolve.userId}).then(response =>{
 						if(response.data == null){
 							this.invoiceData = Object.assign(this.invoiceData,'',{type:0})
 						}else{
@@ -152,27 +149,27 @@
 			},
 			updateInvoiceFn(){//保存发票信息
 				this.$api.getStorage().then((resolve) => {
-					let params =Object.assign(this.invoiceData,'',{userId:resolve.userID})
-					updateInvoice(params).then(response =>{})
+					console.log(resolve.userId)
+					this.OrderService.UpdateInvoice(Object.assign({userId:resolve.userId},this.invoiceData)).then(response =>{})
 				})
 			},
 			choiceaInvoiceConfim(){
 				switch(this.invoiceType){
 					case '1':
 						this.choiceaInvoiceThree()
-						this.invoiceText = '不发票'
+						this.invoiceText = '不发票'
 						break;
+					// case '2':
+					// 	this.choiceaInvoiceTwo()
+					// 	this.invoiceText = this.peopleInvoiceData.invoiceTitle
+					// 	break;
 					case '2':
-						this.choiceaInvoiceTwo()
-						this.invoiceText = this.peopleInvoiceData.invoiceTitle
-						break;
-					case '3':
 						this.choiceaInvoiceFirst()
 						this.invoiceText = this.invoiceData.invoiceTitle
 						break;	
 						default:
 						this.choiceaInvoiceThree()
-						this.invoiceText = '不发票'
+						this.invoiceText = '不发票'
 				}
 			},
 			choiceaInvoiceFirst(){//增值税发票
@@ -204,7 +201,7 @@
 				this.$emit('handleChoiceaInvoice',Object.assign(this.invoiceData,'',{type:2}))
 				this.hideSpec()
 			},
-			choiceaInvoiceTwo(){//普通发票
+			choiceaInvoiceTwo(){//取消普通发票.(可删除)	
 				switch(this.peopleInvoiceData.invoiceTitleType){
 					case '0':
 						if(this.peopleInvoiceData.invoiceContent == ''){
@@ -234,7 +231,7 @@
 				this.$emit('handleChoiceaInvoice',Object.assign(this.peopleInvoiceData,'',{type:1}))
 				this.hideSpec()
 			},
-			choiceaInvoiceThree(){//不发票
+			choiceaInvoiceThree(){//不发票
 				this.invoiceData = {}
 				this.$emit('handleChoiceaInvoice',Object.assign(this.invoiceData,'',{type:0}))
 				this.hideSpec()
@@ -258,12 +255,13 @@
 				}
 				switch(this.invoiceType){
 					case '2':
-						this.peopleInvoiceData.invoiceTitleType = "0"
-						this.titleCurrent = 0
-						break;
-					case '3':
 						this.getUseFindInvoice()
 						break;
+					//取消普通发票.(可删除)	
+					// case '3':
+					// 	this.peopleInvoiceData.invoiceTitleType = "0"
+					// 	this.titleCurrent = 0
+					// 	break;
 				}		
 			},
 			radioChangeTitle(e) {
@@ -566,7 +564,7 @@
 					align-items: center;
 					justify-content: center;
 					font-size: $font-size-28;
-					border-radius: 14rpx;
+					border-radius: 44rpx;
 					background: $btn-confirm;
 				}
 			}
@@ -641,7 +639,7 @@
 					align-items: center;
 					.iconfont{
 						font-size: $font-size-32;
-						padding:0 20rpx;
+						padding:0 18rpx;
 						font-size: $text-color;
 					}
 					.btn-input{

+ 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'
 				}
 			}
 		}

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

@@ -0,0 +1,390 @@
+<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.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}))
+				})
+			},
+			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>

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

@@ -392,7 +392,7 @@
 					align-items: center;
 					justify-content: center;
 					font-size: $font-size-28;
-					border-radius: 14rpx;
+					border-radius: 44rpx;
 					background: $btn-confirm;
 				}
 			}
@@ -467,7 +467,7 @@
 					align-items: center;
 					.iconfont{
 						font-size: $font-size-32;
-						padding:0 20rpx;
+						padding:0 18rpx;
 						font-size: $text-color;
 					}
 					.btn-input{

+ 367 - 0
components/cm-module/creatOrder/sellerGoodsList.vue

@@ -0,0 +1,367 @@
+<template name="goods">
+	<view class="goods-template">
+		 <!-- 商品列表 -->
+		<view class="goods-list">
+			<view v-for="(item, index) in goodsData" :key="index" class="goods-item">
+				<view class="shoptitle">
+					<view v-if="item.promotions" class="floor-item-act">
+						<view class="floor-tags">{{item.promotions.name}}</view>	
+					</view>
+					<view class="title-text">{{item.name}}</view> 
+				</view>
+				<view class="productlist" v-for="(pros,idx) in item.productsList" :key="idx">
+					<view class="goods-pros-t">
+						<view class="pros-img">
+							<image :src="pros.mainImage" alt="" />
+							<text class="tips" v-if="pros.giftType == 2 || pros.giftType == 1">赠品</text>
+						</view>
+						<view class="pros-product">
+							<view class="producttitle">{{pros.name}}</view>
+							<view class="productspec"  v-if="pros.productCategory!=2">规格:{{pros.unit}}</view>
+							<view class="productspec" v-if="pros.productCode!=''&&pros.productCode!=null">
+								<view >商品编码:{{pros.productCode}}</view>
+							</view>
+							<view class="productprice">
+								<view class="price"><text>¥{{pros.retailPrice | NumFormat}}</text></view>
+								<view class="count"><text class="small">x</text>{{pros.productCount}}</view>
+							</view>
+							<view class="floor-item-act" v-if="pros.promotions!=null">
+								<view v-if="PromotionsFormat(pros.promotions)" class="floor-tags">
+									{{pros.promotions.name}}
+									<text v-if ="pros.promotions!=null">
+										:¥{{ pros.promotions == null ? '0.00' : pros.promotions.touchPrice | NumFormat}}
+									</text>
+								</view>
+								<view v-else-if="pros.promotions.type !=3" class="floor-tags">{{pros.promotions.name}}</view>	
+							</view>
+						</view>	
+					</view>
+				</view>	
+				<view class="goods-pros-m">
+					<view class="m-text">留言:</view>
+					<view class="m-input">
+						<input type="text" 
+						   v-model="remark[index]" 
+						   @change="changeHandle(index)"
+						   placeholder-class="placeholder"  
+						   maxlength="50" 
+						   placeholder="选填,最多不超过50个汉字"/>
+						</view>
+				</view>
+				<view class="goods-pros-b">
+					<view class="sum-none" v-if="item.reducedPrice>0">
+						<text class="money-sign">¥</text>
+						<text class="money">{{ item.totalPrice | NumFormat }}</text>
+						<text class="money-reduced">减<text>¥{{ item.reducedPrice | NumFormat}}</text></text>
+					</view>
+					<view class="sum">合计:<text class="money">¥{{ ( item.totalPrice -item.reducedPrice ) | NumFormat }}</text></view>
+				</view>
+			</view>
+		</view>	
+	</view>
+</template>
+
+<script>
+	export default{
+		name:"goods",
+		props:{
+			goodsData:{
+				type:Array
+			}
+		},
+		data() {
+			return{
+				remark:[]
+			}
+		},
+		created(){
+			
+		},
+		filters:{
+			NumFormat(value) {//处理金额
+				return Number(value).toFixed(2);
+			},
+		},	
+		watch: {
+			goodsData: {
+				handler: function (el) {//监听对象的变换使用 function,箭头函数容易出现this指向不正确
+					this.goodsData = el
+				},
+				deep: true
+			}
+		},
+		computed: {
+
+		},
+		methods:{
+			PromotionsFormat(promo){//促销活动类型数据处理
+				if(promo!=null){
+					if(promo.type == 1 && promo.mode == 1){
+						return true
+					}else{
+						return false
+					}
+				}
+				return false
+			},
+			changeHandle (index) {//输入框的值被改变后
+				this.goodsData[index].note = this.remark[index]
+				this.$emit('handleGoodList',this.goodsData)
+			}
+		},
+	}
+</script>
+
+<style lang="scss">
+	.goods-template{
+		width: 100%;
+		height: auto;
+		background: #FFFFFF;
+		float: left;
+		margin-top: 24rpx;
+		.goods-list{
+			width: 100%;
+			height: auto;	
+			background:#F7F7F7;
+			.goods-item{
+				width: 702rpx;
+				padding: 0 24rpx;
+				background: #FFFFFF;
+				margin-bottom: 24rpx;
+				&:last-child{
+					margin-bottom: 0;
+				}
+			}
+			.shoptitle{
+				display: flex;
+				align-items: center;
+				height: 80rpx;
+				line-height: 80rpx;
+				.title-text{
+					width: 400rpx;
+					overflow: hidden;
+					text-overflow:ellipsis;
+					white-space: nowrap;
+					float: left;
+					font-size: $font-size-28;
+					color: $text-color;
+					text-align: left;
+					line-height: 56rpx;
+					font-weight: bold;
+				}
+				.floor-item-act{
+					height: 56rpx;
+					text-align: center;
+					box-sizing: border-box;
+					float: left;
+					padding: 12rpx 0;
+					margin-right: 12rpx;
+					.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;
+					}
+				}
+			}
+			.productlist{
+				width: 100%;
+				height: auto;
+			}	
+			.goods-pros-t{
+				display: flex;
+				align-items: center;
+				width: 100%;
+				height: auto;
+				padding:12rpx 0;
+				.pros-img{
+					width: 210rpx;
+					height: 100%;
+					border-radius: 10rpx;
+					margin:0 26rpx 0 0;
+					position: relative;
+					.tips{
+						display: inline-block;
+						width: 80rpx;
+						height: 40rpx;
+						background-image: linear-gradient(214deg, #ff4500 0%, #ff5800 53%, #ff4367 100%);
+						line-height: 40rpx;
+						text-align: center;
+						font-size: $font-size-24;
+						color: #FFFFFF;
+						border-radius:10rpx 0 10rpx 0 ;
+						position: absolute;
+						top:0;
+						left: 0;
+					}
+					image{
+						width: 210rpx;
+						height: 210rpx;
+						border-radius: 10rpx;
+						border:1px solid #f3f3f3;
+					}
+				}
+			}
+			.pros-product{
+				width: 468rpx;
+				height: 100%;
+				line-height: 40rpx;
+				font-size: $font-size-26;	
+				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;
+				}
+				.productspec{
+					height: 40rpx;
+					color: #999999;
+					line-height: 40rpx;
+					text-overflow:ellipsis;
+					display: -webkit-box;
+					word-break: break-all;
+					-webkit-box-orient: vertical;
+					-webkit-line-clamp: 2;
+					overflow: hidden;
+				}
+				.productprice{
+					height: 54rpx;
+					line-height: 54rpx;
+					width: 100%;
+					float: left;
+					.price{
+						line-height: 54rpx;
+						font-size: $font-size-28;
+						width: 48%;
+						color: #FF2A2A;
+						float: left;
+					}
+					.count{
+						height: 100%;
+						float: right;
+						position: relative;
+						.small{
+							color: #666666;
+						}
+					}
+				}
+				.floor-item-act{
+					width: 100%;
+					height: 56rpx;
+					text-align: center;
+					box-sizing: border-box;
+					float: left;
+					padding:0 0 10rpx 0;
+					.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;
+					}
+				}
+			}
+			.goods-pros-m{
+				height: 76rpx;
+				line-height: 76rpx;
+				font-size: $font-size-26;
+				color: $text-color;
+				margin-top: 12rpx;
+				.m-text{
+					width: 62rpx;
+					float: left;
+					padding-right: 20rpx;
+					font-weight:bold;
+				}
+				.m-input{
+					display: -webkit-box;
+					display: -webkit-flex;
+					display: flex;
+					-webkit-box-align: center;
+					-webkit-align-items: center;
+					align-items: center;
+					position: relative;
+					width: 576rpx;
+					height: 36rpx;
+					padding: 20rpx;
+					background: #fff;
+					border-radius: 10rpx;
+					border: 2rpx solid #b2b2b2;
+					input{
+						width: 100%;
+						height: 100%;
+						// background: #F7F7F7;
+						font-size: $font-size-26;
+						line-height: 36rpx;
+						color: #333333;
+						min-height: 36rpx;
+					}
+				}
+			}
+			.goods-pros-b{
+				width:100%;
+				height: auto;
+				padding: 10rpx 0;
+				.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: 48rpx;
+					font-size: $font-size-28;
+					line-height: 48rpx;
+					color: $text-color;
+					display: flex;
+					justify-content: flex-end;
+					.money{
+						color: #FF2A2A;
+						font-size: $font-size-28;
+					}
+				}
+			}
+		}
+	}
+</style>

+ 58 - 47
components/cm-module/creatOrder/sellerInvoice.vue

@@ -2,12 +2,15 @@
 	<view class="invoice-template">
 		 <!-- 发票信息 -->
 		<view class="invoice-title" @tap.stop="hanldOperationConfim">
-			<text class="text">发票信息:</text>
-			<text class="iconfont icon-xiayibu"></text>
+			<text class="text">发票信息</text>
+			<view class="invoice-right">
+				<text class="text-l">{{invoiceText}}</text>
+				<text class="iconfont icon-xiayibu"></text>
+			</view>
 		</view>
-		<view class="invoice-text">
+		<!-- <view class="invoice-text">
 			<text>{{invoiceText}}</text>
-		</view>
+		</view> -->
 		<!--底部选择模态层弹窗组件 -->
 		<view class="popup spec" :class="specClass"  @touchmove.stop.prevent="discard" @tap="choiceaInvoiceConfim">
 			<!-- 遮罩层 -->
@@ -23,26 +26,26 @@
 							</label>
 						</radio-group>
 					</view>
-					<view class="invoice-main from" v-if="invoiceType == '3'">
+					<view class="invoice-main from" v-if="invoiceType == '2'">
 						<view class="invoice-from">
 							<view class="label">单位名称:</view>
-							<input class="form-input" type="text" v-model="invoiceData.invoiceTitle" placeholder="请填写单位信息(必填)" maxlength="20">
+							<input class="form-input" type="text" v-model="invoiceData.invoiceTitle" placeholder="请填写单位信息(必填)" placeholder-class="placeholder" maxlength="20">
 						</view>
 						<view class="invoice-from">
 							<view class="label">纳税人识别号:</view>
-							<input class="form-input" type="text" v-model="invoiceData.corporationTaxNum" placeholder="请填写纳税人识别号(必填)" maxlength="20">
+							<input class="form-input" type="text" v-model="invoiceData.corporationTaxNum" placeholder="请填写纳税人识别号(必填)" placeholder-class="placeholder" maxlength="20">
 						</view>
 						<view class="invoice-from">
 							<view class="label">注册地址:</view>
-							<input class="form-input" type="text" v-model="invoiceData.registeredAddress" placeholder="请填写单位注册地址(必填)" maxlength="30">
+							<input class="form-input" type="text" v-model="invoiceData.registeredAddress" placeholder="请填写单位注册地址(必填)" placeholder-class="placeholder" maxlength="100">
 						</view>
 						<view class="invoice-from">
 							<view class="label">注册电话:</view>
-							<input class="form-input" type="text" v-model="invoiceData.registeredPhone" placeholder="请填写注册电话(必填)" maxlength="15">
+							<input class="form-input" type="text" v-model="invoiceData.registeredPhone" placeholder="请填写注册电话(必填)" placeholder-class="placeholder" maxlength="15">
 						</view>
 						<view class="invoice-from">
 							<view class="label">开户银行:</view>
-							<input class="form-input" type="text" v-model="invoiceData.openBank"   placeholder="请填写开户银行(必填)" maxlength="10">
+							<input class="form-input" type="text" v-model="invoiceData.openBank"   placeholder="请填写开户银行(必填)" placeholder-class="placeholder" maxlength="10">
 						</view>
 						<view class="invoice-from">
 							<view class="label">银行账号:</view>
@@ -50,10 +53,11 @@
 								   type="text" 
 								   v-model="invoiceData.bankAccountNo" 
 								   placeholder="请填写银行账号(必填)" 
-								   maxlength="19">
+								   maxlength="19"
+								   placeholder-class="placeholder">
 						</view>
 					</view>
-					<view class="invoice-main" v-if="invoiceType == '2'">
+					<view class="invoice-main" v-if="invoiceType == '3'">
 						<view class="invoice-ltitle">发票内容</view>
 						<view class="invoice-group tit">
 							<checkbox-group class="row-group" @change="checkboxChange">
@@ -72,13 +76,13 @@
 						</view>
 						<view class="invoice-group from">
 							<view class="group-from" v-if="peopleInvoiceData.invoiceTitleType == '0'">
-								<input class="form-input" type="text" v-model="peopleInvoiceData.invoiceTitle"   placeholder="请填写个人抬头" maxlength="20">
+								<input class="form-input" type="text" v-model="peopleInvoiceData.invoiceTitle"   placeholder="请填写个人抬头" placeholder-class="placeholder" maxlength="20">
 							</view>
 							<view class="group-from" v-if="peopleInvoiceData.invoiceTitleType == '1'">
-								<input class="form-input" type="text" v-model="peopleInvoiceData.invoiceTitle"   placeholder="请填写公司抬头" maxlength="20">
+								<input class="form-input" type="text" v-model="peopleInvoiceData.invoiceTitle"   placeholder="请填写公司抬头" placeholder-class="placeholder" maxlength="20">
 							</view>
 							<view class="group-from" v-if="peopleInvoiceData.invoiceTitleType == '1'">
-								<input class="form-input" type="text" v-model="peopleInvoiceData.corporationTaxNum"   placeholder="请填写纳税人识别号" maxlength="20">
+								<input class="form-input" type="text" v-model="peopleInvoiceData.corporationTaxNum"   placeholder="请填写纳税人识别号" placeholder-class="placeholder" maxlength="20">
 							</view>
 						</view>
 					</view>
@@ -95,21 +99,19 @@
 </template>
 
 <script>
-	import { getFindInvoice,updateInvoice } from "@/api/order.js"
 	export default{
 		name:"invoice",
 		data() {
 			return{
-				invoiceText:'不发票',
+				invoiceText:'不发票',
 				specClass: '',//规格弹窗css类,控制开关动画
 				invoiceType:'1',//发票类型
 				current:0,
 				titleCurrent:0,
 				inventoryChecked:false,
 				invoiceTypeList:[
-					{value:'1',name:'不开发票'},
-					{value:'2',name:'普通发票'},
-					{value:'3',name:'增值税发票'},
+					{value:'1',name:'不要发票'},
+					{value:'2',name:'增值税发票'},
 				],
 				invoiceTitleList:[
 					{value:'0',name:'个人'},
@@ -122,7 +124,6 @@
 					invoiceTitleType:'0'//发票抬头类型 1企业 0个人
 				},
 				invoiceData:{
-					id:'',
 					invoiceTitle:'',	 //单位名称
 					corporationTaxNum:'',//纳税人识别号
 					registeredAddress: '',//单位地址
@@ -141,7 +142,7 @@
 		methods:{
 			getUseFindInvoice(){//获取发票信息
 				this.$api.getComStorage('orderUserInfo').then((resolve) =>{
-					getFindInvoice({userId:resolve.userID}).then(response =>{
+					this.OrderService.GetFindInvoice({userId:resolve.userID}).then(response =>{
 						if(response.data == null){
 							this.invoiceData = Object.assign(this.invoiceData,'',{type:0})
 						}else{
@@ -153,26 +154,26 @@
 			updateInvoiceFn(){//保存发票信息
 				this.$api.getComStorage('orderUserInfo').then((resolve) =>{
 					let params =Object.assign(this.invoiceData,'',{userId:resolve.userID})
-					updateInvoice(params).then(response =>{})
+					this.OrderService.UpdateInvoice(params).then(response =>{})
 				})
 			},
 			choiceaInvoiceConfim(){
 				switch(this.invoiceType){
 					case '1':
 						this.choiceaInvoiceThree()
-						this.invoiceText = '不发票'
+						this.invoiceText = '不发票'
 						break;
+					// case '2':
+					// 	this.choiceaInvoiceTwo()
+					// 	this.invoiceText = this.peopleInvoiceData.invoiceTitle
+					// 	break;
 					case '2':
-						this.choiceaInvoiceTwo()
-						this.invoiceText = this.peopleInvoiceData.invoiceTitle
-						break;
-					case '3':
 						this.choiceaInvoiceFirst()
 						this.invoiceText = this.invoiceData.invoiceTitle
 						break;
 						default:
 						this.choiceaInvoiceThree()
-						this.invoiceText = '不发票'
+						this.invoiceText = '不发票'
 				}
 			},
 			choiceaInvoiceFirst(){//增值税发票
@@ -234,7 +235,7 @@
 				this.$emit('handleChoiceaInvoice',Object.assign(this.peopleInvoiceData,'',{type:1}))
 				this.hideSpec()
 			},
-			choiceaInvoiceThree(){//不发票
+			choiceaInvoiceThree(){//不发票
 				this.invoiceData = {}
 				this.$emit('handleChoiceaInvoice',Object.assign(this.invoiceData,'',{type:0}))
 				this.hideSpec()
@@ -258,10 +259,6 @@
 				}
 				switch(this.invoiceType){
 					case '2':
-						this.peopleInvoiceData.invoiceTitleType = "0"
-						this.titleCurrent = 0
-						break;
-					case '3':
 						this.getUseFindInvoice()
 						break;
 				}		
@@ -311,20 +308,30 @@
 			height: 88rpx;
 			line-height: 88rpx;
 			position: relative;
+			font-size: $font-size-28;
+			font-weight: bold;
 			border-bottom: 1px solid #EBEBEB;
 			.text{
 				font-size: $font-size-28;
 				color: $text-color;
+				font-weight: bold;
 			}
-			.iconfont{
-				width: 50rpx;
-				height: 88rpx;
-				line-height: 88rpx;
-				color: #999999;
-				display: block;
-				position: absolute;
-				right: 0;
-				top: 0;
+			.invoice-right{
+				float: right;
+				color: #2A81FF;
+				.text-l{
+					margin-right: 40rpx;
+				}
+				.iconfont{
+					width: 50rpx;
+					height: 88rpx;
+					line-height: 88rpx;
+					color: #999999;
+					display: block;
+					position: absolute;
+					right: 0;
+					top: 0;
+				}
 			}
 		}
 		.invoice-text{
@@ -387,9 +394,10 @@
 				align-items: flex-start;
 				font-size: $font-size-28;
 				color: $text-color;
-				background: #F7F7F7;
-				border-radius: 14rpx;
+				// background: #F7F7F7;
+				// border-radius: 14rpx;
 				margin-bottom: 20rpx;
+				border-bottom: 2rpx solid #e1e1e1;
 				.label{
 					height: 40rpx;
 					line-height: 40rpx;
@@ -566,7 +574,7 @@
 					align-items: center;
 					justify-content: center;
 					font-size: $font-size-28;
-					border-radius: 14rpx;
+					border-radius: 44rpx;
 					background: $btn-confirm;
 				}
 			}
@@ -641,7 +649,7 @@
 					align-items: center;
 					.iconfont{
 						font-size: $font-size-32;
-						padding:0 20rpx;
+						padding:0 18rpx;
 						font-size: $text-color;
 					}
 					.btn-input{
@@ -682,4 +690,7 @@
 			}
 		}
 	}	
+	.placeholder{
+		color: #b2b2b2;
+	}
 </style>

+ 440 - 0
components/cm-module/creatOrder/sellerRegulations.vue

@@ -0,0 +1,440 @@
+<template name="regulations">
+	<view class="regulations-template">
+		<view class="regulations-title" @tap.stop="hanldOperationConfim">
+			<text class="text">售后条款</text>
+			<view class="freight-right">
+				<text class="text-l">{{regulaText}}</text>
+				<text class="iconfont icon-xiayibu"></text>
+			</view>
+		</view>
+		<!--底部选择模态层弹窗组件 -->
+		<view class="popup spec" :class="specClass"  @touchmove.stop.prevent="discard" >
+			<!-- 遮罩层 -->
+			<view class="mask"></view>
+			<view class="layer">
+				<view class="content">
+					<view class="freight-ltitle">售后条款</view>
+					<text class="iconfont icon-iconfontguanbi" @click="freightConfim"></text>
+					<view class="freight-radio">
+						<radio-group class="row-group" @change="radioChange">
+							<label class="row-input" v-for="(item, index) in regulaDatas" :key="index">
+								<view class="row-text" @click.stop="gotoConten(item)">{{item.name.length>10?item.name.substring(0,10)+'...':item.name}}</view>
+								<radio class="row-radio" :value="item.id" color="#E15616"/>
+							</label>
+						</radio-group>
+					</view>
+				</view>
+				<view class="btn">
+					<view class="button add" @click="freightConfim">确定</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+<script>
+	export default{
+		name:'regulations',
+		props:{
+			regulaDatas:{
+				type:Array
+			}
+		},
+		data(){
+			return{
+				regulaText:'无条款',
+				freightMoney:0,
+				specClass: '',//规格弹窗css类,控制开关动画
+				clauseId:0
+			}
+		},
+		created() {
+		},
+		methods:{
+			gotoConten(item){
+				if(item.name!='无条款'){
+					this.$api.navigateTo(`/pages/service/sellconten?clauseId=${item.id}`)
+				}
+			},
+			radioChange(e){
+				this.clauseId = e.target.value;
+				this.regulaDatas.forEach((item,index)=>{
+					if(item.id==this.clauseId){
+						if(item.name.length>10){
+							this.regulaText = item.name.substr(0,10)+'...'
+						}else{
+							this.regulaText = item.name;
+						}
+					}
+				})
+			},
+			freightConfim(){//提交完成选择
+			this.$emit('handleData',this.clauseId)
+			this.hideSpec()
+			},
+			hideSpec() {//关闭弹窗
+				this.specClass = 'hide';
+				setTimeout(() => {
+					this.specClass = 'none';
+				}, 200);
+			},
+			hanldOperationConfim(data){//显示弹窗
+				this.specClass = 'show';
+				this.freightMoney = this.hanldFreight
+			},
+			showTip(){//显示弹窗
+				this.$emit('@showregulaAlert');
+			},
+		}
+	}
+</script>
+
+<style lang="scss">
+	.regulations-template{
+		width: 100%;
+		height: auto;
+		background: #FFFFFF;
+		float: left;
+		margin-top: 24rpx;
+		.regulations-title{
+			width: 702rpx;
+			padding: 0 24rpx;
+			height: 88rpx;
+			line-height: 88rpx;
+			font-size: $font-size-28;
+			color: $text-color;
+			background: #FFFFFF;
+			float: left;
+			font-weight: bold;
+			border-bottom: 1rpx solid #EBEBEB;
+			.freight-left{
+				float: left;
+				.icon-yunfeishuoming{
+					height: 100%;
+					padding:15rpx;
+					color: $color-system;
+					font-weight: normal;
+				}
+			}
+			.Tk{
+				float: right;
+				margin-right: 38rpx;
+				font-size: $font-size-28;
+				color: #666666;
+			}
+			.freight-right{
+				float: right;
+				color: #2A81FF;
+				.text-l{
+					margin-right: 20rpx;
+				}
+				.text{
+					line-height: 88rpx;
+					color: #ff0000;
+					margin:0 20rpx;
+					font-weight: normal;
+				}
+				.icon-xiayibu{
+					line-height: 88rpx;
+					color: #999999;
+					font-weight: normal;
+				}
+			}
+		}
+	}
+	.freight-ltitle{
+		width: 100%;
+		line-height: 60rpx;
+		height: 60rpx;
+		font-size: $font-size-34;
+		color: #333333;
+		text-align:center;
+	}
+	.icon-iconfontguanbi{
+		position: absolute;
+		top: 0;
+		right: 0;
+		font-size: 34rpx;
+		color: #b2b2b2
+	}
+	.freight-radio{
+		height: 66rpx;
+		line-height: 66rpx;
+		padding: 0 20rpx;
+		.row-group{
+			width: 100%;
+			max-height: 460rpx;
+			overflow: auto;
+
+		}
+		.row-input{
+			height: 66rpx;
+			line-height: 66rpx;
+			width: 100%;
+			display: block;
+			// .row-text:nth-child(1){
+			// 	color: #666666;
+			// 	pointer-events: none;
+			// }
+		}
+		.row-radio{
+			float: right;
+			transform: scale(0.9);
+			color: #b2b2b2;
+		}
+		.row-text{
+			font-size: $font-size-28;
+			color: #1890f9;
+			float: left;
+		}
+	}
+	.freight-group{
+		width: 100%;
+		height: 88rpx;
+		display: flex;
+		border-bottom: 1px solid #FFFFFF;
+		flex-direction: row;
+		.text{
+			display: block;
+			flex: 1;
+			line-height: 88rpx;
+			font-size: $font-size-24;
+			color: #999999;
+			text-align: left;
+			padding-left: 10rpx;
+		}
+		.group-from{
+			flex: 1;
+			height: 40rpx;
+			padding: 20rpx;
+			line-height: 40rpx;
+			align-items: flex-start;
+			font-size: $font-size-24;
+			color: $text-color;
+			background: #F7F7F7;
+			border-radius: 14rpx;
+			margin-bottom: 20rpx;
+			margin-top: 10rpx;
+			.form-input{
+				height: 40rpx;
+				line-height: 40rpx;
+				flex-grow: 1;
+			}
+		}
+	}	
+	/* 加入购物模态层*/
+	@keyframes showPopup {
+		0% {
+			opacity: 0;
+		}
+		100% {
+			opacity: 1;
+		}
+	}
+	@keyframes hidePopup {
+		0% {
+			opacity: 1;
+		}
+		100% {
+			opacity: 0;
+		}
+	}
+	@keyframes showLayer {
+		0% {
+			transform: translateY(0);
+		}
+		100% {
+			transform: translateY(-100%);
+		}
+	}
+	@keyframes hideLayer {
+		0% {
+			transform: translateY(-100%);
+		}
+		100% {
+			transform: translateY(0);
+		}
+	}
+	@keyframes showAmnation {
+		0% {
+			top: -12rpx;
+			opacity: 0;
+		}
+		50% {
+			top: -60rpx;
+			opacity: 1;
+		}
+		100% {
+			top: -100rpx;
+			opacity: 0;
+		}
+	}
+	@keyframes hideAmnation {
+		0% {
+			top: -100rpx;
+			opacity: 0;
+		}
+		100% {
+			top: -12rpx;
+			opacity: 0;
+		}
+	}
+	.popup {
+		position: fixed;
+		top: 0;
+		width: 100%;
+		height: 100%;
+		z-index: 999;
+		display: none;
+		.mask{
+			position: fixed;
+			top: 0;
+			width: 100%;
+			height: 100%;
+			z-index: 21;
+			background-color: rgba(0, 0, 0, 0.6);
+		}
+		.layer {
+			position: fixed;
+			z-index: 22;
+			bottom: -710rpx;
+			width: 702rpx;
+			padding: 24rpx 24rpx 36rpx 24rpx;
+			height: 670rpx;
+			border-radius: 20rpx 20rpx 0 0;
+			background-color: #fff;
+			display: flex;
+			flex-wrap: wrap;
+			align-content: space-between;
+			.content {
+				width: 100%;
+				position: relative;
+			}
+			.btn {
+				width: 100%;
+				height: 88rpx;
+				display: flex;
+				.button {
+					width: 702rpx;
+					height: 88rpx;
+					color: #fff;
+					display: flex;
+					align-items: center;
+					justify-content: center;
+					font-size: $font-size-28;
+					border-radius: 44rpx;
+					background: $btn-confirm;
+				}
+			}
+		}
+		
+		&.show {
+			display: block;
+			.mask{
+				animation: showPopup 0.2s linear both;
+			}
+			.layer {
+				animation: showLayer 0.2s linear both;
+			}
+		}
+		&.hide {
+			display: block;
+			.mask{
+				animation: hidePopup 0.2s linear both;
+			}
+			
+			.layer {
+				animation: hideLayer 0.2s linear both;
+			}
+		}
+		&.none {
+			display: none;
+		}
+		&.service {
+			.row {
+				margin: 30upx 0;
+				.title {
+					font-size: 30upx;
+					margin: 10upx 0;
+				}
+				.description {
+					font-size: 28upx;
+					color: #999;
+				}
+			}
+		}
+		.layer-smimg{
+			width: 114rpx;
+			height: 114rpx;
+			float: left;
+			border-radius: 10rpx;
+			margin-right: 24rpx;
+			image{
+				width: 114rpx;
+				height: 114rpx;	
+				border-radius: 10rpx;
+			}
+		}
+		.layer-nunbox{
+			justify-content: space-between;
+			align-items: center;
+			width: 536rpx;
+			height: 88rpx;
+			padding: 13rpx 0 0 0;
+			float: left;
+			.layer-nunbox-t{
+				width: 100%;
+				height:44rpx;
+				position:relative;
+				display: flex;
+				.layer-nunbox-text{
+					line-height: 44rpx;
+					font-size: $font-size-28;
+				}
+				.number-box{
+					display: flex;
+					justify-content: center;
+					align-items: center;
+					.iconfont{
+						font-size: $font-size-32;
+						padding:0 18rpx;
+						font-size: $text-color;
+					}
+					.btn-input{
+						width: 62rpx;
+						height: 48rpx;
+						line-height: 48rpx;
+						background: #F8F8F8;
+						border-radius: 4rpx;
+						text-align: center;
+						font-size: $font-size-28;
+					}
+				}
+				.product-step{
+					position: absolute;
+					left: 45rpx;
+					bottom: 0;
+					height: 44rpx;
+					background: #FFFFFF;
+				}
+			}
+			.layer-nunbox-b{
+				width: 100%;
+				height:44rpx;
+				margin-top: 13rpx;
+			}
+			.text{
+				line-height: 44rpx;
+				font-size: $font-size-28;
+				.p{
+					color: #FF2A2A;
+				}
+				.p:first-child{
+					margin-left: 30rpx;
+				}
+				.p.sm{
+					font-size: $font-size-24;
+				}
+			}
+		}
+	}	
+</style>

+ 0 - 143
components/cm-module/drag-button/drag-button.vue

@@ -1,143 +0,0 @@
-<template>
-	<view>
-		<view
-			id="_drag_button"
-			class="drag"
-			:style="'left: ' + left + 'px; top:' + top + 'px;'"
-			@touchstart="touchstart"
-			@touchmove.stop.prevent="touchmove"
-			@touchend="touchend"
-			@click.stop.prevent="click"
-			:class="{transition: isDock && !isMove }"
-		>
-		
-			<text>{{ text }}</text>
-		</view>
-	</view>
-</template>
-
-<script>
-	export default {
-		name: 'drag-button',
-		props: {
-			isDock:{
-				type: Boolean,
-				default: false
-			},
-			existTabBar:{
-				type: Boolean,
-				default: false
-			}
-		},
-		data() {
-			return {
-				top:0,
-				left:0,
-				width: 0,
-				height: 0,
-				offsetWidth: 0,
-				offsetHeight: 0,
-				windowWidth: 0,
-				windowHeight: 0,
-				isMove: true,
-				edge: 10,
-				text: '按钮'
-			}
-		},
-		mounted() {
-			const sys = uni.getSystemInfoSync();
-			
-			this.windowWidth = sys.windowWidth;
-			this.windowHeight = sys.windowHeight;
-			
-			// #ifdef APP-PLUS
-				this.existTabBar && (this.windowHeight -= 50);
-			// #endif
-			if (sys.windowTop) {
-				this.windowHeight += sys.windowTop;
-			}
-			console.log(sys)
-			
-			const query = uni.createSelectorQuery().in(this);
-			query.select('#_drag_button').boundingClientRect(data => {
-				this.width = data.width;
-				this.height = data.height;
-				this.offsetWidth = data.width / 2;
-				this.offsetHeight = data.height / 2;
-				this.left = this.windowWidth - this.width - this.edge;
-				this.top = this.windowHeight - this.height - this.edge;
-			}).exec();
-		},
-		methods: {
-			click() {
-				this.$emit('btnClick');
-			},
-			touchstart(e) {
-				this.$emit('btnTouchstart');
-			},
-			touchmove(e) {
-				// 单指触摸
-				if (e.touches.length !== 1) {
-					return false;
-				}
-				
-				this.isMove = true;
-				
-				this.left = e.touches[0].clientX - this.offsetWidth;
-				
-				let clientY = e.touches[0].clientY - this.offsetHeight;
-				// #ifdef H5
-					clientY += this.height;
-				// #endif
-				let edgeBottom = this.windowHeight - this.height - this.edge;
-
-				// 上下触及边界
-				if (clientY < this.edge) {
-					this.top = this.edge;
-				} else if (clientY > edgeBottom) {
-					this.top = edgeBottom;
-				} else {
-					this.top = clientY
-				}
-				
-			},
-			touchend(e) {
-				if (this.isDock) {
-					let edgeRigth = this.windowWidth - this.width - this.edge;
-					
-					if (this.left < this.windowWidth / 2 - this.offsetWidth) {
-						this.left = this.edge;
-					} else {
-						this.left = edgeRigth;
-					}
-					
-				}
-				
-				this.isMove = false;
-				
-				this.$emit('btnTouchend');
-			},
-		}}
-</script>
-
-<style lang="scss">
-	.drag {
-		display: flex;
-		justify-content: center;
-		align-items: center;
-		background-color: rgba(0, 0, 0, 0.5);
-		box-shadow: 0 0 6upx rgba(0, 0, 0, 0.4);
-		color: $uni-text-color-inverse;
-		width: 80upx;
-		height: 80upx;
-		border-radius: 50%;
-		font-size: $uni-font-size-sm;
-		position: fixed;
-		z-index: 999999;
-		
-		&.transition {
-			transition: left .3s ease,top .3s ease;
-		}
-	}
-	
-</style>

+ 2 - 2
components/cm-module/headerNavbar/header-back.vue

@@ -19,7 +19,7 @@
 	var self;
 	export default{
 		name:'headerNavbar',
-		props:{
+		props:{ 
 		    navbarData: { // 由父页面传递的数据
 				type: Object
 		    },
@@ -112,7 +112,7 @@
 		    },
 		    _goHome: function () {
 		      	uni.switchTab({
-		        	url: '/pages/tabBar/home/home'
+		        	url: '/pages/tabBar/home/index'
 		      	})
 		    },
 		    _goUser: function () {

+ 93 - 50
components/cm-module/headerNavbar/header-poduct.vue

@@ -1,14 +1,20 @@
 <template name="headerNavbar">
 	<!-- 自定义导航栏 -->
-	<view class='navbar-wrap' :class="[headerColor? 'bg-color' : 'no-color']" :style="{height:navbarHeight+'px',paddingTop:statusBarHeight+'px'}"> 
-	  	<view class="navbar-text" :style="{lineHeight:(navbarHeight - statusBarHeight)+'px;',fontSize:fontSizeSetting+'px;'}">
-	    	{{navbarData.title ? navbarData.title : " "}}
-	  	</view>
-	  	<view class="navbar-icon" v-if="navbarData.showCapsule ? navbarData.showCapsule : true" 
-			  :style="{top:navbarBtn.top + statusBarHeight+'px;',lineHeight:navbarBtn.height+'px;',left:(navbarBtn.right+5)+'px;',width:navbarBtn.height+'px;',height:navbarBtn.height+'px;'}">
+	<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;'}">
+				<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>
 </template>
 
@@ -42,15 +48,17 @@
 		data() {
 			return{
 				headerType:'',
+				CustomBar:this.CustomBar,// 顶部导航栏高度
+				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
@@ -61,53 +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/home'
-		      	})
-		    }
+		      	uni.navigateBack({
+		        	delta: this.page
+		      	});
+		    },
+		    _goHome: function () {
+		      	uni.switchTab({
+		        	url: '/pages/tabBar/home/index'
+		      	})
+		    }
 		},
 		onShow(){
 	
@@ -130,18 +139,52 @@
 		 }
 	}
 	.navbar-text {
-		 text-align: center;
+		 width: 100%;
 		 color: #000000;
 		 font-weight: 500;
+		 position: fixed;
+		 .logo{
+			 margin: 0 auto;
+			 display: block;
+		 }
+	}
+	.gosearch-btn{
+		height: 100%;
+		background: rgba(255, 255, 255, 0.6);
+		font-size: 28rpx;
+		color: #999999;
+		position: relative;
+		box-sizing: border-box;
+		position:absolute ;
+		top: 0;
+		border: 0.5px solid rgba(0, 0, 0, 0.1);
+		.icon-sousuo{
+			height: 100%;
+			text-align: center;
+			display: block;
+			position: absolute;
+			left: 0;
+			top: 0;
+			font-size: 34rpx;
+			color: #999999;
+			z-index: 10;
+		}
+		.input{
+			height: 100%;
+			float: left;
+			font-size: $font-size-24;
+			text-align: left;
+		}
 	}
 	.navbar-icon {
 		 position: fixed;
 		 display: flex;
 		 border-radius: 50%;
 		 text-align: center;
-		 background: rgba(255,255,255,0.2);
-		 border: 1px solid rgba(0,0,0, 0.1);
+		 background: rgba(255,255,255,0.6);
+		 border: 0.5px solid rgba(0,0,0, 0.1);
 		 box-sizing: border-box;
+		 z-index: 9999;
 	}
 	.navbar-icon .iconfont {
 		 height: 100%;

+ 1 - 1
components/cm-module/headerNavbar/headerNavbar.vue

@@ -93,7 +93,7 @@
 		    },
 		    _goHome: function () {
 		      	uni.switchTab({
-		        	url: '/pages/tabBar/home/home'
+		        	url: '/pages/tabBar/home/index'
 		      	})
 		    }
 		},

+ 166 - 0
components/cm-module/homeIndex/banner.vue

@@ -0,0 +1,166 @@
+<template>
+	<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">
+			<view class="content">
+				<view class="item le">
+					<text class="iconfont icon-zhengpin"><text class="sm">正品保证</text></text>
+				</view>
+				<view class="item ce">
+					<text class="iconfont icon-jigou"><text class="sm">5000+机构</text></text>
+				</view>
+				<view class="item ri">
+					<text class="iconfont icon-gongyingshang"><text class="sm">100+供应商</text></text>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default{
+		name:"address",
+		props:{
+			list:{
+				type:Array
+			}
+		},
+		data() {
+			return{
+				current:0
+			}
+		},
+		created(){
+			
+		},
+		computed: {
+	
+		},
+		methods:{
+			swiperChange(e) {//轮播图切换
+				const index = e.detail.current;
+				this.current = index;
+			},
+			NavToDetailPage(floor) {//跳转
+				this.$api.FlooryNavigateTo(floor)
+			}
+		}
+	}
+</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;
+		position: relative;
+		background-size: cover;
+	}	
+	.tui-banner-swiper {
+		width: 700rpx;
+		margin: 0 auto;
+		height: 340rpx;
+		border-radius: 24rpx;
+		overflow: hidden;
+		transform: translateY(0);
+		box-shadow:0px 3px 6px rgba(225,86,22,0.08);
+		margin-top: 16rpx;
+		.banner-item{
+			border-radius: 24rpx;
+		}
+		.tui-slide-image {
+			width: 100%;
+			height: 340rpx;
+			display: block;
+		}
+	}
+	.swiper__dots-box{
+		position: absolute;
+		bottom: 30rpx;
+		left: 0;
+		right: 0;
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		flex: 1;
+		flex-direction: row;
+		justify-content: center;
+		align-items: center;
+		.swiper__dots-item{
+			width: 8rpx;
+			height: 8rpx;
+			border-radius: 100%;
+			margin-left: 6px;
+			background-color:rgba(255,255,255,.7);
+		}
+		.swiper__dots-long{
+			width: 35rpx;
+			height: 8rpx;
+			border-radius: 4rpx;
+			background-color: #ffff;
+			transition: all 0.4s;
+		}
+	}
+	.swiper-banner-msg{
+		width: 100%;
+		height: 54rpx;
+		box-sizing: border-box;
+		padding: 0 24rpx;
+		margin-top: 24rpx;
+		.content{
+			width: 100%;
+			height: 54rpx;
+			box-sizing: border-box;
+			padding: 0 34rpx;
+			background-color: #fff0e9;
+			border-radius: 16rpx;
+			.item{
+				width: 33.33%;
+				height: 54rpx;
+				line-height: 54rpx;
+				font-size: $font-size-24;
+				color: $color-system;
+				float: left;
+				&.le{
+					text-align: left;
+				}
+				&.ce{
+					text-align: center;
+				}
+				&.ri{
+					text-align: right;
+				}
+				.iconfont{
+					color: $color-system;
+					font-size: $font-size-32;
+					.sm{
+						font-size: $font-size-26;
+					}
+				}
+			}
+		}
+	}
+</style>

+ 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>

+ 32 - 20
components/cm-module/home/cm-custom.vue → components/cm-module/homeIndex/customer.vue

@@ -7,8 +7,10 @@
 	  	</view>
 		<view class="search-input">
 			<view class="gosearch-btn" @click="this.$api.navigateTo(clickPath)">
-				<text class="iconfont icon-iconfonticonfontsousuo1"></text>
-				<text>{{hotSearchText}}</text>
+				<view class="search-icon">
+					<text class="iconfont icon-iconfonticonfontsousuo1"></text>
+				</view>
+				<view class="search-text">{{hotSearchText}}</view>
 			</view>
 		</view>
 	</view>
@@ -30,7 +32,7 @@
 		data() {
 			return{
 				clickPath:'/pages/search/search',
-				hotSearchText:'你想要的这里都有',
+				hotSearchText:'搜索商品/项目仪器',
 				CustomBar:this.CustomBar,// 顶部导航栏高度
 				StatusBar: this.StatusBar,
 				fontSizeSetting:this.fontSizeSetting,
@@ -58,7 +60,7 @@
 			},
 			_goHome:function(){
 				uni.switchTab({
-		        	url: '/pages/tabBar/home/home'
+		        	url: '/pages/tabBar/home/index'
 		      	})
 			}
 		},
@@ -75,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;
 	}
@@ -117,31 +119,41 @@
 	}
 	.search-input{
 		width: 100%;
-		height: 70rpx;
-		padding: 20rpx 0 20rpx 0;
+		height: 110rpx;
+		padding: 20rpx 24rpx;
+		box-sizing: border-box;
 		.gosearch-btn{
-			/* #ifndef APP-NVUE */
-			display: flex;
-			/* #endif */
-			flex: 1;
-			flex-direction: row;
-			justify-content: center;
-			align-items: center;
-			width: 662rpx;
+			width: 100%;
 			height: 100%;
 			border-radius: 40rpx;
 			background: #F0F0F0;
 			margin: 0 auto;
-			padding:0 20rpx;
 			font-size: 28rpx;
 			line-height: 70rpx;
 			color: #8A8A8A;
 			background: #FFFFFF;
-			.icon-iconfonticonfontsousuo1{
-				margin:0 6rpx;
-				font-size: 34rpx;
+			position: relative;
+			box-sizing: border-box;
+			padding-left: 80rpx;
+			.search-icon{
+				width: 80rpx;
+				height: 70rpx;
+				position:absolute ;
+				left: 0;
+				top: 2rpx;
+				text-align: center;
+				line-height: 70rpx;
+				.icon-iconfonticonfontsousuo1{
+					margin:0 6rpx;
+					font-size: $font-size-34;
+					color: #8A8A8A;
+					z-index: 10;
+				}
+			}
+			.search-text{
+				font-size: $font-size-24;
+				line-height: 70rpx;
 				color: #8A8A8A;
-				z-index: 10;
 			}
 		}
 	}

+ 163 - 0
components/cm-module/homeIndex/navbars.vue

@@ -0,0 +1,163 @@
+<template name="navbars">
+	<view>
+		<view class="navbars-content clearfix">
+			<view class="nav-item" v-for="(item,index) in navList" :key="index" @click="NavToDetailPage(item,index)">
+				<view class="icon">
+					<image class="icon-image" :src="item.icon" mode="widthFix"></image>
+				</view>
+				<view class="name">{{ item.name }}</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default{
+		name:"navbars",
+		props:{
+			list:{
+				type:Array
+			}
+		},
+		data() {
+			return{
+				current:100,
+				navList:[]
+			}
+		},
+		created(){
+			this.initData(this.list)
+		},
+		computed: {
+	
+		},
+		methods:{
+			initData(list){
+				this.navList = list
+			},
+			NavToDetailPage(pros,index) {//跳转
+				/**
+				 * 页面跳转类型
+				 * 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:`/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:`/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)
+				}
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.navbars-content{
+		width: 100%;
+		height: auto;
+		box-sizing: border-box;
+		padding: 0 24rpx;
+		margin-top: 24rpx;
+		.nav-item{
+			width: 164rpx;
+			height: auto;
+			float: left;
+			margin-bottom: 30rpx;
+			margin-right: 15.3rpx;
+			&:nth-child(4){
+				margin-right: 0;
+			}
+			&:nth-child(8){
+				margin-right: 0;
+			}
+			.icon{
+				width: 110rpx;
+				height: 110rpx;
+				margin: 0 auto;
+				position: relative;
+				.icon-image{
+					width: 110rpx;
+					height: 110rpx;
+					display: block;
+				}
+				.icon-new{
+					width: 44rpx;
+					height: 22rpx;
+					display: block;
+					position: absolute;
+					right: 0;
+					top: 20rpx;
+				}
+			}
+			.name{
+				width: 100%;
+				height: 40rpx;
+				line-height: 40rpx;
+				text-align: center;
+				font-size: $font-size-26;
+				color: #666666;
+			}
+			.nav-cell-main{
+				width: 100%;
+				height: auto;
+				position: absolute;
+				right: 0;
+				.nav-cell{
+					width: 164rpx;
+					height: auto;
+					float: left;
+					margin-bottom: 30rpx;
+					margin-right: 15.3rpx;
+					&:nth-child(4){
+						margin-right: 0;
+					}
+					&:nth-child(8){
+						margin-right: 0;
+					}
+					.icon{
+						width: 130rpx;
+						height: 130rpx;
+						margin: 0 auto;
+						position: relative;
+						.icon-image{
+							width: 130rpx;
+							height: 130rpx;
+							display: block;
+						}
+						.icon-new{
+							width: 44rpx;
+							height: 22rpx;
+							display: block;
+							position: absolute;
+							right: 0;
+							top: 20rpx;
+						}
+					}
+					.name{
+						width: 100%;
+						height: 40rpx;
+						line-height: 40rpx;
+						text-align: center;
+						font-size: $font-size-28;
+						color: #666666;
+					}
+				}
+			}
+		}
+	}
+</style>

+ 146 - 0
components/cm-module/homeIndex/pageFloor.vue

@@ -0,0 +1,146 @@
+<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="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 v-if="page.floorContent.templateType == '2'">
+				<templateB :pageData="page" :userIdentity="userIdentity"></templateB>
+			</template>
+			<template v-if="page.floorContent.templateType == '3'">
+				<templateC :pageData="page" :userIdentity="userIdentity"></templateC>
+			</template>
+			<template v-if="page.floorContent.templateType == '4'">
+				<templateD :pageData="page" :userIdentity="userIdentity"></templateD>
+			</template>
+			<template v-if="page.floorContent.templateType == '5'">
+				<templateE :pageData="page" :userIdentity="userIdentity"></templateE>
+			</template>
+			<template v-if="page.floorContent.templateType == '6'">
+				<templateF :pageData="page" :userIdentity="userIdentity"></templateF>
+			</template>
+			<template v-if="page.floorContent.templateType == '7'">
+				<templateG :pageData="page" :userIdentity="userIdentity"></templateG>
+			</template>
+			<template v-if="page.floorContent.templateType == '8'">
+				<templateH :pageData="page" :userIdentity="userIdentity"></templateH>
+			</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: []
+		}
+	},
+	created() {
+		this.initData(this.list)
+	},
+	computed: {},
+	methods: {
+		initData(data) {
+			this.pageFloorList = data
+		},
+		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;
+	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>

+ 331 - 0
components/cm-module/homeIndex/pageSpecial.vue

@@ -0,0 +1,331 @@
+<template name="pagesProduct">
+	<view>
+		<view class="container-pages clearfix">
+			<scroll-view scroll-x>
+				<view class="tui-goods__list">
+					<view class="tui-goods__item" v-if="tempData.liveList != ''">
+						<view class="tui-group-name" @click="LiveGoPath">
+							<view class="tui-group-title"><text>采美LIVE</text></view>
+							<view class="iconfont icon-xiayibu"></view>
+						</view>
+						<view class="tui-goods__main" :class="flIndex == 0 ? 'one' : ''" v-for="(live, flIndex) in tempData.liveList" :key="flIndex" @click="LiveGoPathPros(live)">
+							<view class="tui-goods__imgbox" v-if="flIndex === 0">
+								<image :src="live.homePageImage" mode="" class="tui-goods__img"></image>
+								<view class="tui-goods__name">{{ live.liveTitle }}</view>
+								<view class="tui-goods__statu">
+									<text class="iconfont icon-weikaishi" v-if="live.liveStatus == 1"></text>
+									<image :src="iconLive" mode="widthFix" class="icon-live" v-if="live.liveStatus == 2"></image>
+									<text class="iconfont icon-jieshu" v-if="live.liveStatus == 3"></text>
+									<text>{{ live.liveStatus | statusType }}</text>
+								</view>
+							</view>
+							<view class="tui-goods__text" v-if="flIndex > 0">{{ live.liveTitle }}</view>
+						</view>
+					</view>
+					<view class="tui-goods__item" v-if="tempData.cmImageList != ''">
+						<view class="tui-group-name" @click="NewActivityList">
+							<view class="tui-group-title"><text>最新活动</text></view>
+							<view class="iconfont icon-xiayibu"></view>
+						</view>
+						<view class="tui-goods__main" :class="flIndex == 0 ? 'one' : ''" v-for="(cmImage, flIndex) in tempData.cmImageList" :key="flIndex" @click="NewActivityListPath(cmImage)">
+							<view class="tui-goods__imgbox" v-if="flIndex === 0">
+								<image :src="cmImage.homePageImage" mode="" class="tui-goods__img"></image>
+								<view class="tui-goods__name">{{ cmImage.title }}</view>
+							</view>
+							<view class="tui-goods__text" v-if="flIndex > 0">{{ cmImage.title }}</view>
+						</view>
+					</view>
+					<view class="tui-goods__item" v-if="tempData.infoList != ''">
+						<view class="tui-group-name" @click="NavArticlePath('https://www.caimei365.com/info/center-3-1.html')">
+							<view class="tui-group-title"><text>热门文章</text></view>
+							<view class="iconfont icon-xiayibu"></view>
+						</view>
+						<view class="tui-goods__main" :class="flIndex == 0 ? 'one' : ''" v-for="(info, flIndex) in tempData.infoList" :key="flIndex" @click="NavArticlePath(info.link)">
+							<view class="tui-goods__imgbox" v-if="flIndex === 0">
+								<image :src="info.homePageImage" mode="" class="tui-goods__img"></image>
+								<view class="tui-goods__name">{{ info.title }}</view>
+							</view>
+							<view class="tui-goods__text" v-if="flIndex > 0">{{ info.title }}</view>
+						</view>
+					</view>
+				</view>
+			</scroll-view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import { mapState,mapMutations} from 'vuex';
+	export default{
+		name:"pagesProduct",
+		props:{
+			templateData:{
+				type:Object
+			}
+		},
+		data() {
+			return{
+				tempData:{},
+				iconLive:'https://static.caimei365.com/app/img/icon/icon-live.gif'
+			}
+		},
+		filters: {
+			statusType:function(value) {
+				switch (value) {
+					case 1:
+						return  '未开始';
+						break;
+					case 2:
+						return  '直播中';
+						break;
+					case 3:
+						return  '看回放';
+						break;
+				}
+			},
+			NumFormat:function(value) {//处理金额
+				return Number(value).toFixed(2);
+			},
+		},
+		created(){
+			this.initData(this.templateData)
+		},
+		methods:{
+			initData(data){
+				this.tempData = data
+			},
+			NavArticlePath(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('/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、供应商主页
+				 * 8、专题活动页,9、二手市场介绍,10、二手商品列表,11、二手商品发布,12、商品搜索,13、信息详情
+				 * 14、品牌招商介绍页,15、维修保养介绍页,16、首页,17、注册页,18、信息中心,19、供应商列表
+				 **/
+				if(pros.linkType){
+					console.log(pros.linkType)
+					const typeMap = {
+					 	1:`/pages/goods/goods-instrument?linkId=${pros.linkParam.id}&title=${pros.name}`,
+					 	2:`/pages/goods/instrument-details?id=${pros.linkParam.id}`,
+						4:`/pages/h5/activity/activity?title=${pros.title}&link=${pros.appletsLink}`,
+					 	5:`/pages/goods/product?id=${pros.linkParam.id}`,
+					 	// 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:`/pages/h5/article/path?link=${pros.link}`,
+					 	19:`/pages/search/search-supplier?keyWord=${pros.linkParam.keyword}`
+					}
+					const url = typeMap[pros.linkType];
+					uni.navigateTo({
+					  	url:url
+					})
+				}
+			},
+			LiveGoPath(){//查看直播
+				this.$api.navigateTo('/pages/h5/article/path-live')
+				
+				// uni.navigateToMiniProgram({
+				// 	appId: 'wx92d650b253f8f2e3',
+				// 	path: '/pages/index/index',
+				// 	extraData: {
+				// 		'data1': 'test'
+				// 	},
+				// 	envVersion: 'develop',
+				// 	success(res) {
+				// 		// 打开成功
+				// 		console.log(res)
+				// 	}
+				// })
+			},
+			LiveGoPathPros(live){
+				// 友盟埋点首页直播模块点击
+				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}`)
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.container-pages{
+		width: 100%;
+		height:508rpx;
+		padding: 24rpx;
+		float: left;
+		background-color: #F7F7F7;
+		box-sizing: border-box;
+		background-color: #F7F7F7;
+		overflow: hidden;
+		display: flex;
+		align-items: center;
+		.tui-goods__list {
+			display: flex;
+			align-items: center;
+		}
+		.tui-goods__item {
+			background-color: #fff;
+			width: 307rpx;
+			height: 460rpx;
+			border-radius: 16rpx;
+			box-sizing: border-box;
+			margin-right: 16rpx;
+			padding: 17rpx;
+		}
+		.tui-group-name{
+			width: 100%;
+			height: 36rpx;
+			float: left;
+			margin-bottom: 13rpx;
+			.tui-group-title{
+				font-size: 26rpx;
+				line-height: 36rpx;
+				float: left;
+				color: #333333;
+			}
+			.icon-xiayibu{
+				font-size: 26rpx;
+				line-height: 36rpx;
+				float: right;
+				color: #909090;
+			}
+		}
+		.tui-goods__main{
+			width: 100%;
+			height: auto;
+			float: left;
+			position: relative;
+			&.one{
+				margin-bottom: 14rpx;
+			}
+		}
+		.tui-goods__imgbox {
+			width: 273rpx;
+			height: 273rpx;
+			box-sizing: border-box;
+			border-radius: 8rpx;
+		}
+		.tui-goods__img {
+			max-width: 273rpx;
+			max-height: 273rpx;
+			border-radius: 8rpx;
+			display: block;
+		}
+		.tui-goods__name{
+			width: 100%;
+			height: 48rpx;
+			float: left;
+			line-height: 48rpx;
+			box-sizing: border-box;
+			padding-left: 12rpx;
+			font-size: $font-size-24;
+			color: #FFFFFF;
+			background-color: rgba(0,0,0,0.4);
+			position: absolute;
+			bottom: 0;
+			left: 0;
+			white-space: nowrap;
+			text-overflow: ellipsis;
+			overflow: hidden;
+			border-radius:0 0 8rpx 8rpx;
+		}
+		.tui-goods__statu{
+			padding-left: 45rpx;
+			padding-right: 10rpx;
+			height: 35rpx;
+			position: absolute;
+			top: 17rpx;
+			left: 17rpx;
+			background-color: rgba(0,0,0,0.4);
+			border-radius: 18rpx;
+			line-height: 35rpx;
+			color: #FFFFFF;
+			text-align: right;
+			font-size: $font-size-20;
+			.icon-live{
+				width: 17rpx;
+				height: 17rpx;
+				display: block;
+				margin: 0 auto;
+				position: absolute;
+				left: 15rpx;
+				top: 9rpx;
+			}
+			.iconfont{
+				width: 35rpx;
+				height: 35rpx;
+				line-height: 35rpx;
+				display: block;
+				position: absolute;
+				left: 10rpx;
+				font-size: $font-size-26;
+				&.icon-weikaishi{
+					color: #E56D00;
+					left:0;
+				}
+				&.icon-jieshu{
+					color: #FFFFFF;
+					left:0;
+					font-size: 22rpx;
+				}
+			}
+		}
+		.tui-goods__text{
+			width: 100%;
+			height: 44rpx;
+			float: left;
+			line-height: 44rpx;
+			box-sizing: border-box;
+			padding-left: 12rpx;
+			font-size: $font-size-24;
+			color: #666666;
+			white-space: nowrap;
+			text-overflow: ellipsis;
+			overflow: hidden;
+			position: relative;
+			&::before{
+				content: '';
+				width: 8rpx;
+				height: 8rpx;
+				border-radius: 50%;
+				background-color: #cccccc;
+				position: absolute;
+				left: 0;
+				top: 18rpx;
+			}
+		}
+	}	
+</style>

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

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

+ 115 - 58
components/cm-module/listTemplate/buyagainList.vue

@@ -3,26 +3,41 @@
 		<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" >
-									<text class="price-view activity" v-if="item.isShowActFlg">活</text>
-									<text class="price-view ladder" v-if="item.ladderPriceFlag == 1">阶</text>
-									<text class="price-larger">¥{{item.retailPrice.toFixed(2)}}</text>
-								</view>
-								<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.originalPrice : item.price) | NumFormat }}
+									</text>
+								</view>
 							</view>
 							<button class="add-cart-btn" @click.stop="operationHanld(item)">数量</button>
 						</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">
+								<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>
 				</view>
 				<view v-if="showLoading && productList.length > 4 && !showRegularBtn">
@@ -53,7 +68,6 @@
 	import modalLayer from "@/components/modal-layer"
 	import uniStars from '@/components/uni-stars/uni-stars.vue'
 	import cmDrag from '@/components/cm-custom/cm-drag.vue'
-	import { queryAgaingoodslist } from "@/api/product.js"
 	import { mapState,mapMutations } from 'vuex';
 	export default{
 		name:'productList',
@@ -71,7 +85,7 @@
 				windowHeight: '',
 				showSkeleton: true,
 				isShowEmpty: false,
-				userID: '',
+				userId: '',
 				scrollHeight: '',
 				productList: [],
 				showLoading: false,
@@ -93,10 +107,15 @@
 			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: {
+			NumFormat:function(text) {//处理金额
+				return Number(text).toFixed(2);
+			},
+		},
 		computed: {
 			...mapState(['hasLogin','userInfo'])
 		},
@@ -117,22 +136,30 @@
 				this.loadingText = '加载中';
 				this.isShowEmpty = false;				
 				if(loadMore) {this.pageNum += 1;}
-				let params = {userId:this.userID,pageNum:this.pageNum,pageSize:this.pageSize}
-				queryAgaingoodslist(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){
@@ -143,6 +170,7 @@
 							newProductList.push(Object.assign({},item,{isShowActFlg:isActFlg}))
 						})
 						this.productList = newProductList
+						console.log(this.productList)
 						// 防上拉暴滑
 						this.pullFlag = false;
 						setTimeout(()=>{
@@ -160,7 +188,8 @@
 							this.isShowEmpty = true;
 						}
 					}
-				}).catch(error =>{
+				})
+				.catch(error =>{
 					this.$util.msg(error.msg,2000);
 				})
 			},
@@ -172,10 +201,19 @@
 				this.$api.navigateTo(`/pages/goods/product?id=${id}`);
 				this.isModallayer = false;
 			},
-			
 			repurchModel(){
 				this.$util.modal('','此商品的价格有变化,原来的购买价已不适用','知道了','',false,() =>{})
 			},
+			PromotionsFormat(promo){//促销活动类型数据处理
+				if(promo!=null){
+					if(promo.type == 1 && promo.mode == 1){
+						return true
+					}else{
+						return false
+					}
+				}
+				return false
+			},
 			onShowClose () {//输入框失去焦点时触发
 				if(this.searchInputVal != ''){
 					this.isShowClose = true
@@ -225,7 +263,7 @@
 		}
 	}
 	.all-type-list-content {
-		height: 240rpx;
+		height: auto;
 		padding: 24rpx;
 		background: #fff;
 		margin-bottom: 2rpx;
@@ -268,9 +306,44 @@
 	}
 	.list-details-price {
 		width: 100%;
-		display: flex;
-		flex-direction: row;
-		justify-content: space-between;		
+		float: left;
+		line-height: 54rpx;
+		.floor-item-act{
+			height: 54rpx;
+			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: 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;
+			}
+		}
 		.price-icon {
 			width: 22rpx;
 			height: 28rpx;
@@ -284,8 +357,6 @@
 		.list-login-now {
 			width: 375rpx;
 			color: #F8C499;
-			position: absolute;
-			bottom: 0;
 			.p-no{
 				float: left;
 				font-size: $font-size-24;
@@ -304,38 +375,22 @@
 				color: #FF2A2A;
 			}
 		}
-		
 		.list-shop{
-			width: 100%;
 			height: auto;
-			flex: 6;
+			float: left;
 			.list-price {
 				width: 100%;
 				color: #FF2A2A;
 				float: left;
-				line-height:36rpx ;
+				line-height:54rpx ;
 				align-items: center;
 				justify-content: center;
 				.price-larger {
-					margin-top: 20rpx;
 					font-size: $font-size-30;
 					display: inline-block;
-				}
-				.price-view{
-					display: inline-block;
-					width: 40rpx;
-					border-radius: 10rpx;
-					font-size: $font-size-22;
-					text-align: center;
-					color: #FFFFFF;
-					height: 36rpx;
-					line-height: 36rpx;
-					margin-right: 8rpx;
-					&.ladder{
-						background: linear-gradient(135deg,rgba(255,0,0,1) 0%,rgba(242,143,49,1) 100%);
-					}
-					&.activity{
-						background: linear-gradient(135deg,rgba(128,0,255,1) 0%,rgba(242,49,153,1) 100%);
+					&.none{
+						text-decoration: line-through;
+						color: #999999;
 					}
 				}
 			}
@@ -354,15 +409,17 @@
 			}
 		}
 		.add-cart-btn {
-			flex: 4;
-			width: 156rpx;
-			height: 64rpx;
-			line-height: 64rpx;
-			border-radius: 32rpx;
+			float: right;
+			width: 140rpx;
+			height: 54rpx;
+			line-height: 54rpx;
+			border-radius: 27rpx;
 			color: #fff;
-			font-size: 26rpx;
+			font-size: 24rpx;
 			margin-right: 0;
-			background:linear-gradient(135deg,rgba(242,143,49,1) 0%,rgba(225,86,22,1) 100%);
+			background:#FFFFFF;
+			border: 1px solid #C9C9C9;
+			color: $text-color;
 		}
 	}
 	.cart-icon {

+ 455 - 0
components/cm-module/listTemplate/classifyProductList.vue

@@ -0,0 +1,455 @@
+<!-- 金刚区商品模块 -->
+<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.productID)">
+				<image mode='widthFix' :src="item.mainImage"  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}}</text>
+					<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">
+								<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 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">
+								<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="coupon-tags" v-if="item.couponsLogo">优惠券</view>
+								<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>
+							<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">
+							<view v-if="userIdentity == 1">
+								<text class="price-larger" :class="PromotionsFormat(item.promotions) ? 'none' : ''">
+								  ¥{{ (PromotionsFormat(item.promotions) ? item.price1 : item.retailPrice) | NumFormat }}
+								</text>
+							</view>	
+							<view v-if="userIdentity == 4">
+								<view class="price-larger" v-if="item.price1TextFlag == '1'">
+									<text class="txt">¥未公开价格</text>
+								</view>
+								<view v-else>
+									<view class="price-larger" v-if="item.price1TextFlag == '2'">
+										<text class="txt">¥价格仅会员可见</text>
+									</view>
+									<template v-else>
+										<text class="price-larger" :class="PromotionsFormat(item.promotions) ? 'none' : ''">
+										  ¥{{ (PromotionsFormat(item.promotions) ? item.price1 : item.retailPrice) | NumFormat }}
+										</text>
+									</template>
+								</view>
+							</view>
+							<view v-if="userIdentity == 2">
+								<view class="price-larger" v-if="item.price1TextFlag == '1'">
+									<text class="txt">¥未公开价格</text>
+								</view>
+								<template v-else>
+									<text class="price-larger" :class="PromotionsFormat(item.promotions) ? 'none' : ''">
+									  ¥{{ (PromotionsFormat(item.promotions) ? item.price1 : item.retailPrice) | NumFormat }}
+									</text>
+								</template>
+							</view>
+						</view>	
+						<view  v-else class="list-login-now">
+							<text class="p-no">¥</text>
+							<uni-stars :stars="parseInt(item.price1Grade)" :font-size='36' :width-info="180"></uni-stars>
+						</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 uniStars from '@/components/uni-stars/uni-stars.vue'
+	import { mapState,mapMutations } from 'vuex';
+	export default{
+		name:'CommodityList',
+		components:{
+			listSkeleton,
+			modalLayer,
+			uniStars
+		},
+		props: {
+			emptyText: {
+				type: String
+			},
+			serverUrl: {
+				type: String
+			},
+			classifyID: {
+				type:Number
+			}
+		},
+		data(){
+			return{
+				clubStatus:'',
+				isModallayer:false,
+				windowHeight: '',
+				showSkeleton: true,
+				showEmpty: false,
+				userID: 0,
+				userIdentity:'',
+				scrollHeight: '',
+				listData: [],
+				showLoading: false,
+				loadingNow: true,
+				loadingText: '上拉加载更多',
+				pageSize: 20,
+				pageNum: 1,
+				totalPage: 1,
+				hasNextPage:false,
+				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.userIdentity = resolve.userIdentity
+				this.getListFromServer();
+			}).catch(error =>{
+				this.getListFromServer();
+			})
+		},
+		filters: {
+			NumFormat:function(text) {//处理金额
+				return Number(text).toFixed(2);
+			},
+		},		
+		computed: {
+			...mapState(['hasLogin','userInfo'])
+		},
+		methods:{
+			toLower() {
+				if(this.hasNextPage && 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 ={
+						classifyId:this.classifyID,
+						userId:this.userID,
+						pageNum:this.pageNum,
+						pageSize:this.pageSize,
+					}
+				this.CommonService.GetHomeClassify(params).then(response =>{	
+					const resList = response.data.results;
+					if(resList && resList.length > 0){
+						this.showEmpty = false
+						this.hasNextPage = response.data.hasNextPage;
+						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.hasNextPage) {
+							this.loadingText = '上拉加载更多';
+						} else {
+							this.showLoading = true;
+							this.loadingNow = false;
+							this.loadingText = '已至底部';
+						}
+					} 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.productID)
+				})
+				this.productIds = productIdArr.join(",");
+				this.ProductService.querySearchProductPrice(
+					{
+						userId: this.userID,
+						productIds:this.productIds,
+						source: 2
+					}
+				).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.productID == 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: 38rpx;
+			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;
+		position: absolute;
+		bottom: -10rpx;
+		right: 0;
+		.floor-item-act{
+			height: 54rpx;
+			text-align: center;
+			box-sizing: border-box;
+			float: right;
+			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;
+				text-align: center;
+				display: inline-block;
+				padding:0 16rpx;
+				font-size: $font-size-20;
+				border: 1px solid #E15616;
+				float: left;
+			}
+		}
+		.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>

+ 168 - 78
components/cm-module/listTemplate/commodityList.vue

@@ -1,3 +1,4 @@
+<!-- 分类商品模块 -->
 <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>
@@ -7,37 +8,93 @@
 				<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-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">
+								<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 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>	
+								</template>
+							</view>
+							<view class="floor-item-act">
+								<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">
+								<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 v-if="hasLogin && item.p_price_flag != '1'">:¥{{ item.price | NumFormat }}</text>
+									</view>
+									<view class="floor-tags" v-else>{{item.promotions.name}}</view>	
+								</template>
+							</view>
+							<view class="floor-item-act">
+								<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">
-							<view v-if="userIdentity == 1">
+							<template v-if="userIdentity == 1">
 								<text v-if="priceLoading" class="price-larger small">正在获取价格...</text>
-								<text v-else>¥<text class="price-larger">{{item.price?item.price :'0.00'}}</text></text>
-							</view>	
-							<view v-if="userIdentity == 4">
+								<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>
+									<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>
-								<view v-else>
-									<view class="price-larger" v-if="item.p_price_flag == '2'">
-										<text class="txt">价格仅会员可见</text>
-										<text class="btn" @click.stop="this.$api.navigateTo(`/pages/login/apply?clubStatus=${clubStatus}`)">去升级</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>¥<text class="price-larger">{{item.price ? item.price :'0.00'}}</text></text>
-								</view>
-							</view>
-							<view v-if="userIdentity == 2">
+									<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>
+									<text class="txt">未公开价格</text>
 								</view>
 								<text v-else-if="priceLoading" class="price-larger small">正在获取价格...</text>
-								<text v-else>¥<text class="price-larger">{{item.price ? item.price :'0.00'}}</text></text>
-							</view>
+								<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-stars :stars="parseInt(item.p_price_grade)" :font-size='36' :width-info="180"></uni-stars>
+							<text class="p-no"></text>
+							<uni-grader :grade="Number(item.p_price_grade)"></uni-grader>
 						</view>
 					</view>
 				</view>
@@ -59,15 +116,15 @@
 <script>
 	import listSkeleton from '@/components/cm-module/listTemplate/listSkeleton'
 	import modalLayer from "@/components/modal-layer"
-	import uniStars from '@/components/uni-stars/uni-stars.vue'
-	import { searchQueryTinyType,querySearchProductPrice} from "@/api/product.js"
+	import uniGrader from '@/components/uni-grade/uni-grade.vue'
+	import { searchQueryTinyType} from "@/services/public.js"
 	import { mapState,mapMutations } from 'vuex';
 	export default{
 		name:'CommodityList',
 		components:{
 			listSkeleton,
 			modalLayer,
-			uniStars
+			uniGrader
 		},
 		props: {
 			emptyText: {
@@ -87,7 +144,8 @@
 				windowHeight: '',
 				showSkeleton: true,
 				showEmpty: false,
-				userID: '',
+				userID:0,
+				shopId:0,
 				userIdentity:'',
 				priceLoading:true,
 				scrollHeight: '',
@@ -100,7 +158,6 @@
 				totalPage: 1,
 				pullFlag: true,
 				cartNum: 0,
-				identity:2,
 			}
 		},
 		created() {		
@@ -108,20 +165,21 @@
 			this.setScrollHeight();		
 			this.$api.getComStorage('userInfo').then((resolve) =>{
 				this.clubStatus = resolve.clubStatus
-				this.userID = resolve.userID ? resolve.userID : '';
+				this.userID = resolve.userId ? resolve.userId : 0;
+				this.shopId = resolve.shopId ? resolve.shopId : 0;
 				this.userIdentity = resolve.userIdentity
-				if(this.userIdentity == 1){
-					this.identity = 1
-				}else{
-					this.identity = 2
-				}
 				this.getListFromServer();
 			}).catch(error =>{
 				this.getListFromServer();
 			})
 		},
+		filters: {
+			NumFormat:function(text) {//处理金额
+				return Number(text).toFixed(2);
+			},
+		},
 		computed: {
-			...mapState(['hasLogin','userInfo'])
+			...mapState(['hasLogin','userInfo','identity'])
 		},
 		methods:{
 			toLower() {
@@ -158,11 +216,11 @@
 						this.totalPage = resData.total;
 						if(loadMore) {
 							this.listData = [...this.listData,...resList];
-							this.setProductPrice()
+							this.getProductPrice()
 							this.showSkeleton = false
 						} else {
 							this.listData = [...resList];
-							this.setProductPrice()
+							this.getProductPrice()
 							this.showSkeleton = false
 						}
 						// 防上拉暴滑
@@ -183,42 +241,52 @@
 					this.$util.msg(error.msg,2000);
 				})
 			},
-			setProductPrice(){//获取价格
-				if (!this.userID) {return false;}
+			getProductPrice(){//获取价格
 				let productIdArr = [];
 				this.listData.map(item=>{// 0公开价格 1不公开价格 2仅对会员机构公开
 					productIdArr.push(item.p_id)
 				})
 				this.productIds = productIdArr.join(",");
-				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) {
-						let priceList = response.data
-						this.listData.map(item=>{
-							for (let i = 0; i < priceList.length; i++) {
-								let priceObj ={
-										actStatus:priceList[i].actStatus,
-										costCheckFlag:priceList[i].costCheckFlag,
-										costPrice:priceList[i].costPrice,
-										costProportional:priceList[i].costProportional,
-										ladderPriceFlag:priceList[i].ladderPriceFlag,
-										price:Number(priceList[i].price).toFixed(2),
-										minBuyNumber:priceList[i].minBuyNumber
-									}
-								if( item.p_id == priceList[i].productId ){
-									Object.assign(item,priceObj)
-								}
-							}
-						});
+						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
 			}
 		}
 	}
@@ -272,7 +340,7 @@
 		font-size: 26rpx;
 		position: relative;
 		.list-details-title {
-			line-height: 38rpx;
+			line-height: 36rpx;
 			text-overflow: ellipsis;
 			overflow: hidden;
 			display: -webkit-box;
@@ -290,12 +358,44 @@
 	}
 	.list-details-price {
 		width: 100%;
-		display: flex;
-		flex-direction: row;
-		justify-content: space-between;
-		position: absolute;
-		bottom: 0;
-		right: 0;
+		height: 54rpx;
+		line-height: 54rpx;
+		.floor-item-act{
+			height: 54rpx;
+			text-align: center;
+			box-sizing: border-box;
+			float: right;
+			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;
+				text-align: center;
+				display: inline-block;
+				padding:0 16rpx;
+				font-size: $font-size-20;
+				border: 1px solid #E15616;
+				float: left;
+			}
+		}
 		.price-icon {
 			width: 22rpx;
 			height: 28rpx;
@@ -307,15 +407,13 @@
 			vertical-align: middle;
 		}
 		.list-login-now {
-			width: 375rpx;
 			color: #F8C499;
-			position: absolute;
-			bottom: 0;
+			float: left;
+			line-height: 54rpx;
 			.p-no{
 				float: left;
 				font-size: $font-size-24;
-				color: $color-system;
-				margin-right: 10rpx;
+				color: $text-color;
 			}
 		}
 		.login-now {
@@ -323,12 +421,16 @@
 		}
 		.list-price {
 			color: #FF2A2A;
-			width: 100%;
 			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;
 				}
@@ -339,18 +441,6 @@
 					text-align: left;
 					float: left;
 				}
-				.btn{
-					width: 112rpx;
-					height: 44rpx;
-					display: inline-block;
-					float: right;
-					background: $btn-confirm;
-					line-height: 44rpx;
-					text-align: center;
-					color: #FFFFFF;
-					font-size: $font-size-24;
-					border-radius: 22rpx;
-				}
 			}
 		}
 		.add-cart-btn {

+ 211 - 117
components/cm-module/listTemplate/immediatelyList.vue

@@ -31,30 +31,45 @@
 		<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">
-								<view v-if="priceLoading" class="list-price-loding">正在获取价格...</view>
-								<view v-else class="list-shop">
-									<view class="list-price">
-										<text class="price-larger">¥{{item.price ? item.price :'0.00'}}</text>
-										<text class="price-view activity" v-if="item.isShowActFlg">活</text>
-										<text class="price-view ladder" v-if="item.ladderPriceFlag == '1'" @click.stop="alertjieti(item)">阶</text>
-									</view>
-									<view class="list-price-none" v-if="item.repurchasePriceState">
-										<text class="price-none">¥{{item.discountPrice}}</text>
-										<text class="iconfont icon-wenhao" @click.stop="repurchModel"></text>
+								<template v-if="priceLoading">
+									<view class="list-price-loding">正在获取价格...</view>
+								</template>
+								<template v-else>
+									<view class="list-shop">
+										<view class="list-price">
+											<text class="price-larger" :class="PromotionsFormat(pros.promotions) ? 'none' : ''">
+												¥{{ (PromotionsFormat(pros.promotions) ? pros.originalPrice : pros.price) | NumFormat }}
+											</text>
+										</view>
 									</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="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="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>
 					</view>
 					<view v-if="showLoading && listData.length > 4 && !showRegularBtn">
@@ -68,29 +83,44 @@
 				<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">
+									<view class="list-shop com">
 										<view class="list-price zuhe_list_price" >
-											<view class="zuhe_price-larger zuhe_list_text" >价格:¥{{pros.retailPrice.toFixed(2)}}</view>
-											<view :style="{'overflow':'hidden'}">
-											<view class="price-two zuhe_list_text" >总价:<text class="zuhe_list_zj">¥ {{pros.totalPrice.toFixed(2)}}</text></view>
-											<text class="price-view ladder zuhe-price-ladder" v-if="pros.ladderPriceFlag == '1'" @click.stop="alertjieti(pros)">阶</text>
-											<text class="price-view activity" v-if="pros.actStatus == '1'">活动价</text>
+											<view class="zuhe_price-larger zuhe_list_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.price | NumFormat }}</view>
 											</view>
-										</view>
-										<view class="list-price-none" v-if="pros.repurchasePriceState">
-											<text class="price-none">价格:¥{{pros.discountPrice}}</text>
-											<text class="iconfont icon-wenhao" @click.stop="repurchModel"></text>
-										</view>
-										<view class="count">
-											<view class="number-box">
-												<view  class="iconfont icon-jianhao"  @click.stop="changeCountSub(item,pros)"></view>
-												<input class="btn-input" type="number" maxlength='6' v-model="pros.initProductNum" @blur="changeNnmber($event,item,pros)">
-												<view  class="iconfont icon-jiahao"   @click.stop="changeCountAdd(item,pros)"></view>
+											<view class="zuhe_price-larger zuhe_list_text" >
+												<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="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">
+														<view  class="iconfont icon-jianhao"  @click.stop="changeCountSub(item,pros)"></view>
+														<input class="btn-input" type="number" maxlength='6' v-model="pros.initProductNum" @blur="changeNnmber($event,item,pros)">
+														<view  class="iconfont icon-jiahao"   @click.stop="changeCountAdd(item,pros)"></view>
+													</view>
+												</view>	
+											</view>
+											<view class="list-price-all" :style="{'overflow':'hidden'}">
+												<view class="price-two zuhe_list_text" >总价:<text class="zuhe_list_zj">¥ {{ pros.totalPrice | NumFormat }}</text></view>
 											</view>
 										</view>
 									</view>
@@ -103,7 +133,7 @@
 									<text>种类:{{item.productKind}}</text>
 									<text >总数:{{item.productTotalNum}}</text>
 								</view>
-								<text>总额:<text class="foot_text">{{item.productTotalAmount.toFixed(2)}}</text></text>
+								<text>总额:<text class="foot_text">{{ item.productTotalAmount | NumFormat }}</text></text>
 							</view>
 							<button type="default" class="buycart" @click.stop="operationHanld(item)">加入购物车</button>
 						</view>
@@ -133,8 +163,6 @@
 	import modalLayer from "@/components/modal-layer"
 	import uniStars from '@/components/uni-stars/uni-stars.vue'
 	import cmDrag from '@/components/cm-custom/cm-drag.vue'
-	import { queryNewSearchProduct,querySearchProductPrice} from "@/api/product.js"
-	import { getSellerProduct,getcombinationProduct } from "@/api/seller.js"
 	import { mapState,mapMutations } from 'vuex';
 	export default{
 		name:'productList',
@@ -205,6 +233,11 @@
 			this.getProductAgainInfo()
 			this.isFocus = true
 		},
+		filters: {
+			NumFormat:function(text) {//处理金额
+				return Number(text).toFixed(2);
+			},
+		},
 		computed: {
 			...mapState(['hasLogin','userInfo'])
 		},
@@ -232,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:''}
-				queryNewSearchProduct(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;
@@ -242,10 +284,10 @@
 						this.showEmpty = false;
 						if(loadMore) {
 							this.listData = [...this.listData,...resList];
-							this.setProductPrice()
+							this.getProductPrice()
 						} else {
 							this.listData = [...resList];
-							this.setProductPrice()
+							this.getProductPrice()
 							this.showSkeleton = false;
 						}
 						// 防上拉暴滑
@@ -264,51 +306,42 @@
 							this.isShowEmptyText ='暂无相关商品'
 						}
 					}
-				}).catch(error =>{
+				})
+				.catch(error =>{
 					this.$util.msg(error.msg,2000);
 				})
 			},
-			setProductPrice(){//获取价格
+			getProductPrice(){//获取商品或者活动价格
 				let productIdArr = [];
-				this.listData.map(item=>{
-					productIdArr.push(item.p_id) 
+				let productIds ='';
+				this.listData.map(item=>{// 0公开价格 1不公开价格 2仅对会员机构公开
+					productIdArr.push(item.productId)
 				})
-				this.productIds = productIdArr.join(",");
-				querySearchProductPrice({userId: this.clubUserId,productIds:this.productIds}).then(response =>{
-					if (response.data) {
-						let priceList = response.data,isActFlg;
-						this.listData.map(item=>{
-							for (let i = 0; i < priceList.length; i++) {
-								if(priceList[i].actStatus == 1){
-									isActFlg = true
-								}else if(priceList[i].actStatus == 1 && priceList[i].ladderPriceFlag == '1'){
-									isActFlg = true
-								}else{
-									isActFlg = false
-								}
-								let priceObj ={
-										step:priceList[i].step,
-										actStatus:priceList[i].actStatus,
-										costCheckFlag:priceList[i].costCheckFlag,
-										costPrice:priceList[i].costPrice,
-										costProportional:priceList[i].costProportional,
-										ladderPriceFlag:priceList[i].ladderPriceFlag,
-										price:Number(priceList[i].price).toFixed(2),
-										minBuyNumber:priceList[i].minBuyNumber,
-										isShowActFlg:isActFlg
-								}
-								if( item.p_id == priceList[i].productId ){
-									Object.assign(item,priceObj)
-								}
-							}
-						});
-						
+				productIds = productIdArr.join(",");
+				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 =>{
 					this.$util.msg(error.msg,2000)
 				})
 			},
+			ReturnNewProducts(Array,list){//合并字段
+				let NewArray = []
+				Array.map(item=>{
+					for (let i = 0; i < list.length; i++) {
+						if( item.productId == list[i].productId ){
+							NewArray.push(Object.assign(item,list[i])) 
+						}
+					}
+				});
+				return NewArray
+			},
 			searchOpertor(tabIndex){//搜索商品
 				if(tabIndex == 0){
 					if(this.searchInputVal == ''){
@@ -332,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}
-				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;
@@ -362,7 +403,8 @@
 						this.isShowEmpty = true;
 						this.isShowEmptyText ='暂无相关商品'
 					}
-				}).catch(error =>{
+				})
+				.catch(error =>{
 					this.$util.msg(error.msg,2000);
 				})
 			},
@@ -413,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)
@@ -442,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
 						}
 					})
@@ -463,6 +505,7 @@
 			changeTab(index){
 				this.tabIndex = index;
 				if(index == 0){
+					this.pageNum = 1
 					this.getProductAgainInfo()
 				}else{
 					this.getcombinationProduct()
@@ -504,6 +547,16 @@
 				let name = this.$reg.interceptHtmlFn(text)
 				return name
 			},
+			PromotionsFormat(promo){//促销活动类型数据处理
+				if(promo!=null){
+					if(promo.type == 1 && promo.mode == 1){
+						return true
+					}else{
+						return false
+					}
+				}
+				return false
+			},
 			btnClick() {
 				this.$emit('goCartPage')
 			},
@@ -551,7 +604,7 @@
 		height: 64rpx;
 		background: #EFAF00 !important;
 		color: #fff;
-		font-size: 28rpx;
+		font-size: 26rpx;
 		border-radius: 36rpx;
 		text-align: center;
 		line-height: 64rpx;
@@ -742,7 +795,7 @@
 		.list-details-specs {
 			width: 100%;
 			display: inline-block;
-			margin-top: 8rpx;
+			margin: 5rpx 0;
 			color: #666666;
 		}
 		.list-details-miniQuantity {
@@ -753,9 +806,42 @@
 	}
 	.list-details-price {
 		width: 100%;
-		display: flex;
-		flex-direction: row;
-		justify-content: space-between;		
+		.floor-item-act{
+			height: 54rpx;
+			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: 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;
+			}
+		}
 		.price-icon {
 			width: 22rpx;
 			height: 28rpx;
@@ -769,8 +855,6 @@
 		.list-login-now {
 			width: 375rpx;
 			color: #F8C499;
-			position: absolute;
-			bottom: 0;
 			.p-no{
 				float: left;
 				font-size: $font-size-24;
@@ -790,33 +874,44 @@
 			}
 		}
 		.list-price-loding{
-			flex: 6;
 			font-size:$font-size-24;
-			line-height: 64rpx;
+			line-height: 54rpx;
 			color: #FF2A2A;
 		}
 		.list-shop{
-			width: 100%;
-			height: auto;
-			flex: 6;
+			float: left;
 			overflow: hidden;
+			&.com{
+				width: 100%;
+			}
 			.list-price {
-				// width: 100%;
 				color: #FF2A2A;
 				float: left;
-				line-height:36rpx ;
+				line-height:54rpx ;
 				align-items: center;
 				justify-content: center;
 				.price-larger {
-					margin-top: 20rpx;
-					font-size: $font-size-30;
+					font-size: $font-size-26;
 					display: inline-block;
-					margin-right: 20rpx;
+					&.none{
+						text-decoration: line-through;
+						color: #999999;
+					}
+				}
+				.list-price-all{
+					width: 100%;
+					float: left;
 				}
 				.zuhe_price-larger{
+					width: 100%;
+					float: left;
+					height: 54rpx;
 					color: #666666;
-					// float: left;
-					// margin-right: 85rpx;
+					.price-larger{
+						float: left;
+						margin-right: 20rpx;
+					}
+					
 				}
 				.price-two{
 					color: #666666;
@@ -850,12 +945,11 @@
 				margin-top: 5rpx;
 			}
 			.zuhe_list_price{
-				width: 400rpx;
+				width: 100%;
 				overflow: hidden;
 				margin-top: 10rpx;
 			}
 			.count{
-				margin-top: 50rpx;
 				float: right;
 				border: 1px solid #EEEEEE;
 				border-radius: 10rpx;
@@ -900,16 +994,16 @@
 		}
 		.add-cart-btn {
 			flex: 4;
-			width: 156rpx;
-			height: 64rpx;
-			line-height: 64rpx;
-			border-radius: 32rpx;
-			color: #333333;
-			font-size: 26rpx;
+			width: 140rpx;
+			height: 54rpx;
+			line-height: 54rpx;
+			border-radius: 27rpx;
+			color: #fff;
+			font-size: 24rpx;
 			margin-right: 0;
-			// background:linear-gradient(135deg,rgba(242,143,49,1) 0%,rgba(225,86,22,1) 100%);
-			background: #FFFFFF;
-			border: 2rpx solid #C9C9C9;
+			background:#FFFFFF;
+			border: 1px solid #C9C9C9;
+			color: $text-color;
 		}
 		.zuhe_btn{
 			float: right;
@@ -919,6 +1013,6 @@
 		display: block !important;
 	}
 	.zuhe_list_text{
-		margin-top: 10rpx;
+		margin-top: 0;
 	}
 </style>

+ 0 - 224
components/cm-module/listTemplate/memberList.vue

@@ -1,224 +0,0 @@
-<template>
-	<view class="container" :style="{'overflow':(showSkeleton? 'hidden' : 'auto'),'height': (showSkeleton? windowHeight + 'px' : 'auto')}">
-		<list-skeleton v-if="showSkeleton" :listType='2'></list-skeleton>
-		<scroll-view v-if="membersList.length > 0" class="league-scroll-view league-list-members" :style="{'height': getScrollHeight+'px'}" @scrolltolower="membersToLower" id="scroll-wrap" scroll-y>
-			<view class="members-item league-list-item" v-for="(item,index) in membersList" :key="index" @click="memberClicked(item.id)" :thisId="item.id">
-				<image class="league-list-img league-members-img" :src="item.logo"></image>
-				<image class="mask-pic" src="../../../static/temp/mask.png"></image>
-				<view class="league-details-info">
-					<view>
-						<image src="../../../static/temp/name-icon.png"></image>
-						<text class="main-color">{{item.name}}</text>
-					</view>
-					<view>
-						<image src="../../../static/temp/address-icon.png"></image>
-						<text class="main-color">{{item.provinceCityDistrict}}</text>
-					</view>
-					<view>
-						<image class="authenticated-icon" src="../../../static/temp/authenticated-icon.png"></image>
-						<text class="green-color">{{item.brandCount}}个品牌已认证</text>
-						<!-- <image class="arrow-right" src="../../static/temp/arrow-right.png"></image> -->
-					</view>
-				</view>
-			</view>
-			<view v-if="showLoading && membersList.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="showEmptyTips">
-			<image class="empty-container-image" src="https://img.caimei365.com/group1/M00/03/71/Cmis2F3wna6AY2ZjAABpmnBICH4247.png"></image>
-			<text class="error-text">暂无内容</text>
-		</view>
-	</view>
-</template>
-
-<script>
-	import listSkeleton from '@/components/cm-module/listTemplate/listSkeleton'
-	import { queryMember } from "@/api/other.js"
-	export default {
-		name:'MemberList',
-		components:{
-			listSkeleton
-		},
-		props:{
-			
-		},
-	    data(){
-	        return {
-				windowHeight: '',
-				showSkeleton: true,
-				userID: '',
-	            membersList:[],
-				showEmptyTips: false,
-	            getScrollHeight: 'auto',
-				showLoading: false,
-				loadingNow: true,
-				loadingText: '上拉加载更多',
-				pageSize: 10,
-				pageNum: 1,
-				hasNextPage: false,
-				totalPage: 1,
-				pullFlag: true
-	        }
-	    },
-		created() {
-			let self = this;
-			const {windowHeight, pixelRatio} = wx.getSystemInfoSync();
-			self.windowHeight = windowHeight - 1;
-			let obj=wx.createSelectorQuery();
-			obj.select('page').boundingClientRect(function (rect) {
-
-			})
-		},
-	    methods: {
-			setScrollHeight(length) {
-				let self = this;
-				if(length > 6) {
-					self.getScrollHeight = self.windowHeight - 1;
-				} else {
-					let obj=wx.createSelectorQuery();
-					obj.selectAll('.league-list-item').boundingClientRect(function (rect) {
-					    self.getScrollHeight = rect[0].height * length/2;
-					})
-					obj.exec() ;
-				}
-			},
-	        membersToLower () {
-	            if(this.hasNextPage && this.pullFlag) {
-	            	this.getListFromServer(true);
-	            }
-	        },
-	        memberClicked (id) {
-	            wx.navigateTo({ url: `/pages/member_details/main?id=${id}`});
-	        },
-			getListFromServer(loadMore) {
-				let self = this;
-				self.showLoading = true;
-				self.loadingNow = true;
-				self.loadingText = '加载中';
-				if(loadMore) {
-					self.pageNum += 1;
-				}
-				queryMember({pageNum:this.pageNum,pageSize:this.pageSize}).then(response =>{
-					const resData = response.data;
-					const resList = resData.results;
-					if(resList && resList.length > 0){
-						self.hasNextPage = resData.hasNextPage;
-						self.totalPage = resData.totalPage;
-						if(loadMore) {
-							self.membersList = [...self.membersList,...resList];
-						} else {
-							self.membersList = [...resList];
-							self.setScrollHeight(self.membersList.length);
-							self.showSkeleton = false;
-						}
-						// 防上拉暴滑
-						self.pullFlag = false;
-						setTimeout(()=>{
-							self.pullFlag = true;
-						},500)
-						// 底部提示文案
-						if(self.hasNextPage) {
-							self.loadingText = '上拉加载更多';
-						} else {
-							self.showLoading = true;
-							self.loadingNow = false;
-						}
-					} else {
-						self.showEmptyTips = true;
-					}
-				}).catch(response =>{
-					this.$util.msg(res.msg,2000);
-				})
-			}
-	    }
-	}
-</script>
-
-<style lang="scss">
-	.league-scroll-view {
-	    width: 100%;
-		background: #fff;
-		border-top: 2rpx solid rgba(0,0,0,0.07);
-	    -webkit-overflow-scrolling: touch;
-		.league-list-item:nth-child(1), .league-list-item:nth-child(2) {
-			margin-top: 24rpx;
-		} 	
-	}
-	.league-list-item {
-	    width: 45.2%;
-	    height: 390rpx;
-	    float: left;
-	    margin-left: 2.86%;
-	    margin-bottom: 24rpx;
-	    padding-bottom:8rpx;
-	    background: #fff;
-		border: 2rpx solid #EFEFEF;
-	    border-radius: 14rpx;
-	    overflow: hidden;
-	    position: relative;
-	    display: flex;
-	    flex-direction: column;
-	    align-items: center;
-		.league-list-img {
-		    width: 100%;
-		    height: 204rpx;
-		    border-radius: 14rpx 14rpx 0 0;
-		}
-		.mask-pic {
-		    width: 100%;
-		    height: 204rpx;
-		    position: absolute;
-		}
-		.league-details-info {
-		    width: 96%;
-			margin-top: 24rpx;
-		    font-size: 26rpx;
-			image {
-			    width: 30rpx;
-			    height: 30rpx;
-			    padding: 10rpx;
-			    margin-left:-6rpx;
-			}
-			
-			text {
-			    width: 83%;
-			    display: inline-block;
-			    overflow: hidden;
-			    white-space: nowrap;
-			    text-overflow: ellipsis;
-			}
-		}
-		.league-details-info>view {
-		    display: flex;
-		    flex-direction: row;
-		    align-items: center;
-		    justify-content: center;
-		}
-		.arrow-right {
-		    width: 14rpx !important;
-		    height: 22rpx !important;
-		    margin-top: 2rpx;
-		}
-		.authenticated-icon {
-		    margin-left: -1rpx !important;
-		}
-		.authenticated-icon + text {
-		    margin-left: 5rpx;
-		}
-		.top-icon {
-		    width: 82rpx;
-		    height: 82rpx;
-		    position: absolute;
-		    top: 0;
-		    right: 0;
-		}
-		.green-color {
-			color: $green-color;
-		}
-	}
-	.loading-wrapper {
-		background: $sub-bg-color;
-	}
-</style>

+ 112 - 57
components/cm-module/listTemplate/productList.vue

@@ -3,31 +3,44 @@
 		<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-none">
-								<view class="price-small">未公开价格</view>
-							</view>
+						<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" >
-									<text class="price-view activity" v-if="item.isShowActFlg">活动价</text>
-									<text class="price-view ladder" v-if="item.ladderPriceFlag == '1'">阶梯价</text>
-									<text class="price-larger">¥{{item.retailPrice.toFixed(2)}}</text>
-								</view>
-								<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.originalPrice : item.price) | NumFormat }}
+									</text>
+								</view>
 							</view>
 							<button class="add-cart-btn" @click.stop="operationHanld(item)">数量</button>
 						</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">
+								<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>
 				</view>
 				<button class="show-more-btn" v-if="showRegularBtn" @click="getListFromServer(true)">查看更多</button>
@@ -61,7 +74,6 @@
 	import modalLayer from "@/components/modal-layer"
 	import uniStars from '@/components/uni-stars/uni-stars.vue'
 	import cmDrag from '@/components/cm-custom/cm-drag.vue'
-	import { queryAgaingoodslist } from "@/api/product.js"
 	import { mapState,mapMutations } from 'vuex';
 	export default{
 		name:'productList',
@@ -82,7 +94,7 @@
 				windowHeight: '',
 				showSkeleton: true,
 				isShowEmpty: false,
-				userID: '',
+				userId: '',
 				scrollHeight: '',
 				productList: [],
 				showLoading: false,
@@ -101,12 +113,17 @@
 		created() {
 			this.setScrollHeight();		
 			this.$api.getStorage().then((resolve) =>{
-				this.userID = resolve.userID
+				this.userId = resolve.userId ? resolve.userId : 0
 				this.getProductAgainInfo()
 			})
 		},
+		filters: {
+			NumFormat:function(text) {//处理金额
+				return Number(text).toFixed(2);
+			},
+		},
 		computed: {
-			...mapState(['hasLogin','userInfo'])
+			...mapState(['hasLogin','userInfo','identity'])
 		},
 		methods:{
 			scrolltolower() {
@@ -125,18 +142,25 @@
 				this.loadingText = '加载中';
 				this.isShowEmpty = false;				
 				if(loadMore) {this.pageNum += 1;}
-				let params = {userId:this.userID,pageNum:this.pageNum,pageSize:this.pageSize}
-				queryAgaingoodslist(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;
 						}
 						//价格显示处理
@@ -183,12 +207,22 @@
 			},
 			toIndexPage() {
 				uni.switchTab({
-					url: '/pages/tabBar/home/home' 
+					url: '/pages/tabBar/home/index' 
 				})
 			},
 			repurchModel(){
 				this.$util.modal('','此商品的价格有变化,原来的购买价已不适用','知道了','',false,() =>{})
 			},
+			PromotionsFormat(promo){//促销活动类型数据处理
+				if(promo!=null){
+					if(promo.type == 1 && promo.mode == 1){
+						return true
+					}else{
+						return false
+					}
+				}
+				return false
+			},
 			btnClick() {
 				this.$api.navigateTo('/pages/goods/cart')
 			},
@@ -228,7 +262,7 @@
 		}
 	}
 	.all-type-list-content {
-		height: 240rpx;
+		height: auto;
 		padding: 24rpx;
 		background: #fff;
 		margin-bottom: 2rpx;
@@ -271,9 +305,44 @@
 	}
 	.list-details-price {
 		width: 100%;
-		display: flex;
-		flex-direction: row;
-		justify-content: space-between;		
+		line-height: 54rpx;
+		float: left;
+		.floor-item-act{
+			height: 54rpx;
+			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: 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;
+			}
+		}
 		.price-icon {
 			width: 22rpx;
 			height: 28rpx;
@@ -307,38 +376,22 @@
 				color: #FF2A2A;
 			}
 		}
-		
 		.list-shop{
-			width: 100%;
 			height: auto;
-			flex: 6;
+			float: left;
 			.list-price {
 				width: 100%;
 				color: #FF2A2A;
 				float: left;
-				line-height:36rpx ;
+				line-height:54rpx ;
 				align-items: center;
 				justify-content: center;
 				.price-larger {
-					margin-top: 20rpx;
 					font-size: $font-size-30;
 					display: inline-block;
-				}
-				.price-view{
-					display: inline-block;
-					width: 78rpx;
-					border-radius: 18rpx;
-					font-size: $font-size-20;
-					text-align: center;
-					color: #FFFFFF;
-					height: 36rpx;
-					line-height: 36rpx;
-					margin-right: 8rpx;
-					&.ladder{
-						background: linear-gradient(135deg,rgba(255,0,0,1) 0%,rgba(242,143,49,1) 100%);
-					}
-					&.activity{
-						background: linear-gradient(135deg,rgba(128,0,255,1) 0%,rgba(242,49,153,1) 100%);
+					&.none{
+						text-decoration: line-through;
+						color: #999999;
 					}
 				}
 			}
@@ -357,15 +410,17 @@
 			}
 		}
 		.add-cart-btn {
-			flex: 4;
-			width: 156rpx;
-			height: 64rpx;
-			line-height: 64rpx;
-			border-radius: 32rpx;
+			float: right;
+			width: 140rpx;
+			height: 54rpx;
+			line-height: 54rpx;
+			border-radius: 27rpx;
 			color: #fff;
-			font-size: 26rpx;
+			font-size: 24rpx;
 			margin-right: 0;
-			background:linear-gradient(135deg,rgba(242,143,49,1) 0%,rgba(225,86,22,1) 100%);
+			background:#FFFFFF;
+			border: 1px solid #C9C9C9;
+			color: $text-color;
 		}
 	}
 </style>

+ 0 - 3
components/cm-module/listTemplate/richTextTemplate.vue

@@ -1,13 +1,10 @@
 <template>
 	<view class="content">
-		 <!-- <u-parse :content="article" @preview="preview" @navigate="navigate" ></u-parse> -->
 		<parser :html="html" :img-mode="widthFix"></parser>
 	</view>
 </template>
 
 <script>
-	// import uParse from '@/components/gaoyia-parse/parse.vue'
-	// import uParse from '@/components/u-parse/u-parse.vue'
 	import parser from "@/components/jyf-Parser/index"
 	var self;
 	export default{

+ 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(`/pages/goods/secondProduct?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" :class="specClass">
-		<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>

+ 2 - 2
components/cm-module/modelAlert/errorAlert.vue

@@ -113,7 +113,7 @@
 						font-size: $font-size-28;
 						text-align: center;
 						color: #FFFFFF;
-						border-radius: 10rpx;
+						border-radius: 35rpx;
 						padding: 0;
 						background: $btn-confirm;
 					}
@@ -122,4 +122,4 @@
 		}
 	}
 	
-</style>
+</style>

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

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

+ 148 - 0
components/cm-module/modelAlert/order-alert.vue

@@ -0,0 +1,148 @@
+<template name="sharealert">
+	<view class="alert spec" >
+		<view class="model-warp" @click.stop="hideConfirm">
+			<view class="content" v-if="modelType == 1">
+				<view class="content-title"></view>
+				<view class="text-content clearfix">
+					<view class="text">
+						<text>您有采美余额¥{{payModelData.ableUserMoney}}暂未使用,是否需要抵扣订单?</text>
+						<text>抵扣后您只需再支付¥{{payModelData.pendingPayments}}</text></view>
+					<view class="alert-btn" @click="cancelConfirm(dataInfo)">不抵扣,继续付款</view>
+					<view class="alert-btn" @click="paymentConfirm(1,dataInfo)">抵扣,继续付款</view>
+				</view>				
+			</view>
+			<view class="content" v-if="modelType == 2">
+				<view class="content-title"></view>
+				<view class="text-content clearfix">
+					<view class="text">您有采美余额¥{{payModelData.ableUserMoney}}暂未使用,是否需要抵扣订单?抵扣后订单支付完成</view>
+					<view class="alert-btn" @click="cancelConfirm(dataInfo)">不抵扣,继续付款</view>
+					<view class="alert-btn" @click="paymentConfirm(2,dataInfo)">抵扣</view>
+				</view>				
+			</view>
+			<view class="content" v-if="modelType == 3">
+				<view class="content-title"></view>
+				<view class="text-content clearfix">
+					<view class="text">目前机构余额剩余¥{{payModelData.ableUserMoney.toFixed(2)}}是否抵扣订单?</view>
+					<view class="alert-btn" @click="hideConfirm">取消,不抵扣</view>
+					<view class="alert-btn" @click="paymentConfirm(3,dataInfo)">抵扣</view>
+				</view>				
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default{
+		name:'sharealert',
+		props:{
+			modelType:{
+				type:Number,
+				default:3
+			},
+			payModelData:{
+				type:Object
+			}
+		},
+		data() {
+			return{
+				dataInfo:{}
+			}
+		},
+		created() {
+			this.infoData(this.payModelData)
+		},
+		methods:{
+			infoData(el){
+				this.dataInfo = el
+			},
+			hideConfirm(){
+				this.$parent.isPayModel = false
+			},
+			cancelConfirm(data){
+				this.$emit('cancelConfirm',data)
+			},
+			paymentConfirm(type,data){
+				this.$parent.isPayModel = false
+				let _data = {type:type,order:data}
+				this.$emit('paymentConfirm',_data)
+			},
+			btnConfirm(data){//点击事件
+				this.$emit('btnConfirm',data)
+			}
+		}
+	}
+</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: 540rpx;
+			min-height: 310rpx;
+			box-sizing: border-box;
+			position: absolute;
+			left: 50%;
+			top: 50%;
+			transform: translate(-50%,-50%);
+			border-radius: 14rpx;
+			background-color: #FFFFFF;
+			padding-top: 180rpx;
+			.content-title{
+				position: absolute;
+				left: 0;
+				top: -53rpx;
+				width: 100%;
+				height: 232rpx;
+				background: url(https://static.caimei365.com/app/img/icon/icon-orderAlert@2x.png) no-repeat;
+				background-size: contain;
+			}
+			.text-content{
+				width: 100%;
+				min-height: 208rpx;
+				box-sizing: border-box;
+				padding:24rpx;
+				float: left;
+				background-color: #FFFFFF;
+				border-radius:0 0 14rpx 14rpx;
+				.text{
+					letter-spacing: 2rpx;
+					line-height: 50rpx;
+					font-size: $font-size-26;
+					color: $text-color;
+					text-align: justify;
+					margin-bottom: 30rpx;
+				}
+			}
+			.alert-btn{
+				width: 492rpx;
+				height: 88rpx;
+				background: $btn-confirm;
+				line-height: 88rpx;
+				text-align: center;
+				border-radius: 44rpx;
+				color: #FFFFFF;
+				margin-top: 20rpx;
+			}
+		}	
+	}
+</style>

+ 3 - 4
components/cm-module/modelAlert/sellerShareAlert.vue

@@ -21,7 +21,6 @@
 </template>
 
 <script>
-	import { queryOrderShareCode } from "@/api/order.js" 
 	export default{
 		name:'sharealert',
 		props:{
@@ -39,7 +38,7 @@
 		},
 		methods:{
 			getShareCode(res){
-				queryOrderShareCode({orderID:res}).then(response =>{
+				this.OrderService.QueryOrderShareCode({orderID:res}).then(response =>{
 					this.shareCode = response.data
 					this.$parent.shareCode = this.shareCode;
 				}).catch(error =>{
@@ -90,7 +89,7 @@
 			bottom: 0;
 			top: 0;
 			margin: auto;
-			border-radius: 24rpx;
+			border-radius: 14rpx;
 			.text-content{
 				width: 448rpx;
 				height: 264rpx;
@@ -135,7 +134,7 @@
 					font-size: $font-size-28;
 					text-align: center;
 					color: #FFFFFF;
-					border-radius: 14rpx;
+					border-radius: 35rpx;
 					padding: 0;
 					margin: 0 15rpx;
 					&.btn-cancel{

+ 2 - 3
components/cm-module/modelAlert/shareAlert.vue

@@ -21,7 +21,6 @@
 </template>
 
 <script>
-	import { queryOrderShareCode } from "@/api/order.js" 
 	export default{
 		name:'sharealert',
 		props:{
@@ -39,7 +38,7 @@
 		},
 		methods:{
 			getShareCode(res){
-				queryOrderShareCode({orderID:res}).then(response =>{
+				this.OrderService.QueryOrderShareCode({orderID:res}).then(response =>{
 					this.shareCode = response.data
 					this.$parent.shareCode = this.shareCode;
 				}).catch(error =>{
@@ -135,7 +134,7 @@
 					font-size: $font-size-28;
 					text-align: center;
 					color: #FFFFFF;
-					border-radius: 14rpx;
+					border-radius: 35rpx;
 					padding: 0;
 					margin: 0 15rpx;
 					&.btn-cancel{

+ 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>

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

@@ -0,0 +1,157 @@
+<template name="alert">
+	<view class="alert spec" :class="specClass">
+		<!-- 运费弹窗说明 -->
+		<view class="freight-alert">
+			<view class="content clearfix">
+				<view class="title">供应商注册需知</view>
+				<view class="text">采美采购商城(隶属于采美365网)是美容行业一站式B2B采购交易服务平台,供应商入驻需平台审核。注册说明如下,请您仔细阅读:</view>
+				<view class="text">1、本商城商品需绝对保证正品,谢绝非自营/自有品牌(以登记备案为准),代理商应出具授权书等说明文件,杜绝山寨、假冒伪劣等侵权、侵害他人利益的行为。</view>
+				<view class="text">2、注册需要提供公司名称、营业执照、公司地址、联系人等基本信息。</view>
+				<view class="text">3、供应商注册审核通过后需缴纳平台信息服务管理费用。</view>
+				<view class="register-agree">
+					<view class="agree-text"  @tap.stop="agreeCheck()">
+						<button class="checkbox iconfont" :class="[isCheck?'icon-gouxuan':'icon-weigouxuan']"></button>
+						<text class="text">我已阅读供应商注册需知</text>
+					</view>	
+				</view>
+				<view class="text-btn">
+					<view class="btn" :class="isCheck?'':'none'" @click.stop="hideAlert">确定</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default{
+		name:'alert',
+		props:{
+			clubStatus:{
+				type:Number
+			}
+		},
+		data() {
+			return{
+				isCheck:false
+			}
+		},
+		created() {
+			this.status = this.clubStatus
+		},
+		onLoad(){
+			
+		},
+		methods:{
+			hideAlert(){
+				if(!this.isCheck){
+					return
+				}
+				this.$parent.isSupplierAlert = false
+			},
+			agreeCheck() {
+				this.isCheck = !this.isCheck
+			}
+		},
+		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: 580rpx;
+			height: 770rpx;
+			position: absolute;
+			left: 0;
+			right: 0;
+			bottom: 0;
+			top: 0;
+			margin: auto;
+			border-radius: 16rpx;
+			padding: 0 30rpx 30rpx 30rpx;
+			box-sizing: border-box;
+			background-color: #FFFFFF;
+			.title{
+				line-height: 80rpx;
+				font-size: $font-size-30;
+				color: #333333;
+				text-align: center;
+				font-weight: bold;
+			}
+			.text{
+				line-height: 44rpx;
+				font-size: $font-size-26;
+				color: #666666;
+				text-align: justify;
+			}
+			.register-agree{
+				display: flex;
+				flex-direction: column;
+				align-items: center;
+				margin: 20rpx 0;
+				.agree-text{
+					.checkbox{
+						float: left;
+						margin: 4rpx 6rpx 0 0;
+						color: #999999;
+						font-size: $font-size-34;
+						&.icon-gouxuan{
+							color: $color-system;
+						}
+					}
+					font-size: $font-size-22;
+					line-height: 44rpx;
+					color: #999999;
+					.text{
+						color:#1890f9;
+					}
+				}
+			}
+			.text-btn{
+				width: 100%;
+				height: auto;
+				margin-top: 20rpx;
+				.btn{
+					width: 420rpx;
+					height: 84rpx;
+					margin: 0 auto;
+					background: $btn-confirm;
+					line-height: 84rpx;
+					font-size: $font-size-28;
+					text-align: center;
+					color: #FFFFFF;
+					border-radius: 42rpx;
+					padding: 0;
+					&.none{
+						background: #e1e1e1;
+						color: #FFFFFF;
+					}
+				}
+			}
+		}
+	}
+	
+</style>

+ 8 - 9
components/cm-module/modelAlert/supplierShareAlert.vue

@@ -6,7 +6,7 @@
 				<view class="text-content">
 					<view class="text-t">分享码</view>
 					<view class="text-c">{{shareCode}} <text class="clipboard" @click.stop="clipboard(shareCode)">复制</text></view>
-					<view class="text-h1">有效期为72小时。如果对方还有绑定采美账号,需要输入该分享码才能查看本订单</view>
+					<view class="text-h1">有效期为72小时。如果对方还有绑定采美账号,需要输入该分享码才能查看本订单</view>
 				</view>
 				<view class="text-btn">
 					<!-- #ifdef MP-WEIXIN -->
@@ -21,7 +21,6 @@
 
 <script>
 	const thorui = require("@/components/clipboard/clipboard.thorui.js")
-	import { queryOrderShareCode } from "@/api/order.js" 
 	export default{
 		name:'alert',
 		props:{
@@ -151,22 +150,22 @@
 				height: auto;
 				margin-top: 40rpx;
 				.btn{
-					width: 100%;
-					height: 88rpx;
-					float: left;
+					width: 80%;
+					height: 70rpx;
+					margin: 0 auto;
 					background: $btn-confirm;
-					line-height: 88rpx;
+					line-height: 70rpx;
 					font-size: $font-size-28;
 					text-align: center;
 					color: #FFFFFF;
-					border-radius: 14rpx;
+					border-radius: 35rpx;
 					padding: 0;
 				}
 				.btn-none{
 					width: 100%;
-					height: 88rpx;
+					height: 70rpx;
 					float: left;
-					line-height: 88rpx;
+					line-height: 70rpx;
 					font-size: $font-size-28;
 					text-align: center;
 					color: #666666;

+ 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: 14rpx;
-					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>

+ 0 - 86
components/cm-module/noLogin/nologin.vue

@@ -1,86 +0,0 @@
-<template name="nologin">
-	<view class="model-warp">
-		<view class="model-alert">
-			<view class="alert-content">
-				<view class="t-h1">{{text}}</view>
-				<view class="t-p">请联系客服获取邀请码后再登录,联系电话:{{telPhones}}</view>
-			</view>
-			<view class="alert-btn">
-				<view class="btn btn-cancel" @click="hideModel">取消</view>
-				<view class="btn btn-confirm" @click="goLogin">去登录</view>
-			</view>
-		</view>
-	</view>
-</template>
-<script>
-	export default{
-		name:'nologin',
-		data(){
-			return{
-				text:'',
-				telPhones:this.telPhone,
-				productids:this.productid,
-				type:this.alertType,
-				tabPath:this.path
-			}
-		},
-		props:{
-			productid:Number,
-			telPhone:String,
-			alertType:String,
-			path:Boolean
-		},
-		created(){
-			this.getProductid()
-		},
-		methods:{
-			getProductid(){	
-				this.$parent.tel
-				switch(this.alertType){
-					case '1':
-						this.text ='需要登录之后才能加入购物车哟~'
-						break;
-					case '2':
-						this.text ='需要登录之后才能购买哟~'
-						break;
-					case '3':
-						this.text ='需要登录之后查看购物车哟~'
-						break;
-					case '4':
-						this.text ='需要登录才能查看个人中心哟~'
-						break;
-				}
-			},
-			hideModel(){
-				if(this.tabPath){
-					uni.switchTab({
-					    url: '/pages/tabBar/home/home'
-					});
-				}else{
-					this.$parent.isShowNoLogin=false;
-				}
-			},
-			goLogin(){
-				let self = this
-				let url;
-				if(self.alertType =='3'){
-					url =`/pages/login/login?type=1`
-					this.$parent.isShowNoLogin=false;
-				}else if(self.alertType =='4'){
-					url =`/pages/login/login?type=2`
-					this.$parent.isShowNoLogin=true;
-				}else{
-					url=`/pages/login/login?type=detilType&id=${self.productids}`
-					this.$parent.isShowNoLogin=false;
-				}
-				uni.navigateTo ({
-					url
-				})
-			},
-		}
-	}
-</script>
-
-<style>
-	
-</style>

+ 235 - 0
components/cm-module/orderDetails/activipopu.vue

@@ -0,0 +1,235 @@
+<template name="cm-price">
+	<!--促销活动弹窗提示-->
+	<tui-bottom-popup :radius="true" :show="popupShow" @close="hidePopup()">
+		<view class="tui-popup-box clearfix">
+			<view class="tui-scrollview-box">
+				<view class="box-text">
+					<text>促销时间:</text>
+					<text class="txt" v-if="Promotion.status == 1">不限时</text>
+					<text class="txt" v-else>{{ Promotion.beginTime }} ~ {{ Promotion.endTime }}</text>
+				</view>
+				<view class="box-title" v-show="Promotion.mode ==2">
+					<text>此商品参与{{Promotion.name}},满</text>
+					<text class="txt">¥{{Promotion == null ? '0.00' : Promotion.touchPrice | NumFormat}}</text>减
+					<text class="txt">¥{{Promotion == null ? '0.00' : Promotion.reducedPrice | NumFormat}}</text>
+				</view>
+				<view class="box-title" v-show="Promotion.mode==3">
+					<text>此商品参与{{Promotion.name}},满</text>
+					<text class="txt">¥{{Promotion.touchPrice}}</text>赠送商品(赠品见订单详情)
+				</view>
+			</view>
+			<view class="tui-right-flex tui-popup-btn" :style="{ paddingBottom :isIphoneX ? '68rpx' : '0rpx' }">
+				<view class="tui-flex-1">
+					<view class="tui-button" @click="hidePopup()">了解</view>
+				</view>
+			</view>
+		</view>	
+	</tui-bottom-popup>
+</template>
+
+<script>
+	import { mapState,mapMutations } from 'vuex'
+	export default{
+		name:'cm-price',
+		props:{
+			Promotion:{
+				type:Object,
+			},
+			popupShow:{
+				type:Boolean,
+				default:false
+			}
+		},
+		data() {
+			return{
+				isIphoneX:this.$store.state.isIphoneX,
+			}
+		},
+		filters: {
+			NumFormat:function(text) {//处理金额
+				return Number(text).toFixed(2);
+			},
+		},
+		created() {
+			
+		},
+		computed: {
+			...mapState(['hasLogin','isWxAuthorize'])
+		},
+		methods:{
+			hidePopup(){
+				this.$parent.popupShow = false
+			},
+			goGoodActiveFn(id){
+				this.$parent.popupShow = false
+				this.$api.navigateTo('/pages/goods/goods-active?id='+id)
+			}
+		},
+		
+	}
+</script>
+
+<style lang="scss">	
+	.tui-flex-1 {
+		flex: 1;
+	}
+	.tui-popup-box {
+		position: relative;
+		box-sizing: border-box;
+		min-height: 220rpx;
+		padding:24rpx 24rpx 0 24rpx;
+	}
+	.tui-scrollview-box{
+		width: 100%;
+		height: auto;
+		float: left;
+		box-sizing: border-box;
+		.ladder-main{
+			width: 100%;
+			height: 320rpx;
+			border: 1px solid rgba(225,86,22,0.3);
+			border-radius: 10rpx;
+			.ladder-item{
+				width: 100%;
+				height: 80rpx;
+				float: left;
+				border-bottom: 1px solid rgba(225,86,22,0.3);
+				&:nth-child(1){
+					.ladder-item-td{
+						color: #333333;
+					}
+				}
+				&:last-child{
+					border-bottom: none;
+				}
+				.ladder-item-td{
+					width:50%;
+					text-align: center;
+					line-height: 80rpx;
+					font-size: $font-size-24;
+					color: $color-system;
+					box-sizing: border-box;
+					float: left;
+					&:nth-child(1){
+						border-right: 1px solid rgba(225,86,22,0.3);
+					}
+				}
+			}
+		}
+		.box-title{
+			font-size: $font-size-26;
+			color: $text-color;
+			text-align: left;
+			line-height: 56rpx;
+			.txt{
+				color: $color-system;
+				margin: 0 8rpx;
+			}
+		}
+		.box-text{
+			font-size: $font-size-26;
+			color: $text-color;
+			text-align: left;
+			line-height: 56rpx;
+			.txt{
+				color: $color-system;
+			}
+		}
+		.box-product{
+			width: 100%;
+			height: auto;
+			margin-top: 20rpx;
+			.title{
+				font-size: $font-size-24;
+				color: $text-color;
+				text-align: left;
+				line-height: 54rpx;
+			}
+			.box-product-main{
+				width: 100%;
+				height: 136rpx;
+				.image{
+					width: 134rpx;
+					height: 134rpx;
+					border: 1px solid #EBEBEB;
+					float: left;
+					image{
+						width: 100%;
+						height: 100%;
+						display: block;
+					}
+				}
+				.info{
+					width: 540rpx;
+					height: 134rpx;
+					float: left;
+					margin-left: 16rpx;
+					position: relative;
+					.name{
+						width: 100%;
+						float: left;
+						line-height: 40rpx;
+						font-size: $font-size-28;
+						color: $text-color;
+						-o-text-overflow: ellipsis;
+						text-overflow: ellipsis;
+						display: -webkit-box;
+						word-break: break-all;
+						-webkit-box-orient: vertical;
+						-webkit-line-clamp: 2;
+						overflow: hidden;
+					}
+					.num{
+						width: 100%;
+						height: 44rpx;
+						font-size: $font-size-24;
+						color: $text-color;
+						text-align: left;
+						line-height: 44rpx;
+						position: absolute;
+						bottom: 0;
+						left: 0;
+					}
+				}
+			}
+		}
+	}
+	
+	.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: 14rpx;
+		}
+	}
+</style>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

Certains fichiers n'ont pas été affichés car il y a eu trop de fichiers modifiés dans ce diff