瀏覽代碼

Merge branches 'developerB' and 'master' of git.caimei365.com:caimei-repository/caimei-applets-caimei

# Conflicts:
#	common/config/config.js
#	components/cm-custom/cu-custom.vue
#	components/cm-module/listTemplate/immediatelyList.vue
#	components/cm-module/orderDetails/orderButton.vue
#	components/cm-module/orderDetails/orderListButton.vue
#	components/cm-module/productDetails/cm-price.vue
#	pages/authorization/authorization.vue
#	pages/goods/product.vue
#	pages/login/apply.vue
#	pages/login/information.vue
#	pages/login/register.vue
#	pages/login/registers.vue
#	pages/tabBar/cart/cart.vue
#	pages/user/order/create-order.vue
#	pages/user/regularPurchase/regularPurchase.vue
#	seller/pages/cart/immediately.vue
#	seller/pages/index/index.vue
#	seller/pages/login/login.vue
#	seller/pages/login/register.vue
#	store/index.js
jun.li@caimei365.com 5 年之前
父節點
當前提交
4fd0cc1fb0
共有 100 個文件被更改,包括 8800 次插入5127 次删除
  1. 15 5
      App.vue
  2. 82 1
      api/product.js
  3. 2 2
      api/seller.js
  4. 17 1
      api/use.js
  5. 1 0
      api/utils.js
  6. 4 2
      common/config/caimeiApi.js
  7. 4 0
      common/config/common.js
  8. 5 3
      common/config/config.js
  9. 29 1
      common/config/wxLogin.js
  10. 58 1
      common/css/common.scss
  11. 21 1
      common/css/iconfont.scss
  12. 12 0
      common/utils/module.js
  13. 102 0
      components/badge/badge.vue
  14. 122 0
      components/cm-custom/cm-custom.vue
  15. 148 0
      components/cm-custom/cm-drag.vue
  16. 15 35
      components/cm-custom/cu-custom.vue
  17. 0 0
      components/cm-custom/cu-tabbar.vue
  18. 114 0
      components/cm-custom/custom-a.vue
  19. 122 0
      components/cm-custom/custom-b.vue
  20. 199 0
      components/cm-custom/custom-c.vue
  21. 159 0
      components/cm-custom/custom-d.vue
  22. 194 0
      components/cm-custom/custom-p.vue
  23. 69 0
      components/cm-custom/custom-seller.vue
  24. 11 1
      components/cm-module/cm-seller/category.vue
  25. 210 163
      components/cm-module/cm-seller/home.vue
  26. 520 0
      components/cm-module/cm-seller/user.vue
  27. 2 2
      components/cm-module/creatOrder/choiceAddress.vue
  28. 83 16
      components/cm-module/creatOrder/freight.vue
  29. 2 2
      components/cm-module/creatOrder/invoiceTent.vue
  30. 15 12
      components/cm-module/creatOrder/sellerFreight.vue
  31. 1 1
      components/cm-module/creatOrder/sellerInvoice.vue
  32. 143 0
      components/cm-module/drag-button/drag-button.vue
  33. 2 2
      components/cm-module/headerNavbar/headerNavbar.vue
  34. 148 0
      components/cm-module/home/cm-custom.vue
  35. 0 129
      components/cm-module/home/navInfor.vue
  36. 0 113
      components/cm-module/home/navServer.vue
  37. 0 92
      components/cm-module/home/navigationTab.vue
  38. 30 17
      components/cm-module/listTemplate/buyagainList.vue
  39. 127 94
      components/cm-module/listTemplate/commodityList.vue
  40. 488 408
      components/cm-module/listTemplate/immediatelyList.vue
  41. 1 1
      components/cm-module/listTemplate/memberList.vue
  42. 22 36
      components/cm-module/listTemplate/productList.vue
  43. 1 2
      components/cm-module/modelAlert/shareAlert.vue
  44. 181 0
      components/cm-module/modelAlert/supplierShareAlert.vue
  45. 156 0
      components/cm-module/modelAlert/upgradeAlert.vue
  46. 7 0
      components/cm-module/orderDetails/goodsList.vue
  47. 37 3
      components/cm-module/orderDetails/orderButton.vue
  48. 46 7
      components/cm-module/orderDetails/orderInformation.vue
  49. 11 3
      components/cm-module/orderDetails/orderListButton.vue
  50. 39 5
      components/cm-module/orderDetails/sellerDetaileButton.vue
  51. 12 4
      components/cm-module/orderDetails/sellerOrderButton.vue
  52. 199 0
      components/cm-module/orderDetails/supplierDetaileButton.vue
  53. 127 0
      components/cm-module/orderDetails/supplierRecorgButton.vue
  54. 1 1
      components/cm-module/popupGoods/popupGoods.vue
  55. 2 1
      components/cm-module/productDetails/cm-attributes.vue
  56. 103 0
      components/cm-module/productDetails/cm-parameter.vue
  57. 2 20
      components/cm-module/productDetails/cm-price.vue
  58. 84 0
      components/cm-module/productDetails/cm-service.vue
  59. 93 92
      components/cm-module/productDetails/recommend.vue
  60. 80 43
      components/cm-module/productDetails/supplierDetails.vue
  61. 0 423
      components/seller/user.vue
  62. 3 3
      components/uni-search/bt-search.vue
  63. 3 0
      components/uni-stars/uni-stars.vue
  64. 16 47
      main.js
  65. 83 4
      pages.json
  66. 31 12
      pages/authorization/authorization.vue
  67. 1310 0
      pages/goods/cart.vue
  68. 16 12
      pages/goods/goods.vue
  69. 177 58
      pages/goods/product.vue
  70. 44 0
      pages/goods/supplier.vue
  71. 16 10
      pages/login/apply.vue
  72. 2 2
      pages/login/bindOperator.vue
  73. 1 2
      pages/login/bindwechat.vue
  74. 17 11
      pages/login/information.vue
  75. 1 1
      pages/login/login.vue
  76. 25 38
      pages/login/logincode.vue
  77. 72 474
      pages/login/register.vue
  78. 0 1175
      pages/login/registers.vue
  79. 60 21
      pages/search/search-order.vue
  80. 167 56
      pages/search/search.vue
  81. 1332 980
      pages/tabBar/cart/cart.vue
  82. 169 135
      pages/tabBar/home/home.vue
  83. 341 162
      pages/tabBar/user/user.vue
  84. 4 5
      pages/user/address/address.vue
  85. 30 7
      pages/user/address/addressManage.vue
  86. 73 42
      pages/user/order/create-order.vue
  87. 1 1
      pages/user/order/order-cashier.vue
  88. 60 20
      pages/user/order/order-list.vue
  89. 21 9
      pages/user/regularPurchase/regularPurchase.vue
  90. 30 7
      seller/pages/address/addressManage.vue
  91. 21 6
      seller/pages/cart/buyagain.vue
  92. 78 8
      seller/pages/cart/cart.vue
  93. 68 41
      seller/pages/cart/immediately.vue
  94. 0 1
      seller/pages/club/allClub-list.vue
  95. 1 2
      seller/pages/club/club-list.vue
  96. 25 8
      seller/pages/club/list.vue
  97. 14 21
      seller/pages/index/index.vue
  98. 3 0
      seller/pages/login/apply.vue
  99. 4 0
      seller/pages/login/information.vue
  100. 1 1
      seller/pages/login/login.vue

+ 15 - 5
App.vue

@@ -12,8 +12,11 @@
 			uni.getSystemInfo({
 				success: function(e) {
 					let modelmes = e.model;
-					if (modelmes.search('iPhone X') != -1) { //XS,XR,XS MAX均可以适配
-					  self.$store.dispatch('setVariableFun',true)
+					console.log(e);
+					if (modelmes.search('iPhone 11') || modelmes.search('iPhone 11 Pro Max') ||modelmes.search('iPhone X') != -1) { //XS,XR,XS MAX均可以适配
+						self.$store.dispatch('setVariableFun',true)
+					}else{
+						self.$store.dispatch('setVariableFun',false)
 					}
 					// #ifndef MP
 					Vue.prototype.StatusBar = e.statusBarHeight;
@@ -30,6 +33,7 @@
 					console.log(e.platform)
 					if (e.platform == 'android') {
 						Vue.prototype.platformClass = 'left'
+						self.$store.dispatch('setVariableFun',false)
 					} else {
 						Vue.prototype.platformClass = 'center'
 						self.$store.dispatch('setIsIphoneFun',true)
@@ -47,8 +51,6 @@
 						Vue.prototype.CustomBar = e.statusBarHeight + 50;
 					}
 					// #endif		
-				
-			
 					// #ifdef MP-ALIPAY
 					Vue.prototype.StatusBar = e.statusBarHeight;
 					Vue.prototype.CustomBar = e.statusBarHeight + e.titleBarHeight;
@@ -61,7 +63,15 @@
 			refresh(){
 				let TIME = (20*60)*1000;
 				setInterval(()=>{
-					wxLogin.wxLoginAuthorize()
+					authorize.getSetting().then(res =>{// console.log('是否已授权',res);//0:为取消授权 1:为已授权 2:为未操作
+						if(res == 1){
+							wxLogin.wxLoginAuthorize()
+						}else{
+							console.log('授权失败============>:'+'用户取消授权或者未操作')
+						}
+					}).catch(error=>{
+						console.log('授权失败============>:'+'用户授权失败,提醒用户重新授权')
+					})
 				},TIME)
 			}
 		},

+ 82 - 1
api/product.js

@@ -8,7 +8,7 @@ import request from '@/common/config/caimeiApi.js'
 import $reg from '@/common/config/common.js'
 
 /**
- * 获取商品分类
+ * 获取分类导航
  */
 export function queryGoodscategory() {
 	return new Promise(function(resolve,reject) {
@@ -38,6 +38,23 @@ export function queryGoodslist(url,params) {
 		})
 	});
 }
+/**
+ * @新分类下的商品列表
+ * @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
@@ -56,6 +73,57 @@ export function querySearchProduct(params) {
 		})
 	});
 }
+/**
+ * @新商品搜索
+ * @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
@@ -67,6 +135,19 @@ export function querySearchHistory(params) {
 		})
 	});
 }
+/**
+ * @添加搜索历史记录
+ * @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

+ 2 - 2
api/seller.js

@@ -142,7 +142,7 @@ export function getFindAllClubList(params) {
  */
 export function getSellerOrderList(params) {
 	return new Promise(function(resolve,reject) {
-		request.get('/seller/order/list',params,res => {
+		request.lodingGet('/seller/order/list',params,res => {
 			if(res.code == 0){
 				resolve(res)
 			}else{
@@ -159,7 +159,7 @@ export function getSellerOrderList(params) {
  */
 export function getSellerClubOrderList(params) {
 	return new Promise(function(resolve,reject) {
-		request.get('/seller/clubOrder',params,res => {
+		request.lodingGet('/seller/clubOrder',params,res => {
 			if(res.code == 0){
 				resolve(res)
 			}else{

+ 17 - 1
api/use.js

@@ -215,6 +215,22 @@ export function personalInfo(params) {
 		})
 	})
 }
+/**
+ *取消提示
+ * 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)
+			}
+		})
+	})
+}
+
 /**
  *获取账户余额明细
  */
@@ -254,7 +270,7 @@ export function userInfoLogin(params) {
 			if(res.code == 0 || res.code == 4){
 				resolve(res)
 			}else if(res.code == -6){
-				resolve(res)
+				reject(res)
 			}else{
 				reject(res)
 			}

+ 1 - 0
api/utils.js

@@ -39,6 +39,7 @@ export function queryProtocol() {
 }
 /**
  *获取图形验证码
+ * platformType:小程序 2  WWW 0  CRM 1 
  */
 export function getImageCode() {
 	return new Promise(function(resolve,reject) {

+ 4 - 2
common/config/caimeiApi.js

@@ -108,6 +108,9 @@ const caimeiApi = {
 				key: key,
 				success: function (res){
 					resolve(res.data);
+				},
+				fail: function(res){
+					reject(false)
 				}
 			})
 		});
@@ -198,8 +201,7 @@ const caimeiApi = {
 			url:url
 		})
 	},
-	isNumber:function(value){
-	//验证是否为数字
+	isNumber:function(value){//验证是否为数字
 	    var patrn = /^(-)?\d+(\.\d+)?$/;
 	    if (patrn.exec(value) == null || value == "") {
 	         return false

+ 4 - 0
common/config/common.js

@@ -40,6 +40,9 @@ const utils = {
 	hidePhone:function(value) {
 		return value.replace(/^(\d{3})\d{4}(\d+)/,"$1****$2")
 	},
+	interceptHtmlFn: function(value){
+		return value.replace(/<[^>]+>/g,"")
+	},
 	desensitizationName:function(value){
 		if(null != value && value != undefined){
 			if(value.length <= 3){
@@ -137,5 +140,6 @@ module.exports = {
 	bankRegex: utils.bankRegex,
 	checkData:utils.checkData,
 	hidePhone:utils.hidePhone,
+	interceptHtmlFn:utils.interceptHtmlFn,
 	desensitizationName:utils.desensitizationName
 }

+ 5 - 3
common/config/config.js

@@ -1,9 +1,11 @@
 let URL_CONFIG = ""
 if(process.env.NODE_ENV === 'development'){
     // 开发环境
-	URL_CONFIG = 'http://192.168.1.22:8008'	 //裴裴联调地址
-	// URL_CONFIG = 'https://spi.caimei365.com'	 //超超联调地址
-    // URL_CONFIG = 'https://spi-b.caimei365.com'//采美测试地址
+	// URL_CONFIG = 'http://192.168.1.24:8008'	 //俊俊联调地址
+	// URL_CONFIG = 'http://192.168.1.22:8008'	 //裴裴联调地址
+	// URL_CONFIG = 'http://192.168.1.26:8008'	 //超超联调地址
+    URL_CONFIG = 'https://spi-b.caimei365.com'	 //采美测试地址
+	// URL_CONFIG = 'https://spi.caimei365.com'
 }else{
     // 生产环境
     URL_CONFIG = 'https://spi.caimei365.com'

+ 29 - 1
common/config/wxLogin.js

@@ -22,6 +22,34 @@ const wxLoginAuthorize = function(){
 		})
 	})
 }
+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);
+				})
+			})
+		})
+}
 export default{
-	wxLoginAuthorize
+	wxLoginAuthorize,
+	wxLoginQuick
 }

+ 58 - 1
common/css/common.scss

@@ -300,4 +300,61 @@ button::after{
 .uni-badge-error {
 	color: #fff;
 	background-color: #dd524d;
-}
+}
+/* 加入购物模态层*/
+	@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;
+		}
+	}

+ 21 - 1
common/css/iconfont.scss

@@ -4,7 +4,7 @@
 	font-family: iconfont;
 	font-weight: normal;
 	font-style: normal;
-	src: url('https://at.alicdn.com/t/font_1519039_dc2175m9e7.ttf') format('truetype');
+	src: url('https://at.alicdn.com/t/font_1519039_mkxy06756m.ttf') format('truetype');
 }
 .iconfont {
 	font-family: "iconfont" !important;
@@ -13,6 +13,26 @@
 	-webkit-font-smoothing: antialiased;
 	-moz-osx-font-smoothing: grayscale;
 }
+.icon-xingxing:before {
+  content: "\e870";
+}
+
+.icon-icon-cross-squre:before {
+  content: "\e668";
+}
+
+.icon-saomafukuan-:before {
+  content: "\e645";
+}
+
+.icon-icon-test:before {
+  content: "\e604";
+}
+
+.icon-xiangxia1:before {
+  content: "\e771";
+}
+
 .icon-gou:before {
   content: "\e628";
 }

+ 12 - 0
common/utils/module.js

@@ -0,0 +1,12 @@
+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)

+ 102 - 0
components/badge/badge.vue

@@ -0,0 +1,102 @@
+<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>

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

@@ -0,0 +1,122 @@
+<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 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>

+ 148 - 0
components/cm-custom/cm-drag.vue

@@ -0,0 +1,148 @@
+<template>
+	<view>
+		<view
+			id="_drag_button"
+			class="cart-icon"
+			:style="'left: ' + left + 'px; top:' + top + 'px;'"
+			@touchstart="touchstart"
+			@touchmove.stop.prevent="touchmove"
+			@touchend="touchend"
+			@click.stop.prevent="click"
+			:class="{transition: isDock && !isMove }"
+		>
+			<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>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		name: 'drag-button',
+		props: {
+			cartNum:{
+				type: Number,
+				default: 0
+			},
+			isDock:{
+				type: Boolean,
+				default: false
+			},
+			existTabBar:{
+				type: Boolean,
+				default: false
+			}
+		},
+		data() {
+			return {
+				top:300,
+				left:150,
+				width: 0,
+				height: 0,
+				offsetWidth: 0,
+				offsetHeight: 0,
+				windowWidth: 0,
+				windowHeight: 0,
+				isMove: true,
+				edge: 10,
+			}
+		},
+		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-5;
+				this.top = this.windowHeight - this.height - this.edge-150;
+			}).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">
+	.cart-icon {
+		width: 92rpx;
+		height: 92rpx;
+		border-radius: 50%;
+		background: rgba(255, 147, 0, 0.5);
+		position: fixed;
+		right: 24rpx;
+		bottom: 28%;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		cursor: pointer;
+		z-index: 20;
+		image {
+			width: 58rpx;
+			height: 58rpx;
+		}
+		text {
+			font-size: 28rpx;
+			position: absolute;
+			top: -10rpx;
+			right: 0;
+		}
+		&.transition {
+			transition: left .3s ease,top .3s ease;
+		}
+	}
+	
+</style>

+ 15 - 35
components/cu-custom.vue → components/cm-custom/cu-custom.vue

@@ -1,18 +1,19 @@
 <template name="headerNavbar">
 	<!-- 自定义导航栏 -->
-	<view class='navbar-wrap' :style="{height:CustomBar+'px',paddingTop:StatusBar+'px'}"> 
-	  	<view class="navbar-text" :style="{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" 
+	<view class='navbar-wrap' :style="{height:CustomBar+'px',paddingTop:StatusBar+'px',background:navbarData.bgColor ? navbarData.bgColor : '#FFFFFF'}"> 
+	  	<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-else @tap="_goHome" class="iconfont icon-shouye"></text>
-	  	</view>
+			  <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>
 	</view>
 </template>
 
@@ -37,9 +38,9 @@
 		},
 		created() {
 			if (getCurrentPages().length === 1) { // 当只有一个页面时
-			      this.navbarData.haveBack = false;
+			      this.navbarData.haveBack = false;
 			} else {
-			      this.navbarData.haveBack = true;
+			      this.navbarData.haveBack = true;
 			}
 		},
 		onLoad(){
@@ -48,14 +49,14 @@
 		methods:{
 			BackPage: function () {
 				this.$emit('navigateBack')
-		    },
+		    },
 			_goSearchPath:function () {
 				this.$emit('goSearchPath')
 			},
 			_goHome:function(){
 				uni.switchTab({
-		        	url: '/pages/tabBar/home/home'
-		      	})
+		        	url: '/pages/tabBar/home/home'
+		      	})
 			}
 		},
 		onShow(){
@@ -110,25 +111,4 @@
 		 background: #fff;
 		 text-align: center;
 	}
-</style>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+</style>

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


+ 114 - 0
components/cm-custom/custom-a.vue

@@ -0,0 +1,114 @@
+<template name="headerNavbar">
+	<!-- 自定义导航栏 -->
+	<view class='navbar-wrap' :style="{height:CustomBar+'px',paddingTop:StatusBar+'px',background:navbarData.bgColor ? navbarData.bgColor : '#FFFFFF'}"> 
+	  	<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
+		    }
+		},
+		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;
+		 background: #FFFFFF;
+		 border-bottom: 1px solid #F7F7F7;
+	}
+	.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>

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

@@ -0,0 +1,122 @@
+<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>

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

@@ -0,0 +1,199 @@
+<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>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+ 159 - 0
components/cm-custom/custom-d.vue

@@ -0,0 +1,159 @@
+<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;'}">
+	    	{{navbarData.title ? navbarData.title : " "}}
+	  	</view>
+	  	<view class="navbar-icon" :style="{width:headerBtnPosi.width+'px',lineHeight:(navbarBtn.height)+'px',top:navbarBtn.top + statusBarHeight+'px',left:navbarBtn.right+'px',height:(navbarBtn.height)+'px'}">
+			  <text @click="_goBack" class="iconfont icon-shangyibu" :style="{width:headerBtnPosi.width/2+'px',height:navbarBtn.height+'px'}"></text>
+	      	  <text class="iconfont icon-vertical_line" :style="{borderColor:navbarData.borderColor ? navbarData.borderColor : 'rgba(0,0,0,0.4)'}"></text>
+			  <text @click="_goDetails" class="iconfont icon-shouye" :style="{width:headerBtnPosi.width/2+'px',height:navbarBtn.height+'px'}"></text>
+	  	</view>
+	</view>
+</template>
+
+<script>
+	var self;
+	export default{
+		name:'headerNavbar',
+		props:{
+		    navbarData: { // 由父页面传递的数据
+				type: Object
+		    },
+			systeminfo:{
+				type:Object
+			},
+			headerBtnPosi:{
+				type:Object
+			},
+			page:{
+				type:Number
+			}
+		},
+		data() {
+			return{
+				haveBack: true, // 是否有返回按钮,true 有 false 没有 若从分享页进入则为 false
+			    statusBarHeight: 0, // 状态栏高度
+			    navbarHeight: 0, // 顶部导航栏高度
+			    navbarBtn: { // 胶囊位置信息
+			      height: 0,
+			      width: 0,
+			      top: 0,
+			      bottom: 0,
+			      right: 0
+				},
+				platform:'',
+				fontSizeSetting:0,
+				screenWidth:0
+			}
+		},
+		created() {
+			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
+			}
+			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 () {
+		      	uni.navigateBack({
+		        	delta: this.page
+		      	});
+		    },
+		    _goDetails: function () {
+		      this.$emit('pageDetails')
+		    }
+		},
+		onShow(){
+	
+		}
+	}
+</script>
+
+<style lang="scss">
+	.navbar-wrap {
+		 position: fixed;
+		 width: 100%;
+		 top: 0;
+		 z-index: 9999;
+		 box-sizing: border-box;
+		 background: #FFFFFF;
+		 border-bottom: 1px solid #F8F8F8;
+	}
+	.navbar-text {
+		 text-align: center;
+		 color: #000000;
+		 font-weight: 500;
+	}
+	.navbar-icon {
+		 position: fixed;
+		 display: flex;
+		 border-radius: 64rpx;
+		 border: 0.5px solid rgba(0,0,0, 0.2);
+		 box-sizing: border-box;
+	}
+	.navbar-icon .iconfont {
+		 text-align: center;
+		 display: inline-block;
+		 overflow: hidden;
+		 margin-bottom: 1px;
+	}
+	.navbar-icon .icon-vertical_line {
+		color: #999999;
+	}
+	.navbar-loading {
+		 background: #fff;
+		 text-align: center;
+	}
+</style>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+ 194 - 0
components/cm-custom/custom-p.vue

@@ -0,0 +1,194 @@
+<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;'}">
+			  <text v-if='haveBack' @click="_goBack" class="iconfont icon-fanhui"></text>
+			  <text v-else  @click="_goHome" class="iconfont icon-shouye"></text>
+	  	</view>
+	</view>
+</template>
+
+<script>
+	var self;
+	export default{
+		name:'headerNavbar',
+		props:{
+		    navbarData: { // 由父页面传递的数据
+				type: Object
+		    },
+			systeminfo:{
+				type:Object
+			},
+			headerBtnPosi:{
+				type:Object
+			},
+			page:{
+				type:Number
+			},
+			headerColor:{
+				type:Boolean
+			},
+			headerTitle:{
+				type:String
+			},
+			type:{
+				type:String
+			},
+		},
+		data() {
+			return{
+				headerType:'',
+				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
+			}
+			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/home'
+		      	})
+		    }
+		},
+		onShow(){
+	
+		}
+	}
+</script>
+
+<style lang="scss">
+	.navbar-wrap {
+		 position: fixed;
+		 width: 100%;
+		 top: 0;
+		 z-index: 100000;
+		 box-sizing: border-box;
+		 &.bg-color{
+			animation: showColor 0.3s ease-in-out both;
+		 }
+		 &.no-color{
+		    animation: hideColor 0.3s ease-in-out both;
+		 }
+	}
+	.navbar-text {
+		 text-align: center;
+		 color: #000000;
+		 font-weight: 500;
+	}
+	.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);
+		 box-sizing: border-box;
+	}
+	.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>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

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

@@ -0,0 +1,69 @@
+<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>

+ 11 - 1
components/seller/category.vue → components/cm-module/cm-seller/category.vue

@@ -1,5 +1,6 @@
 <template>
-	<view class="category-container clearfix">
+	<view class="category-container clearfix" :style="{paddingTop:CustomBar+'px'}">
+		<cm-custom :navbar-data='nvabarData'></cm-custom>
 		<!-- 头部轮播 -->
 		<tui-skeleton v-if="skeletonShow" backgroundColor="#fafafa" borderRadius="10rpx" :isLoading	="true" :loadingType="5"></tui-skeleton>
 		<view class="category-list tui-skeleton">
@@ -46,6 +47,15 @@
 		},
 		data() {
 			return {
+				nvabarData: {		//顶部自定义导航
+					title: '商品分类',  // 导航栏 中间的标题
+					haveBack:false,
+					textLeft:this.$store.state.isIphone,
+					textColor:'#333333',
+					bgColor:'#FFFFFF'
+				},
+				isIphoneX:this.$store.state.isIphoneX,
+				CustomBar:this.CustomBar,// 顶部导航栏高度
 				skeletonShow: true,
 				headerShow:true,
 				hotSearchText: '你想要的这里都有',

+ 210 - 163
components/seller/home.vue → components/cm-module/cm-seller/home.vue

@@ -1,19 +1,18 @@
 <template>
-	<view class="container home clearfix" :style="{paddingTop:100+'rpx'}">	
+	<view class="container home clearfix" :style="{paddingTop:CustomBar+'px'}">	
+		<cm-custom :navbar-data='nvabarData'></cm-custom>
 		<!-- 头部轮播 -->
 		<tui-skeleton v-if="skeletonShow" backgroundColor="#fafafa" borderRadius="10rpx" :isLoading	="true" :loadingType="5"></tui-skeleton>
-		<view :class="'container-home-'+ inputActive" class="tui-skeleton">
-			<view class="search-input-fixed" :style="{top:CustomBar+'px'} ">
-				<bt-search :clickPath="clickPath" :toestText='hotSearchText'></bt-search>
-			</view>
-			<view class="banner-section">
-				<swiper class="banner tui-banner tui-skeleton-rect" circular @change="swiperChange" :autoplay="true" :interval="5000" :duration="500" :circular="true">
-					<swiper-item v-for="(item, index) in bannerImageList" :key="index" class="banner-item"> 
-						<image :src="item" />
+		<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">
+						<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" 
+					<view v-for="(item,idx) in bannerImageList" 
+						  :key="idx" 
 						  :class="[idx===current?'swiper__dots-long':'none']" 
 						  :data-index="current" class="swiper__dots-item">
 					</view>	  
@@ -24,11 +23,11 @@
 				<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-rect">{{nav.classifyName}}</text>
+						<text class="tui-skeleton-fillet">{{nav.classifyName}}</text>
 					</view>
 				</view>
 				<!-- 优选分类 -->
-				<view class="tabbar clearfix">
+				<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>
@@ -53,70 +52,68 @@
 			</view>
 			<!-- 热销商品 -->
 			<view class="hotgoods-section">
-				<view class="s-header tui-skeleton-fillet" @click="this.$api.navToListPage({type:'3',value:thirdModulesName})">
-					<text class="tip">{{thirdModulesName}}</text>
-					<text class="tit">更多</text>
+				<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">
-					<scroll-view class="floor-list" scroll-x v-if="organizeProducts.length>0">
-						<view class="scoll-wrapper">
-							<view 
-								v-for="(item, index) in organizeProducts" :key="index"
-								class="floor-item"
-								@click.stop="navToDetailPage(item.productID)"
-							>
-								<image class="tui-skeleton-fillet" :src="item.mainImage" mode="aspectFill"></image>
+					<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.toFixed(2)}}</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>
-									<uni-stars :stars="parseInt(item.price1Grade)"></uni-stars>
+									<view class="p-stars">
+										<uni-stars :stars="parseInt(item.price1Grade)"></uni-stars>
+									</view>
 								</view>	
 							</view>
 						</view>
-					</scroll-view>
+					</view>
 				</view>	
 			</view>
 			<!-- 底部 -->
 			<view class="footer-section ">
-				<view class="s-header tui-skeleton-fillet">
+				<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=""></image>
+					<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-fillet" :src="navServerList[0].icon"></image>
+							<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-fillet" :src="navServerList[1].icon"></image>
+							<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-fillet" :src="navServerList[2].icon"></image>
+							<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-fillet" :src="navServerList[3].icon"></image>
+							<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>
+						<image class="logo" src="../../../static/logo-c@2x.png" mode=""></image>
 						<text class="">采美365网</text>
 					</view>
 				</view>
@@ -129,41 +126,45 @@
 
 <script>
 	import tuiSkeleton from "@/components/tui-skeleton/tui-skeleton"
-	import navigationTab from "@/components/cm-module/home/navigationTab.vue"
 	import authorize from '@/common/config/authorize.js'
 	import modalLayer from "@/components/modal-layer"
-	import btSearch from '@/components/uni-search/bt-search.vue'
+	import cmCustom from '@/components/cm-module/home/cm-custom.vue'
 	import uniStars from '@/components/uni-stars/uni-stars.vue'
-	import { queryHomeInfo } from "@/api/use.js"
+	import { userInfoLogin, queryHomeInfo } from "@/api/use.js"
 	import { queryPreferred } from "@/api/product.js"
-	import { mapState,mapMutations } from 'vuex'
+	import { mapState,mapMutations} from 'vuex';
 	export default {
 		components:{
 			tuiSkeleton,
-			navigationTab,
 			modalLayer,
-			btSearch,
+			cmCustom,
 			uniStars,
 		},
 		data() {
 			return {
-				nvabarData: {		//顶部自定义导航
-					showCapsule: 0, // 是否显示左上角图标  1表示显示  0表示不显示,
+				webviewStyles: {
+					progress: {
+						color: '#FF3333'
+					}
+				},
+				nvabarData: {//顶部自定义导航
+					showCapsule: 1, // 是否显示左上角图标  1表示显示  0表示不显示,
 					showSearch: 0,
-					title: '采美采购商城',  // 导航栏 中间的标题
+					title: '采美采购商城', // 导航栏 中间的标题
+					haveBack:false,
+					textLeft:this.$store.state.isIphone,
+					textColor:'#FFFFFF'
 				},
-				isIphoneX:this.$store.state.isIphoneX,
 				CustomBar:this.CustomBar,// 顶部导航栏高度
 				userID:'',
-				modalLayer:false,
-				inputActive:'float',
-				hotSearchText:'你想要的这里都有',
-				clickPath:'/pages/search/search',
+				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:'采美'},
@@ -178,25 +179,25 @@
 				secondModulesImage:'',//优惠模块icon2
 				thirdModulesName:'', //优惠模块3
 				navInforList:[
-					{text:'会员中心',icon:'https://img.caimei365.com/group1/M00/03/9E/Cmis216iRzOAEGPnAAA4hM3shV4061.png'},
-					{text:'在线客服',icon:'https://img.caimei365.com/group1/M00/03/9E/Cmis216iRzOAFXZBAABKeY23aWA452.png'}
+					{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:''},
+					{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:''},
 				]
 			}
 		},
 		created() {
-			this.getCheekeyCode()
+			this.getSellerHomeInfo()
 		},
 		computed: {
-			...mapState(['hasLogin']),
+			...mapState(['hasLogin'])
 		},
 		methods: {
-			getCheekeyCode(){
+			getSellerHomeInfo(){
 				this.getHomeInformation()
 				this.getOrganizeProducts()
 			},		
@@ -204,26 +205,24 @@
 				queryHomeInfo({}).then(res =>{
 					let data = res.data;
 					this.bannerImageList = data.bannerImageList
-					this.productsClassifyList = data.productsClassifyList
 					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)
 				}).catch(error =>{
 					this.$util.msg(error.msg,2000)
 				})
 			},
 			getOrganizeProducts(){//获取模块三商品
-				this.$api.getStorage().then((resolve) =>{
-					this.userID = resolve.userID
-					queryPreferred({userId:this.userID,preferredFlag:100,pageNum:1,pageSize:5}).then(res =>{
-						this.organizeProducts = res.data.results
-					}).catch(error =>{
-						this.$util.msg(error.msg,2000)
-					})
+				queryPreferred({userId:this.userID,preferredFlag:100,pageNum:1,pageSize:6}).then(res =>{
+					this.organizeProducts = res.data.results
+				}).catch(error =>{
+					this.$util.msg(error.msg,2000)
 				})
 			},
 			//轮播图切换修改背景色
@@ -250,14 +249,16 @@
 				})
 			},
 			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);
+				this.$util.msg("正在开发中,敬请期待~",2000)
 				// uni.navigateToMiniProgram({
 				// 	appId: 'wx5a5cda32926f55ac',
 				// 	path: '/pages/tabBar/home/home',
@@ -274,9 +275,12 @@
 			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',{}, 
+				this.$api.get('/home/afterSale',{organizeID:this.userOrganizeID}, 
 					response => {
 						console.log(response.data.contactNumber)
 						uni.makePhoneCall({
@@ -295,7 +299,18 @@
 		},
 		onPullDownRefresh() {//下拉刷新
 			this.getHomeInformation()
+			this.getOrganizeProducts()
 			uni.stopPullDownRefresh()
+		},
+		onShareAppMessage(res){//分享转发
+			if (res.from === 'button') {
+		      // 来自页面内转发按钮
+		    }
+			return {
+			  title: '采美采购商城-生美/医美采购服务平台',
+			  path: 'pages/tabBar/home/home',
+			  imageUrl:'https://img.caimei365.com/group1/M00/03/8C/Cmis215XHXSAWWkhAAXDP4-6m_c397.png'
+			}
 		}
 	}
 </script>
@@ -304,42 +319,40 @@
 	page,.home{
 		width: 100%;
 		height: auto;
-	}			
-	.container-home-float{
-		padding-top: 0;
-	}
-	.container-home-fixed{
-		padding-top: 100rpx;
-	}
-	.search-input-float{
-		width: 100%;
-		height:auto;
-	}
-	.search-input-fixed{
-		width: 100%;
-		height:auto;
-		position: fixed;
-		top: 0;
-		left: 0;
-		z-index: 1000;
+	}	
+	.container-home{
 		background: #FFFFFF;
 	}
-	.banner-section{
+	.swiper-banner-box{
 		width: 100%;
-		height: 366rpx;
+		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;
 	}	
-	.banner{
-		width: 100%;
-		height: 366rpx;
-		image {
+	.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: 100%;
+			height: 340rpx;
+			display: block;
 		}
 	}
 	.swiper__dots-box{
 		position: absolute;
-		bottom: 10px;
+		bottom: 30rpx;
 		left: 0;
 		right: 0;
 		/* #ifndef APP-NVUE */
@@ -357,7 +370,7 @@
 			background-color:rgba(255,255,255,.7);
 		}
 		.swiper__dots-long{
-			width: 32rpx;
+			width: 35rpx;
 			height: 8rpx;
 			border-radius: 4rpx;
 			background-color: #ffff;
@@ -372,6 +385,12 @@
 		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;
@@ -393,12 +412,12 @@
 				width: 90rpx;
 				height: 90rpx;
 				margin-bottom: 8rpx;
-				border-radius: 50%;
+				border-radius: 32rpx;
 			}	
 		}
 		.cate-item-info {
 			width: 118rpx;
-			margin-right:76.5rpx;
+			margin-right:59.5rpx;
 			display: flex;
 			float: left;
 			flex-direction: column;
@@ -413,7 +432,7 @@
 				width: 90rpx;
 				height: 90rpx;
 				margin-bottom: 16rpx;
-				border-radius:50%;
+				border-radius: 32rpx;
 			}	
 			button.contact-btn{
 				width: 118rpx;
@@ -435,24 +454,25 @@
 					width: 90rpx;
 					height: 90rpx;
 					margin-bottom: 0;
-					border-radius:50%;
+					border-radius: 32rpx;
 				}
 			}
 		}
 	}
 	.hotgoods-section{
-		padding: 4rpx 0 24rpx 24rpx;
-		background: #fff;
+		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;
@@ -472,85 +492,112 @@
 		width: 100%;
 		height: auto;				
 		overflow: hidden;
-		scroll-view{
-			padding: 26rpx 0;
-			width: 100%;
-		}
+		padding-top: 24rpx;
+		background: #FFFFFF;
+		border-radius: 20rpx;
+		margin-bottom: 20rpx;
+		// box-shadow:0px 3px 6px rgba(225,86,22,0.07);
 		.scoll-wrapper{
-			display:flex;
-			align-items: flex-start;
-		}
-		.floor-item{
-			width: 210rpx;
-			padding-right: 24rpx;
-			font-size: $font-size-24;
-			color: $text-color;
-			line-height: 36rpx;
-			border-radius: 10rpx;			
-			image{
-				width: 210rpx;
-				height: 217rpx;
-				border-radius: 10rpx;
-			}
-			.title-none{
-				font-size: $font-size-26;
-				color: #FF2A2A;
-				line-height: 60rpx;
-			}
-			.title{
-				width: 210rpx;
-				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: 36rpx;
+			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;
-				display: flex;
-				margin-top: 8rpx;
-				.p-no{
-					font-size: $font-size-24;
-					color: $color-system;
-					margin-right: 5rpx;
+				border-radius: 20rpx;
+				margin-bottom: 20rpx;
+				float: left;
+				&:nth-child(2n){
+					margin-right: 0;
 				}
 				image{
-					width:30rpx;
-					height: 36rpx;
+					width: 341rpx;
+					height: 341rpx;
+					border-radius: 20rpx 20rpx 0 0;
+					display: block;
+					margin-bottom: 20rpx;
 				}
-			}
-			.price{
-				color:#FF2A2A;
-				line-height: 20rpx;
-				margin-top: 18rpx;
-				.sm{
-					font-size: $font-size-24;
+				.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;
+					}
 				}
-				.big{
-					font-size: $font-size-28;
+				.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 30rpx 24rpx;
+		padding: 0  24rpx 0 24rpx;
+		background: #FFFFFF;
+		border-radius: 20rpx;
 		.s-header{
 			display:flex;
 			align-items:center;
-			height: 40rpx;
-			line-height: 40rpx;
-			margin-bottom: 38rpx;
+			height: 80rpx;
+			line-height: 80rpx;
 			.tip{
 				flex: 1;
 				font-size: 30rpx;

+ 520 - 0
components/cm-module/cm-seller/user.vue

@@ -0,0 +1,520 @@
+<template>
+	<view class="container user clearfix">
+		<cm-custom :navbar-data='nvabarData'></cm-custom>
+		<view class="user-section">
+			<view class="header" :style="{height:(CustomBar+90)-StatusBar+'px',paddingTop:CustomBar+'px',background:'url('+ bgImgUrl +')',backgroundSize:'cover'}">
+				<view class="header-main" v-if="hasLogin">
+					<view class="header-text">
+						<view class="user-item">
+							<text class="u-h1">{{name}}</text>
+						</view>
+						<view class="user-item">
+							<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>
+				<!-- 订单 -->
+				<view class="user-order">
+					<view class="tab-title" @click="navigator('/seller/pages/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-icon">
+								<image src="../../../static/temp/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}}
+								</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-icon">
+								<image src="../../../static/temp/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}}
+								</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-icon">
+								<image src="../../../static/temp/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}}
+								</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-icon">
+								<image src="../../../static/temp/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}}
+								</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-icon">
+								<image src="../../../static/temp/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}}
+								</text>
+							</view>
+							<text class="order-t">退货/款</text>
+						</view>
+					</view>
+				</view>
+			</view>
+			<!-- 底部跳转 -->
+			<view class="foot-list">
+				<view class="list-cell-item">
+					<view class="list-cell"  v-for="(item, index) in firstList" :key="index" @click="navigator(item.path)" hover-class="cell-hover" :hover-stay-time="50">
+						<text class="cell-tit">{{item.name}}</text>
+						<text 	v-if="index == 0 && 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>
+		</view>	
+	</view>
+</template>
+<script>
+	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: {
+			uniBadge,
+		},
+		data() {
+			return{	
+				nvabarData: {//顶部自定义导航
+					showCapsule: 1, // 是否显示左上角图标  1表示显示  0表示不显示,
+					showSearch: 0,
+					title: '账户中心', // 导航栏 中间的标题
+					haveBack:false,
+					textLeft:this.$store.state.isIphone,
+					textColor:'#FFFFFF',
+					bgColor:''
+				},
+				CustomBar:this.CustomBar,// 顶部导航栏高度
+				StatusBar: this.StatusBar,
+				bgImgUrl:'https://img.caimei365.com/group1/M00/03/B0/Cmis217Z_i6ASHobAAhl69yz3SM078.png',
+				name:'',
+				headpic:'',
+				userId:'',
+				skeletonShow:true,
+				orderNum:0,//机构自主下单订单数
+				beforeConfirmCount:0,//待确认角标
+				beforePayCount:0, 	//待付款角标
+				beforeShipCount:0, //待发货角标
+				shippedCount:0,   //已发货角标
+				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'}
+				],
+			}
+		},
+		created() {
+			this.initData()
+		},
+		computed: {
+			...mapState(['hasLogin','userInfo'])
+		},
+		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')
+						})
+					})
+				})
+			},
+			getUserSellerHome(){
+				this.$api.getStorage().then((resolve) =>{
+					this.userId = resolve.userID
+					getSellerHome({userId:this.userId}).then(response =>{
+						let sellerData = response.data
+						this.name = sellerData.seller.linkMan1?sellerData.seller.linkMan1:'' 	//协销名称
+						this.headpic = sellerData.seller.logo //会所头像
+						this.beforeConfirmCount = this.showBadge(sellerData.beforeConfirmCount)//待付款
+						this.beforePayCount = this.showBadge(sellerData.beforePayCount)//待付款
+						this.beforeShipCount = this.showBadge(sellerData.beforeShipCount)//待发货		
+						this.shippedCount = this.showBadge(sellerData.shippedCount)//已发货	
+						this.refundsCount = this.showBadge(sellerData.refundsCount)//退货/款	
+						this.orderNum = this.showBadge(sellerData.orderNum)//机构自主下单订单数
+						this.skeletonShow = false;
+					}).catch(error =>{
+						this.$util.msg(error.msg,2000)
+					})
+				})	
+			},
+			navigator(url){
+				this.$api.navigateTo(url)
+			},			
+			showBadge(n){
+				let num ='';
+				if(n>100){num = 99}else{num = n;}
+				return num;
+			},
+			onPullDownRefresh() {//下拉刷新
+				this.initData()
+				uni.stopPullDownRefresh()
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	@import "@/uni.scss";
+	page{
+		background-color: #F7F7F7;
+	}
+	.user{
+		width: 100%;
+		height: 100%;
+		position:relative;
+		background: rgba(247, 247, 247, 1);
+	}	
+	.header{
+		width: 100%;
+		position: relative;
+		background-size: cover;
+	}	
+	.header-main{
+		width: 702rpx;
+		height: 130rpx;
+		padding: 12rpx 24rpx;
+		display: flex;
+		.header-text{
+			flex: 8;
+			display: flex;
+			flex-direction: column;
+			.user-item{
+				flex: 1;
+				height: 64rpx;
+				line-height: 64rpx;
+				.u-tips{
+					display: inline-block;
+					float: left;
+					width: 98rpx;
+					height: 30rpx;
+					border: 1px solid #FFFFFF;
+					background: linear-gradient(128deg,rgba(242,143,49,1) 0%,rgba(225,86,22,1) 100%);
+					border-radius: 16rpx;
+					line-height: 30rpx;
+					font-size: $font-size-20;
+					text-align: center;
+					color: #FFFFFF;
+					margin-left: 10rpx;
+				}
+				.u-viptips{
+					display: inline-block;
+					float: left;
+					width: 98rpx;
+					height: 30rpx;
+					border: 1px solid #FFE600;
+					background: linear-gradient(128deg,rgba(242,143,49,1) 0%,rgba(225,86,22,1) 100%);
+					border-radius: 16rpx;
+					line-height: 30rpx;
+					font-size: $font-size-20;
+					text-align: center;
+					color: #FFE600;
+					margin-left: 10rpx;
+					margin-top: 17rpx;
+				}
+				.u-h1{
+					float: left;
+					font-size: $font-size-36;
+					color: #FFFFFF;
+					text-align: left;
+					-o-text-overflow: ellipsis;
+					text-overflow: ellipsis;
+					display: -webkit-box;
+					word-break: break-all;
+					-webkit-box-orient: vertical;
+					-webkit-line-clamp: 1;
+					overflow: hidden;
+				}
+				.u-p{
+					font-size: $font-size-24;
+					line-height: 64rpx;
+					color: #FFFFFF;
+					text-align: left;
+				}
+			}
+		}
+		.header-icon{
+			flex: 2;
+			margin-right: 20rpx;
+			image{
+				float: right;
+				width: 128rpx;
+				height: 128rpx;
+				border-radius: 100%;
+				border: 2rpx solid #FFFFFF;
+			}
+		}
+	}
+	.header-main-none{
+		width: 702rpx;
+		height: 152rpx;
+		padding: 0 24rpx;
+		display: flex;
+		.header-text{
+			flex: 8;
+			display: flex;
+			flex-direction: column;
+			.user-item{
+				flex: 1;
+				height: 50rpx;
+				line-height: 50rpx;
+				.line{
+					margin: 0 10rpx;
+				}
+				.u-h1{
+					float: left;
+					font-size: $font-size-36;
+					color: #FFFFFF;
+					text-align: left;
+					-o-text-overflow: ellipsis;
+					text-overflow: ellipsis;
+					display: -webkit-box;
+					word-break: break-all;
+					-webkit-box-orient: vertical;
+					-webkit-line-clamp: 1;
+					overflow: hidden;
+				}
+				.u-p{
+					font-size: $font-size-24;
+					line-height: 50rpx;
+					color: #EFEFEF;
+					text-align: left;
+				}
+				.u-btn{
+					width: 160rpx;
+					height: 40rpx;
+					background: rgba(255,255,255,.5);
+					border-radius: 5rpx;
+					line-height: 40rpx;
+					text-align: center;
+					font-size: $font-size-24;
+					color: #FFFFFF;
+					display: block;
+					margin-top: 5rpx;
+					padding-left: 6rpx;
+					.icon-xiangyouhuabeifen{
+						font-size: $font-size-24;
+					}
+				}
+			}
+		}
+		.header-icon{
+			flex: 2;
+			display: flex;
+			margin-right: 20rpx;
+			align-items: center;
+			justify-content: center;
+			image{
+				float: right;
+				width: 128rpx;
+				height: 128rpx;
+				border-radius: 100%;
+				border: 2rpx solid #FFFFFF;
+			}
+		}
+	}
+	.user-order{
+		width: 654rpx;
+		height: auto;
+		padding: 0 24rpx;
+		background-color: $bg-color;
+		margin-bottom: 24rpx;
+		position: absolute;
+		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;
+		line-height: 80rpx;
+		color: #333333;
+		text-align:left;
+		border-bottom: 1px solid #F8F8F8;
+		position: relative;
+		.cell-tit{
+			font-size: $font-size-28;
+			color: $text-color;
+		}
+		.cell-more{
+			float: right;
+			line-height: 80rpx;
+			font-size: $font-size-24;
+			color: $text-color;
+			padding-right: 30rpx;
+		}
+		.iconfont{
+			width: 30rpx;
+			height: 80rpx;
+			line-height: 80rpx;
+			text-align: center;
+			position: absolute;
+			right: 0;
+			top: 0;
+			display: block;
+			font-size: $font-size-28;
+		}
+	}
+	.order-section{
+		display: flex;
+		justify-content: space-around;
+		align-items: center;
+		flex-wrap:wrap;
+		height: 99rpx;
+		padding: 24rpx 0;
+	}
+	.order-item{
+		flex:1;
+		display: flex;
+		flex-direction: column;
+		align-items: center;
+		position: relative;
+		&:last-child{
+			margin-right: 0;
+		}
+		.order-icon{
+			width: 52rpx;
+			height: 52rpx;
+			position: relative;
+			image{
+				width: 52rpx;
+				height: 52rpx;
+			}
+			.icon-num{
+				position: absolute;
+				right:-24rpx;
+				top: -9rpx;
+			}
+			.icon-num.goleft{
+				right: -12rpx;
+			}
+		}
+		.order-t{
+			line-height: 50rpx;
+			font-size: $font-size-24;
+			color: $text-color;
+		}
+	}
+	.foot-list{
+		width: 702rpx;
+		padding: 0 24rpx;
+		padding-top: 168rpx;
+	}	
+	.list-cell-item{
+		width: 654rpx;
+		height: auto;
+		margin-bottom: 24rpx;
+		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;
+		&.cell-hover{
+			background:#fafafa;
+		}
+		.cell-more{
+			align-self: baseline;
+			font-size:$font-size-28;
+			color:$text-color;
+			.txt{
+				color: #FB4343;
+				padding-right: 10rpx;
+			}
+		}
+		.cell-tit{
+			flex: 1;
+			font-size: $font-size-28;
+			color: $text-color;
+			margin-right:10rpx;
+		}
+		.cell-tip{
+			font-size: $font-size-28;
+			color: $text-color;
+		}
+	}	
+	.list-cell.last{
+		border-bottom: none;
+	}
+	.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>

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

@@ -93,8 +93,8 @@
 		
 		.address-empty{
 			width: 100%;
-			height: 84rpx;
-			line-height: 84rpx;
+			height: 100rpx;
+			line-height: 100rpx;
 			color: $color-system;
 			text-align: center;
 			font-size: $font-size-26;

+ 83 - 16
components/cm-module/creatOrder/freight.vue

@@ -1,14 +1,14 @@
 <template name="freight">
-	<view class="freight-template">
+	<view class="freight-template" @click.stop="discard">
 		 <!-- 运费信息 -->
 		<view class="invoice-freight">
-			<view class="freight-left">
-				运费
-				<!-- <text class="iconfont icon-yunfeishuoming" @click="showTip"></text> -->
-			</view>
-			<view class="freight-right">
-				<text>{{freightText}}</text>
-				<text class="text" v-if="freightData.freePostFlag == 1">¥{{orderPriceToFixed(freightMoney)}}</text>
+			<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>
@@ -24,8 +24,13 @@
 		},
 		data() {
 			return{
+				infoData:'',
 				freightText:'',
-				freightMoney:''
+				freightMoney:'',
+				isShowOption:false,
+				optionList:['到付'],
+				freePostFlag:'',
+				
 			}
 		},
 		created(){
@@ -36,14 +41,16 @@
 		},
 		methods:{
 			initData(res) {
+				this.infoData = res;
 				switch(res.freePostFlag){
 					case 0:
 						this.freightText = '包邮'
 						this.freightData.freight  = 0
 						break
 					case 1:
-						this.freightText = '不包邮'
+						this.freightText = ''
 						this.freightMoney = res.freight
+						this.optionList.unshift(this.orderPriceToFixed(this.freightMoney))
 						break
 					case -1:
 						this.freightText = '到付'
@@ -51,11 +58,41 @@
 						break
 				}
 			},
-			orderPriceToFixed (num){
+			selectFreight (){
+				let self = this,value;
+				uni.showActionSheet({
+				    itemList: self.optionList,
+				    success: function (res) {
+						switch(res.tapIndex){
+							case 0:
+								self.freightMoney = self.infoData.freight
+								self.freePostFlag = 1
+								break
+							case 1:
+								self.freePostFlag = -1
+								self.freightMoney ='到付'
+								break
+						}
+						self.$emit('confirmFreight',self.freePostFlag);
+				    },
+				    fail: function (res) {
+				        console.log(res.errMsg);
+				    }
+				});
+			},
+			orderPriceToFixed (value){
 				let price ='';
-				price = parseInt(num).toFixed(2);
+				if(value == '到付'){
+					price = value
+				}else{
+					price ='¥'+parseInt(value).toFixed(2)
+				}
 				return price
 			},
+			discard(){
+				this.isShowOption = false
+				this.selectClass = ''
+			},
 			showTip(){
 				this.$emit('showFreightAlert');
 			},
@@ -82,6 +119,12 @@
 			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;
@@ -92,11 +135,35 @@
 			.freight-right{
 				float: right;
 				color: #2A81FF;
-				.text{
-					line-height: 88rpx;
-					color: #ff0000;
-					margin:0 20rpx;
+				position: relative;
+				.freight-text{
+					float: left;
+				}
+				.select{
+					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;
+						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;
+					}
 				}
 			}
 		}

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

@@ -122,7 +122,7 @@
 					invoiceTitleType:'0'//发票抬头类型 1企业 0个人
 				},
 				invoiceData:{
-					id:'',
+					id:null,
 					invoiceTitle:'',	 //单位名称
 					corporationTaxNum:'',//纳税人识别号
 					registeredAddress: '',//单位地址
@@ -546,7 +546,7 @@
 			width: 702rpx;
 			padding: 24rpx 24rpx 65rpx 24rpx;
 			height: 920rpx;
-			border-radius: 40rpx 40rpx 0 0;
+			border-radius: 20rpx 20rpx 0 0;
 			background-color: #fff;
 			display: flex;
 			flex-wrap: wrap;

+ 15 - 12
components/cm-module/creatOrder/sellerFreight.vue

@@ -2,10 +2,7 @@
 	<view class="freight-template">
 		 <!-- 运费信息 -->
 		<view class="invoice-freight" @tap.stop="hanldOperationConfim">
-			<view class="freight-left">
-				运费
-				<!-- <text class="iconfont icon-yunfeishuoming" @click.stop="showTip"></text> -->
-			</view>
+			<view class="freight-left">运费</view>
 			<view class="freight-right">
 				<text class="text-l">{{freightText}}</text>
 				<text class="text" v-if="freightData.freePostFlag == 1">¥{{orderPriceToFixed(freightMoney)}}</text>
@@ -29,7 +26,7 @@
 					</view>
 					<view class="freight-group" v-if="freightData.freePostFlag == 1">
 						<view class="group-from">
-							<input class="form-input" type="text" v-model="freightData.freight" @input="setFreightMoney" placeholder="请填写运费" maxlength="20">
+							<input class="form-input" type="text" v-model="hanldFreight" @input="setFreightMoney" placeholder="请填写运费" maxlength="20">
 						</view>
 					</view>	
 					<view class="freight-group" v-if="freightData.freePostFlag == 0">
@@ -66,6 +63,7 @@
 					{value:-1,name:'到付'},
 				],
 				current:0,
+				hanldFreight:0,
 				freightData:{
 					freePostFlag:1,
 					freight:0
@@ -77,14 +75,19 @@
 		},
 		methods:{
 			infoData(data){//初始化运费
-				console.log(data)
+				// console.log(data)
 				switch(data.freePostFlag){
 					case 1:
 						this.current = 0;
 						this.freightData.freePostFlag = data.freePostFlag;
+						if(data.freight == 0){
+							this.hanldFreight = ''
+						}else{
+							this.hanldFreight = data.freight
+						}
 						this.freightData.freight = data.freight;
-						this.freightMoney = data.freight;
-						this.freightText = '不包邮'
+						this.freightMoney = this.hanldFreight;
+						this.freightText = ''
 						break;
 					case 0:
 						this.current = 1;
@@ -112,12 +115,12 @@
 				}		
 			},
 			choiceaFreightFirst(index){//校验运费形式及运费价
-				console.log(index)
 				if(index == 1){
-					if(this.freightData.freight==0 || this.freightData.freight== ''){
+					if(this.hanldFreight == 0 || this.hanldFreight== ''){
 						this.$util.msg('请填写运费',2000)
 						return
 					}
+					this.freightData.freight = this.hanldFreight
 					this.$emit('handleChoiceaFreight',this.freightData)
 				}else{
 					this.freightData.freight = 0
@@ -136,7 +139,7 @@
 			},
 			hanldOperationConfim(data){//显示选择数量确认弹窗
 				this.specClass = 'show';
-				this.freightMoney = this.freightData.freight
+				this.freightMoney = this.hanldFreight
 			},
 			radioChange(e) {//运费选择切换
 				this.freightData.freePostFlag = parseInt(e.target.value);
@@ -369,7 +372,7 @@
 			width: 702rpx;
 			padding: 24rpx 24rpx 36rpx 24rpx;
 			height: 400rpx;
-			border-radius: 40rpx 40rpx 0 0;
+			border-radius: 20rpx 20rpx 0 0;
 			background-color: #fff;
 			display: flex;
 			flex-wrap: wrap;

+ 1 - 1
components/cm-module/creatOrder/sellerInvoice.vue

@@ -546,7 +546,7 @@
 			width: 702rpx;
 			padding: 24rpx 24rpx 65rpx 24rpx;
 			height: 920rpx;
-			border-radius: 40rpx 40rpx 0 0;
+			border-radius: 20rpx 20rpx 0 0;
 			background-color: #fff;
 			display: flex;
 			flex-wrap: wrap;

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

@@ -0,0 +1,143 @@
+<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/headerNavbar.vue

@@ -122,7 +122,7 @@
 		 position: fixed;
 		 display: flex;
 		 border-radius: 64rpx;
-		 border: 0.5px solid rgba(0,0,0, 0.1);
+		 border: 0.5px solid rgba(0,0,0, 0.2);
 		 box-sizing: border-box;
 	}
 	.navbar-icon .iconfont {
@@ -132,7 +132,7 @@
 		 margin-bottom: 1px;
 	}
 	.navbar-icon .icon-vertical_line {
-		color: #ebebeb;
+		color: #999999;
 	}
 	.navbar-loading {
 		 background: #fff;

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

@@ -0,0 +1,148 @@
+<template name="headerNavbar">
+	<!-- 自定义导航栏 -->
+	<view class='navbar-wrap' :style="{height:(CustomBar+55)+'px',paddingTop:StatusBar+'px'}"> 
+	  	<view class="navbar-text" 
+			  :style="{color:navbarData.textColor ? navbarData.textColor:'',lineHeight:(CustomBar - StatusBar)+'px;',fontSize:fontSizeSetting+'px;',paddingLeft:navbarData.textLeft ? '' : 12+'px'}" :class="platformClass">
+	    	  {{navbarData.title ? navbarData.title : " "}}
+	  	</view>
+		<view class="search-input">
+			<view class="gosearch-btn" @click="this.$api.navigateTo(clickPath)">
+				<text class="iconfont icon-iconfonticonfontsousuo1"></text>
+				<text>{{hotSearchText}}</text>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	var self;
+	import btSearch from '@/components/uni-search/bt-search.vue'
+	export default{
+		name:'headerNavbar',
+		components:{
+			btSearch,
+		},
+		props:{
+		    navbarData: { // 由父页面传递的数据
+				type: Object
+		    }
+		},
+		data() {
+			return{
+				clickPath:'/pages/search/search',
+				hotSearchText:'你想要的这里都有',
+				CustomBar:this.CustomBar,// 顶部导航栏高度
+				StatusBar: this.StatusBar,
+				fontSizeSetting:this.fontSizeSetting,
+				screenWidth:this.screenWidth,
+				capsule:this.capsule,
+				platformClass:this.platformClass,
+			}
+		},
+		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;
+		 background: url(https://img.caimei365.com/group1/M00/03/B0/Cmis217Z9LCAF_anAADHlsIu3aE475.png);
+		 background-size: cover;
+		 border-bottom:none;
+	}
+	.navbar-text {
+		 font-size: 30rpx;
+		 color: #000000;
+		 font-weight: 500;
+	}
+	.navbar-text.center{
+		text-align: center;
+	}
+	.navbar-text.left{
+		text-align: left;
+		padding-left: 45px;
+	}
+	.navbar-icon {
+		 position: fixed;
+		 display: flex;
+		 box-sizing: border-box;
+	}
+	.navbar-icon .iconfont {
+		 display: inline-block;
+		 overflow: hidden;
+		 font-size: 44rpx;
+		 padding-right:40rpx;
+		 margin-top: 1px;
+	}
+	.navbar-icon .icon-iconfonticonfontsousuo1 {
+		color: #000000;
+	}
+	.navbar-icon view {
+		 height: 18px;
+		 border-left: 0.5px solid rgba(0,0,0, 0.3);
+		 margin-top: 6px;
+	}
+	.navbar-loading {
+		 background: #fff;
+		 text-align: center;
+	}
+	.search-input{
+		width: 100%;
+		height: 70rpx;
+		padding: 20rpx 0 20rpx 0;
+		.gosearch-btn{
+			/* #ifndef APP-NVUE */
+			display: flex;
+			/* #endif */
+			flex: 1;
+			flex-direction: row;
+			justify-content: center;
+			align-items: center;
+			width: 662rpx;
+			height: 100%;
+			border-radius: 40rpx;
+			background: #F0F0F0;
+			margin: 0 auto;
+			padding:0 20rpx;
+			font-size: 28rpx;
+			line-height: 70rpx;
+			color: #8A8A8A;
+			background: #FFFFFF;
+			.icon-iconfonticonfontsousuo1{
+				margin:0 6rpx;
+				font-size: 34rpx;
+				color: #8A8A8A;
+				z-index: 10;
+			}
+		}
+	}
+</style>

+ 0 - 129
components/cm-module/home/navInfor.vue

@@ -1,129 +0,0 @@
-<template name="navinfor">
-	<!-- 优选分类 -->
-	<view class="tabbar clearfix">
-		<view class="cate-item" @click="this.$api.navToListPage({type:'星范优惠',value:navInforList[0].text})">
-			<image :src="navInforList[0].icon"></image>
-			<text>{{navInforList[0].text}}</text>
-		</view>
-		<view class="cate-item" @click="this.$api.navToListPage({type:'惊喜特惠',value:navInforList[1].text})">
-			<image :src="navInforList[1].icon"></image>
-			<text>{{navInforList[1].text}}</text>
-		</view>
-		<view class="cate-item" @click="showTost">
-			<image :src="navInforList[2].icon"></image>
-			<text>{{navInforList[2].text}}</text>
-		</view>
-		<view class="cate-item">
-			<!-- #ifdef MP-WEIXIN -->
-			<button class="contact-btn" open-type="contact" @bindcontact="handleContact">
-				<image :src="navInforList[3].icon"></image>
-			</button>	
-			<!-- #endif -->
-			<text>{{navInforList[3].text}}</text>
-		</view>
-	</view>
-</template>
-
-<script>
-	var self; 
-	export default{
-		name:'navinfor',
-		props:{
-		    navInforList: { // 由父页面传递的数据
-				type: Array,
-				value: [],
-		    },
-		},
-		data() {
-			return{
-
-			}
-		},
-		created() {
-		},
-		onLoad(){
-			
-		},
-		methods:{
-			handleContact(e){
-				console.log(e.detail.path)
-				console.log(e.detail.query)
-			},
-			showTost(){
-				uni.showToast({
-					icon: 'none',
-					title: '正在开发中,敬请期待~',
-					duration: 2000
-				})
-			}
-		},
-		onShow(){
-	
-		}
-	}
-</script>
-
-<style lang="scss">
-	.cate-item {
-		width: 160rpx;
-		margin-right:20.666rpx;
-		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: 160rpx;
-			height: 90rpx;
-			margin-bottom: 16rpx;
-		}	
-		button.contact-btn{
-			width: 160rpx;
-			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: 160rpx;
-				height: 90rpx;
-				margin-bottom: 0;
-			}
-		}
-	}
-</style>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-

+ 0 - 113
components/cm-module/home/navServer.vue

@@ -1,113 +0,0 @@
-<template name="navserver">
-	<!-- 优选分类 -->
-	<view class="tabbar clearfix">
-		<view class="cate-item" @click="showTost">
-			<image :src="navServerList[0].icon"></image>
-			<text>{{navServerList[0].text}}</text>
-		</view>
-		<view class="cate-item" @click="navto(navServerList[1].path)">
-			<image :src="navServerList[1].icon"></image>
-			<text>{{navServerList[1].text}}</text>
-		</view>
-		<view class="cate-item" @click="navto(navServerList[2].path)">
-			<image :src="navServerList[2].icon"></image>
-			<text>{{navServerList[2].text}}</text>
-		</view>
-		<view class="cate-item" @click="telPhoneTo">
-			<image :src="navServerList[3].icon"></image>
-			<text>{{navServerList[3].text}}</text>
-		</view>
-	</view>
-</template>
-
-<script>
-	var self; 
-	export default{
-		name:'navserver',
-		props:{
-			telPhone:String,
-		    navServerList: { // 由父页面传递的数据
-				type: Array,
-				value: [],
-		    },
-		},
-		data() {
-			return{
-
-			}
-		},
-		created() {
-
-		},
-		onLoad(){
-			
-		},
-		methods:{
-			showTost(){
-				uni.showToast({
-					icon: 'none',
-					title: '正在开发中,敬请期待~',
-					duration: 2000
-				})
-			},
-			navto(url){
-				uni.navigateTo({
-					url
-				})
-			},
-			telPhoneTo(){
-				let self = this;
-				uni.makePhoneCall({
-				    phoneNumber:self.telPhone //仅为示例
-				});
-			}
-		},
-		onShow(){
-	
-		}
-	}
-</script>
-
-<style lang="scss">
-	/*底部服务导航*/
-	.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%;
-		}
-	}
-</style>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-

+ 0 - 92
components/cm-module/home/navigationTab.vue

@@ -1,92 +0,0 @@
-<template name="navigation">
-	<!-- 自定义分类导航栏 -->
-	<view class="tabbar clearfix">
-		<view class="cate-item" v-for="(nav,idx) in tabList" :key="idx" @click.stop="navToListPage(nav)">
-			<image class="tui-skeleton-fillet" :src="nav.classifyImage"></image>
-			<text class="tui-skeleton-rect">{{nav.classifyName}}</text>
-		</view>
-	</view>
-</template>
-
-<script>
-	var self; 
-	export default{
-		name:'navigation',
-		props:{
-		    tabList: { // 由父页面传递的数据
-				type: Array,
-				value: [],
-		    },
-
-		},
-		data() {
-			return{
-				
-			}
-		},
-		created() {
-			
-		},
-		onLoad(){
-			
-		},
-		methods:{
-			navToListPage(nav){
-				this.$api.navToListPage({type:'0',value:nav.classifyName,id:nav.id});
-			}
-		},
-		onShow(){
-	
-		}
-	}
-</script>
-
-<style lang="scss">
-	.tabbar{
-		margin-bottom: 26rpx;
-	}
-	.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: 50%;
-		}	
-	}
-</style>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-

+ 30 - 17
components/cm-module/listTemplate/buyagainList.vue

@@ -12,8 +12,8 @@
 						<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-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">
@@ -21,7 +21,7 @@
 									<text class="iconfont icon-wenhao" @click.stop="repurchModel"></text>
 								</view>
 							</view>
-							<button class="add-cart-btn" @click.stop="operationHanld(item)">选择数量</button>
+							<button class="add-cart-btn" @click.stop="operationHanld(item)">数量</button>
 						</view>
 					</view>
 				</view>
@@ -35,12 +35,14 @@
 			<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>
-		<view class="cart-icon" @click="toCartPage">
-			<text v-if="cartQuantity > 0" class="uni-badge uni-badge-error uni-small uni-badge--small icon-num">
-				{{cartQuantity >= 100 ? '99+' : cartQuantity}}
-			</text>
-			<image src='../../../static/icon-cart-active@3x.png' mode="widthFix"></image>
-		</view>
+		<!-- 可拖动悬浮按钮 -->
+		<cm-drag :cartNum="cartQuantity" 
+				 :isDock="true"
+				 :existTabBar="true" 
+				 @btnClick="btnClick" 
+				 @btnTouchstart="btnTouchstart" 
+				 @btnTouchend="btnTouchend">
+		</cm-drag>
 		<!-- 透明模态层 -->
 		<modal-layer v-if='isModallayer'></modal-layer>
 	</view>
@@ -50,6 +52,7 @@
 	import listSkeleton from '@/components/cm-module/listTemplate/listSkeleton'
 	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{
@@ -57,7 +60,8 @@
 		components:{
 			listSkeleton,
 			modalLayer,
-			uniStars
+			uniStars,
+			cmDrag
 		},
 		data(){
 			return{
@@ -80,7 +84,9 @@
 				fromRegularPurchasePage: false,
 				cartQuantity: 0,
 				showRegularBtn: false,
-				isPrecedence:false
+				isPrecedence:false,
+				windowWidth:'',
+				windowHeight:'',
 			}
 		},
 		created() {
@@ -166,9 +172,7 @@
 				this.$api.navigateTo(`/pages/goods/product?id=${id}`);
 				this.isModallayer = false;
 			},
-			toCartPage() {
-				this.$emit('goCartPage')
-			},
+			
 			repurchModel(){
 				this.$util.modal('','此商品的价格有变化,原来的购买价已不适用','知道了','',false,() =>{})
 			},
@@ -182,6 +186,15 @@
 			delInputText(){//清除输入框内容
 				this.searchInputVal = ''
 				this.isShowClose = false
+			},
+			btnClick() {
+				this.$emit('goCartPage')
+			},
+			btnTouchstart() {
+				// console.log('btnTouchstart');
+			},
+			btnTouchend() {
+				// console.log('btnTouchend');
 			}
 		}
 	}
@@ -310,9 +323,9 @@
 				}
 				.price-view{
 					display: inline-block;
-					width: 78rpx;
-					border-radius: 18rpx;
-					font-size: $font-size-20;
+					width: 40rpx;
+					border-radius: 10rpx;
+					font-size: $font-size-22;
 					text-align: center;
 					color: #FFFFFF;
 					height: 36rpx;

+ 127 - 94
components/cm-module/listTemplate/commodityList.vue

@@ -1,64 +1,56 @@
 <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="commodityList.length > 0">
-			<view v-for="(item,index) in commodityList" :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>
+		<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.pid)">
+				<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}}</text>
 					<view class="list-details-specs" v-if="item.productCode!=''&&item.productCode!=null">商品编码:{{item.productCode}}</view>
-					<text class="list-details-miniQuantity" v-if="fromRegularPurchasePage">起订量:{{item.minBuyNumber}}</text>
 					<view class="list-details-price">
-						<view v-if="hasLogin"class="list-price">
+						<view v-if="hasLogin" class="list-price">
 							<view v-if="userIdentity == 1">
-								<text>¥<text class="price-larger">{{item.retailPrice?item.retailPrice.toFixed(2):'0.00'}}</text></text>
+								<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">
-								<view class="price-larger" v-if="item.price1TextFlag == '1'">
+								<view class="price-larger" v-if="item.priceflag == '1'">
 									<text class="txt">未公开价格</text>
 								</view>
-								<view class="price-larger" v-if="item.price1TextFlag == '2'">
-									<text class="txt">价格仅会员可见</text>
+								<text v-else-if="priceLoading" class="price-larger small">正在获取价格...</text>
+								<view v-else>
+									<view class="price-larger" v-if="item.priceflag == '2'">
+										<text class="txt">价格仅会员可见</text>
+										<text class="btn" @click.stop="this.$api.navigateTo(`/pages/login/apply?clubStatus=${clubStatus}`)">去升级</text>
+									</view>
+									<text v-else>¥<text class="price-larger">{{item.price ?item.price :'0.00'}}</text></text>
 								</view>
-								<text v-if="item.price1TextFlag == '0'">¥<text class="price-larger">{{item.retailPrice?item.retailPrice.toFixed(2):'0.00'}}</text></text>
 							</view>
 							<view v-if="userIdentity == 2">
-								<view class="price-larger" v-if="item.price1TextFlag == '1'">
+								<view class="price-larger" v-if="item.priceflag == '1'">
 									<text class="txt">未公开价格</text>
 								</view>
-								<text v-else>¥<text class="price-larger">{{item.retailPrice?item.retailPrice.toFixed(2):'0.00'}}</text></text>
+								<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>
 						</view>	
-						<view  class="list-login-now"  v-else>
+						<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>
+							<uni-stars :stars="parseInt(item.pricegrade)" :font-size='36' :width-info="180"></uni-stars>
 						</view>
-						<button v-if="fromRegularPurchasePage" class="add-cart-btn" @click.stop="operationHanld(item)">选择数量</button>
 					</view>
 				</view>
 			</view>
-			<button class="show-more-btn" v-if="showRegularBtn" @click="getListFromServer(true)">查看更多</button>
-			<view v-if="showLoading && commodityList.length > 4 && !showRegularBtn">
+			<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="cart-icon" v-if="fromRegularPurchasePage" @click="toCartPage">
-			<text v-if="cartNum > 0" class="uni-badge uni-badge-error uni-small uni-badge--small icon-num">
-				{{cartNum}}
-			</text>
-			<image src='../../../static/icon-cart-active@3x.png' mode="widthFix"></image>
-		</view>
-		<view class="empty-container" v-if="showEmpty && !fromRegularPurchasePage">
+		<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>
-		<view class="empty-container" v-if="showEmpty && fromRegularPurchasePage">
-			<image class="empty-container-image" src="https://img.caimei365.com/group1/M00/03/71/Cmis2F3wna6AWdWzAAGlgAP0das422.png" mode="aspectFit"></image>
-			<text class="error-text">您还没有购买过任何商品哟~</text>
-			<button class="submit-btn toIndexPage" @click="toIndexPage">去逛逛</button>
-		</view>
 		<!-- 透明模态层 -->
 		<modal-layer v-if='isModallayer'></modal-layer>
 	</view>
@@ -68,7 +60,7 @@
 	import listSkeleton from '@/components/cm-module/listTemplate/listSkeleton'
 	import modalLayer from "@/components/modal-layer"
 	import uniStars from '@/components/uni-stars/uni-stars.vue'
-	import { queryGoodslist } from "@/api/product.js"
+	import { searchQueryTinyType,querySearchProductPrice} from "@/api/product.js"
 	import { mapState,mapMutations } from 'vuex';
 	export default{
 		name:'CommodityList',
@@ -81,49 +73,60 @@
 			emptyText: {
 				type: String
 			},
+			serverUrl: {
+				type: String
+			},
+			typeId: {
+				type:Number
+			}
 		},
 		data(){
 			return{
+				clubStatus:'',
 				isModallayer:false,
 				windowHeight: '',
 				showSkeleton: true,
 				showEmpty: false,
 				userID: '',
 				userIdentity:'',
+				priceLoading:true,
 				scrollHeight: '',
-				commodityList: [],
+				listData: [],
 				showLoading: false,
 				loadingNow: true,
 				loadingText: '上拉加载更多',
-				pageSize: 10,
+				pageSize: 20,
 				pageNum: 1,
-				hasNextPage: false,
 				totalPage: 1,
 				pullFlag: true,
-				fromRegularPurchasePage: false,
 				cartNum: 0,
-				showRegularBtn: false
+				identity:2,
 			}
 		},
 		created() {		
+			console.log(this.typeId)
 			this.setScrollHeight();		
+			this.$api.getComStorage('userInfo').then((resolve) =>{
+				this.clubStatus = resolve.clubStatus
+				this.userID = resolve.userID ? resolve.userID : '';
+				this.userIdentity = resolve.userIdentity
+				if(this.userIdentity == 1){
+					this.identity = 1
+				}else{
+					this.identity = 2
+				}
+				this.getListFromServer();
+			}).catch(error =>{
+				this.getListFromServer();
+			})
 		},
 		computed: {
 			...mapState(['hasLogin','userInfo'])
 		},
 		methods:{
-			toLoginPage() {
-				const {lastPageType, lastPageVal} = this.$parent;
-				uni.navigateTo({
-					url:`/pages/login/login?listType=${lastPageType}&listVal=${lastPageVal}`
-				})
-			},
 			toLower() {
-				// 第一次加载排除常用商品
-				if(!this.showRegularBtn) {
-					if(this.hasNextPage && this.pullFlag) {
-						this.getListFromServer(true);
-					}
+				if(this.totalPage>this.listData.length && this.pullFlag) {
+					this.getListFromServer(true);
 				}
 			},
 			setScrollHeight() {
@@ -132,83 +135,93 @@
 				this.scrollHeight = windowHeight - 1;
 			},
 			getListFromServer(loadMore) {
-				this.$api.getStorage().then((resolve) =>{
-					this.userID = resolve.userID ? resolve.userID : '';
-					this.userIdentity = resolve.userIdentity
-					this.getQueryGoodslist(loadMore)
-				}).catch(error =>{
-					this.getQueryGoodslist(loadMore)
-				})
+				this.getQueryGoodslist(loadMore)
 			},
 			getQueryGoodslist(loadMore){
-				const thisServerurl = this.$parent.serverUrl;
 				this.showLoading = true;
 				this.loadingNow = true;
 				this.loadingText = '加载中';
-				if(loadMore) {
-					this.pageNum += 1;
+				if(loadMore) { this.pageNum += 1; }
+				let params ={
+						id:this.typeId,
+						identity:this.identity,
+						pageNum:this.pageNum,
+						pageSize:this.pageSize,
+						sortField:'',
+						sortType:''
 				}
-				if(this.$parent.lastPageType === '再次购买') {
-					this.fromRegularPurchasePage = true;
-				}
-				queryGoodslist(thisServerurl,{userId:this.userID,pageNum:this.pageNum,pageSize:this.pageSize}).then(response=>{
-					const resData = this.fromRegularPurchasePage ?response.data.page :response.data;
-					const resList = resData.results,
-						  getCartNum = response.data.count;
-					this.cartNum = getCartNum > 99 ?'99+' :getCartNum;
-					if(!loadMore && this.fromRegularPurchasePage && resData.hasNextPage) {
-						this.showRegularBtn = true;
-					}
+				searchQueryTinyType(this.serverUrl,params).then(response=>{
+					const resData = JSON.parse(response.data);
+					const resList = resData.items;
 					if(resList && resList.length > 0){
-						this.hasNextPage = resData.hasNextPage;
-						this.totalPage = resData.totalPage;
+						this.showEmpty = false
+						this.totalPage = resData.total;
 						if(loadMore) {
-							this.commodityList = [...this.commodityList,...resList];
-							this.showRegularBtn = false;
+							this.listData = [...this.listData,...resList];
+							this.setProductPrice()
+							this.showSkeleton = false
 						} else {
-							this.commodityList = [...resList];
-							this.showSkeleton = false;
+							this.listData = [...resList];
+							this.setProductPrice()
+							this.showSkeleton = false
 						}
+						console.log(this.listData)
 						// 防上拉暴滑
 						this.pullFlag = false;
-						setTimeout(()=>{
-							this.pullFlag = true;
-						},500)
+						setTimeout(()=>{ this.pullFlag = true; },500)
 						// 底部提示文案
-						if(this.hasNextPage) {
+						if(this.totalPage>this.listData.length) {
 							this.loadingText = '上拉加载更多';
 						} else {
 							this.showLoading = true;
 							this.loadingNow = false;
 						}
 					} else {
-						if(!loadMore) {
-							this.showEmpty = true;
-						}
+						if(!loadMore) { this.showEmpty = true; }
 					}
+					
 				}).catch(error =>{
 					this.$util.msg(error.msg,2000);
 				})
 			},
-			operationHanld(prop){
-				this.$emit('operationConfim',prop)
+			setProductPrice(){//获取价格
+				if (!this.userID) {return false;}
+				let productIdArr = [];
+				this.listData.map(item=>{// 0公开价格 1不公开价格 2仅对会员机构公开
+					productIdArr.push(item.pid)
+				})
+				this.productIds = productIdArr.join(",");
+				querySearchProductPrice({userId: this.userID,productIds:this.productIds}).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.pid == priceList[i].productId ){
+									Object.assign(item,priceObj)
+								}
+							}
+						});
+						console.log(this.listData)
+					}
+					this.priceLoading = false;
+				}).catch(error =>{
+					this.$util.msg(error.msg,2000)
+				})
 			},
 			navToDetailPage(id) {
 				this.isModallayer = true;
 				this.$api.navigateTo(`/pages/goods/product?id=${id}`);
 				this.isModallayer = false;
-			},
-			toCartPage() {
-				uni.switchTab({
-					url: '/pages/tabBar/cart/cart'
-				})
-			},
-			toIndexPage() {
-				uni.switchTab({
-					url: '/pages/tabBar/home/home' 
-				})
 			}
-				
 		}
 	}
 </script>
@@ -312,13 +325,33 @@
 		}
 		.list-price {
 			color: #FF2A2A;
+			width: 100%;
+			height: 44rpx;
 			.price-larger {
+				width: 100%;
+				height: 44rpx;
 				font-size: 32rpx;
+				&.small{
+					font-size: $font-size-24;
+				}
 				.txt{
 					font-size: $font-size-24;
 					display: inline-block;
-					line-height: 30rpx;
+					line-height: 44rpx;
 					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;
 				}
 			}
 		}

文件差異過大導致無法顯示
+ 488 - 408
components/cm-module/listTemplate/immediatelyList.vue


+ 1 - 1
components/cm-module/listTemplate/memberList.vue

@@ -100,7 +100,7 @@
 				if(loadMore) {
 					self.pageNum += 1;
 				}
-				queryMember({index:this.pageNum,pageSize:this.pageSize}).then(response =>{
+				queryMember({pageNum:this.pageNum,pageSize:this.pageSize}).then(response =>{
 					const resData = response.data;
 					const resList = resData.results;
 					if(resList && resList.length > 0){

+ 22 - 36
components/cm-module/listTemplate/productList.vue

@@ -26,7 +26,7 @@
 									<text class="iconfont icon-wenhao" @click.stop="repurchModel"></text>
 								</view>
 							</view>
-							<button class="add-cart-btn" @click.stop="operationHanld(item)">选择数量</button>
+							<button class="add-cart-btn" @click.stop="operationHanld(item)">数量</button>
 						</view>
 					</view>
 				</view>
@@ -42,12 +42,15 @@
 			<text class="error-text">您还没有购买过任何商品哟~</text>
 			<button class="submit-btn toIndexPage" @click="toIndexPage">去逛逛</button>
 		</view>
-		<view class="cart-icon" v-if="!isShowEmpty" @click="toCartPage">
-			<text v-if="cartQuantity > 0" class="uni-badge uni-badge-error uni-small uni-badge--small icon-num">
-				{{cartQuantity >= 100 ? '99+' : cartQuantity}}
-			</text>
-			<image src='../../../static/icon-cart-active@3x.png' mode="widthFix"></image>
-		</view>
+		<!-- 可拖动悬浮按钮 -->
+		<cm-drag v-if="!isShowEmpty"
+				 :cartNum="cartQuantity" 
+				 :isDock="true"
+				 :existTabBar="true" 
+				 @btnClick="btnClick" 
+				 @btnTouchstart="btnTouchstart" 
+				 @btnTouchend="btnTouchend">
+		</cm-drag>		
 		<!-- 透明模态层 -->
 		<modal-layer v-if='isModallayer'></modal-layer>
 	</view>
@@ -57,6 +60,7 @@
 	import listSkeleton from '@/components/cm-module/listTemplate/listSkeleton'
 	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{
@@ -64,7 +68,8 @@
 		components:{
 			listSkeleton,
 			modalLayer,
-			uniStars
+			uniStars,
+			cmDrag
 		},
 		props: {
 			emptyText: {
@@ -176,11 +181,6 @@
 				this.$api.navigateTo(`/pages/goods/product?id=${id}`);
 				this.isModallayer = false;
 			},
-			toCartPage() {
-				uni.switchTab({
-					url: '/pages/tabBar/cart/cart'
-				})
-			},
 			toIndexPage() {
 				uni.switchTab({
 					url: '/pages/tabBar/home/home' 
@@ -188,6 +188,15 @@
 			},
 			repurchModel(){
 				this.$util.modal('','此商品的价格有变化,原来的购买价已不适用','知道了','',false,() =>{})
+			},
+			btnClick() {
+				this.$api.navigateTo('/pages/goods/cart')
+			},
+			btnTouchstart() {
+				// console.log('btnTouchstart');
+			},
+			btnTouchend() {
+				// console.log('btnTouchend');
 			}
 		}
 	}
@@ -359,27 +368,4 @@
 			background:linear-gradient(135deg,rgba(242,143,49,1) 0%,rgba(225,86,22,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>

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

@@ -50,8 +50,7 @@
 			hideConfirm(){
 				this.$parent.isShareModal = false
 			},
-			//点击事件
-			btnConfirm(code){
+			btnConfirm(code){//点击事件
 				this.$emit('btnConfirm')
 			}
 		}

+ 181 - 0
components/cm-module/modelAlert/supplierShareAlert.vue

@@ -0,0 +1,181 @@
+<template name="alert">
+	<view class="alert spec" :class="specClass">
+		<!-- 运费弹窗说明 -->
+		<view class="freight-alert"  @click.stop="hideConfirm">
+			<view class="content clearfix">
+				<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>
+				<view class="text-btn">
+					<!-- #ifdef MP-WEIXIN -->
+					<button class="btn" open-type="share" @click="btnConfirm(shareCode)">去分享</button>
+					<!-- #endif -->
+					<view class="btn-none" @click.stop="hideConfirm(shareCode)">取消</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	const thorui = require("@/components/clipboard/clipboard.thorui.js")
+	import { queryOrderShareCode } from "@/api/order.js" 
+	export default{
+		name:'alert',
+		props:{
+			shopOrderID:{
+				type:Number
+			}
+		},
+		data() {
+			return{
+				shareCode:'',
+			}
+		},
+		created() {
+			this.getShareCode(this.shopOrderID)
+		},
+		onLoad(){
+			
+		},
+		methods:{
+			getShareCode(data){
+				this.ShopService.ShopOrderShareCode({shopOrderId:data}).then(response =>{
+					this.shareCode = response.data
+					this.$parent.shareCode = this.shareCode;
+				}).catch(error =>{
+					this.$parent.isShareModal = false;
+					this.$util.modal('提示',error.msg,'确定','',false,() =>{})
+				})
+			},
+			clipboard(data) {
+				thorui.getClipboardData(data, (res) => {
+					// #ifdef H5
+					if (res) {
+						this.$util.msg("复制成功",2000);
+					} else {
+						this.$util.msg("复制失败",2000);
+					}
+					// #endif
+				})
+			},
+			hideConfirm(){
+				this.$parent.isShareModal = false
+			},
+			btnConfirm(code){//点击事件
+				this.$emit('btnConfirm')
+			}
+		},
+		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: 666rpx;
+			position: absolute;
+			background: url(https://img.caimei365.com/group1/M00/03/95/Cmis2F76nVaAPs9JAAHGoKa8KvY492.png) no-repeat;
+			background-size: cover;
+			left: 0;
+			right: 0;
+			bottom: 0;
+			top: 0;
+			margin: auto;
+			padding:0 24rpx 20rpx 24rpx;
+			border-radius: 12rpx;
+			.text-content{
+				width: 100%;
+				height: auto;
+				margin-top: 210rpx;
+				.text-t{
+					font-size: $font-size-28;
+					color: $text-color;
+					text-align: center;
+					line-height: 44rpx;
+				}
+				.text-c{
+					font-size: $font-size-44;
+					color: #16E17C;
+					text-align: center;
+					line-height: 80rpx;
+					position: relative;
+					.clipboard{
+						width: 84rpx;
+						height: 36rpx;
+						background: #EFEFEF;
+						text-align: center;
+						font-size: $font-size-24;
+						color: #999999;
+						border-radius: 4rpx;
+						line-height: 36rpx;
+						display: inline-block;
+						position: absolute;
+						top: 29%;
+						right: 18%;
+					}
+				}
+				.text-h1{
+					line-height: 40rpx;
+					font-size: $font-size-28;
+					color: $text-color;
+					text-align: justify;
+				}
+			}
+			.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;
+				}
+			}
+		}
+	}
+	
+</style>

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

@@ -0,0 +1,156 @@
+<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>

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

@@ -19,6 +19,9 @@
 								<view class="view-num">单价:¥{{pros.price.toFixed(2)}}</view>
 								<view class="view-num">数量(赠品):{{pros.num}}({{pros.presentNum}})</view>
 							</view>
+							<view class="product-view" v-if="pros.returnedNum>0 || pros.actualCancelNum>0">
+								<view class="view-num">已退货/已取消:{{pros.returnedNum}}/{{pros.actualCancelNum}}</view>
+							</view>
 							<view class="product-view">
 								<view class="view-num">税率:{{pros.taxRate}}%</view>
 								<view class="view-num">折扣:{{pros.discount == null ? '0' : pros.discount}}%</view>
@@ -109,6 +112,10 @@
 					}
 				}
 				.title-text{
+					width: 630rpx;
+					overflow: hidden;
+					text-overflow:ellipsis;
+					white-space: nowrap;
 					float: left;
 					margin-left: 16rpx;
 					font-size: $font-size-28;

+ 37 - 3
components/cm-module/orderDetails/orderButton.vue

@@ -4,11 +4,11 @@
 		<view class="button-content">
 			<view class="" v-if="onlinePayFlag == 0">
 				<view class="btn btn-pay" v-if="btnState.isPay" @click.stop="btnConfirm('pay')">付款</view>
-			</view>		
+			</view>
 			<view class="btn btn-share" @click.stop="onShareCode">
 				<view class="tips" v-if="shareCode">分享码:{{shareCode}}</view>
 				分享订单
-			</view>	
+			</view>
 			<view class="btn btn-confirm" v-if="btnState.isConfirmation" @click.stop="btnConfirm('confirmation')">确认订单</view>
 			<view class="btn btn-cancel" v-if="btnState.isCancel" @click.stop="btnConfirm('cancel')">取消订单</view>
 			<view class="btn btn-delete" v-if="btnState.isDelete" @click.stop="btnConfirm('delete')">删除订单</view>
@@ -141,8 +141,42 @@
 				border-radius: 10rpx;
 				float: right;
 			}
+			.btn-color{
+				background: $btn-confirm;
+				margin: 22rpx 0 22rpx 22rpx;
+				.tips{
+					width: 160rpx;
+					height: 34rpx;
+					padding: 10rpx 10rpx;
+					background:linear-gradient(45deg,rgba(0,0,0,1) 0%,rgba(87,87,87,1) 100%);
+					box-shadow:0px 2px 4px 0px rgba(0,0,0,0.2);
+					border-radius: 8rpx;
+					position: absolute;
+					color: #FFFFFF;
+					line-height: 34rpx;
+					font-size: $font-size-24;
+					text-align: left;
+					right: 24rpx;
+					top: -45rpx;
+					&:before{
+						content: "";
+						width: 25rpx;
+						height: 25rpx;
+						background:linear-gradient(45deg,rgba(0,0,0,1) 0%,rgba(87,87,87,1) 100%);
+						position: absolute;
+						bottom: -8rpx;
+						right: 30rpx;
+						z-index: -1;
+						transform:rotate(45deg);
+					}
+				}
+			}
 			.btn-cancel{
-				background:linear-gradient(135deg,rgba(104,104,104,1) 0%,rgba(181,181,181,1) 100%);
+				background:#FFFFFF;
+				color: #999999;
+				float: left;
+				margin: 22rpx 0;
+				text-align: left;
 			}
 			.btn-delete{
 				background:linear-gradient(315deg,rgba(255,163,3,1) 0%,rgba(255,53,1,1) 100%);

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

@@ -3,8 +3,15 @@
 		 <!-- 订单信息 -->
 		 <view class="information-content">
 			<view class="information-view num">
-				<view class="view-num ord">订单编号:{{orderData.orderNo =='undefined' ? '' : orderData.orderNo}}</view>
-				<view class="view-type bold">{{typeText}}</view>
+				<view class="view-num">
+					<text class="bage-buss" v-if="orderData.orderSubmitType == 3 || orderData.orderSubmitType == 4">协销</text>
+					<text class="bage-auto" v-if="orderData.orderSubmitType == 0 || orderData.orderSubmitType == 1 ||orderData.orderSubmitType == 2">自主</text>
+					<text class="bage-text">订单编号:{{orderData.orderNo =='undefined' ? '' : orderData.orderNo}}</text>
+				</view>
+			</view>
+			<view class="information-view">
+				<view class="view-num time">下单时间:{{orderData.orderTime =='undefined' ? '' : orderData.orderTime}}</view>
+				<view class="view-type">{{typeText}}</view>
 			</view>
 			<view class="information-view">
 				<view class="view-num bold">
@@ -30,10 +37,6 @@
 				<view class="view-num">已支付:¥{{receiptAmount == null ? '0.00' : receiptAmount}}</view>
 				<view class="view-man bold">待付金额:<text class="red">¥{{pendingPayments =='undefined' ? '0.00' : pendingPayments}}</text></view>
 			</view>
-			
-			<view class="information-view">
-				<view class="view-num time">下单时间:{{orderData.orderTime =='undefined' ? '' : orderData.orderTime}}</view>
-			</view>
 		 </view>
 	</view>
 </template>
@@ -158,6 +161,41 @@
 					color: $text-color;
 					text-align: left;
 				}
+				.view-num{
+					.bage-buss{
+						display: block;
+						float: left;
+						width: 64rpx;
+						height: 30rpx;
+						background:linear-gradient(132deg,rgba(255,177,0,1) 0%,rgba(255,127,0,1) 100%);
+						border-radius: 6rpx;
+						line-height: 30rpx;
+						font-size: $font-size-24;
+						text-align: center;
+						color: #FFFFFF;
+						margin-top: 10rpx;
+					}
+					.bage-auto{
+						display: block;
+						float: left;
+						width: 64rpx;
+						height: 30rpx;
+						background:linear-gradient(135deg,rgba(0,216,255,1) 0%,rgba(22,139,225,1) 100%);
+						border-radius: 6rpx;
+						line-height: 30rpx;
+						font-size: $font-size-24;
+						text-align: center;
+						color: #FFFFFF;
+						margin-top: 10rpx;
+					}
+					.bage-text{
+						font-size: $font-size-28;
+						line-height: 40rpx;
+						text-align: left;
+						color: $color-system;
+						margin-left: 15rpx;
+					}
+				}
 				.view-num.ord{
 					color: $color-system;
 					text-align: left;
@@ -166,6 +204,7 @@
 				}
 				.view-num.time{
 					color: #999999;
+					flex: 6;
 				}
 				.bold{
 					font-weight: bold;
@@ -177,7 +216,7 @@
 					float: right;
 					text-align: right;
 					color: #FF2A2A;
-					flex: 2;
+					flex:4;
 				}
 				.clipboard{
 					width: 84rpx;

+ 11 - 3
components/cm-module/orderDetails/orderListButton.vue

@@ -5,7 +5,7 @@
 			<view class="" v-if="onlinePayFlag == 0">
 				<view class="btn btn-pay" v-if="btnState.isPay" @click.stop="btnConfirm('pay',orderID)">付款</view>
 			</view>
-			<view class="btn btn-share"  @click.stop="onShareCode(orderID)">分享订单</view>	
+			<view class="btn btn-share"  @click.stop="onShareCode(orderID)">分享订单</view>
 			<view class="btn btn-confirm" v-if="btnState.isConfirmation" @click.stop="btnConfirm('confirmation',orderID)">确认订单</view>
 			<view class="btn btn-cancel" v-if="btnState.isCancel" @click.stop="btnConfirm('cancel',orderID)">取消订单</view>
 			<view class="btn btn-delete" v-if="btnState.isDelete" @click.stop="btnConfirm('delete',orderID)">删除订单</view>
@@ -48,7 +48,7 @@
 			this.initData(this.status)
 		},
 		computed: {
-			
+
 		},
 		watch:{
 			status:{
@@ -142,8 +142,16 @@
 				border-radius: 10rpx;
 				float: right;
 			}
+			.btn-color{
+				background: $btn-confirm;
+				margin: 22rpx 0 22rpx 22rpx;
+			}
 			.btn-cancel{
-				background:linear-gradient(135deg,rgba(104,104,104,1) 0%,rgba(181,181,181,1) 100%);
+				background:#FFFFFF;
+				color: #999999;
+				float: left;
+				margin: 22rpx 0;
+				text-align: left;
 			}
 			.btn-delete{
 				background:linear-gradient(315deg,rgba(255,163,3,1) 0%,rgba(255,53,1,1) 100%);

+ 39 - 5
components/cm-module/orderDetails/sellerDetaileButton.vue

@@ -2,13 +2,13 @@
 	<view class="button-template" :style="{paddingBottom :isIphoneX ? '68rpx' : '0rpx'}">
 		<!-- 底部按钮 -->
 		<view class="button-content">
-			<view class="btn btn-share" @click.stop="onShareCode">
+			<view class="btn btn-cancel" v-if="btnState.isCancel"  @click.stop="btnConfirm('cancel')">取消订单</view>
+			<view class="btn btn-cancel" v-if="btnState.isDelete"  @click.stop="btnConfirm('delete')">删除订单</view>
+			<view class="btn btn-color" @click.stop="onShareCode">
 				<view class="tips" v-if="shareCode">分享码:{{shareCode}}</view>
 				分享订单
 			</view>	
-			<view class="btn btn-confirm" v-if="btnState.isConfirm" @click.stop="btnConfirm('confirm')">确认订单</view>
-			<view class="btn btn-cancel" v-if="btnState.isCancel"  @click.stop="btnConfirm('cancel')">取消订单</view>
-			<view class="btn btn-delete" v-if="btnState.isDelete"  @click.stop="btnConfirm('delete')">删除订单</view>
+			<view class="btn btn-color" v-if="btnState.isConfirm" @click.stop="btnConfirm('confirm')">确认订单</view>
 		</view>
 	</view>
 </template>
@@ -130,8 +130,42 @@
 				border-radius: 10rpx;
 				float: right;
 			}
+			.btn-color{
+				background: $btn-confirm;
+				margin: 22rpx 0 22rpx 22rpx;
+				.tips{
+					width: 160rpx;
+					height: 34rpx;
+					padding: 10rpx 10rpx;
+					background:linear-gradient(45deg,rgba(0,0,0,1) 0%,rgba(87,87,87,1) 100%);
+					box-shadow:0px 2px 4px 0px rgba(0,0,0,0.2);
+					border-radius: 8rpx;
+					position: absolute;
+					color: #FFFFFF;
+					line-height: 34rpx;
+					font-size: $font-size-24;
+					text-align: left;
+					right: 24rpx;
+					top: -45rpx;
+					&:before{
+						content: "";
+						width: 25rpx;
+						height: 25rpx;
+						background:linear-gradient(45deg,rgba(0,0,0,1) 0%,rgba(87,87,87,1) 100%);
+						position: absolute;
+						bottom: -8rpx;
+						right: 30rpx;
+						z-index: -1;
+						transform:rotate(45deg);
+					}
+				}
+			}
 			.btn-cancel{
-				background:linear-gradient(135deg,rgba(104,104,104,1) 0%,rgba(181,181,181,1) 100%);
+				background:#FFFFFF;
+				color: #999999;
+				float: left;
+				margin: 22rpx 0;
+				text-align: left;
 			}
 			.btn-delete{
 				background:linear-gradient(315deg,rgba(255,163,3,1) 0%,rgba(255,53,1,1) 100%);

+ 12 - 4
components/cm-module/orderDetails/sellerOrderButton.vue

@@ -2,10 +2,10 @@
 	<view class="button-template">
 		<!-- 底部按钮 -->
 		<view class="button-content">
-			<view class="btn btn-share"  @click.stop="onShareCode(orderID,userID)">分享订单</view>	
-			<view class="btn btn-confirm" v-if="btnState.isConfirm" @click.stop="btnConfirm('confirm',orderID)">确认订单</view>
 			<view class="btn btn-cancel" v-if="btnState.isCancel" @click.stop="btnConfirm('cancel',orderID)">取消订单</view>
-			<view class="btn btn-delete" v-if="btnState.isDelete" @click.stop="btnConfirm('delete',orderID)">删除订单</view>
+			<view class="btn btn-cancel" v-if="btnState.isDelete" @click.stop="btnConfirm('delete',orderID)">删除订单</view>
+			<view class="btn btn-color"  @click.stop="onShareCode(orderID,userID)">分享订单</view>	
+			<view class="btn btn-color" v-if="btnState.isConfirm" @click.stop="btnConfirm('confirm',orderID)">确认订单</view>
 		</view>
 	</view>
 </template>
@@ -133,8 +133,16 @@
 				border-radius: 10rpx;
 				float: right;
 			}
+			.btn-color{
+				background: $btn-confirm;
+				margin: 22rpx 0 22rpx 22rpx;
+			}
 			.btn-cancel{
-				background:linear-gradient(135deg,rgba(104,104,104,1) 0%,rgba(181,181,181,1) 100%);
+				background:#FFFFFF;
+				color: #999999;
+				float: left;
+				margin: 22rpx 0;
+				text-align: left;
 			}
 			.btn-delete{
 				background:linear-gradient(315deg,rgba(255,163,3,1) 0%,rgba(255,53,1,1) 100%);

+ 199 - 0
components/cm-module/orderDetails/supplierDetaileButton.vue

@@ -0,0 +1,199 @@
+<template name="button">
+	<view class="button-template" :style="{paddingBottom :isIphoneX ? '68rpx' : '0rpx'}">
+		<!-- 底部按钮 -->
+		<view class="btn btn-color" @click.stop="onShareCode">
+			<view class="tips" v-if="shareCode">分享码:{{shareCode}}</view>
+			分享订单
+		</view>	
+		<view class="btn btn-color" @click.stop="btnConfirm('record')">发货记录</view>
+		<view class="btn btn-color" v-if="btnState.isDeliver"  @click.stop="btnConfirm('deliver')">发货</view>
+	</view>
+</template>
+
+<script>
+	export default{
+		name:"button",
+		props:{
+			status:{
+				type:Number
+			},
+			shareCode:{
+				type:String,
+				default: ''
+			}
+		},
+		watch:{
+			status:{
+				handler:function(val){
+					this.initData(val)
+				},
+				deep:true//对象内部的属性监听,也叫深度监听
+			}
+		},
+		data() {
+			return{
+				btnState:this.initStatus(),
+				isIphoneX:this.$store.state.isIphoneX,
+				mapStateArr:[
+					{label:'isDeliver',val:[1,2],status: true},
+				]
+			}
+		},
+		created(){
+			this.initData(this.status)
+		},
+		computed: {
+
+		},
+		methods:{
+			initData(resVal) {
+				/**
+				 * @分享按钮统一显示
+				 * @按钮根据状态显示
+				 * @(1,2)显示[发货]按钮
+				 */
+				this.btnState = this.initStatus()
+				this.mapStateArr.forEach(el => {
+					el.val.forEach(value => {
+						if(resVal === value){
+							this.btnState[el.label] = el.status
+							//console.log(this.btnState[el.label]);
+						}
+					})
+				})
+			},
+			initStatus(){
+				let btnState= {
+						isQuery: false,
+						isDelete: false,
+						isCancel: false,
+						isConfirm: false,
+					}
+				return 	btnState
+			},
+			getShareCode(code){
+				this.shareCode = code
+			},
+			onShareCode(){
+				this.$parent.isShareModal = true
+				this.$emit('shareConfirm')
+			},
+			btnConfirm(type){
+				this.$emit('buttonConfirm',type)
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.button-template{
+		width: 702rpx;
+		padding:0 24rpx;
+		height: auto;
+		background-color: #FFF;
+		-webkit-box-shadow: 0px 3px 10px rgba(51, 51, 51, 0.5);
+		box-shadow: 0px 3px 10px rgba(51, 51, 51, 0.5);
+		padding-bottom: 24rpx;
+		z-index: 999;
+		.share-code{
+			width: 200rpx;
+			height:  64rpx;
+			line-height: 64rpx;
+			color: #2A45FF;
+			text-align: left;
+			position: absolute;
+			font-size: $font-size-28;
+			font-weight: bold;
+			left: 24rpx;
+			top: 24rpx;
+		}
+		.btn{
+			width: 160rpx;
+			height:  64rpx;
+			margin:22rpx;
+			line-height: 64rpx;
+			font-size:$font-size-26;
+			color: #FFFFFF;
+			text-align: center;
+			border-radius: 10rpx;
+			float: right;
+		}
+		.btn-color{
+			background: $btn-confirm;
+			margin: 22rpx 0 22rpx 22rpx;
+			.tips{
+				width: 160rpx;
+				height: 34rpx;
+				padding: 10rpx 10rpx;
+				background:linear-gradient(45deg,rgba(0,0,0,1) 0%,rgba(87,87,87,1) 100%);
+				box-shadow:0px 2px 4px 0px rgba(0,0,0,0.2);
+				border-radius: 8rpx;
+				position: absolute;
+				color: #FFFFFF;
+				line-height: 34rpx;
+				font-size: $font-size-24;
+				text-align: left;
+				right: 24rpx;
+				top: -45rpx;
+				&:before{
+					content: "";
+					width: 25rpx;
+					height: 25rpx;
+					background:linear-gradient(45deg,rgba(0,0,0,1) 0%,rgba(87,87,87,1) 100%);
+					position: absolute;
+					bottom: -8rpx;
+					right: 30rpx;
+					z-index: -1;
+					transform:rotate(45deg);
+				}
+			}
+		}
+		.btn-cancel{
+			background:#FFFFFF;
+			color: #999999;
+			float: left;
+			margin: 22rpx 0;
+			text-align: left;
+		}
+		.btn-delete{
+			background:linear-gradient(315deg,rgba(255,163,3,1) 0%,rgba(255,53,1,1) 100%);
+		}
+		.btn-query{
+			background:linear-gradient(135deg,rgba(255,212,129,1) 0%,rgba(198,129,0,1) 100%);
+		}
+		.btn-confirm{
+			background:linear-gradient(315deg,rgba(231,0,0,1) 0%,rgba(255,104,1,1) 100%);
+		}
+		.btn-share{
+			background:linear-gradient(315deg,rgba(0,212,150,1) 0%,rgba(126,243,174,1) 100%);
+			margin-right: 0;
+			position: relative;
+			.tips{
+				width: 160rpx;
+				height: 34rpx;
+				padding: 10rpx 10rpx;
+				background:linear-gradient(45deg,rgba(0,0,0,1) 0%,rgba(87,87,87,1) 100%);
+				box-shadow:0px 2px 4px 0px rgba(0,0,0,0.2);
+				border-radius: 8rpx;
+				position: absolute;
+				color: #FFFFFF;
+				line-height: 34rpx;
+				font-size: $font-size-24;
+				text-align: left;
+				right: 0;
+				top: -65rpx;
+				&:before{
+					content: "";
+					width: 25rpx;
+					height: 25rpx;
+					background:linear-gradient(45deg,rgba(0,0,0,1) 0%,rgba(87,87,87,1) 100%);
+					position: absolute;
+					bottom: -8rpx;
+					right: 30rpx;
+					z-index: -1;
+					transform:rotate(45deg);
+				}
+			}
+		}
+	}
+</style>

+ 127 - 0
components/cm-module/orderDetails/supplierRecorgButton.vue

@@ -0,0 +1,127 @@
+<template name="button">
+	<view class="button-template">
+		<!-- 底部按钮 -->
+		<view class="button-content">
+			<view class="btn btn-color" v-if="hanldData.mailer == '1'" @click.stop="btnConfirm('cancel',hanldData)">撤销发货</view>
+			<view class="btn btn-color" @click.stop="btnConfirm('add',hanldData)">添加物流</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default{
+		name:"button",
+		props:{
+			hanldData: {
+				type:Object
+			}
+		},
+		data() {
+			return{
+
+			}
+		},
+		created(){
+			
+		},
+		computed: {
+			
+		},
+		methods:{
+			btnConfirm(type,hanldData){
+				let data = { hanldType:type,hanldData:hanldData }
+				this.$emit('buttonConfirm',data)
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.button-template{
+		width: 100%;
+		height: auto;
+		float: left;
+		background: #FFFFFF;
+		.button-content{
+			width: 702rpx;
+			padding: 0 24rpx;
+			height: auto;
+			float: left;
+			position: relative;
+			.share-code{
+				width: 200rpx;
+				height:  64rpx;
+				line-height: 64rpx;
+				color: #2A45FF;
+				text-align: left;
+				position: absolute;
+				font-size: $font-size-28;
+				font-weight: bold;
+				left: 24rpx;
+				top: 24rpx;
+			}
+			.btn{
+				width: 160rpx;
+				height:  64rpx;
+				margin:22rpx;
+				line-height: 64rpx;
+				font-size:$font-size-26;
+				color: #FFFFFF;
+				text-align: center;
+				border-radius: 10rpx;
+				float: right;
+			}
+			.btn-color{
+				background: $btn-confirm;
+				margin: 22rpx 0 22rpx 22rpx;
+			}
+			.btn-cancel{
+				background:#FFFFFF;
+				color: #999999;
+				float: left;
+				margin: 22rpx 0;
+				text-align: left;
+			}
+			.btn-delete{
+				background:linear-gradient(315deg,rgba(255,163,3,1) 0%,rgba(255,53,1,1) 100%);
+			}
+			.btn-query{
+				background:linear-gradient(135deg,rgba(255,212,129,1) 0%,rgba(198,129,0,1) 100%);
+			}
+			.btn-confirm{
+				background:linear-gradient(315deg,rgba(231,0,0,1) 0%,rgba(255,104,1,1) 100%);
+			}
+			.btn-share{
+				background:linear-gradient(315deg,rgba(0,212,150,1) 0%,rgba(126,243,174,1) 100%);
+				margin-right: 0;
+				position: relative;
+				.tips{
+					width: 160rpx;
+					height: 34rpx;
+					padding: 10rpx 10rpx;
+					background:linear-gradient(45deg,rgba(0,0,0,1) 0%,rgba(87,87,87,1) 100%);
+					box-shadow:0px 2px 4px 0px rgba(0,0,0,0.2);
+					border-radius: 8rpx;
+					position: absolute;
+					color: #FFFFFF;
+					line-height: 34rpx;
+					font-size: $font-size-24;
+					text-align: left;
+					right: 0;
+					top: -65rpx;
+					&:before{
+						content: "";
+						width: 25rpx;
+						height: 25rpx;
+						background:linear-gradient(45deg,rgba(0,0,0,1) 0%,rgba(87,87,87,1) 100%);
+						position: absolute;
+						bottom: -8rpx;
+						right: 30rpx;
+						z-index: -1;
+						transform:rotate(45deg);
+					}
+				}
+			}
+		}
+	}
+</style>

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

@@ -157,7 +157,7 @@
 		width: 702rpx;
 		padding: 24rpx 24rpx 10rpx 24rpx;
 		height: 236rpx;
-		border-radius: 30rpx 30rpx 0 0;
+		border-radius: 20rpx 20rpx 0 0;
 		background-color: #fff;
 		display: flex;
 		flex-wrap: wrap;

+ 2 - 1
components/cm-module/productDetails/cm-attributes.vue

@@ -16,8 +16,9 @@
 				<view class="info-viewL tui-skeleton-fillet">品牌:<text>{{product.brandName == null? '其他' : product.brandName}}</text></view>
 				<view class="info-viewR tui-skeleton-fillet">包装规格:<text>{{product.unit}}</text></view>		
 			</view>
-			<view class="info-viewT" v-if="product.productCode!=''&&product.productCode!=null">
+			<view class="info-viewT" :class="goodsData.isNoneDisabled ? 'none' : ''" v-if="product.productCode!=''&&product.productCode!=null">
 				<view class="info-viewL tui-skeleton-fillet">商品编码:<text>{{product.productCode}}</text></view>
+				<view class="info-viewR tui-skeleton-fillet">库存:<text>{{product.stock}}</text></view>
 			</view>
 		</view>
 		<view class="wrap-seve" :class="goodsData.isNoneDisabled ? 'none' : ''">

+ 103 - 0
components/cm-module/productDetails/cm-parameter.vue

@@ -0,0 +1,103 @@
+<template name="cm-parameter">
+	<!-- 相关参数 -->
+	<view class="cm-parameter">
+		<view class="cm-parameter-main clearfix">
+			<view class="item-tabody clearfix" v-for="(item, index) in product.parametersList" :key="index" >
+				<view class="item-td">{{item.paramsName}}</view>
+				<view class="item-tr">{{item.paramsContent}}</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default{
+		name:'cm-parameter',
+		props:{
+			product:{
+				type:Object,
+			}
+		},
+		data() {
+			return{
+				data:[]
+			}
+		},
+		created() {
+			
+		},
+		methods:{
+			
+		},
+		
+	}
+</script>
+
+<style lang="scss">
+	.cm-parameter{
+		width: 702rpx;
+		height: auto;
+		background: #FFF;
+		margin: 0 auto;
+		padding: 24rpx 0;
+		.cm-parameter-main{
+			display: flex;
+			flex: 1;
+			flex-direction: column;
+			background-color: #FFFFFF;
+			border: 1px solid #EFEFEF;
+			border-radius: 4rpx;
+			.item-tabody{
+				width: 100%;
+				height: auto;
+				border-bottom: 1px solid #EFEFEF;
+				font-size: $font-size-24;
+				display: flex;
+				flex-wrap: wrap;
+				.item-td{
+					width: 238rpx;
+					float: left;
+					border-right: 1px solid #EFEFEF;
+					color: #999999;
+					padding:20rpx;
+					display: flex;
+					flex: 3;
+					flex-direction: column;
+				}
+				.item-tr{
+					width: 462rpx;
+					float: left;
+					color: $text-color;
+					padding:20rpx;
+					display: flex;
+					flex: 7;
+					flex-direction: column;
+				}
+				&:last-child{
+					border-bottom: none;
+				}
+			}
+		}
+	}
+</style>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+ 2 - 20
components/cm-module/productDetails/cm-price.vue

@@ -15,10 +15,6 @@
 					<view class="p-minBuy">起订量:<text class="min-text">{{minBuyNumber}}</text></view>
 				</view>
 				<view class="wrap-ladder" v-else>
-					<view class="ladder-text">
-						<text class="ladder-h1">说明:</text>
-						<text class="ladder-p">本商品有以下优惠购物方案</text>
-					</view>
 					<view class="ladder-main tui-skeleton-fillet">
 						<view class="ladder-left">
 							<view class="ladder-b">起订量:</view>
@@ -39,10 +35,8 @@
 				<text>未公开价格</text>
 			</view>
 			<view class="wrap-main-pricenone" v-if="product.price1TextFlag == '2'">
-				<text>价格仅会员可见</text>
-			</view>
-			<view class="wrap-main-none" v-if="product.price1TextFlag == '2'" @click.stop="goUpgradeApply">
-				<text>去升级会员机构 >></text>
+				<text class="wrap-main-text">价格仅会员可见</text>
+				<text class="wrap-main-none" @click.stop="goUpgradeApply">去升级会员查看价格<text class="iconfont icon-xiayibu" style="font-size: 22rpx;margin: 0 6rpx;"></text></text>
 			</view>
 			<view class="wrap-main-price" v-if="product.price1TextFlag == '0'">
 				<view class="p-main" v-if="product.ladderPriceFlag == '0' || product.actStatus == 1">
@@ -57,10 +51,6 @@
 					<view class="p-minBuy">起订量:<text class="min-text">{{minBuyNumber}}</text></view>
 				</view>
 				<view class="wrap-ladder" v-else>
-					<view class="ladder-text">
-						<text class="ladder-h1">说明:</text>
-						<text class="ladder-p">本商品有以下优惠购物方案</text>
-					</view>
 					<view class="ladder-main tui-skeleton-fillet">
 						<view class="ladder-left">
 							<view class="ladder-b">起订量:</view>
@@ -93,10 +83,6 @@
 					<view class="p-minBuy">起订量:<text class="min-text">{{minBuyNumber}}</text></view>
 				</view>
 				<view class="wrap-ladder" v-else>
-					<view class="ladder-text">
-						<text class="ladder-h1">说明:</text>
-						<text class="ladder-p">本商品有以下优惠购物方案</text>
-					</view>
 					<view class="ladder-main tui-skeleton-fillet">
 						<view class="ladder-left">
 							<view class="ladder-b">起订量:</view>
@@ -122,7 +108,6 @@
 		props:{
 			product:{
 				type:Object,
-				default: {}
 			},
 			userIdentity: {
 				type: Number,
@@ -130,15 +115,12 @@
 			},
 			ladderPriceList:{
 				type: Array,
-				default:[]
 			},
 			retailPrice:{
 				type:String,
-				default:0.00
 			},
 			smallMoney:{
 				type:String,
-				default:0.00
 			},
 			minBuyNumber:{
 				type: Number,

+ 84 - 0
components/cm-module/productDetails/cm-service.vue

@@ -0,0 +1,84 @@
+<template name="cm-service">
+	<!-- 服务项目 -->
+	<view class="cm-service">
+		<view class="cm-service-text" v-show="product.orderInfo">
+			<view class="cm-service-title">订购方案</view>
+			<view class="cm-service-p" v-html="product.orderInfo"></view>
+		</view>
+		<view class="cm-service-text" v-show="product.serviceInfo">
+			<view class="cm-service-title">服务详情</view>
+			<view class="cm-service-p" v-html="product.serviceInfo"></view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default{
+		name:'cm-service',
+		props:{
+			product:{
+				type:Object,
+			}
+		},
+		data() {
+			return{
+				
+			}
+		},
+		created() {
+			
+		},
+		methods:{
+		},
+		
+	}
+</script>
+
+<style lang="scss">	
+	.cm-service{
+		width: 702rpx;
+		height: auto;
+		background: #FFF;
+		margin: 0 auto;
+		padding: 24rpx 0;
+		.cm-service-text{
+			width: 100%;
+			height: auto;
+			margin-bottom: 24rpx;
+			.cm-service-title{
+				font-size: $font-size-28;
+				color: #333;
+				text-align: left;
+				line-height: 44rpx;
+				margin-bottom: 8rpx;
+			}
+			.cm-service-p{
+				font-size: $font-size-28;
+				color: #999;
+				text-align: justify;
+				line-height: 44rpx;
+			}
+		}
+	}
+</style>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+ 93 - 92
components/cm-module/productDetails/recommend.vue

@@ -3,16 +3,21 @@
 	<view class="recommend clearfix">
 		<view class="recommend-empty" v-if="isEmpty">暂无相关推荐商品</view>
 		<view class="recommend-list" v-else>
-			<scroll-view scroll-y="true" :style="{'height':scrollHeight+'px'}" @scrolltolower="scrolltolower">
-				<view class="row-list" v-for="(item, index) in recommendList" :key="index" @click.stop="navToDetailPage(item.productID)">
-					<view class="list-image"><image :src="item.mainImage" mode=""></image></view>
-					<view class="list-name">{{item.name}}</view>
-				</view>
-				<!--加载loadding-->
-				<tui-loadmore :visible="loadding" :index="3" type="black"></tui-loadmore>
-				<tui-nomore :visible="!pullUpOn" bgcolor="#FFFFFF" :text='nomoreText'></tui-nomore>
-				<!--加载loadding-->
-			</scroll-view>		
+			<swiper class="tui-banner-swiper" :autoplay="false" :interval="5000" :duration="500" :circular="true" @change="swiperChange">
+				<swiper-item v-for="(item,index) in recommendList" :key="index">
+					<view class="row-list" v-for="(pros, idx) in item" :key="idx" @click.stop="navToDetailPage(pros.productID)">
+						<view class="list-image"><image :src="pros.mainImage" mode=""></image></view>
+						<view class="list-name">{{pros.name}}</view>
+					</view>
+				</swiper-item>
+			</swiper>
+			<view class="swiper__recommenddots-box" v-if="recommendList.length > 1">
+				<view v-for="(item,idx) in recommendList" 
+					  :key="idx" 
+					  :class="[idx===current?'swiper__dots-long':'none']" 
+					  :data-index="current" class="swiper__dots-item">
+				</view>	  
+			</view>
 		</view>
 	</view>
 </template>
@@ -38,44 +43,27 @@
 		},
 		data() {
 			return{
+				current:0,
 				recommendList:[],
 				isEmpty:false,
-				pageNum:1,
-				pageSize:10,
-				hasNextPage:false,
-				loadding: false,
-				pullUpOn: true,
-				pullFlag: true,
-				nomoreText: '上拉显示更多',
+				pageSize:4,
 				productID:'',
-				scrollHeight: '',
 			}
 		},
 		created() {
-			// console.log(this.queryProductid)
 			this.productID = this.queryProductid
 			this.infoRecommend(this.queryProductid)
-			this.setScrollHeight();		
 		},
 		methods:{
 			infoRecommend(id){
-				queryRelevant({productID:id,pageNum:this.pageNum,pageSize:this.pageSize}).then(response =>{
+				queryRelevant({productID:id}).then(response =>{
 					// console.log(response)
-					let responseData = response.data
-					if(responseData.results&&responseData.results.length > 0){
+					if( response.data && response.data.length > 0){
 						this.isEmpty = false
-						this.hasNextPage = responseData.hasNextPage
-						this.recommendList =responseData.results
-						this.pullFlag = false;
-						setTimeout(()=>{this.pullFlag = true;},500)
-						if(this.hasNextPage){
-							this.pullUpOn = false
-							this.nomoreText = '上拉显示更多'
-						}else{
-							this.pullUpOn = false
-							this.loadding = false
-							this.nomoreText = '已至底部'
+						for (var i = 0, j = response.data.length; i < j; i += this.pageSize) {
+							this.recommendList.push(response.data.slice(i, i + this.pageSize));
 						}
+						console.log(this.recommendList)
 					}else{
 						this.isEmpty = true
 					}
@@ -83,39 +71,10 @@
 					this.$util.msg(error.msg,2000)
 				})
 			},
-			getOnReachBottomData(){
-				this.pageNum+=1
-				queryRelevant({productID:this.productID,pageNum:this.pageNum,pageSize:this.pageSize}).then(response =>{
-					let responseData = response.data
-					if(responseData.results&&responseData.results.length > 0){
-						this.hasNextPage = responseData.hasNextPage
-						this.recommendList = this.recommendList.concat(responseData.results) 
-						this.pullFlag = false;// 防上拉暴滑
-						setTimeout(()=>{this.pullFlag = true;},500)
-						if(this.hasNextPage){
-							this.pullUpOn = false
-							this.nomoreText = '上拉显示更多'
-						}else{
-							this.pullUpOn = false
-							this.loadding = false
-							this.nomoreText = '已至底部'
-						}
-					}
-				}).catch(error =>{
-					this.$util.msg(error.msg,2000)
-				})
-			},
-			scrolltolower() {
-				if(this.hasNextPage){
-					this.loadding = true
-					this.pullUpOn = true
-					this.getOnReachBottomData(this.currentTab);
-				}	
-			},
-			setScrollHeight() {
-				const {windowHeight, pixelRatio} = wx.getSystemInfoSync();
-				this.windowHeight = windowHeight - 1;
-				this.scrollHeight = windowHeight - 1;
+			//轮播图切换修改背景色
+			swiperChange(e) {
+				const index = e.detail.current;
+				this.current = index;
 			},
 			navToDetailPage(id) {//跳转商品详情页
 				this.$api.navigateTo(`/pages/goods/product?id=${id}`)
@@ -138,38 +97,80 @@
 		text-align: center;
 	}
 	.recommend-list{
-		width: 702rpx;
+		width: 100%;
 		height: auto;
-		padding: 24rpx;
-		.row-list{
-			width: 340rpx;
-			height: auto;
-			float: left;
-			margin-right: 20rpx;
-			margin-bottom: 30rpx;
-			&:nth-child(2n){
-				margin-right: 0;
-			}
-			.list-image{
-				width: 100%;
-				height: 340rpx;
-				border-radius: 14rpx;
-				image{
+		position: relative;
+		padding-bottom: 20rpx;
+		.tui-banner-swiper {
+			width: 702rpx;
+			margin: 0 auto;
+			background: #F7F7F7;
+			padding: 20rpx 24rpx;
+			height: 900rpx;
+			overflow: hidden;
+			transform: translateY(0);
+			.row-list{
+				width: 340rpx;
+				height: auto;
+				float: left;
+				margin-right: 20rpx;
+				margin-bottom: 20rpx;
+				border-radius: 20rpx;
+				background: #FFFFFF;
+				&:nth-child(2n){
+					margin-right: 0;
+				}
+				.list-image{
 					width: 100%;
 					height: 340rpx;
-					border-radius: 14rpx;
+					border-radius: 20rpx 20rpx 0 0;
+					image{
+						width: 100%;
+						height: 340rpx;
+						border-radius: 20rpx 20rpx 0 0;
+					}
+				}	
+				.list-name{
+					font-size: $font-size-28;
+					color: $text-color;
+					line-height:88rpx;
+					padding: 0 10rpx;
+					overflow: hidden;
+					white-space: nowrap;
+					text-overflow: ellipsis;
 				}
-			}	
-			.list-name{
-				font-size: $font-size-28;
-				color: $text-color;
-				line-height: 44rpx;
-				overflow: hidden;
-				white-space: nowrap;
-				text-overflow: ellipsis;
 			}
 		}
 	}
+	.swiper__recommenddots-box{
+		position: absolute;
+		bottom: -20rpx;
+		left: 0;
+		right: 0;
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		flex: 1;
+		flex-direction: row;
+		justify-content: center;
+		align-items: center;
+		height: 60rpx;
+		background: #FFFFFF;
+		.swiper__dots-item{
+			width: 8rpx;
+			height: 8rpx;
+			border-radius: 100%;
+			margin-left: 6px;
+			background-color:rgba(0,0,0,.3);
+		}
+		.swiper__dots-long{
+			width: 32rpx;
+			height: 8rpx;
+			border-radius: 4rpx;
+			background-color: #000;
+			transition: all 0.4s;
+		}
+	}
 }
 </style>
 

+ 80 - 43
components/cm-module/productDetails/supplierDetails.vue

@@ -11,15 +11,21 @@
 		</view>
 		<view class="sup-msg massage-t">
 			<view class="sup-h1">
-				<text class="line">基本信息</text>
+				<text class="line">公司基本信息</text>
 			</view>
 			<view class="sup-title">
 				<text class="tit-l">公司名称:</text>
 				<text >{{shop.name}}</text>
 			</view>
+			<view class="sup-stars">
+				<text class="tit-l">满意度:</text>
+				<view class="p-stars">
+					<uni-stars :stars="6" :iconClass="iconClass" :iconColor="iconColor" :fontSize="44" :widthInfo="180"></uni-stars>
+				</view>
+			</view>
 			<view class="sup-conte">
 				<view class="conte-l">
-					<text class="tit-l">经营品项:</text>
+					<text class="tit-l">经营范围:</text>
 				</view>
 				<view class="conte-r" v-if="shop.businessScopeArray.length>0">
 					<text class="age" v-for="(item,idx) in shop.businessScopeArray" :key="idx">{{item}}</text>
@@ -39,7 +45,7 @@
 		</view>
 		<view class="sup-msg massage-t">
 			<view class="sup-h1">
-				<text class="line">主打系列产品介绍</text>
+				<text class="line">主打系列产品说明</text>
 			</view>
 			<view class="sup-p" :class="[shop.productDesc == null ? 'center' : '']">
 				{{shop.productDesc == null ? '暂无内容' : shop.productDesc}}
@@ -50,7 +56,7 @@
 				<text class="line">营业执照</text>
 			</view>
 			<view class="sup-img">
-				<image :src="shop.businessLicenseImage" mode=""></image>
+				<image :src="shop.businessLicenseImage" mode="aspectFill" @click="previewImg(shop.businessLicenseImage)"></image>
 			</view>
 		</view>
 		<view class="sup-msg massage-t" v-if="shop.medicalPracticeLicenseImg1!=null">
@@ -58,21 +64,34 @@
 				<text class="line">公司资质</text>
 			</view>
 			<view class="sup-imgList clearfix">
-				<view class="img"><image :src="shop.medicalPracticeLicenseImg1" mode=""></image></view>
-				<view class="img"><image :src="shop.medicalPracticeLicenseImg2" mode=""></image></view>
-				<view class="img"><image :src="shop.medicalPracticeLicenseImg3" mode=""></image></view>
+				<view class="img"><image :src="shop.medicalPracticeLicenseImg1" mode="" @click="previewImg(shop.medicalPracticeLicenseImg1)"></image></view>
+				<view class="img"><image :src="shop.medicalPracticeLicenseImg2" mode="" @click="previewImg(shop.medicalPracticeLicenseImg2)"></image></view>
+				<view class="img"><image :src="shop.medicalPracticeLicenseImg3" mode="" @click="previewImg(shop.medicalPracticeLicenseImg3)"></image></view>
+			</view>
+		</view>
+		<view class="sup-msg massage-t" v-if="shop.authorizationCertificateImage!=null">
+			<view class="sup-h1">
+				<text class="line">授权牌照</text>
+			</view>
+			<view class="sup-img">
+				<image :src="shop.authorizationCertificateImage" mode="aspectFill" @click="previewImg(shop.authorizationCertificateImage)"></image>
 			</view>
 		</view>
 	</view>
 </template>
 
 <script>
+	import uniStars from '@/components/uni-stars/uni-stars.vue'
 	export default{
 		name:'supplier',
+		components:{
+			uniStars
+		},
 		props:['shop'],
 		data() {
 			return{
-				
+				iconClass:'icon-xingxing',
+				iconColor:'#FF9100'
 			}
 		},
 		created() {
@@ -82,7 +101,14 @@
 
 		},
 		methods:{
-			
+			previewImg(url){
+				let mentuzArray = []
+				mentuzArray.push(url)
+				uni.previewImage({
+					urls: mentuzArray,
+					current: 0
+				});
+			}
 		},
 		onShow(){
 	
@@ -92,38 +118,30 @@
 
 <style lang="scss">	
 .supplier{
-	background: #F7F7F7;
+	background: #FFFFFF;
 	width: 100%;
 	.sup-msg{
 		width: 100%;
 		padding: 24rpx 0;				
 		.sup-h1{
-			height: 42rpx;
-			line-height: 42rpx;
+			height: 80rpx;
+			line-height: 80rpx;
 			font-size: $font-size-30;
 			color: $text-color;
-			text-align: center;
-			font-weight: bold;
+			text-align: left;
+			border-bottom: 1px solid #EFEFEF;
 			.line{
 				position: relative;
+				padding-left: 15rpx;
 				&:after{
 					content: '';
-					width: 96rpx;
-					height: 2rpx;
-					background: #EAEAEA;
+					width: 6rpx;
+					height: 28rpx;
+					background: #FFA347;
 					position: absolute;
-					left: -130rpx;
-					top: 50%;
+					left: 0;
+					top: 6rpx;
 				}						
-				&:before{
-					content: '';
-					width: 96rpx;
-					height: 2rpx;
-					background: #EAEAEA;
-					position: absolute;
-					right: -130rpx;
-					top: 50%;
-				}
 			}
 		}
 	}
@@ -132,7 +150,6 @@
 		width: 702rpx;
 		padding: 28rpx 24rpx 24rpx 24rpx;
 		display: flex;
-		margin-bottom: 24rpx;
 		background: #FFFFFF;
 		.header-img{
 			width: 216rpx;
@@ -144,10 +161,11 @@
 		}
 		.header-txt{
 			width:460rpx;
+			display: flex;
+			align-items: center;
 			text{
-				display: inline-block;
-				padding-top: 82rpx;
-				height: 80rpx;
+				display: flex;
+				flex: 1;
 				margin-left: 26rpx;
 				line-height: 40rpx;
 				-o-text-overflow: ellipsis;
@@ -166,9 +184,8 @@
 	}
 	.massage-t{
 		width: 702rpx;
-		padding:24rpx;
+		padding:0 24rpx;
 		height: auto;
-		margin-bottom: 24rpx;
 		background: #FFFFFF;
 		.sup-title{
 			width: 100%;
@@ -181,17 +198,35 @@
 			color: $text-color;
 			.tit-l{
 				width: 142rpx;
-				margin-right:20rpx;
 				display: inline-block;
 			}
 		}
+		.sup-stars{
+			width: 100%;
+			height: 40rpx;
+			margin-top: 24rpx;
+			text-align: left;
+			display: inline-block;						
+			line-height: 40rpx;
+			font-size: $font-size-28;
+			color: $text-color;
+			.tit-l{
+				width: 114rpx;
+				display: inline-block;
+				text-align: right;
+				float: left;
+			}
+			.p-stars{
+				float: left;
+				margin-left: 22rpx;
+			}
+		}
 		.sup-conte{
 			width: 100%;
 			margin-top: 24rpx;
 			display: flex;
 			.conte-l{
 				width: 142rpx;
-				margin-right:20rpx;
 				.tit-l{
 					text-align: left;
 					display: inline-block;						
@@ -205,13 +240,13 @@
 				.age{
 					display: inline-block;
 					padding: 0 20rpx;
-					background: #F8C499;
-					height: 40rpx;
-					line-height: 40rpx;
+					background: #FFF6E6;
+					height: 42rpx;
+					line-height: 42rpx;
 					text-align: center;
 					font-size: $font-size-24;
-					color: $text-color;
-					border-radius: 20rpx;
+					color: #666666;
+					border-radius: 6rpx;
 					margin-right: 24rpx;
 					margin-bottom: 24rpx;
 				}
@@ -226,8 +261,8 @@
 			padding: 24rpx 0;
 			line-height: 40rpx;
 			text-align: left;
-			font-size: $font-size-24;
-			color: $text-color;
+			font-size: $font-size-28;
+			color: #666666;
 			text-indent: 20rpx;
 			&.center{
 				text-align: center;
@@ -240,6 +275,7 @@
 			image{
 				width: 100%;
 				height: 100%;
+				display: block;
 			}
 		}
 		.sup-imgList{
@@ -258,6 +294,7 @@
 				image{
 					width: 100%;
 					height: 100%;
+					display: block;
 				}
 			}
 		}

+ 0 - 423
components/seller/user.vue

@@ -1,423 +0,0 @@
-<template>
-	<view class="container user clearfix">
-		<tui-skeleton v-if="skeletonShow" backgroundColor="#fafafa" borderRadius="10rpx" :isLoading	="true" :loadingType="5"></tui-skeleton>
-		<view class="user-section tui-skeleton">
-			<view class="u-header tui-skeleton-fillet">
-				<image src="https://img.caimei365.com/group1/M00/03/94/Cmis216Sk_SAPDwvAAcTspdl8h0610.png" mode=""></image>
-				<view class="u-header-main">
-					<view class="user-item">
-						<view class="logo-m">
-							<image :src="headpic ? headpic:'../../static/temp/icon-seller@3x.png'" mode=""></image>
-							<text class="txt tui-skeleton-fillet">协销员工</text>
-						</view>
-					</view>
-					<view class="user-item tui-skeleton-fillet">
-						<text class="u-h1">{{name}}</text>
-					</view>
-				</view>
-			</view>
-			<!-- 订单 -->
-			<view class="user-order">
-				<view class="tab-title tui-skeleton-fillet" @click="navigator('/seller/pages/order/order-list?listType=0')">
-					<text class="cell-tit tui-skeleton-fillet">我的订单</text>
-					<text class="cell-more tui-skeleton-fillet">查看全部</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-icon tui-skeleton-fillet">
-							<image src="../../static/temp/order1@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}}
-							</text>
-						</view>
-						<text class="order-t tui-skeleton-fillet">待确认</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-icon tui-skeleton-fillet">
-							<image src="../../static/temp/order2@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}}
-							</text>
-						</view>
-						<text class="order-t tui-skeleton-fillet">待付款</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-icon tui-skeleton-fillet">
-							<image src="../../static/temp/order3@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}}
-							</text>
-						</view>
-						<text class="order-t tui-skeleton-fillet">待发货</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-icon tui-skeleton-fillet">
-							<image src="../../static/temp/order4@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}}
-							</text>
-						</view>
-						<text class="order-t tui-skeleton-fillet">已发货</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-icon tui-skeleton-fillet">
-							<image src="../../static/temp/order5@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}}
-							</text>
-						</view>
-						<text class="order-t tui-skeleton-fillet">退货/款</text>
-					</view>
-				</view>
-			</view>
-			<!-- 底部跳转 -->
-			<view class="foot-list">
-				<view class="list-cell-item">
-					<view class="list-cell tui-skeleton-fillet"  v-for="(item, index) in firstList" :key="index" @click="navigator(item.path)" hover-class="cell-hover" :hover-stay-time="50">
-						<text class="cell-tit">{{item.name}}</text>
-						<text class="cell-more iconfont icon-xiayibu"></text>
-					</view>
-				</view>
-			</view>
-		</view>	
-	</view>
-</template>
-<script>
-	import uniBadge from '@/components/uni-badge/uni-badge.vue'
-	import { mapState,mapMutations } from 'vuex'
-	import authorize from '@/common/config/authorize.js'
-	import { userInfoLogin } from "@/api/use.js"
-	import { getSellerHome } from "@/api/seller.js"
-	
-	export default{
-		components: {
-			uniBadge,
-		},
-		data() {
-			return{	
-				name:'',
-				headpic:'',
-				userMoney:0.00,
-				userId:'',
-				skeletonShow:true,
-				beforeConfirmCount:0,//待确认角标
-				beforePayCount:0, 	//待付款角标
-				beforeShipCount:0, //待发货角标
-				shippedCount:0,   //已发货角标
-				refundsCount:'', //退货/款角标
-				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'}
-				],
-			}
-		},
-		created() {
-			this.initData()
-		},
-		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()
-							console.log('222222222')
-							uni.removeStorageSync('sessionid')
-							uni.setStorageSync('sessionid','JSESSIONID='+response.data)
-							this.$store.commit('updateStatus',response.data)
-							this.$api.navigateTo('/seller/pages/login/login')
-						})
-					})
-				})
-			},
-			getUserSellerHome(){
-				this.$api.getStorage().then((resolve) =>{
-					this.userId = resolve.userID
-					getSellerHome({userId:this.userId}).then(response =>{
-						let sellerData = response.data
-						this.name = sellerData.seller.linkMan1?sellerData.seller.linkMan1:'' 	//协销名称
-						this.headpic = sellerData.seller.logo //会所头像
-						this.beforeConfirmCount = this.showBadge(sellerData.beforeConfirmCount)//待付款
-						this.beforePayCount = this.showBadge(sellerData.beforePayCount)//待付款
-						this.beforeShipCount = this.showBadge(sellerData.beforeShipCount)//待发货		
-						this.shippedCount = this.showBadge(sellerData.shippedCount)//已发货	
-						this.refundsCount = this.showBadge(sellerData.refundsCount)//退货/款	
-						this.skeletonShow = false;
-					}).catch(error =>{
-						this.$util.msg(error.msg,2000)
-					})
-				})	
-			},
-			navigator(url){
-				this.$api.navigateTo(url)
-			},			
-			showBadge(n){
-				let num ='';
-				if(n>100){num = 99}else{num = n;}
-				return num;
-			},
-			onPullDownRefresh() {//下拉刷新
-				this.initData()
-				uni.stopPullDownRefresh()
-			}
-		}
-	}
-</script>
-
-<style lang="scss">
-	@import "@/uni.scss";
-	page{
-		background-color: #F7F7F7;
-	}
-	.user{
-		width: 100%;
-		height: auto;
-		position:relative;
-		background: rgba(247, 247, 247, 1);
-	}	
-	.user-section.none{
-		display: none;
-	}
-	.user-section.show{
-		display: block;
-	}
-	.u-header{
-		width: 100%;
-		height: 400rpx;
-		position: relative;
-		image{
-			width: 100%;
-			height: 400rpx;
-		}
-	}	
-	.u-header-main{
-		width: 100%;
-		height: 284rpx;
-		padding: 58rpx 0;
-		position: absolute;
-		top: 0;
-		left: 0;
-		.user-item{
-			width: 100%;
-			display: flex;
-			flex-direction: column;
-			align-items: center;
-			margin-bottom: 16rpx;
-			.u-h1{
-				width: 410rpx;
-				font-size: $font-size-28;
-				line-height: 40rpx;
-				color: #FFFFFF;
-				margin-bottom: 8rpx;
-				-o-text-overflow: ellipsis;
-				text-overflow: ellipsis;
-				display: -webkit-box;
-				word-break: break-all;
-				-webkit-box-orient: vertical;
-				-webkit-line-clamp: 1;
-				overflow: hidden;
-				align-items: center;
-			}
-			.u-p{
-				font-size: $font-size-24;
-				line-height: 40rpx;
-				color: #FFFFFF;
-			}
-		}
-		.logo-m{
-			width: 144rpx;
-			height: 144rpx;
-			border: 2rpx solid #FFFFFF;
-			border-radius: 100%;
-			background: $bg-color;
-			position: relative;
-			.txt{
-				width: 144rpx;
-				height: 42rpx;
-				display: inline-block;
-				background: linear-gradient(45deg,rgba(225,86,22,1) 0%,rgba(255,177,0,1) 100%);
-				border-radius: 21rpx;
-				line-height: 42rpx;
-				text-align: center;
-				color: #FFFFFF;
-				font-size: $font-size-22;
-				position: absolute;
-				bottom: -10rpx;
-				left: 0;
-			}
-			image{
-				width: 144rpx;
-				height: 144rpx;
-				border-radius: 100%;
-			}
-		}
-	}
-
-	.user-order{
-		width: 702rpx;
-		height: auto;
-		padding: 0 24rpx;
-		background-color: $bg-color;
-		margin-bottom: 24rpx;
-	}	
-	.tab-title{
-		font-size: $font-size-28;
-		line-height: 80rpx;
-		color: #333333;
-		text-align:left;
-		border-bottom: 1px solid #F8F8F8;
-		position: relative;
-		.cell-tit{
-			font-size: $font-size-28;
-			color: $text-color;
-		}
-		.cell-more{
-			float: right;
-			line-height: 80rpx;
-			font-size: $font-size-24;
-			color: $text-color;
-			padding-right: 30rpx;
-		}
-		.iconfont{
-			width: 30rpx;
-			height: 80rpx;
-			line-height: 80rpx;
-			font-size: $font-size-28;
-			text-align: center;
-			position: absolute;
-			right: 0;
-			top: 0;
-			display: block;
-		}
-	}
-	.order-section{
-		display: flex;
-		justify-content: space-around;
-		align-items: center;
-		flex-wrap:wrap;
-		height: 99rpx;
-		padding: 24rpx 0;
-	}
-	.order-item{
-		display: flex;
-		flex-direction: column;
-		align-items: center;
-		width: 98rpx;
-		position: relative;
-		margin-right: 53rpx;
-		&:last-child{
-			margin-right: 0;
-		}
-		.order-icon{
-			width: 52rpx;
-			height: 52rpx;
-			position: relative;
-			image{
-				width: 52rpx;
-				height: 52rpx;
-			}
-			.icon-num{
-				position: absolute;
-				right:-24rpx;
-				top: -9rpx;
-			}
-			.icon-num.goleft{
-				right: -12rpx;
-			}
-		}
-		.order-t{
-			line-height: 50rpx;
-			font-size: $font-size-24;
-			color: $text-color;
-		}
-	}
-
-
-	.foot-list{
-		width: 100%;
-		// margin-bottom: 150rpx;
-	}	
-	.list-cell-item{
-		width: 702rpx;
-		height: auto;
-		margin-bottom: 24rpx;
-		padding:0 24rpx;
-		background: $bg-color;
-	}
-	.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;
-		&.cell-hover{
-			background:#fafafa;
-		}
-		.cell-more{
-			align-self: baseline;
-			font-size:$font-size-28;
-			color:$text-color;
-			margin-left:10rpx;
-		}
-		.cell-tit{
-			flex: 1;
-			font-size: $font-size-28;
-			color: $text-color;
-			margin-right:10rpx;
-		}
-		.cell-tip{
-			font-size: $font-size-28;
-			color: $text-color;
-		}
-	}	
-	.list-cell.last{
-		border-bottom: none;
-	}
-	.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>

+ 3 - 3
components/uni-search/bt-search.vue

@@ -36,8 +36,8 @@
 <style lang="scss">
 	.search-input{
 		width: 100%;
-		height: 80rpx;
-		padding: 10rpx 0;
+		height: 70rpx;
+		padding: 12rpx 0;
 		background: #FFFFFF;
 		.gosearch-btn{
 			/* #ifndef APP-NVUE */
@@ -54,7 +54,7 @@
 			margin: 0 auto;
 			padding:0 20rpx;
 			font-size: 28rpx;
-			line-height: 80rpx;
+			line-height: 70rpx;
 			color: #8A8A8A;
 			.icon-iconfonticonfontsousuo1{
 				margin:0 6rpx;

+ 3 - 0
components/uni-stars/uni-stars.vue

@@ -42,6 +42,9 @@
 				type: String,
 				default:'#FFBD13'
 			}
+		},
+		created() {
+
 		},
 		methods: {
 			

+ 16 - 47
main.js

@@ -1,58 +1,27 @@
 import Vue from 'vue'
 import store from './store'
 import App from './App'
-
+import './services/index.js'
 import * as Api from '@/common/config/caimeiApi.js'
 import * as Regs from '@/common/config/common.js'
+import { msg, modal,json,prePage } from'./utils/util'
+// import '@/common/utils/module.js'
 import Json from './json' //本地数据
-import cuCustom from './components/cu-custom.vue'
+import cuCustom from './components/cm-custom/cu-custom.vue'
+import cmCustom from './components/cm-custom/cm-custom.vue'
+import customCeller from './components/cm-custom/custom-seller.vue'
 Vue.component('cu-custom',cuCustom)
-/**
- *  示例使用了uni.scss下的变量, 除变量外已尽量移除特有语法,可直接替换为其他预处理器使用
- */
-const msg = (title, duration=1500, mask=true, icon='none')=>{
-	//统一提示方便全局修改
-	if(Boolean(title) === false){return;}
-	uni.showToast({
-		title,
-		duration,
-		mask,
-		icon
-	});
-}
-const modal = (title,content,confirmText,cancelText,showCancel=false,callBack) =>{
-	uni.showModal({
-		title,
-		content,
-		confirmText,
-		cancelText,
-		confirmColor:'#E15616',
-		showCancel,
-		success: function (res) {
-			if (res.confirm) {
-				callBack()
-			}
-		}
-	});
-}	
-const json = type=>{
-	//模拟异步请求数据
-	return new Promise(resolve=>{
-		setTimeout(()=>{
-			// console.log(resolve+'======='+type);
-			resolve(Json[type]);
-		}, 500)
-	})
+Vue.component('cm-custom',cmCustom)
+Vue.component('custom-seller',customCeller)
+
+Vue.prototype.$getStorage = function(key){
+	var userParam = uni.getStorageSync(key);
+	if (userParam != null && userParam != "" && userParam!= undefined) {
+		return userParam;
+	}else{
+		return null;
+	} 
 }
-const prePage = ()=>{
-	let pages = getCurrentPages();
-	let prePage = pages[pages.length - 2];
-	// #ifdef H5
-	return prePage;
-	// #endif
-	return prePage.$vm;
-}
-
 Vue.config.productionTip = false
 Vue.prototype.$fire = new Vue();
 Vue.prototype.$store = store;

+ 83 - 4
pages.json

@@ -4,7 +4,8 @@
 			"path": "pages/tabBar/home/home",
 			"style": {
 				"navigationBarTitleText": "采美采购商城",
-				"enablePullDownRefresh":true
+				"enablePullDownRefresh":true,
+				"navigationStyle":"custom"
 			}
 		},{
 			"path": "pages/authorization/authorization",
@@ -35,7 +36,8 @@
 			"path": "pages/tabBar/user/user",
 			"style": {
 				"navigationBarTitleText": "我的",
-				"enablePullDownRefresh" : true
+				"enablePullDownRefresh" : true,
+				"navigationStyle":"custom"
 			}
 		},{
 			"path": "pages/user/account/account",
@@ -69,6 +71,18 @@
 				"navigationBarTitleText": "商品详情",
 				"navigationStyle":"custom"
 			}
+		},{
+			"path": "pages/goods/supplier",
+			"style": {
+				"navigationBarTitleText": "供应商信息"
+			}
+		},{
+			"path": "pages/goods/cart",
+			"style": {
+				"navigationBarTitleText": "购物车",
+				"enablePullDownRefresh":true,
+				"navigationStyle":"custom"
+			}
 		},{
 			"path": "pages/service/aftersale",
 			"style": {
@@ -200,7 +214,7 @@
 		},{
 			"path": "pages/login/logincode",
 			"style": {
-				"navigationBarTitleText": "授权登录"
+				"navigationBarTitleText": "邀请码登录"
 			}
 		},{
 			"path": "pages/login/login",
@@ -375,6 +389,12 @@
 						"navigationBarTitleText": "订单列表"
 					}
 				},
+				{
+					"path": "pages/order/order-historylist",
+					"style": {
+						"navigationBarTitleText": "订单列表"
+					}
+				},
 				{
 					"path": "pages/search/search",
 					"style": {
@@ -411,7 +431,66 @@
 					}
 				}
 			]	
-		}			
+		},
+		{
+			"root": "supplier",
+			"pages": [
+				{
+					"path": "pages/login/bind-operator",
+					"style": {
+						"navigationBarTitleText": "绑定微信"
+					}
+				},{
+					"path": "pages/login/share-login",
+					"style": {
+						"navigationBarTitleText": "查看订单"
+					}
+				},{
+					"path": "pages/login/share-info",
+					"style": {
+						"navigationBarTitleText": "订单详情",
+						"navigationStyle":"custom"
+					}
+				},{
+					"path": "pages/order/order-details",
+					"style": {
+						"navigationBarTitleText": "订单详情",
+						"enablePullDownRefresh":true,
+						"navigationStyle":"custom"
+					}
+				},{
+					"path": "pages/order/order-service-details",
+					"style": {
+						"navigationBarTitleText": "订单详情",
+						"navigationStyle":"custom",
+						"enablePullDownRefresh":true
+					}
+				},{
+					"path": "pages/deliver/add-logistics",
+					"style": {
+						"navigationBarTitleText": "录入物流信息"
+					}
+				},{
+					"path": "pages/deliver/deliver-goods",
+					"style": {
+						"navigationBarTitleText": "发货",
+						"enablePullDownRefresh":true
+					}
+				},{
+					"path": "pages/deliver/deliver-record",
+					"style": {
+						"navigationBarTitleText": "发货记录",
+						"enablePullDownRefresh":true,
+						"navigationStyle":"custom"
+					}
+				},{
+					"path": "pages/deliver/logistics-list",
+					"style": {
+						"navigationBarTitleText": "物流公司"
+					}
+				}
+			]	
+		}	
 	],
 	"tabBar": {
 		"height":"80",

+ 31 - 12
pages/authorization/authorization.vue

@@ -28,7 +28,8 @@
 					showSearch: 0,
 					title: '微信授权', // 导航栏 中间的标题
 					haveBack:true,
-					textLeft:this.$store.state.isIphone
+					haveHome:false,
+					textLeft:this.$store.state.isIphone,
 				},
 				CustomBar:this.CustomBar,// 顶部导航栏高度
 				authorizeType:''
@@ -36,11 +37,15 @@
 		},
 		onLoad(e) {
 			this.authorizeType = e.type
-			console.log(e)
+			if(this.authorizeType == '4'){
+				this.nvabarData.haveBack = false
+			}
+		},
+		computed: {
+			...mapState(['hasLogin','userInfo'])
 		},
 		methods:{
-			//授权登录 
-			getuserinfo: function (e) {
+			getuserinfo: function (e) {//微信授权
 			    if (e.detail.userInfo) {
 					this.wxGetUserInfo()
 			    }else{
@@ -63,20 +68,34 @@
 				}
 			},
 			wxGetUserInfo(){
+				let self = this
 				authorize.getCode('weixin').then(wechatcode =>{
 					wx.getUserInfo({
 						success: res => {
+							console.log(self.authorizeType)
 							wxLogin.wxLoginAuthorize()
-							setTimeout(()=>{
-								uni.navigateBack({delta: 1});
-							},2000)
+							switch(self.authorizeType){
+								case '0':
+									self.$api.switchTabTo('/pages/tabBar/home/home')
+									break;
+								case '1':
+									self.$api.navigateTo('/pages/login/login')
+									break;
+								case '2':
+									self.$api.navigateTo('/pages/login/register')
+									break;
+								case '3':
+									self.$api.navigateTo('/pages/login/logincode')
+									break;
+								default:
+									setTimeout(()=>{
+										uni.navigateBack({delta: 1});
+									},2000)
+							}
 						}
-					});	
+					})
 				})
-			},
-		},
-		onHide(){
-			this.$api.switchTabTo('/pages/tabBar/home/home')
+			}
 		}
 	}
 </script>

+ 1310 - 0
pages/goods/cart.vue

@@ -0,0 +1,1310 @@
+<template>
+	<view class="container cart clearfix" v-if="hasLogin" :style="{paddingTop:CustomBar+'px'}"> 	
+		<headerNavbar :systeminfo='systeminfo' :navbar-data='nvabarData' :headerBtnPosi ="headerBtnPosi" :page='1'></headerNavbar>
+		<tui-skeleton v-if="skeletonShow" backgroundColor="#fafafa" borderRadius="10rpx" :isLoading	="true" :loadingType="5"></tui-skeleton>
+		<view class="container-cart-main tui-skeleton">
+			<view v-if="!isEmpty" class="container-cart">
+				<view class="cart-content" :style="{paddingBottom :isIphoneX ? (68+100)+'rpx' : '100rpx'}">
+					<view class="goods-list">
+						<view v-for="(item, index) in goodsList" :key="index" class="goods-item">
+							<view class="shoptitle">
+								<!--选择商店的全部商品"-->
+								<view class="checkbox-box" @click.stop="checkShop(item)">
+									<button class="checkbox iconfont" 
+											:class="[item.checked ?'icon-gouxuanl':'icon-weigouxuan']" 									
+											:disabled="item.isDisabled && !isshowDelbtn">
+									</button>
+								</view>
+								<view class="text">{{item.name}}</view> 
+							</view>
+							<view class="productlist">
+								<view 	class="goods-pros" v-for="(pros,idx) in item.productsList" :key="idx" >
+									<view class="goods-pros-t">
+										<!--选择商品-->
+										<view class="checkbox-box" @click.stop="ischeck(item,pros)" :class="[pros.validFlag == '3' && !isshowDelbtn ?'disabled' : '']">
+											<button class="checkbox iconfont" 
+													:disabled="pros.validFlag == '3' && !isshowDelbtn"
+													:class="[pros.productsChecked ?'icon-gouxuanl':'icon-weigouxuan']">
+											</button>
+										</view>
+										<view class="pros-img" @click.stop="navToListPage(pros.productID)"	><image :src="pros.mainImage ? pros.mainImage:''" alt="" /></view>
+										<view class="pros-product">
+											<view class="producttitle" @click.stop="navToListPage(pros.productID)"	>
+												<text v-if="pros.validFlag == '3'" class="no-text">商品已下架</text>{{pros.name}}
+											</view>
+											<view class="productspec">规格:{{pros.unit ? pros.unit : ''}}</view>
+											<view class="productprice">
+												<!--使用过滤器对总价改变-->
+												<view class="price" :class="[pros.validFlag == '3' ?'disabled' : '']">
+													<text :class="[pros.validFlag == '3' ?'disabled' : 'money-sign']">¥</text>
+													{{pros.retailPrice?pros.retailPrice.toFixed(2):''}}
+												</view>
+												<view class="count" v-if="pros.validFlag == '2'"  :class="[isshowDelbtn ? 'none':'show']">
+													<text class="count-tips" v-if="pros.productCount<pros.minBuyNumber">起订量:{{pros.minBuyNumber}}</text>
+													<text class="count-tips step" v-if="pros.isStep">购买量必须为起订量的整数倍</text>
+													<view class="number-box">
+														<view  class="iconfont icon-jianhao" :class="[pros.validFlag == '3'?'disabled':'']" @click="changeCountSub(item,pros)"></view>
+														<input class="btn-input" type="number" maxlength='4' v-model="pros.productCount" @blur="changeNnmber($event,item,pros)" @focus="changeInput(pros)">
+														<view  class="iconfont icon-jiahao"  :class="[pros.validFlag == '3'?'disabled':'']" @click="changeCountAdd(item,pros)"></view>
+													</view>
+												</view>
+											</view>
+										</view>	
+									</view>
+								</view>
+							</view>	
+							<view class="goods-pros-b" :class="[isshowDelbtn ? 'none':'show']" >
+								<view class="sum">合计:<text class="money"><text class="money-sign">¥</text>{{item.totalPrice.toFixed(2)}}</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">清空失效商品</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-gouxuanl':'icon-weigouxuan']">
+										</button>
+									</view>
+									<view class="pros-img">
+										<image :src="failure.mainImage ? failure.mainImage:''" alt="" />
+										<text class="img-tip">失效</text>
+									</view>
+									<view class="pros-product">
+										<view class="producttitle">{{failure.name}}</view>
+										<view class="productspec">规格:{{failure.unit ? failure.unit : ''}}</view>
+										<view class="productstate">{{failureStateText(failure.failureState)}}</view>
+									</view>
+									<view class="pros-marks" v-if="failure.isFailureLayer"></view>
+								</view>
+							</view>
+						</view>	
+					</view>
+				</view>
+				<!-- 脚部菜单 -->
+				<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-gouxuan':'icon-weigouxuan']"></button> 
+							<view class="text">全选</view>
+						</view>
+						<view class="foot-check-delbtn">
+							<button class="delBtn" @tap.stop="showDelManager">删除</button>
+						</view>
+						<view class="sum">总价:<text class="money-sign">¥</text><text class="money">{{allPrice.toFixed(2)}}</text></view>
+					</view>
+					<view v-if="!isshowDelbtn" class="footer-ri" >
+						<view class="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>
+			</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>
+		<!-- 透明模态层 -->
+		<modal-layer v-if='modallayer'></modal-layer>
+	</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 headerNavbar from "@/components/cm-module/headerNavbar/headerNavbar.vue" //顶部自定义胶囊'
+	import modalLayer from "@/components/modal-layer"
+	import { mapState,mapMutations } from 'vuex';
+	import { queryShoppingCartList,shoppingCartUpdate,shoppingCartDelete } from "@/api/cart.js" 
+	
+	export default{
+		components:{
+			tuiSkeleton,
+			tuiLoadmore,
+			tuiNomore,
+			modalLayer,
+			headerNavbar
+		},
+		data(){
+			return{
+				nvabarData: {//顶部自定义导航
+					showCapsule: 1, // 是否显示左上角图标  1表示显示  0表示不显示,
+					showSearch: 0,
+					title: '购物车', // 导航栏 中间的标题
+				},
+				headerBtnPosi:this.setHeaderBtnPosi(),//获取设备顶部胶囊高度
+				systeminfo:this.setSysteminfo(),		 //获取设备信息
+				CustomBar:this.CustomBar,// 顶部导航栏高度
+				isIphoneX:this.$store.state.isIphoneX,
+				userID:'',
+				alertType:'',
+				isStock:'',
+				failureList:[],	//失效商品列表
+				goodsList:[],	//购物车的商品
+				delGoodsList:'',//要删除的商品
+				setGoodData:'', //确认订单的商品
+				isCheckAll:false,//是否全选
+				allPrice:0,//所有价格
+				allCount:0,//被选中的产品数量
+				isNnder:true,
+				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,
+			}
+		},
+		onLoad(){
+			this.setScrollHeight();
+		},
+		computed: {
+			...mapState(['hasLogin','userInfo'])
+		},
+		filters:{//单件商品的价格 × 数量
+		    totalprice(val,count){
+		        return (val * count).toFixed(2)
+		    }
+		},	
+		methods:{
+			initData(){
+				this.isModallayer = false //遮罩层 防止多次点击
+				this.skeletonShow = true //预加载圆圈
+				this.isCheckAll=false//是否全选
+				this.$api.getStorage().then((resolve) => {
+					this.userID = resolve.userID;
+					this.initGetCartGoodsList();
+				})	
+			},
+			initLogin(){
+				authorize.getSetting().then(wxResponse =>{// console.log('是否已授权',res);//0:为取消授权 1:为已授权 2:为未操作
+					if(wxResponse == 1){
+						this.$api.redirectTo('/pages/login/login?type=4')
+					}else{
+						this.$api.navigateTo('/pages/authorization/authorization?type=1')
+					}
+				})	
+			},
+			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
+				let params = {userID:this.userID}
+				queryShoppingCartList(params).then(response =>{
+					this.skeletonShow = false
+					this.$store.commit('updateAllNum',response.data.cartQuantity)
+					const responseData = response.data
+					if(responseData.pageDate.length > 0 || responseData.failureList.length > 0){
+						this.isEmpty =false
+					}else{
+						this.isEmpty =true
+					}
+					if(responseData.pageDate && responseData.pageDate.length > 0 ){
+						this.goodsList = responseData.pageDate;
+						this.goodsList.forEach((item,index) => {
+							let productsListLength = item.productsList.length,
+								invalidLength = 0;
+							item.productsList.forEach(pros => {
+								pros.shopID = item.shopID;
+								pros.isStep = false
+								if(pros.validFlag == '3' ) {invalidLength++;}
+								if(pros.step === 2){
+									if(pros.productCount % pros.minBuyNumber != 0){
+										pros.productCount = pros.minBuyNumber
+										this.totalShopPeice()
+										this.updateShoppogNum(pros)
+									}
+								}
+							})
+							item.isDisabled = invalidLength === productsListLength;
+						})
+					} else {
+						this.goodsList = [];
+					}
+					if( responseData.failureList && responseData.failureList.length > 0){
+						let newFailureList = [],isFailureLayer;
+						responseData.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
+					} else {
+						this.failureList = [];
+					}
+				}).catch(error =>{
+					this.$util.msg(error.msg,2000);
+				})
+			},		
+			getOnReachBottomData(){//上拉加载
+				this.pageNum+=1
+				let params = {userID:this.userID,pageNum:this.pageNum,pageSize:this.pageSize}
+				queryShoppingCartList(params).then(response =>{
+					let resultsData = response.data.pageDate
+					this.hasNextPage = resultsData.hasNextPage;
+					this.goodsList = this.goodsList.concat(resultsData.results)
+					this.goodsList.forEach((item,index) => {
+						let productsListLength = item.productsList.length,
+							invalidLength = 0;
+						item.productsList.forEach(pros => {
+							pros.shopID = item.shopID;
+							pros.isStep = false
+							if(pros.validFlag == '3' ) {invalidLength++;}
+							if(pros.step === 2){
+								if(pros.productCount % pros.minBuyNumber != 0){
+									pros.productCount = pros.minBuyNumber
+									this.totalShopPeice()
+									this.updateShoppogNum(pros)
+								}
+							}
+						})
+						item.isDisabled = invalidLength === productsListLength;
+					})
+					this.pullFlag = false;// 防上拉暴滑
+					setTimeout(()=>{this.pullFlag = true;},500)
+					if(this.hasNextPage){
+						this.pullUpOn = false
+						this.nomoreText = '上拉显示更多'
+					}else{
+						this.loadding = false
+						this.pullUpOn = false
+						this.nomoreText = '已至底部'
+					}
+				}).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;
+				this.updateProductCheckedAllBtn(item);
+				this.updateCheckAllBtn();
+			},
+			updateProductCheckedAllBtn(item) {// 单独每个供应商的勾选判断
+				let productsList = item.productsList,
+					productsCheckedLength = 0,
+					disabledLength = 0;
+				if(this.isshowDelbtn) {
+					productsList.forEach(pros => {
+						if(pros.productsChecked) {
+							productsCheckedLength++;
+						}
+					})
+				} else {
+					productsList.forEach(pros => {
+						if(pros.productsChecked && pros.validFlag != '3') {
+							productsCheckedLength++;
+						}
+						if(pros.validFlag == '3') {disabledLength++;}
+					})
+				}
+				item.checked = productsCheckedLength === productsList.length - disabledLength;
+			},
+			updateCheckAllBtn() {// 全选勾选判断
+				let goodsCheckedLength = 0,
+					disabledListLength = 0,
+					goodsList = this.goodsList,
+					failureList = this.failureList;
+				goodsList.forEach(item => {
+					if(item.checked) {
+						goodsCheckedLength++;
+					}
+					if(item.isDisabled && !this.isshowDelbtn) {
+						disabledListLength++;
+					}
+				})
+				failureList.forEach(failureItem=>{
+					if(failureItem.productsChecked){
+						goodsCheckedLength++;
+					}
+				})
+				this.isCheckAll = goodsCheckedLength === goodsList.length+failureList.length - disabledListLength;
+			},
+			checkShop(item){//与单选商品类似
+				item.checked = !item.checked;
+				this.setProductChecked(item);
+				this.updateCheckAllBtn();
+			},
+			setProductChecked(item) {
+				let products = item.productsList;
+				products.forEach(pros=>{
+					if(item.checked) {
+						if(pros.validFlag =='3'){
+							// 无效
+							this.isNnder = true;
+							pros.productsChecked = this.isshowDelbtn ?true :false;
+						}else{
+							// 有效
+							this.isNnder = false;
+							pros.productsChecked = true;
+						}
+					} else {
+						pros.productsChecked = false;
+					}
+				})
+				
+			},
+			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;
+				this.updateBothCheckBtn();     
+			},
+			totalShopPeice(){//每次所属会所下的商品增减重新计算合计价格&减去含有下架的商品
+				let prosPrice=0;
+				let validPrice =0;
+				let validList=[];
+				let productsList=[];
+				this.goodsList.map((item,index)=>{
+					productsList=item.productsList;
+					prosPrice=productsList.reduce((p,e)=>p+e.retailPrice*e.productCount,0);
+					productsList.forEach(pros =>{
+						if(pros.validFlag =='3'){
+							validList.push(pros)
+							validPrice = validList.reduce((p,e)=>p+e.retailPrice*e.productCount,0);
+							item.totalPrice = prosPrice - validPrice
+						}else{
+							item.totalPrice = prosPrice
+						}
+					})
+				})
+			},
+			totalPeice(){	//计算总价格,每次调用此方法,将初始值为0,遍历价格并累加
+			    this.allPrice = 0
+				let prosPrice=0;
+				let validPrice=0;
+				let validList =[];
+				let productsList =[];
+			    this.goodsList.forEach((item,index)=>{
+					productsList=item.productsList;
+					productsList.forEach(pros=>{	
+						if(pros.productsChecked){
+							prosPrice+=pros.retailPrice*pros.productCount;
+							if(pros.validFlag =='3'){
+								validList.push(pros)
+								validPrice = validList.reduce((p,e)=>p+e.retailPrice*e.productCount,0);
+								this.allPrice = prosPrice - validPrice
+							}else{
+								this.allPrice = prosPrice
+							}
+						}	
+					})
+			    })
+			},
+			totalCount(){//计算总数量
+			    this.allCount = 0
+				let prosAllCount=0
+				let validCount = 0
+				let validList =[];
+				let productsList =[];
+			    this.goodsList.forEach(item=>{
+					productsList = item.productsList
+					productsList.forEach(pros=>{
+						if(pros.productsChecked){
+							prosAllCount+=parseInt(pros.productCount);
+							if(pros.validFlag =='3'){
+								validList.push(pros)
+								validList.forEach(val =>{
+									validCount += val.productCount
+								})
+								this.allCount = prosAllCount - validCount
+							}else{
+								this.allCount = prosAllCount
+							}
+						}
+					})
+			    })
+			},		
+			changeCountAdd(item,pros){//商品数量加加
+				if(pros.step === 2){
+					pros.productCount += pros.minBuyNumber
+					this.processActivityPrice(pros)
+					this.isStock = false
+				}else{
+					pros.productCount++
+					this.processActivityPrice(pros)
+					this.isStock = false
+				}
+				this.updateShoppogNum(pros)
+				this.totalShopPeice();
+			},
+			changeCountSub(item,pros){//商品数量减减
+				if(pros.productCount<=pros.minBuyNumber){
+					pros.productCount= pros.minBuyNumber
+					this.$util.msg(`该商品最小起订量为${pros.minBuyNumber}`,2000);
+					return
+				}else{
+					if(pros.step === 2){
+						pros.productCount -= pros.minBuyNumber
+					}else{
+						pros.productCount--
+					}
+					this.processActivityPrice(pros)
+				}
+				this.updateShoppogNum(pros)
+				this.totalShopPeice();
+			},
+			changeInput(pros){//输入商品数量更新
+				pros.isStep = false
+			},
+			changeNnmber(e,item,pros){//输入商品数量更新
+				let _value = e.detail.value;
+				if(!this.$api.isNumber(_value)){
+					pros.productCount = pros.minBuyNumber
+				}else if(_value < pros.minBuyNumber){	
+					this.$util.msg(`该商品最小起订量为${pros.minBuyNumber}`,2000);
+					pros.productCount = pros.minBuyNumber
+				}else if(_value % pros.minBuyNumber != 0){
+					pros.isStep = true
+					pros.productCount = pros.minBuyNumber
+				}else{
+					pros.isStep = false
+					pros.productCount = e.detail.value
+					this.processActivityPrice(pros)
+				}
+				this.updateShoppogNum(pros)
+				this.totalShopPeice();
+			},
+			processActivityPrice(pros){//单独处理活动价格和阶梯价格
+				let ladderPriceList = pros.ladderPriceList;
+				if(pros.ladderPriceFlag == '0' || pros.actStatus == 1){
+					pros.retailPrice = pros.retailPrice
+				}else{
+					ladderPriceList.forEach((item,index)=>{
+						if(pros.productCount>=item.buyNum){
+							pros.retailPrice = item.buyPrice
+						}
+					})
+				}
+			},
+			updateShoppogNum(pros){//加减购物车商品更新到后台
+				let params ={userID:this.userID,productID:pros.productID,productCount:pros.productCount}
+				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.productsList
+					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.productsList.forEach(pros=>{
+							if(pros.productsChecked){
+							   if(pros.productCount<pros.minBuyNumber){
+								   this.isNoConfim = true
+							   }
+							}
+						})
+					})
+					if(this.isNoConfim){
+						this.$util.modal('','有商品的购买量没达到最小起订量,请修改数量后再次提交结算','去修改','',false,() =>{})
+						return;
+					}
+					let productID = '';
+					this.goodsList.forEach(el=>{//获取勾选的商品ID拼接字符串逗号隔开,最后一个逗号去掉
+						el.productsList.forEach(pros=>{
+							if(pros.productsChecked){
+							   productID += pros.productID+','
+							}
+						})
+					})
+					let cartPramsData={
+							allPrice:this.allPrice,
+							allCount:this.allCount,
+							productID:productID.substring(0,productID.lastIndexOf(',')),
+							productCount:''
+						}
+					this.$api.navigateTo(`/pages/user/order/create-order?data=${JSON.stringify({data:cartPramsData})}`)
+				}
+			},
+			showDelManager(){//显示删除商品管理
+				this.isshowDelbtn = true;
+				this.isNnder = true;
+				if(this.isCheckAll) {
+					this.updateBothCheckBtn();	
+				} else {
+					this.goodsList.forEach(item => {
+						if(item.checked) {
+							item.productsList.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.productsList.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.productsList
+					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,() =>{
+						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,() =>{
+					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/home'
+				});
+			},
+			goNavto(url){
+				uni.navigateTo ({
+					url
+				})
+			},
+			navToListPage(id){
+				this.isModallayer = true;
+				this.$api.navigateTo(`/pages/goods/product?id=${id}`)
+			},
+			failureToProduct(failure){
+				if(failure.failureState == 1){
+					this.$util.msg('商品已丢失,不能查看',2000)
+					return
+				}else if(failure.failureState == 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
+			}
+		},
+		watch:{//深度监听所有数据,每次改变重新计算总价和总数
+		    goodsList:{
+		        deep:true,
+		        handler(val,oldval){
+		            this.totalPeice()
+		            this.totalCount()
+		        }
+		    }
+		},
+		onPullDownRefresh() {//下拉刷新
+			this.initGetCartGoodsList()
+			uni.stopPullDownRefresh()
+		},
+		onShow(){
+			if(this.hasLogin){
+				this.initData()
+			}else{
+				this.initLogin()
+			}
+		},
+	}
+</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;
+	}
+	.checkbox-box{
+		display: flex;
+		align-items: center;
+		.checkbox{
+			display: flex;
+			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;
+			font-size: 36rpx;
+			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{
+			display: flex;
+			align-items: center;
+			height: 80rpx;
+			// border-bottom: 1px solid #EBEBEB;
+			line-height: 80rpx;
+			.checkbox-box{
+				padding: 10rpx;
+			}
+			.text{
+				display: block;
+				overflow: hidden;
+				text-overflow:ellipsis;
+				white-space: nowrap;
+				text-align: right;
+				margin-left: 37rpx;
+				font-size: $font-size-28;
+				color: $text-color;
+				text-align: left;
+				font-weight: bold;
+			}
+		}
+		.goods-pros{
+			width: 100%;
+			height: auto;
+		}	
+		.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: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;
+			}
+			.productprice{
+				height: 48rpx;
+				position: absolute;
+				width: 100%;
+				bottom: 0;
+				.price{
+					line-height: 48rpx;
+					font-size: $font-size-28;
+					width: 48%;
+					color: #FF2A2A;
+					float: left;
+					&.disabled{
+						color: #999999;
+					}
+					.money-sign{
+						font-size: $font-size-24;
+						color: #FF2A2A;
+					}
+				}
+				.count{
+					height: 100%;
+					float: right;
+					position: relative;
+					&.show{
+						display: block;
+					}
+					&.none{
+						display: none;
+					}
+					.number-box{
+						display: flex;
+						justify-content: center;
+						align-items: center;
+						.iconfont{
+							font-size: $font-size-24;
+							padding:0 20rpx;
+							color: $text-color;
+							text-align: center;
+							line-height: 48rpx;
+							font-weight: bold;
+						}
+						.btn-input{
+							width: 62rpx;
+							height: 48rpx;
+							line-height: 48rpx;
+							background: #F8F8F8;
+							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;
+						}
+					}
+				}
+			}
+		}
+	}
+	.failure-list{
+		width: 702rpx;
+		height: auto;
+		padding: 0 24rpx;
+		margin-top: 20rpx;
+		background: #FFFFFF;
+		.failure-title{
+			width: 100%;
+			height: 80rpx;
+			line-height: 80rpx;
+			font-size: $font-size-28;
+			border-bottom: 1px solid #EBEBEB;
+			.title-txt{
+				float: left;
+				color: $text-color;
+				text-align: left;
+			}
+			.title-btn{
+				float: right;
+				color: $color-system;
+				text-align: right;
+			}
+		}
+		.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;
+				.checkbox-box{
+					padding: 10rpx;
+				}
+				.pros-img{
+					width: 210rpx;
+					height: 100%;
+					border-radius: 10rpx;
+					margin:0 20rpx;
+					border:1px solid #f3f3f3;
+					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: 10rpx 0 10rpx 0;
+						background:linear-gradient(34deg,rgba(255,149,42,1) 0%,rgba(225,86,22,1) 100%);
+						position: absolute;
+						left: 0;
+						top: 0;
+					}
+					image{
+						width: 100%;
+						height: 100%;
+						border-radius: 10rpx;
+					}
+				}
+				.pros-marks{
+					width: 722rpx;
					height: 250rpx;
+					z-index: 90;
+					background: rgba(0,0,0,.05);
+					position: absolute;
+					left:0;
+					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;
+				}
+				.productstate{
+					font-size: $font-size-28;
+					height: 44rpx;
+					color: #FF2A2A;
+					position: absolute;
+					bottom: 0;
+					left: 0;
+				}
+			}
+		}
+	}
+	.footer{
+		width: 100%;
+		background-color: #FFFFFF;
+		height: 110rpx;
+		position: fixed;
+		bottom: 0rpx;
+		z-index: 100;
+		.footer-le{
+			width: 490rpx;
+			height: 100%;
+			padding:0 30rpx;
+			float: left;
+			.text{
+				font-weight: bold;
+			}
+			.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;
+				}
+			}
+			.foot-check-delbtn{
+				float: left;
+				.delBtn{
+					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;
+					border-radius: 0;
+					-webkit-tap-highlight-color: transparent;
+					overflow: hidden;
+					background-color:#FFFFFF;
+					color: #FF2A2A;
+					padding: 0 24rpx;
+					display: flex;
+					justify-content: center;
+					align-items: center;
+					line-height: 110rpx;
+					font-weight: bold;
+					&.none{
+						display: none;	
+					}
+				}
+			}
+			.sum{
+				font-size: $font-size-28;
+				line-height: 110rpx;
+				color: $text-color;
+				display: flex;
+				justify-content: flex-end;
+				.money{
+					color: #FF2A2A;
+				}
+				.money-sign{
+					font-size: $font-size-24;
+					color: #FF2A2A;
+				}
+			}
+		}
+		.footer-ri{
+			width: 200rpx;
+			height: 100%;
+			background:linear-gradient(135deg,rgba(242,143,49,1) 0%,rgba(225,86,22,1) 100%);
+			float: right;
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			z-index: 999;
+			&.none{
+				display: none;
+			}
+			.btn{
+				width: 200rpx;
+				height: 100%;
+				font-size: $font-size-28;
+				line-height: 110rpx;
+				color: #FFFFFF;
+				display: flex;
+				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>

+ 16 - 12
pages/goods/goods.vue

@@ -1,6 +1,6 @@
 <template>
 	<view class="container all-type-list-wrapper">
-		<commodity-list ref="childList" :empty-text="emptyText"></commodity-list>
+		<commodity-list ref="childList" :empty-text="emptyText" :serverUrl="serverUrl" :typeId="typeId" v-if="isRequest"></commodity-list>
 	</view>
 </template>
 
@@ -17,11 +17,12 @@
 				emptyText: '',
 				lastPageType: '',
 				lastPageVal: '',
+				isRequest:false,
+				typeId:null
 			}
 		},		
 		onLoad(option) {
-			let self = this;
-			self.setServerUrl(option);
+			this.setServerUrl(option);
 		},
 		methods:{
 			setServerUrl(option) {
@@ -33,36 +34,39 @@
 				uni.getStorage({
 					key: 'commodity_id',
 					success: function (res) {
-					    const id = res.data;
 						const emptyTxt = '正在上架中,敬请期待~';
-						const otherTypeUrl = '/product/preferred';
 						/**
 						 *@商品分类列表传参类型
 						 *@type  首页分类:0,首页商品模块1:1,首页商品模块2:2,首页商品模块3:3,底部导航分类:4
 						 **/
 						switch(type){
 							case '0':
-								self.serverUrl = `/home/classify?classifyId=${id}`;
+								self.typeId = res.data;
+								self.serverUrl = '/search/query/product/classify';
 								self.emptyText = '该分类暂时还没有商品哟,去逛逛别的吧~';
 								break;
 							case '1':	
-								self.serverUrl = `${otherTypeUrl}?preferredFlag=001`;
+								self.typeId = 1;
+								self.serverUrl = '/search/query/product/preferred';
 								self.emptyText = `${self.lastPageVal}商品${emptyTxt}`;
 								break;
 							case '2':
-								self.serverUrl = `${otherTypeUrl}?preferredFlag=010`;
+								self.typeId = 10;
+								self.serverUrl = '/search/query/product/preferred';
 								self.emptyText = `${self.lastPageVal}商品${emptyTxt}`;
 								break;
 							case '3':
-								self.serverUrl = `${otherTypeUrl}?preferredFlag=100`;
-								self.emptyText = `${self.lastPageVal}商品${emptyTxt}`;
+								self.typeId = 100;
+								self.serverUrl = '/search/query/product/preferred';
+								self.emptyText = `${self.lastPageVal}${emptyTxt}`;
 								break;
 							case '4':
-								self.serverUrl = `/product/listByTinyTypeID?tinyTypeID=${id}`;
+								self.typeId = res.data;
+								self.serverUrl = '/search/query/product/tinyType';
 								self.emptyText = '该分类暂时还没有商品哟,去逛逛别的吧~';
 								break;
 						}
-						self.$refs.childList.getListFromServer();
+						self.isRequest = true
 					}
 				})
 			}

+ 177 - 58
pages/goods/product.vue

@@ -1,13 +1,13 @@
 <template>
-	<view class="product" :style="{paddingBottom: userIdentity==1 ? '0rpx' :'120rpx'}">
-		<header-poduct  v-if="isHeaderPoduct"
-						:systeminfo='systeminfo' 
-						:navbar-data='nvabarData' 
-						:headerBtnPosi ="headerBtnPosi" 
-						:headerColor="headerColor" 
-						:type="isShareType"
-						:page='backPage'>
-		</header-poduct>
+	<view class="product" :style="{paddingBottom: userIdentity==1 ? '0rpx' :'188rpx'}">
+		<custom-p   v-if="isHeaderPoduct"
+					:systeminfo='systeminfo' 
+					:navbar-data='nvabarData' 
+					:headerBtnPosi ="headerBtnPosi" 
+					:headerColor="headerColor" 
+					:type="isShareType"
+					:page='backPage'>
+		</custom-p>
 		<tui-skeleton v-if="skeletonShow" backgroundColor="#fafafa" borderRadius="10rpx" :isLoading	="true" :loadingType="5"></tui-skeleton>
 		<view class="container-product tui-skeleton">
 			<view class="product-top">
@@ -15,7 +15,7 @@
 					<uni-swiper-dot :info="productImage" :current="current" field="content" :mode="mode" >
 						<swiper class="banner tui-banner tui-skeleton-rect" circular @change="swiperChange" :duration='800' :autoplay="false" :circular="false" >
 							<swiper-item v-for="(item, index) in productImage" :key="index" class="banner-item"> 
-								<image :src="item" @click="previewImg(index)" />
+								<image :src="item" @click="previewImg(index)" class="product-img" />
 							</swiper-item>
 						</swiper>
 						<view class="swiper__dots-box">
@@ -41,7 +41,7 @@
 								<uni-stars :stars="parseInt(product.price1Grade)" :font-size='36' :width-info="180"></uni-stars>
 							</view>
 							<view v-if="!hasLogin" class="p-login tui-skeleton-fillet">
-								<text @click.stop="navToLogin">登录查看价格<text class="iconfont icon-xiayibu" style="font-size: 22rpx;margin: 0 6rpx;"></text></text>
+								<text class="p-login-btn" @click.stop="navToLogin">登录查看价格<text class="iconfont icon-xiayibu" style="font-size: 22rpx;margin: 0 6rpx;"></text></text>
 							</view>
 							<view class="cm-price" v-else>
 								<cm-price v-if="isRequest"
@@ -59,34 +59,55 @@
 					</view>
 				</view>			
 			</view>
+			<view class="product-supplier" @click="goSupplier">
+				<text class="title">供应商信息</text>
+				<text class="name">{{shop.name}}</text>
+				<text class="iconfont icon-xiayibu"></text>
+			</view>
 			<view class="product-details">
 				<!-- 头部 -->
-				<view  v-if="goodsData.isNoneDisabled" class="navbar" :class="navbarFiexd"
-					 :style="{top:headerBtnPosi.bottom + (headerBtnPosi.bottom - headerBtnPosi.height - systeminfo.statusBarHeight) +'px'}">
-					<view class="nav-item tui-skeleton-fillet" v-for="(item,index) in  disabledTabNavList" :key="index" :class="{ current: tabCurrentIndex === index+2 }" @click="tabClick(index+2)">
+				<view  v-if="goodsData.isNoneDisabled" class="navbar" :class="navbarFiexd" :style="{top:headerBtnPosi.bottom + (headerBtnPosi.bottom - headerBtnPosi.height - systeminfo.statusBarHeight) +'px'}">
+					<view class="nav-item tui-skeleton-fillet" v-for="(item,index) in  disabledTabNavList" :key="index" :class="{ current: tabCurrentIndex === index }" @click="tabClick(index+2)">
 						<text class="line"></text>
 						<text>{{item.name}}</text>
 					</view>					
 				</view>
-				<view v-else class="navbar" :class="navbarFiexd" 
-					 :style="{top:headerBtnPosi.bottom + (headerBtnPosi.bottom - headerBtnPosi.height - systeminfo.statusBarHeight) +'px'}">
-					<view class="nav-item tui-skeleton-fillet" v-for="(item,index) in  tabNavList" :key="index" :class="{ current: tabCurrentIndex === index }" @click="tabClick(index)">
+				<view v-else class="navbar" :class="navbarFiexd" :style="{top:headerBtnPosi.bottom + (headerBtnPosi.bottom - headerBtnPosi.height - systeminfo.statusBarHeight) +'px'}">
+					<view class="nav-item tui-skeleton-fillet" :class="{ current: tabCurrentIndex === 0 }" @click="tabClick(0)">
+						<text>商品详情</text>
 						<text class="line"></text>
-						<text>{{item.name}}</text>
-					</view>					
+					</view>
+					<view class="nav-item tui-skeleton-fillet" 
+						  :class="{ current: tabCurrentIndex === 1 }" 
+						  @click="tabClick(1)" 
+						  v-if="product.parametersList != ''">
+							<text>相关参数</text>
+							<text class="line"></text>
+					</view>	
+					<view class="nav-item tui-skeleton-fillet" 
+					      :class="{ current: tabCurrentIndex === 2 }" 
+						  @click="tabClick(2)" 
+						  v-if="product.productDetail.orderInfo || product.productDetail.serviceInfo">
+							<text>服务项目</text>
+							<text class="line"></text>
+					</view>	
+					<view class="nav-item tui-skeleton-fillet" :class="{ current: tabCurrentIndex === 3 }" @click="tabClick(3)">
+						<text>相关推荐</text>
+						<text class="line"></text>
+					</view>	
 				</view>
-				<!-- 商品详情,供应商详情展示,相关推荐,评价-->
+				<!-- 商品详情,相关参数,服务项目,相关推荐-->
 				<view class="content tui-banner tui-skeleton-rect" v-if="tabCurrentIndex === 0">
 					<parser :html="html" :img-mode="widthFix"></parser>
 				</view>
-				<view class="content sup" v-if="tabCurrentIndex === 1">
-					<supplier-details :shop="shop"></supplier-details>
+				<view class="content param"  v-if="tabCurrentIndex === 1">
+					<cm-parameter :product="product" v-if="isRarameter"></cm-parameter>
 				</view>
-				<view class="content hot" v-if="tabCurrentIndex === 2">
-					<recommend :query-productid="product.productID" v-if="isRecommend"></recommend>
+				<view class="content service" v-if="tabCurrentIndex === 2">
+					<cm-service :product="product.productDetail" v-if="isService"></cm-service>
 				</view>
 				<view class="content hot" v-if="tabCurrentIndex === 3">
-					<evaluate :query-productid ="product.productID" v-if="isEvaluate"></evaluate>
+					<recommend :query-productid="product.productID" v-if="isRecommend"></recommend>
 				</view>
 			</view>
 			<!-- 底部按钮 -->
@@ -134,12 +155,15 @@
 			<view class="popup spec" :class="specClass"  @touchmove.stop.prevent="discard" @tap="hideSpec">
 				<!-- 遮罩层 -->
 				<view class="mask"></view>
-				<view class="layer" @tap.stop="discard">
+				<view class="layer" @tap.stop="discard" :style="{paddingBottom :isIphoneX ? '68rpx' : '36rpx',bottom:isIphoneX ?'-352rpx' : '-296rpx'}">
 					<view class="content">
 						<view class="layer-smimg">
 							<image :src="product.mainImage" mode=""></image>
 						</view>
 						<view class="layer-nunbox">
+							<view class="layer-nunbox-t" v-if="product.step === 2">
+								<view class="text">*该商品只能以起订量的整数倍购买</view>
+							</view>
 							<view class="layer-nunbox-t">
 								<view class="layer-nunbox-text">数量:</view>
 								<view class="number-box">
@@ -165,36 +189,35 @@
 
 <script>
 	import { mapState,mapMutations } from 'vuex'
-	import headerPoduct from '@/components/cm-module/headerNavbar/header-poduct' 		 //自定义导航
+	import customP from '@/components/cm-module/headerNavbar/header-poduct' 		 //自定义导航
 	import cmPrice from "@/components/cm-module/productDetails/cm-price.vue" //价格显示
 	import cmAttributes from "@/components/cm-module/productDetails/cm-attributes.vue" //规格信息
 	import authorize from '@/common/config/authorize.js'
 	import uniStars from '@/components/uni-stars/uni-stars.vue'
 	import parser from "@/components/jyf-Parser/index" //富文本处理
 	import tuiSkeleton from "@/components/tui-skeleton/tui-skeleton"
-	import supplierDetails from "@/components/cm-module/productDetails/supplierDetails" //供应商详情
-	import recommend from "@/components/cm-module/productDetails/recommend" //供应商详情
-	import evaluate from "@/components/cm-module/productDetails/evaluate" //供应商详情
+	import recommend from "@/components/cm-module/productDetails/recommend" //相关推荐
+	import cmParameter from "@/components/cm-module/productDetails/cm-parameter" //相关参数
+	import cmService from "@/components/cm-module/productDetails/cm-service" //服务项目
 	import wxLogin from "@/common/config/wxLogin.js"
 	import { queryProductDetils } from "@/api/product.js" 
 	import { shoppingAddCart } from "@/api/cart.js" 
 	var isPreviewImg;
 	export default{
 		components:{
-			headerPoduct,
+			customP,
 			parser,
 			tuiSkeleton,
-			supplierDetails,
 			recommend,
-			evaluate,
 			cmPrice,
-			cmAttributes
+			cmAttributes,
+			cmParameter,
+			cmService
 		},
 		data(){
 			return{			
 				html:'<div style="text-align: center;color:#333333;">暂无内容</div>',
-				tabNavList:[{name:'商品详情'},{name:'供应商信息'},{name:'相关推荐'},{name:'评价'}],
-				disabledTabNavList:[{name:'相关推荐'},{name:'评价'}],
+				disabledTabNavList:[{name:'相关推荐'}],
 				mode:'round',
 				specClass: '',//规格弹窗css类,控制开关动画
 				isBtnType:'',
@@ -206,6 +229,8 @@
 				ladderPriceFlag:'',
 				ladderPriceList:'',
 				isRecommend:false,
+				isRarameter:true,
+				isService:false,
 				isEvaluate:false,
 				isAnimation:false,
 				skeletonShow:true,
@@ -223,6 +248,7 @@
 				productImage:[],
 				retailPrice:0,
 				buyRetailPrice:0,
+				buyRetailPriceStep:1,
 				stock:0,
 				number:0,
 				minBuyNumber:0,
@@ -271,6 +297,7 @@
 					this.ladderPriceFlag = this.product.ladderPriceFlag;
 					this.html = this.product.productDetail == null ? this.html : this.$api.adaptRichTextImg(this.product.productDetail.detailInfo)
 					this.stock = this.product.stock
+					this.buyRetailPriceStep = this.product.step
 					this.number = this.product.minBuyNumber
 					this.minBuyNumber = this.product.minBuyNumber
 					//处理商品图片列表
@@ -340,16 +367,18 @@
 			},
 			tabClick(index) {//商品详情&&供应商信息tab切换
 				this.tabCurrentIndex = index;
-				if(this.tabCurrentIndex == 2){
-					this.isRecommend = true
-				}
-				if(this.tabCurrentIndex == 3){
-					this.isEvaluate = true
+				switch(this.tabCurrentIndex){
+					case 1:
+						this.isRarameter = true
+						break;
+					case 2:
+						this.isService = true
+						break;
+					case 3:
+						this.isRecommend = true
+						break;
 				}
 			},
-			changeTab(e) {
-				this.tabCurrentIndex = e.target.current;
-			},
 			handleContact(e){//跳转小程序客服
 
 			},
@@ -357,12 +386,12 @@
 				authorize.getSetting().then(wxResponse =>{// console.log('是否已授权',res);//0:为取消授权 1:为已授权 2:为未操作
 					if(wxResponse == 1){
 						if(this.hasLogin){
-							this.$api.switchTabTo('/pages/tabBar/cart/cart')
+							this.$api.navigateTo('/pages/goods/cart')
 						}else{					
 							this.$api.navigateTo('/pages/login/login?type=1')
 						}
 					}else{
-						this.$api.navigateTo('/pages/authorization/authorization')
+						this.$api.navigateTo('/pages/authorization/authorization?type=1')
 					}
 				})	
 			},
@@ -375,12 +404,16 @@
 							this.$api.navigateTo('/pages/login/login?type=1')
 						}
 					}else{
-						this.$api.navigateTo('/pages/authorization/authorization')
+						this.$api.navigateTo('/pages/authorization/authorization?type=1')
 					}	
 				})
 			},	
 			changeCountAdd(){//popup弹窗数量增加按钮
-				this.number++
+				if(this.buyRetailPriceStep == 2){
+					this.number+=this.minBuyNumber
+				}else{
+					this.number++
+				}
 				this.processActivityPrice()
 			},
 			changeCountSub(){//popup弹窗数量减按钮
@@ -390,7 +423,11 @@
 					this.$util.msg(`该商品最小起订量为${this.minBuyNumber}`,2000);
 					return
 				}else{
-					this.number--
+					if(this.buyRetailPriceStep == 2){
+						this.number-=this.minBuyNumber
+					}else{
+						this.number--
+					}
 					this.processActivityPrice()
 					this.isQuantity =false
 				}
@@ -402,10 +439,13 @@
 				}else if(_value < this.minBuyNumber){	
 					this.$util.msg(`该商品最小起订量为${this.minBuyNumber}`,2000);
 					this.number = this.minBuyNumber
+				}else if( _value % this.minBuyNumber !=0 ){
+					this.$util.msg(`购买量必须为起订量的整数倍`,2000);
+					this.number = this.minBuyNumber
 				}else{
 					this.number = e.detail.value
-					this.processActivityPrice()
 				}
+				this.processActivityPrice()
 			},
 			processActivityPrice(){//单独处理活动价格和阶梯价格
 				if(this.ladderPriceFlag == '0' && this.product.actStatus == 0){
@@ -465,7 +505,7 @@
 					if(wxResponse == 1){
 						this.$api.navigateTo(`/pages/login/login?type=detilType&id=${this.productID}`)
 					}else{
-						this.$api.navigateTo('/pages/authorization/authorization')
+						this.$api.navigateTo('/pages/authorization/authorization?type=1')
 					}
 				})	
 			},
@@ -486,6 +526,10 @@
 			getOptionFn(e){
 				this.isShareType = e.type
 			},
+			goSupplier(){
+				this.$api.setStorage('supplierInfo',this.shop)
+				this.$api.navigateTo('/pages/goods/supplier')
+			},
 			discard(){
 				//丢弃
 			}
@@ -555,6 +599,9 @@
 	.banner{
 		width: 100%;
 		height: 750rpx;
+		.product-img{
+			width: 750rpx;
+		}
 		image {
 			width: 100%;
 			height: 100%;
@@ -628,10 +675,23 @@
 				font-size: $font-size-28;
 				font-weight: 600;
 			}
+			.wrap-main-text{
+				display: block;
+				float: left;
+				font-weight: normal;
+			}
 			.wrap-main-none{
+				display: block;
+				width: 256rpx;
+				height: 44rpx;
+				padding-left: 20rpx;
+				border-radius: 11rpx;
+				background: $btn-confirm;
+				float: right;
 				line-height: 44rpx;
-				color: #3A82FF;
-				font-size: $font-size-28;
+				color: #FFFFFF;
+				text-align: center;
+				font-size: $font-size-24;
 			}
 			.p-active{
 				width: 130rpx;
@@ -689,6 +749,18 @@
 					margin-right: 5rpx;
 					font-size: $font-size-28;
 				}
+				.p-login-btn{
+					display: block;
+					height: 44rpx;
+					padding: 0 10rpx 0 20rpx;
+					border-radius: 11rpx;
+					background: $btn-confirm;
+					float: right;
+					line-height: 44rpx;
+					color: #FFFFFF;
+					text-align: center;
+					font-size: $font-size-24;
+				}
 			}
 		}
 		.wrap-active{
@@ -767,7 +839,7 @@
 				color: #FFFFFF;
 				text-align: center;
 				border-radius: 20rpx;
-				background:#FFBB77;
+				background:#A69DFE;
 				margin: 0 22rpx 22rpx 0;
 				display: inline-block;
 			}
@@ -840,6 +912,47 @@
 			}
 		}
 	}
+	.product-supplier{
+		width: 702rpx;
+		height: 88rpx;
+		padding: 0 24rpx;
+		background-color: #FFFFFF;
+		margin-bottom: 24rpx;
+		position: relative;
+		display: flex;
+		.title{
+			display: flex;
+			flex: 2;
+			line-height: 88rpx;
+			display: inline-block;
+			float: left;
+			font-size: $font-size-28;
+			color: $text-color;
+		}
+		.name{
+			display: flex;
+			flex: 2;
+			line-height: 88rpx;
+			display: inline-block;
+			float: left;
+			font-size: $font-size-24;
+			color: #D0D0D0;
+			float: right;
+			padding-right: 48rpx;
+			overflow: hidden;
+			text-overflow:ellipsis;
+			white-space: nowrap;
+			text-align: right;
+		}
+		.icon-xiayibu{
+			line-height: 88rpx;
+			display: inline-block;
+			position: absolute;
+			width: 48rpx;
+			top: 0;
+			right: 0;
+		}
+	}
 	.product-details {
 		height: 100%;
 		background: #FFFFFF;
@@ -1103,8 +1216,8 @@
 			bottom: -294rpx;
 			width: 702rpx;
 			padding: 24rpx 24rpx 36rpx 24rpx;
-			height: 236rpx;
-			border-radius: 30rpx 30rpx 0 0;
+			height: 260rpx;
+			border-radius: 20rpx 20rpx 0 0;
 			background-color: #fff;
 			display: flex;
 			flex-wrap: wrap;
@@ -1115,6 +1228,7 @@
 			.btn {
 				width: 100%;
 				height: 88rpx;
+				margin-top: 20rpx;
 				.button {
 					width: 100%;
 					height: 88rpx;
@@ -1180,14 +1294,19 @@
 			justify-content: space-between;
 			align-items: center;
 			width: 536rpx;
-			height: 88rpx;
-			padding: 13rpx 0 0 0;
+			height: auto;
 			float: left;
 			.layer-nunbox-t{
 				width: 100%;
 				height:44rpx;
 				position:relative;
 				display: flex;
+				margin-bottom: 10rpx;
+				.text{
+					font-size: $font-size-24;
+					line-height: 48rpx;
+					color: #999999;
+				}
 				.layer-nunbox-text{
 					line-height: 44rpx;
 					font-size: $font-size-28;

+ 44 - 0
pages/goods/supplier.vue

@@ -0,0 +1,44 @@
+<template>
+	<view class="container all-type-list-wrapper">
+		<supplier-details :shop="shopInfo" v-if="isLoading"></supplier-details>
+	</view>
+</template>
+
+<script>
+	import supplierDetails from "@/components/cm-module/productDetails/supplierDetails" //供应商详情
+	export default{
+		components:{
+			supplierDetails
+		},
+		data(){
+			return{
+				shopInfo:{},
+				isLoading:false
+			}
+		},		
+		onLoad(option) {
+			
+		},
+		methods:{
+			
+		},
+		onShow() {
+			this.$api.getComStorage('supplierInfo').then((resolve) =>{
+				this.shopInfo = resolve
+				this.isLoading = true
+			}).catch(reject =>{
+				console.log('异常处理=========>',reject)
+			})
+		}
+	}
+</script>
+
+<style lang="scss">
+	page {
+		background: $sub-bg-color;
+		.all-type-list-wrapper {
+			display: flex;
+			flex-direction: column;
+		}
+	}
+</style>

+ 16 - 10
pages/login/apply.vue

@@ -138,7 +138,7 @@
 							   <text class="item-text">{{item.name}}</text>
 							</label>
 						</checkbox-group>
-					</view>
+					</view>	
 				</view>	
 				<view class="register-from group btn">
 					<view class="content-class btn">
@@ -169,7 +169,7 @@
 							   <text class="item-text">{{item.name}}</text>
 							</label>
 						</checkbox-group>
-					</view>
+					</view>	
 				</view>	
 				<view class="register-from group btn">
 					<view class="content-class btn">
@@ -180,7 +180,7 @@
 				</view>
 				<view class="register-from group btn" v-show="isShowAustomItem">
 					<view class="content-class btn">
-						<input class="row-input other" type="text" v-model="customItemValue" placeholder="请输入自定义项目"  @input="onBlurInput" maxlength="5"/>
+						<input class="row-input other" type="text" v-model="customItemValue" placeholder="请输入自定义项目"  @blur="onBlurInput" maxlength="5"/>
 						<button type="default" 
 								class="confirm-btn" 
 								:class="[isDisabled === true ? 'disabled' : 'none']" 
@@ -190,7 +190,7 @@
 					</view>
 				</view>
 			</view>
-			<view class="register-fiexd clearfix">
+			<view class="register-fiexd clearfix" :style="{paddingBottom :isIphoneX ? '68rpx' : '36rpx'}">
 				<view class="register-row ">
 					<view class="register-btn sub" @click.stop="organizationUpdateInfo">确认升级并提交审核</view>
 				</view>
@@ -221,7 +221,10 @@ import { mapMutations } from 'vuex';
 					showCapsule: 1, // 是否显示左上角图标  1表示显示  0表示不显示,
 					showSearch: 0,
 					title: '升级会员机构', // 导航栏 中间的标题
+					haveBack:true,
+					textLeft:this.$store.state.isIphone
 				},
+				isIphoneX:this.$store.state.isIphoneX,
 				CustomBar:this.CustomBar,// 顶部导航栏高度
 				errorList:[],
 				tabCurrentIndex:3,	
@@ -669,8 +672,8 @@ import { mapMutations } from 'vuex';
 				}
 				.register-from{
 					width: 654rpx;
-					height: 40rpx;
-					padding: 24rpx;
+					height: 88rpx;
+					padding:0 24rpx;
 					background: $sub-bg-color;
 					border-radius: 14rpx;
 					position: relative;
@@ -678,7 +681,7 @@ import { mapMutations } from 'vuex';
 						text-align: left;
 						font-size: $font-size-28;
 						color: #666666;
-						line-height: 40rpx;
+						line-height: 88rpx;
 						float: left;
 					}
 					.row-input{
@@ -686,15 +689,15 @@ import { mapMutations } from 'vuex';
 						padding-left:10rpx;
 						font-size: $font-size-28;
 						color: $text-color;
-						line-height: 40rpx;
+						line-height: 88rpx;
 						float: left;
-						height: 40rpx;
+						height: 88rpx;
 						&.none{
 							color: #999999;
 						}
 						&.picker{
 							text-align: left;
-							color: #999999;
+							color: #333333;
 						}
 						&.keshi{
 							width: 550rpx;
@@ -828,6 +831,9 @@ import { mapMutations } from 'vuex';
 							border-radius: 10rpx;
 							line-height: 88rpx;
 							text-align: center;
+							&.other{
+								width: 213rpx;
+							}
 							&.none{
 								color: #FFFFFF;
 								background: $btn-confirm;

+ 2 - 2
pages/login/bindOperator.vue

@@ -111,8 +111,8 @@
 			getWxAuthorize(){// 根据微信的code获取用户登录状态:1已登录过 -1未登录过
 				authorize.getCode('weixin').then(wechatcode =>{
 					// 根据微信的code获取用户登录状态:1已登录过 -1未登录过
-					authorize.getUserInfo('weixin').then(res =>{
-						userInfoLogin({code:wechatcode}).then(response =>{
+					authorize.getUserInfo('weixin').then(wxResponse =>{
+						userInfoLogin({code:wechatcode,encryptedData:wxResponse.encryptedData,iv:wxResponse.iv}).then(response =>{
 							this.login(response.data)
 							uni.setStorageSync('token',response.data.token)
 							uni.removeStorageSync('sessionid')

+ 1 - 2
pages/login/bindwechat.vue

@@ -180,9 +180,8 @@
 								nickName:res.userInfo.nickName,
 								headimgurl:res.userInfo.avatarUrl,
 						}
-						console.log(params)
+						// console.log(params)
 						bindingWechat(params).then(response =>{
-							wxLogin.wxLoginAuthorize()
 							this.$api.switchTabTo('/pages/tabBar/user/user')
 						}).catch(error =>{
 							this.$util.msg(error.msg,2000)

+ 17 - 11
pages/login/information.vue

@@ -152,7 +152,7 @@
 				</view>
 				<view class="register-from group btn" v-show="isShowAustomItem">
 					<view class="content-class btn">
-						<input class="row-input other" type="text" v-model="customItemValue" placeholder="请输入自定义项目"  @input="onBlurInput" maxlength="5"/>
+						<input class="row-input other" type="text" v-model="customItemValue" placeholder="请输入自定义项目"  @blur="onBlurInput" maxlength="5"/>
 						<button type="default" 
 								class="confirm-btn" 
 								:class="[isDisabled ? 'disabled' : 'none']" 
@@ -227,7 +227,7 @@
 							:class="isShowInput ? '':''"
 				/>
 			</view>
-			<view class="register-fiexd clearfix">
+			<view class="register-fiexd clearfix" :style="{paddingBottom :isIphoneX ? '68rpx' : '36rpx'}">
 				<view class="register-row">
 					<view class="register-btn sub" @click.stop="organizationUpdateInfo">确定</view>
 				</view>
@@ -249,13 +249,14 @@
 		},
 		data() {
 			return{
-				nvabarData: {		//顶部自定义导航
+				nvabarData: {//顶部自定义导航
 					showCapsule: 1, // 是否显示左上角图标  1表示显示  0表示不显示,
 					showSearch: 0,
 					title: '修改资料', // 导航栏 中间的标题
 					haveBack:true,
-					textLeft:this.$store.state.isIphoneX
+					textLeft:this.$store.state.isIphone
 				},
+				isIphoneX:this.$store.state.isIphoneX,
 				CustomBar:this.CustomBar,// 顶部导航栏高度
 				isPreviewImage:false,   	//预览图片开关
 				userID:'',					//用户ID
@@ -672,8 +673,8 @@
 				}
 				.register-from{
 					width: 654rpx;
-					height: 40rpx;
-					padding: 24rpx;
+					height: 88rpx;
+					padding:0 24rpx;
 					background: $sub-bg-color;
 					border-radius: 14rpx;
 					position: relative;
@@ -681,7 +682,7 @@
 						text-align: left;
 						font-size: $font-size-28;
 						color: #666666;
-						line-height: 40rpx;
+						line-height: 88rpx;
 						float: left;
 					}
 					.row-input{
@@ -689,15 +690,15 @@
 						padding-left:10rpx;
 						font-size: $font-size-28;
 						color: $text-color;
-						line-height: 40rpx;
+						line-height: 88rpx;
 						float: left;
-						height: 40rpx;
+						height: 88rpx;
 						&.none{
 							color: #999999;
 						}
 						&.picker{
 							text-align: left;
-							color: #999999;
+							color: #333333;
 						}
 						&.keshi{
 							width: 550rpx;
@@ -810,9 +811,10 @@
 						display: flex;
 						flex-flow: row wrap;
 						justify-content: space-between;
+						align-items: center;
 						&.btn{
 							margin: 0 auto;
-							margin-left: 126rpx;
+							margin-left: 116rpx;
 						}
 						.row-input{
 							display: flex;
@@ -830,6 +832,9 @@
 							border-radius: 10rpx;
 							line-height: 88rpx;
 							text-align: center;
+							&.other{
+								width: 213rpx;
+							}
 							&.none{
 								color: #FFFFFF;
 								background: $btn-confirm;
@@ -848,6 +853,7 @@
 						  text-align: center;
 						  box-sizing: border-box;
 						  border: 1rpx solid #EFEFEF;
+						  float: left;
 						  checkbox {
 							display: none;
 						  }

+ 1 - 1
pages/login/login.vue

@@ -98,7 +98,7 @@
 		onShow() {
 			authorize.getSetting().then(wxResponse =>{// console.log('是否已授权',res);//0:为取消授权 1:为已授权 2:为未操作
 				if(wxResponse == 1){
-					wxLogin.wxLoginAuthorize()
+					wxLogin.wxLoginQuick()
 				}else{
 					this.$api.navigateTo('/pages/authorization/authorization?type=0')
 				}	

+ 25 - 38
pages/login/logincode.vue

@@ -13,35 +13,24 @@
 				   placeholder="请输入邀请码"
 			/>
 		</view>
-		<view class="login-btn"  @click="goLogin">登录</view>
+		<view class="login-row" @click.stop="this.$api.navigateTo('/pages/login/register')"><text>免费注册</text></view>
+		<view class="login-btn"  @click.stop="goLogin">登录</view>
+		<view class="login-btn-last" @click.stop="this.$api.navigateTo('/pages/login/login')">账号登录</view>
 	</view>
 </template>
 
 <script>
+	import authorize from '@/common/config/authorize.js'
 	import {mapState,mapMutations } from 'vuex';
-	import authorize from '@/common/config/authorize.js' 
 	import { invitationCodeLogin  } from '@/api/use.js'
 	export default{
 		data() {
 			return{
 				invitationCode:'',  //获取用户登录的邀请码
-				loginType:'',		//跳转类型
-				alertText:'',
-				listType: '',
-				listVal: '',
-				detilType:'',
-				id:''//商品ID
 			}
 		},
 		onLoad(option) {
-			let data = JSON.parse(option.data);
-			this.getOption = data
-			this.loginType = option.type;
-			this.id = option.id
-			if(option.listType) {
-				this.listType = option.listType;
-				this.listVal = option.listVal;
-			}
+
 		},
 		methods:{
 			...mapMutations(['login']),
@@ -68,27 +57,6 @@
 						})
 					}
 				})
-			},
-			goUserLogininit(){
-				let url;
-				if(this.loginType) {
-					if(this.loginType=='detilType'){
-						this.$api.redirectTo(`/pages/goods/product?id=${this.id}&page=2`);
-					}else if(this.loginType=='search'){
-						this.$api.redirectTo('/pages/search/search');
-					}else if(this.loginType == 1){
-						url ='/pages/tabBar/cart/cart'
-					}else if(this.loginType == 4){
-						url ='/pages/tabBar/user/user'
-					}else {
-						url ='/pages/tabBar/home/home'
-					}
-					uni.switchTab({
-						url
-					})
-				} else if(this.listType) {
-					this.$api.navToListPage({type:this.listType,value:this.listVal,lType:'4'});
-				}
 			}
 		}
 	}
@@ -129,7 +97,7 @@
 			height: 40rpx;
 			padding: 24rpx;
 			margin: 0 auto;
-			margin-bottom: 60rpx;
+			margin-bottom: 24rpx;
 			background: #F7F7F7;
 			border-radius: 14rpx;
 			.input{
@@ -142,6 +110,13 @@
 				border-radius: 14rpx;
 			}
 		}
+		.login-row{
+			padding: 0 24rpx;
+			font-size: $font-size-28;
+			line-height: 40rpx;
+			color: #E15616;
+			margin-bottom: 48rpx;
+		}
 		.login-btn{
 			width: 702rpx;
 			height: 88rpx;
@@ -153,6 +128,18 @@
 			text-align: center;
 			background: $btn-confirm;
 		}
+		.login-btn-last{
+			width: 702rpx;
+			height: 86rpx;
+			border-radius: 14rpx;
+			font-size: $font-size-28;
+			line-height: 88rpx;
+			color: $color-system;
+			margin: 0 auto;
+			text-align: center;
+			border: 1px solid $color-system;
+			margin-top: 20rpx;
+		}
 		.model-authorization{
 			width: 100%;
 			height: 100%;

+ 72 - 474
pages/login/register.vue

@@ -1,7 +1,7 @@
 <template>
-	<view class="container register" :style="{paddingTop:CustomBar+'px'}">
+	<view class="container register" :style="{paddingTop:CustomBar+'px'}" v-if="isWxAuthorize">
 		<cu-custom :navbar-data='nvabarData'  @navigateBack="hanldNavigateBack"></cu-custom>
-		<view class="register-main clearfix" v-if="tabCurrentIndex === 1">
+		<view class="register-main clearfix">
 			<view class="register-logo">
 				<image class="logo" src="../../static/login-logo@3x.png" mode=""></image>
 				<text class="logo-text">生美/医美采购服务平台</text>
@@ -45,6 +45,13 @@
 				</view>
 			</view>
 			<view class="register-main clearfix">
+				<view class="register-row login">
+					<view class="row-login" @click.stop="this.$api.navigateTo('/pages/login/login')">账号登录</view>
+					<view class="row-logincode" @click.stop="this.$api.navigateTo('/pages/login/logincode')">邀请码登录</view>
+				</view>
+				<view class="register-row ">
+					<view class="register-btn sub" @click.stop="registerStepsfirst">注册</view>
+				</view>
 				<view class="register-agree">
 					<view class="agree-text"  @tap.stop="agreeCheck()">
 						<button class="checkbox iconfont" :class="[isCheck?'icon-gouxuan':'icon-weigouxuan']"></button> 
@@ -54,215 +61,21 @@
 						<text @click.stop="this.$api.navigateTo('/pages/service/privacyagree')">《隐私权政策》</text>
 					</view>
 				</view>
-				<view class="register-row ">
-					<view class="register-btn sub" @click.stop="registerStepsfirst">注册</view>
-				</view>
 				<view class="register-consult"  @click.stop="goFastConsult">
 					<text class="iconfont icon-kefunv"></text>
 					<text class="text">入驻咨询</text>
 				</view>
 			</view>
 		</view>
-		<view class="register-main detailed clearfix" v-if="tabCurrentIndex === 2">
-			<view class="register-row clearfix">
-				<view class="register-title first"><text>补充以下详细信息即可升级为会员机构,</text></view>
-				<view class="register-title"><text>享受更多更好的服务。</text></view>
-			</view>	
-			<view class="register-row none clearfix">
-				<view class="register-from">
-					<view class="label">邮箱:</view>
-					<input class="row-input" type="text" name="input" v-model="registerEmail" placeholder="请输入您的常用邮箱" maxlength="30"/>
-				</view>
-				<view class="register-tip"><text>提示:邮箱可用作登录账号,请使用公司邮箱或法人邮箱</text></view>
-			</view>
-			<view class="register-row clearfix">
-				<view class="register-from">
-					<view class="label">机构名称:</view>
-					<input class="row-input" type="text" name="input" v-model="clubName" placeholder="请输入您的机构名称" maxlength="30"/>
-				</view>
-			</view>
-			<view class="register-row clearfix">
-				<view class="register-from">
-					<view class="label">机构简称:</view>
-					<input class="row-input" type="text" v-model="abbreviation" placeholder="请输入您的机构简称" maxlength="10"/>
-				</view>
-			</view>
-			<view class="register-row clearfix">
-				<view class="register-from"  @click="showMulLinkageThreePicker">
-					<view class="label">机构地址:</view>
-					<text class="row-input" :class="addressData.address === '请选择机构所在地区' ? 'none' : ''">
-						{{addressData.address}}
-					</text>		
-					<text class="iconfont icon-xiayibu"></text>
-				</view>
-			</view>
-			<view class="register-row text-textarea clearfix">
-				<view class="textarea show" v-if="isShowInput">{{addressData.addressDetail ? addressData.addressDetail :'详细地址:如道路、门牌号、小区等'}}</view>
-				<textarea 	v-else
-							class="textarea" 
-							type="text" 
-							v-model="addressData.addressDetail" 
-							placeholder="详细地址:如道路、门牌号、小区等" 
-							placeholder-class="placeholder"
-							maxlength="25"
-							@input="onTextareaInput"
-							:class="isShowInput ? '':''"
-				/>
-			</view>
-			<view class="register-row clearfix" >
-				<view class="register-from">
-					<view class="label">营业执照编号:</view>
-					<input class="row-input" type="text" v-model="socialCreditCode" placeholder="请填写社会统一信用代码" maxlength="18"/>
-				</view>
-			</view>
-			<view class="register-row clearfix">
-				<view class="register-picture">
-					<view class="label">营业执照:</view>
-					<view class="upload-picture">
-						<view class="upload-none" v-if="uploadBusinessImage === ''"  @click="chooseBusinessImage"><text class="iconfont icon-jiahao"></text></view>
-						<view class="upload-image" v-else>
-							<image :src="uploadBusinessImage" mode="" @click="viewBusinessImage"></image>
-							<view class="upload-del" @click="delBusinessImage">
-								<text class='iconfont icon-shanchu1'></text>
-							</view>
-						</view>
-					</view>
-				</view>
-				<view class="register-picture">
-					<view class="label">门头照:</view>
-					<view class="upload-picture">
-						<view class="upload-none" v-if="uploadMentuzImage === ''" @click="chooseMentuzImage"><text class="iconfont icon-jiahao"></text></view>
-						<view class="upload-image" v-else>
-							<image :src="uploadMentuzImage" mode=""  @click="viewMentuzImage"></image>
-							<view class="upload-del" @click="delMentuzImage">
-								<text class='iconfont icon-shanchu1'></text>
-							</view>
-						</view>
-					</view>
-				</view>
-			</view>
-			<view class="register-row clearfix">
-				<view class="register-from picker">
-					<view class="label">机构类型:</view>
-						<view class="row-input picker" @click="bindPickerChange">{{ organizationTypeText }}</view>
-					<text class="iconfont icon-xiayibu"></text>
-				</view>
-			</view>
-			<view class="register-row clearfix" v-if="isOrganizationType == 1" >
-				<view class="register-from radio">
-					<radio-group @change="radioChange">
-						<label class="row-input" v-for="(item, index) in beautyList" :key="item.value">
-							<radio class="row-radio" :value="item.value" :checked="index === current" color="#E15616"/>
-							<view class="row-text">{{item.name}}</view>
-						</label>
-					</radio-group>
-				</view>
-			</view>
-			<view class="register-row clearfix" v-show="isDepartment" >
-				<view class="register-from">
-					<view class="label">科室:</view>
-					<input class="row-input keshi" type="text" v-model="department" placeholder="请填写经营的科室,至少三个,用逗号隔开" maxlength="16"/>
-				</view>
-			</view>
-			<view class="register-row clearfix" v-if="isOrganizationType == 1">
-				<view class="register-picture zz">
-					<view class="label zz">医疗执业许可证:</view>
-					<view class="upload-picture">
-						<view class="upload-none" v-if="uploadMedicalImage === ''" @click="chooseMedicalImage"><text class="iconfont icon-jiahao"></text></view>
-						<view class="upload-image" v-else>
-							<image :src="uploadMedicalImage" mode=""  @click="viewMedicalImage"></image>
-							<view class="upload-del" @click="delMedicalImage">
-								<text class='iconfont icon-shanchu1'></text>
-							</view>
-						</view>
-					</view>
-				</view>
-			</view>
-			<view class="register-row clearfix" v-if="isOrganizationType == 1">
-				<view class="register-from group">
-					<view class="label">主营内容:</view>
-					<view class="content-class">
-						<checkbox-group @change="chooseMaleLike" >
-							<label class="item" v-for="(item, index) in mentuzCampList" :key="index" :class="{on: item.checked}">
-							   <checkbox :value="item.value"></checkbox>
-							   <text class="item-text">{{item.name}}</text>
-							</label>
-						</checkbox-group>
-					</view>
-				</view>	
-				<view class="register-from group btn">
-					<view class="content-class btn">
-						<view class="item" @click="showAustomItem">
-							<text class="item-text">其他</text>
-						</view>
-					</view>
-				</view>
-				<view class="register-from group btn" v-show="isShowAustomItem">
-					<view class="content-class btn">
-						<input class="row-input other" type="text" v-model="customItemValue" placeholder="请输入自定义项目"  @blur="onBlurInput" maxlength="5"/>
-						<button type="default" 
-								class="confirm-btn other" 
-								:class="[isDisabled === true ? 'disabled' : 'none']" 
-								:disabled="isDisabled"
-								@click.stop="addCustomItem"
-						>确认添加</button>
-					</view>
-				</view>
-			</view>
-			<view class="register-row clearfix" v-if="isOrganizationType == 2">
-				<view class="register-from group">
-					<view class="label">主营内容:</view>
-					<view class="content-class">
-						<checkbox-group @change="chooseMaleLikes">
-							<label class="item" v-for="(item, index) in medicaCampList" :key="index" :class="{on: item.checked}">
-							   <checkbox :value="item.value"></checkbox>
-							   <text class="item-text">{{item.name}}</text>
-							</label>
-						</checkbox-group>
-					</view>
-				</view>	
-				<view class="register-from group btn">
-					<view class="content-class btn">
-						<view class="item" @click="showAustomItem">
-							<text class="item-text">其他</text>
-						</view>
-					</view>
-				</view>
-				<view class="register-from group btn" v-show="isShowAustomItem">
-					<view class="content-class btn">
-						<input class="row-input other" type="text" v-model="customItemValue" placeholder="请输入自定义项目"  @input="onBlurInput" maxlength="5"/>
-						<button type="default" 
-								class="confirm-btn" 
-								:class="[isDisabled === true ? 'disabled' : 'none']" 
-								:disabled="isDisabled"
-								@click.stop="addCustomItem"
-						>确认添加</button>
-					</view>
-				</view>
-			</view>
-			<view class="register-fiexd clearfix">
-				<view class="register-row clearfix">
-					<view class="register-btn none"  @click="registerGoLogin">先跳过,以后再升级</view>
-				</view>
-				<view class="register-row ">
-					<view class="register-btn sub" @click.stop="registerStepsSub">确认升级并提交审核</view>
-				</view>
-			</view>
-			<mpvue-city-picker :themeColor="themeColor"
-								ref="mpvueCityPicker" 
-							    :pickerValueDefault="cityPickerValueDefault"
-								@onCancel="onCancel" 
-								@onConfirm="onConfirm">
-			</mpvue-city-picker>
-		</view>
 	</view>
 </template>
 
 <script>
-	import { mapMutations } from 'vuex';
+	import { mapState,mapMutations } from 'vuex';
+	import authorize from '@/common/config/authorize.js'
+	import wxLogin from "@/common/config/wxLogin.js"
 	import mpvueCityPicker from '@/components/mpvue-citypicker/mpvueCityPicker.vue'
 	import { beautyList,mentuzCampNullList,medicaCampNullList } from '@/common/json/data.json.js' //本地数据
-	import authorize from '@/common/config/authorize.js' 
 	import { organizationVerifyRegisterFirst,organizationRegister ,organizationLogin } from "@/api/use.js"
 	import { getImageCode, getRegisterMobileCode, uploadFileImage } from "@/api/utils.js"
 	export default{
@@ -271,7 +84,7 @@
 		},
 		data() {
 			return{
-				nvabarData: {		//顶部自定义导航
+				nvabarData: {//顶部自定义导航
 					showCapsule: 1, // 是否显示左上角图标  1表示显示  0表示不显示,
 					showSearch: 0,
 					title: '注册', // 导航栏 中间的标题
@@ -279,59 +92,29 @@
 					textLeft:this.$store.state.isIphone
 				},
 				CustomBar:this.CustomBar,// 顶部导航栏高度
-				tabCurrentIndex:1,			//显示step
-				isPreviewImage:false,   	//预览图片开关
 				isMobileDisabled: false,	//手机验证码按钮控制
 			    mobilCount: '',				//倒计时
 			    mobileCodeText: '获取验证码',
 			    mobilTime: null,
-				registerEmail:'', 		//注册邮箱
 				password:'',			//密码
 				passwordCheck:'',		//校验密码
-				clubName:'',	 		//机构名称
-				abbreviation:'',	 	//机构简称
 				userName:'',	 		//联系人
 				bindMobile:'',		//联系人手机号
 				mobileCode:'',			//手机验证码
 				imageCode:'',			//图形验证码
 				imageCodeUrl:'',		//图形验证码图片
 				imageCodetoken:'',		//图形验证校验
-				socialCreditCode:'',	//统一社会信用代码
 				isAgreed:0,				//是否勾选协议
-				isDisabled:true,
-				isShowInput:false,
 				isCheck:false,			//是否勾选协议
-				uploadBusinessImage:'',	//营业执照图片
-				uploadMentuzImage:'',  	//门头照图片
-				uploadMedicalImage:'', 	//资质照图片
-				department:'',			//科室
-				isDepartment:false,     //是否显示科室
-				secondClubType:'',		//机构类型二级分类
-				mainpro:'',				//主营内容
-				isOrganizationType:0,
-				organizationTypeText:'请选择机构类型',
-				beautyList:beautyList,
-				mentuzCampList:mentuzCampNullList,
-				medicaCampList:medicaCampNullList,
-				typtIndex:0,
-				organizationType:3,
-				current:0,
-				isShowAustomItem:false, //是否显示其他添加
-				customItemValue:'', 	//自定义项目
-				addressData:{
-					address:'请选择机构所在地区',
-					townID:'',			//区ID
-					cityID:'',			//区ID
-					provinceID:'',		//区ID
-					addressDetail: '',	//地址
-				},
 				userID:'',		//机构userID
 				clubID:'',		//机构ID
-				getOption:''	//页面传递参数
 			}
 		},
 		onLoad(option) {
-			this.getOption = JSON.stringify(option)
+			
+		},
+		computed:{
+			...mapState(['isWxAuthorize'])
 		},
 		methods:{
 			...mapMutations(['login']),
@@ -343,32 +126,28 @@
 				})
 			},
 			registerStepsfirst(){
-				let params ={
-						userName:this.userName,
-						bindMobile:this.bindMobile,
-						activationCode:this.mobileCode,
-						password:this.password,
-						passWordConfirm:this.passwordCheck,
-						isAgreed:this.isAgreed,				//是否勾选协议
-				}
-				organizationVerifyRegisterFirst(params).then(response =>{
-					this.$util.msg('注册成功',2000);	
-					this.userID = response.data.userID
-					this.clubID = response.data.clubID
-					setTimeout(()=>{
-						this.tabCurrentIndex = 2
-						this.nvabarData.title = '升级会所机构'
-					},2000)
-				}).catch(error =>{
-					this.$util.msg(error.msg,2000);
-				})
-			},
-			registerGoLogin(){
-				organizationLogin({mobileOrEmail:this.bindMobile,password:this.password,source:'www'}).then(response =>{
-					this.storeUpdataeStatus(response.data)
-					this.$api.navigateTo('/pages/login/bindwechat')
-				}).catch(error =>{
-					this.$util.msg(error.msg,2000);
+				wx.getUserInfo({
+					success: res => {
+						let params ={
+								userName:this.userName,
+								bindMobile:this.bindMobile,
+								activationCode:this.mobileCode,
+								password:this.password,
+								passWordConfirm:this.passwordCheck,
+								isAgreed:this.isAgreed,	//是否勾选协议
+								nickName:res.userInfo.nickName,
+								headimgurl:res.userInfo.avatarUrl,
+						}
+						organizationVerifyRegisterFirst(params).then(response =>{
+							this.storeUpdataeStatus(response.data)
+							wxLogin.wxLoginAuthorize()
+							setTimeout(() =>{
+								this.$api.switchTabTo('/pages/tabBar/user/user')
+							},2000)
+						}).catch(error =>{
+							this.$util.msg(error.msg,2000);
+						})		
+					}
 				})
 			},
 			storeUpdataeStatus(data){
@@ -376,69 +155,6 @@
 				this.$store.commit('updateStatus',data)
 				this.login(data);
 			},
-			registerStepsSub(){
-				if( this.registerEmail == ''){
-					this.$util.msg('请输入邮箱地址',2000);
-					return
-				}
-				if( !this.$reg.isEmail(this.registerEmail)){
-					this.$util.msg('请输入正确的邮箱地址',2000);
-					return
-				}
-				if( this.clubName == ''){
-					this.$util.msg('请输入机构名称',2000);
-					return
-				}
-				if( this.addressData.townID == ''){
-					this.$util.msg('请选择机构地址',2000);
-					return
-				}
-				if( this.addressData.addressDetail == ''){
-					this.$util.msg('请填写机构详细地址',2000);
-					return
-				}
-				if( this.socialCreditCode == ''){
-					this.$util.msg('请填写社会统一社会信用代码',2000);
-					return
-				}
-				if( this.uploadBusinessImage == ''){
-					this.$util.msg('请上传您的营业执照',2000);
-					return
-				}
-				if(this.isOrganizationType!=0){
-					if(this.mainpro == ''){
-						this.$util.msg('请选择住机构主营内容',2000);
-						return
-					}
-				}
-				let params ={
-						userID:this.userID,
-						clubID:this.clubID,
-						contractEmail1:this.registerEmail,
-						name:this.clubName,
-						sname:this.abbreviation,
-						provinceID:this.addressData.provinceID,
-						cityID:this.addressData.cityID,
-						townID:this.addressData.townID,
-						address:this.addressData.addressDetail,
-						socialCreditCode:this.socialCreditCode,
-						businessLicenseImage:this.uploadBusinessImage,
-						headpic:this.uploadMentuzImage,
-						firstClubType:this.isOrganizationType, //机构类型分类 医美:0和生美:1
-						secondClubType:this.secondClubType,	 //机构类型二级分类 诊所:1,门诊:2,医院:3
-						department:this.department,			//科室
-						medicalPracticeLicenseImg:this.uploadMedicalImage,//资质图片
-						mainpro:this.mainpro
-				}
-				organizationRegister(params).then(res =>{
-					this.$util.msg('您的升级申请已提交审核',2000);
-					setTimeout(()=>{
-						this.registerGoLogin()
-					},2000)
-				}).catch(error =>{
-					this.$util.msg(error.msg,2000);
-				})
-			},
 			getMobileCodeFn(){
 				if( this.bindMobile == ''){
 					this.$util.msg('请输入手机号',2000);
@@ -477,123 +193,6 @@
 					this.isMobileDisabled = false;
 				})
 			},
-			showMulLinkageThreePicker() {//三级地址联动
-				this.isShowInput = true
-				this.$refs.mpvueCityPicker.show()
-			},
-			onConfirm(e) {//获取选择的地址信息
-				this.addressData.address = e.name;
-				this.addressData.townID = e.townCode;
-				this.addressData.cityID = e.cityCode;
-				this.addressData.provinceID = e.provinceCode;
-			},	
-			onTextareaInput(e){//地址详细信息
-			   this.addressData.addressDetail = e.detail.value;
-			},
-			chooseBusinessImage() {//营业执照图片上传
-				uploadFileImage().then(res =>{
-					this.uploadBusinessImage = JSON.parse(res.data).data
-				})
-			},
-			chooseMentuzImage() {//门头照图片上传
-				uploadFileImage().then(res =>{
-					this.uploadMentuzImage = JSON.parse(res.data).data
-				})
-			},
-			chooseMedicalImage() {//资质照图片上传
-				uploadFileImage().then(res =>{
-					this.uploadMedicalImage = JSON.parse(res.data).data
-				})
-			},
-			viewBusinessImage(e) {//预览营业执照图片
-				this.myPreviewImageFn(this.uploadBusinessImage)
-			},
-			viewMentuzImage(e) {//预览门头照图片
-				this.myPreviewImageFn(this.uploadMentuzImage)
-			},
-			viewMedicalImage(e) {//预览资质照图片
-				this.myPreviewImageFn(this.uploadMedicalImage)
-			},
-			myPreviewImageFn(url){//预览图片公共方法
-				this.isPreviewImage = true
-				let mentuzArray = []
-				mentuzArray.push(url)
-				uni.previewImage({
-					urls: mentuzArray,
-					current: 0
-				});
-			},
-			delBusinessImage(){//删除营业执照图片
-				this.$util.modal('','确定删除营业执照图片吗?','确定','取消',true,() =>{
-					 this.uploadBusinessImage = ''
-				})
-			},
-			delMentuzImage(){//删除门头照图片
-				this.$util.modal('','确定删除门头照图片吗?','确定','取消',true,() =>{
-					this.uploadMentuzImage = ''
-				})
-			},			
-			delMedicalImage(){//删除资质图片
-				this.$util.modal('','确定删除资质图片吗?','确定','取消',true,() =>{
-					this.uploadMedicalImage = ''
-				})
-			},
-			bindPickerChange() {//机构类型选择
-				let self = this
-				uni.showActionSheet({
-					title:'标题',
-					itemList: ['医美', '生美'],
-					success: (e) => {
-						self.isOrganizationType = e.tapIndex+1
-						switch(e.tapIndex){
-							case 0:
-								this.organizationTypeText = '医美'
-								break;
-							case 1:
-								this.organizationTypeText = '生美'
-								break;
-						}
-					}
-				})
-			
-			},
-			bindPickerChange2(e) {
-				this.typtIndex = e.target.value
-				this.isOrganizationType = e.target.value
-			},
-			radioChange(e) {
-				this.secondClubType = e.target.value;
-				if( this.secondClubType == '2' || this.secondClubType == '3'){
-					this.isDepartment = true
-				}else{
-					this.isDepartment = false
-				}
-				for (let i = 0; i < this.beautyList.length; i++) {
-					if (this.beautyList[i].value === this.secondClubType) {
-						this.current = i;
-						break;
-					}
-				}
-			},
-			chooseMaleLike(e){
-				this.mainpro = this.checkLikes(e,this.mentuzCampList)
-			},
-			chooseMaleLikes(e){
-				this.mainpro = this.checkLikes(e,this.medicaCampList)
-			},
-			checkLikes(e,list){
-				let	values = e.detail.value
-				let arr = []
-				list.forEach(item => {
-					if(values.indexOf(item.value) >= 0){
-						this.$set(item,'checked',true)
-						arr.push(item.name)
-					}else{
-						this.$set(item,'checked',false)
-					}
-				})
-				return arr.join('/')
-			},
 			agreeCheck() {
 				this.isCheck = !this.isCheck
 				if(this.isCheck){
@@ -602,34 +201,18 @@
 					this.isAgreed = 0
 				}
 			},
-			onBlurInput(e){//
-				if(e.detail.value ===''){
-					this.isDisabled = true
-				}else{
-					this.isDisabled = false
-				}
-			},
-			showAustomItem() {
-				this.isShowAustomItem = !this.isShowAustomItem
-			},
-			addCustomItem(){
-				if(this.isOrganizationType == 1){
-					let item = {value:`${this.mentuzCampList.length+1}`,name:this.customItemValue}
-					this.mentuzCampList.push(item)
-				}else{
-					let item = {value:`${this.medicaCampList.length+1}`,name:this.customItemValue}
-					this.medicaCampList.push(item)
-				}
-			},
 			goFastConsult(){
 				this.$api.navigateTo('/pages/login/consult')
 			}
 		},
 		onShow() {
-			if(this.isPreviewImage){
-				this.isPreviewImage = false
-				return
-			}
+			authorize.getSetting().then(wxResponse =>{// console.log('是否已授权',res);//0:为取消授权 1:为已授权 2:为未操作
+				if(wxResponse == 1){
+					wxLogin.wxLoginQuick()
+				}else{
+					this.$api.navigateTo('/pages/authorization/authorization?type=0')
+				}	
+			})
 		}
 	}
 </script>
@@ -649,7 +232,7 @@
 				border-radius: 34rpx 0 0 34rpx;
 				position: absolute;
 				right: 0;
-				top: -100rpx;
+				bottom: 120rpx;
 				text-align: left;
 				line-height: 68rpx;
 				padding-left: 20rpx;
@@ -672,22 +255,22 @@
 				display: flex;
 				flex-direction: column;
 				align-items: center;
-				margin: 150rpx 0 20rpx 0;
+				margin: 200rpx 0 20rpx 0;
 				.agree-text{
 					.checkbox{
 						float: left;
 						margin: 4rpx 6rpx 0 0;
 						color: #999999;
-						font-size: $font-size-32;
+						font-size: $font-size-34;
 						&.icon-gouxuan{
 							color: $color-system;
 						}
 					}
-					font-size: 20rpx;
+					font-size: $font-size-24;
 					line-height: 44rpx;
 					color: #999999;
 					text{
-						color:#0091FF;
+						color:#E36125;
 					}
 				}
 			}
@@ -722,6 +305,9 @@
 				&.none{
 					margin-bottom: 0;
 				}
+				&.login{
+					display: flex;
+				}
 				.register-text{
 					line-height: 44rpx;
 					margin-top: 100rpx;
@@ -749,8 +335,8 @@
 				}
 				.register-from{
 					width: 654rpx;
-					height: 40rpx;
-					padding: 24rpx;
+					height: 88rpx;
+					padding:0 24rpx;
 					background: $sub-bg-color;
 					border-radius: 14rpx;
 					position: relative;
@@ -758,7 +344,7 @@
 						text-align: left;
 						font-size: $font-size-28;
 						color: $text-color;
-						line-height: 40rpx;
+						line-height: 88rpx;
 						float: left;
 					}
 					.row-input{
@@ -766,15 +352,15 @@
 						padding-left:10rpx;
 						font-size: $font-size-28;
 						color: $text-color;
-						line-height: 40rpx;
+						line-height: 88rpx;
 						float: left;
-						height: 40rpx;
+						height: 88rpx;
 						&.none{
 							color: #999999;
 						}
 						&.picker{
 							text-align: left;
-							color: #999999;
+							color: #333333;
 						}
 						&.keshi{
 							width: 550rpx;
@@ -987,6 +573,18 @@
 						}
 					}
 				}
+				.row-login{
+					flex: 1;
+					font-size: $font-size-28;
+					color: $text-color;
+					text-align: left;
+				}
+				.row-logincode{
+					flex: 1;
+					font-size: $font-size-28;
+					color: $text-color;
+					text-align: right;
+				}
 				.icon-xiayibu{
 					width: 88rpx;
 					height: 88rpx;

+ 0 - 1175
pages/login/registers.vue

@@ -1,1175 +0,0 @@
-<template>
-	<view class="container register" :style="{paddingTop:CustomBar+'px'}">
-		<cu-custom :navbar-data='nvabarData'  @navigateBack="hanldNavigateBack"></cu-custom>
-		<view class="register-tab">
-			<view class="nav-item" :class="{ current: tabCurrentIndex === 1 }" >
-				  账户信息<view class="line"></view>
-			</view>					
-			<view class="nav-item" :class="{ current: tabCurrentIndex === 2 }" >
-				  基本信息<view class="line"></view>
-			</view>
-			<view class="nav-item" :class="{ current: tabCurrentIndex === 3 }" >
-				  详细信息
-			</view>
-		</view>
-		<view class="register-main clearfix" v-if="tabCurrentIndex === 1">
-			<view class="register-row clearfix">
-				<view class="register-from">
-					<view class="label">邮箱:</view>
-					<input class="row-input" type="text" name="input" v-model="registerEmail" placeholder="请输入您的常用邮箱" maxlength="30"/>
-				</view>
-			</view>
-			<view class="register-row clearfix">
-				<view class="register-from code">
-					<view class="label">邮箱验证码:</view>
-					<input class="row-input" type="text"  name="input" v-model="regEmailCode" placeholder="请输入邮箱验证码" maxlength="4"/>
-				</view>
-				<view class="register-from btn" :class="[isEmialDisabled ? 'disabled' : '']">
-					<button class="row-input"  
-							type="button"  
-							@click.stop="getEmailCodeFn"  
-							:disabled="isEmialDisabled">
-							{{ emailCodeText }}
-					</button>
-				</view>
-			</view>
-			<view class="register-row clearfix">
-				<view class="register-from">
-					<view class="label">登录密码:</view>
-					<input class="row-input" type="password" name="input" v-model="password" placeholder="密码必须为8-16位字母数字组合" maxlength="16"/>
-				</view>
-			</view>
-			<view class="register-row clearfix">
-				<view class="register-from">
-					<view class="label">确认密码:</view>
-					<input class="row-input" type="password" name="input" v-model="passwordCheck" placeholder="请确认密码" maxlength="16"/>
-				</view>
-			</view>
-			<view class="register-row clearfix">
-				<view class="register-btn"  @click="registerStepsfirst">下一步</view>
-			</view>
-			<view class="register-row">
-				<view class="register-text">
-					<text class="txt">注:</text>
-					<text>邮件可能存在1-2分钟的延迟,同时请留意垃圾箱邮件!</text>
-				</view>
-			</view>
-		</view>
-		<view class="register-main clearfix" v-if="tabCurrentIndex === 2">
-			<view class="register-row clearfix">
-				<view class="register-from">
-					<view class="label">机构名称:</view>
-					<input class="row-input" type="text" name="input" v-model="clubName" placeholder="请输入您的机构名称" maxlength="30"/>
-				</view>
-			</view>
-			<view class="register-row clearfix">
-				<view class="register-from">
-					<view class="label">联系人:</view>
-					<input class="row-input" type="text" name="input" v-model="clubContact" placeholder="请输入联系姓名" maxlength="6"/>
-				</view>
-			</view>
-			<view class="register-row clearfix">
-				<view class="register-from">
-					<view class="label">手机号:</view>
-					<input class="row-input" type="number" name="input" v-model="registerMobile" placeholder="请输入手机号" maxlength="11"/>
-				</view>
-			</view>
-			<view class="register-row clearfix">
-				<view class="register-from imgcode">
-					<view class="label">图形验证码:</view>
-					<input class="row-input" type="text" name="input" v-model="imageCode" placeholder="请输入图形验证码" maxlength="4"/>
-				</view>
-				<view class="register-from img-btn">
-					<view class="vscodeimg">
-						<image :src="imageCodeUrl" mode=""></image>
-					</view>
-					<view class="vscod-refresh" @click.stop="getVerificationCode">
-						<text class="iconfont icon-shuaxin"></text>
-						<text class="ref-text">刷新</text>
-					</view>
-				</view>
-			</view>
-			<view class="register-row clearfix">
-				<view class="register-from code">
-					<view class="label">短信验证码:</view>
-					<input class="row-input" type="text" v-model="mobileCode" placeholder="请输入短信验证码" maxlength="6"/>
-				</view>
-				<view class="register-from btn" :class="[isMobileDisabled  ? 'disabled' : '']" >
-					<button class="row-input"  
-							type="button" 
-							@click.stop="getMobileCodeFn" 
-							:disabled="isMobileDisabled">
-							{{ mobileCodeText }}
-					</button>
-				</view>
-			</view>
-			<view class="register-row clearfix">
-				<view class="register-btn"  @click="registerStepsTwo">下一步</view>
-			</view>
-			<view class="register-row clearfix">
-				<view class="register-btn none"  @click="steps(1)">上一步</view>
-			</view>
-		</view>
-		<view class="register-main detailed clearfix" v-if="tabCurrentIndex === 3">
-			<view class="register-tips"><text class="iconfont icon-gantanhao-yuankuang">详细信息请尽量填写,有利于快速审核通过</text></view>
-			<view class="register-row clearfix">
-				<view class="register-from">
-					<view class="label">机构简称:</view>
-					<input class="row-input" type="text" v-model="abbreviation" placeholder="请输入您的机构简称" maxlength="10"/>
-				</view>
-			</view>
-			<view class="register-row clearfix">
-				<view class="register-from"  @click="showMulLinkageThreePicker">
-					<view class="label">机构地址:</view>
-					<text class="row-input" :class="addressData.address === '请选择机构所在地区' ? 'none' : ''">
-						{{addressData.address}}
-					</text>		
-					<text class="iconfont icon-xiayibu"></text>
-				</view>
-			</view>
-			<view class="register-row text-textarea clearfix">
-				<view class="textarea show" v-if="isShowInput">{{addressData.addressDetail ? addressData.addressDetail :'详细地址:如道路、门牌号、小区等'}}</view>
-				<textarea 	v-else
-							class="textarea" 
-							type="text" 
-							v-model="addressData.addressDetail" 
-							placeholder="详细地址:如道路、门牌号、小区等" 
-							placeholder-class="placeholder"
-							maxlength="25"
-							@input="onTextareaInput"
-							:class="isShowInput ? '':''"
-				/>
-			</view>
-			<view class="register-row clearfix" >
-				<view class="register-from">
-					<view class="label">营业执照编号:</view>
-					<input class="row-input" type="text" v-model="socialCreditCode" placeholder="请填写社会统一信用代码" maxlength="16"/>
-				</view>
-			</view>
-			<view class="register-row clearfix">
-				<view class="register-picture">
-					<view class="label">营业执照:</view>
-					<view class="upload-picture">
-						<view class="upload-none" v-if="uploadBusinessImage === ''"  @click="chooseBusinessImage"><text class="iconfont icon-jiahao"></text></view>
-						<view class="upload-image" v-else>
-							<image :src="uploadBusinessImage" mode="" @click="viewBusinessImage"></image>
-							<view class="upload-del" @click="delBusinessImage">
-								<text class='iconfont icon-shanchu1'></text>
-							</view>
-						</view>
-					</view>
-				</view>
-			</view>
-			<view class="register-row clearfix">
-				<view class="register-picture">
-					<view class="label">门头照:</view>
-					<view class="upload-picture">
-						<view class="upload-none" v-if="uploadMentuzImage === ''" @click="chooseMentuzImage"><text class="iconfont icon-jiahao"></text></view>
-						<view class="upload-image" v-else>
-							<image :src="uploadMentuzImage" mode=""  @click="viewMentuzImage"></image>
-							<view class="upload-del" @click="delMentuzImage">
-								<text class='iconfont icon-shanchu1'></text>
-							</view>
-						</view>
-					</view>
-				</view>
-			</view>
-			<view class="register-row clearfix">
-				<view class="register-from picker">
-					<view class="label">机构类型:</view>
-						<view class="row-input picker" @click="bindPickerChange">{{ organizationTypeText }}</view>
-					<text class="iconfont icon-xiayibu"></text>
-				</view>
-			</view>
-			<view class="register-row clearfix" v-if="isOrganizationType == 1" >
-				<view class="register-from radio">
-					<radio-group @change="radioChange">
-						<label class="row-input" v-for="(item, index) in beautyList" :key="item.value">
-							<radio class="row-radio" :value="item.value" :checked="index === current" color="#E15616"/>
-							<view class="row-text">{{item.name}}</view>
-						</label>
-					</radio-group>
-				</view>
-			</view>
-			<view class="register-row clearfix" v-show="isDepartment" >
-				<view class="register-from">
-					<view class="label">科室:</view>
-					<input class="row-input keshi" type="text" v-model="department" placeholder="请填写经营的科室,至少三个,用逗号隔开" maxlength="16"/>
-				</view>
-			</view>
-			<view class="register-row clearfix" v-if="isOrganizationType == 1">
-				<view class="register-picture">
-					<view class="label zz">医疗执业许可证:</view>
-					<view class="upload-picture">
-						<view class="upload-none" v-if="uploadMedicalImage === ''" @click="chooseMedicalImage"><text class="iconfont icon-jiahao"></text></view>
-						<view class="upload-image" v-else>
-							<image :src="uploadMedicalImage" mode=""  @click="viewMedicalImage"></image>
-							<view class="upload-del" @click="delMedicalImage">
-								<text class='iconfont icon-shanchu1'></text>
-							</view>
-						</view>
-					</view>
-				</view>
-			</view>
-			<view class="register-row clearfix" v-if="isOrganizationType == 1">
-				<view class="register-from group">
-					<view class="label">主营内容:</view>
-					<checkbox-group class="content-class" @change="chooseMaleLike" >
-						<label class="item" v-for="(item, index) in mentuzCampList" :key="index" :class="{on: item.checked}">
-						   <checkbox :value="item.value"></checkbox>
-						   <text class="item-text">{{item.name}}</text>
-						</label>
-				    </checkbox-group>
-				</view>	
-				<view class="register-from group btn">
-					<view class="content-class btn">
-						<view class="item" @click="showAustomItem">
-							<text class="item-text">其他</text>
-						</view>
-					</view>
-				</view>
-				<view class="register-from group btn" v-show="isShowAustomItem">
-					<view class="content-class btn">
-						<input class="row-input other" type="text" v-model="customItemValue" placeholder="请输入自定义项目"  @blur="onBlurInput" maxlength="5"/>
-						<button type="default" 
-								class="confirm-btn other" 
-								:class="[isDisabled === true ? 'disabled' : 'none']" 
-								:disabled="isDisabled"
-								@click.stop="addCustomItem"
-						>确认添加</button>
-					</view>
-				</view>
-			</view>
-			<view class="register-row clearfix" v-if="isOrganizationType == 2">
-				<view class="register-from group">
-					<view class="label">主营内容:</view>
-					<checkbox-group class="content-class" @change="chooseMaleLikes">
-						<label class="item" v-for="(item, index) in medicaCampList" :key="index" :class="{on: item.checked}">
-						   <checkbox :value="item.value"></checkbox>
-						   <text class="item-text">{{item.name}}</text>
-						</label>
-				    </checkbox-group>
-				</view>	
-				<view class="register-from group btn">
-					<view class="content-class btn">
-						<view class="item" @click="showAustomItem">
-							<text class="item-text">其他</text>
-						</view>
-					</view>
-				</view>
-				<view class="register-from group btn" v-show="isShowAustomItem">
-					<view class="content-class btn">
-						<input class="row-input other" type="text" v-model="customItemValue" placeholder="请输入自定义项目"  @blur="onBlurInput" maxlength="5"/>
-						<button type="default" 
-								class="confirm-btn" 
-								:class="[isDisabled === true ? 'disabled' : 'none']" 
-								:disabled="isDisabled"
-								@click.stop="addCustomItem"
-						>确认添加</button>
-					</view>
-				</view>
-			</view>
-			<view class="register-fiexd clearfix">
-				<view class="register-agree">
-					<view class="agree-text"  @tap.stop="agreeCheck()">
-						<button class="checkbox iconfont" :class="[isCheck?'icon-gouxuan':'icon-weigouxuan']"></button> 
-						我已阅读并同意
-						<text @click.stop="this.$api.navigateTo('/pages/service/organagree')">《机构协议》</text>
-						<text @click.stop="this.$api.navigateTo('/pages/service/useragree')">《用户协议》</text>及
-						<text @click.stop="this.$api.navigateTo('/pages/service/privacyagree')">《隐私权政策》</text>
-					</view>
-				</view>
-				<view class="register-row ">
-					<view class="register-btn sub" @click.stop="registerStepsSub">提交审核</view>
-				</view>
-				<view class="register-row clearfix">
-					<view class="register-btn none"  @click="steps(2)">上一步</view>
-				</view>
-			</view>
-			<mpvue-city-picker :themeColor="themeColor"
-								ref="mpvueCityPicker" 
-							    :pickerValueDefault="cityPickerValueDefault"
-								@onCancel="onCancel" 
-								@onConfirm="onConfirm">
-			</mpvue-city-picker>
-		</view>
-	</view>
-</template>
-
-<script>
-	import { mapMutations } from 'vuex';
-	import mpvueCityPicker from '@/components/mpvue-citypicker/mpvueCityPicker.vue'
-	import authorize from '@/common/config/authorize.js' 
-	import { organizationRegister , organizationVerifyRegisterFirst ,organizationVerifyRegisterTwo } from "@/api/use.js"
-	import { getImageCode, getEmailCode, getMobileCode, uploadFileImage } from "@/api/utils.js"
-	export default{
-		components:{
-			mpvueCityPicker
-		},
-		data() {
-			return{
-				nvabarData: {		//顶部自定义导航
-					showCapsule: 1, // 是否显示左上角图标  1表示显示  0表示不显示,
-					showSearch: 0,
-					title: '注册', // 导航栏 中间的标题
-					haveBack:true,
-					textLeft:this.$store.state.isIphone
-				},
-				CustomBar:this.CustomBar,// 顶部导航栏高度
-				tabCurrentIndex:1,			//显示step
-				isPreviewImage:false,   	//预览图片开关
-				isEmialDisabled: false,		//验证码按钮控制
-				isMobileDisabled: false,	//手机验证码按钮控制
-			    count: '',					//倒计时
-			    mobilCount: '',					//倒计时
-			    emailCodeText: '获取验证码',
-			    mobileCodeText: '获取验证码',
-			    codeTime: null,
-			    mobilTime: null,
-				registerEmail:'', 		//注册邮箱
-				regEmailCode:'',  		//邮箱验证码
-				password:'',			//密码
-				passwordCheck:'',		//校验密码
-				clubName:'',	 		//机构名称
-				abbreviation:'',	 	//机构简称
-				clubContact:'',	 		//联系人
-				registerMobile:'',		//联系人手机号
-				mobileCode:'',			//手机验证码
-				imageCode:'',			//图形验证码
-				imageCodeUrl:'',		//图形验证码图片
-				imageCodetoken:'',		//图形验证校验
-				socialCreditCode:'',	//统一社会信用代码
-				isAgreed:0,				//是否勾选协议
-				isDisabled:true,
-				isShowInput:false,
-				isCheck:false,			//是否勾选协议
-				uploadBusinessImage:'',	//营业执照图片
-				uploadMentuzImage:'',  	//门头照图片
-				uploadMedicalImage:'', 	//资质照图片
-				department:'',			//科室
-				isDepartment:false,     //是否显示科室
-				secondClubType:'',		//机构类型二级分类
-				mainpro:'',				//主营内容
-				isOrganizationType:0,
-				organizationTypeText:'请选择机构类型',
-				beautyList:[{value:'1',name:'诊所'},{value:'2',name:'门诊'},{value:'3',name:'医院'}],
-				mentuzCampList:[{value:'1',name:'整形'},{value:'2',name:'轻医美'},{value:'3',name:'皮肤科'}],
-				medicaCampList:[
-					{value:'1',name:'美容'},
-					{value:'2',name:'美体'},
-					{value:'3',name:'美发'},
-					{value:'4',name:'皮肤管理'},
-					{value:'5',name:'光电'},
-					{value:'6',name:'综合类'},
-					{value:'7',name:'中医养生'},
-					{value:'8',name:'spa'}
-				],
-				typtIndex:0,
-				organizationType:3,
-				current:0,
-				isShowAustomItem:false, //是否显示其他添加
-				customItemValue:'', 	//自定义项目
-				addressData:{
-					address:'请选择机构所在地区',
-					townID:'',			//区ID
-					cityID:'',			//区ID
-					provinceID:'',		//区ID
-					addressDetail: '',	//地址
-				},
-			}
-		},
-		onLoad(option) {
-		},
-		methods:{
-			hanldNavigateBack(){
-				this.$util.modal('','注册尚未完成,确定放弃注册吗?','确定','取消',true,() =>{
-					uni.navigateBack({
-						delta: 1
-					});
-				})
-			},
-			registerStepsfirst(){
-				let params ={
-						email:this.registerEmail,
-						mailboxCode:this.regEmailCode,
-						password:this.password,
-						passWordConfirm:this.passwordCheck,
-						whichStep:1,
-				}
-				organizationVerifyRegisterFirst(params).then(res =>{
-					this.tabCurrentIndex = 2
-					this.getVerificationCode()
-				}).catch(error =>{
-					this.$util.msg(error.msg,2000);
-				})
-			},
-			registerStepsTwo(){
-				let params ={
-						name:this.clubName,
-						linkMan1:this.clubContact,
-						bindMobile:this.registerMobile,
-						activationCode:this.mobileCode,
-						whichStep:2,
-				}
-				organizationVerifyRegisterTwo(params).then(res =>{
-					this.tabCurrentIndex = 3
-				}).catch(error =>{
-					this.$util.msg(error.msg,2000);
-				})
-			},
-			registerStepsSub(){
-				if(!this.isCheck){
-					this.$util.msg('请勾选同意协议',2000);
-					return
-				}
-				let params ={
-						email:this.registerEmail,
-						mailboxCode:this.regEmailCode,
-						password:this.password,
-						passWordConfirm:this.passwordCheck,
-						name:this.clubName,
-						linkMan1:this.clubContact,
-						bindMobile:this.registerMobile,
-						activationCode:this.mobileCode,
-						sname:this.abbreviation,
-						provinceID:this.addressData.provinceID,
-						cityID:this.addressData.cityID,
-						townID:this.addressData.townID,
-						address:this.addressData.addressDetail,
-						socialCreditCode:this.socialCreditCode,
-						businessLicenseImage:this.uploadBusinessImage,
-						headpic:this.uploadMentuzImage,
-						firstClubType:this.isOrganizationType, //机构类型分类 医美:0和生美:1
-						secondClubType:this.secondClubType,	//机构类型二级分类 诊所:1,门诊:2,医院:3
-						department:this.department,			//科室
-						medicalPracticeLicenseImg:this.uploadMedicalImage,//资质图片
-						isAgreed:this.isAgreed,				//是否勾选协议	
-						mainpro:this.mainpro,
-						whichStep:3
-				}
-				organizationRegister(params).then(res =>{
-					this.$util.msg('您的机构账号已提交审核',2000);
-					setTimeout(()=>{
-						this.$api.switchTabTo('/pages/tabBar/home/home')
-					},2000)
-				}).catch(error =>{
-					this.$util.msg(error.msg,2000);
-				})
-			},
-			getEmailCodeFn(){
-				if( this.registerEmail == ''){
-					this.$util.msg('请输入邮箱地址',2000);
-					return
-				}
-				if(!this.$reg.isEmail(this.registerEmail)){
-					this.$util.msg('请输入正确的邮箱地址',2000);
-					return
-				}
-				this.isEmialDisabled = true;
-				getEmailCode({email:this.registerEmail,status:2}).then(res =>{
-					this.$util.msg('邮箱验证码已发送',2000);
-					const TIME_COUNT = 60;
-			     	if (!this.codeTime) {
-			       		this.count = TIME_COUNT;
-						this.isEmialDisabled = true;
-			       		this.codeTime = setInterval(() => {
-			       			if (this.count > 1 && this.count <= TIME_COUNT) {
-			         			this.count--
-			         			this.emailCodeText = this.count +'s重新发送'
-			        		} else {
-				         		clearInterval(this.codeTime)
-				         		this.codeTime = null
-								this.emailCodeText = '获取验证码'
-								this.isEmialDisabled = false;
-			        		}
-			       		},1000)
-			      	}
-				}).catch( error =>{
-					this.$util.msg(error.msg,2000);
-					this.isEmialDisabled = false;
-				})
-			},
-			getMobileCodeFn(){
-				if( this.registerMobile == ''){
-					this.$util.msg('请输入手机号',2000);
-					return
-				}
-				if(!this.$reg.isMobile(this.registerMobile)){
-					this.$util.msg('请输入正确的手机号',2000);
-					return
-				}
-				if( this.imageCode == ''){
-					this.$util.msg('请输入图形验证码',2000);
-					return
-				}
-				let params = {
-						mobile:this.registerMobile,
-						activateCodeType:2,
-						platformType:2,
-						imgCode:this.imageCode,
-						token:this.imageCodetoken,
-					}
-				this.isMobileDisabled = true;
-				getMobileCode(params).then(response =>{
-					this.$util.msg('验证短信已发送',2000);
-					const TIME_COUNT = 60;
-			     	if (!this.mobilTime) {
-			       		this.mobilCount = TIME_COUNT;
-			       		this.isMobileDisabled = true;
-			       		this.mobilTime = setInterval(() => {
-			       			if (this.mobilCount > 1 && this.mobilCount <= TIME_COUNT) {
-			         			this.mobilCount--
-			         			this.mobileCodeText = this.mobilCount +'s重新发送'
-			        		} else {
-				         		this.isMobileDisabled = false;
-				         		clearInterval(this.mobilTime)
-				         		this.mobilTime = null
-								this.mobileCodeText = '获取验证码'
-			        		}
-			       		},1000)
-			      	}
-				}).catch( error =>{
-					this.$util.msg(error.msg,2000);
-					this.isMobileDisabled = false;
-				})
-			},
-			getVerificationCode(){//获取图形验证
-				getImageCode().then(res => {
-					this.imageCodeUrl = res.data.baseImage
-					this.imageCodetoken = res.data.token
-				})
-			},
-			showMulLinkageThreePicker() {//三级地址联动
-				this.isShowInput = true
-				this.$refs.mpvueCityPicker.show()
-			},
-			onConfirm(e) {//获取选择的地址信息
-				this.addressData.address = e.name;
-				this.addressData.townID = e.townCode;
-				this.addressData.cityID = e.cityCode;
-				this.addressData.provinceID = e.provinceCode;
-			},	
-			onTextareaInput(e){//地址详细信息
-			   this.addressData.addressDetail = e.detail.value;
-			},
-			chooseBusinessImage() {//营业执照图片上传
-				uploadFileImage().then(res =>{
-					this.uploadBusinessImage = JSON.parse(res.data).data
-				})
-			},
-			chooseMentuzImage() {//门头照图片上传
-				uploadFileImage().then(res =>{
-					this.uploadMentuzImage = JSON.parse(res.data).data
-				})
-			},
-			chooseMedicalImage() {//资质照图片上传
-				uploadFileImage().then(res =>{
-					this.uploadMedicalImage = JSON.parse(res.data).data
-				})
-			},
-			viewBusinessImage(e) {//预览营业执照图片
-				this.myPreviewImageFn(this.uploadBusinessImage)
-			},
-			viewMentuzImage(e) {//预览门头照图片
-				this.myPreviewImageFn(this.uploadMentuzImage)
-			},
-			viewMedicalImage(e) {//预览资质照图片
-				this.myPreviewImageFn(this.uploadMedicalImage)
-			},
-			myPreviewImageFn(url){//预览图片公共方法
-				this.isPreviewImage = true
-				let mentuzArray = []
-				mentuzArray.push(url)
-				uni.previewImage({
-					urls: mentuzArray,
-					current: 0
-				});
-			},
-			delBusinessImage(){//删除营业执照图片
-				this.$util.modal('','确定删除营业执照图片吗?','确定','取消',true,() =>{
-					 this.uploadBusinessImage = ''
-				})
-			},
-			delMentuzImage(){//删除门头照图片
-				this.$util.modal('','确定删除门头照图片吗?','确定','取消',true,() =>{
-					this.uploadMentuzImage = ''
-				})
-			},			
-			delMedicalImage(){//删除资质图片
-				this.$util.modal('','确定删除资质图片吗?','确定','取消',true,() =>{
-					this.uploadMedicalImage = ''
-				})
-			},
-			bindPickerChange() {//机构类型选择
-				let self = this
-				uni.showActionSheet({
-					title:'标题',
-					itemList: ['医美', '生美'],
-					success: (e) => {
-						self.isOrganizationType = e.tapIndex+1
-						switch(e.tapIndex){
-							case 0:
-								this.organizationTypeText = '医美'
-								break;
-							case 1:
-								this.organizationTypeText = '生美'
-								break;
-						}
-					}
-				})
-			
-			},
-			bindPickerChange2(e) {
-				this.typtIndex = e.target.value
-				this.isOrganizationType = e.target.value
-			},
-			radioChange(e) {
-				this.secondClubType = e.target.value;
-				if( this.secondClubType == '2' || this.secondClubType == '3'){
-					this.isDepartment = true
-				}else{
-					this.isDepartment = false
-				}
-				for (let i = 0; i < this.beautyList.length; i++) {
-					if (this.beautyList[i].value === this.secondClubType) {
-						this.current = i;
-						break;
-					}
-				}
-			},
-			chooseMaleLike(e){
-				this.mainpro = this.checkLikes(e,this.mentuzCampList)
-			},
-			chooseMaleLikes(e){
-				this.mainpro = this.checkLikes(e,this.medicaCampList)
-			},
-			checkLikes(e,list){
-				let items = list
-				let	values = e.detail.value
-				let arr = []
-				for (let i = 0, lenI = items.length; i < lenI; ++i) {
-					const item = items[i]
-					if(values.indexOf(item.value) >= 0){
-						this.$set(item,'checked',true)
-						arr.push(item.name)
-					}else{
-						this.$set(item,'checked',false)
-					}
-				}
-				return arr.join('/')
-			},
-			agreeCheck() {
-				this.isCheck = !this.isCheck
-				if(this.isCheck){
-					this.isAgreed = 1
-				}else{
-					this.isAgreed = 0
-				}
-			},
-			onBlurInput(e){//
-				if(e.detail.value ===''){
-					this.isDisabled = true
-				}else{
-					this.isDisabled = false
-				}
-			},
-			showAustomItem() {
-				this.isShowAustomItem = !this.isShowAustomItem
-			},
-			addCustomItem(){
-				if(this.isOrganizationType == 1){
-					let item = {value:`${this.mentuzCampList.length+1}`,name:this.customItemValue}
-					this.mentuzCampList.push(item)
-				}else{
-					let item = {value:`${this.medicaCampList.length+1}`,name:this.customItemValue}
-					this.medicaCampList.push(item)
-				}
-			},
-			steps(index) {//$attrstab切换
-				this.tabCurrentIndex = index;
-			}
-		},
-		onShow() {
-			if(this.isPreviewImage){
-				this.isPreviewImage = false
-				return
-			}
-		}
-	}
-</script>
-
-<style lang="scss">
-	.register{
-		width: 100%;
-		height: auto;
-		.model-warp.none{
-			display: none;			
-		}
-		.model-warp.show{
-			display: block;
-		}
-		.register-tab{
-			width: 570rpx;
-			height: 60rpx;
-			padding: 60rpx 90rpx;
-			position: relative;
-			.nav-item{
-				width: 142rpx;
-				background: #FFFFFF;
-				line-height: 60rpx;
-				border-radius: 30rpx;
-				text-align: center;
-				color: #999999;
-				font-size:$font-size-26;
-				float: left;
-				margin-right: 72rpx;
-				position: relative;
-				.line{
-					height: 3rpx;
-					width: 50rpx;
-					background: #999999;
-					position: absolute;
-					right: -58rpx;
-					top: 32rpx;
-				}
-				&:last-child{
-					margin-right: 0;
-				}
-				&.current{
-					color:#FFFFFF;
-					background: $btn-confirm;
-					
-				}
-			}
-		}
-		.register-main{
-			width: 100%;
-			height: auto;
-			&.detailed{
-				padding-bottom: 330rpx;
-			}
-			.register-tips{
-				display: flex;
-				flex-direction: column;
-				align-items: center;
-				line-height: 44rpx;
-				font-size: $font-size-24;
-				color: #FF0000;
-				margin-bottom: 40rpx;
-				.iconfont{
-					font-size: $font-size-24;
-				}
-			}
-			.register-row{
-				width: 702rpx;
-				height: auto;
-				padding: 0 24rpx;
-				margin-bottom: 20rpx;
-				.register-text{
-					line-height: 44rpx;
-					margin-top: 100rpx;
-					font-size: $font-size-24;
-					color: #999999;
-					text-align: justify;
-					.txt{
-						margin-right: 15rpx;
-					}
-				}
-				.register-from{
-					width: 654rpx;
-					height: 40rpx;
-					padding: 24rpx;
-					background: $sub-bg-color;
-					border-radius: 14rpx;
-					position: relative;
-					.label{
-						text-align: left;
-						font-size: $font-size-28;
-						color: $text-color;
-						line-height: 40rpx;
-						float: left;
-					}
-					.row-input{
-						width: 440rpx;
-						padding-left:10rpx;
-						font-size: $font-size-28;
-						color: $text-color;
-						line-height: 40rpx;
-						float: left;
-						height: 40rpx;
-						&.none{
-							color: #999999;
-						}
-						&.picker{
-							text-align: left;
-							color: #999999;
-						}
-						&.keshi{
-							width: 550rpx;
-						}
-					}
-					&.img-btn{
-						width: 220rpx;
-						height: 88rpx;
-						padding: 0;
-						float: left;
-						background: #FFFFFF;
-						display: block;
-						.vscodeimg{
-							width: 150rpx;
-							height: 88rpx;
-							float: left;
-							display: flex;
-							flex-direction: column;
-							align-items: center;
-							border-radius: 14rpx;
-							image{
-								width: 150rpx;
-								height: 88rpx;
-								border-radius: 14rpx;
-							}
-						}
-						.vscod-refresh{
-							width: 70rpx;
-							float: right;
-							text-align: right;
-							display: flex;
-							flex-direction: column;
-							align-items: center;
-							line-height: 44rpx;
-							.icon-shuaxin{
-								font-size: 48rpx;
-								color: #333333;
-							}
-							.ref-text{
-								font-size: 24rpx;
-								color: #333333;
-							}
-						}
-					}
-					&.imgcode{
-						width: 410rpx;
-						float: left;
-						margin-right: 20rpx;
-						.row-input{
-							width: 230rpx;
-						}
-					}
-					&.code{
-						width: 410rpx;
-						float: left;
-						margin-right: 20rpx;
-						.row-input{
-							width: 230rpx;
-						}
-					}
-					&.btn{
-						width: 224rpx;
-						height: 88rpx;
-						float: left;
-						background: $btn-confirm;
-						padding: 0;
-						.row-input{
-							width: 224rpx;
-							height: 88rpx;
-							line-height: 88rpx;
-							padding: 0;
-							color: #FFFFFF;
-							background: $btn-confirm;
-							text-align: center;
-							border-radius: 14rpx;
-							&.other{
-								width: 224rpx;
-								background: #F7F7F7;
-								margin-right: 20rpx;
-							}
-							&.none{
-								background: #F7F7F7;
-							}
-						}
-						&.disabled{
-							background: #F7F7F7;
-							.row-input{
-								background: #F7F7F7;
-								color: #999999;
-							}
-						}
-					}
-					&.picker{
-						padding: 0 24rpx;
-						width: 654rpx;
-						height: 88rpx;
-						line-height: 88rpx;
-						.label{
-							line-height: 88rpx;
-						}
-						.row-input{
-							width: 470rpx;
-							height: 88rpx;
-							line-height: 88rpx;
-							padding-left: 30rpx;
-						}
-					}
-					&.radio{
-						padding: 0 24rpx;
-						width: 654rpx;
-						height: 288rpx;
-						.row-input{
-							width: 100%;
-							height: 88rpx;
-							line-height: 88rpx;
-							padding-left: 0;
-						}
-						.row-radio{
-							float: left;
-							transform: scale(0.8);
-						}
-						.row-text{
-							width: 100rpx;
-							text-align: center;
-							float: left;
-						}
-					}
-					&.group{
-						padding: 0 24rpx;
-						width: 654rpx;
-						height: auto;
-						background: #FFFFFF;
-						margin-top: 30rpx;
-						.label{
-							line-height: 76rpx;
-						}
-						.row-input{
-							width: 100%;
-							height: 88rpx;
-							line-height: 88rpx;
-							padding-left: 0;
-						}
-						.row-radio{
-							float: left;
-						}
-						.row-text{
-							width: 100rpx;
-							text-align: center;
-							float: left;
-						}
-					}
-					&.btn{
-						margin-top: 0;
-					}
-					.content-class {
-						margin: 20rpx auto;
-						display: flex;
-						flex-flow: row wrap;
-						justify-content: space-between;
-						align-items: center;
-						&.btn{
-							margin: 0 auto;
-							margin-left: 126rpx;
-						}
-						.row-input{
-							display: flex;
-							width: 220rpx;
-							height: 40rpx;
-							padding: 24rpx;
-							text-align: left;
-							border-radius: 10rpx;
-							font-size: $font-size-28;
-							color: $text-color;
-						}
-						.confirm-btn{
-							width: 200rpx;
-							height: 88rpx;
-							border-radius: 10rpx;
-							line-height: 88rpx;
-							text-align: center;
-							&.other{
-								width: 213rpx;
-							}
-							&.none{
-								color: #FFFFFF;
-								background: $btn-confirm;
-							}
-							&.disabled{
-								color: #999999;
-							}
-						}
-						.item {
-						  width: 155rpx;
-						  height: 60rpx;
-						  font-size:$font-size-28;
-						  line-height: 60rpx;
-						  border-radius:10rpx;
-						  margin: 10rpx;
-						  text-align: center;
-						  box-sizing: border-box;
-						  border: 1rpx solid #EFEFEF;
-						  checkbox {
-							display: none;
-						  }
-						}
-						.on {
-						  border-color: $color-system;
-						  color:$color-system;
-						}
-					}
-				}
-				.icon-xiayibu{
-					width: 88rpx;
-					height: 88rpx;
-					position: absolute;
-					right: 0;
-					top: 0;
-					line-height: 88rpx;
-					text-align: center;
-				}
-				&.text-textarea{
-					background: #FFFFFF;
-					.textarea{
-						width: 654rpx;
-						height: 180rpx;
-						background: #F7F7F7;
-						padding: 24rpx;
-						font-size: $font-size-28;
-						color: $text-color;
-						z-index: 1;
-						border-radius: 14rpx;
-					}
-					.textarea.hide{
-						opacity: 0;
-					}
-					.textarea.show{
-						color: #999999;
-					}
-				}
-			}
-			.register-picture{
-				height: 102rpx;
-				margin: 40rpx 0 0 0;
-				.label{
-					float: left;
-					font-size: $font-size-28;
-					color: $text-color;
-					line-height: 102rpx;
-					width: 150rpx;
-					text-align: right;
-					&.zz{
-						width: 230rpx;
-					}
-				}
-				.upload-picture{
-					float: left;
-					height: 100rpx;
-					.upload-none{
-						width: 100rpx;
-						height: 100rpx;
-						text-align: center;
-						line-height: 100rpx;
-						color: #999999;
-						border: 1px solid #999999;
-						border-radius: 10rpx;
-						margin: 0 20rpx;
-						.iconfont{
-							font-size: $font-size-28;
-						}
-					}
-					.upload-image{
-						width: 100rpx;
-						height: 100rpx;
-						border-radius: 10rpx;
-						margin: 0 20rpx;
-						position: relative;
-						image{
-							width: 100rpx;
-							height: 100rpx;
-							border-radius: 10rpx;
-						}
-						.upload-del{
-							width: 40rpx;
-							height: 40rpx;
-							position: absolute;
-							top: -20rpx;
-							right: -20rpx;
-							line-height: 40rpx;
-							text-align: center;
-							.iconfont{
-								font-size: $font-size-32;
-								color: #999999;
-							}
-						}
-					}
-				}
-			}
-			.register-input{
-				width: 654rpx;
-				height: 40rpx;
-				padding: 24rpx;
-				margin: 0 auto;
-				margin-bottom: 60rpx;
-				background: #F7F7F7;
-				border-radius: 14rpx;
-				.input{
-					width: 100%;
-					height: 100%;
-					background: #F7F7F7;
-					font-size: $font-size-28;
-					line-height: 40rpx;
-					color: #333333;
-					border-radius: 14rpx;
-				}
-			}
-			.register-fiexd{
-				width: 100%;
-				height: auto;
-				position: fixed;
-				bottom: 0;
-				left: 0;
-				z-index: 999;
-				background: #FFFFFF;
-				.register-agree{
-					display: flex;
-					flex-direction: column;
-					align-items: center;
-					margin: 32rpx 0;
-					.agree-text{
-						.checkbox{
-							float: left;
-							margin: 4rpx 6rpx 0 0;
-							color: #999999;
-							font-size: $font-size-32;
-							&.icon-gouxuan{
-								color: $color-system;
-							}
-						}
-						font-size: 20rpx;
-						line-height: 44rpx;
-						color: #999999;
-						text{
-							color:#0091FF;
-						}
-					}
-				}
-			}
-			.register-btn{
-				width: 702rpx;
-				height: 88rpx;
-				border-radius: 14rpx;
-				font-size: $font-size-28;
-				line-height: 88rpx;
-				color: #FFFFFF;
-				margin: 0 auto;
-				text-align: center;
-				background: $btn-confirm;
-				margin-top: 96rpx;
-				&.none{
-					background: #FFFFFF;
-					color: $text-color;
-					margin-top: 0;
-				}
-				&.sub{
-					margin-top: 0;
-				}
-			}
-		}
-	}
-</style>

+ 60 - 21
pages/search/search-order.vue

@@ -32,10 +32,14 @@
 						<view  class="tui-order-item" v-for="(order,orderIndex) in orderList" :key="orderIndex" @click.stop="detail(order.orderID)">
 							<view class="order-title">
 								<view class="order-title-t">
-									<view class="order-title-num tui-skeleton-fillet">订单号:{{order.orderNo}}</view>
+									<text class="bage-buss tui-skeleton-fillet" v-if="order.orderSubmitType == 3 || order.orderSubmitType == 4">协销</text>
+									<text class="bage-auto tui-skeleton-fillet" v-if="order.orderSubmitType == 0 || order.orderSubmitType == 1 || order.orderSubmitType == 2">自主</text>
+									<text class="bage-text tui-skeleton-fillet">订单号:{{order.orderNo}}</text>
+								</view>
+								<view class="order-title-b">
+									<view class="order-title-btxt tui-skeleton-fillet">下单时间:{{order.orderTime}}</view>
 									<view class="order-title-tip tui-skeleton-fillet">{{orderStateExp(order.status)}}</view>
 								</view>
-								<view class="order-title-b">下单时间:{{order.orderTime}}</view>
 							</view>
 							<block v-for="(shop,index) in order.shopOrderList" :key="index">
 								<view class="goods-title">
@@ -430,7 +434,7 @@
 	}
 	.search{
 		width: 702rpx;
-		height: 80rpx;
+		height: 70rpx;
 		padding: 12rpx 24rpx;
 		border-bottom: 1px solid #F0F0F0;
 		position: fixed;
@@ -440,9 +444,9 @@
 		z-index: 1001;
 		.search-input{
 			width: 448rpx;
-			height: 80rpx;
+			height: 70rpx;
 			padding: 0 68rpx;
-			line-height: 80rpx;
+			line-height: 70rpx;
 			border-radius: 40rpx;
 			position: relative;
 			background: #F0F0F0;
@@ -465,15 +469,15 @@
 			}
 			input{
 				width: 448rpx;
-				height: 80rpx;
-				background-color: #F0F0F0;
+				height: 70rpx;
+				background-color: #F0F0F0; 
 				font-size: 26rpx;
 			}
 		}
 		.search-btn{
 			width: 118rpx;
-			height: 80rpx;
-			line-height: 80rpx;
+			height: 70rpx;
+			line-height: 70rpx;
 			color: $color-system;
 			font-size: 30rpx;
 			text-align: center;
@@ -645,18 +649,39 @@
 			width: 100%;
 			height: 40rpx;
 			float: left;
-			font-size: $font-size-28;
 			line-height: 40rpx;
-			font-weight: bold;
-			.order-title-num{
+			.bage-buss{
+				display: inline-block;
+				float: left;
+				width: 64rpx;
+				height: 30rpx;
+				background:linear-gradient(132deg,rgba(255,177,0,1) 0%,rgba(255,127,0,1) 100%);
+				border-radius: 6rpx;
+				line-height: 30rpx;
+				font-size: $font-size-22;
+				text-align: center;
+				color: #FFFFFF;
+				margin-top: 8rpx;
+			}
+			.bage-auto{
+				isplay: inline-block;
 				float: left;
+				width: 64rpx;
+				height: 30rpx;
+				background:linear-gradient(135deg,rgba(0,216,255,1) 0%,rgba(22,139,225,1) 100%);
+				border-radius: 6rpx;
+				line-height: 30rpx;
+				font-size: $font-size-22;
+				text-align: center;
+				color: #FFFFFF;
+				margin-top:8rpx;
+			}
+			.bage-text{
+				font-size: $font-size-28;
+				line-height: 40rpx;
 				text-align: left;
 				color: $color-system;
-			}
-			.order-title-tip{
-				float: right;
-				text-align: right;
-				color: #FF2A2A;
+				margin-left: 15rpx;
 			}
 		}
 		.order-title-b{
@@ -664,10 +689,20 @@
 			height: 40rpx;
 			float: left;
 			margin-top: 8rpx;
-			font-size: $font-size-28;
-			line-height: 40rpx;
-			color: #999999;
-			text-align: left;
+			.order-title-btxt{
+				float: left;
+				font-size: $font-size-28;
+				line-height: 40rpx;
+				color: #999999;
+				text-align: lef
+			}
+			.order-title-tip{
+				float: right;
+				font-size: $font-size-28;
+				line-height: 40rpx;
+				text-align: right;
+				color: #FF2A2A;
+			}
 		}
 	}
 	.goods-title{
@@ -685,6 +720,10 @@
 			}
 		}
 		.title-text{
+			width: 630rpx;
+			overflow: hidden;
+			text-overflow:ellipsis;
+			white-space: nowrap;
 			float: left;
 			margin-left: 16rpx;
 			font-size: $font-size-28;

+ 167 - 56
pages/search/search.vue

@@ -3,16 +3,15 @@
 		<view class="search-main">
 			<view class="search-input">
 				<text class="iconfont icon-iconfonticonfontsousuo1"></text>
-				<input maxlength="20" focus type="text" value="" confirm-type="search" @focus="onFocus" @input="onShowClose" @confirm="subMitSearch()" placeholder="请输入商品关键词" v-model.trim="searchInputVal"/>
-				<text class="iconfont icon-shanchu1" v-if="isShowClose" @click="delInputText()"></text>
+				<input maxlength="20" :focus="isFocus" type="text" value="" confirm-type="search" @focus="onFocus" @input="onShowClose" @confirm="subMitSearch()" placeholder="请输入商品关键词" v-model.trim="searchInputVal"/>
+				<text class="iconfont icon-shanchu1" v-if="isShowClose" @click.stop="delInputText()"></text>
 			</view>
 			<view class="search-btn" @click="subMitSearch()">搜索</view>
 		</view>
 		<view class="search-container-history" v-if="!isShowWrapper">
 			<view :class="'s-' + themeClass" v-if="serachRecordList.length>0">
 				<view class="header">
-					搜索历史
-					<text class="iconfont icon-shanchu" @click="confirmDetele"></text>
+					搜索历史<text class="iconfont icon-shanchu" @click="confirmDetele"></text>
 				</view>
 				<view class="list">
 					<view v-for="(item,index) in serachRecordList" :key="index" @click="keywordsClick(item.searchWord)">{{item.searchWord}}</view>
@@ -20,32 +19,51 @@
 			</view>
 		</view>
 		<!-- <go-search :theme="themeClass" @subMitSearch="subMitSearch"></go-search> -->
-		<view v-else class="commodity-list-wrapper"  :style="{'overflow':'auto','height':(commodityList.length>4? windowHeight + 'px' : 'auto')}">
-			<scroll-view :style="{'height':(commodityList.length>4? scrollHeight+'px' : 'auto')}" @scrolltolower="scrolltolower" scroll-y v-if="!showEmpty">
-				<view v-for="(item,index) in commodityList" :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-else class="commodity-list-wrapper"  :style="{'overflow':'auto','height':(listData.length>4? windowHeight + 'px' : 'auto')}">
+			<scroll-view :style="{'height':(listData.length>4? scrollHeight+'px' : 'auto')}" @scrolltolower="scrolltolower" scroll-y v-if="!showEmpty">
+				<view v-for="(item,index) in listData" :key="index" :id="item.id" class="all-type-list-content commodity-list" @click.stop="navToDetailPage(item.pid)">
+					<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>
+						<view class="list-details-title">{{isInterceptHtmlFn(item.name)}}</view>
 						<text class="list-details-specs">规格:{{item.unit}}</text>
-						<text class="list-details-miniQuantity" v-if="fromRegularPurchasePage">起订量:{{item.minBuyNumber}}</text>
-						<view class="list-details-specs" v-if="item.productCode!=''&&item.productCode!=null">
+						<view class="list-details-specs" v-if="item.productcode!=''&&item.productCode!=null">
 							<view>商品编码:{{item.productCode}}</view>
 						</view>
 						<view class="list-details-price">
-							<view v-if="!hasLogin" 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 class="list-price" v-else>
-								<view class="price-larger" v-if="item.price1TextFlag == '1'">
-									<text class="txt">该未公开价格</text>
+							<view v-if="hasLogin"class="list-price">
+								<view 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">
+									<view class="price-larger" v-if="item.priceflag == '1'">
+										<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.priceflag == '2'">
+											<text class="txt">价格仅会员可见</text>
+											<text class="btn" @click.stop="this.$api.navigateTo(`/pages/login/apply?clubStatus=${clubStatus}`)">去升级</text>
+										</view>
+										<text v-else>¥<text class="price-larger">{{item.price ?item.price :'0.00'}}</text></text>
+									</view>
 								</view>
-								<text v-else>¥<text class="price-larger">{{item.retailPrice.toFixed(2)}}</text></text>
+								<view v-if="userIdentity == 2">
+									<view class="price-larger" v-if="item.priceflag == '1'">
+										<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>
+							</view>	
+							<view  v-else class="list-login-now">
+								<text class="p-no">价格:</text>
+								<uni-stars :stars="parseInt(item.pricegrade)" :font-size='36' :width-info="180"></uni-stars>
 							</view>
 						</view>
 					</view>
 				</view>
-				<view v-if="showLoading && commodityList.length > 4">
+				<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>
@@ -57,7 +75,6 @@
 		</view>
 		<!-- 透明模态层 -->
 		<modal-layer v-if='isModallayer'></modal-layer>
-	
 	</view>
 </template>
 
@@ -67,7 +84,13 @@
 	import modalLayer from "@/components/modal-layer"
 	import uniStars from '@/components/uni-stars/uni-stars.vue'
 	import authorize from '@/common/config/authorize.js'
-	import { querySearchProduct , querySearchHistory,clearSearchHistory } from "@/api/product.js" 
+	import { 
+		queryNewSearchProduct , 
+		querySearchHistory,
+		clearSearchHistory,
+		searchHistoryAdd,
+		querySearchProductPrice
+	} from "@/api/product.js" 
 	
 	export default {
 		components: {
@@ -79,20 +102,25 @@
 			return {
 				userID:'',
 				themeClass: 'block',
-				searchInputVal:'',							//搜索关键词
-				isShowClose:false,							//是否显示清空输入框图标
-				isSearchHistory:false,						//是都显示搜索历史
-				serachRecordList:[],						//历史搜索记录
+				searchInputVal:'',	//搜索关键词
+				userIdentity:'',	
+				identity:2,
+				isShowClose:false,	//是否显示清空输入框图标
+				isSearchHistory:false,//是都显示搜索历史
+				serachRecordList:[],//历史搜索记录
 				isShowWrapper:false,
 				isModallayer:false,
+				isFocus:false,
+				priceLoading:true,
 				windowHeight: '',
 				showEmpty: false,
 				scrollHeight: '',
-				commodityList: [],
+				listData: [],
+				productIds:'',//查询价格的商品ID
 				showLoading: false,
 				loadingNow: true,
 				loadingText: '上拉加载更多',
-				pageSize: 10,
+				pageSize: 20,
 				pageNum: 1,
 				hasNextPage: false,
 				totalPage: 1,
@@ -100,6 +128,7 @@
 			}
 		},
 		onLoad() {
+			this.isFocus = true
 			this.initGetSerachRecord()			
 		},
 		computed: {
@@ -109,6 +138,12 @@
 			initGetSerachRecord(){
 				this.$api.getStorage().then((resolve) =>{
 					this.userID = resolve.userID ? resolve.userID : '';
+					this.userIdentity = resolve.userIdentity ? resolve.userIdentity : '';
+					if(this.userIdentity == 1){
+						this.identity = 1
+					}else{
+						this.identity = 2
+					}
 				    querySearchHistory({userId:this.userID}).then(response =>{
 						if(response.code == 0){
 							this.serachRecordList = response.data
@@ -120,12 +155,14 @@
 				if (this.searchInputVal == '') {
 					this.$util.msg('请输入商品关键词',2000);
 				}else{
-					this.commodityList =[]
-					this.getListFromServer(false)
+					this.listData =[]
+					this.setSearchHistoryAdd()
+					this.getListFromServer()
+					this.isFocus = false
 				}
 			},
 			scrolltolower() {
-				if(this.hasNextPage && this.pullFlag) {
+				if(this.totalPage>this.listData.length && this.pullFlag) {
 					this.getListFromServer(true);
 				}
 			},
@@ -137,27 +174,35 @@
 				if(loadMore) {
 					this.pageNum += 1;
 				}
-				let params = {userId:this.userID,searchWord:this.searchInputVal,pageNum:this.pageNum,pageSize:this.pageSize}
-				querySearchProduct(params).then(response =>{
+				let params = {
+						identity:this.identity,
+						keyword:this.searchInputVal,
+						pageNum:this.pageNum,
+						pageSize:this.pageSize,
+						sortField:'',
+						sortType:'',
+					}
+				queryNewSearchProduct(params).then(response =>{
 					this.isShowWrapper = true
-					const resData = response.data;
-					const resList = resData.results;
+					const resData = JSON.parse(response.data);
+					const resList = resData.items;
+					// console.log(resData)
 					if(resList && resList.length > 0){
-						this.hasNextPage = resData.hasNextPage;
-						this.totalPage = resData.totalPage;
+						this.totalPage = resData.total;
 						this.showEmpty = false;
 						if(loadMore) {
-							this.commodityList = [...this.commodityList,...resList];
+							this.listData = [...this.listData,...resList];
+							this.setProductPrice()
 						} else {
-							this.commodityList = [...resList];
+							this.listData = [...resList];
+							this.setProductPrice()
 						}
 						// 防上拉暴滑
 						this.pullFlag = false;
-						setTimeout(()=>{
-							this.pullFlag = true;
-						},500)
+						setTimeout(()=>{ this.pullFlag = true; },500)
 						// 底部提示文案
-						if(this.hasNextPage) {
+						if(this.totalPage>this.listData.length) {
+							console.log('1111111111')
 							this.loadingText = '上拉加载更多';
 						} else {
 							this.showLoading = true;
@@ -172,7 +217,47 @@
 					this.$util.msg(error.msg,2000);
 				})
 			},
-			onShowClose () {//输入框失去焦点时触发
+			setSearchHistoryAdd(){//添加搜索记录
+				if (!this.hasLogin) {return false;}
+				searchHistoryAdd({userId: this.userID,keyword:this.searchInputVal}).then(response =>{
+					//此为每次搜索同时添加用户的搜索记录
+				}).catch(error =>{
+					this.$util.msg(error.msg,2000);
+				})
+			},
+			setProductPrice(){//获取价格
+				if (!this.hasLogin) {return false;}
+				let productIdArr = [];
+				this.listData.map(item=>{// 0公开价格 1不公开价格 2仅对会员机构公开
+					productIdArr.push(item.pid)
+				})
+				this.productIds = productIdArr.join(",");
+				querySearchProductPrice({userId: this.userID,productIds:this.productIds}).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.pid == priceList[i].productId ){
+									Object.assign(item,priceObj)
+								}
+							}
+						});
+					}
+					this.priceLoading = false;
+				}).catch(error =>{
+					this.$util.msg(error.msg,2000)
+				})
+			},
+			onShowClose () {//输入框输入时触发
 				this.inputEmpty(this.searchInputVal)
 			},
 			onFocus () { //输入框获取焦点时触发
@@ -205,10 +290,16 @@
 				this.isShowWrapper = false
 				if(val != ''){
 					this.isShowClose = true
+					this.isFocus = true
 				}else{					
 					this.isShowClose = false
+					this.isFocus = true
 				}
 			},
+			isInterceptHtmlFn(text){
+				let name = this.$reg.interceptHtmlFn(text)
+				return name
+			},
 			navToDetailPage(id) {
 				this.isModallayer = true;
 				this.$api.navigateTo(`/pages/goods/product?id=${id}`);
@@ -239,7 +330,7 @@
 	}
 	.search-main{
 		width: 702rpx;
-		height: 80rpx;
+		height: 70rpx;
 		padding: 12rpx 24rpx;
 		border-bottom: 1px solid #F0F0F0;
 		position: fixed;
@@ -249,14 +340,16 @@
 		z-index: 1001;
 		.search-input{
 			width: 448rpx;
-			height: 80rpx;
+			height: 70rpx;
 			padding: 0 68rpx;
-			line-height: 80rpx;
+			line-height: 70rpx;
 			border-radius: 40rpx;
 			position: relative;
 			background: #F0F0F0;
 			float: left;
 			.icon-iconfonticonfontsousuo1{
+				display: block;
+				width: 68rpx;
 				font-size: 36rpx;
 				color: #8A8A8A;
 				position: absolute;
@@ -264,25 +357,27 @@
 				z-index: 10;
 			}
 			.icon-shanchu1{
+				display: block;
+				width: 68rpx;
 				font-size: 36rpx;
-				color: #8A8A8A;
+				text-align: center;
+				color: #999;
 				position: absolute;
-				right: 24rpx;
+				right: 0;
 				top: 0;
-				padding: 0 10rpx;
-				z-index: 10;
+				z-index: 60;
 			}
 			input{
 				width: 448rpx;
-				height: 80rpx;
+				height: 70rpx;
 				background-color: #F0F0F0;
 				font-size: 26rpx;
 			}
 		}
 		.search-btn{
 			width: 118rpx;
-			height: 80rpx;
-			line-height: 80rpx;
+			height: 70rpx;
+			line-height: 70rpx;
 			color: $color-system;
 			font-size: 30rpx;
 			text-align: center;
@@ -485,7 +580,6 @@
 	}
 	.list-details-price {
 		width: 100%;
-		display: flex;
 		flex-direction: row;
 		justify-content: space-between;
 		position: absolute;
@@ -519,12 +613,29 @@
 		.list-price {
 			color: #FF2A2A;
 			.price-larger {
+				width: 100%;
 				font-size: 32rpx;
+				&.small{
+					font-size: $font-size-24;
+				}
 				.txt{
 					font-size: $font-size-24;
 					display: inline-block;
-					line-height: 30rpx;
+					line-height: 44rpx;
 					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;
 				}
 			}
 		}

+ 1332 - 980
pages/tabBar/cart/cart.vue

@@ -1,981 +1,1333 @@
-<template>
-	<view class="container cart clearfix" v-if="hasLogin"> 	
-		<tui-skeleton v-if="skeletonShow" backgroundColor="#fafafa" borderRadius="10rpx" :isLoading	="true" :loadingType="5"></tui-skeleton>
-		<view class="container-cart-main tui-skeleton">
-			<view v-if="!isEmpty" class="container-cart">
-				<scroll-view class="cart-content"  scroll-y  @scrolltolower="toLower">
-					<view class="goods-list">
-						<view v-for="(item, index) in goodsList" :key="index" class="goods-item">
-							<view class="shoptitle">
-								<!--选择商店的全部商品"-->
-								<view class="checkbox-box" @click.stop="checkShop(item)">
-									<button class="checkbox iconfont" 
-											:class="[item.checked ?'icon-gouxuanl':'icon-weigouxuan']" 									
-											:disabled="item.isDisabled && !isshowDelbtn">
-									</button>
-								</view>
-								<view class="text">{{item.name}}</view> 
-							</view>
-							<view class="productlist">
-								<view 	class="goods-pros" v-for="(pros,idx) in item.productsList" :key="idx" >
-									<view class="goods-pros-t">
-										<!--选择商品-->
-										<view class="checkbox-box" @click.stop="ischeck(item,pros,idx)" :class="[pros.validFlag == '3' && !isshowDelbtn ?'disabled' : '']">
-											<button class="checkbox iconfont" 
-													:disabled="pros.validFlag == '3' && !isshowDelbtn"
-													:class="[pros.productsChecked ?'icon-gouxuanl':'icon-weigouxuan']">
-											</button>
-										</view>
-										<view class="pros-img" @click.stop="navToListPage(pros.productID)"	><image :src="pros.mainImage ? pros.mainImage:''" alt="" /></view>
-										<view class="pros-product">
-											<view class="producttitle" @click.stop="navToListPage(pros.productID)"	>
-												<text v-if="pros.validFlag == '3'" class="no-text">商品已下架</text>{{pros.name}}
-											</view>
-											<view class="productspec">规格:{{pros.unit ? pros.unit : ''}}</view>
-											<view class="productprice">
-												<!--使用过滤器对总价改变-->
-												<view class="price" :class="[pros.validFlag == '3' ?'disabled' : '']">
-													<text :class="[pros.validFlag == '3' ?'disabled' : 'money-sign']">¥</text>
-													{{pros.retailPrice?pros.retailPrice.toFixed(2):''}}
-												</view>
-												<view class="count" v-if="pros.validFlag == '2'"  :class="[isshowDelbtn ? 'none':'show']">
-													<view class="number-box">
-														<view  class="iconfont icon-jianhao" :class="[pros.validFlag == '3'?'disabled':'']" @click="changeCountSub(item,pros)"></view>
-														<input class="btn-input" type="number" maxlength='4' v-model="pros.productCount" @blur="changeNnmber($event,item,pros)">
-														<view  class="iconfont icon-jiahao"  :class="[pros.validFlag == '3'?'disabled':'']" @click="changeCountAdd(item,pros)"></view>
-													</view>
-												</view>
-											</view>
-										</view>	
-									</view>
-								</view>
-							</view>	
-							<view class="goods-pros-b" :class="[isshowDelbtn ? 'none':'show']" >
-								<view class="sum">合计:<text class="money"><text class="money-sign">¥</text>{{item.totalPrice.toFixed(2)}}</text></view>
-							</view>
-						</view>
-					</view>	
-					<!--加载loadding-->
-					<tui-loadmore :visible="loadding" :index="3" type="black"></tui-loadmore>
-					<tui-nomore :visible="!pullUpOn" bgcolor="#F7F7F7" :text='nomoreText'></tui-nomore>
-					<!--加载loadding-->
-				</scroll-view>
-				<!-- 脚部菜单 -->
-				<view class="footer">
-					<view class="footer-le">
-						<view class="foot-check checkbox-box" @tap.stop="checkAll()">
-							<button class="checkbox iconfont" :class="[isCheckAll?'icon-gouxuan':'icon-weigouxuan']"></button> 
-							<view class="text">全选</view>
-						</view>
-						<view class="foot-check-delbtn">
-							<button class="delBtn" @tap.stop="showDelManager">删除</button>
-						</view>
-						<view class="sum">总价:<text class="money-sign">¥</text><text class="money">{{allPrice.toFixed(2)}}</text></view>
-					</view>
-					<view v-if="!isshowDelbtn" class="footer-ri" >
-						<view class="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>
-			</view>
-			<view v-if="isEmpty" 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>
-		<!-- 透明模态层 -->
-		<modal-layer v-if='modallayer'></modal-layer>
-	</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 modalLayer from "@/components/modal-layer"
-	import { mapState,mapMutations } from 'vuex';
-	import { queryShoppingCartList,shoppingCartUpdate,shoppingCartDelete } from "@/api/cart.js" 
-	
-	export default{
-		components:{
-			tuiSkeleton,
-			tuiLoadmore,
-			tuiNomore,
-			modalLayer
-		},
-		data(){
-			return{
-				userID:'',
-				alertType:'',
-				isStock:'',
-				goodsList:[],	//购物车的商品
-				delGoodsList:'',//要删除的商品
-				setGoodData:'', //确认订单的商品
-				isCheckAll:false,//是否全选
-				allPrice:0,//所有价格
-				allCount:0,//被选中的产品数量
-				isNnder:true,
-				isModallayer:false,
-				skeletonShow:true,
-				isshowDelbtn:false,
-				isDisabled: false, // 供应商/店铺全选是否禁用状态
-				isEmpty:false,//显示空购物车
-				scrollHeight: 'auto',
-				nomoreText: '上拉显示更多',
-				hasNextPage: false,
-				loadding: false,
-				pullUpOn: true,
-				pullFlag: true,
-				pageSize: 10,
-				pageNum: 1,
-			}
-		},
-		onLoad(){
-			this.setScrollHeight();
-		},
-		computed: {
-			...mapState(['hasLogin','userInfo'])
-		},
-		filters:{//单件商品的价格 × 数量
-		    totalprice(val,count){
-		        return (val * count).toFixed(2)
-		    }
-		},	
-		methods:{
-			initData(){
-				this.isModallayer = false //遮罩层 防止多次点击
-				this.skeletonShow = true //预加载圆圈
-				this.isCheckAll=false//是否全选
-				this.$api.getStorage().then((resolve) => {
-					this.userID = resolve.userID;
-					this.initGetCartGoodsList();
-				})	
-			},
-			initLogin(){
-				authorize.getSetting().then(wxResponse =>{// console.log('是否已授权',res);//0:为取消授权 1:为已授权 2:为未操作
-					if(wxResponse == 1){
-						this.$api.redirectTo('/pages/login/login?type=4')
-					}else{
-						this.$api.navigateTo('/pages/authorization/authorization?type=0')
-					}
-				})	
-			},
-			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
-				let params = {userID:this.userID,pageNum:1,pageSize:this.pageSize}
-				queryShoppingCartList(params).then(response =>{
-					this.skeletonShow = false
-					this.$store.commit('updateAllNum',response.data.cartQuantity)
-					const resultsData = response.data.pageDate;	
-					if(resultsData.results&&resultsData.results.length > 0){
-						this.isEmpty =false
-						this.hasNextPage = resultsData.hasNextPage;
-						this.goodsList = resultsData.results;
-						this.goodsList.forEach((item,index) => {
-							let productsListLength = item.productsList.length,
-								invalidLength = 0;
-							item.productsList.forEach(pros => {
-								pros.shopID = item.shopID;
-								if(pros.validFlag == '3' ) {invalidLength++;}
-							})
-							item.isDisabled = invalidLength === productsListLength;
-						})
-						this.pullFlag = false;
-						setTimeout(()=>{this.pullFlag = true;},500)
-						if(this.hasNextPage){
-							this.pullUpOn = false
-							this.nomoreText = '上拉显示更多'
-						}else{
-							if(this.goodsList.length < 4){
-								this.pullUpOn = true
-							}else{
-								this.pullUpOn = false
-								this.nomoreText = '已至底部'
-							}
-						}
-					} else {
-						this.goodsList = [];
-						this.isEmpty =true
-					}
-				}).catch(error =>{
-					this.$util.msg(error.msg,2000);
-				})
-			},		
-			getOnReachBottomData(){//上拉加载
-				this.pageNum+=1
-				let params = {userID:this.userID,pageNum:this.pageNum,pageSize:this.pageSize}
-				queryShoppingCartList(params).then(response =>{
-					let resultsData = response.data.pageDate
-					this.hasNextPage = resultsData.hasNextPage;
-					this.goodsList = this.goodsList.concat(resultsData.results)
-					this.pullFlag = false;// 防上拉暴滑
-					setTimeout(()=>{this.pullFlag = true;},500)
-					if(this.hasNextPage){
-						this.pullUpOn = false
-						this.nomoreText = '上拉显示更多'
-					}else{
-						this.loadding = false
-						this.pullUpOn = false
-						this.nomoreText = '已至底部'
-					}
-				}).catch(error =>{
-					this.$util.msg(error.msg,2000);
-				})
-			},
-			ischeck(item,pro){//为未选中的时候改变为true,反之为true
-				pro.productsChecked = !pro.productsChecked;
-				this.updateProductCheckedAllBtn(item);
-				this.updateCheckAllBtn();
-			},
-			updateProductCheckedAllBtn(item) {// 单独每个供应商的勾选判断
-				let productsList = item.productsList,
-					productsCheckedLength = 0,
-					disabledLength = 0;
-				if(this.isshowDelbtn) {
-					productsList.forEach(pros => {
-						if(pros.productsChecked) {
-							productsCheckedLength++;
-						}
-					})
-				} else {
-					productsList.forEach(pros => {
-						if(pros.productsChecked && pros.validFlag != '3') {
-							productsCheckedLength++;
-						}
-						if(pros.validFlag == '3') {disabledLength++;}
-					})
-				}
-				item.checked = productsCheckedLength === productsList.length - disabledLength;
-			},
-			updateCheckAllBtn() {// 全选勾选判断
-				let goodsCheckedLength = 0,
-					disabledListLength = 0,
-					goodsList = this.goodsList;
-				goodsList.forEach(item => {
-					if(item.checked) {
-						goodsCheckedLength++;
-					}
-					if(item.isDisabled && !this.isshowDelbtn) {
-						disabledListLength++;
-					}
-				})
-				this.isCheckAll = goodsCheckedLength === goodsList.length - disabledListLength;
-			},
-			checkShop(item){//与单选商品类似
-				item.checked = !item.checked;
-				this.setProductChecked(item);
-				this.updateCheckAllBtn();
-			},
-			setProductChecked(item) {
-				let products = item.productsList;
-				products.forEach(pros=>{
-					if(item.checked) {
-						if(pros.validFlag =='3'){
-							// 无效
-							this.isNnder = true;
-							pros.productsChecked = this.isshowDelbtn ?true :false;
-						}else{
-							// 有效
-							this.isNnder = false;
-							pros.productsChecked = true;
-						}
-					} else {
-						pros.productsChecked = false;
-					}
-				})
-			},
-			updateBothCheckBtn() {
-				if(this.isshowDelbtn) {
-					// 当管理删除按钮出现时,失效的商品可被选择
-					this.goodsList.forEach((item)=>{
-						item.checked = this.isCheckAll;
-						this.setProductChecked(item);
-					})
-				} else {
-					this.goodsList.forEach((item)=>{
-						item.checked = this.isCheckAll && !item.isDisabled;
-						this.setProductChecked(item);
-					})
-				}
-			},
-			checkAll(){//全选方法内调用方法
-			    this.isCheckAll = !this.isCheckAll;
-				this.updateBothCheckBtn();     
-			},
-			totalShopPeice(){//每次所属会所下的商品增减重新计算合计价格&减去含有下架的商品
-				let prosPrice=0;
-				let validPrice =0;
-				let validList=[];
-				let productsList=[];
-				this.goodsList.map((item,index)=>{
-					productsList=item.productsList;
-					prosPrice=productsList.reduce((p,e)=>p+e.retailPrice*e.productCount,0);
-					productsList.forEach(pros =>{
-						if(pros.validFlag =='3'){
-							validList.push(pros)
-							validPrice = validList.reduce((p,e)=>p+e.retailPrice*e.productCount,0);
-							item.totalPrice = prosPrice - validPrice
-						}else{
-							item.totalPrice = prosPrice
-						}
-					})
-				})
-			},
-			totalPeice(){	//计算总价格,每次调用此方法,将初始值为0,遍历价格并累加
-			    this.allPrice = 0
-				let prosPrice=0;
-				let validPrice=0;
-				let validList =[];
-				let productsList =[];
-			    this.goodsList.forEach((item,index)=>{
-					productsList=item.productsList;
-					productsList.forEach(pros=>{	
-						if(pros.productsChecked){
-							prosPrice+=pros.retailPrice*pros.productCount;
-							if(pros.validFlag =='3'){
-								validList.push(pros)
-								validPrice = validList.reduce((p,e)=>p+e.retailPrice*e.productCount,0);
-								this.allPrice = prosPrice - validPrice
-							}else{
-								this.allPrice = prosPrice
-							}
-						}	
-					})
-			    })
-			},
-			totalCount(){//计算总数量
-			    this.allCount = 0
-				let prosAllCount=0
-				let validCount = 0
-				let validList =[];
-				let productsList =[];
-			    this.goodsList.forEach(item=>{
-					productsList = item.productsList
-					productsList.forEach(pros=>{
-						if(pros.productsChecked){
-							prosAllCount+=parseInt(pros.productCount);
-							if(pros.validFlag =='3'){
-								validList.push(pros)
-								validList.forEach(val =>{
-									validCount += val.productCount
-								})
-								this.allCount = prosAllCount - validCount
-							}else{
-								this.allCount = prosAllCount
-							}
-						}
-					})
-			    })
-			},		
-			changeCountAdd(item,pros){//商品数量加加
-				if(pros.productCount>=pros.stock){
-					pros.productCount= pros.stock
-					this.isStock =true
-					return
-				}else{
-					pros.productCount++
-					this.processActivityPrice(pros)
-					this.isStock =false
-				}
-				this.updateShoppogNum(pros)
-				this.totalShopPeice();
-			},
-			changeCountSub(item,pros){//商品数量减减
-				if(pros.productCount<=pros.minBuyNumber){
-					pros.productCount= pros.minBuyNumber
-					this.$util.msg(`该商品最小起订量为${pros.minBuyNumber}`,2000);
-					return
-				}else{
-					pros.productCount--
-					this.processActivityPrice(pros)
-				}
-				this.updateShoppogNum(pros)
-				this.totalShopPeice();
-			},
-			changeNnmber(e,item,pros){//输入商品数量更新
-				let _value = e.detail.value;
-				if(!this.$api.isNumber(_value)){
-					pros.productCount = pros.minBuyNumber
-				}else if(_value < pros.minBuyNumber){	
-					this.$util.msg(`该商品最小起订量为${pros.minBuyNumber}`,2000);
-					pros.productCount = pros.minBuyNumber
-				}else{
-					pros.productCount = e.detail.value
-					this.processActivityPrice(pros)
-				}
-				this.updateShoppogNum(pros)
-				this.totalShopPeice();
-			},
-			processActivityPrice(pros){//单独处理活动价格和阶梯价格
-				let ladderPriceList = pros.ladderPriceList;
-				if(pros.ladderPriceFlag == '1'){
-					ladderPriceList.forEach((item,index)=>{
-						if(pros.productCount>=item.buyNum){
-							pros.retailPrice = item.buyPrice
-						}
-					})
-				}else{
-					pros.retailPrice = pros.retailPrice
-				}
-			},
-			updateShoppogNum(pros){//加减购物车商品更新到后台
-				let params ={userID:this.userID,productID:pros.productID,productCount:pros.productCount}
-				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.productsList
-					products.forEach(pros=>{
-						if(pros.productsChecked){
-						    setGoodsList.push(pros.productID)
-						}
-					})
-				})
-				if(setGoodsList == ''){
-					this.$util.msg("请先选择结算商品~",2000);
-					return
-				}else{
-					/**
-					 * @获取勾选的商品ID拼接字符串逗号隔开,最后一个逗号去掉
-					 * @获取勾选的商品分类ID拼接字符串格式逗号隔开,最后一个逗号去掉
-					 */
-					let productID = '';
-					this.goodsList.forEach(el=>{
-						el.productsList.forEach(pros=>{
-							if(pros.productsChecked){
-							   productID += pros.productID+','
-							}
-						})
-					})
-					let cartPramsData={
-							allPrice:this.allPrice,
-							allCount:this.allCount,
-							productID:productID.substring(0,productID.lastIndexOf(',')),
-							productCount:''
-					}
-					this.$api.navigateTo(`/pages/user/order/create-order?data=${JSON.stringify({data:cartPramsData})}`)
-				}
-			},
-			showDelManager(){//显示删除商品管理
-				this.isshowDelbtn = true;
-				this.isNnder = true;
-				if(this.isCheckAll) {
-					this.updateBothCheckBtn();	
-				} else {
-					// 失效也被勾选
-					this.goodsList.forEach(item => {
-						if(item.checked) {
-							item.productsList.forEach(pros => {
-								pros.productsChecked = true;
-							})
-						}
-					})
-					this.updateCheckAllBtn();
-				}
-			},
-			hideDelManage(){//隐藏删除商品管理			
-				this.isshowDelbtn = false;
-				if(this.isCheckAll) {
-					this.updateBothCheckBtn();	
-				} else {
-					// 失效商品取消勾选
-					this.goodsList.forEach(item => {
-						if(item.isDisabled) {
-							item.checked = false;
-						}
-						item.productsList.forEach(pros => {
-							if(pros.validFlag == '3') {
-								pros.productsChecked = false;
-							}
-						})
-					})
-					this.updateCheckAllBtn();
-				}
-			},
-			deleteList(){//删除购物车商品	
-				this.delGoodsList=[];
-				this.goodsList.forEach(delitem=>{
-					let products = delitem.productsList
-					products.forEach(pros=>{
-						if(pros.productsChecked){
-						    this.delGoodsList += pros.productID+','
-						}
-					})
-				})
-				if(this.delGoodsList.length == 0){
-					this.$util.msg("请选择要删除的商品~",2000);
-					return
-				}else{				
-					this.$util.modal('','确定删除选中的商品吗?','确定','取消',true,() =>{
-						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/home'
-				});
-			},
-			goNavto(url){
-				uni.navigateTo ({
-					url
-				})
-			},
-			navToListPage(id){
-				this.isModallayer = true;
-				this.$api.navigateTo(`/pages/goods/product?id=${id}`)
-			}
-		},
-		watch:{//深度监听所有数据,每次改变重新计算总价和总数
-		    goodsList:{
-		        deep:true,
-		        handler(val,oldval){
-		            this.totalPeice()
-		            this.totalCount()
-		        }
-		    }
-		},
-		onReachBottom() {
-			if(this.hasNextPage){
-				this.loadding = true
-				this.pullUpOn = true
-				this.getOnReachBottomData()
-			}	
-		},
-		onPullDownRefresh() {//下拉刷新
-			this.initGetCartGoodsList()
-			uni.stopPullDownRefresh()
-		},
-		onShow(){
-			if(this.hasLogin){
-				this.initData()
-			}else{
-				this.initLogin()
-			}
-		},
-	}
-</script>
-
-<style lang="scss">
-	page{
-		background: #f7f7f7;
-	}
-	.cart-content{
-		position: relative;
-		padding-bottom:74rpx;
-	}
-	.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;
-	}
-	.checkbox-box{
-		display: flex;
-		align-items: center;
-		.checkbox{
-			display: flex;
-			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;
-			font-size: 36rpx;
-			color:$color-system;
-		}
-		&.disabled{
-			.checkbox{
-				color:#999999
-			}
-		}
-		.text{
-			font-size: $font-size-24;
-			margin-left: 10rpx;
-		}
-	}
-	.goods-list{
-		width: 100%;
-		height: auto;
-		border-top: 1px solid #EBEBEB;
-		background-color: #F7F7F7;
-		.goods-item{
-			width: 702rpx;
-			padding: 0 24rpx;
-			background: #FFFFFF;
-			margin-bottom: 24rpx;
-		}
-		.shoptitle{
-			display: flex;
-			align-items: center;
-			height: 80rpx;
-			// border-bottom: 1px solid #EBEBEB;
-			line-height: 80rpx;
-			.checkbox-box{
-				padding: 10rpx;
-			}
-			.text{
-				margin-left: 37rpx;
-				font-size: $font-size-28;
-				color: $text-color;
-				text-align: left;
-				font-weight: bold;
-			}
-		}
-		.goods-pros{
-			width: 100%;
-			height: auto;
-		}	
-		.goods-pros-t{
-			display: flex;
-			align-items: center;
-			width: 100%;
-			height: 217rpx;
-			padding:0 0 26rpx 0;
-			.checkbox-box{
-				padding: 10rpx;
-			}
-			.pros-img{
-				width: 210rpx;
-				height: 100%;
-				border-radius: 10rpx;
-				margin:0 26rpx 0 38rpx;
-				border:1px solid #f3f3f3;
-				image{
-					width: 100%;
-					height: 100%;
-					border-radius: 10rpx;
-				}
-			}
-		}
-		.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: 386rpx;
-			height: 100%;
-			line-height: 36rpx;
-			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;
-				.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-24;
-					margin-right: 24rpx;
-				}
-			}
-			.productspec{
-				height: 36rpx;
-				color: #999999;
-			}
-			.productprice{
-				height: 48rpx;
-				position: absolute;
-				width: 100%;
-				bottom: 0;
-				.price{
-					line-height: 48rpx;
-					font-size: $font-size-28;
-					width: 48%;
-					color: #FF2A2A;
-					float: left;
-					&.disabled{
-						color: #999999;
-					}
-					.money-sign{
-						font-size: $font-size-24;
-						color: #FF2A2A;
-					}
-				}
-				.count{
-					height: 100%;
-					float: right;
-					position: relative;
-					&.show{
-						display: block;
-					}
-					&.none{
-						display: none;
-					}
-					.number-box{
-						display: flex;
-						justify-content: center;
-						align-items: center;
-						.iconfont{
-							font-size: $font-size-24;
-							padding:0 20rpx;
-							color: $text-color;
-							text-align: center;
-							line-height: 48rpx;
-							font-weight: bold;
-						}
-						.btn-input{
-							width: 62rpx;
-							height: 48rpx;
-							line-height: 48rpx;
-							background: #F8F8F8;
-							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;
-						}
-					}
-				}
-			}
-		}
-	}
-	.footer{
-		width: 100%;
-		background-color: #FFFFFF;
-		height: 110rpx;
-		position: fixed;
-		bottom: 0rpx;
-		z-index: 10;
-		.footer-le{
-			width: 490rpx;
-			height: 100%;
-			padding:0 30rpx;
-			float: left;
-			.text{
-				font-weight: bold;
-			}
-			.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;
-				}
-			}
-			.foot-check-delbtn{
-				float: left;
-				.delBtn{
-					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;
-					border-radius: 0;
-					-webkit-tap-highlight-color: transparent;
-					overflow: hidden;
-					background-color:#FFFFFF;
-					color: #FF2A2A;
-					padding: 0 24rpx;
-					display: flex;
-					justify-content: center;
-					align-items: center;
-					line-height: 110rpx;
-					font-weight: bold;
-					&.none{
-						display: none;	
-					}
-				}
-			}
-			.sum{
-				font-size: $font-size-28;
-				line-height: 110rpx;
-				color: $text-color;
-				display: flex;
-				justify-content: flex-end;
-				.money{
-					color: #FF2A2A;
-				}
-				.money-sign{
-					font-size: $font-size-24;
-					color: #FF2A2A;
-				}
-			}
-		}
-		.footer-ri{
-			width: 200rpx;
-			height: 100%;
-			background:linear-gradient(135deg,rgba(242,143,49,1) 0%,rgba(225,86,22,1) 100%);
-			float: right;
-			display: flex;
-			justify-content: space-between;
-			align-items: center;
-			z-index: 999;
-			&.none{
-				display: none;
-			}
-			.btn{
-				width: 200rpx;
-				height: 100%;
-				font-size: $font-size-28;
-				line-height: 110rpx;
-				color: #FFFFFF;
-				display: flex;
-				justify-content: center;
-				align-items: center;
-			}
-		}
-		.footer-del{
-			width: 400rpx;
-			height: 100%;
-			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);
-				}
-			}
-		}
-	}
+<template>
+	<view class="container cart clearfix" v-if="hasLogin"> 	
+		<tui-skeleton v-if="skeletonShow" backgroundColor="#fafafa" borderRadius="10rpx" :isLoading	="true" :loadingType="5"></tui-skeleton>
+		<view class="container-cart-main tui-skeleton">
+			<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">
+							<view class="shoptitle">
+								<!--选择商店的全部商品"-->
+								<view class="checkbox-box" @click.stop="checkShop(item)">
+									<button class="checkbox iconfont" 
+											:class="[item.checked ?'icon-gouxuanl':'icon-weigouxuan']" 									
+											:disabled="item.isDisabled && !isshowDelbtn">
+									</button>
+								</view>
+								<view class="text">{{item.name}}</view> 
+							</view>
+							<view class="productlist">
+								<view 	class="goods-pros" v-for="(pros,idx) in item.productsList" :key="idx" >
+									<view class="goods-pros-t">
+										<!--选择商品-->
+										<view class="checkbox-box" @click.stop="ischeck(item,pros)" :class="[pros.validFlag == '3' && !isshowDelbtn ?'disabled' : '']">
+											<button class="checkbox iconfont" 
+													:disabled="pros.validFlag == '3' && !isshowDelbtn"
+													:class="[pros.productsChecked ?'icon-gouxuanl':'icon-weigouxuan']">
+											</button>
+										</view>
+										<view class="pros-img" @click.stop="navToListPage(pros.productID)"	><image :src="pros.mainImage ? pros.mainImage:''" alt="" /></view>
+										<view class="pros-product">
+											<view class="producttitle" @click.stop="navToListPage(pros.productID)"	>
+												<text v-if="pros.validFlag == '3'" class="no-text">商品已下架</text>{{pros.name}}
+											</view>
+											<view class="productspec">规格:{{pros.unit ? pros.unit : ''}}</view>
+											<view class="productprice">
+												<!--使用过滤器对总价改变-->
+												<view class="price" :class="[pros.validFlag == '3' ?'disabled' : '']">
+													<text :class="[pros.validFlag == '3' ?'disabled' : 'money-sign']">¥</text>
+													{{pros.retailPrice?pros.retailPrice.toFixed(2):''}}
+												</view>
+												<view class="count" v-if="pros.validFlag == '2'"  :class="[isshowDelbtn ? 'none':'show']">
+													<text class="count-tips" v-if="pros.productCount<pros.minBuyNumber">起订量:{{pros.minBuyNumber}}</text>
+													<text class="count-tips step" v-if="pros.isStep">购买量必须为起订量的整数倍</text>
+													<view class="number-box">
+														<view  class="iconfont icon-jianhao" :class="[pros.validFlag == '3'?'disabled':'']" @click="changeCountSub(item,pros)"></view>
+														<input class="btn-input" type="number" maxlength='4' v-model="pros.productCount" @blur="changeNnmber($event,item,pros)" @focus="changeInput(pros)">
+														<view  class="iconfont icon-jiahao"  :class="[pros.validFlag == '3'?'disabled':'']" @click="changeCountAdd(item,pros)"></view>
+													</view>
+												</view>
+											</view>
+										</view>	
+									</view>
+								</view>
+							</view>	
+							<view class="goods-pros-b" :class="[isshowDelbtn ? 'none':'show']" >
+								<view class="sum">合计:<text class="money"><text class="money-sign">¥</text>{{item.totalPrice.toFixed(2)}}</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">清空失效商品</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-gouxuanl':'icon-weigouxuan']">
+										</button>
+									</view>
+									<view class="pros-img">
+										<image :src="failure.mainImage ? failure.mainImage:''" alt="" />
+										<text class="img-tip">失效</text>
+									</view>
+									<view class="pros-product">
+										<view class="producttitle">{{failure.name}}</view>
+										<view class="productspec">规格:{{failure.unit ? failure.unit : ''}}</view>
+										<view class="productstate">{{failureStateText(failure.failureState)}}</view>
+									</view>
+									<view class="pros-marks" v-if="failure.isFailureLayer"></view>
+								</view>
+							</view>
+						</view>	
+					</view>
+				</view>
+				<!-- 脚部菜单 -->
+				<view class="footer">
+					<view class="footer-le">
+						<view class="foot-check checkbox-box" @tap.stop="checkAll()">
+							<button class="checkbox iconfont" :class="[isCheckAll?'icon-gouxuan':'icon-weigouxuan']"></button> 
+							<view class="text">全选</view>
+						</view>
+						<view class="foot-check-delbtn">
+							<button class="delBtn" @tap.stop="showDelManager">删除</button>
+						</view>
+						<view class="sum">总价:<text class="money-sign">¥</text><text class="money">{{allPrice.toFixed(2)}}</text></view>
+					</view>
+					<view v-if="!isshowDelbtn" class="footer-ri" >
+						<view class="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>
+			</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>
+		<!-- 透明模态层 -->
+		<modal-layer v-if='modallayer'></modal-layer>
+	</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 modalLayer from "@/components/modal-layer"
+	import { mapState,mapMutations } from 'vuex';
+	import { queryShoppingCartList,shoppingCartUpdate,shoppingCartDelete } from "@/api/cart.js" 
+	
+	export default{
+		components:{
+			tuiSkeleton,
+			tuiLoadmore,
+			tuiNomore,
+			modalLayer
+		},
+		data(){
+			return{
+				CustomBar:this.CustomBar,// 顶部导航栏高度
+				isIphoneX:this.$store.state.isIphoneX,
+				userID:'',
+				alertType:'',
+				isStock:'',
+				failureList:[],	//失效商品列表
+				goodsList:[],	//购物车的商品
+				delGoodsList:'',//要删除的商品
+				setGoodData:'', //确认订单的商品
+				isCheckAll:false,//是否全选
+				allPrice:0,//所有价格
+				allCount:0,//被选中的产品数量
+				isNnder:true,
+				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,
+			}
+		},
+		onLoad(){
+			this.setScrollHeight();
+		},
+		computed: {
+			...mapState(['hasLogin','userInfo'])
+		},
+		filters:{//单件商品的价格 × 数量
+		    totalprice(val,count){
+		        return (val * count).toFixed(2)
+		    }
+		},	
+		methods:{
+			initData(){
+				this.isModallayer = false //遮罩层 防止多次点击
+				this.skeletonShow = true //预加载圆圈
+				this.isCheckAll=false//是否全选
+				this.$api.getStorage().then((resolve) => {
+					this.userID = resolve.userID;
+					this.initGetCartGoodsList();
+				})	
+			},
+			initLogin(){
+				authorize.getSetting().then(wxResponse =>{// console.log('是否已授权',res);//0:为取消授权 1:为已授权 2:为未操作
+					if(wxResponse == 1){
+						this.$api.redirectTo('/pages/login/login?type=4')
+					}else{
+						this.$api.navigateTo('/pages/authorization/authorization?type=1')
+					}
+				})	
+			},
+			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
+				let params = {userID:this.userID}
+				queryShoppingCartList(params).then(response =>{
+					this.skeletonShow = false
+					this.$store.commit('updateAllNum',response.data.cartQuantity)
+					const responseData = response.data
+					if(responseData.pageDate.length > 0 || responseData.failureList.length > 0){
+						this.isEmpty =false
+					}else{
+						this.isEmpty =true
+					}
+					if(responseData.pageDate && responseData.pageDate.length > 0 ){
+						this.goodsList = responseData.pageDate;
+						this.goodsList.forEach((item,index) => {
+							let productsListLength = item.productsList.length,
+								invalidLength = 0;
+							item.productsList.forEach(pros => {
+								pros.shopID = item.shopID;
+								pros.isStep = false
+								if(pros.validFlag == '3' ) {invalidLength++;}
+								if(pros.step === 2){ 
+									if(pros.productCount % pros.minBuyNumber != 0){
+										pros.productCount = pros.minBuyNumber
+										this.totalShopPeice()
+										this.updateShoppogNum(pros)
+									}
+								}
+							})
+							item.isDisabled = invalidLength === productsListLength;
+						})
+					} else {
+						this.goodsList = [];
+					}
+					if( responseData.failureList && responseData.failureList.length > 0){
+						let newFailureList = [],isFailureLayer;
+						responseData.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
+					} else {
+						this.failureList = [];
+					}
+				}).catch(error =>{
+					this.$util.msg(error.msg,2000);
+				})
+			},		
+			getOnReachBottomData(){//上拉加载
+				this.pageNum+=1
+				let params = {userID:this.userID,pageNum:this.pageNum,pageSize:this.pageSize}
+				queryShoppingCartList(params).then(response =>{
+					let resultsData = response.data.pageDate
+					this.hasNextPage = resultsData.hasNextPage;
+					this.goodsList = this.goodsList.concat(resultsData.results)
+					this.goodsList.forEach((item,index) => {
+						let productsListLength = item.productsList.length,
+							invalidLength = 0;
+						item.productsList.forEach(pros => {
+							pros.shopID = item.shopID;
+							pros.isStep = false
+							if(pros.validFlag == '3' ) {invalidLength++;}
+							if(pros.step === 2){ 
+								if(pros.productCount % pros.minBuyNumber != 0){
+									pros.productCount = pros.minBuyNumber
+									this.totalShopPeice()
+									this.updateShoppogNum(pros)
+								}
+							}
+						})
+						item.isDisabled = invalidLength === productsListLength;
+					})
+					this.pullFlag = false;// 防上拉暴滑
+					setTimeout(()=>{this.pullFlag = true;},500)
+					if(this.hasNextPage){
+						this.pullUpOn = false
+						this.nomoreText = '上拉显示更多'
+					}else{
+						this.loadding = false
+						this.pullUpOn = false
+						this.nomoreText = '已至底部'
+					}
+				}).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;
+				this.updateProductCheckedAllBtn(item);
+				this.updateCheckAllBtn();
+			},
+			updateProductCheckedAllBtn(item) {// 单独每个供应商的勾选判断
+				let productsList = item.productsList,
+					productsCheckedLength = 0,
+					disabledLength = 0;
+				if(this.isshowDelbtn) {
+					productsList.forEach(pros => {
+						if(pros.productsChecked) {
+							productsCheckedLength++;
+						}
+					})
+				} else {
+					productsList.forEach(pros => {
+						if(pros.productsChecked && pros.validFlag != '3') {
+							productsCheckedLength++;
+						}
+						if(pros.validFlag == '3') {disabledLength++;}
+					})
+				}
+				item.checked = productsCheckedLength === productsList.length - disabledLength;
+			},
+			updateCheckAllBtn() {// 全选勾选判断
+				let goodsCheckedLength = 0,
+					disabledListLength = 0,
+					goodsList = this.goodsList,
+					failureList = this.failureList;
+				goodsList.forEach(item => {
+					if(item.checked) {
+						goodsCheckedLength++;
+					}
+					if(item.isDisabled && !this.isshowDelbtn) {
+						disabledListLength++;
+					}
+				})
+				failureList.forEach(failureItem=>{
+					if(failureItem.productsChecked){
+						goodsCheckedLength++;
+					}
+				})
+				this.isCheckAll = goodsCheckedLength === goodsList.length+failureList.length - disabledListLength;
+			},
+			checkShop(item){//与单选商品类似
+				item.checked = !item.checked;
+				this.setProductChecked(item);
+				this.updateCheckAllBtn();
+			},
+			setProductChecked(item) {
+				let products = item.productsList;
+				products.forEach(pros=>{
+					if(item.checked) {
+						if(pros.validFlag =='3'){
+							// 无效
+							this.isNnder = true;
+							pros.productsChecked = this.isshowDelbtn ?true :false;
+						}else{
+							// 有效
+							this.isNnder = false;
+							pros.productsChecked = true;
+						}
+					} else {
+						pros.productsChecked = false;
+					}
+				})
+				
+			},
+			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;
+				this.updateBothCheckBtn();     
+			},
+			totalShopPeice(){//每次所属会所下的商品增减重新计算合计价格&减去含有下架的商品
+				let prosPrice=0;
+				let validPrice =0;
+				let validList=[];
+				let productsList=[];
+				this.goodsList.map((item,index)=>{
+					productsList=item.productsList;
+					prosPrice=productsList.reduce((p,e)=>p+e.retailPrice*e.productCount,0);
+					productsList.forEach(pros =>{
+						if(pros.validFlag =='3'){
+							validList.push(pros)
+							validPrice = validList.reduce((p,e)=>p+e.retailPrice*e.productCount,0);
+							item.totalPrice = prosPrice - validPrice
+						}else{
+							item.totalPrice = prosPrice
+						}
+					})
+				})
+			},
+			totalPeice(){	//计算总价格,每次调用此方法,将初始值为0,遍历价格并累加
+			    this.allPrice = 0
+				let prosPrice=0;
+				let validPrice=0;
+				let validList =[];
+				let productsList =[];
+			    this.goodsList.forEach((item,index)=>{
+					productsList=item.productsList;
+					productsList.forEach(pros=>{	
+						if(pros.productsChecked){
+							prosPrice+=pros.retailPrice*pros.productCount;
+							if(pros.validFlag =='3'){
+								validList.push(pros)
+								validPrice = validList.reduce((p,e)=>p+e.retailPrice*e.productCount,0);
+								this.allPrice = prosPrice - validPrice
+							}else{
+								this.allPrice = prosPrice
+							}
+						}	
+					})
+			    })
+			},
+			totalCount(){//计算总数量
+			    this.allCount = 0
+				let prosAllCount=0
+				let validCount = 0
+				let validList =[];
+				let productsList =[];
+			    this.goodsList.forEach(item=>{
+					productsList = item.productsList
+					productsList.forEach(pros=>{
+						if(pros.productsChecked){
+							prosAllCount+=parseInt(pros.productCount);
+							if(pros.validFlag =='3'){
+								validList.push(pros)
+								validList.forEach(val =>{
+									validCount += val.productCount
+								})
+								this.allCount = prosAllCount - validCount
+							}else{
+								this.allCount = prosAllCount
+							}
+						}
+					})
+			    })
+			},		
+			changeCountAdd(item,pros){//商品数量加加
+				if(pros.step === 2){
+					pros.isStep = false
+					pros.productCount += pros.minBuyNumber
+					this.processActivityPrice(pros)
+					this.isStock = false
+				}else{
+					pros.productCount++
+					this.processActivityPrice(pros)
+					this.isStock = false
+				}
+				this.updateShoppogNum(pros)
+				this.totalShopPeice();
+			},
+			changeCountSub(item,pros){//商品数量减减
+				if(pros.productCount<=pros.minBuyNumber){
+					pros.productCount= pros.minBuyNumber
+					this.$util.msg(`该商品最小起订量为${pros.minBuyNumber}`,2000);
+					return
+				}else{
+					if(pros.step === 2){
+						pros.isStep = false
+						pros.productCount -= pros.minBuyNumber
+					}else{
+						pros.productCount--
+					}
+					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.productCount = pros.minBuyNumber
+				}else if(_value < pros.minBuyNumber){	
+					this.$util.msg(`该商品最小起订量为${pros.minBuyNumber}`,2000);
+					pros.productCount = pros.minBuyNumber
+				}else if(_value % pros.minBuyNumber != 0){
+					pros.isStep = true
+					pros.productCount = pros.minBuyNumber
+				}else{
+					pros.isStep = false
+					pros.productCount = e.detail.value
+					this.processActivityPrice(pros)
+				}
+				this.updateShoppogNum(pros)
+				this.totalShopPeice();
+			},
+			processActivityPrice(pros){//单独处理活动价格和阶梯价格
+				let ladderPriceList = pros.ladderPriceList;
+				if(pros.ladderPriceFlag == '0' || pros.actStatus == 1){
+					pros.retailPrice = pros.retailPrice
+				}else{
+					ladderPriceList.forEach((item,index)=>{
+						if(pros.productCount>=item.buyNum){
+							pros.retailPrice = item.buyPrice
+						}
+					})
+				}
+			},
+			updateShoppogNum(pros){//加减购物车商品更新到后台
+				let params ={userID:this.userID,productID:pros.productID,productCount:pros.productCount}
+				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.productsList
+					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.productsList.forEach(pros=>{
+							if(pros.productsChecked){
+							   if(pros.productCount<pros.minBuyNumber){
+								   this.isNoConfim = true
+							   }
+							}
+						})
+					})
+					if(this.isNoConfim){
+						this.$util.modal('','有商品的购买量没达到最小起订量,请修改数量后再次提交结算','去修改','',false,() =>{})
+						return;
+					}
+					let productID = '';
+					this.goodsList.forEach(el=>{//获取勾选的商品ID拼接字符串逗号隔开,最后一个逗号去掉
+						el.productsList.forEach(pros=>{
+							if(pros.productsChecked){
+							   productID += pros.productID+','
+							}
+						})
+					})
+					let cartPramsData={
+							allPrice:this.allPrice,
+							allCount:this.allCount,
+							productID:productID.substring(0,productID.lastIndexOf(',')),
+							productCount:''
+						}
+					this.$api.navigateTo(`/pages/user/order/create-order?data=${JSON.stringify({data:cartPramsData})}`)
+				}
+			},
+			showDelManager(){//显示删除商品管理
+				this.isshowDelbtn = true;
+				this.isNnder = true;
+				if(this.isCheckAll) {
+					this.updateBothCheckBtn();	
+				} else {
+					this.goodsList.forEach(item => {
+						if(item.checked) {
+							item.productsList.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.productsList.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.productsList
+					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,() =>{
+						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,() =>{
+					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/home'
+				});
+			},
+			goNavto(url){
+				uni.navigateTo ({
+					url
+				})
+			},
+			navToListPage(id){
+				this.isModallayer = true;
+				this.$api.navigateTo(`/pages/goods/product?id=${id}`)
+			},
+			failureToProduct(failure){
+				if(failure.failureState == 1){
+					this.$util.msg('商品已丢失,不能查看',2000)
+					return
+				}else if(failure.failureState == 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
+			}
+		},
+		watch:{//深度监听所有数据,每次改变重新计算总价和总数
+		    goodsList:{
+		        deep:true,
+		        handler(val,oldval){
+		            this.totalPeice()
+		            this.totalCount()
+		        }
+		    }
+		},
+		onPullDownRefresh() {//下拉刷新
+			this.initGetCartGoodsList()
+			uni.stopPullDownRefresh()
+		},
+		onShow(){
+			if(this.hasLogin){
+				this.initData()
+			}else{
+				this.initLogin()
+			}
+		},
+	}
+</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;
+	}
+	.checkbox-box{
+		display: flex;
+		align-items: center;
+		.checkbox{
+			display: flex;
+			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;
+			font-size: 36rpx;
+			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{
+			display: flex;
+			align-items: center;
+			height: 80rpx;
+			// border-bottom: 1px solid #EBEBEB;
+			line-height: 80rpx;
+			.checkbox-box{
+				padding: 10rpx;
+			}
+			.text{
+				display: block;
+				overflow: hidden;
+				text-overflow:ellipsis;
+				white-space: nowrap;
+				margin-left: 37rpx;
+				font-size: $font-size-28;
+				color: $text-color;
+				text-align: left;
+				font-weight: bold;
+			}
+		}
+		.goods-pros{
+			width: 100%;
+			height: auto;
+		}	
+		.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: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;
+			}
+			.productprice{
+				height: 48rpx;
+				position: absolute;
+				width: 100%;
+				bottom: 0;
+				.price{
+					line-height: 48rpx;
+					font-size: $font-size-28;
+					width: 48%;
+					color: #FF2A2A;
+					float: left;
+					&.disabled{
+						color: #999999;
+					}
+					.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;
+						.iconfont{
+							font-size: $font-size-24;
+							padding:0 20rpx;
+							color: $text-color;
+							text-align: center;
+							line-height: 48rpx;
+							font-weight: bold;
+						}
+						.btn-input{
+							width: 62rpx;
+							height: 48rpx;
+							line-height: 48rpx;
+							background: #F8F8F8;
+							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;
+						}
+					}
+				}
+			}
+		}
+	}
+	.failure-list{
+		width: 702rpx;
+		height: auto;
+		padding: 0 24rpx;
+		margin-top: 20rpx;
+		background: #FFFFFF;
+		.failure-title{
+			width: 100%;
+			height: 80rpx;
+			line-height: 80rpx;
+			font-size: $font-size-28;
+			border-bottom: 1px solid #EBEBEB;
+			.title-txt{
+				float: left;
+				color: $text-color;
+				text-align: left;
+			}
+			.title-btn{
+				float: right;
+				color: $color-system;
+				text-align: right;
+			}
+		}
+		.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;
+				.checkbox-box{
+					padding: 10rpx;
+				}
+				.pros-img{
+					width: 210rpx;
+					height: 100%;
+					border-radius: 10rpx;
+					margin:0 20rpx;
+					border:1px solid #f3f3f3;
+					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: 10rpx 0 10rpx 0;
+						background:linear-gradient(34deg,rgba(255,149,42,1) 0%,rgba(225,86,22,1) 100%);
+						position: absolute;
+						left: 0;
+						top: 0;
+					}
+					image{
+						width: 100%;
+						height: 100%;
+						border-radius: 10rpx;
+					}
+				}
+				.pros-marks{
+					width: 722rpx;
					height: 250rpx;
+					z-index: 90;
+					background: rgba(0,0,0,.05);
+					position: absolute;
+					left:0;
+					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;
+				}
+				.productstate{
+					font-size: $font-size-28;
+					height: 44rpx;
+					color: #FF2A2A;
+					position: absolute;
+					bottom: 0;
+					left: 0;
+				}
+			}
+		}
+	}
+	.footer{
+		width: 100%;
+		background-color: #FFFFFF;
+		height: 110rpx;
+		position: fixed;
+		bottom: 0rpx;
+		z-index: 100;
+		.footer-le{
+			width: 490rpx;
+			height: 100%;
+			padding:0 30rpx;
+			float: left;
+			.text{
+				font-weight: bold;
+			}
+			.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;
+				}
+			}
+			.foot-check-delbtn{
+				float: left;
+				.delBtn{
+					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;
+					border-radius: 0;
+					-webkit-tap-highlight-color: transparent;
+					overflow: hidden;
+					background-color:#FFFFFF;
+					color: #FF2A2A;
+					padding: 0 24rpx;
+					display: flex;
+					justify-content: center;
+					align-items: center;
+					line-height: 110rpx;
+					font-weight: bold;
+					&.none{
+						display: none;	
+					}
+				}
+			}
+			.sum{
+				font-size: $font-size-28;
+				line-height: 110rpx;
+				color: $text-color;
+				display: flex;
+				justify-content: flex-end;
+				.money{
+					color: #FF2A2A;
+				}
+				.money-sign{
+					font-size: $font-size-24;
+					color: #FF2A2A;
+				}
+			}
+		}
+		.footer-ri{
+			width: 200rpx;
+			height: 100%;
+			background:linear-gradient(135deg,rgba(242,143,49,1) 0%,rgba(225,86,22,1) 100%);
+			float: right;
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			z-index: 999;
+			&.none{
+				display: none;
+			}
+			.btn{
+				width: 200rpx;
+				height: 100%;
+				font-size: $font-size-28;
+				line-height: 110rpx;
+				color: #FFFFFF;
+				display: flex;
+				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>

+ 169 - 135
pages/tabBar/home/home.vue

@@ -1,15 +1,13 @@
 <template>
-	<view class="container home clearfix">	
+	<view class="container home clearfix" :style="{paddingTop:CustomBar+'px'}">	
+		<cm-custom :navbar-data='nvabarData'></cm-custom>
 		<!-- 头部轮播 -->
 		<tui-skeleton v-if="skeletonShow" backgroundColor="#fafafa" borderRadius="10rpx" :isLoading	="true" :loadingType="5"></tui-skeleton>
-		<view :class="'container-home-'+ inputActive" class="tui-skeleton">
-			<view :class="'search-input-' + inputActive">
-				<bt-search :clickPath="clickPath" :toestText='hotSearchText'></bt-search>
-			</view>
-			<view class="banner-section">
-				<swiper class="banner tui-banner tui-skeleton-rect" circular @change="swiperChange" :autoplay="true" :interval="5000" :duration="500" :circular="true">
-					<swiper-item v-for="(item, index) in bannerImageList" :key="index" class="banner-item"> 
-						<image :src="item" />
+		<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">
+						<image :src="item" class="tui-slide-image" mode="scaleToFill"/>
 					</swiper-item>
 				</swiper>
 				<view class="swiper__dots-box" v-if="bannerImageList.length > 1">
@@ -29,7 +27,7 @@
 					</view>
 				</view>
 				<!-- 优选分类 -->
-				<view class="tabbar clearfix">
+				<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>
@@ -60,24 +58,21 @@
 					<text class="iconfont icon-xiayibu"></text>
 				</view>
 				<view class="hotgoods-swiper">
-					<scroll-view class="floor-list" scroll-x>
-						<view class="scoll-wrapper">
-							<view 
-								v-for="(item, index) in organizeProducts" :key="index"
-								class="floor-item"
-								@click.stop="navToDetailPage(item.productID)"
-							>
-								<image class="tui-skeleton-fillet" :src="item.mainImage" mode="aspectFill"></image>
+					<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="isLogin">
+								<view class="" v-if="hasLogin">
 									<view v-if="userIdentity == 4">
 										<view class="title-none" v-show="item.price1TextFlag == '1'">
 											<text class="p big">未公开价格</text>
 										</view>
 										<view class="title-none" v-show="item.price1TextFlag == '2'">
 											<text class="p big">价格仅会员可见</text>
+											<text class="p btn" @click.stop="this.$api.navigateTo(`/pages/login/apply?clubStatus=${clubStatus}`)">去升级</text>
 										</view>
 										<view class="price tui-skeleton-rect" v-show="item.price1TextFlag == '0'">
 											<text class="p sm">¥</text>
@@ -102,16 +97,16 @@
 								</view>	
 							</view>
 						</view>
-					</scroll-view>
+					</view>
 				</view>	
 			</view>
 			<!-- 底部 -->
 			<view class="footer-section ">
-				<view class="s-header tui-skeleton-fillet">
+				<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=""></image>
+					<image class="tui-banner" src="https://img.caimei365.com/group1/M00/03/71/Cmis2F3wna6AEwQlAAjGFdpI2LM357.png" mode="scaleToFill"></image>
 				</view>
 				<view class="f-tab-section">
 					<!-- 优选分类 -->
@@ -149,10 +144,9 @@
 
 <script>
 	import tuiSkeleton from "@/components/tui-skeleton/tui-skeleton"
-	import navigationTab from "@/components/cm-module/home/navigationTab.vue"
 	import authorize from '@/common/config/authorize.js'
 	import modalLayer from "@/components/modal-layer"
-	import btSearch from '@/components/uni-search/bt-search.vue'
+	import cmCustom from '@/components/cm-module/home/cm-custom.vue'
 	import uniStars from '@/components/uni-stars/uni-stars.vue'
 	import { userInfoLogin, queryHomeInfo } from "@/api/use.js"
 	import { queryPreferred } from "@/api/product.js"
@@ -160,9 +154,8 @@
 	export default {
 		components:{
 			tuiSkeleton,
-			navigationTab,
 			modalLayer,
-			btSearch,
+			cmCustom,
 			uniStars,
 		},
 		data() {
@@ -172,10 +165,17 @@
 						color: '#FF3333'
 					}
 				},
+				nvabarData: {//顶部自定义导航
+					showCapsule: 1, // 是否显示左上角图标  1表示显示  0表示不显示,
+					showSearch: 0,
+					title: '采美采购商城', // 导航栏 中间的标题
+					haveBack:false,
+					textLeft:this.$store.state.isIphone,
+					textColor:'#FFFFFF'
+				},
+				CustomBar:this.CustomBar,// 顶部导航栏高度
 				userID:'',
-				inputActive:'float',
-				hotSearchText:'你想要的这里都有',
-				clickPath:'/pages/search/search',
+				clubStatus:'',
 				current:0,
 				mode:'round',
 				modallayer:false,
@@ -197,8 +197,8 @@
 				secondModulesImage:'',//优惠模块icon2
 				thirdModulesName:'', //优惠模块3
 				navInforList:[
-					{text:'会员中心',icon:'https://img.caimei365.com/group1/M00/03/9E/Cmis216iRzOAEGPnAAA4hM3shV4061.png'},
-					{text:'在线客服',icon:'https://img.caimei365.com/group1/M00/03/9E/Cmis216iRzOAFXZBAABKeY23aWA452.png'}
+					{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'},
@@ -209,8 +209,7 @@
 			}
 		},
 		onLoad() {
-			this.getHomeInformation()
-			this.getOrganizeProducts()
+			
 		},
 		computed: {
 			...mapState(['hasLogin','userInfo','isWxAuthorize'])
@@ -224,6 +223,7 @@
 							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)
@@ -239,6 +239,8 @@
 							uni.setStorageSync('sessionid','JSESSIONID='+error.data)
 							this.$store.commit('updateStatus',error.data)
 						})
+						this.getHomeInformation()
+						this.getOrganizeProducts()
 					})
 				})
 			},		
@@ -260,7 +262,7 @@
 				})
 			},
 			getOrganizeProducts(){//获取模块三商品
-				queryPreferred({userId:this.userID,preferredFlag:100,pageNum:1,pageSize:5}).then(res =>{
+				queryPreferred({userId:this.userID,preferredFlag:100,pageNum:1,pageSize:6}).then(res =>{
 					this.organizeProducts = res.data.results
 				}).catch(error =>{
 					this.$util.msg(error.msg,2000)
@@ -299,6 +301,8 @@
 			},
 			showTost(){
 				this.$util.msg("正在开发中,敬请期待~",2000)
+				// this.$api.navigateTo(`/supplier/pages/login/share-info?scene=scene`)
+				// this.$api.navigateTo(`/seller/pages/login/login`)
 				// uni.navigateToMiniProgram({
 				// 	appId: 'wx5a5cda32926f55ac',
 				// 	path: '/pages/tabBar/home/home',
@@ -356,8 +360,10 @@
 			this.modallayer = false;
 			authorize.getSetting().then(res =>{// console.log('是否已授权',res);//0:为取消授权 1:为已授权 2:为未操作
 				if(res == 1){
-					
 					this.getWxAuthorize()
+				}else{
+					this.getHomeInformation()
+					this.getOrganizeProducts()
 				}
 			})			
 		}
@@ -368,42 +374,39 @@
 	page,.home{
 		width: 100%;
 		height: auto;
-	}			
-	.container-home-float{
-		padding-top: 0;
-	}
-	.container-home-fixed{
-		padding-top: 100rpx;
-	}
-	.search-input-float{
-		width: 100%;
-		height:auto;
-	}
-	.search-input-fixed{
-		width: 100%;
-		height:auto;
-		position: fixed;
-		top: 0;
-		left: 0;
-		z-index: 1000;
+	}	
+	.container-home{
 		background: #FFFFFF;
 	}
-	.banner-section{
+	.swiper-banner-box{
 		width: 100%;
-		height: 366rpx;
+		height: 360rpx;
+		padding-top:100rpx;
+		background:#FFFFFF url(https://img.caimei365.com/group1/M00/03/B0/Cmis217Z9LCALu9wAAAv45Bdpsk814.png)no-repeat;
 		position: relative;
+		background-size: cover;
 	}	
-	.banner{
-		width: 100%;
-		height: 366rpx;
-		image {
+	.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: 100%;
+			height: 340rpx;
+			display: block;
 		}
 	}
 	.swiper__dots-box{
 		position: absolute;
-		bottom: 10px;
+		bottom: 30rpx;
 		left: 0;
 		right: 0;
 		/* #ifndef APP-NVUE */
@@ -421,7 +424,7 @@
 			background-color:rgba(255,255,255,.7);
 		}
 		.swiper__dots-long{
-			width: 32rpx;
+			width: 35rpx;
 			height: 8rpx;
 			border-radius: 4rpx;
 			background-color: #ffff;
@@ -436,6 +439,12 @@
 		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;
@@ -457,12 +466,12 @@
 				width: 90rpx;
 				height: 90rpx;
 				margin-bottom: 8rpx;
-				border-radius: 50%;
+				border-radius: 32rpx;
 			}	
 		}
 		.cate-item-info {
 			width: 118rpx;
-			margin-right:76.5rpx;
+			margin-right:59.5rpx;
 			display: flex;
 			float: left;
 			flex-direction: column;
@@ -477,7 +486,7 @@
 				width: 90rpx;
 				height: 90rpx;
 				margin-bottom: 16rpx;
-				border-radius: 50%;
+				border-radius: 32rpx;
 			}	
 			button.contact-btn{
 				width: 118rpx;
@@ -499,24 +508,25 @@
 					width: 90rpx;
 					height: 90rpx;
 					margin-bottom: 0;
-					border-radius: 50%;
+					border-radius: 32rpx;
 				}
 			}
 		}
 	}
 	.hotgoods-section{
-		padding: 4rpx 0 24rpx 24rpx;
-		background: #fff;
+		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;
@@ -536,88 +546,112 @@
 		width: 100%;
 		height: auto;				
 		overflow: hidden;
-		scroll-view{
-			padding: 26rpx 0;
-			width: 100%;
-		}
+		padding-top: 24rpx;
+		background: #FFFFFF;
+		border-radius: 20rpx;
+		margin-bottom: 20rpx;
+		// box-shadow:0px 3px 6px rgba(225,86,22,0.07);
 		.scoll-wrapper{
-			display:flex;
-			align-items: flex-start;
-		}
-		.floor-item{
-			width: 210rpx;
-			padding-right: 24rpx;
-			font-size: $font-size-24;
-			color: $text-color;
-			line-height: 36rpx;
-			border-radius: 10rpx;			
-			image{
-				width: 210rpx;
-				height: 217rpx;
-				border-radius: 10rpx;
-			}
-			.title-none{
-				font-size: $font-size-26;
-				color: #FF2A2A;
-				line-height: 60rpx;
-			}
-			.title{
-				width: 210rpx;
-				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: 36rpx;
+			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;
-				display: flex;
-				margin-top: 8rpx;
-				.p-no{
-					font-size: $font-size-24;
-					color: $color-system;
-					margin-right: 5rpx;
-				}
-				.p-stars{
-					margin-top: 3rpx;
+				border-radius: 20rpx;
+				margin-bottom: 20rpx;
+				float: left;
+				&:nth-child(2n){
+					margin-right: 0;
 				}
 				image{
-					width:30rpx;
-					height: 36rpx;
+					width: 341rpx;
+					height: 341rpx;
+					border-radius: 20rpx 20rpx 0 0;
+					display: block;
+					margin-bottom: 20rpx;
 				}
-			}
-			.price{
-				color:#FF2A2A;
-				line-height: 20rpx;
-				margin-top: 18rpx;
-				.sm{
-					font-size: $font-size-24;
+				.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;
+					}
 				}
-				.big{
-					font-size: $font-size-28;
+				.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 30rpx 24rpx;
+		padding: 0  24rpx 0 24rpx;
+		background: #FFFFFF;
+		border-radius: 20rpx;
 		.s-header{
 			display:flex;
 			align-items:center;
-			height: 40rpx;
-			line-height: 40rpx;
-			margin-bottom: 38rpx;
+			height: 80rpx;
+			line-height: 80rpx;
 			.tip{
 				flex: 1;
 				font-size: 30rpx;

+ 341 - 162
pages/tabBar/user/user.vue

@@ -1,145 +1,172 @@
 <template>
-	<view class="container user clearfix" v-if="hasLogin">
+	<view class="container user clearfix">
+		<cm-custom :navbar-data='nvabarData' v-if="isCmcustom"></cm-custom>
 		<view class="user-section">
-			<view class="u-header">
-				<image src="https://img.caimei365.com/group1/M00/03/94/Cmis216Sk_SAPDwvAAcTspdl8h0610.png" mode=""></image>
-				<view class="u-header-main">
-					<view class="user-item">
-						<view class="logo-m">
-							<image :src="headpic == null? '../../../static/temp/icon-club@3x.png' : headpic" mode=""></image>
+			<view class="header" :style="{height:(CustomBar+90)-StatusBar+'px',paddingTop:CustomBar+'px',background:'url('+ bgImgUrl +')',backgroundSize:'cover'}">
+				<view class="header-main" v-if="hasLogin">
+					<view class="header-text">
+						<view class="user-item">
+							<text class="u-h1">{{name}}</text>
+							<text class="u-viptips" v-if="userIdentity == 2">{{userType}}</text>
+							<text class="u-tips" v-if="userIdentity == 4">{{userType}}</text>
 						</view>
+						<view class="user-item amount"><text class="u-p">账户余额:{{userMoney}}元</text></view>
 					</view>
-					<view class="user-item">
-						<text class="u-h1">{{name}}</text>
+					<view class="header-icon"><image :src="headpic == null? '../../../static/temp/icon-club@3x.png' : headpic" mode=""></image></view>
+				</view>
+				<view class="header-main-none" v-else>
+					<view class="header-text">
+						<view class="user-item">
+							<text class="u-h1" @click="navigator('/pages/login/login')">账号登录</text><text class="u-h1 line">|</text>
+							<text class="u-h1" @click="navigatorNex('/pages/login/register','2')">立即注册</text>
+						</view>
+						<view class="user-item">
+							<text class="u-p" @click="navigator('/pages/login/login')">登录商城了解更多产品信息吧!</text>
+						</view>
+						<view class="user-item" @click="navigatorNex('/pages/login/logincode','3')">
+							<view class="u-btn"><text>邀请码登录</text><text class="iconfont icon-xiangyouhuabeifen"></text></view>
+						</view>
 					</view>
-					<view class="user-item">
-						<text class="u-p">账户余额:{{userMoney}}元</text>
+					<view class="header-icon" @click="navigator('/pages/login/login')">
+						<image src="../../../static/temp/icon-club@3x.png" mode=""></image>
 					</view>
 				</view>
-			</view>
-			<!-- 订单 -->
-			<view class="user-order">
-				<view class="tab-title" @click="navigator('/pages/user/order/order-list?state=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('/pages/user/order/order-list?state=1')" hover-class="common-hover"  :hover-stay-time="50">
-						<view class="order-icon">
-							<image src="../../../static/temp/order1@3x.png" mode=""></image>
-							<text 	v-if="confirmedCount>0" 
-									class="uni-badge uni-badge-error uni-small uni-badge--small icon-num" 
-									:class="[confirmedCount < 10 ? 'goleft':'']">
-									{{confirmedCount == 99? '99+' : confirmedCount}}
-							</text>
-						</view>
-						<text class="order-t">待确认</text>
+				<!-- 订单 -->
+				<view class="user-order">
+					<view class="tab-title" @click="navigator('/pages/user/order/order-list?state=0')">
+						<text class="cell-tit">我的订单</text>
+						<text class="cell-more">全部订单</text>
+						<text class="iconfont icon-xiayibu"></text>
 					</view>
-					<view class="order-item" @click="navigator('/pages/user/order/order-list?state=2')"  hover-class="common-hover" :hover-stay-time="50">
-						<view class="order-icon">
-							<image src="../../../static/temp/order2@3x.png" mode=""></image>
-							<text  v-if="paymentCount >0" 
-								   class="uni-badge uni-badge-error uni-small uni-badge--small icon-num " 
-								   :class="[paymentCount < 10 ? 'goleft':'']">
-								   {{paymentCount == 99? '99+' : paymentCount}}
-							</text>
+					<view class="order-section">
+						<view class="order-item" @click="navigator('/pages/user/order/order-list?state=1')" hover-class="common-hover"  :hover-stay-time="50">
+							<view class="order-icon">
+								<image src="../../../static/temp/order5@3x.png" mode=""></image>
+								<text 	v-if="confirmedCount>0" 
+										class="uni-badge uni-badge-error uni-small uni-badge--small icon-num" 
+										:class="[confirmedCount < 10 ? 'goleft':'']">
+										{{confirmedCount == 99? '99+' : confirmedCount}}
+								</text>
+							</view>
+							<text class="order-t">待确认</text>
 						</view>
-						<text class="order-t">待付款</text>
-					</view>
-					<view class="order-item" @click="navigator('/pages/user/order/order-list?state=3')" hover-class="common-hover"  :hover-stay-time="50">
-						<view class="order-icon">
-							<image src="../../../static/temp/order3@3x.png" mode=""></image>
-							<text   v-if="waitShipmentsCount >0" 
-									class="uni-badge uni-badge-error uni-small uni-badge--small icon-num" 
-									:class="[waitShipmentsCount < 10 ? 'goleft':'']">
-									{{waitShipmentsCount == 99? '99+' : waitShipmentsCount}}
-							</text>
+						<view class="order-item" @click="navigator('/pages/user/order/order-list?state=2')"  hover-class="common-hover" :hover-stay-time="50">
+							<view class="order-icon">
+								<image src="../../../static/temp/order1@3x.png" mode=""></image>
+								<text  v-if="paymentCount >0" 
+									   class="uni-badge uni-badge-error uni-small uni-badge--small icon-num " 
+									   :class="[paymentCount < 10 ? 'goleft':'']">
+									   {{paymentCount == 99? '99+' : paymentCount}}
+								</text>
+							</view>
+							<text class="order-t">待付款</text>
 						</view>
-						<text class="order-t">待发货</text>
-					</view>
-					<view class="order-item" @click="navigator('/pages/user/order/order-list?state=4')" hover-class="common-hover"  :hover-stay-time="50">
-						<view class="order-icon">
-							<image src="../../../static/temp/order4@3x.png" mode=""></image>
-							<text 	v-if="shipmentsCount>0" 
-									class="uni-badge uni-badge-error uni-small uni-badge--small icon-num" 
-									:class="[shipmentsCount < 10 ? 'goleft':'']">
-									{{shipmentsCount == 99? '99+' : shipmentsCount}}
-							</text>
+						<view class="order-item" @click="navigator('/pages/user/order/order-list?state=3')" hover-class="common-hover"  :hover-stay-time="50">
+							<view class="order-icon">
+								<image src="../../../static/temp/order2@3x.png" mode=""></image>
+								<text   v-if="waitShipmentsCount >0" 
+										class="uni-badge uni-badge-error uni-small uni-badge--small icon-num" 
+										:class="[waitShipmentsCount < 10 ? 'goleft':'']">
+										{{waitShipmentsCount == 99? '99+' : waitShipmentsCount}}
+								</text>
+							</view>
+							<text class="order-t">待发货</text>
 						</view>
-						<text class="order-t">已发货</text>
-					</view>
-					<view class="order-item" @click="navigator('/pages/user/order/order-list?state=5')" hover-class="common-hover"  :hover-stay-time="50">
-						<view class="order-icon">
-							<image src="../../../static/temp/order5@3x.png" mode=""></image>
-							<text 	v-if="salesReturnCount >0"
-									class="uni-badge uni-badge-error uni-small uni-badge--small icon-num" 
-									:class="[salesReturnCount < 10 ? 'goleft':'']">
-									{{salesReturnCount == 99? '99+' : salesReturnCount}}
-							</text>
+						<view class="order-item" @click="navigator('/pages/user/order/order-list?state=4')" hover-class="common-hover"  :hover-stay-time="50">
+							<view class="order-icon">
+								<image src="../../../static/temp/order3@3x.png" mode=""></image>
+								<text 	v-if="shipmentsCount>0" 
+										class="uni-badge uni-badge-error uni-small uni-badge--small icon-num" 
+										:class="[shipmentsCount < 10 ? 'goleft':'']">
+										{{shipmentsCount == 99? '99+' : shipmentsCount}}
+								</text>
+							</view>
+							<text class="order-t">已发货</text>
+						</view>
+						<view class="order-item" @click="navigator('/pages/user/order/order-list?state=5')" hover-class="common-hover"  :hover-stay-time="50">
+							<view class="order-icon">
+								<image src="../../../static/temp/order4@3x.png" mode=""></image>
+								<text 	v-if="salesReturnCount >0"
+										class="uni-badge uni-badge-error uni-small uni-badge--small icon-num" 
+										:class="[salesReturnCount < 10 ? 'goleft':'']">
+										{{salesReturnCount == 99? '99+' : salesReturnCount}}
+								</text>
+							</view>
+							<text class="order-t">退货/款</text>
 						</view>
-						<text class="order-t">退货/款</text>
 					</view>
 				</view>
 			</view>
 			<!-- 底部跳转 -->
 			<view class="foot-list">
-				<view class="list-cell-item" v-show="userIdentity == 4">
-					<view class="list-cell" @click="navigator(`/pages/login/apply?clubStatus=${clubStatus}`)" hover-class="cell-hover" :hover-stay-time="50">
+				<view class="list-cell-item" v-show="hasLogin">
+					<view class="list-cell" v-show="userIdentity == 4" @click="navigator(`/pages/login/apply?clubStatus=${clubStatus}`)" hover-class="cell-hover" :hover-stay-time="50">
 						<text class="cell-tit">升级会员机构</text>
 						<text class="cell-more">
 							<text class="txt">{{clubStatusText(clubStatus)}}</text>
 							<text class="iconfont icon-xiayibu"></text>
 						</text>
 					</view>
-				</view>
-				<view class="list-cell-item">
-					<view class="list-cell"  v-for="(item, index) in firstList" :key="index" @click="navigator(item.path)" hover-class="cell-hover" :hover-stay-time="50">
-						<text class="cell-tit">{{item.name}}</text>
+					<view class="list-cell" @click="navigator('/pages/user/regularPurchase/regularPurchase')" hover-class="cell-hover" :hover-stay-time="50">
+						<text class="cell-tit">再次购买</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="list-cell"  v-for="(item, index) in firstList" :key="index" @click="navigator(item.path)" hover-class="cell-hover" :hover-stay-time="50">
 						<text class="cell-tit">{{item.name}}</text>
 						<text class="cell-more iconfont icon-xiayibu"></text>
 					</view>
 				</view>
-				<view class="list-cell-item">
-					<view class="list-cell" @click="navigator(`/pages/user/setting/setting?phone=${bindMobile}`)" hover-class="cell-hover" :hover-stay-time="50">
-						<text class="cell-tit">账户设置</text>
-						<text class="cell-more iconfont icon-xiayibu"></text>
-					</view>
-				</view>
 				<view class="list-cell-item">
 					<view class="list-cell" hover-class="cell-hover" :hover-stay-time="50">
 						<text class="cell-tit">联系我们</text>
 						<text class="cell-more" @click="toPhone">{{contactNumber}}</text>
 					</view>
-					<view class="list-cell last" @click="navigator('/pages/user/about/about')" hover-class="cell-hover" :hover-stay-time="50">
+					<view class="list-cell last" @click="this.$api.navigateTo('/pages/user/about/about')" hover-class="cell-hover" :hover-stay-time="50">
 						<text class="cell-tit">关于我们</text>
 						<text class="cell-more iconfont icon-xiayibu"></text>
 					</view>
 				</view>	
 			</view>
 		</view>	
+		<upgrade-alert v-if="isUpgradeAlert" :clubStatus="clubStatus" @unBindUpgrade="hanldUnBindUpgrade" @GoApply="hanldGoApply"></upgrade-alert>
 	</view>
 </template>
 <script>
 	import uniBadge from '@/components/uni-badge/uni-badge.vue'
+	import upgradeAlert from '@/components/cm-module/modelAlert/upgradeAlert.vue'
 	import authorize from '@/common/config/authorize.js'
 	import { mapState,mapMutations } from 'vuex'
-	import { personalInfo } from "@/api/use.js"
+	import { personalInfo,cancelPrompt } from "@/api/use.js"
+	import { queryAfterSale } from "@/api/other.js"
+	
 	
 	export default{
 		components: {
-			uniBadge
+			uniBadge,
+			upgradeAlert
 		},
 		data() {
 			return{	
-				name:'采美采购商城',
+				nvabarData: {//顶部自定义导航
+					showCapsule: 1, // 是否显示左上角图标  1表示显示  0表示不显示,
+					showSearch: 0,
+					title: '我的', // 导航栏 中间的标题
+					haveBack:false,
+					textLeft:this.$store.state.isIphone,
+					textColor:'#FFFFFF',
+					bgColor:''
+				},
+				CustomBar:this.CustomBar,// 顶部导航栏高度
+				StatusBar: this.StatusBar,
+				isCmcustom:false,
+				isUpgradeAlert:false,
+				bgImgUrl:'https://img.caimei365.com/group1/M00/03/B0/Cmis217Z_i6ASHobAAhl69yz3SM078.png',
+				name:'',
+				userType:"",
 				headpic:'',
-				userMoney:0.00,
+				userMoney:'0.00',
 				contactNumber:'',
 				openid:'',
 				aboutHtml:'',
@@ -154,23 +181,22 @@
 				salesReturnCount:'',//退货/款角标
 				firstList:[
 					{name:'运营人员管理',path:'/pages/user/operator/list'},
-					{name:'机构资料',path:'/pages/login/information'},
-					{name:'收货地址管理',path:'/pages/user/address/address'}
-				],
-				twoList:[
 					{name:'账户余额明细',path:'/pages/user/account/account'},
-					{name:'再次购买',path:'/pages/user/regularPurchase/regularPurchase'}
+					{name:'收货地址管理',path:'/pages/user/address/address'},
+					{name:'机构资料',path:'/pages/login/information'},
+					{name:'账户设置',path:'/pages/user/setting/setting'},
 				]
 			}
 		},
 		onLoad(){
-
+			
 		},
 		computed: {
 			...mapState(['hasLogin','userInfo'])
 		},
 		methods:{
 			getUserInfo(){
+				let self = this;
 				personalInfo({userID:this.userID}).then(response =>{
 					this.$store.commit('updateAllNum',response.data.count)
 					let data =response.data
@@ -192,8 +218,10 @@
 					this.userIdentity = $userData.userIdentity //机构等级
 					if(this.userIdentity == 2){
 						this.name = $clubData.name //会员机构名称
+						this.userType = '会员机构'
 					}else{
 						this.name = $userData.userName //普通机构名称
+						this.userType = '普通机构'
 					}
 					this.headpic = $userData.image //会所头像
 					this.bindMobile = $userData.bindMobile//登录手机号
@@ -205,22 +233,61 @@
 					this.shipmentsCount = this.showBadge(data.shipmentsCount)//已发货	
 					this.salesReturnCount = this.showBadge(data.salesReturnCount)//退货/款	
 					let clubInfo ={name:this.name,image:this.headpic,clubID:$clubData.clubID}
-					uni.setStorage({//缓存机构
-						key: 'clubInfo',  
-						data: clubInfo  
-					}) 
+					if($userData.tipStatus == '0'){
+						this.isUpgradeAlert = true
+					}
+					uni.setStorage({key: 'clubInfo',data: clubInfo}) 
 				}).catch(error =>{
 					this.$util.msg(error.msg,2000)
 				})
 			},
+			getPhone(){
+				queryAfterSale().then(response =>{
+					this.contactNumber = response.data.contactNumber
+				}).catch(error =>{
+					this.$util.msg(error.msg,2000);
+				})
+			},
 			toPhone(){
 				uni.makePhoneCall({
 				    phoneNumber:this.contactNumber //仅为示例
 				});
 			},
+			hanldUnBindUpgrade(){//普通用户不升级会员机构
+				cancelPrompt({ userId:this.userID}).then(response =>{
+					this.isUpgradeAlert = false
+				})
+			},
+			hanldGoApply(){
+				cancelPrompt({ userId:this.userID}).then(response =>{
+					this.isUpgradeAlert = false
+					this.$api.navigateTo(`/pages/login/apply?clubStatus=${this.clubStatus}`);
+				})
+			},
 			navigator(url){
-				this.$api.navigateTo(url)
-			},			
+				authorize.getSetting().then(wxResponse =>{// console.log('是否已授权',res);//0:为取消授权 1:为已授权 2:为未操作
+					if(wxResponse == 1){
+						if(this.hasLogin){
+							this.$api.navigateTo(url)
+						}else{
+							this.$api.navigateTo('/pages/login/login?type=0')
+						}
+					}else{
+						this.$api.navigateTo('/pages/authorization/authorization?type=1')
+					}
+				})	
+			},	
+			navigatorNex(url,type){
+				authorize.getSetting().then(wxResponse =>{// console.log('是否已授权',res);//0:为取消授权 1:为已授权 2:为未操作
+					if(wxResponse == 1){
+						if(!this.hasLogin){
+							this.$api.navigateTo(url)
+						}
+					}else{
+						this.$api.navigateTo(`/pages/authorization/authorization?type=${type}`)
+					}
+				})	
+			},		
 			showBadge(n){
 				let num ='';
 				if(n>100){num = 99}else{num = n;}
@@ -233,7 +300,7 @@
 						 stateText = ''
 						 break;
 					case 1:
-						 stateText = '待审核'
+						 stateText = '正在审核中'
 						 break;
 					case 92:
 						 stateText = '审核不通过'
@@ -242,25 +309,36 @@
 				return stateText
 			}
 		},
+		onPageScroll(e){//实时获取到滚动的值
+			if(e.scrollTop>20){
+				this.isCmcustom = true
+				this.nvabarData.bgColor = '#E37A4B'
+				this.nvabarData.textColor = '#FFFFFF'
+			}else{
+				this.isCmcustom = false
+				this.nvabarData.bgColor = ''
+				this.nvabarData.textColor = '#FFFFFF'
+			}	
+		},
 		onPullDownRefresh() {//下拉刷新
-			this.getUserInfo()
-			uni.stopPullDownRefresh()
+			if(this.hasLogin){
+				this.getUserInfo()
+				uni.stopPullDownRefresh()
+			}else{
+				uni.stopPullDownRefresh()
+			}
 		},
 		onShow(){
 			if(this.hasLogin){
-				this.$api.getStorage().then((resolve) =>{
+				this.$api.getComStorage('userInfo').then((resolve) =>{
 					this.userID = resolve.userID
 					this.getUserInfo()
+				}).catch(reject =>{
+					console.log('异常处理=========>',reject)
 				})
 			}else{
+				this.getPhone()
 				this.$store.commit('updateAllNum',0)
-				authorize.getSetting().then(wxResponse =>{// console.log('是否已授权',res);//0:为取消授权 1:为已授权 2:为未操作
-					if(wxResponse == 1){
-						this.$api.redirectTo('/pages/login/login?type=0')
-					}else{
-						this.$api.navigateTo('/pages/authorization/authorization?type=0')
-					}
-				})	
 			}
 		}	
 	}
@@ -277,69 +355,170 @@
 		position:relative;
 		background: rgba(247, 247, 247, 1);
 	}	
-	.u-header{
+	.header{
 		width: 100%;
-		height: 400rpx;
 		position: relative;
-		image{
-			width: 100%;
-			height: 400rpx;
-		}
+		background-size: cover;
 	}	
-	.u-header-main{
-		width: 100%;
-		height: 284rpx;
-		padding: 58rpx 0;
-		position: absolute;
-		top: 0;
-		left: 0;
-		.user-item{
-			width: 100%;
+	.header-main{
+		width: 702rpx;
+		height: 130rpx;
+		padding: 12rpx 24rpx;
+		display: flex;
+		.header-text{
+			flex: 8;
 			display: flex;
 			flex-direction: column;
-			align-items: center;
-			margin-bottom: 16rpx;
-			.u-h1{
-				width: 410rpx;
-				font-size: $font-size-28;
-				line-height: 40rpx;
-				color: #FFFFFF;
-				margin-bottom: 8rpx;
-				-o-text-overflow: ellipsis;
-				text-overflow: ellipsis;
-				display: -webkit-box;
-				word-break: break-all;
-				-webkit-box-orient: vertical;
-				-webkit-line-clamp: 1;
-				overflow: hidden;
-				align-items: center;
+			.user-item{
+				flex: 1;
+				height: 64rpx;
+				line-height: 64rpx;
+				&.amount{
+					height: 30rpx;
+					line-height: 30rpx;
+				}
+				.u-tips{
+					display: inline-block;
+					float: left;
+					width: 98rpx;
+					height: 30rpx;
+					border: 1px solid #FFFFFF;
+					background: linear-gradient(128deg,rgba(242,143,49,1) 0%,rgba(225,86,22,1) 100%);
+					border-radius: 16rpx;
+					line-height: 30rpx;
+					font-size: $font-size-20;
+					text-align: center;
+					color: #FFFFFF;
+					margin-left: 10rpx;
+					margin-top: 17rpx;
+				}
+				.u-viptips{
+					display: inline-block;
+					float: left;
+					width: 98rpx;
+					height: 30rpx;
+					border: 1px solid #FFE600;
+					background: linear-gradient(128deg,rgba(242,143,49,1) 0%,rgba(225,86,22,1) 100%);
+					border-radius: 16rpx;
+					line-height: 30rpx;
+					font-size: $font-size-20;
+					text-align: center;
+					color: #FFE600;
+					margin-left: 10rpx;
+					margin-top: 17rpx;
+				}
+				.u-h1{
+					width: 300rpx;
+					float: left;
+					font-size: $font-size-34;
+					color: #FFFFFF;
+					text-align: left;
+					-o-text-overflow: ellipsis;
+					text-overflow: ellipsis;
+					display: -webkit-box;
+					word-break: break-all;
+					-webkit-box-orient: vertical;
+					-webkit-line-clamp: 1;
+					overflow: hidden;
+				}
+				.u-p{
+					font-size: $font-size-24;
+					line-height: 30rpx;
+					color: #FFFFFF;
+					text-align: left;
+				}
 			}
-			.u-p{
-				font-size: $font-size-24;
-				line-height: 40rpx;
-				color: #FFFFFF;
+		}
+		.header-icon{
+			flex: 2;
+			image{
+				float: right;
+				width: 128rpx;
+				height: 128rpx;
+				border-radius: 100%;
+				border: 2rpx solid #FFFFFF;
 			}
 		}
-		.logo-m{
-			width: 144rpx;
-			height: 144rpx;
-			border: 2rpx solid #FFFFFF;
-			border-radius: 100%;
-			background: $bg-color;
+	}
+	.header-main-none{
+		width: 702rpx;
+		height: 152rpx;
+		padding: 0 24rpx;
+		display: flex;
+		.header-text{
+			flex: 8;
+			display: flex;
+			flex-direction: column;
+			.user-item{
+				flex: 1;
+				height: 50rpx;
+				line-height: 50rpx;
+				.line{
+					margin: 0 10rpx;
+				}
+				.u-h1{
+					float: left;
+					font-size: $font-size-34;
+					color: #FFFFFF;
+					text-align: left;
+					-o-text-overflow: ellipsis;
+					text-overflow: ellipsis;
+					display: -webkit-box;
+					word-break: break-all;
+					-webkit-box-orient: vertical;
+					-webkit-line-clamp: 1;
+					overflow: hidden;
+				}
+				.u-p{
+					font-size: $font-size-24;
+					line-height: 50rpx;
+					color: #EFEFEF;
+					text-align: left;
+				}
+				.u-btn{
+					width: 160rpx;
+					height: 40rpx;
+					background: rgba(255,255,255,.8);
+					border-radius: 8rpx;
+					line-height: 40rpx;
+					text-align: center;
+					font-size: $font-size-24;
+					color: $color-system;
+					display: block;
+					margin-top: 5rpx;
+					padding-left: 6rpx;
+					.icon-xiangyouhuabeifen{
+						font-size: $font-size-24;
+					}
+				}
+			}
+		}
+		.header-icon{
+			flex: 2;
+			display: flex;
+			margin-right: 20rpx;
+			align-items: center;
+			justify-content: center;
 			image{
-				width: 144rpx;
-				height: 144rpx;
+				float: right;
+				width: 128rpx;
+				height: 128rpx;
 				border-radius: 100%;
+				border: 2rpx solid #FFFFFF;
 			}
 		}
 	}
-
 	.user-order{
-		width: 702rpx;
+		width: 654rpx;
 		height: auto;
 		padding: 0 24rpx;
 		background-color: $bg-color;
 		margin-bottom: 24rpx;
+		position: absolute;
+		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;
@@ -380,12 +559,11 @@
 		padding: 24rpx 0;
 	}
 	.order-item{
+		flex:1;
 		display: flex;
 		flex-direction: column;
 		align-items: center;
-		width: 98rpx;
 		position: relative;
-		margin-right: 53rpx;
 		&:last-child{
 			margin-right: 0;
 		}
@@ -412,18 +590,19 @@
 			color: $text-color;
 		}
 	}
-
-
 	.foot-list{
-		width: 100%;
-		// margin-bottom: 150rpx;
+		width: 702rpx;
+		padding: 0 24rpx;
+		padding-top: 168rpx;
 	}	
 	.list-cell-item{
-		width: 702rpx;
+		width: 654rpx;
 		height: auto;
 		margin-bottom: 24rpx;
 		padding:0 24rpx;
 		background: $bg-color;
+		border-radius: 20rpx;
+		box-shadow:0px 3px 6px rgba(225,86,22,0.07);
 	}
 	.list-cell{
 		display:flex;

+ 4 - 5
pages/user/address/address.vue

@@ -37,7 +37,7 @@
 					</view>
 				</view>
 			</scroll-view>
-			<view class="add-btn" @click="addAddress('add')">添加新地址</view>
+			<view class="add-btn" @click="addAddress('add')" :style="{bottom :isIphoneX ? '68rpx' : '34rpx'}">添加新地址</view>
 		</view>
 		<!-- 删除弹窗 -->
 		<model-alert v-if="isShowDelModal"
@@ -57,6 +57,7 @@
 		},
 		data() {
 			return {
+				isIphoneX:this.$store.state.isIphoneX,
 				isSelect:false,
 				isEmpty:false,
 				isLoadMore:false,
@@ -116,8 +117,7 @@
 					this.$util.msg(error.msg,2000)
 				})
 			},
-			//选择地址
-			checkAddress(item){
+			checkAddress(item){//选择地址
 				//是否需要返回地址(从订单确认页跳过来选收货地址)
 				if(!this.isSelect){return ;}
 				uni.setStorageSync('selectAddress',item)
@@ -131,8 +131,7 @@
 					url: `/pages/user/address/addressManage?type=${type}&data=${JSON.stringify(item)}`
 				})
 			},
-			//删除收货地址
-			deleteAddress(id){
+			deleteAddress(id){//删除收货地址
 				this.$util.modal('','确定要删除该地址?','确定','取消',true,() =>{
 					deleteNewAddress({addressID:id,userID:this.userID}).then(response =>{
 						this.$util.msg('删除成功',2000,true,'success')

+ 30 - 7
pages/user/address/addressManage.vue

@@ -1,13 +1,13 @@
 <template>
 	<view class="container clearfix">
 		<view class="add-content">
-			<view class="text-input b-b">
+			<view class="input-row b-b">
 				<input class="input" type="text" v-model="addressData.shouHuoRen" @input="onShouHuoRen" placeholder="收货人姓名" placeholder-class="placeholder" />
 			</view>
-			<view class="text-input b-b">
+			<view class="input-row b-b">
 				<input class="input" type="number" maxlength="11" v-model="addressData.mobile"  @input="onMobile" placeholder="手机号码" placeholder-class="placeholder" />
 			</view>
-			<view class="text-input b-b" @click="showMulLinkageThreePicker">
+			<view class="input-row b-b" @click="showMulLinkageThreePicker">
 				<text class="input">
 					{{addressData.allAddress}}
 				</text>		
@@ -86,7 +86,7 @@
 				this.addressData.addressID = optionData.addressID;
 				this.addressData.shouHuoRen = optionData.shouHuoRen;
 				this.addressData.addressID = optionData.addressID;
-				if(this.addressData.defaultFlag == 1){
+				if(this.addressData.defaultFlag =='1'){
 					this.switchDefault = true
 				}else{
 					this.switchDefault = false
@@ -99,9 +99,9 @@
 		methods: {			
 			switchChange(e){
 				if(e.detail.value== true){
-					this.addressData.defaultFlag = 1;
+					this.addressData.defaultFlag = '1';
 				}else{
-					this.addressData.defaultFlag = 0;
+					this.addressData.defaultFlag = '0';
 				}
 			},
 			// 三级联动选择
@@ -113,6 +113,7 @@
 				console.log(e)
 				this.addressData.allAddress = e.name;
 				this.addressData.townID = e.townCode;	
+				this.initInput();
 			},			
 			//提交
 			confirm(){
@@ -177,7 +178,7 @@
 			   this.initInput();
 			},
 			initInput(){
-				if(this.addressData.shouHuoRen !== "" && this.addressData.mobile !=="" && this.addressData.address !==""){
+				if(this.addressData.shouHuoRen !== "" && this.addressData.mobile !=="" && this.addressData.address !=="" && this.addressData.townID!==""){
 					this.isConfirm =false;
 				}else{
 					this.isConfirm =true;
@@ -201,6 +202,28 @@
 	.add-content{
 		width: 702rpx;
 		padding:0 24rpx;
+		.input-row{
+			display: flex;
+			align-items: center;
+			position: relative;
+			width: 654rpx;
+			height: 88rpx;
+			padding:0 24rpx;
+			margin: 0 auto;
+			background: #F7F7F7;
+			border-radius: 14rpx;
+			.input{
+				width: 100%;
+				height: 100%;
+				background: #F7F7F7;
+				font-size: $font-size-28;
+				line-height: 88rpx;
+				color: #333333;
+			}
+			&.b-b{
+				margin: 32rpx 0;
+			}
+		}
 	}
 	.icon-xiayibu{
 		font-size: 36rpx;

+ 73 - 42
pages/user/order/create-order.vue

@@ -1,5 +1,5 @@
 <template>
-	<view class="container order clearfix">
+	<view class="container order clearfix" :style="{paddingBottom :isIphoneX ? '170rpx' : '134rpx'}">
 		<!-- 透明模态层 -->
 		<modal-layer v-if='modallayer'></modal-layer>
 		<!-- 地址选择 -->
@@ -7,16 +7,16 @@
 		<!-- 商品 -->
 		<goods-list ref='goods' v-if="isRequest" :goodsData="goodsData" @handleGoodList="handChangeInputGoodsList"></goods-list>
 		<!-- 发票信息 -->
-		<invoice-tent ref="invoice" 
-					  v-if="isRequest" 
-					  :invoiceDatas="invoiceData" 
+		<invoice-tent ref="invoice"
+					  v-if="isRequest"
+					  :invoiceDatas="invoiceData"
 					  @handleChoiceaInvoice="handleChoiceaInvoiceData">
 		</invoice-tent>
 		<!-- 运费 -->
-		<freight ref="freight" 
-				 v-if="isFreight" 
-				 :freightData="freightData" 
-				 @showFreightAlert="handFreightAlertShow">
+		<freight ref="freight"
+				 v-if="isFreight"
+				 :freightData="freightData"
+				 @confirmFreight="hanldFreightFn">
 		</freight>
 		<freight-alert v-if="isfreightTip" ref="csPhone"></freight-alert>
 		<!-- 余额抵扣 -->
@@ -29,7 +29,7 @@
 						<text>¥{{userMoney.toFixed(2)}}</text>
 					</view>
 					<view class="checkbox-box">
-						<button class="checkbox iconfont" 
+						<button class="checkbox iconfont"
 								hover-class="btn-hover"
 								v-if="userMoney!=0"
 								@click.stop="checkedBalabce"
@@ -39,7 +39,7 @@
 					</view>
 				</view>
 			</view>
-			<view class="balabce-b" :class="{'balabce-b--hide':!ischecked}">	
+			<view class="balabce-b" :class="{'balabce-b--hide':!ischecked}">
 				<view class="balabce-b-text animation" :style="{'transform':ischecked?'translateY(0)':'translateY(-50%)','-webkit-transform':ischecked?'translateY(0)':'translateY(-50%)'}">
 					<text>当前使用:¥{{deductMoney.toFixed(2)}},剩余:¥{{surplusMoney.toFixed(2)}}</text>
 				</view>
@@ -61,15 +61,15 @@
 </template>
 
 <script>
-	import choiceAddress from '@/components/cm-module/creatOrder/choiceAddress'  
+	import choiceAddress from '@/components/cm-module/creatOrder/choiceAddress'
 	import goodsList from '@/components/cm-module/creatOrder/goodsList'
 	import invoiceTent from '@/components/cm-module/creatOrder/invoiceTent'
 	import freight from '@/components/cm-module/creatOrder/freight'
 	import freightAlert from '@/components/cm-module/modelAlert/freightAlert'
 	import modalLayer from "@/components/modal-layer"
-	import { queryAddressList } from "@/api/cart.js" 
-	import { createOrderInfo,createOrderSubmit,getOrderPostage } from "@/api/order.js" 
-	
+	import { queryAddressList } from "@/api/cart.js"
+	import { createOrderInfo,createOrderSubmit,getOrderPostage } from "@/api/order.js"
+
 	export default {
 		components:{
 			choiceAddress,
@@ -103,6 +103,8 @@
 				isAddress:false,		  //是否加载完成地址
 				isfreightTip:false,		  //控制邮费弹窗
 				ischecked:false,	      //是否勾选余额
+				hanldFreePostFlag:'',	  //邮费状态
+				hanldFreight:'',		  //邮费
 				addressData:{},			  //初始化地址信息
 				goodsData:[],			  //初始化商品信息
 				invoiceData:{type:0},	  //初始化发票信息
@@ -153,12 +155,14 @@
 				getOrderPostage(params).then(response =>{
 					this.isFreight = true
 					this.freightData = response.data
-					if(response.data.freePostFlag== 1){
+					this.hanldFreePostFlag = response.data.freePostFlag
+					this.hanldFreight = response.data.freight
+					if(this.hanldFreePostFlag == 1){
 						this.payAllPrice = this.allPrice + response.data.freight
 					}else{
 						this.payAllPrice = this.allPrice
 					}
-				})	
+				})
 			},
 			getAddressData(){//获取地址信息
 				this.$api.getStorage().then((resolve) => {
@@ -182,6 +186,20 @@
 			handleChoiceaInvoiceData(data){//获取发票信息
 				this.invoiceData = data
 			},
+			hanldFreightFn(data){//显示邮费弹窗
+				switch(data){
+					case 1:
+						this.hanldFreight = this.freightData.freight
+						this.hanldFreePostFlag = data
+						this.payAllPrice =this.allPrice + this.hanldFreight
+						break
+					case -1:
+						this.hanldFreight = 0
+						this.hanldFreePostFlag = data
+						this.payAllPrice = this.allPrice
+						break
+				}
+			},
 			checkedBalabce(){//勾选使用余额
 				if(this.userMoney > 0){
 					this.ischecked = !this.ischecked
@@ -189,7 +207,7 @@
 						this.balanceDeductionFlag =1
 						this.attributePallPrice()
 					}else{
-						if(this.freightData.freePostFlag == 1 || this.freightData.freePostFlag == '1'){
+						if(this.hanldFreePostFlag == 1 || this.hanldFreePostFlag == '1'){
 							this.payAllPrice = this.allPrice+parseInt(this.freightData.freight)
 						}else{
 							this.payAllPrice = this.allPrice
@@ -199,35 +217,47 @@
 				}else{
 					return
 				}
-			},	
+			},
 			attributePallPrice(){//计算价格
-				if(this.freightData.freePostFlag == 1 || this.freightData.freePostFlag == '1'){
+				if(this.hanldFreePostFlag == 1 || this.hanldFreePostFlag == '1'){
 					this.attributeHashfreight(this.freightData.freight)
 				}else{
 					this.attributeNofreight()
 				}
 			},
 			attributeNofreight(){//计算没有邮费的支付价格
-				if(this.userMoney>this.payAllPrice){
-					this.payAllPrice = 0.00
-					this.deductMoney = this.allPrice							//勾选后使用抵余额
-					this.surplusMoney = this.userMoney - this.deductMoney	    //勾选后的剩余抵扣
+				if(this.ischecked){
+					if(this.userMoney>this.payAllPrice){
+						this.payAllPrice = 0.00
+						this.deductMoney = this.allPrice							//勾选后使用抵余额
+						this.surplusMoney = this.userMoney - this.deductMoney	    //勾选后的剩余抵扣
+					}else{
+						this.payAllPrice = this.allPrice - this.userMoney       	//勾选后的总价
+						this.deductMoney = this.userMoney				            //勾选后使用抵余额
+						this.surplusMoney = this.userMoney - this.deductMoney	    //勾选后的剩余抵扣
+					}
 				}else{
-					this.payAllPrice = this.allPrice - this.userMoney       	//勾选后的总价
-					this.deductMoney = this.userMoney				            //勾选后使用抵余额
-					this.surplusMoney = this.userMoney - this.deductMoney	    //勾选后的剩余抵扣
+					this.payAllPrice = this.allPrice;
+					this.deductMoney = 0.00;
+					this.surplusMoney = this.userMoney;
 				}
 			},
 			attributeHashfreight(freight){//计算需要邮费的支付价格
 				this.payAllPrice = this.allPrice+parseInt(freight)//计算不包邮的价格 总价等于商品价格+邮费
-				if(this.userMoney>this.payAllPrice){							//余额大于支付金额
-					this.payAllPrice =0.00
-					this.deductMoney = this.allPrice+parseInt(freight)			//勾选后使用抵余额
-					this.surplusMoney = this.userMoney - this.deductMoney	    //勾选后的剩余抵扣
+				if(this.ischecked){
+					if(this.userMoney>this.payAllPrice){							//余额大于支付金额
+						this.payAllPrice =0.00
+						this.deductMoney = this.allPrice+parseInt(freight)			//勾选后使用抵余额
+						this.surplusMoney = this.userMoney - this.deductMoney	    //勾选后的剩余抵扣
+					}else{
+						this.payAllPrice = this.allPrice+parseInt(freight) - this.userMoney       	//勾选后的总价
+						this.deductMoney = this.userMoney				            //勾选后使用抵余额
+						this.surplusMoney = this.userMoney - this.deductMoney	    //勾选后的剩余抵扣
+					}
 				}else{
-					this.payAllPrice = this.allPrice+parseInt(freight) - this.userMoney       	//勾选后的总价
-					this.deductMoney = this.userMoney				            //勾选后使用抵余额
-					this.surplusMoney = this.userMoney - this.deductMoney	    //勾选后的剩余抵扣
+					this.payAllPrice = this.allPrice+parseInt(freight)
+					this.deductMoney = 0.00
+					this.surplusMoney = this.userMoney
 				}
 			},
 			orderSubmitMit(){//提交订单
@@ -251,8 +281,8 @@
 						clauseId:0,//条款(暂时保留)
 						orderShouldPayFee:this.payAllPrice.toFixed(2),//提交的总价
 						balancePayFlag:this.balanceDeductionFlag,//余额抵扣的状态
-						freight:parseInt(this.freightData.freight).toFixed(2),//邮费
-						freePostFlag:parseInt(this.freightData.freePostFlag)//运费形式
+						freight:parseInt(this.hanldFreight).toFixed(2),//邮费
+						freePostFlag:parseInt(this.hanldFreePostFlag)//运费形式
 					}
 				let param = {
 						orderSource:6,
@@ -263,7 +293,8 @@
 						payInfo:this.payInfo,	//订单信息
 						orderInvoice:this.invoiceData
 					}
-				this.modalLayer = true;	
+					// console.log(param)
+				this.modalLayer = true;
 				createOrderSubmit({'params':JSON.stringify(param)}).then(response =>{
 					if(response.code === 1){
 						this.submitState ='success'
@@ -285,14 +316,14 @@
 			},
 		},
 		onShow() {
-			// this.addressID = ''		
+			// this.addressID = ''
 			let pages = getCurrentPages();
 			let currPage = pages[pages.length-1];
 			if(currPage.data.select =='select'){
 				this.isAddress = true
 				let SelectData = uni.getStorageSync('selectAddress');
 				this.addressID = SelectData.addressID;
-				this.addressData = SelectData	
+				this.addressData = SelectData
 				this.getFreightData()
 			}else{
 				this.getAddressData()
@@ -386,11 +417,11 @@
 						overflow: hidden;
 						color: $color-system;
 					}
-				}	
+				}
 			}
 		}
 		.balabce-b{
-			width: 100%;	
+			width: 100%;
 			float: left;
 			overflow: hidden;
 			.balabce-b-text{
@@ -405,7 +436,7 @@
 				padding: 0 0;
 				height: 0px;
 				line-height: 0px;
-			}	
+			}
 		}
 	}
 	.footer{
@@ -454,5 +485,5 @@
 			background:linear-gradient(135deg,rgba(242,143,49,1) 0%,rgba(225,86,22,1) 100%);
 		}
 	}
-	
+
 </style>

+ 1 - 1
pages/user/order/order-cashier.vue

@@ -89,7 +89,7 @@
 				}else{
 					this.orderNumber = data.data.orderNo
 					this.orderIdentification = data.data.orderMark
-					this.payableAmount = data.data.payableAmount
+					this.payableAmount = Number(data.data.payableAmount).toFixed(2)
 				}
 				this.$api.getStorage().then((resolve) => {
 					this.userID = resolve.userID;

+ 60 - 20
pages/user/order/order-list.vue

@@ -22,10 +22,14 @@
 							<view  class="tui-order-item" v-for="(order,orderIndex) in tabItem.orderList" :key="orderIndex" @click.stop="detail(order.orderID)">
 								<view class="order-title">
 									<view class="order-title-t">
-										<view class="order-title-num tui-skeleton-fillet">订单号:{{order.orderNo}}</view>
+										<text class="bage-buss tui-skeleton-fillet" v-if="order.orderSubmitType == 3 || order.orderSubmitType == 4">协销</text>
+										<text class="bage-auto tui-skeleton-fillet" v-if="order.orderSubmitType == 0 || order.orderSubmitType == 1 || order.orderSubmitType == 2">自主</text>
+										<text class="bage-text tui-skeleton-fillet">订单号:{{order.orderNo}}</text>
+									</view>
+									<view class="order-title-b">
+										<view class="order-title-btxt tui-skeleton-fillet">下单时间:{{order.orderTime}}</view>
 										<view class="order-title-tip tui-skeleton-fillet">{{orderStateExp(order.status)}}</view>
 									</view>
-									<view class="order-title-b">下单时间:{{order.orderTime}}</view>
 								</view>
 								<block v-for="(shop,index) in order.shopOrderList" :key="index">
 									<view class="goods-title">
@@ -112,6 +116,7 @@
 		},
 		data() {
 			return {
+				CustomBar:this.CustomBar,// 顶部导航栏高度
 				orderTabBar: [{state: 0,text: '全部订单',orderList: []},
 							  {state: 1,text: '待确认',orderList: []},
 							  {state: 2,text: '待付款',orderList: []},
@@ -149,15 +154,15 @@
 			}
 		},
 		onLoad(e) {
-			let that = this;
-			if(e.type ==='detele'){that.isDelete = true}
-			that.currentTab = e.state
-			that.getHeaderTopHeight()//设置自定义导航高度
+			let self = this;
+			if(e.type ==='detele'){self.isDelete = true}
+			self.currentTab = e.state
+			self.getHeaderTopHeight()//设置自定义导航高度
 			//  高度自适应
 			uni.getSystemInfo({
 				success: function(res) {
 					let calc = res.windowHeight;
-					that.winHeight = calc;
+					self.winHeight = calc - self.CustomBar;
 				}
 			});
 		},
@@ -540,19 +545,40 @@
 		.order-title-t{
 			width: 100%;
 			height: 40rpx;
-			float: left;
-			font-size: $font-size-28;
 			line-height: 40rpx;
-			font-weight: bold;
-			.order-title-num{
+			float: left;
+			.bage-buss{
+				display: inline-block;
+				float: left;
+				width: 64rpx;
+				height: 30rpx;
+				background:linear-gradient(132deg,rgba(255,177,0,1) 0%,rgba(255,127,0,1) 100%);
+				border-radius: 6rpx;
+				line-height: 30rpx;
+				font-size: $font-size-22;
+				text-align: center;
+				color: #FFFFFF;
+				margin-top: 8rpx;
+			}
+			.bage-auto{
+				display: inline-block;
 				float: left;
+				width: 64rpx;
+				height: 30rpx;
+				background:linear-gradient(135deg,rgba(0,216,255,1) 0%,rgba(22,139,225,1) 100%);
+				border-radius: 6rpx;
+				line-height: 30rpx;
+				font-size: $font-size-22;
+				text-align: center;
+				color: #FFFFFF;
+				margin-top: 8rpx;
+			}
+			.bage-text{
+				font-size: $font-size-28;
+				line-height: 40rpx;
 				text-align: left;
 				color: $color-system;
-			}
-			.order-title-tip{
-				float: right;
-				text-align: right;
-				color: #FF2A2A;
+				margin-left: 15rpx;
 			}
 		}
 		.order-title-b{
@@ -560,10 +586,20 @@
 			height: 40rpx;
 			float: left;
 			margin-top: 8rpx;
-			font-size: $font-size-28;
-			line-height: 40rpx;
-			color: #999999;
-			text-align: left;
+			.order-title-btxt{
+				float: left;
+				font-size: $font-size-28;
+				line-height: 40rpx;
+				color: #999999;
+				text-align: lef
+			}
+			.order-title-tip{
+				float: right;
+				font-size: $font-size-28;
+				line-height: 40rpx;
+				text-align: right;
+				color: #FF2A2A;
+			}
 		}
 	}
 	.goods-title{
@@ -581,6 +617,10 @@
 			}
 		}
 		.title-text{
+			width: 630rpx;
+			overflow: hidden;
+			text-overflow:ellipsis;
+			white-space: nowrap;
 			float: left;
 			margin-left: 16rpx;
 			font-size: $font-size-28;

+ 21 - 9
pages/user/regularPurchase/regularPurchase.vue

@@ -5,7 +5,7 @@
 		<view class="popup spec" :class="specClass"  @touchmove.stop.prevent="discard" @tap="hideSpec">
 			<!-- 遮罩层 -->
 			<view class="mask"></view>
-			<view class="layer" @tap.stop="discard">
+			<view class="layer" @tap.stop="discard" :style="{paddingBottom :isIphoneX ? '68rpx' : '36rpx',bottom:isIphoneX ?'-332rpx' : '-294rpx'}">
 				<view class="content">
 					<view class="layer-smimg">
 						<image :src="handleData.mainImage" mode=""></image>
@@ -50,13 +50,15 @@
 				emptyText: '',
 				lastPageType: '',
 				lastPageVal: '',
+				isIphoneX:this.$store.state.isIphoneX,
 				specClass: '',//规格弹窗css类,控制开关动画
 				handleData:{},
 				isQuantity:false,
 				isStock:false,
 				minBuyNumber:0,
 				number:0,
-				buyRetailPrice:0
+				buyRetailPrice:0,
+				buyRetailPriceStep:1,
 			}
 		},
 		onLoad() {
@@ -64,10 +66,11 @@
 		},
 		methods:{
 			hanldOperationConfim(data){//显示选择数量确认弹窗
-				this.specClass = 'show';
+				this.specClass = 'show'
 				this.handleData = data
 				this.minBuyNumber = data.minBuyNumber
-				this.buyRetailPrice = data.retailPrice;
+				this.buyRetailPrice = data.retailPrice
+				this.buyRetailPriceStep = data.step
 				if(this.handleData.ladderPriceFlag == '1'){
 					this.number = data.maxBuyNumber
 				}else{
@@ -81,7 +84,11 @@
 				}, 200);
 			},
 			changeCountAdd(){//popup弹窗数量增加按钮
-				this.number++
+				if(this.buyRetailPriceStep == 2){
+					this.number += this.minBuyNumber
+				}else{
+					this.number++
+				}
 				this.calculatPerice()
 			},
 			changeCountSub(){//popup弹窗数量减按钮
@@ -91,7 +98,11 @@
 					this.$util.msg(`该商品最小起订量为${this.minBuyNumber}`,2000);
 					return
 				}else{
-					this.number--
+					if(this.buyRetailPriceStep == 2){
+						this.number-=this.minBuyNumber
+					}else{
+						this.number--
+					}
 					this.calculatPerice()
 					this.isQuantity =false
 				}
@@ -103,6 +114,9 @@
 				}else if(_value < this.minBuyNumber){	
 					this.$util.msg(`该商品最小起订量为${this.minBuyNumber}`,2000);
 					this.number = this.minBuyNumber
+				}else if( _value % this.minBuyNumber !=0 ){
+					this.$util.msg(`购买量必须为起订量的整数倍`,2000);
+					this.number = this.minBuyNumber
 				}else{
 					this.number = e.detail.value
 					this.calculatPerice()
@@ -115,8 +129,6 @@
 							this.buyRetailPrice = item.buyPrice
 						}
 					})
-				}else{
-					this.buyRetailPrice = this.handleData.retailPrice;
 				}
 			},
 			toConfirmation(){//跳转确认订单页面
@@ -242,7 +254,7 @@
 			width: 702rpx;
 			padding: 24rpx 24rpx 36rpx 24rpx;
 			height: 236rpx;
-			border-radius: 30rpx 30rpx 0 0;
+			border-radius: 20rpx 20rpx 0 0;
 			background-color: #fff;
 			display: flex;
 			flex-wrap: wrap;

+ 30 - 7
seller/pages/address/addressManage.vue

@@ -1,13 +1,13 @@
 <template>
 	<view class="container clearfix">
 		<view class="add-content">
-			<view class="text-input b-b">
+			<view class="input-row b-b">
 				<input class="input" type="text" v-model="addressData.shouHuoRen" @input="onShouHuoRen" placeholder="收货人姓名" placeholder-class="placeholder" />
 			</view>
-			<view class="text-input b-b">
+			<view class="input-row b-b">
 				<input class="input" type="number" maxlength="11" v-model="addressData.mobile"  @input="onMobile" placeholder="手机号码" placeholder-class="placeholder" />
 			</view>
-			<view class="text-input b-b" @click="showMulLinkageThreePicker">
+			<view class="input-row b-b" @click="showMulLinkageThreePicker">
 				<text class="input">
 					{{addressData.allAddress}}
 				</text>		
@@ -111,7 +111,8 @@
 			},
 			onConfirm(e) {
 				this.addressData.allAddress = e.name;
-				this.addressData.townID = e.townCode;	
+				this.addressData.townID = e.townCode;
+				this.initInput();
 			},			
 			//提交
 			confirm(){
@@ -127,10 +128,10 @@
 				}
 				if(this.addType ==1){
 					this.params ={
-							userID:this.addressData.userID  ,		//用户id ,只在新增收货地址时传
+							userID:this.addressData.userID,			//用户id ,只在新增收货地址时传
 							shouHuoRen:this.addressData.shouHuoRen ,//收货人
 							townID:this.addressData.townID,			//区ID
-							address:this.addressData.address,//地址
+							address:this.addressData.address,		//地址
 							mobile:this.addressData.mobile,			//手机
 							defaultFlag:this.addressData.defaultFlag//是否默认收货地址(0 不是默认,1 默认)
 						}
@@ -179,7 +180,7 @@
 			   this.initInput();
 			},
 			initInput(){
-				if(this.addressData.shouHuoRen !== "" && this.addressData.mobile !=="" && this.addressData.address !==""){
+				if(this.addressData.shouHuoRen !== "" && this.addressData.mobile !=="" && this.addressData.address !=="" && this.addressData.townID!==""){
 					this.isConfirm =false;
 				}else{
 					this.isConfirm =true;
@@ -203,6 +204,28 @@
 	.add-content{
 		width: 702rpx;
 		padding:0 24rpx;
+		.input-row{
+			display: flex;
+			align-items: center;
+			position: relative;
+			width: 654rpx;
+			height: 88rpx;
+			padding:0 24rpx;
+			margin: 0 auto;
+			background: #F7F7F7;
+			border-radius: 14rpx;
+			.input{
+				width: 100%;
+				height: 100%;
+				background: #F7F7F7;
+				font-size: $font-size-28;
+				line-height: 88rpx;
+				color: #333333;
+			}
+			&.b-b{
+				margin: 32rpx 0;
+			}
+		}
 	}
 	.icon-xiayibu{
 		font-size: 36rpx;

+ 21 - 6
seller/pages/cart/buyagain.vue

@@ -8,7 +8,7 @@
 		<view class="popup spec" :class="specClass"  @touchmove.stop.prevent="discard" @tap="hideSpec">
 			<!-- 遮罩层 -->
 			<view class="mask"></view>
-			<view class="layer" @tap.stop="discard">
+			<view class="layer" @tap.stop="discard" :style="{paddingBottom :isIphoneX ? '68rpx' : '36rpx',bottom:isIphoneX ?'-352rpx' : '-320rpx'}">
 				<view class="content">
 					<view class="layer-smimg">
 						<image :src="handleData.mainImage" mode=""></image>
@@ -48,6 +48,7 @@
 		},
 		data(){
 			return{
+				isIphoneX:this.$store.state.isIphoneX,
 				clubID:'',//机构ID
 				serviceProviderId:'',//协销ID
 				serverUrl: '',
@@ -60,7 +61,8 @@
 				isStock:false,
 				minBuyNumber:0,
 				number:0,
-				buyRetailPrice:0
+				buyRetailPrice:0,
+				buyRetailPriceStep:1,
 			}
 		},
 		onLoad() {
@@ -73,10 +75,12 @@
 				})
 			},
 			hanldOperationConfim(data){//显示选择数量确认弹窗
+				console.log(data)
 				this.specClass = 'show';
 				this.handleData = data
 				this.minBuyNumber = data.minBuyNumber
 				this.buyRetailPrice = data.retailPrice;
+				this.buyRetailPriceStep = data.step
 				if(this.handleData.ladderPriceFlag == '1'){
 					this.number = data.maxBuyNumber
 				}else{
@@ -90,7 +94,11 @@
 				}, 200);
 			},
 			changeCountAdd(){//popup弹窗数量增加按钮
-				this.number++
+				if(this.buyRetailPriceStep == 2){
+					this.number += this.minBuyNumber
+				}else{
+					this.number++
+				}
 				this.calculatPerice()
 			},
 			changeCountSub(){//popup弹窗数量减按钮
@@ -100,7 +108,11 @@
 					this.$util.msg(`该商品最小起订量为${this.minBuyNumber}`,2000);
 					return
 				}else{
-					this.number--
+					if(this.buyRetailPriceStep == 2){
+						this.number-=this.minBuyNumber
+					}else{
+						this.number--
+					}
 					this.calculatPerice()
 					this.isQuantity =false
 				}
@@ -112,6 +124,9 @@
 				}else if(_value < this.minBuyNumber){	
 					this.$util.msg(`该商品最小起订量为${this.minBuyNumber}`,2000);
 					this.number = this.minBuyNumber
+				}else if( _value % this.minBuyNumber !=0 ){
+					this.$util.msg(`购买量必须为起订量的整数倍`,2000);
+					this.number = this.minBuyNumber
 				}else{
 					this.number = e.detail.value
 					this.calculatPerice()
@@ -249,8 +264,8 @@
 			bottom: -294rpx;
 			width: 702rpx;
 			padding: 24rpx 24rpx 36rpx 24rpx;
-			height: 236rpx;
-			border-radius: 30rpx 30rpx 0 0;
+			height: 260rpx;
+			border-radius: 20rpx 20rpx 0 0;
 			background-color: #fff;
 			display: flex;
 			flex-wrap: wrap;

+ 78 - 8
seller/pages/cart/cart.vue

@@ -42,6 +42,7 @@
 														{{pros.retailPrice ? pros.retailPrice.toFixed(2) : ''}}
 												</view>
 												<view class="count" :class="[isshowDelbtn ? 'none':'show']">
+													<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='6' v-model="pros.productCount" @blur="changeNnmber($event,item,pros)">
@@ -64,7 +65,7 @@
 					<!--加载loadding-->
 				</scroll-view>
 				<!-- 脚部菜单 -->
-				<view class="footer">
+				<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-gouxuan':'icon-weigouxuan']"></button> 
@@ -135,6 +136,7 @@
 				pullFlag: true,
 				pageSize: 10,
 				pageNum: 1,
+				isIphoneX:this.$store.state.isIphoneX
 			}
 		},
 		onLoad(){
@@ -186,10 +188,17 @@
 						this.hasNextPage = resultsData.hasNextPage;
 						this.goodsList = resultsData.results;
 						this.goodsList.forEach((item,index) => {
-							let productsListLength = item.productsList.length,
-								invalidLength = 0;
+							let productsListLength = item.productsList.length,invalidLength = 0;
 							item.productsList.forEach(pros => {
 								pros.shopID = item.shopID;
+								pros.isStep = false
+								if(pros.step === 2){
+									if(pros.productCount % pros.minBuyNumber != 0){
+										pros.productCount = pros.minBuyNumber
+										this.totalShopPeice()
+										this.updateShoppogNum(pros)
+									}
+								}
 							})
 						})
 						this.pullFlag = false;
@@ -220,6 +229,20 @@
 					let resultsData = response.data.pageDate
 					this.hasNextPage = resultsData.hasNextPage;
 					this.goodsList = this.goodsList.concat(resultsData.results)
+					this.goodsList.forEach((item,index) => {
+						let productsListLength = item.productsList.length,invalidLength = 0;
+						item.productsList.forEach(pros => {
+							pros.shopID = item.shopID;
+							pros.isStep = false
+							if(pros.step === 2){
+								if(pros.productCount % pros.minBuyNumber != 0){
+									pros.productCount = pros.minBuyNumber
+									this.totalShopPeice()
+									this.updateShoppogNum(pros)
+								}
+							}
+						})
+					})
 					this.pullFlag = false;// 防上拉暴滑
 					setTimeout(()=>{this.pullFlag = true;},500)
 					if(this.hasNextPage){
@@ -350,9 +373,16 @@
 			    })
 			},		
 			changeCountAdd(item,pros){//商品数量加加
-				pros.productCount++
-				this.processActivityPrice(pros)
-				this.isStock =false
+				if(pros.step === 2){
+					pros.isStep = false
+					pros.productCount += pros.minBuyNumber
+					this.processActivityPrice(pros)
+					this.isStock = false
+				}else{
+					pros.productCount++
+					this.processActivityPrice(pros)
+					this.isStock = false
+				}
 				this.updateShoppogNum(pros)
 				this.totalShopPeice();
 			},
@@ -362,7 +392,12 @@
 					this.$util.msg(`该商品最小起订量为${pros.minBuyNumber}`,2000);
 					return
 				}else{
-					pros.productCount--
+					if(pros.step === 2){
+						pros.isStep = false
+						pros.productCount -= pros.minBuyNumber
+					}else{
+						pros.productCount--
+					}
 					this.processActivityPrice(pros)
 				}
 				this.updateShoppogNum(pros)
@@ -375,7 +410,11 @@
 				}else if(_value < pros.minBuyNumber){	
 					this.$util.msg(`该商品最小起订量为${pros.minBuyNumber}`,2000);
 					pros.productCount = pros.minBuyNumber
+				}else if(_value % pros.minBuyNumber != 0){
+					pros.isStep = true
+					pros.productCount = pros.minBuyNumber
 				}else{
+					pros.isStep = false
 					pros.productCount = e.detail.value
 					this.processActivityPrice(pros)
 				}
@@ -739,6 +778,37 @@
 					&.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;
@@ -875,7 +945,7 @@
 		}
 		.footer-del{
 			width: 400rpx;
-			height: 100%;
+			height: 110rpx;
 			position: absolute;
 			padding-left: 200rpx;
 			background: #FFFFFF;

+ 68 - 41
seller/pages/cart/immediately.vue

@@ -1,7 +1,7 @@
 <template>
 	<view class="container all-type-list-wrapper">
-		<immediately-list ref="productList" 
-						  :search-status="true" 
+		<immediately-list ref="productList"
+						  :search-status="true"
 						  @operationConfim="hanldOperationConfim"
 						  @alertjietiConfim ="hanldalertjietiConfim"
 						  @goCartPage="hanldToCartPage"
@@ -11,16 +11,16 @@
 						  >
 		</immediately-list>
 		<!--底部选择模态层弹窗组件 -->
-		<view class="popup spec" :class="specClass"  @touchmove.stop.prevent="discard" @tap="hideSpec">
+		<view class="popup spec"  :class="specClass"  @touchmove.stop.prevent="discard" @tap="hideSpec" >
 			<!-- 遮罩层 -->
 			<view class="mask"></view>
-			<view class="layer" @tap.stop="discard">
+			<view class="layer" @tap.stop="discard" :style="{paddingBottom :isIphoneX ? '68rpx' : '36rpx',bottom:isIphoneX ?'-370rpx' : '-360rpx'}">
 				<view class="content">
 					<view class="layer-smimg">
-						<image :src="handleData.mainImage" mode=""></image>
+						<image :src="handleData.image" mode=""></image>
 					</view>
 					<view class="layer-nunbox">
-						<view class="layer-nunbox-m" v-if="productCode!=''&&productCode!=null">商品编码:{{productCode}}</view>
+						<view class="layer-nunbox-m" v-if="handleData.productcode!=''&& handleData.productcode!=null">商品编码:{{handleData.productcode}}</view>
 						<view class="layer-nunbox-t">
 							<view class="layer-nunbox-text">数量:</view>
 							<view class="number-box">
@@ -41,12 +41,12 @@
 					<view class="button add" @click="getAddProductCart">加入购物车</view>
 				</view>
 			</view>
-		</view>		
+		</view>
 		<!-- 组合加入购物车 -->
 		<view class="popup spec zuhe" :class="specClasszuhe"  @touchmove.stop.prevent="discard" @tap="hideSpecs">
 			<!-- 遮罩层 -->
 			<view class="mask"></view>
-			<view class="layer" @tap.stop="discard">
+			<view class="layer" @tap.stop="discard" :style="{paddingBottom :isIphoneX ? '68rpx' : '36rpx',bottom:isIphoneX ?'-290rpx' : '-270rpx'}">
 				<view class="content zuhe-content">
 					<view class="number-left">
 						<text>种类:{{productKind}}</text>
@@ -63,7 +63,7 @@
 				</view>
 			</view>
 		</view>
-		
+
 		<!--  -->
 		<view class="popup spec zuhe" :class="specClassjieti"  @touchmove.stop.prevent="discard" >
 			<view class="mask"></view>
@@ -88,7 +88,8 @@
 
 <script>
 	import immediatelyList from '@/components/cm-module/listTemplate/immediatelyList'
-	import { getSellerProductNum ,shoppingCartAddCart,getCartAddCart} from "@/api/seller.js" 
+	import { getSellerProductNum ,shoppingCartAddCart,getCartAddCart} from "@/api/seller.js"
+	import { querySearchProductLadderPrice } from "@/api/product.js"
 	export default{
 		components:{
 			immediatelyList
@@ -101,11 +102,11 @@
 				emptyText: '',
 				lastPageType: '',
 				lastPageVal: '',
+				isIphoneX:this.$store.state.isIphoneX,
 				specClass: '',//规格弹窗css类,控制开关动画
 				specClasszuhe:'',//组合加购物车弹窗
 				specClassjieti:'',//阶梯展示弹窗
 				ladderPriceList:{},
-				productCode:'',
 				handleData:{},
 				isQuantity:false,
 				isStock:false,
@@ -113,15 +114,17 @@
 				number:0,
 				buyRetailPrice:0,
 				hanldChangeTabIndex:0,
+				handleDataLadderPriceList:[],
 				productKind:0,
 				productTotalNum:0,
 				productTotalAmount:0,
 				buyNumRangeShow:'',//起订量范围
 				buyPrice:'',//起订量范围价格
+				buyRetailPriceStep:1,
 			}
 		},
 		onLoad() {
-			
+
 		},
 		methods:{
 			getClubProductNum(){
@@ -140,6 +143,7 @@
 			},
 			hanldOperationConfim(data){//显示选择数量确认弹窗
 				this.handleData = data
+				console.log(this.handleData)
 				if(this.$refs.productList.tabIndex == 1){
 					if(data.productKind ==0){
 						this.$util.msg(`请至少选购一种商品`,2000);
@@ -150,11 +154,23 @@
 						this.productTotalAmount = data.productTotalAmount;
 					}
 				}else{
-					this.productCode = data.productCode
 					this.number = data.minBuyNumber
 					this.minBuyNumber = data.minBuyNumber
-					this.buyRetailPrice = data.retailPrice;
+					this.buyRetailPrice = Number(data.price);
+					this.buyRetailPriceStep = data.step
 					this.specClass = 'show';
+					if(this.handleData.ladderPriceFlag == '1'){
+						querySearchProductLadderPrice({productId:this.handleData.pid}).then(response=>{
+							this.handleDataLadderPriceList = response.data
+							this.handleDataLadderPriceList.forEach((item,index)=>{
+								if(this.number>=item.buyNum){
+									this.buyRetailPrice = item.buyPrice
+								}
+							})
+						}).catch(error =>{
+							console.log('获取阶梯价格异常')
+						})
+					}
 				}
 			},
 			hideSpec() {//关闭选择数量确认弹窗
@@ -176,7 +192,11 @@
 				}, 200);
 			},
 			changeCountAdd(){//popup弹窗数量增加按钮
-				this.number++
+				if(this.buyRetailPriceStep == 2){
+					this.number += this.minBuyNumber
+				}else{
+					this.number++
+				}
 				this.calculatPerice()
 			},
 			changeCountSub(){//popup弹窗数量减按钮
@@ -186,7 +206,11 @@
 					this.$util.msg(`该商品最小起订量为${this.minBuyNumber}`,2000);
 					return
 				}else{
-					this.number--
+					if(this.buyRetailPriceStep == 2){
+						this.number-=this.minBuyNumber
+					}else{
+						this.number--
+					}
 					this.calculatPerice()
 					this.isQuantity =false
 				}
@@ -195,9 +219,12 @@
 				let _value = e.detail.value;
 				if(!this.$api.isNumber(_value)){
 					this.number = this.minBuyNumber
-				}else if(_value < this.minBuyNumber){	
+				}else if(_value < this.minBuyNumber){
 					this.$util.msg(`该商品最小起订量为${this.minBuyNumber}`,2000);
 					this.number = this.minBuyNumber
+				}else if( _value % this.minBuyNumber !=0 ){
+					this.$util.msg(`购买量必须为起订量的整数倍`,2000);
+					this.number = this.minBuyNumber
 				}else{
 					this.number = e.detail.value
 					this.calculatPerice()
@@ -205,7 +232,7 @@
 			},
 			calculatPerice(){//判断是否为阶梯价然后做计算价格处理
 				if(this.handleData.ladderPriceFlag == '1'){
-					this.handleData.ladderPriceList.forEach((item,index)=>{
+					this.handleDataLadderPriceList.forEach((item,index)=>{
 						if(this.number>=item.buyNum){
 							this.buyRetailPrice = item.buyPrice
 						}
@@ -215,22 +242,22 @@
 				}
 			},
 			getzuheCart(){//组合商品加入购物车
-			let productInfo=[];
-			let setGoodsList ={};
-			let productID = '';
-			let productNum ='';
-			this.handleData.combinationProductList.forEach(item =>{
-				if(item.initProductNum >0){
-					setGoodsList.productId = item.productID
-					setGoodsList.productNum =item.initProductNum
-					productInfo.push(JSON.parse(JSON.stringify(setGoodsList)))
-				}
-			})
-			let params ={
-					clubId:this.clubID,
-					serviceProviderId:this.serviceProviderId,
-					productInfo
-				}
+				let productInfo=[];
+				let setGoodsList ={};
+				let productID = '';
+				let productNum ='';
+				this.handleData.combinationProductList.forEach(item =>{
+					if(item.initProductNum >0){
+						setGoodsList.productId = item.productID
+						setGoodsList.productNum =item.initProductNum
+						productInfo.push(JSON.parse(JSON.stringify(setGoodsList)))
+					}
+				})
+				let params ={
+						clubId:this.clubID,
+						serviceProviderId:this.serviceProviderId,
+						productInfo:productInfo
+					}
 				getCartAddCart({'params':JSON.stringify(params)}).then(response => {
 					this.specClasszuhe = 'hide';
 					this.$util.msg('加入购物车成功',1500,true,'success');
@@ -251,7 +278,7 @@
 			},
 			getAddProductCart(){//增加购物车成功和toast弹窗提示成功
 				let params ={
-						productId:this.handleData.productID,
+						productId:this.handleData.pid,
 						clubId:this.clubID,
 						serviceProviderId:this.serviceProviderId,
 						num:this.number
@@ -317,7 +344,7 @@
 		height: 84rpx;
 		border-bottom:2rpx solid #F5F5F5 ;
 		border-right:2rpx solid #F5F5F5  ;
-	}	
+	}
 	.ladder-a{
 		letter-spacing: 4rpx;
 	}
@@ -441,7 +468,7 @@
 			width: 702rpx;
 			padding: 24rpx 24rpx 36rpx 24rpx;
 			// height: 236rpx;
-			border-radius: 30rpx 30rpx 0 0;
+			border-radius: 20rpx 20rpx 0 0;
 			background-color: #fff;
 			display: flex;
 			flex-wrap: wrap;
@@ -485,7 +512,7 @@
 			.mask{
 				animation: hidePopup 0.2s linear both;
 			}
-			
+
 			.layer {
 				animation: hideLayer 0.2s linear both;
 			}
@@ -514,7 +541,7 @@
 			margin-right: 24rpx;
 			image{
 				width: 158rpx;
-				height: 158rpx;	
+				height: 158rpx;
 				border-radius: 10rpx;
 			}
 		}
@@ -581,8 +608,8 @@
 				}
 			}
 		}
-	}	
-	
+	}
+
 	.zuhe .layer{
 		bottom: -270rpx;
 		height: 200rpx;

+ 0 - 1
seller/pages/club/allClub-list.vue

@@ -223,7 +223,6 @@
 	page,.container{
 		/* padding-bottom: 120upx; */
 		background: #F7F7F7;
-		border-top: 1px solid #EBEBEB;
 	}
 	.container{
 		position: relative;

+ 1 - 2
seller/pages/club/club-list.vue

@@ -176,7 +176,7 @@
 			},
 			_goHistory(item){
 				this.$api.setStorage('orderUserInfo',item)
-				this.$api.navigateTo('/seller/pages/order/order-history')
+				this.$api.navigateTo(`/seller/pages/order/order-historylist?clubID=${item.clubID}&listType=0`)
 			}
 		},
 		onReachBottom() {
@@ -203,7 +203,6 @@
 	page,.container{
 		/* padding-bottom: 120upx; */
 		background: #F7F7F7;
-		border-top: 1px solid #EBEBEB;
 	}
 	.container{
 		position: relative;

+ 25 - 8
seller/pages/club/list.vue

@@ -42,20 +42,24 @@
 							</view>
 						</view>
 						<view class="list-opea">
-							<view class="opea-type-dell" @click.stop="checkData(item)">
-								<text class="iconfont icon-xieboke"></text>
-								<text>修改资料</text>
-							</view>
 							<view class="opea-type-dell or" @click.stop="orderHistory(item)">
 								<text class="iconfont icon-dingdanxuanzhong"></text>
 								<text>历史订单</text>
+								<text v-if="item.orderNum >0"
+									  class="opea-badge uni-badge uni-badge-error uni-small uni-badge--small icon-num"
+									  :class="[item.orderNum < 10 ? 'right':'']">
+									  {{showBadge(item.orderNum)}}
+								</text>
+							</view>
+							<view class="opea-type-dell" @click.stop="checkData(item)">
+								<text class="iconfont icon-xieboke"></text>
+								<text>修改资料</text>
 							</view>
 						</view>
 					</view>
 					<!--加载loadding-->
 					<tui-loadmore :visible="loadding" :index="3" type="black"></tui-loadmore>
 					<tui-nomore :visible="!pullUpOn" bgcolor="#F7F7F7" :text='nomoreText'></tui-nomore>
-					<!--加载loadding-->
 				</scroll-view>
 			</view>
 		</view>
@@ -231,7 +235,7 @@
 			},
 			orderHistory(item){
 				this.$api.setStorage('orderUserInfo',item)
-				this.$api.navigateTo(`/seller/pages/order/order-history?clubID=${item.clubID}`)
+				this.$api.navigateTo(`/seller/pages/order/order-historylist?clubID=${item.clubID}&listType=0`)
 			},
 			onShowClose () {//输入框失去焦点时触发
 				if(this.searchInputVal != ''){
@@ -243,7 +247,12 @@
 			delInputText(){//清除输入框内容
 				this.searchInputVal = ''
 				this.isShowClose = false
-			}
+			},
+			showBadge(n){
+				let num ='';
+				if(n>100){num = 99}else{num = n;}
+				return num;
+			},
 		},
 		onReachBottom() {
 			if(this.hasNextPage){
@@ -269,7 +278,6 @@
 	page,.container{
 		/* padding-bottom: 120upx; */
 		background: #F7F7F7;
-		border-top: 1px solid #EBEBEB;
 	}
 	.container{
 		position: relative;
@@ -430,6 +438,15 @@
 				.opea-type-dell{
 					line-height: 46rpx;
 					font-size: 24rpx;
+					position: relative;
+					.opea-badge{
+						position: absolute;
+						left: -45rpx;
+						top: -10rpx;
+						&.right{
+							left: -20rpx;
+						}
+					}
 					&.or{
 						color: #E19B16;
 					}

+ 14 - 21
seller/pages/index/index.vue

@@ -1,6 +1,5 @@
 <template>
-	<view class="content"  :style="{paddingBottom:isIphoneX?'140rpx':'98rpx',marginTop:CustomBar+'px'}">
-		<cu-custom :navbar-data='nvabarData'></cu-custom>
+	<view class="content"  :style="{paddingBottom:isIphoneX?'140rpx':'98rpx'}">
 		<!-- 采美采购商城 -->
 		<view :style="{'display':show_index == 0 ?'block':'none'}">
 			<seller-home  ref="home" v-if="isHomeData"></seller-home>
@@ -15,7 +14,7 @@
 		</view>
 		<!-- isIphoneX判断是否为刘海屏在main.js里,好像uniapp有一个css变量获取刘海屏的安全区域 -->
 		<view class="tabBar" :style="{height:isIphoneX?'140rpx':'98rpx'}">
-			<!-- 导航的中间圆圈 --> 
+			<!-- 导航的中间圆圈 -->
 			<view class="tabBar_list" :style="{paddingBottom:isIphoneX?'40rpx':''}">
 				<view v-for="(item) in tab_nav_list" :key="item.id" class="tabBar_item" @tap="cut_index(item.id)">
 					<image v-if="show_index == item.id" :src="item.iconAc"></image>
@@ -28,9 +27,9 @@
 </template>
 
 <script>
-	import sellerHome from '@/components/seller/home.vue'
-	import sellerUser from '@/components/seller/user.vue'
-	import sellerCategory from '@/components/seller/category.vue'
+	import sellerHome from '@/components/cm-module/cm-seller/home.vue'
+	import sellerUser from '@/components/cm-module/cm-seller/user.vue'
+	import sellerCategory from '@/components/cm-module/cm-seller/category.vue'
 	export default {
 		components: {
 			sellerHome,//采美采购商城 0
@@ -43,6 +42,7 @@
 				isUserData: false,
 				isCategory: false,
 				isHomeData: false,
+				isIphoneX:this.$store.state.isIphone,
 				tab_nav_list :[//菜单列表
 					{'id':0,'name':'首页',icon:'../../../static/icon-home@3x.png',iconAc:'../../../static/icon-home-active@3x.png'},
 					{'id':1,'name':'分类',icon:'../../../static/icon-sort@3x.png',iconAc:'../../../static/icon-sort-active@3x.png'},
@@ -60,9 +60,7 @@
 		},
 		onLoad() {
 			this.$nextTick(()=>{// 一定要等视图更新完再调用方法
-				setTimeout(()=>{
-					this.isUserData = true
-				},100)
+				setTimeout(()=>{ this.isUserData = true },100)
 			})
 		},
 		methods: {
@@ -70,17 +68,14 @@
 			cut_index(type){
 				this.show_index = type
 				if(this.show_index == 0){
-					this.nvabarData.title = '采美采购商城'
 					this.isHomeData = true
 					this.isUserData = false
 					this.isCategory = false
 				}else if(this.show_index == 1){
-					this.nvabarData.title = '商品分类'
 					this.isHomeData = false
 					this.isUserData = false
 					this.isCategory = true
 				}else if(this.show_index == 2){
-					this.nvabarData.title = '账户中心'
 					this.isHomeData = false
 					this.isUserData = true
 					this.isCategory = false
@@ -88,7 +83,7 @@
 			},
 			onPullDownRefresh(){
 				if(this.show_index == 0){
-					this.$refs.home.getCheekeyCode()
+					this.$refs.home.getSellerHomeInfo()
 				}else if(this.show_index == 2){
 					this.$refs.user.initData()
 				}
@@ -99,10 +94,7 @@
 </script>
 
 <style lang="scss">
-	.content{
-		background: #FFFFFF;
-	}
-	.tabBar{ 
+	.tabBar{
 		width:100%;
 		height: 98rpx;
 		background: #fff;
@@ -114,16 +106,17 @@
 		display: flex;
 		align-items: center;
 		justify-content: center;
-		.tabBar_list{ 
+		z-index: 999;
+		.tabBar_list{
 			width:86%;
 			display: flex;
 			justify-content: space-between;
-			image{ 
+			image{
 				width:48rpx;
 				height: 48rpx;
 				margin-bottom:2rpx
 			}
-			.tabBar_item{ 
+			.tabBar_item{
 				width:150rpx;
 				display: flex;
 				justify-content: center;
@@ -132,7 +125,7 @@
 				font-size: 20rpx;
 				color: #999999;
 			}
-		 } 
+		 }
 	}
 	.nav_active{
 		color: $color-system;

+ 3 - 0
seller/pages/login/apply.vue

@@ -974,6 +974,9 @@ import { mapMutations } from 'vuex';
 							border-radius: 10rpx;
 							line-height: 88rpx;
 							text-align: center;
+							&.other{
+								width: 213rpx;
+							}
 							&.none{
 								color: #FFFFFF;
 								background: $btn-confirm;

+ 4 - 0
seller/pages/login/information.vue

@@ -813,6 +813,7 @@
 						display: flex;
 						flex-flow: row wrap;
 						justify-content: space-between;
+						align-items: center;
 						&.btn{
 							margin: 0 auto;
 							margin-left: 116rpx;
@@ -833,6 +834,9 @@
 							border-radius: 10rpx;
 							line-height: 88rpx;
 							text-align: center;
+							&.other{
+								width: 213rpx;
+							}
 							&.none{
 								color: #FFFFFF;
 								background: $btn-confirm;

+ 1 - 1
seller/pages/login/login.vue

@@ -38,7 +38,7 @@
 					showCapsule: 0, // 是否显示左上角图标  1表示显示  0表示不显示,
 					showSearch: 0,
 					title: '登录',  // 导航栏 中间的标题
-					haveBack:true,
+					haveBack:false,
 					textLeft:this.$store.state.isIphone
 				},
 				isIphoneX:this.$store.state.isIphoneX,

部分文件因文件數量過多而無法顯示