فهرست منبع

采购员版本开发

zhengjinyi 1 سال پیش
والد
کامیت
41ce402a86
54فایلهای تغییر یافته به همراه18184 افزوده شده و 739 حذف شده
  1. 71 54
      pages.json
  2. 0 50
      pages/h5/article/page-image.vue
  3. 0 55
      pages/h5/article/page.vue
  4. 0 57
      pages/h5/article/path-live.vue
  5. 0 65
      pages/h5/article/path.vue
  6. 0 124
      pages/h5/other/attestation.vue
  7. 0 161
      pages/h5/other/brand.vue
  8. 0 98
      pages/h5/other/brands.vue
  9. 0 75
      pages/h5/other/repair.vue
  10. 275 0
      pages/login/login-code.vue
  11. 396 0
      pages/seller/cart/components/cm-unit-popup.vue
  12. 1790 0
      pages/seller/cart/components/index.vue
  13. 1825 0
      pages/seller/cart/index.vue
  14. 125 0
      pages/seller/cart/mixins/apisMixins.js
  15. 94 0
      pages/seller/cart/mixins/cartMixins.js
  16. 560 0
      pages/seller/club/club-list.vue
  17. 119 0
      pages/seller/index/components/banner.vue
  18. 239 0
      pages/seller/index/components/floors.vue
  19. 84 0
      pages/seller/index/components/home.vue
  20. 73 0
      pages/seller/index/components/hotmode.vue
  21. 130 0
      pages/seller/index/components/navbars.vue
  22. 702 0
      pages/seller/index/components/user.vue
  23. 95 0
      pages/seller/index/index.js
  24. 153 0
      pages/seller/index/index.vue
  25. 467 0
      pages/seller/login/login.vue
  26. 235 0
      pages/seller/order/components/details/activipopu.vue
  27. 475 0
      pages/seller/order/components/details/goodsList.vue
  28. 197 0
      pages/seller/order/components/details/invoiceTent.vue
  29. 198 0
      pages/seller/order/components/details/logisticsRecord.vue
  30. 174 0
      pages/seller/order/components/details/orderAddress.vue
  31. 237 0
      pages/seller/order/components/details/orderButton.vue
  32. 284 0
      pages/seller/order/components/details/orderInformation.vue
  33. 245 0
      pages/seller/order/components/details/orderListButton.vue
  34. 159 0
      pages/seller/order/components/details/paymentRecord.vue
  35. 120 0
      pages/seller/order/components/details/refundRecord.vue
  36. 150 0
      pages/seller/order/components/details/voucherRecord.vue
  37. 48 0
      pages/seller/order/components/empty.vue
  38. 202 0
      pages/seller/order/components/sellerAddress.vue
  39. 165 0
      pages/seller/order/components/sellerClubVisible.vue
  40. 466 0
      pages/seller/order/components/sellerCoupon.vue
  41. 256 0
      pages/seller/order/components/sellerDetaileButton.vue
  42. 211 0
      pages/seller/order/components/sellerExchangeCoupon.vue
  43. 524 0
      pages/seller/order/components/sellerFreight.vue
  44. 369 0
      pages/seller/order/components/sellerGoodsList.vue
  45. 695 0
      pages/seller/order/components/sellerInvoice.vue
  46. 218 0
      pages/seller/order/components/sellerOrderButton.vue
  47. 440 0
      pages/seller/order/components/sellerRegulations.vue
  48. 156 0
      pages/seller/order/components/sellerShareAlert.vue
  49. 1140 0
      pages/seller/order/order-club-list.vue
  50. 1094 0
      pages/seller/order/order-confirm.vue
  51. 496 0
      pages/seller/order/order-details.vue
  52. 1237 0
      pages/seller/order/order-list.vue
  53. 161 0
      pages/user/operator/form.vue
  54. 634 0
      pages/user/operator/list.vue

+ 71 - 54
pages.json

@@ -113,6 +113,13 @@
 				        "enablePullDownRefresh": false
 				    }
 				}, 
+				{
+				    "path": "login-code",
+				    "style": {
+				        "navigationBarTitleText": "邀请码登录",
+				        "enablePullDownRefresh": false
+				    }
+				}, 
 				{
 					"path": "register-unid",
 					"style": {
@@ -166,6 +173,18 @@
 						"navigationBarTitleText": "地址列表"
 					}
 				},
+				{
+					"path": "operator/list",
+					"style": {
+						"navigationBarTitleText": "运营人员管理"
+					}
+				},
+				{
+					"path": "operator/form",
+					"style": {
+						"navigationBarTitleText": "添加运营人员"
+					}
+				},
 				{
 					"path": "order/create-order",
 					"style": {
@@ -340,60 +359,6 @@
 			]
 		},
 		{
-			"root": "pages/h5/", //活动分包模块
-			"pages": [{
-					"path": "article/page",
-					"style": {
-						"navigationBarTitleText": "采美采购平台",
-						"enablePullDownRefresh": true
-					}
-				},
-				{
-					"path": "article/path",
-					"style": {
-						"navigationBarTitleText": "采美采购平台",
-						"enablePullDownRefresh": true
-					}
-				},
-				{
-					"path": "article/page-image",
-					"style": {
-						"navigationBarTitleText": "采美采购平台"
-					}
-				},
-				{
-					"path": "article/path-live",
-					"style": {
-						"navigationBarTitleText": "采美采购平台",
-						"enablePullDownRefresh": true
-					}
-				},
-				{
-					"path": "other/repair",
-					"style": {
-						"navigationBarTitleText": "维修"
-					}
-				},
-				{
-					"path": "other/brand",
-					"style": {
-						"navigationBarTitleText": "品牌招商"
-					}
-				},
-				{
-					"path": "other/brands",
-					"style": {
-						"navigationBarTitleText": "品牌招商"
-					}
-				},
-				{
-					"path": "other/attestation",
-					"style": {
-						"navigationBarTitleText": "采美认证通"
-					}
-				}
-			]
-		}, {
 			"root": "pages/search/", //搜索分包模块
 			"pages": [{
 				"path": "search",
@@ -407,6 +372,58 @@
 					"enablePullDownRefresh": false
 				}
 			}]
+		},
+		{
+			"root": "pages/seller/", //搜索分包模块
+			"pages": [
+				{
+				"path": "login/login",
+				"style": {
+					"navigationBarTitleText": "采购员登录"
+				}
+			}, 
+			{
+				"path": "club/club-list",
+				"style": {
+					"navigationBarTitleText": "帮机构采购",
+					"enablePullDownRefresh": false
+				}
+			},
+			{
+				"path": "cart/index",
+				"style": {
+					"navigationBarTitleText": "购物车",
+					"enablePullDownRefresh": false
+				}
+			},
+			{
+				"path": "order/order-confirm",
+				"style": {
+					"navigationBarTitleText": "确认订单",
+					"enablePullDownRefresh": false
+				}
+			},
+			{
+				"path": "order/order-list",
+				"style": {
+					"navigationBarTitleText": "我的订单",
+					"enablePullDownRefresh": false
+				}
+			},
+			{
+				"path": "order/order-club-list",
+				"style": {
+					"navigationBarTitleText": "历史订单",
+					"enablePullDownRefresh": false
+				}
+			},
+			{
+				"path": "order/order-details",
+				"style": {
+					"navigationBarTitleText": "订单详情",
+					"enablePullDownRefresh": false
+				}
+			}]
 		}
 	],
 	"tabBar": {

+ 0 - 50
pages/h5/article/page-image.vue

@@ -1,50 +0,0 @@
-<template>
-	<view class="activity">
-		<image :src="banner" mode="widthFix" @click="previewImg()"></image>
-	</view>
-</template>
-
-<script>
-	export default {
-	    data() {
-	        return {
-	            webviewStyles: {
-	                progress: {
-	                    color: '#FF3333'
-	                }
-	            },
-				banner:'',
-				productImage:[],
-	        }
-	    },
-		onLoad(option) {
-			this.banner = option.image
-			this.productImage.push(option.image)
-			uni.setNavigationBarTitle({title:option.title});
-		},
-		methods:{
-			navToDetailPage() {//跳转商品详情页
-				this.$api.navigateTo(`/pages/goods/product?id=${this.productID}`)
-			},
-			previewImg (index) {//顶部商品图片预览
-				let previewUrls = this.productImage
-				uni.previewImage({
-					current: 0, 	//图片索引
-					urls: previewUrls, //必须是http图片,本地图片无效
-					longPressActions:''
-				})
-			}
-		}
-	}
-</script>
-	
-<style lang="scss">
-	.activity{
-		width: 100%;
-		height: auto;
-		image{
-			width: 100%;
-			height: auto;
-		}
-	}
-</style>

+ 0 - 55
pages/h5/article/page.vue

@@ -1,55 +0,0 @@
-<template>
-	<view class="activity">
-		<!-- <image @click.stop="navToDetailPage" src="https://img.caimei365.com/group1/M00/03/9A/Cmis216Zf8GAb_UqABE6NiwUUZs004.jpg" mode="widthFix"></image> -->
-	   <web-view :webview-styles="webviewStyles" :src="activityPath"></web-view>
-	</view>
-</template>
-
-<script>
-	export default {
-	    data() {
-	        return {
-	            webviewStyles: {
-	                progress: {
-	                    color: '#FF3333'
-	                }
-	            },
-				productID:'',
-				activityPath:'',
-				
-	        }
-	    },
-		onLoad(option) {
-			// console.log(option)
-			switch(option.linkType){
-				case '7':
-					this.activityPath = 'https://www.caimei365.com/repair.html'
-					break;
-				case '99':
-					this.activityPath = 'https://www.caimei365.com/help/1000.html'
-					break;
-				case '101':
-					this.activityPath = 'https://www.caimei365.com/repair/form.html'
-					break;
-			}
-			// console.log(this.activityPath)
-			// uni.setNavigationBarTitle({title:'多重精华,多重修复'});
-		},
-		methods:{
-			navToDetailPage() {//跳转商品详情页
-				this.$api.navigateTo(`/pages/goods/product?id=${this.productID}`)
-			},
-		}
-	}
-</script>
-	
-<style lang="scss">
-	.activity{
-		width: 100%;
-		height: auto;
-		image{
-			width: 100%;
-			height: auto;
-		}
-	}
-</style>

+ 0 - 57
pages/h5/article/path-live.vue

@@ -1,57 +0,0 @@
-<template>
-	<view class="activity">
-		<image :src="banner" mode="widthFix" @click="previewImg()"></image>
-	</view>
-</template>
-
-<script>
-	export default {
-	    data() {
-	        return {
-				banner:'',
-				productImage:[]
-	        }
-	    },
-		onLoad() {
-			this.GetHomeLiveAdvertising()
-		},
-		methods:{
-			GetHomeLiveAdvertising(){
-				this.CommonService.GetHomeLiveAdvertising().then(response =>{
-                    this.banner = response.data.liveImage
-					this.productImage.push(this.banner)
-				}).catch(error =>{
-					this.$util.msg(error.msg,3000)
-				})
-			},
-			previewImg (index) {//顶部商品图片预览
-				let previewUrls = this.productImage
-				uni.previewImage({
-					current: 0, 	//图片索引
-					urls: previewUrls, //必须是http图片,本地图片无效
-					longPressActions:''
-				})
-			}
-		},
-		onPullDownRefresh() {
-			setTimeout(() => {
-				this.GetHomeLiveAdvertising()
-				uni.stopPullDownRefresh()
-			}, 200)
-		},
-		onShow() {
-			
-		}
-	}
-</script>
-	
-<style lang="scss">
-	.activity{
-		width: 100%;
-		height: auto;
-		image{
-			width: 100%;
-			height: auto;
-		}
-	}
-</style>

+ 0 - 65
pages/h5/article/path.vue

@@ -1,65 +0,0 @@
-<template>
-	<view class="activity">
-		<!-- <image @click.stop="navToDetailPage" src="https://img.caimei365.com/group1/M00/03/9A/Cmis216Zf8GAb_UqABE6NiwUUZs004.jpg" mode="widthFix"></image> -->
-	   <web-view :webview-styles="webviewStyles" :src="activityPath"></web-view>
-	</view>
-</template>
-
-<script>
-	export default {
-	    data() {
-	        return {
-	            webviewStyles: {
-	                progress: {
-	                    color: '#FF3333'
-	                }
-	            },
-				productID:'',
-				activityPath:'',
-	        }
-	    },
-		onLoad(option) {
-            // 普通传参
-            if(option.link) {
-                this.activityPath = option.link
-                return
-            }
-            this.initPath(option)
-		},
-		methods:{
-			navToDetailPage() {//跳转商品详情页
-				this.$api.navigateTo(`/pages/goods/product?id=${this.productID}`)
-			},
-            initPath(option){
-                if(!option.key || !option.type) return
-                const link = uni.getStorageSync(option.key)
-                const type = parseInt(option.type)
-                uni.removeStorageSync(option.key) // 清除链接缓存
-                //是word 或 ppt链接
-                if(type === 1){
-                    this.activityPath = link
-                    return
-                }
-                //是pdf链接
-                let URL_CONFIG = ''
-                if(process.env.NODE_ENV === 'development'){
-                    URL_CONFIG = 'http://zzjtest.gz.aeert.com'
-                }else{
-                    URL_CONFIG = 'https://www.caimei365.com/'
-                }
-                this.activityPath = `${URL_CONFIG}/document/pdfdetails.html?type=1&src=${link}`
-            }
-		}
-	}
-</script>
-	
-<style lang="scss">
-	.activity{
-		width: 100%;
-		height: auto;
-		image{
-			width: 100%;
-			height: auto;
-		}
-	}
-</style>

+ 0 - 124
pages/h5/other/attestation.vue

@@ -1,124 +0,0 @@
-<template>
-	<view class="container clearfix" >
-		<view class="banner">
-			<image :class="'image_list image'+index" :src="item" mode="widthFix" v-for="(item,index) in list" :key="index"></image>
-		</view>	
-		<!-- 侧边 -->
-		<scroll-top :isScrollTop="isScrollTop" :bottom="300"></scroll-top>
-	</view>
-</template> 
-
-<script>
-	import { mapState,mapMutations} from 'vuex'
-	
-	export default{
-		data(){
-			return{
-				isIphoneX:this.$store.state.isIphoneX,
-				isBannerHome:true,
-				isBannerOems:false,
-				list:[
-					'https://static.caimei365.com/www/ppzs/attestation_01.jpg',
-					'https://static.caimei365.com/www/ppzs/attestation_02.jpg',
-					'https://static.caimei365.com/www/ppzs/attestation_03.jpg',
-					'https://static.caimei365.com/www/ppzs/attestation_04.jpg',
-					'https://static.caimei365.com/www/ppzs/attestation_05.jpg',
-					'https://static.caimei365.com/www/ppzs/attestation_06.jpg',
-					'https://static.caimei365.com/www/ppzs/attestation_07.jpg',
-				],
-				isScrollTop:false
-			} 
-		},
-		onLoad(option) {
-			
-		},
-		methods:{
-			
-		},
-		onPageScroll(e){//实时获取到滚动的值
-			if(e.scrollTop>400){
-				this.isScrollTop = true
-			}else{
-				this.isScrollTop = false
-			}	
-		},
-		onShow() {
-			
-		}
-	}
-</script>
-
-<style lang="scss">
-	page{
-		background-color: #FFFFFF;
-	}
-	.container{
-		width: 100%;
-		height: auto;
-		.container-btn{
-			width: 100%;
-			box-sizing: border-box;
-			padding: 7rpx 24rpx;
-			background-color: #FFFFFF;
-			position: fixed;
-			display: flex;
-			bottom: 0;
-			left: 0;
-			z-index: 999;
-			.btn{
-				flex: 1;
-				background-image: linear-gradient(270deg, #1045e1 0%, #2bb4ff 100%);
-				line-height: 84rpx;
-				border-radius: 42rpx;
-				text-align: center;
-				font-size: 26rpx;
-				color: #FFFFFF;
-				padding: 13rpx;
-				box-sizing:border-box;
-				margin: 0 10rpx;
-				.btn-text{
-					width: 100%;
-					height: 29rpx;
-					float: left;
-					line-height: 29rpx;
-					font-size: $font-size-24;
-					color: #FFFFFF;
-					text-align: center;
-					&.small{
-						font-size: 18rpx;
-					}
-				}
-			}
-		}
-		.banner{
-			width: 100%;
-			height: auto;
-			float: left;
-			.image_list{
-				width: 100%;
-				display: block;
-				// &.image0{
-				// 	height: 340rpx;
-				// }
-				// &.image1{
-				// 	height: 1089rpx;
-				// }
-				// &.image2{
-				// 	height: 699rpx;
-				// }
-				// &.image3{
-				// 	height: 655rpx;
-				// }
-				// &.image4{
-				// 	height: 1389rpx;
-				// }
-				// &.image5{
-				// 	height: 2049rpx;
-				// }
-				// &.image6{
-				// 	height: 600rpx;
-				// }
-			}
-		}
-	}
-</style>

+ 0 - 161
pages/h5/other/brand.vue

@@ -1,161 +0,0 @@
-<template>
-	<view class="container clearfix" >
-		<view class="banner" :style="{paddingBottom :isIphoneX ? '120rpx' : '60rpx'}" v-if="isBannerHome">
-			<image :class="'banner-img'+index" :src="item" mode="" v-for="(item,index) in image1" :key="index"></image>
-		</view>	
-		<view class="banner" :style="{paddingBottom :isIphoneX ? '120rpx' : '60rpx'}" v-if="isBannerOems">
-			<image :class="'banner-imgs'+(index+1)" :src="item" mode="" v-for="(item,index) in image2" :key="index"></image>
-		</view>	
-		<view class="container-btn" :style="{paddingBottom :isIphoneX ? '68rpx' : '34rpx'}">
-			<view class="btn" @click="NavToH5Page(1)">
-				<view class="btn-text small">BRAND OEM SERVICE</view>
-				<view class="btn-text">品牌OEM服务</view>
-			</view>
-			<view class="btn" @click="NavToH5Page(2)" v-if="isBannerHome">
-				<view class="btn-text small">KNOW MORE ABOUT CAIMEI365</view>
-				<view class="btn-text">查看更多</view>
-			</view>
-			<view class="btn" @click="NavToH5Page(3)" v-if="isBannerOems">
-				<view class="btn-text">BACK</view>
-				<view class="btn-text">返回首页</view>
-			</view>
-		</view>
-		<!-- 侧边 -->
-		<scroll-top :isScrollTop="isScrollTop" :bottom="300"></scroll-top>
-	</view>
-</template> 
-
-<script>
-	import { mapState,mapMutations} from 'vuex';
-	
-	export default{
-		data(){
-			return{
-				isIphoneX:this.$store.state.isIphoneX,
-				isBannerHome:true,
-				isBannerOems:false,
-				image1:[
-					'https://www.caimei365.com/img/investment/h5_1.jpg',
-					'https://www.caimei365.com/img/investment/h5_2.jpg',
-					'https://www.caimei365.com/img/investment/h5_3.jpg'
-				],
-				image2:[
-					'https://www.caimei365.com/img/investment/h5_4.jpg',
-					'https://www.caimei365.com/img/investment/h5_5.jpg'
-				],
-				isScrollTop:false
-			} 
-		},
-		onLoad(option) {
-			
-		},
-		methods:{
-			NavToH5Page(index) {//跳转H5超皮秒防伪查询
-				switch(index){
-					case 1:
-						let path ='https://static.caimei365.com/app/caimei-activity-h5/html/2020/caimeih5_99.html'
-						this.$api.navigateTo(`/pages/h5/activity/activity?link=${path}&title=品牌OEM服务`)
-						break;
-					case 2:
-						this.isBannerHome = false
-						this.isBannerOems = true
-						break;
-					case 3:
-						this.isBannerHome = true
-						this.isBannerOems = false
-						break;
-				}
-			}
-		},
-		onPageScroll(e){//实时获取到滚动的值
-			if(e.scrollTop>400){
-				this.isScrollTop = true
-			}else{
-				this.isScrollTop = false
-			}	
-		},
-		onShow() {
-			
-		}
-	}
-</script>
-
-<style lang="scss">
-	page{
-		background-color: #FFFFFF;
-	}
-	.container{
-		width: 100%;
-		height: auto;
-		.container-btn{
-			width: 100%;
-			box-sizing: border-box;
-			padding: 7rpx 24rpx;
-			background-color: #FFFFFF;
-			position: fixed;
-			display: flex;
-			bottom: 0;
-			left: 0;
-			z-index: 999;
-			.btn{
-				flex: 1;
-				background-image: linear-gradient(270deg, #1045e1 0%, #2bb4ff 100%);
-				line-height: 84rpx;
-				border-radius: 42rpx;
-				text-align: center;
-				font-size: 26rpx;
-				color: #FFFFFF;
-				padding: 13rpx;
-				box-sizing:border-box;
-				margin: 0 10rpx;
-				.btn-text{
-					width: 100%;
-					height: 29rpx;
-					float: left;
-					line-height: 29rpx;
-					font-size: $font-size-24;
-					color: #FFFFFF;
-					text-align: center;
-					&.small{
-						font-size: 18rpx;
-					}
-				}
-			}
-		}
-		.banner{
-			width: 100%;
-			height: auto;
-			float: left;
-			.banner-img0{
-				width: 100%;
-				height: 1817rpx;
-				display: block;
-			}
-			.banner-img1{
-				width: 100%;
-				height: 2677rpx;
-				display: block;
-			}
-			.banner-img2{
-				width: 100%;
-				height: 1678rpx;
-				display: block;
-			}
-			.banner-imgs1{
-				width: 100%;
-				height: 2403rpx;
-				display: block;
-			}
-			.banner-imgs2{
-				width: 100%;
-				height: 1077rpx;
-				display: block;
-			}
-			.banner-img4{
-				width: 100%;
-				height: 2500rpx;
-				display: block;
-			}
-		}
-	}
-</style>

+ 0 - 98
pages/h5/other/brands.vue

@@ -1,98 +0,0 @@
-<template>
-	<view class="container clearfix" >
-		<view class="banner">
-			<image :class="'banner-img'+index" :src="item" mode="" v-for="(item,index) in image1" :key="index"></image>
-		</view>	
-		<!-- 侧边 -->
-		<scroll-top :isScrollTop="isScrollTop" :bottom="300"></scroll-top>
-	</view>
-</template> 
-
-<script>
-	import { mapState,mapMutations} from 'vuex';
-	
-	export default{
-		data(){
-			return{ 
-				isIphoneX:this.$store.state.isIphoneX,
-				isBannerHome:true,
-				isBannerOems:false,
-				image1:[
-					'https://static.caimei365.com/www/ppzs/1.jpg',
-				],
-				isScrollTop:false
-			} 
-		},
-		onLoad(option) {
-			
-		},
-		methods:{
-			
-		},
-		onPageScroll(e){//实时获取到滚动的值
-			if(e.scrollTop>400){
-				this.isScrollTop = true
-			}else{
-				this.isScrollTop = false
-			}	
-		},
-		onShow() {
-			
-		}
-	}
-</script>
-
-<style lang="scss">
-	page{
-		background-color: #FFFFFF;
-	}
-	.container{
-		width: 100%;
-		height: auto;
-		.container-btn{
-			width: 100%;
-			box-sizing: border-box;
-			padding: 7rpx 24rpx;
-			background-color: #FFFFFF;
-			position: fixed;
-			display: flex;
-			bottom: 0;
-			left: 0;
-			z-index: 999;
-			.btn{
-				flex: 1;
-				background-image: linear-gradient(270deg, #1045e1 0%, #2bb4ff 100%);
-				line-height: 84rpx;
-				border-radius: 42rpx;
-				text-align: center;
-				font-size: 26rpx;
-				color: #FFFFFF;
-				padding: 13rpx;
-				box-sizing:border-box;
-				margin: 0 10rpx;
-				.btn-text{
-					width: 100%;
-					height: 29rpx;
-					float: left;
-					line-height: 29rpx;
-					font-size: $font-size-24;
-					color: #FFFFFF;
-					text-align: center;
-					&.small{
-						font-size: 18rpx;
-					}
-				}
-			}
-		}
-		.banner{
-			width: 100%;
-			height: auto;
-			float: left;
-			.banner-img0{
-				width: 100%;
-				height: 2531rpx;
-				display: block;
-			}
-		}
-	}
-</style>

+ 0 - 75
pages/h5/other/repair.vue

@@ -1,75 +0,0 @@
-<template>
-	<view class="container clearfix" >
-		<view class="banner" :style="{paddingBottom :isIphoneX ? '120rpx' : '60rpx'}">
-			<image :src="banner" mode=""></image>
-		</view>	
-		<view class="container-btn" :style="{paddingBottom :isIphoneX ? '68rpx' : '34rpx'}">
-			<view class="btn" @click="NavToH5Page">申请维修</view>
-		</view>
-	</view>
-</template> 
-
-<script>
-	import { mapState,mapMutations} from 'vuex';
-	
-	export default{
-		data(){
-			return{
-				isIphoneX:this.$store.state.isIphoneX,
-				banner:'https://static.caimei365.com/app/img/bg/icon-weixiu.jpg',
-			}
-		},
-		onLoad(option) {
-			
-		},
-		methods:{
-			NavToH5Page() {//跳转H5超皮秒防伪查询
-				 this.$api.navigateTo(`/pages/h5/article/page?linkType=101`)
-			}
-		},
-		onShow() {
-			
-		}
-	}
-</script>
-
-<style lang="scss">
-	page{
-		background-color: #FFFFFF;
-	}
-	.container{
-		width: 100%;
-		height: auto;
-		.container-btn{
-			width: 100%;
-			box-sizing: border-box;
-			padding: 7rpx 24rpx;
-			background-color: #FFFFFF;
-			position: fixed;
-			bottom: 0;
-			left: 0;
-			z-index: 999;
-			.btn{
-				width: 100%;
-				height: 100%;
-				background-image: $btn-confirm;
-				line-height: 84rpx;
-				border-radius: 42rpx;
-				text-align: center;
-				font-size: 26rpx;
-				color: #FFFFFF;
-			}
-		}
-		.banner{
-			width: 702rpx;
-			height: 1386rpx;
-			float: left;
-			padding: 0 24rpx;
-			image{
-				width: 100%;
-				height: 1386rpx;
-				display: block;
-			}
-		}
-	}
-</style>

+ 275 - 0
pages/login/login-code.vue

@@ -0,0 +1,275 @@
+
+<template>
+	<view class="container login">
+		<view class="login-main">
+			<image class="logo" src="https://static.caimei365.com/app/img/icon/logo@2x.png" mode=""></image>
+		</view>
+		<view class="login-input">
+			<keyInput
+				borderValueColor="#E1E1E1"
+				borderActiveColor="#E1E1E1"
+				ref="vcodeInputRef"
+				@vcodeInput="keyInput"
+				@vcodeChange="keyInputChangeHandle"
+				sum="6"
+			>
+			</keyInput>
+		</view>
+		<button class="login-btn"  @click.stop="goLogin" :class="isDisabled ? 'disabled' : ''" :disabled="isDisabled">邀请码登录</button>
+		<view class="login-tips">
+			邀请码是为了方便机构内成员互相邀请并快速注册【丽格集采联盟】小程序而推出的一项邀请机制。
+			机构已注册了账号的成员,可在其个人中心添加其他机构成员,系统会自动为添加的每一个成员生成邀请码。其他成员使用邀请码可直接登录【丽格集采联盟】小程序。
+		</view>
+	</view>
+</template>
+
+<script>
+	import authorize from '@/common/config/authorize.js'
+	import wxLogin from "@/common/config/wxLogin.js"
+	import {mapState,mapMutations } from 'vuex';
+	import keyInput from '@/components/uni-keyinput/uni-keyinput'
+	
+	export default{
+		components: { 
+			keyInput 
+		},
+		data() {
+			return{
+				params:{
+					invitationCode:'',//获取用户登录的邀请码
+					unionId:0,
+					nickName:'',
+					avatarUrl:'',
+				},
+			}
+		},
+		onLoad(option) {
+
+		},
+		computed: {
+			...mapState(['isWxAuthorize','isLoginType','isLoginProductId','isLoginOrderId']),
+			isDisabled() {// 邀请码长度是否符合要求
+				return this.params.invitationCode.trim().length < 6
+			},
+		},
+		methods:{
+			...mapMutations(['login','wxLogin']),
+			goLogin(){
+				if( this.params.invitationCode == ''){
+					this.$util.msg('请输入邀请码',2000)
+					return
+				}
+				this.isUserInfo = false
+				this.params.unionId = uni.getStorageSync('unionId')
+				// 友盟埋点邀请码确认登录点击事件
+				if(process.env.NODE_ENV != 'development'){
+					this.$uma.trackEvent('Um_Event_InvitationCode', {
+						Um_Key_PageName: '邀请码登录',
+						Um_Key_SourcePage: '邀请码页面',
+					})
+				}
+				this.GetUserProfile()
+			},
+			navigatorRegirst(url){
+				// 友盟埋点注册入口点击事件
+				if(process.env.NODE_ENV != 'development'){
+					this.$uma.trackEvent('Um_Event_zhuce', {
+						Um_Key_PageName: '立即注册',
+						Um_Key_SourcePage: '个人中心',
+					})
+				}
+				this.$api.navigateTo(url)
+			},
+			GetUserProfile(){//获取用户微信个人信息
+				const self = this
+				wx.getUserProfile({
+					desc: '采美采购商城小程序获取您的信息', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写
+					success(res) {
+						console.log('微信获取用户信息新API',res)	
+						self.wxLogin(res.userInfo)	
+						self.params.nickName = res.userInfo.nickName
+						self.params.avatarUrl = res.userInfo.avatarUrl
+						self.BindingWechat(self.params)
+					},
+					fail() {
+						self.$util.msg('授权失败', 2000)
+					}
+				})
+			},
+			BindingWechat(params){//邀请码登录并绑定微信
+				this.UserService.InvitationCodeLogin(params)
+				.then(response =>{
+					wxLogin.wxLoginAuthorize()
+					if(response.data.userIdentity === 3){
+						setTimeout(()=>{
+							this.$api.navigateTo('/pages/supplier/index/index')
+						},1500)
+					}else{
+						setTimeout(()=>{
+							switch(this.isLoginType){
+								case 9:
+									this.$api.navigateTo(`/pages/h5/activity/activity_mid`)
+									break;
+								case 8:
+									this.$api.navigateTo(`/pages/goods/product?id=${this.isLoginProductId}`)
+									break;
+								case 7:
+									this.$api.navigateTo(`/pages/user/order/order-details?type=share&orderID=${this.isLoginOrderId}`)
+									break;
+								default:
+									this.$api.switchTabTo('/pages/tabBar/user/user')
+							}
+						},1500)
+					}
+				})
+				.catch(error =>{
+					this.$util.msg(error.msg,2000)
+					this.isUserInfo = false
+				})
+			},
+			keyInput(val) {// 输入框输入介绍
+				// this.params.invitationCode = val
+				console.log(val)
+			},
+			keyInputChangeHandle(val) {// 输入框输入事件
+				this.params.invitationCode = val
+				// console.log(val)
+			},
+			setFocus() {// 控制组件获取焦点
+				this.$refs.VcodeInput.setFocus()
+			},
+			
+			setBlur() {// 控制组件失去焦点
+				this.$refs.VcodeInput.setBlur()
+			},
+			clearValue() {// 清除已输入
+				this.$refs.VcodeInput.clearValue()
+			},
+			InitAuthorize(){ //是否已授权 0:为取消授权 1:为已授权 2:为未操作
+				wxLogin.wxLoginQuick()
+			}
+		},
+		onShow() {
+			this.$api.getStorage().then((resolve) =>{
+				this.params.unionId = resolve.unionId ? resolve.unionId : 0
+			})
+			this.InitAuthorize()
+		}
+	}
+</script>
+
+<style lang="scss">
+	.login{
+		width: 100%;
+		height: auto;
+		.model-warp.none{
+			display: none;			
+		}
+		.model-warp.show{
+			display: block;
+		}
+		.login-main{
+			width: 100%;
+			display: flex;
+			flex-direction: column;
+			align-items: center;
+			height: 284rpx;
+			padding:60rpx 0 40rpx 0;
+			margin-bottom: 70rpx;
+			.logo{
+				width:611rpx;
+				height: 284rpx;
+				display: block;
+			}
+		}
+		.login-input{
+			width: 600rpx;
+			height: 88rpx;
+			padding: 24rpx 0;
+			margin: 30rpx auto;
+			margin-bottom: 30rpx;
+			background: #FFFFFF;
+			position: relative;
+		}
+		.login-row{
+			padding: 0 75rpx;
+			font-size: $font-size-28;
+			line-height: 40rpx;
+			color: #FF5B00;
+			margin-bottom: 48rpx;
+			text-align: right;
+		}
+		.login-btn{
+			width: 600rpx;
+			height: 88rpx;
+			border-radius: 44rpx;
+			font-size: $font-size-28;
+			line-height: 88rpx;
+			color: #FFFFFF;
+			margin: 0 auto;
+			text-align: center;
+			background:$btn-confirm;
+			&.disabled{
+				background: #E1E1E1;
+			}
+		}
+		.login-btn-last{
+			width: 600rpx;
+			height: 86rpx;
+			border-radius: 44rpx;
+			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;
+		}
+		.login-tips{
+			width: 100%;
+			height: auto;
+			margin-top: 80rpx;
+			box-sizing: border-box;
+			padding: 0 75rpx;
+			line-height: 44rpx;
+			font-size: $font-size-20;
+			color: #fea785;
+			text-align: justify;
+			text-indent: 40rpx;
+		}
+		.model-authorization{
+			width: 100%;
+			height: 100%;
+			position: fixed;
+			top: 0;
+			left: 0;
+			z-index: 999;
+			.authorization{
+				width: 518rpx;
+				height: 320rpx;
+				position: absolute;
+				background: rgba(255,255,255,.7);
+				left: 0;
+				right: 0;
+				bottom: 0;
+				top: 0;
+				margin: auto;
+				.to-btn{
+					position: absolute;
+					top: 0;
+					left: 0;
+					right: 0;
+					bottom: 0;
+					margin: auto;
+					width: 70%;
+					height: 88rpx;
+					font-size: $font-size-28;
+					line-height: 88rpx;
+					color: #FFFFFF;
+					text-align: center;
+					border-radius: 44rpx;
+				}
+			}
+		}
+	}
+</style>

+ 396 - 0
pages/seller/cart/components/cm-unit-popup.vue

@@ -0,0 +1,396 @@
+<template name="cm-parameter">
+	<!-- 相关规格 -->
+	<tui-bottom-popup :radius="true" :show="popupShow" @close="hidePopup()">
+		<view class="tui-popup-box clearfix">
+			<view class="tui-shopping-main" :style="{ paddingBottom: isIphoneX ? '68rpx' : '34rpx' }">
+				<view class="tui-sku-title">
+					<view class="tui-sku-image"> <image :src="skuProduct.image" mode=""></image> </view>
+					<view class="tui-sku-price">
+						<view class="sku-price-viw">
+							<view class="sku-price-text">
+								¥{{ skuProduct.price }}
+							</view>
+						</view>
+					</view>
+				</view>
+				<view class="tui-sku-unit">
+					<view class="sku-unit-h1">规格:</view>
+					<view class="sku-unit-li">
+						<view
+							class="unit-li"
+							v-for="(sku, index) in skuList"
+							@click="handleChoisSku(sku, index)"
+							:key="index"
+							:class="skuIndex === index ? 'active' : ''"
+						>
+							{{ sku.unit }} 
+						</view>
+					</view>
+				</view>
+				<view class="sku-unit-nunbox">
+					<view class="sku-unit-nunbox-t">
+						<view class="sku-unit-nunbox-text">购买数量:</view>
+						<view class="sku-unit-nunbox-num">
+							<view class="number-box">
+								<view
+									class="iconfont icon-jianhao"
+									@click="skuChangNumberSub"
+								></view>
+								<input
+									class="btn-input"
+									type="number"
+									v-model="addParams.count"
+									maxlength="4"
+									@blur="skuChangNumberChange($event)"
+								/>
+								<view
+									class="iconfont icon-jiahao"
+									@click="skuChangNumberAdd"
+								></view>
+							</view>
+						</view>
+					</view>
+				</view>
+			</view>
+			<view class="tui-right-flex tui-popup-btn" :style="{ paddingBottom: isIphoneX ? '68rpx' : '34rpx' }">
+				<view class="tui-modal-flex">
+					<view class="tui-modal-button cancel" @click="hidePopup">取消</view>
+					<view class="tui-modal-button confirm" :class="isBtnDisable ? 'disabled' :''" @click="handleConfirm">确定</view>
+				</view>
+			</view>
+		</view>
+	</tui-bottom-popup>
+</template>
+
+<script>
+import { mapState, mapMutations } from 'vuex'
+import uniGrader from '@/components/uni-grade/uni-grade.vue'
+export default {
+	name: 'cm-unit-popup',
+	components: {
+		uniGrader
+	},
+	props: {
+		skuProduct: {
+			type: Object
+		},
+		popupShow: {
+			type: Boolean,
+			default: false
+		},
+		type: {
+			type: Number,
+			default: 1
+		}
+	},
+	data() {
+		return {
+			isBtnDisable:false,
+			vipFlag: 0, // 是否是超级会员 0否 1是
+			skuIndex: 0,
+			number: 0,
+			ladderPriceList: [],
+			isQuantity: false,
+			skuList: [],
+			handleStock:0,// 规格库存
+			handleMinNumber:1, // 规格起订量
+			addParams:{
+				oldSkuId:0,
+				newSkuId:0,
+				count:0,
+				productId:0,
+				userId:0,
+				source:1
+			},
+		}
+	},
+	filters: {
+		NumFormat(value) {
+			//处理金额
+			return Number(value).toFixed(2)
+		}
+	},	
+	created() {
+		this.skuList = this.skuProduct.skus
+		this.addParams.productId = this.skuProduct.productId
+		this.addParams.oldSkuId = this.skuProduct.skuId
+		this.addParams.count = this.skuList[0].minBuyNumber
+		this.handleMinNumber = this.skuList[0].minBuyNumber
+		this.handleStock = this.skuList[0].stock
+		this.skuProduct.price = this.skuList[0].price;
+		this.isBtnDisable = this.skuList[0].stock === 0;
+		this.initData()
+	},
+	computed: {
+		...mapState(['hasLogin'])
+	},
+	methods: {
+		async initData(data) {
+			const userInfo = await this.$api.getStorage()
+			this.addParams.userId = userInfo.userId ? userInfo.userId : 0
+			this.userIdentity = userInfo.userIdentity ? userInfo.userIdentity : 0
+		},
+		PromotionsFormat(promo) {
+			//促销活动类型数据处理
+			if (promo != null) {
+				if (promo.type == 1 && promo.mode == 1) {
+					return true
+				} else {
+					return false
+				}
+			}
+			return false
+		},
+		isShowVipFlag(pros) {
+			// 未登录 || 非会员
+			if (!this.hasLogin || !this.vipFlag === 1) return false
+			// 商品所有机构可见
+			if (pros.priceFlag === 0) return true
+			// 商品价格仅资质机构可见
+			if (pros.priceFlag === 2 && this.userIdentity === 2) return true
+			// 商品价格仅医美机构可见
+			if (pros.priceFlag === 3 && this.userIdentity === 2 && this.firstClubType == 1) return true
+			// 其它
+			return false
+		}, 
+		skuChangNumberSub() {// 减数
+			if ( this.addParams.count <= this.handleMinNumber) {
+				this.addParams.count = this.handleMinNumber
+			} else {
+				this.addParams.count--
+			}
+		},
+		skuChangNumberAdd() {// 加数
+			if(this.addParams.count === this.handleStock){ return }
+			this.addParams.count++;
+		},
+		skuChangNumberChange() {// 修改
+			if (this.addParams.count < this.handleMinNumber || this.addParams.count % this.handleMinNumber != 0) {
+				this.addParams.count = this.handleMinNumber;
+			}else if(this.addParams.count > this.handleStock) {
+				this.addParams.count = this.handleStock;
+			}
+		},
+		handleConfirm() {
+			if(this.isBtnDisable){ return }
+			this.$emit('skuBtnConfirm', this.addParams)
+			this.$parent.popupShow2 = false
+		},
+		handleChoisSku(sku, index) {
+			// 选择SKU
+			this.skuIndex = index
+			this.addParams.newSkuId = sku.skuId;
+			this.addParams.count = sku.minBuyNumber;
+			this.handleStock = sku.stock;
+			this.handleMinNumber = sku.minBuyNumber;
+			this.skuProduct.price = sku.price;
+			this.skuProduct.originalPrice = sku.originalPrice;
+			this.isBtnDisable = sku.stock === 0;
+		},
+		hidePopup() {
+			this.$parent.popupShow2 = false
+		}
+	}
+}
+</script>
+
+<style lang="scss">
+.tui-popup-box {
+	padding: 40rpx 24rpx 0 24rpx;
+}
+.tui-shopping-main {
+	width: 100%;
+	.tui-sku-title {
+		width: 100%;
+		height: 136rpx;
+		float: left;
+		margin-bottom: 30rpx;
+		.tui-sku-image {
+			width: 138rpx;
+			height: 138rpx;
+			float: left;
+			border-radius: 8rpx;
+			margin-right: 30rpx;
+			box-sizing: border-box;
+			border: 1px dashed #e1e1e1;
+			image {
+				width: 134rpx;
+				height: 134rpx;
+				border-radius: 10rpx;
+			}
+		}
+		.tui-sku-price {
+			height: 136rpx;
+			float: left;
+			.sku-price-viw {
+				width: 100%;
+				height: 40rpx;
+				margin-bottom: 24rpx;
+				.sku-price-text {
+					font-size: 28rpx;
+					line-height: 40rpx;
+					color: #f94b4b;
+					font-weight: bold;
+					.sku-price-l{
+						float: left;
+						font-weight: normal;
+					}
+					&.none {
+						text-decoration: line-through;
+						color: #999999;
+						font-weight: normal;
+					}
+				}
+			}
+			.sku-price-vip {
+				width: 100%;
+				height: 40rpx;
+			}
+		}
+	}
+	.tui-sku-unit {
+		width: 100%;
+		height: auto;
+		float: left;
+		.sku-unit-h1 {
+			font-size: 28rpx;
+			line-height: 40rpx;
+			color: #333333;
+			font-weight: bold;
+		}
+		.sku-unit-li {
+			width: 100%;
+			height: auto;
+			.unit-li {
+				padding: 0 24rpx;
+				line-height: 48rpx;
+				text-align: center;
+				font-size: 24rpx;
+				color: #666666;
+				background: #f5f5f5;
+				float: left;
+				margin-right: 16rpx;
+				margin-top: 12rpx;
+				margin-bottom: 12rpx;
+				border-radius: 24rpx;
+				position: relative;
+				box-sizing: border-box;
+				border: 1px solid #f5f5f5;
+				&.active {
+					border-color: $color-system;
+					background: #fff1eb;
+					color: $color-system;
+					.tips {
+						background: #FF5B00;
+					}
+				}
+				.tips {
+					padding: 0 10rpx;
+					line-height: 32rpx;
+					text-align: center;
+					font-size: 22rpx;
+					color: #ffffff;
+					background: #cccccc;
+					float: left;
+					border-radius: 16rpx;
+					position: absolute;
+					right: -12rpx;
+					top: -15rpx;
+				}
+			}
+		}
+	}
+	.sku-unit-nunbox {
+		justify-content: space-between;
+		align-items: center;
+		width: 100%;
+		height: auto;
+		float: left;
+		margin-top: 30rpx; 
+		.sku-unit-nunbox-t {
+			width: 100%;
+			height: 44rpx;
+			position: relative;
+			margin-bottom: 20rpx;
+			.text {
+				font-size: $font-size-24;
+				line-height: 48rpx;
+				color: #999999;
+			}
+			.sku-unit-nunbox-text {
+				line-height: 44rpx;
+				font-size: $font-size-28;
+				float: left;
+				font-weight: bold;
+			}
+			.sku-unit-nunbox-num{
+				float: right;
+				.number-box {
+					display: flex;
+					justify-content: center;
+					align-items: center;
+					border: 2rpx solid #ffe6dc;
+					border-radius: 30rpx;
+					height: 48rpx;
+					margin-left: 20rpx;
+					.iconfont {
+						font-size: $font-size-24;
+						padding: 0 18rpx;
+						color: #333333;
+						text-align: center;
+						line-height: 48rpx;
+						font-weight: bold;
+						background: #fef6f3;
+						&.icon-jianhao {
+							border-radius: 30rpx 0 0 30rpx;
+						}
+						&.icon-jiahao {
+							border-radius: 0 30rpx 30rpx 0;
+						}
+					}
+					.btn-input {
+						width: 62rpx;
+						height: 48rpx;
+						line-height: 48rpx;
+						background: #ffffff;
+						border-radius: 4rpx;
+						text-align: center;
+						font-size: $font-size-28;
+					}
+				}
+			}
+		}
+	}
+}
+.tui-popup-btn{
+	width: 100%;
+	float: left;
+	.tui-modal-flex {
+		width: 100%;
+		height: 84rpx;
+		margin-top: 40rpx;
+		display: flex;
+		.tui-modal-button {
+			flex: 1;
+			line-height: 84rpx;
+			font-size: $font-size-28;
+			text-align: center;
+			border-radius: 42rpx;
+			padding: 0;
+			margin: 0 15rpx;
+			box-sizing: border-box;
+			&.cancel {
+				background: #ffe6dc;
+				color: #FF5B00;
+			}
+			&.confirm {
+				background: $btn-confirm;
+				color: #ffffff;
+				&.disabled {
+					background: linear-gradient(135deg, rgba(242, 143, 49, 0.5) 0%, rgba(225, 86, 22, 0.5) 100%);
+				}
+			}
+		}
+	}
+}
+</style>

+ 1790 - 0
pages/seller/cart/components/index.vue

@@ -0,0 +1,1790 @@
+<template name="navbars">
+	<view>
+		<tui-skeleton
+			v-if="skeletonShow"
+			backgroundColor="#fafafa"
+			borderRadius="10rpx"
+			:isLoading="true"
+			:loadingType="5"
+		></tui-skeleton>
+		<view v-else class="container-cart-main tui-skeleton" :style="{ paddingTop: isshowDelbtn ? '0rpx' : '80rpx' }">
+			<template v-if="pathType == 0">
+				<view class="foot-check-delbtn" v-if="!isshowDelbtn && goodsList.length > 0">
+					<view class="foot-text"
+						>共<text>{{ kindCount }}</text
+						>件商品</view
+					>
+					<view class="delBtn" @tap.stop="showDelManager">删除</view>
+				</view>
+			</template>
+			<template v-else>
+				<view
+					class="foot-check-delbtn"
+					v-if="!isshowDelbtn && goodsList.length > 0"
+					:style="{ top: CustomBar + 'px' }"
+				>
+					<view class="foot-text"
+						>共<text>{{ kindCount }}</text
+						>件商品</view
+					>
+					<view class="delBtn" @tap.stop="showDelManager">删除</view>
+				</view>
+			</template>
+			<view v-if="!isEmpty" class="container-cart">
+				<view class="cart-content" :style="{ paddingBottom: isIphoneX ? '130rpx' : '100rpx' }">
+					<view class="goods-list">
+						<view v-for="(item, index) in goodsList" :key="index" class="goods-item clearfix">
+							<view class="shoptitle">
+								<!--选择商店的全部商品"-->
+								<view class="checkbox-box" @click.stop="handleCheckShop(item)">
+									<view
+										class="checkbox iconfont"
+										:style="{ color: item.isDisable ? '#efefef' : '' }"
+										:class="[item.isChecked ? 'icon-yixuanze' : 'icon-weixuanze']"
+									></view>
+								</view>
+								<view class="text" @click.stop="goSuppile(item)">{{ item.shopName }} </view>
+							</view>
+							<view class="productlist">
+								<view class="goods-pros" v-for="(pros, idx) in item.cartList" :key="idx">
+									<view class="goods-pros-t">
+										<!--选择商品-->
+										<view class="checkbox-box" @click.stop="handlsCkecdPros(item, pros)">
+											<view
+												class="checkbox iconfont"
+												:style="{ color: pros.isDisable ? '#EFEFEF' : '' }"
+												:class="[pros.isChecked ? 'icon-yixuanze' : 'icon-weixuanze']"
+											></view>
+										</view>
+										<view class="pros-img" @click.stop="navToListPage(pros.productId)"
+											><image :src="pros.image ? pros.image : ''" alt="" />
+										</view>
+										<view class="pros-product">
+											<view class="producttitle" @click.stop="navToListPage(pros.productId)">{{
+												pros.name
+											}}</view>
+											<view class="productspec">规格:{{ pros.unit ? pros.unit : '' }}</view>
+											<template v-if="pros.number > pros.stock || pros.stock === 0">
+												<view class="cart-sku-temp" @click.stop="handleShouUnitPopup(pros)">
+													<view class="cart-sku-text">重新选择商品规格</view>
+													<view class="cart-sku-btn">重选</view>
+												</view>
+											</template>
+											<template v-else>
+												<view class="productprice">
+													<!--使用过滤器对总价改变-->
+													<view class="price">
+														<text>¥</text> {{ pros.price | NumFormat }}
+													</view>
+													<view
+														class="count"
+														v-if="pros.validFlag == 1"
+														:class="[isshowDelbtn ? 'none' : 'show']"
+													>
+														<text class="count-tips" v-if="pros.number < pros.min"
+															>起订量:{{ pros.min }}</text
+														>
+														<text class="count-tips step" v-if="pros.isStep"
+															>购买量必须为起订量的整数倍</text
+														>
+														<view class="number-box">
+															<view
+																class="iconfont icon-jianhao"
+																@click="changeCountSub(item, pros)"
+															></view>
+															<input
+																class="btn-input"
+																type="number"
+																maxlength="4"
+																v-model="pros.number"
+																@blur="changeNnmber($event, item, pros)"
+																@focus="changeInput(pros)"
+															/>
+															<view
+																class="iconfont icon-jiahao"
+																@click="changeCountAdd(item, pros)"
+															></view>
+														</view>
+													</view>
+												</view>
+											</template>
+										</view>
+									</view>
+								</view>
+							</view>
+							<view class="goods-pros-b clearfix" :class="[isshowDelbtn ? 'none' : 'show']">
+								<view class="sum"
+									>合计:<text class="money"
+										><text class="money-sign">¥</text>{{ item.totalPrice | NumFormat }}</text
+									></view
+								>
+							</view>
+						</view>
+					</view>
+					<view class="failure-list" v-if="failureList.length > 0">
+						<view class="failure-title">
+							<view class="title-txt"
+								>失效商品<text>{{ failureList.length }}件</text></view
+							>
+							<view class="title-btn" @click.stop="handleDeletefailures"
+								><text class="butto">清空失效商品</text></view
+							>
+						</view>
+						<view class="productlist">
+							<view class="goods-pros" v-for="(failure, failureIdx) in failureList" :key="failureIdx">
+								<view class="goods-pros-t" @click.stop="failureToProduct(failure)">
+									<!--选择商品-->
+									<view
+										class="checkbox-box"
+										@click.stop="handleCheckFailure(failure)"
+										v-if="isshowDelbtn"
+									>
+										<button
+											class="checkbox iconfont"
+											:class="[failure.isChecked ? 'icon-yixuanze' : 'icon-weixuanze']"
+										></button>
+									</view>
+									<text class="img-tip">失效</text>
+									<view class="pros-img">
+										<image :src="failure.image ? failure.image : ''" alt="" />
+									</view>
+									<view class="pros-product">
+										<view class="producttitle">{{ failure.name }}</view>
+										<view class="productspec">规格:{{ failure.unit ? failure.unit : '' }}</view>
+										<view class="productstate">{{ failure.status | failurefilters }}</view>
+									</view>
+									<view class="pros-marks" v-if="failure.isFailureLayer"></view>
+								</view>
+							</view>
+						</view>
+					</view>
+				</view>
+				<!-- 脚部菜单 -->
+				<template v-if="pathType == 0">
+					<view class="footer">
+						<view class="footer-le">
+							<view class="foot-check checkbox-box" @tap.stop="handleCheckAll">
+								<button
+									class="checkbox iconfont"
+									:class="[isCheckAll ? 'icon-yixuanze' : 'icon-weixuanze']"
+								></button>
+								<view class="text">全选</view>
+							</view>
+							<view class="sum">
+								<view class="sum-price none">
+									总价:<text class="money-sign">¥</text
+									><text class="money">{{ allPrice | NumFormat }}</text>
+								</view>
+							</view>
+						</view>
+						<view v-if="!isshowDelbtn" class="footer-ri">
+							<view class="btn hanld-btn" @tap="hanldlerToConfirm">去结算({{ 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="handleDeleteCart">删除</view>
+						</view>
+					</view>
+				</template>
+				<template v-else>
+					<view class="footer" :style="{ paddingBottom: isIphoneX ? '68rpx' : '0rpx' }">
+						<view class="footer-le">
+							<view class="foot-check checkbox-box" @tap.stop="handleCheckAll">
+								<button
+									class="checkbox iconfont"
+									:class="[isCheckAll ? 'icon-yixuanze' : 'icon-weixuanze']"
+								></button>
+								<view class="text">全选</view>
+							</view>
+							<view class="sum">
+								<view class="sum-price none">
+									总价:<text class="money-sign">¥</text
+									><text class="money">{{ allPrice | NumFormat }}</text>
+								</view>
+							</view>
+						</view>
+						<view v-if="!isshowDelbtn" class="footer-ri">
+							<view class="btn hanld-btn" @tap="hanldlerToConfirm">去结算({{ 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="handleDeleteCart">删除</view>
+						</view>
+					</view>
+				</template>
+			</view>
+			<view v-else class="cart-content empty">
+				<view class="empty-container">
+					<image
+						class="empty-container-image"
+						:src="staticUrl + 'icon_cart_empty@2x.png'"
+						mode="aspectFit"
+					></image>
+					<text class="error-text">购物车空空如也,快去商城逛逛吧~</text>
+					<view class="login-btn" @click="goIndex">去商城</view>
+				</view>
+			</view>
+		</view>
+		<!-- 选择规格弹窗 -->
+		<cm-unit-popup
+			v-if="popupShow2"
+			:popupShow="popupShow2"
+			:skuProduct="handlePros"
+			@skuBtnConfirm="handleBtnConfirm"
+		></cm-unit-popup>
+		<!-- 弹窗提示 -->
+		<tui-modal
+			:show="modal"
+			@click="handleClick"
+			@cancel="hideMobel"
+			:content="contentModalText"
+			:button="modalButton"
+			color="#333"
+			:size="32"
+			shape="circle"
+			:maskClosable="false"
+		>
+		</tui-modal>
+	</view>
+</template>
+
+<script>
+import authorize from '@/common/config/authorize.js'
+import cmUnitPopup from './cm-unit-popup.vue'
+import payMixins from '@/mixins/payMixins.js'
+import cartMixins from './mixins/cartMixins.js'
+import apisMixins from './mixins/apisMixins.js'
+import { mapState, mapMutations } from 'vuex'
+export default {
+	name: 'cm-cart-temp',
+	mixins: [payMixins, apisMixins, cartMixins],
+	props: {
+		pathType: {
+			type: Number
+		}
+	},
+	components: {
+		cmUnitPopup
+	},
+	data() {
+		return {
+			staticUrl: this.global.staticUrl,
+			CustomBar: this.CustomBar, // 顶部导航栏高度
+			isIphoneX: this.$store.state.isIphoneX,
+			userId: 0,
+			userIdentity: 0,
+			alertType: '',
+			isStock: '',
+			handlerPros: {}, // 监听单挑促销商品
+			failureList: [], // 失效商品列表
+			goodsList: [], // 购物车的商品
+			// promotionsList: [], // 促销列表
+			// totalCouponList: [], // 优惠券算列表
+			// eligibleCoupons: [], // 最终需要用到优惠券
+			setGoodData: '', // 确认订单的商品
+			isCheckAll: false, // 是否全选
+			kindCount: 0, // 购物车宝贝数量
+			totalAmount: 0, // 商品最终合计总价
+			allPrice: 0, // 所有价格
+			allCount: 0, // 被选中的产品数量
+			skeletonShow: true,
+			isshowDelbtn: false,
+			isDisabled: false, // 供应商/店铺全选是否禁用状态
+			isNoConfim: false,
+			isEmpty: false, // 显示空购物车
+			scrollHeight: 'auto',
+			nomoreText: '上拉显示更多',
+			hasNextPage: false,
+			loadding: false,
+			pullUpOn: true,
+			pullFlag: true,
+			pageSize: 10,
+			pageNum: 1,
+			submitIds: [],
+			checkenProsList: [],
+			popupShow: false,
+			popupShow2: false,
+			currentTab: 1,
+			couponParam: {
+				// 获取弹窗优惠券领取参数
+				userId: 0,
+				shopId: 0,
+				status: 1,
+				source: 2
+			},
+			productCouponList: [], // 优惠券弹窗列表
+			isCouponEmpty: false,
+			contentModalText: '', //操作文字提示语句
+			modal: false,
+			modalButton: [
+				{
+					text: '取消',
+					type: 'gray',
+					plain: true //是否空心
+				},
+				{
+					text: '确认',
+					customStyle: {
+						color: '#fff',
+						bgColor: '#F3B574'
+					},
+					plain: false
+				}
+			],
+			handlePros: {}
+		}
+	},
+	created() {
+		this.setScrollHeight()
+		console.log('pathType', this.pathType)
+	},
+	computed: {
+		...mapState(['hasLogin', 'userInfo', 'isWxAuthorize'])
+	},
+	watch: {
+		//深度监听所有数据,每次改变重新计算总价和总数
+		goodsList: {
+			deep: true,
+			handler(val, oldval) {
+				this.totalPeice()
+				this.totalCount()
+			}
+		}
+	},
+	filters: {
+		failurefilters(state) {
+			const map = {
+				3: '商品已下架'
+			}
+			return map[state]
+		},
+		NumFormat(value) {
+			//处理金额
+			return Number(value).toFixed(2)
+		},
+		totalprice(val, count) {
+			//单件商品的价格 × 数量
+			return (val * count).toFixed(2)
+		}
+	},
+	methods: {
+		async initData() {
+			const userInfo = await this.$api.getStorage()
+			this.skeletonShow = true //预加载圆圈
+			this.isCheckAll = false //是否全选
+			this.submitIds = []
+			this.checkenProsList = []
+			this.userId = userInfo.userId ? userInfo.userId : 0
+			this.initGetCartGoodsList()
+		},
+		async initGetCartGoodsList() {
+			//初始化购物车 index:1
+			const res = await this.ProductService.QueryShoppingCartList({ userId: this.userId, source: 2 })
+			let data = res.data
+			console.log('data', data)
+			this.kindCount = data.kindCount
+			this.$store.commit('updateAllNum', data.kindCount)
+			if (data.list.length === 0 && data.invalid.length === 0) {
+				this.isEmpty = true
+			}else{
+				this.isEmpty = false
+			}
+			this.infoCartData(data.list)
+			this.infoInvalidData(data.invalid)
+			this.skeletonShow = false
+		},
+		infoCartData(data) {
+			//初始化有效商品
+			this.goodsList = data.map((supplier, index) => {
+				supplier.cartList.forEach(pros => {
+					pros.shopId = supplier.shopId
+					pros.isStep = false
+					if (pros.stock === 0 || pros.number > pros.stock) {
+						supplier.isDisable = true
+						pros.isDisable = true
+					} else {
+						pros.isDisable = false
+					}
+					if (pros.step === 2) {
+						if (pros.number % pros.min != 0) {
+							pros.number = pros.min
+							this.totalShopPeice()
+							this.updateShoppogNum(pros)
+						}
+					}
+				})
+				return supplier
+			})
+			this.totalShopPeice()
+		},
+		infoInvalidData(data) {
+			// 初始化失效商品
+			this.failureList = data.map((failure, index) => {
+				failure.isFailureLayer = false
+				if (failure.status == 1 || failure.status == 2) {
+					failure.isFailureLayer = true
+				}
+				return failure
+			})
+		},
+		clickPopupShow(pros, type) {
+			this.popupShow = true
+			this.handlerPros = pros
+		},
+		handleCheckFailure(failure) {
+			//  选择失效商品
+			failure.isChecked = !failure.isChecked
+			this.updateCheckAllBtn()
+		},
+		handlsCkecdPros(item, pro) {
+			//为未选中的时候改变为true,反之为true
+			if (!this.isshowDelbtn) {
+				if (pro.isDisable) {
+					return
+				}
+			}
+			pro.isChecked = !pro.isChecked
+			if (pro.isChecked) {
+				if (!this.submitIds.includes(pro.skuId * 1)) {
+					this.submitIds.push(pro.skuId)
+					this.checkenProsList.push(pro)
+				}
+			} else {
+				var lent = this.submitIds.indexOf(pro.skuId * 1)
+				if (lent >= 0) {
+					this.submitIds.splice(lent, 1)
+					this.checkenProsList.splice(lent, 1)
+				}
+			}
+			this.updateProductCheckedAllBtn(item)
+			this.updateCheckAllBtn()
+		},
+		updateProductCheckedAllBtn(item) {
+			// 单独每个供应商的勾选判断
+			let productsList = item.cartList,
+				productsCheckedLength = 0,
+				disabledLength = 0
+			if (this.isshowDelbtn) {
+				productsList.forEach(pros => {
+					if (pros.isChecked) {
+						productsCheckedLength++
+					}
+				})
+			} else {
+				productsList.forEach(pros => {
+					if (pros.isChecked) {
+						productsCheckedLength++
+					}
+				})
+			}
+			item.isChecked = productsCheckedLength === productsList.length
+		},
+		updateCheckAllBtn() {
+			// 全选勾选判断
+			let goodsCheckedLength = 0
+			this.goodsList.forEach(item => {
+				if (item.isChecked) {
+					goodsCheckedLength++
+				}
+			})
+			this.failureList.forEach(failureItem => {
+				if (failureItem.isChecked) {
+					goodsCheckedLength++
+				}
+			})
+			if (this.isshowDelbtn) {
+				this.isCheckAll = goodsCheckedLength === this.goodsList.length + this.failureList.length
+			} else {
+				this.isCheckAll = goodsCheckedLength === this.goodsList.length
+			}
+		},
+		handleCheckShop(supplier) {
+			//与单选商品类似
+			if (!this.isshowDelbtn) {
+				if (supplier.isDisable) {
+					return
+				}
+			}
+			supplier.isChecked = !supplier.isChecked
+			this.setProductChecked(supplier)
+			this.updateCheckAllBtn()
+		},
+		setProductChecked(supplier) {
+			supplier.cartList.forEach(pros => {
+				if (this.isshowDelbtn) {
+					if (supplier.isChecked) {
+						pros.isChecked = true
+						if (!this.submitIds.includes(pros.skuId * 1)) {
+							this.submitIds.push(pros.skuId)
+							this.checkenProsList.push(pros)
+						}
+					} else {
+						pros.isChecked = false
+						let lent = this.submitIds.indexOf(pros.skuId * 1)
+						if (lent >= 0) {
+							this.submitIds.splice(lent, 1)
+							this.checkenProsList.splice(lent, 1)
+						}
+					}
+				} else {
+					if (supplier.isChecked && (pros.stock !== 0 || pros.number < pros.stock)) {
+						pros.isChecked = true
+						if (!this.submitIds.includes(pros.skuId * 1)) {
+							this.submitIds.push(pros.skuId)
+							this.checkenProsList.push(pros)
+						}
+					} else {
+						pros.isChecked = false
+						let lent = this.submitIds.indexOf(pros.skuId * 1)
+						if (lent >= 0) {
+							this.submitIds.splice(lent, 1)
+							this.checkenProsList.splice(lent, 1)
+						}
+					}
+				}
+			})
+		},
+		updateBothCheckBtn() {
+			if (this.isshowDelbtn) {
+				// 当管理删除按钮出现时,失效的商品可被选择
+				this.goodsList.forEach(supplier => {
+					supplier.isChecked = this.isCheckAll
+					this.setProductChecked(supplier)
+				})
+				//删除按钮 全选包括失效商品勾选
+				this.failureList.forEach(failureItem => {
+					failureItem.isChecked = this.isCheckAll
+				})
+			} else {
+				this.goodsList.forEach(supplier => {
+					if (supplier.isDisable) {
+						supplier.isChecked = false
+					} else {
+						supplier.isChecked = this.isCheckAll && !supplier.isDisabled
+					}
+					this.setProductChecked(supplier)
+				})
+			}
+		},
+		handleCheckAll() {
+			//全选方法内调用方法
+			this.isCheckAll = !this.isCheckAll
+			this.updateBothCheckBtn()
+		},
+		totalShopPeice() {
+			//每次所属会所下的商品增减重新计算合计价格&减去含有下架的商品
+			this.goodsList.map((item, index) => {
+				let totalPrice = 0
+				item.cartList.forEach(pros => {
+					totalPrice += pros.price * pros.number
+				})
+				item.totalPrice = totalPrice
+			})
+		},
+		totalPeice() {
+			//计算总价格,每次调用此方法,将初始值为0,遍历价格并累加
+			let totalPrice = 0
+			let totalAmount = 0
+			this.goodsList.forEach((item, index) => {
+				let supplierPrice = 0
+				item.totalprice = 0
+				item.cartList.forEach(pros => {
+					if (pros.isChecked) {
+						supplierPrice += pros.price * pros.number
+						totalAmount += item.totalprice
+					}
+				})
+				item.totalprice = supplierPrice
+				totalPrice += item.totalprice
+				this.totalAmount = totalAmount
+			})
+			// 最终合计价格 = 	店铺满减合计 + 单品满减  + 正常合计 + 凑单满减
+			this.allPrice = totalPrice
+			console.log('最终合计价格', `${this.allPrice}元`)
+		},
+		totalCount() {
+			//计算总数量
+			this.allCount = 0
+			let prosAllCount = 0
+			let validCount = 0
+			let validList = []
+			let productsList = []
+			this.goodsList.forEach(item => {
+				productsList = item.cartList
+				productsList.forEach(pros => {
+					if (pros.isChecked) {
+						prosAllCount += parseInt(pros.number)
+						this.allCount = prosAllCount
+					}
+				})
+			})
+		},
+		changeCountAdd(item, pros) {
+			//商品数量加加
+			if (pros.step === 2) {
+				pros.isStep = false
+				pros.number += pros.min
+				this.processActivityPrice(pros)
+				this.isStock = false
+			} else {
+				pros.number++
+				this.processActivityPrice(pros)
+				this.isStock = false
+			}
+			this.updateShoppogNum(pros)
+			this.totalShopPeice()
+		},
+		changeCountSub(item, pros) {
+			//商品数量减减
+			if (pros.number <= pros.min) {
+				pros.number = pros.min
+				this.$util.msg(`该商品最小起订量为${pros.min}`, 2000)
+				return
+			} else {
+				if (pros.step === 2) {
+					pros.isStep = false
+					pros.number -= pros.min
+				} else {
+					pros.number--
+				}
+				this.processActivityPrice(pros)
+			}
+			this.updateShoppogNum(pros)
+			this.totalShopPeice()
+		},
+		changeInput(pros) {
+			//输入商品数量更新
+			pros.isStep = false
+		},
+		changeNnmber(e, item, pros) {
+			//输入商品数量更新
+			let _value = Number(e.detail.value)
+			if (!this.$api.isNumber(_value)) {
+				pros.number = pros.min
+			} else if (_value < pros.min) {
+				this.$util.msg(`该商品最小起订量为${pros.min}`, 2000)
+				pros.number = pros.min
+			} else if (_value % pros.min != 0) {
+				pros.isStep = true
+				pros.number = pros.min
+			} else {
+				pros.isStep = false
+				pros.number = e.detail.value
+				this.processActivityPrice(pros)
+			}
+			this.updateShoppogNum(pros)
+			this.totalShopPeice()
+		},
+		processActivityPrice(pros) {
+			//单独处理活动价格和阶梯价格
+			let ladderPriceList = pros.ladderPrices
+			if (pros.ladderFlag == 0 || pros.actStatus == 1) {
+				pros.price = pros.price
+			} else {
+				ladderPriceList.forEach((item, index) => {
+					if (pros.number >= item.buyNum) {
+						pros.price = item.buyPrice
+					}
+				})
+			}
+		},
+		setCartisDisable() {
+			// 删除取消设置不能选的商品
+			this.goodsList = this.goodsList.map(suppler => {
+				suppler.isDisable = false
+				suppler.cartList.forEach(pros => {
+					pros.isDisable = false
+				})
+				return suppler
+			})
+		},
+		clearCartisDisable() {
+			// 取消删除设置不能选的商品
+			this.goodsList = this.goodsList.map(supplier => {
+				supplier.cartList.forEach(pros => {
+					if (pros.stock === 0 || pros.number > pros.stock) {
+						supplier.isDisable = true
+						pros.isDisable = true
+					} else {
+						pros.isDisable = false
+					}
+				})
+				return supplier
+			})
+		},
+		showDelManager() {
+			//显示删除商品管理
+			this.isshowDelbtn = true
+			this.setCartisDisable()
+			if (this.isCheckAll) {
+				this.updateBothCheckBtn()
+			} else {
+				this.goodsList = this.goodsList.map(suppler => {
+					if (suppler.isChecked) {
+						suppler.cartList.forEach(pros => {
+							pros.isChecked = true
+						})
+					}
+					return suppler
+				})
+				this.updateCheckAllBtn()
+			}
+			// 失效也被勾选
+			this.failureList = this.failureList.map(el => {
+				if (el.isFailureLayer) {
+					el.isFailureLayer = false
+				}
+				return el
+			})
+		},
+		hideDelManage() {
+			//隐藏删除商品管理
+			this.isshowDelbtn = false
+			this.isCheckAll = false
+			this.clearCartisDisable()
+			this.goodsList = this.goodsList.map(suppler => {
+				suppler.isChecked = false
+				suppler.cartList.forEach(pros => {
+					pros.isChecked = false
+				})
+				return suppler
+			})
+			this.failureList = this.failureList.map(el => {
+				if (el.failureState == 1 || el.failureState == 2) {
+					el.isFailureLayer = true
+				} else {
+					el.isFailureLayer = false
+				}
+				return el
+			})
+		},
+
+		goIndex() {
+			uni.switchTab({
+				url: '/pages/tabBar/home/index'
+			})
+		},
+		goSuppile(shop) {
+			//跳转店铺
+			if (shop.shopType === 2) {
+				return
+			}
+			this.$api.navigateTo(`/pages/supplier/user/my-shop?shopId=${shop.shopId}`)
+		},
+		goNavto(url) {
+			uni.navigateTo({
+				url
+			})
+		},
+		navToListPage(id) {
+			this.$api.navigateTo(`/pages/goods/product?id=${id}`)
+		},
+		failureToProduct(failure) {
+			this.$api.navigateTo(`/pages/goods/product?id=${failure.productId}`)
+		},
+		handleShouUnitPopup(pros) {
+			// 规格弹窗
+			this.popupShow2 = true
+			this.handlePros = pros
+		},
+		hideMobel() {
+			this.modal = false
+		},
+		handleClick(e) {
+			//个人机构跳转升级页面
+			if (e.index == 1) {
+				this.shoppingCartDelete({ userId: this.userId, skuIds: this.delSkuIds })
+			}
+			this.modal = false
+		},
+		setHeaderBtnPosi() {
+			// 获得胶囊按钮位置信息
+			let headerBtnPosi = uni.getMenuButtonBoundingClientRect()
+			return headerBtnPosi
+		},
+		setSysteminfo() {
+			let systeminfo
+			uni.getSystemInfo({
+				// 获取设备信息
+				success: res => {
+					systeminfo = res
+				}
+			})
+			return systeminfo
+		},
+		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)
+		}
+	}
+}
+</script>
+
+<style lang="scss">
+page {
+	background: #f7f7f7;
+	height: auto;
+}
+.cart-content {
+	position: relative;
+}
+.container-cart-main.none {
+	display: none;
+}
+.container-cart-main.show {
+	display: block;
+}
+.cart-content.empty.none {
+	display: none;
+}
+.cart-content.empty.show {
+	display: block;
+}
+.container-cart.show {
+	display: block;
+}
+.container-cart.none {
+	display: none;
+}
+.empty-container.none {
+	display: none;
+}
+.empty-container.show {
+	display: flex;
+}
+.foot-check-delbtn {
+	width: 100%;
+	height: 80rpx;
+	position: fixed;
+	top: 0;
+	left: 0;
+	box-sizing: border-box;
+	padding: 15rpx 24rpx;
+	background-color: #f7f7f7;
+	z-index: 990;
+	.foot-text {
+		font-size: $font-size-26;
+		height: 50rpx;
+		line-height: 50rpx;
+		color: #666666;
+		float: left;
+		padding-left: 10rpx;
+		text {
+			margin: 0 6rpx;
+		}
+	}
+	.delBtn {
+		width: 100rpx;
+		display: inline-block;
+		padding: 0 15rpx;
+		font-size: $font-size-26;
+		height: 50rpx;
+		line-height: 50rpx;
+		border-radius: 30rpx;
+		background: #ffffff;
+		border: 1px solid #999999;
+		color: #999999;
+		float: right;
+		text-align: center;
+		&.none {
+			display: none;
+		}
+	}
+}
+.checkbox-box {
+	display: flex;
+	align-items: center;
+	.checkbox {
+		display: flex;
+		margin: 0;
+		padding: 5rpx;
+		display: flex;
+		flex-direction: column;
+		align-items: center;
+		box-sizing: border-box;
+		text-align: center;
+		text-decoration: none;
+		border-radius: 0;
+		-webkit-tap-highlight-color: transparent;
+		overflow: hidden;
+		background-color: #ffffff;
+		font-size: 36rpx;
+		color: #999999;
+		&.icon-yixuanze {
+			color: $color-system;
+		}
+	}
+	&.disabled {
+		.checkbox {
+			color: #999999;
+		}
+	}
+	.text {
+		font-size: $font-size-24;
+		margin-left: 10rpx;
+	}
+}
+.goods-list {
+	width: 100%;
+	height: auto;
+	background-color: #f7f7f7;
+	.goods-item {
+		width: 702rpx;
+		padding: 0 24rpx;
+		background: #ffffff;
+		margin-bottom: 24rpx;
+	}
+	.shoptitle {
+		height: 80rpx;
+		line-height: 80rpx;
+		.checkbox-box {
+			float: left;
+			line-height: 80rpx;
+			display: inline-block;
+			box-sizing: border-box;
+		}
+		.text {
+			width: 400rpx;
+			float: left;
+			display: block;
+			overflow: hidden;
+			text-overflow: ellipsis;
+			white-space: nowrap;
+			line-height: 80rpx;
+			margin-left: 20rpx;
+			font-size: $font-size-28;
+			color: $text-color;
+			text-align: left;
+			font-weight: bold;
+		}
+	}
+	.goods-pros {
+		width: 100%;
+		height: auto;
+		margin-bottom: 20rpx;
+	}
+	.goods-pros-t {
+		display: flex;
+		align-items: center;
+		width: 100%;
+		height: 210rpx;
+		padding: 0 0 26rpx 0;
+		.checkbox-box {
+			// padding: 10rpx;
+		}
+		.pros-img {
+			width: 210rpx;
+			height: 100%;
+			border-radius: 10rpx;
+			margin: 0 20rpx;
+			border: 1px solid #f3f3f3;
+			position: relative;
+			image {
+				width: 100%;
+				height: 100%;
+				border-radius: 10rpx;
+			}
+		}
+	}
+	.goods-pros-b {
+		width: 100%;
+		height: auto;
+		padding: 0 0 24rpx 0;
+		box-sizing: border-box;
+		&.show {
+			display: block;
+		}
+		&.none {
+			display: none;
+		}
+		.sum-none {
+			width: 100%;
+			height: 48rpx;
+			line-height: 48rpx;
+			color: $text-color;
+			float: left;
+			text-align: right;
+			.money {
+				font-size: $font-size-26;
+				color: #999999;
+				text-decoration: line-through;
+			}
+			.money-sign {
+				font-size: $font-size-26;
+				color: #999999;
+				text-decoration: line-through;
+			}
+			.money-reduced {
+				margin-left: 10rpx;
+				font-size: $font-size-26;
+				color: $color-system;
+				.iconfont {
+					font-size: $font-size-34;
+				}
+			}
+		}
+		.sum {
+			width: 100%;
+			height: 40rpx;
+			font-size: $font-size-26;
+			line-height: 40rpx;
+			color: $text-color;
+			float: left;
+			display: flex;
+			justify-content: flex-end;
+			font-weight: bold;
+			.money {
+				color: #ff2a2a;
+				font-size: $font-size-26;
+			}
+			.money-sign {
+				font-size: $font-size-24;
+				color: #ff2a2a;
+			}
+		}
+	}
+	.pros-product {
+		width: 416rpx;
+		height: 100%;
+		line-height: 36rpx;
+		font-size: $font-size-28;
+		position: relative;
+		.producttitle {
+			width: 100%;
+			display: inline-block;
+			height: auto;
+			text-overflow: ellipsis;
+			display: -webkit-box;
+			word-break: break-all;
+			-webkit-box-orient: vertical;
+			-webkit-line-clamp: 2;
+			overflow: hidden;
+			margin-bottom: 15rpx;
+			.no-text {
+				display: inline-block;
+				height: 36rpx;
+				padding: 0 12rpx;
+				line-height: 36rpx;
+				background: linear-gradient(315deg, rgba(231, 0, 0, 1) 0%, rgba(255, 104, 1, 1) 100%);
+				border-radius: 18rpx;
+				text-align: center;
+				color: #ffffff;
+				font-size: $font-size-28;
+				margin-right: 24rpx;
+			}
+		}
+		.productspec {
+			height: 36rpx;
+			color: #999999;
+			font-size: $font-size-26;
+		}
+		.cart-sku-temp {
+			width: 100%;
+			height: 48rpx;
+			margin: 30rpx 0 0 0;
+			.cart-sku-text {
+				font-size: 28rpx;
+				line-height: 48rpx;
+				color: #666666;
+				float: left;
+			}
+			.cart-sku-btn {
+				padding: 0 16rpx;
+				text-align: center;
+				line-height: 40rpx;
+				font-size: 24rpx;
+				box-sizing: border-box;
+				border: 1px solid #ff5b00;
+				color: #ff5b00;
+				float: left;
+				border-radius: 20rpx;
+				margin-left: 16rpx;
+			}
+		}
+		.productprice {
+			width: 100%;
+			height: 48rpx;
+			margin: 30rpx 0 0 0;
+			.price {
+				line-height: 48rpx;
+				font-size: $font-size-26;
+				width: 48%;
+				color: #ff2a2a;
+				float: left;
+				font-weight: bold;
+				&.disabled {
+					color: #999999;
+					text-decoration: line-through;
+				}
+				.money-sign {
+					font-size: $font-size-24;
+					color: #ff2a2a;
+				}
+			}
+			.count {
+				height: 100%;
+				float: right;
+				position: relative;
+				&.show {
+					display: block;
+				}
+				&.none {
+					display: none;
+				}
+				.count-tips {
+					width: auto;
+					display: inline-block;
+					padding: 0 15rpx;
+					line-height: 44rpx;
+					height: 44rpx;
+					border-radius: 22rpx;
+					background: $btn-confirm;
+					font-size: $font-size-24;
+					text-align: center;
+					color: #ffffff;
+					position: absolute;
+					top: -60rpx;
+					left: -5rpx;
+					z-index: 5;
+					&.step {
+						left: -217rpx;
+					}
+					&::before {
+						content: '';
+						position: absolute;
+						bottom: -30rpx;
+						right: 15rpx;
+						z-index: 1;
+						width: 0;
+						height: 0;
+						border-width: 18rpx;
+						border-style: solid;
+						border-color: $color-system transparent transparent transparent;
+					}
+				}
+				.number-box {
+					display: flex;
+					justify-content: center;
+					align-items: center;
+					border: 2rpx solid #d5d5d5;
+					border-radius: 30rpx;
+					.iconfont {
+						font-size: $font-size-24;
+						padding: 0 18rpx;
+						color: #333333;
+						text-align: center;
+						line-height: 48rpx;
+						font-weight: bold;
+						background: #f7f7f7;
+						&.icon-jianhao {
+							border-radius: 30rpx 0 0 30rpx;
+						}
+						&.icon-jiahao {
+							border-radius: 0 30rpx 30rpx 0;
+						}
+					}
+					.btn-input {
+						width: 62rpx;
+						height: 48rpx;
+						line-height: 48rpx;
+						background: #fff;
+						border-radius: 4rpx;
+						text-align: center;
+						font-size: $font-size-24;
+					}
+				}
+				.uni-numbox {
+					position: absolute;
+					left: 45rpx;
+					bottom: 0;
+					.uni-numbox-minus,
+					.uni-numbox-plus {
+						width: 50rpx;
+						line-height: 40rpx;
+					}
+					.uni-numbox-value {
+						font-size: $font-size-28;
+						width: 60rpx;
+					}
+				}
+			}
+		}
+	}
+}
+.failure-list {
+	width: 702rpx;
+	height: auto;
+	padding: 0 24rpx;
+	margin-top: 20rpx;
+	background: #ffffff;
+	.failure-title {
+		width: 100%;
+		height: 82rpx;
+		line-height: 82rpx;
+		font-size: $font-size-28;
+		border-bottom: 1px solid #ebebeb;
+		.title-txt {
+			float: left;
+			color: #666666;
+			text-align: left;
+		}
+		.title-btn {
+			float: right;
+			color: $color-system;
+			text-align: right;
+			line-height: 80rpx;
+			.butto {
+				display: inline-block;
+				padding: 0 15rpx;
+				font-size: $font-size-26;
+				height: 50rpx;
+				line-height: 50rpx;
+				border-radius: 30rpx;
+				background: #ffffff;
+				// border: 1px solid #C9C9C9;
+				// color: #999999;
+				margin-top: 15rpx;
+			}
+		}
+	}
+	.productlist {
+		padding-top: 10rpx;
+		.goods-pros {
+			width: 100%;
+			height: auto;
+			padding: 20rpx 0;
+		}
+		.goods-pros-t {
+			display: flex;
+			align-items: center;
+			width: 100%;
+			height: 210rpx;
+			position: relative;
+			.img-tip {
+				display: block;
+				width: 72rpx;
+				height: 36rpx;
+				line-height: 36rpx;
+				font-size: $font-size-24;
+				text-align: center;
+				color: #ffffff;
+				border-radius: 24rpx;
+				background: rgba(51, 51, 51, 0.3);
+				// position: absolute;
+				// left: 0;
+				// top: 0;
+			}
+			.checkbox-box {
+				padding: 10rpx;
+			}
+			.pros-img {
+				width: 180rpx;
+				height: 100%;
+				border-radius: 10rpx;
+				margin: 0 20rpx;
+				border: 1px solid #f3f3f3;
+				position: relative;
+				image {
+					width: 100%;
+					height: 100%;
+					border-radius: 10rpx;
+				}
+				.pros-type {
+					width: 64rpx;
+					height: 64rpx;
+					text-align: justify;
+					box-sizing: border-box;
+					padding: 10rpx;
+					border-radius: 0 0 8rpx 8rpx;
+					background-color: #33ccbf;
+					font-size: $font-size-22;
+					color: #ffffff;
+					line-height: 25rpx;
+					position: absolute;
+					top: 0;
+					right: 10rpx;
+				}
+			}
+			.pros-marks {
+				width: 730rpx;
+				height: 250rpx;
+				z-index: 90;
+				background: rgba(0, 0, 0, 0.05);
+				position: absolute;
+				left: -20rpx;
+				top: -20rpx;
+			}
+		}
+		.goods-pros-b {
+			width: 622rpx;
+			margin-left: 84rpx;
+			height: 40rpx;
+			padding: 0 0 26rpx 0;
+			// border-top: 1px solid #EBEBEB;
+			&.show {
+				display: block;
+			}
+			&.none {
+				display: none;
+			}
+			.sum {
+				font-size: $font-size-28;
+				line-height: 40rpx;
+				color: $text-color;
+				display: flex;
+				justify-content: flex-end;
+				.money {
+					color: #ff2a2a;
+					font-size: $font-size-28;
+				}
+				.money-sign {
+					font-size: $font-size-24;
+					color: #ff2a2a;
+				}
+			}
+		}
+		.pros-product {
+			width: 402rpx;
+			height: 100%;
+			line-height: 36rpx;
+			font-size: $font-size-28;
+			position: relative;
+			.producttitle {
+				width: 100%;
+				display: inline-block;
+				height: auto;
+				text-overflow: ellipsis;
+				display: -webkit-box;
+				word-break: break-all;
+				-webkit-box-orient: vertical;
+				-webkit-line-clamp: 2;
+				overflow: hidden;
+				margin-bottom: 8rpx;
+				.no-text {
+					display: inline-block;
+					height: 36rpx;
+					padding: 0 12rpx;
+					line-height: 36rpx;
+					background: linear-gradient(315deg, rgba(231, 0, 0, 1) 0%, rgba(255, 104, 1, 1) 100%);
+					border-radius: 18rpx;
+					text-align: center;
+					color: #ffffff;
+					font-size: $font-size-28;
+					margin-right: 24rpx;
+				}
+			}
+			.productspec {
+				height: 36rpx;
+				color: #999999;
+				font-size: $font-size-26;
+				margin-top: 20rpx;
+			}
+			.productstate {
+				font-size: $font-size-28;
+				height: 44rpx;
+				color: #ff2a2a;
+				position: absolute;
+				bottom: 0;
+				left: 0;
+			}
+		}
+	}
+}
+.tui-popup-box {
+	position: relative;
+	box-sizing: border-box;
+	min-height: 220rpx;
+	padding: 24rpx 24rpx 0 24rpx;
+	.tui-popup-close {
+		width: 90rpx;
+		height: 90rpx;
+		position: absolute;
+		right: 0;
+		top: 24rpx;
+		line-height: 90rpx;
+		text-align: center;
+		color: #b2b2b2;
+		.icon-iconfontguanbi {
+			font-size: $font-size-40;
+		}
+	}
+	.title {
+		font-size: $font-size-34;
+		color: $text-color;
+		line-height: 88rpx;
+		text-align: center;
+		float: left;
+		width: 100%;
+		height: 88rpx;
+		font-weight: bold;
+	}
+	.tui-popup-main {
+		width: 100%;
+		float: left;
+		&.coupon {
+			padding-bottom: 40rpx;
+			.coupon-empty {
+				width: 100%;
+				height: 600rpx;
+				display: flex;
+				align-items: center;
+				justify-content: center;
+				flex-direction: column;
+				position: fixed;
+				background: $bg-color;
+				.empty-container-image {
+					width: 150rpx;
+					height: 150rpx;
+					margin-bottom: 0;
+					margin-top: 0;
+				}
+				.error-text {
+					font-size: $font-size-28;
+					color: #999999;
+					line-height: 88rpx;
+				}
+			}
+		}
+		.tui-popup-scroll {
+			width: 100%;
+			height: 600rpx;
+			.coupon-list {
+				width: 100%;
+				height: 200rpx;
+				margin-top: 24rpx;
+				box-sizing: border-box;
+				background: url(https://static.caimei365.com/app/img/icon/icon-coupon-uesb@2x.png);
+				background-size: cover;
+				&:last-child {
+					margin-bottom: 24rpx;
+				}
+				.list-cell-le {
+					width: 224rpx;
+					height: 100%;
+					box-sizing: border-box;
+					padding: 37rpx 0;
+					float: left;
+					.coupon-maxMoney {
+						width: 100%;
+						height: 78rpx;
+						line-height: 78rpx;
+						font-size: 56rpx;
+						color: #ffffff;
+						text-align: center;
+						.small {
+							font-size: $font-size-24;
+						}
+					}
+					.coupon-minMoney {
+						width: 100%;
+						height: 33rpx;
+						line-height: 33rpx;
+						font-size: $font-size-24;
+						color: #ffffff;
+						text-align: center;
+					}
+				}
+				.list-cell-ri {
+					width: 478rpx;
+					height: 100%;
+					box-sizing: border-box;
+					padding: 20rpx 24rpx 0 24rpx;
+					float: right;
+					.list-cell-top {
+						width: 100%;
+						height: 121rpx;
+						float: left;
+						border-bottom: 1px solid #e1e1e1;
+						.list-cell-type {
+							width: 286rpx;
+							height: 100%;
+							float: left;
+							.list-cell-tags {
+								width: 100%;
+								height: 32rpx;
+								margin-bottom: 7rpx;
+								.tags {
+									display: inline-block;
+									padding: 0 10rpx;
+									height: 32rpx;
+									line-height: 32rpx;
+									background-color: #ffdcce;
+									color: #f94b4b;
+									font-size: $font-size-20;
+									border-radius: 8rpx;
+									text-align: center;
+									float: left;
+								}
+							}
+							.list-cell-texts {
+								width: 100%;
+								height: auto;
+								line-height: 35rpx;
+								text-overflow: ellipsis;
+								display: -webkit-box;
+								word-break: break-all;
+								-webkit-box-orient: vertical;
+								-webkit-line-clamp: 2;
+								overflow: hidden;
+								font-size: 26rpx;
+								color: #333333;
+							}
+						}
+						.list-cell-btn {
+							width: 128rpx;
+							height: 100%;
+							float: right;
+							.icon-used {
+								width: 100%;
+								height: 100%;
+								box-sizing: border-box;
+								padding-top: 28rpx;
+								.icon-used-text {
+									width: 100%;
+									text-align: center;
+									line-height: 26rpx;
+									font-size: $font-size-20;
+									color: #f94b4b;
+								}
+								.icon-used-btn {
+									width: 128rpx;
+									height: 48rpx;
+									border-radius: 28rpx;
+									line-height: 48rpx;
+									font-size: $font-size-26;
+									text-align: center;
+									&.receive {
+										background-image: linear-gradient(270deg, #f94b4b 0%, #feb673 100%);
+										color: #ffffff;
+									}
+									&.make {
+										border: solid 1px #f94b4b;
+										color: #f94b4b;
+									}
+								}
+							}
+						}
+					}
+					.list-cell-time {
+						width: 100%;
+						height: 58rpx;
+						line-height: 58rpx;
+						text-align: left;
+						font-size: $font-size-20;
+						color: #999999;
+					}
+				}
+			}
+		}
+		.tui-popup-coupon {
+			width: 100%;
+			height: 500rpx;
+			box-sizing: border-box;
+			padding: 30rpx 20rpx;
+			.tui-popup-h1 {
+				width: 100%;
+				height: 66rpx;
+				display: flex;
+				align-items: center;
+				.tui-popup-text {
+					flex: 1;
+					height: 66rpx;
+					line-height: 66rpx;
+					font-size: $font-size-30;
+					color: #333333;
+					&.red {
+						color: #f94b4b;
+					}
+					&.bold {
+						font-weight: bold;
+					}
+					&.left {
+						text-align: left;
+					}
+					&.right {
+						text-align: right;
+					}
+				}
+			}
+		}
+	}
+}
+.footer {
+	width: 100%;
+	background-color: #ffffff;
+	height: 110rpx;
+	position: fixed;
+	bottom: 0rpx;
+	z-index: 990;
+	.footer-le {
+		width: 520rpx;
+		height: 100%;
+		padding-left: 24rpx;
+		float: left;
+		box-sizing: border-box;
+		.foot-check {
+			width: 100rpx;
+			float: left;
+			line-height: 110rpx;
+			font-size: $font-size-24;
+			.checkbox {
+				width: 40rpx;
+				text-align: center;
+			}
+			.text {
+				width: 60rpx;
+				float: right;
+			}
+		}
+		.sum {
+			width: 360rpx;
+			height: 110rpx;
+			float: right;
+			box-sizing: border-box;
+			padding: 10rpx;
+			.sum-none {
+				width: 100%;
+				height: 45rpx;
+				line-height: 45rpx;
+				color: $text-color;
+				float: left;
+				text-align: left;
+				.money {
+					font-size: $font-size-24;
+					color: #999999;
+					text-decoration: line-through;
+				}
+				.money-sign {
+					font-size: $font-size-24;
+					color: #999999;
+					text-decoration: line-through;
+				}
+				.money-reduced {
+					margin-left: 10rpx;
+					font-size: $font-size-24;
+					color: #ff2a2a;
+				}
+				.money-popup {
+					height: 45rpx;
+					line-height: 45rpx;
+					display: inline-block;
+					float: right;
+					font-size: $font-size-24;
+					color: #ff2a2a;
+					.icon-xiangshangjiantou {
+						font-size: $font-size-30;
+						margin-left: 5rpx;
+					}
+				}
+			}
+			.sum-price {
+				width: 100%;
+				height: 45rpx;
+				line-height: 45rpx;
+				font-size: $font-size-30;
+				color: $text-color;
+				float: left;
+				font-weight: normal;
+				text-align: left;
+				&.none {
+					height: 90rpx;
+					line-height: 90rpx;
+				}
+				.money {
+					color: #ff2a2a;
+				}
+				.money-sign {
+					font-size: $font-size-24;
+					color: #ff2a2a;
+				}
+			}
+		}
+	}
+	.footer-ri {
+		width: 230rpx;
+		height: 100%;
+		float: right;
+		display: flex;
+		justify-content: space-between;
+		align-items: center;
+		z-index: 999;
+		box-sizing: border-box;
+		padding: 13rpx 15rpx 13rpx 5rpx;
+		&.none {
+			display: none;
+		}
+		.btn {
+			width: 200rpx;
+			height: 100%;
+			background: $btn-confirm;
+			font-size: $font-size-26;
+			line-height: 84rpx;
+			color: #ffffff;
+			display: flex;
+			border-radius: 42rpx;
+			justify-content: center;
+			align-items: center;
+		}
+	}
+	.footer-del {
+		width: 460rpx;
+		height: 110rpx;
+		position: absolute;
+		padding-left: 140rpx;
+		background: #ffffff;
+		right: 0;
+		top: 0;
+		z-index: 1000;
+		&.show {
+			animation: showDelbtn 0s linear both;
+		}
+		&.none {
+			animation: hideDelbtn 0s linear both;
+		}
+		.btn {
+			width: 200rpx;
+			height: 80rpx;
+			line-height: 80rpx;
+			font-size: $font-size-28;
+			color: #ffffff;
+			text-align: center;
+			float: left;
+			margin: 10rpx;
+			border-radius: 40rpx;
+		}
+		.btn.btn-cancel {
+			background: #f7f7f7;
+			color: #b2b2b2;
+		}
+		.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>

+ 1825 - 0
pages/seller/cart/index.vue

@@ -0,0 +1,1825 @@
+<template>
+	<view class="container cart clearfix">
+		<tui-skeleton
+			v-if="skeletonShow"
+			backgroundColor="#fafafa"
+			borderRadius="10rpx"
+			:isLoading="true"
+			:loadingType="5"
+		></tui-skeleton>
+		<view class="foot-check-delbtn" v-if="!isshowDelbtn && goodsList.length > 0" :style="{ top: CustomBar + 'px' }">
+			<view class="foot-text"
+				>共<text>{{ kindCount }}</text
+				>件商品</view
+			>
+			<view class="delBtn" @tap.stop="showDelManager">删除</view>
+		</view>
+		<view class="container-cart-main tui-skeleton" :style="{ paddingTop: isshowDelbtn ? '0rpx' : '80rpx' }">
+			<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">
+								<!--选择商店的全部商品 :disabled="isNnder"-->
+								<view class="checkbox-box" @click.stop="handleCheckShop(item)">
+									<view
+										class="checkbox iconfont"
+										:class="[item.isChecked ? 'icon-yixuanze' : 'icon-weixuanze']"
+									></view>
+								</view>
+								<view v-if="item.promotions" class="floor-item-act">
+									<view class="floor-tags" @click.stop="clickPopupShow(item, 2)">{{
+										item.promotions.name
+									}}</view>
+								</view>
+								<view class="text">{{ item.shopName }}</view>
+							</view>
+							<view class="productlist">
+								<view class="goods-pros" v-for="(pros, idx) in item.cartList" :key="idx">
+									<view class="goods-pros-t">
+										<!--选择商品-->
+										<view class="checkbox-box" @click.stop="handlsCkecdPros(item, pros, idx)">
+											<view
+												class="checkbox iconfont"
+												:class="[pros.isChecked ? 'icon-yixuanze' : 'icon-weixuanze']"
+											></view>
+										</view>
+										<view class="pros-img" @click.stop="navToListPage(pros.productId)">
+											<image :src="pros.image ? pros.image : ''" alt="" />
+											<view class="pros-type" v-if="pros.productType == 2">医疗器械</view>
+										</view>
+										<view class="pros-product">
+											<view class="producttitle" @click.stop="navToListPage(pros.productId)">
+												{{ pros.name }}
+											</view>
+											<view class="productspec">规格:{{ pros.unit ? pros.unit : '' }}</view>
+											<view
+												class="productspec"
+												v-if="pros.productCode != '' && pros.productCode != null"
+											>
+												<view bgcolor="#666666">商品编码:{{ pros.productCode }}</view>
+											</view>
+											<template v-if="pros.number > pros.stock || pros.stock === 0">
+												<view class="cart-sku-temp" @click.stop="handleShouUnitPopup(pros)">
+													<view class="cart-sku-text">重新选择商品规格</view>
+													<view class="cart-sku-btn">重选</view>
+												</view>
+											</template>
+											<template v-else>
+												<view class="productprice">
+													<!--使用过滤器对总价改变-->
+													<view
+														class="price"
+														:class="
+															PromotionsFormat(pros.promotions) ||
+															(pros.svipProductFlag == 1 && vipFlag == 1)
+																? 'disabled'
+																: ''
+														"
+													>
+														<text>¥</text>
+														{{
+															(PromotionsFormat(pros.promotions) ||
+															pros.svipProductFlag == 1
+																? pros.originalPrice
+																: pros.price) | NumFormat
+														}}
+													</view>
+													<view class="count" :class="[isshowDelbtn ? 'none' : 'show']">
+														<text class="count-tips" v-if="pros.number < pros.min"
+															>起订量:{{ pros.min }}</text
+														>
+														<text class="count-tips step" v-if="pros.isStep"
+															>购买量必须为起订量的整数倍</text
+														>
+														<view class="number-box">
+															<view
+																class="iconfont icon-jianhao"
+																@click="changeCountSub(item, pros)"
+															></view>
+															<input
+																class="btn-input"
+																type="number"
+																maxlength="6"
+																v-model="pros.number"
+																@blur="changeNnmber($event, item, pros)"
+															/>
+															<view
+																class="iconfont icon-jiahao"
+																@click="changeCountAdd(item, pros)"
+															></view>
+														</view>
+													</view>
+												</view>
+												<view class="floor-item-act">
+													<template v-if="pros.actStatus == 1 && pros.promotions">
+														<view
+															v-if="PromotionsFormat(pros.promotions)"
+															class="floor-tags"
+															@click.stop="clickPopupShow(pros, 1)"
+														>
+															{{ pros.promotions.name }}
+															<text
+																v-if="
+																	pros.promotions != null && pros.promotions.type != 3
+																"
+															>
+																:¥{{
+																	pros.promotions == null
+																		? '0.00'
+																		: pros.promotions.touchPrice | NumFormat
+																}}
+															</text>
+														</view>
+														<view
+															v-else-if="pros.promotions.type != 3"
+															class="floor-tags"
+															@click.stop="clickPopupShow(pros, 2)"
+														>
+															{{ pros.promotions.name }}
+														</view>
+													</template>
+													<template v-if="pros.actStatus == null && pros.ladderFlag == 1">
+														<view class="floor-tags" @click.stop="clickPopupShow(pros, 2)"
+															>阶梯价格</view
+														>
+													</template>
+													<template v-if="pros.svipProductFlag == 1">
+														<view class="svip-tags">
+															<view class="tags" :class="{ none: vipFlag != 1 }"
+																>SVIP</view
+															>
+															<view class="price" v-if="isShowVipFlag(pros)">{{
+																pros.svipPriceTag
+															}}</view>
+														</view>
+													</template>
+												</view>
+											</template>
+										</view>
+									</view>
+								</view>
+							</view>
+							<view class="goods-pros-b clearfix" :class="[isshowDelbtn ? 'none' : 'show']">
+								<view class="sum-none" v-if="item.reducedPrice > 0">
+									<text class="money-sign">¥</text>
+									<text class="money">{{ item.totalOriginalPrice | NumFormat }}</text>
+									<text class="money-reduced"
+										>减<text>¥{{ item.reducedPrice | NumFormat }}</text></text
+									>
+								</view>
+								<view class="sum"
+									>合计:<text class="money"
+										><text class="money-sign">¥</text>{{ item.totalPrice | NumFormat }}</text
+									></view
+								>
+							</view>
+						</view>
+					</view>
+					<view class="failure-list" v-if="failureList.length > 0">
+						<view class="failure-title">
+							<view class="title-txt"
+								>失效商品<text>{{ failureList.length }}件</text></view
+							>
+							<view class="title-btn" @click.stop="handleDeletefailures"
+								><text class="butto">清空失效商品</text></view
+							>
+						</view>
+						<view class="productlist">
+							<view class="goods-pros" v-for="(failure, failureIdx) in failureList" :key="failureIdx">
+								<view class="goods-pros-t" @click.stop="failureToProduct(failure)">
+									<!--选择商品-->
+									<view
+										class="checkbox-box"
+										@click.stop="handleCheckFailure(failure)"
+										v-if="isshowDelbtn"
+									>
+										<button
+											class="checkbox iconfont"
+											:class="[failure.isChecked ? 'icon-yixuanze' : 'icon-weixuanze']"
+										></button>
+									</view>
+									<text class="img-tip">失效</text>
+									<view class="pros-img">
+										<image :src="failure.mainImage ? failure.mainImage : ''" alt="" />
+										<view class="pros-type" v-if="failure.productType == 2">医疗器械</view>
+									</view>
+									<view class="pros-product">
+										<view class="producttitle">{{ failure.name }}</view>
+										<view class="productspec">规格:{{ failure.unit ? failure.unit : '' }}</view>
+										<view class="productstate">{{ failureStateText(failure.validFlag) }}</view>
+									</view>
+									<view class="pros-marks" v-if="failure.isFailureLayer"></view>
+									<!--</view>-->
+								</view>
+							</view>
+						</view>
+					</view>
+
+					<!--加载loadding-->
+					<tui-loadmore :visible="loadding" :index="3" type="black"></tui-loadmore>
+					<tui-nomore :visible="!pullUpOn" :backgroundColor="'#ffffff'" :text="nomoreText"></tui-nomore>
+					<!--加载loadding-->
+				</scroll-view>
+				<!-- 脚部菜单 -->
+				<view class="footer" :style="{ paddingBottom: isIphoneX ? '68rpx' : '0rpx' }">
+					<view class="footer-le">
+						<view class="foot-check checkbox-box" @tap.stop="handleCheckAll">
+							<button
+								class="checkbox iconfont"
+								:class="[isCheckAll ? 'icon-yixuanze' : 'icon-weixuanze']"
+							></button>
+							<view class="text">全选</view>
+						</view>
+						<view class="sum">
+							<view class="sum-none" v-if="reducedPrice > 0">
+								<text class="money-sign">¥</text>
+								<text class="money">{{ totalOriginalPrice | NumFormat }}</text>
+								<text class="money-reduced"
+									>减<text>¥{{ reducedPrice | NumFormat }}</text></text
+								>
+							</view>
+							<view class="sum-price" :class="reducedPrice == 0 ? 'none' : ''">
+								总价:<text class="money-sign">¥</text
+								><text class="money">{{ allPrice | NumFormat }}</text>
+							</view>
+						</view>
+					</view>
+					<view v-if="!isshowDelbtn" class="footer-ri">
+						<view class="btn hanld-btn" @tap="hanldlerToConfirm">去结算({{ 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="handleDeleteCart">删除</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>
+			</view>
+		</view>
+		<!-- 选择规格弹窗 -->
+		<cm-unit-popup
+			v-if="popupShow"
+			:popupShow="popupShow"
+			:skuProduct="handlePros"
+			@skuBtnConfirm="handleBtnConfirm"
+			@handleFuction="handleFuctionData"
+		></cm-unit-popup>
+		<!-- 促销活动弹窗 -->
+		<activi-popup :product="handlerPros" :popupShow="popupShow1"></activi-popup>
+		<!-- 透明模态层 -->
+		<modal-layer v-if="modallayer"></modal-layer>
+	</view>
+</template>
+<script>
+import modalLayer from '@/components/modal-layer'
+import cmUnitPopup from './components/cm-unit-popup'
+import cartMixins from './mixins/cartMixins.js'
+import apisMixins from './mixins/apisMixins.js'
+import { mapState, mapMutations } from 'vuex'
+const defaultListQuery = {
+	clubId: 0, // 机构Id
+	serviceProviderId: 0, //协销Id
+	againBuyProductIds: '', // 再次购买商品ids
+	pageNum: 1, // 页码
+	pageSize: 10 // 条数
+}
+export default {
+	mixins: [apisMixins, cartMixins],
+	components: {
+		cmUnitPopup,
+		modalLayer
+	},
+	data() {
+		return {
+			kindCount: 0,
+			isStock: '',
+			popupShow: false,
+			popupShow1: false,
+			handlePros: {},
+			listQuery: Object.assign({}, defaultListQuery), // 购物车立即结算确认订单参数
+			handlerPros: {}, //监听单挑促销商品
+			promotionsList: [], //促销活动列表
+			failureList: [], //失效商品列表
+			goodsList: [], //购物车的商品
+			delGoodsList: '', //要删除的商品
+			setGoodData: '', //确认订单的商品
+			isCheckAll: false, //是否全选
+			totalOriginalPrice: 0, //所有原价价
+			reducedPrice: 0, //满减
+			allPrice: 0, //所有价格
+			allCount: 0, //被选中的产品数量
+			isModallayer: false,
+			skeletonShow: true,
+			isshowDelbtn: false,
+			isDisabled: false, // 供应商/店铺全选是否禁用状态
+			isEmpty: false, //显示空购物车
+			scrollHeight: 'auto',
+			nomoreText: '上拉显示更多',
+			hasNextPage: false,
+			loadding: false,
+			pullUpOn: true,
+			pullFlag: true,
+			submitIds: [],
+			checkenProsList: [],
+			depositIds: [6060, 6061, 6062, 6063, 6064], //定金商品ID
+			rechargeIds: [6065, 6066, 6067, 6068, 6069], //充值余额商品ID
+			isIphoneX: this.$store.state.isIphoneX,
+			vipFlag: 0,
+			userIdentity: 0,
+			isCheckedProductStatus: false
+		}
+	},
+	onLoad() {
+		this.setScrollHeight()
+	},
+	computed: {
+		...mapState(['hasLogin', 'userInfo'])
+	},
+	watch: {
+		//深度监听所有数据,每次改变重新计算总价和总数
+		goodsList: {
+			deep: true,
+			handler(val, oldval) {
+				this.totalPeice()
+				this.totalCount()
+			}
+		}
+	},
+	filters: {
+		NumFormat(value) {
+			//处理金额
+			return Number(value).toFixed(2)
+		},
+		totalprice(val, count) {
+			//单件商品的价格 × 数量
+			return (val * count).toFixed(2)
+		}
+	},
+	methods: {
+		async initGetStotage() {
+			const clubInfo = await this.$api.getComStorage('orderUserInfo')
+			const userInfo = await this.$api.getStorage()
+			this.isModallayer = false //遮罩层 防止多次点击
+			this.skeletonShow = true //预加载圆圈
+			this.isCheckAll = false //是否全选
+			this.submitIds = []
+			this.vipFlag = clubInfo.vipFlag ? clubInfo.vipFlag : 0
+			this.userIdentity = clubInfo.userIdentity ? clubInfo.userIdentity : 0
+			console.log('userIdentity', this.userIdentity)
+			console.log('vipFlag', this.vipFlag)
+			this.listQuery.clubId = clubInfo.clubId ? clubInfo.clubId : 0
+			this.listQuery.againBuyProductIds = clubInfo.againBuyProductIds ? clubInfo.againBuyProductIds : ''
+			this.listQuery.serviceProviderId = userInfo.serviceProviderId ? userInfo.serviceProviderId : 0
+			this.initGetCartGoodsList()
+			this.getClubProductNum()
+		},
+		initLogin() {
+			this.$api.redirectTo('/pages/login/login?type=4')
+		},
+		clickPopupShow(pros, type) {
+			//显示活动弹窗
+			this.popupShow1 = true
+			this.handlerPros = pros
+		},
+		failureToProduct(failure) {
+			if (failure.status == 1) {
+				this.$util.msg('商品已丢失,不能查看', 2000)
+				return
+			} else if (failure.status == 2) {
+				this.$util.msg('商品已停售,不能查看', 2000)
+				return
+			} else {
+				this.isModallayer = true
+				this.$api.navigateTo(`/pages/goods/product?id=${failure.productId}`)
+			}
+		},
+		failureStateText(state) {
+			let stateText = '',
+				stateTextObject = {
+					0: '商品已停售',
+					10: '商品已丢失'
+				}
+			Object.keys(stateTextObject).forEach(key => {
+				if (key == state) {
+					stateText = stateTextObject[key]
+				}
+			})
+			return stateText
+		},
+		setScrollHeight() {
+			// 窗口高度-footer高度
+			const { windowHeight, pixelRatio } = uni.getSystemInfoSync()
+			setTimeout(() => {
+				const query = uni.createSelectorQuery().in(this)
+				query.selectAll('.footer').boundingClientRect()
+				query.exec(res => {
+					this.windowHeight = windowHeight
+					if (res[0][0]) {
+						this.scrollHeight = windowHeight - res[0][0].height
+					}
+				})
+			}, 500)
+		},
+		initGetCartGoodsList() {
+			//初始化购物车 index:1
+			this.SellerService.GetSellerShoppingInfo(this.listQuery)
+				.then(response => {
+					this.skeletonShow = false
+					let data = response.data
+					let dataPage = data.pageDate
+					this.promotionsList = data.promotionsList
+					if (dataPage.list.length > 0 || data.invalidProductList.length > 0) {
+						this.isEmpty = false
+					} else {
+						this.isEmpty = true
+					}
+					if (dataPage.list && dataPage.list.length > 0) {
+						this.hasNextPage = dataPage.hasNextPage
+						this.goodsList = dataPage.list
+						this.goodsList.forEach((supplier, index) => {
+							let cartListLength = supplier.cartList.length,
+								invalidLength = 0
+							supplier.cartList.forEach(pros => {
+								pros.shopId = supplier.shopId
+								pros.isStep = false
+								if (pros.stock === 0 || pros.number > pros.stock) {
+									supplier.isDisable = true
+									pros.isDisable = true
+								} else {
+									pros.isDisable = false
+								}
+								if (pros.step === 2) {
+									if (pros.number % pros.min != 0) {
+										pros.number = pros.min
+										this.totalShopPeice()
+										this.updateShoppogNum(pros)
+									}
+								}
+							})
+						})
+						this.totalShopPeice()
+						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 = []
+					}
+					if (response.data.invalidProductList && response.data.invalidProductList.length > 0) {
+						let newFailureList = [],
+							isFailureLayer
+						response.data.invalidProductList.forEach((failure, index) => {
+							if (failure.validFlag == 0 || failure.validFlag == 10) {
+								isFailureLayer = true
+							} else {
+								isFailureLayer = false
+							}
+							newFailureList.push(Object.assign({}, failure, { isFailureLayer: isFailureLayer }))
+						})
+						this.failureList = newFailureList
+						console.log(this.failureList)
+					} else {
+						this.failureList = []
+					}
+				})
+				.catch(error => {
+					this.$util.msg(error.msg, 2000)
+				})
+		},
+		getOnReachBottomData() {
+			//上拉加载
+			this.listQuery.pageNum += 1
+			this.SellerService.GetSellerShoppingInfo(this.listQuery)
+				.then(response => {
+					let resultsData = response.data.pageDate
+					this.promotionsList = response.data.promotionsList
+					this.hasNextPage = resultsData.hasNextPage
+					this.goodsList = this.goodsList.concat(resultsData.results)
+					this.goodsList.forEach((supplier, index) => {
+						let productsListLength = supplier.cartList.length,
+							invalidLength = 0
+						supplier.cartList.forEach(pros => {
+							pros.shopId = supplier.shopId
+							pros.isStep = false
+							if (pros.stock === 0 || pros.number > pros.stock) {
+								supplier.isDisable = true
+								pros.isDisable = true
+							} else {
+								pros.isDisable = false
+							}
+							if (pros.step === 2) {
+								if (pros.number % pros.min != 0) {
+									pros.number = pros.min
+									this.totalShopPeice()
+									this.updateShoppogNum(pros)
+								}
+							}
+						})
+					})
+					this.totalShopPeice()
+					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)
+				})
+		},
+		getClubProductNum() {
+			// 获取协销下机构购物车数量
+			this.SellerService.GetSellerProductNum({
+				clubId: this.listQuery.clubId,
+				serviceProviderId: this.listQuery.serviceProviderId
+			}).then(response => {
+				this.kindCount = response.data
+			})
+		},
+		handleCheckFailure(failure) {
+			//  选择失效商品
+			failure.isChecked = !failure.isChecked
+			this.updateCheckAllBtn()
+		},
+		handlsCkecdPros(item, pro) {
+			//为未选中的时候改变为true,反之为true
+			if (!this.isshowDelbtn) {
+				if (pro.isDisable) { return }
+			}
+			pro.isChecked = !pro.isChecked
+			if (pro.isChecked) {
+				if (!this.submitIds.includes(pro.skuId * 1)) {
+					this.submitIds.push(pro.skuId)
+					this.checkenProsList.push(pro)
+				}
+				this.isCheckedProductStatus = true
+			} else {
+				var lent = this.submitIds.indexOf(pro.skuId * 1)
+				if (lent >= 0) {
+					this.submitIds.splice(lent, 1)
+					this.checkenProsList.splice(lent, 1)
+				}
+			}
+			this.updateProductCheckedAllBtn(item)
+			this.updateCheckAllBtn()
+		},
+		updateProductCheckedAllBtn(item) {
+			// 单独每个供应商的勾选判断
+			let productsList = item.cartList,
+				productsCheckedLength = 0,
+				disabledLength = 0
+			if (this.isshowDelbtn) {
+				productsList.forEach(pros => {
+					if (pros.isChecked) {
+						productsCheckedLength++
+					}
+				})
+			} else {
+				productsList.forEach(pros => {
+					if (pros.isChecked) {
+						productsCheckedLength++
+					}
+				})
+			}
+			item.isChecked = productsCheckedLength === productsList.length - disabledLength
+		},
+		updateCheckAllBtn() {
+			// 全选勾选判断
+			let goodsCheckedLength = 0,
+				disabledListLength = 0,
+				goodsList = this.goodsList
+			goodsList.forEach(item => {
+				if (item.isChecked) {
+					goodsCheckedLength++
+				}
+			})
+			this.isCheckAll = goodsCheckedLength === goodsList.length - disabledListLength
+		},
+		handleCheckShop(supplier) {
+			//与单选商品类似
+			if (!this.isshowDelbtn) {
+				if (supplier.isDisable) {
+					return
+				}
+			}
+			supplier.isChecked = !supplier.isChecked
+			this.setProductChecked(supplier)
+			this.updateCheckAllBtn()
+		},
+		setProductChecked(supplier) {
+			supplier.cartList.forEach(pros => {
+				if (this.isshowDelbtn) {
+					if (supplier.isChecked) {
+						pros.isChecked = true
+						if (!this.submitIds.includes(pros.skuId * 1)) {
+							this.submitIds.push(pros.skuId)
+							this.checkenProsList.push(pros)
+						}
+					} else {
+						pros.isChecked = false
+						let lent = this.submitIds.indexOf(pros.skuId * 1)
+						if (lent >= 0) {
+							this.submitIds.splice(lent, 1)
+							this.checkenProsList.splice(lent, 1)
+						}
+					}
+				} else {
+					if (supplier.isChecked && (pros.stock !== 0 || pros.number < pros.stock)) {
+						pros.isChecked = true
+						if (!this.submitIds.includes(pros.skuId * 1)) {
+							this.submitIds.push(pros.skuId)
+							this.checkenProsList.push(pros)
+						}
+					} else {
+						pros.isChecked = false
+						let lent = this.submitIds.indexOf(pros.skuId * 1)
+						if (lent >= 0) {
+							this.submitIds.splice(lent, 1)
+							this.checkenProsList.splice(lent, 1)
+						}
+					}
+				}
+			})
+		},
+		updateBothCheckBtn() {
+			if (this.isshowDelbtn) {
+				// 当管理删除按钮出现时,失效的商品可被选择
+				this.goodsList.forEach(supplier => {
+					supplier.isChecked = this.isCheckAll
+					this.setProductChecked(supplier)
+				})
+				//删除按钮 全选包括失效商品勾选
+				this.failureList.forEach(failureItem => {
+					failureItem.isChecked = this.isCheckAll
+				})
+			} else {
+				this.goodsList.forEach(supplier => {
+					if(supplier.isDisable){
+						supplier.isChecked = false
+					}else{
+						supplier.isChecked = this.isCheckAll && !supplier.isDisabled
+					}
+					this.setProductChecked(supplier)
+				})
+			}
+		},
+		handleCheckAll() {
+			//全选方法内调用方法
+			this.isCheckAll = !this.isCheckAll
+			this.updateBothCheckBtn()
+		},
+		totalShopPeice() {
+			//每次所属会所下的商品增减重新计算合计价格&减去含有下架的商品
+			let touchPrice = 0
+			let reducedPrice = 0 //商铺合计满减价
+			this.goodsList.map((item, index) => {
+				//计算店铺满减后店铺合计
+				if (item.promotions && item.promotions.mode == 2) {
+					let prosPrice = 0 // 店铺价格合计
+					let prosDiscountNum = 0 // 店铺促销叠加次数
+					let totalOriginalPrice = 0 //店铺原价合计
+					item.cartList.forEach(pros => {
+						prosPrice += pros.price * pros.number
+						totalOriginalPrice += pros.price * pros.number
+					})
+					if (item.promotions.discount == 1) {
+						// 支持促销叠加条件的店铺满减 执行
+						prosDiscountNum = parseInt(prosPrice / item.promotions.touchPrice) // 店铺满减促销叠加次数 = 店铺合计价格/满减促销价格
+						console.log('店铺满减促销叠加通道叠加次数', `${prosDiscountNum}次`)
+						if (prosPrice >= item.promotions.touchPrice) {
+							// 满足店铺满减条件下执行
+							item.totalPrice = prosPrice - item.promotions.reducedPrice * prosDiscountNum
+							item.reducedPrice = item.promotions.reducedPrice * prosDiscountNum
+							item.totalOriginalPrice = totalOriginalPrice
+						} else {
+							item.reducedPrice = 0 //统计合计价格
+							item.totalPrice = prosPrice
+						}
+					} else {
+						console.log('店铺满减非促销叠加通道')
+						if (prosPrice >= item.promotions.touchPrice) {
+							// 满足店铺满减条件下执行
+							item.totalPrice = prosPrice - item.promotions.reducedPrice
+							item.reducedPrice = item.promotions.reducedPrice
+							item.totalOriginalPrice = totalOriginalPrice
+						} else {
+							item.reducedPrice = 0 //统计合计价格
+							item.totalPrice = prosPrice
+						}
+					}
+				} else {
+					//以下为计算除店铺满减以外的单品满减以及正常商品合计
+					let _totalPrice = 0
+					let _reducedPrice = 0
+					let discountNum = 0
+					let _totalOriginalPrice = 0
+					item.cartList.forEach(pros => {
+						let _price = pros.price * pros.number
+						_totalOriginalPrice += pros.price * pros.number
+						if (pros.promotions && pros.promotions.type != 2 && pros.promotions.mode == 2) {
+							if (pros.promotions.discount == 1) {
+								discountNum = parseInt(_price / pros.promotions.touchPrice)
+								console.log('单品满减促销叠加通道叠加次数', `${discountNum}次`)
+								if (_price >= pros.promotions.touchPrice) {
+									_price = _price - pros.promotions.reducedPrice * discountNum
+									_reducedPrice += pros.promotions.reducedPrice * discountNum
+								}
+								_totalPrice += _price
+							} else {
+								console.log('单品满减非促销叠加通道')
+								if (_price >= pros.promotions.touchPrice) {
+									_price = _price - pros.promotions.reducedPrice
+									_reducedPrice += pros.promotions.reducedPrice
+								}
+								_totalPrice += _price
+							}
+						} else {
+							_reducedPrice = 0
+							_totalPrice += pros.price * pros.number
+						}
+					})
+					item.reducedPrice = _reducedPrice
+					item.totalOriginalPrice = _totalOriginalPrice
+					item.totalPrice = _totalPrice
+				}
+			})
+		},
+		totalPeice() {
+			//计算总价格,每次调用此方法,将初始值为0,遍历价格并累加
+			let totalPrice = 0
+			let reducedPrice = 0
+			let originalPrice = 0
+			this.goodsList.forEach((item, index) => {
+				let supplierPrice = 0
+				let supplierReducedPrice = 0
+				item.totalprice = 0
+				item.reducedprice = 0
+				item.originalprice = 0
+				item.cartList.forEach(pros => {
+					if (pros.isChecked) {
+						this.isCheckedProductStatus = true
+						supplierPrice += pros.price * pros.number
+						// 单品满减
+						if (pros.promotions && pros.promotions.type * 1 === 1 && pros.promotions.mode * 1 === 2) {
+							// 单品满减-重新计算供应商总价/满减金额
+							let _price = pros.price * pros.number
+							if (pros.promotions.discount == 1) {
+								let discountNum = parseInt(_price / pros.promotions.touchPrice)
+								console.log('单品满减促销叠加通道叠加次数', `${discountNum}次`)
+								// 单品满减-重新计算供应商总价/满减金额
+								if (_price >= pros.promotions.touchPrice) {
+									supplierPrice -= pros.promotions.reducedPrice * discountNum
+									supplierReducedPrice += pros.promotions.reducedPrice * discountNum
+								}
+							} else {
+								console.log('非促销叠加通道')
+								// 单品满减-重新计算供应商总价/满减金额
+								if (_price >= pros.promotions.touchPrice) {
+									supplierPrice -= pros.promotions.reducedPrice
+									supplierReducedPrice += pros.promotions.reducedPrice
+								}
+							}
+						}
+					}
+				})
+				// 店铺满减
+				if (item.promotions && item.promotions.mode * 1 === 2) {
+					// 店铺满减-计算供应商总价/满减金额
+					if (item.promotions.discount == 1) {
+						// 支持促销叠加条件的店铺满减 执行
+						let prosDiscountNum = parseInt(supplierPrice / item.promotions.touchPrice) // 店铺满减促销叠加次数 = 店铺合计价格/满减促销价格
+						console.log('店铺满减促销叠加通道叠加次数', `${prosDiscountNum}次`)
+						if (supplierPrice >= item.promotions.touchPrice) {
+							supplierPrice -= item.promotions.reducedPrice * prosDiscountNum
+							supplierReducedPrice += item.promotions.reducedPrice * prosDiscountNum
+						}
+					} else {
+						console.log('店铺满减非促销叠加通道')
+						// 店铺满减-计算供应商总价/满减金额
+						if (supplierPrice >= item.promotions.touchPrice) {
+							supplierPrice -= item.promotions.reducedPrice
+							supplierReducedPrice += item.promotions.reducedPrice
+						}
+					}
+				}
+				item.totalprice = supplierPrice
+				item.reducedprice = supplierReducedPrice
+				item.originalprice = supplierPrice + supplierReducedPrice
+				totalPrice += item.totalprice
+				reducedPrice += item.reducedprice
+				originalPrice += item.originalprice
+				console.log('totalPrice', totalPrice)
+				console.log('originalPrice', originalPrice)
+			})
+			if (this.isCheckedProductStatus) {
+				// 总促销计算
+				this.promotionsList.forEach(promotions => {
+					// 凑单满减
+					if (promotions.mode === 2 && promotions.type === 2) {
+						let collecTotal = 0
+						let collecDiscountNum = 0
+						promotions.productList.forEach(pros => {
+							collecTotal += this.collecTotalPrice(pros)
+						})
+						if (promotions.discount == 1) {
+							// 支持凑单满减促销叠加条件的执行
+							collecDiscountNum += parseInt(collecTotal / promotions.touchPrice) // 凑单满减促销叠加次数 = 凑单商品合计价格/凑单满减促销价格
+							console.log('凑单促销满减叠加通道叠加次数', `${collecDiscountNum}次`)
+							if (collecTotal >= promotions.touchPrice) {
+								totalPrice -= promotions.reducedPrice * collecDiscountNum
+								reducedPrice += promotions.reducedPrice * collecDiscountNum
+							}
+						} else {
+							console.log('凑单促销满减非叠加通道')
+							if (collecTotal >= promotions.touchPrice) {
+								totalPrice -= promotions.reducedPrice
+								reducedPrice += promotions.reducedPrice
+							}
+						}
+					}
+				})
+				//最后统计商品原价
+				this.totalOriginalPrice = originalPrice
+				//最后满减金额 = 店铺减去金额 + 单品减去金额 + 凑单减去金额
+				this.reducedPrice = reducedPrice
+				//最终合计价格 = 	店铺满减合计 + 单品满减  + 正常合计 + 凑单满减
+				this.allPrice = totalPrice
+			}
+		},
+		collecTotalPrice(pros) {
+			// 凑单满减计算勾选的凑单商品总价
+			let price
+			this.checkenProsList.find(el => {
+				if (pros.productId == el.productId) {
+					price = el.number * el.price
+				}
+			})
+			return price
+		},
+		totalCount() {
+			//计算总数量
+			this.allCount = 0
+			let prosAllCount = 0
+			let validCount = 0
+			let validList = []
+			let productsList = []
+			this.goodsList.forEach(item => {
+				productsList = item.cartList
+				productsList.forEach(pros => {
+					if (pros.isChecked) {
+						prosAllCount += parseInt(pros.number)
+						this.allCount = prosAllCount
+					}
+				})
+			})
+		},
+		changeCountAdd(item, pros) {
+			//商品数量加加
+			if (pros.step === 2) {
+				pros.isStep = false
+				pros.number += pros.min
+				this.processActivityPrice(pros)
+				this.isStock = false
+			} else {
+				pros.number++
+				this.processActivityPrice(pros)
+				this.isStock = false
+			}
+			this.updateShoppogNum(pros)
+			this.totalShopPeice()
+		},
+		changeCountSub(item, pros) {
+			//商品数量减减
+			if (pros.number <= pros.min) {
+				pros.number = pros.min
+				this.$util.msg(`该商品最小起订量为${pros.min}`, 2000)
+				return
+			} else {
+				if (pros.step === 2) {
+					pros.isStep = false
+					pros.number -= pros.min
+				} else {
+					pros.number--
+				}
+				this.processActivityPrice(pros)
+			}
+			this.updateShoppogNum(pros)
+			this.totalShopPeice()
+		},
+		changeNnmber(e, item, pros) {
+			//输入商品数量更新
+			let _value = e.detail.value
+			if (!this.$api.isNumber(_value)) {
+				pros.number = pros.min
+			} else if (_value < pros.min) {
+				this.$util.msg(`该商品最小起订量为${pros.min}`, 2000)
+				pros.number = pros.min
+			} else if (_value % pros.min != 0) {
+				pros.isStep = true
+				pros.number = pros.min
+			} else {
+				pros.isStep = false
+				pros.number = e.detail.value
+				this.processActivityPrice(pros)
+			}
+			this.updateShoppogNum(pros)
+			this.totalShopPeice()
+		},
+		processActivityPrice(pros) {
+			//单独处理活动价格和阶梯价格
+			let ladderPriceList = pros.ladderPrices
+			if (pros.ladderFlag == 0 || pros.actStatus == 1) {
+				pros.price = pros.price
+			} else {
+				ladderPriceList.forEach((item, index) => {
+					if (pros.number >= item.buyNum) {
+						pros.price = item.buyPrice
+					}
+				})
+			}
+		},
+		setCartisDisable(){// 删除取消设置不能选的商品
+			this.goodsList = this.goodsList.map(suppler=>{
+				suppler.isDisable = false
+				suppler.cartList.forEach(pros => {
+					pros.isDisable = false
+				})
+				return suppler
+			})
+		},
+		clearCartisDisable(){// 取消删除设置不能选的商品
+			this.goodsList = this.goodsList.map((supplier) => {
+				supplier.cartList.forEach(pros => {
+					if(pros.stock === 0 || pros.number > pros.stock ){
+					    supplier.isDisable = true
+					    pros.isDisable = true
+					}else{
+					    pros.isDisable = false
+					}
+				})
+				return supplier
+			})
+		},
+		showDelManager() {
+			//显示删除商品管理
+			this.isshowDelbtn = true
+			this.setCartisDisable()
+			if (this.isCheckAll) {
+				this.updateBothCheckBtn()
+			} else {
+				this.updateCheckAllBtn()
+			}
+		},
+		hideDelManage() {
+			//隐藏删除商品管理
+			this.isshowDelbtn = false
+			this.isCheckAll = false
+			this.clearCartisDisable()
+			this.goodsList = this.goodsList.map(suppler=>{
+				suppler.isChecked = false
+				suppler.cartList.forEach(pros => {
+						pros.isChecked = false
+				})
+				return suppler
+			})
+		},
+		goNavto(url) {
+			uni.navigateTo({
+				url
+			})
+		},
+		PromotionsFormat(promo) {
+			//促销活动类型数据处理
+			if (promo != null) {
+				if (promo.type == 1 && promo.mode == 1) {
+					return true
+				} else {
+					return false
+				}
+			}
+			return false
+		},
+		navToListPage(id) {
+			this.isModallayer = true
+			this.$api.navigateTo(`/pages/goods/product?id=${id}`)
+		},
+		isShowVipFlag(pros) {
+			if (pros.priceFlag != 1) {
+				if (this.userIdentity == 4 && this.vipFlag == 1) {
+					return true
+				} else if (this.userIdentity == 2) {
+					return true
+				}
+			}
+		},
+		handleShouUnitPopup(pros) {
+			// 规格弹窗
+			this.popupShow = true
+			this.handlePros = pros
+		}
+	},
+	onReachBottom() {
+		if (this.hasNextPage) {
+			this.loadding = true
+			this.pullUpOn = true
+			this.getOnReachBottomData()
+		}
+	},
+	onPullDownRefresh() {
+		//下拉刷新
+		this.initGetCartGoodsList()
+		uni.stopPullDownRefresh()
+	},
+	onShow() {
+		this.initGetStotage()
+	}
+}
+</script>
+
+<style lang="scss">
+page {
+	background: #f7f7f7;
+}
+.cart-content {
+	position: relative;
+	padding-bottom: 100rpx;
+}
+.container-cart-main.none {
+	display: none;
+}
+.container-cart-main.show {
+	display: block;
+}
+.cart-content.empty.none {
+	display: none;
+}
+.cart-content.empty.show {
+	display: block;
+}
+.container-cart.show {
+	display: block;
+}
+.container-cart.none {
+	display: none;
+}
+.empty-container.none {
+	display: none;
+}
+.empty-container.show {
+	display: flex;
+}
+.foot-check-delbtn {
+	width: 100%;
+	height: 80rpx;
+	position: fixed;
+	top: 0;
+	left: 0;
+	box-sizing: border-box;
+	padding: 15rpx 24rpx;
+	background-color: #f7f7f7;
+	z-index: 990;
+	.foot-text {
+		font-size: $font-size-26;
+		height: 50rpx;
+		line-height: 50rpx;
+		color: #666666;
+		float: left;
+		padding-left: 10rpx;
+		text {
+			// color: $color-system;
+			margin: 0 6rpx;
+		}
+	}
+	.delBtn {
+		width: 100rpx;
+		display: inline-block;
+		padding: 0 15rpx;
+		font-size: $font-size-26;
+		height: 50rpx;
+		line-height: 50rpx;
+		border-radius: 30rpx;
+		background: #ffffff;
+		border: 1px solid #FF5B00;
+		color: $color-system;
+		float: right;
+		text-align: center;
+		&.none {
+			display: none;
+		}
+	}
+}
+.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;
+		padding: 5rpx;
+		&.icon-weixuanze {
+			color: #b2b2b2;
+		}
+	}
+	&.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;
+		line-height: 80rpx;
+		.checkbox-box {
+			padding: 10rpx;
+		}
+		.text {
+			width: 450rpx;
+			display: block;
+			overflow: hidden;
+			text-overflow: ellipsis;
+			white-space: nowrap;
+			margin-left: 20rpx;
+			font-size: $font-size-28;
+			color: $text-color;
+			text-align: left;
+			font-weight: bold;
+		}
+		.floor-item-act {
+			height: 56rpx;
+			text-align: center;
+			box-sizing: border-box;
+			float: left;
+			padding: 10rpx 0;
+			margin-left: 20rpx;
+			.floor-tags {
+				height: 28rpx;
+				border-radius: 6rpx;
+				background-color: #ffffff;
+				line-height: 28rpx;
+				color: $color-system;
+				text-align: center;
+				display: inline-block;
+				padding: 0 6rpx;
+				font-size: $font-size-20;
+				border: 1px solid #FF5B00;
+				float: right;
+			}
+		}
+	}
+	.goods-pros {
+		width: 100%;
+		height: auto;
+	}
+	.goods-pros-t {
+		display: flex;
+		align-items: center;
+		width: 100%;
+		height: auto;
+		padding: 0 0 20rpx 0;
+		.checkbox-box {
+			padding: 10rpx;
+		}
+		.pros-img {
+			width: 210rpx;
+			height: 210rpx;
+			border-radius: 10rpx;
+			margin: 0 20rpx;
+			border: 1px solid #f3f3f3;
+			position: relative;
+			image {
+				width: 210rpx;
+				height: 210rpx;
+				border-radius: 10rpx;
+			}
+			.pros-type {
+				width: 64rpx;
+				height: 64rpx;
+				text-align: justify;
+				box-sizing: border-box;
+				padding: 10rpx;
+				border-radius: 0 0 8rpx 8rpx;
+				background-color: #33ccbf;
+				font-size: $font-size-22;
+				color: #ffffff;
+				line-height: 25rpx;
+				position: absolute;
+				top: 0;
+				right: 10rpx;
+			}
+		}
+	}
+	.goods-pros-b {
+		width: 100%;
+		height: auto;
+		padding: 0 0 24rpx 0;
+		box-sizing: border-box;
+		&.show {
+			display: block;
+		}
+		&.none {
+			display: none;
+		}
+		.sum-none {
+			width: 100%;
+			height: 48rpx;
+			line-height: 48rpx;
+			color: $text-color;
+			float: left;
+			text-align: right;
+			.money {
+				font-size: $font-size-26;
+				color: #999999;
+				text-decoration: line-through;
+			}
+			.money-sign {
+				font-size: $font-size-26;
+				color: #999999;
+				text-decoration: line-through;
+			}
+			.money-reduced {
+				margin-left: 10rpx;
+				font-size: $font-size-26;
+				color: $color-system;
+				.iconfont {
+					font-size: $font-size-34;
+				}
+			}
+		}
+		.sum {
+			width: 100%;
+			height: 40rpx;
+			font-size: $font-size-28;
+			line-height: 40rpx;
+			color: $text-color;
+			float: left;
+			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;
+			text-overflow: ellipsis;
+			display: -webkit-box;
+			word-break: break-all;
+			-webkit-box-orient: vertical;
+			-webkit-line-clamp: 2;
+			overflow: hidden;
+			margin-top: 10rpx;
+		}
+		.productCode {
+			color: #666666;
+		}
+		.cart-sku-temp {
+			width: 100%;
+			height: 48rpx;
+			margin: 30rpx 0 0 0;
+			.cart-sku-text {
+				font-size: 28rpx;
+				line-height: 48rpx;
+				color: #666666;
+				float: left;
+			}
+			.cart-sku-btn {
+				padding: 0 16rpx;
+				text-align: center;
+				line-height: 40rpx;
+				font-size: 24rpx;
+				box-sizing: border-box;
+				border: 1px solid #FF5B00;
+				color: #FF5B00;
+				float: left;
+				border-radius: 20rpx;
+				margin-left: 16rpx;
+			}
+		}
+		.productprice {
+			width: 100%;
+			height: 48rpx;
+			margin: 10rpx 0 0 0;
+			.price {
+				line-height: 48rpx;
+				font-size: $font-size-28;
+				width: 48%;
+				color: #ff2a2a;
+				float: left;
+				&.disabled {
+					color: #999999;
+					text-decoration: line-through;
+				}
+				.money-sign {
+					font-size: $font-size-24;
+					color: #ff2a2a;
+				}
+			}
+			.count {
+				height: 100%;
+				float: right;
+				position: relative;
+				&.show {
+					display: block;
+				}
+				&.none {
+					display: none;
+				}
+				.count-tips {
+					width: auto;
+					display: inline-block;
+					padding: 0 15rpx;
+					line-height: 44rpx;
+					height: 44rpx;
+					border-radius: 22rpx;
+					background: $btn-confirm;
+					font-size: $font-size-24;
+					text-align: center;
+					color: #ffffff;
+					position: absolute;
+					top: -60rpx;
+					left: -5rpx;
+					z-index: 5;
+					&.step {
+						left: -217rpx;
+					}
+					&::before {
+						content: '';
+						position: absolute;
+						bottom: -30rpx;
+						right: 15rpx;
+						z-index: 1;
+						width: 0;
+						height: 0;
+						border-width: 18rpx;
+						border-style: solid;
+						border-color: $color-system transparent transparent transparent;
+					}
+				}
+				.number-box {
+					display: flex;
+					justify-content: center;
+					align-items: center;
+					border: 2rpx solid #ffe6dc;
+					border-radius: 30rpx;
+					height: 48rpx;
+					.iconfont {
+						font-size: $font-size-24;
+						padding: 0 18rpx;
+						color: #999999;
+						text-align: center;
+						line-height: 48rpx;
+						font-weight: bold;
+						background: #fef6f3;
+						&.icon-jianhao {
+							border-radius: 30rpx 0 0 30rpx;
+						}
+						&.icon-jiahao {
+							border-radius: 0 30rpx 30rpx 0;
+						}
+					}
+					.btn-input {
+						width: 62rpx;
+						height: 44rpx;
+						line-height: 44rpx;
+						border-radius: 4rpx;
+						text-align: center;
+						font-size: $font-size-24;
+						border-bottom: 2rpx solid #ffe6dc;
+						border-top: 2rpx solid #ffe6dc;
+					}
+				}
+				.uni-numbox {
+					position: absolute;
+					left: 45rpx;
+					bottom: 0;
+					.uni-numbox-minus,
+					.uni-numbox-plus {
+						width: 50rpx;
+						line-height: 40rpx;
+					}
+					.uni-numbox-value {
+						font-size: $font-size-28;
+						width: 60rpx;
+					}
+				}
+			}
+		}
+		.floor-item-act {
+			width: 100%;
+			height: 56rpx;
+			text-align: center;
+			box-sizing: border-box;
+			float: left;
+			padding: 0 0 10rpx 0;
+			margin-left: 10rpx;
+		}
+	}
+}
+.footer {
+	width: 100%;
+	background-color: #ffffff;
+	height: 110rpx;
+	position: fixed;
+	bottom: 0rpx;
+	z-index: 100;
+	.footer-le {
+		width: 510rpx;
+		height: 100%;
+		padding: 0 24rpx;
+		float: left;
+		.foot-check {
+			width: 100rpx;
+			float: left;
+			line-height: 110rpx;
+			font-size: $font-size-24;
+			.checkbox {
+				width: 40rpx;
+				text-align: center;
+			}
+			.text {
+				width: 60rpx;
+				float: right;
+			}
+		}
+		.sum {
+			width: 380rpx;
+			height: 110rpx;
+			float: right;
+			box-sizing: border-box;
+			padding: 10rpx;
+			.sum-none {
+				width: 100%;
+				height: 45rpx;
+				line-height: 45rpx;
+				color: $text-color;
+				float: left;
+				text-align: right;
+				.money {
+					font-size: $font-size-24;
+					color: #999999;
+					text-decoration: line-through;
+				}
+				.money-sign {
+					font-size: $font-size-24;
+					color: #999999;
+					text-decoration: line-through;
+				}
+				.money-reduced {
+					margin-left: 10rpx;
+					font-size: $font-size-24;
+					color: $color-system;
+				}
+			}
+			.sum-price {
+				text-align: right;
+				width: 100%;
+				height: 45rpx;
+				line-height: 45rpx;
+				font-size: $font-size-30;
+				color: $text-color;
+				float: left;
+				font-weight: normal;
+				&.none {
+					height: 90rpx;
+					line-height: 90rpx;
+				}
+				.money {
+					color: #ff2a2a;
+				}
+				.money-sign {
+					font-size: $font-size-24;
+					color: #ff2a2a;
+				}
+			}
+		}
+	}
+	.footer-ri {
+		width: 180rpx;
+		height: 84rpx;
+		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;
+		border-radius: 49rpx;
+		margin-top: 15rpx;
+		margin-right: 10rpx;
+		&.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);
+			}
+		}
+	}
+}
+.failure-list {
+	width: 702rpx;
+	height: auto;
+	padding: 0 24rpx;
+	margin-top: 20rpx;
+	background: #ffffff;
+	.failure-title {
+		width: 100%;
+		height: 82rpx;
+		line-height: 82rpx;
+		font-size: $font-size-28;
+		.title-txt {
+			float: left;
+			color: #666666;
+			text-align: left;
+		}
+		.title-btn {
+			float: right;
+			color: $color-system;
+			text-align: right;
+			line-height: 80rpx;
+			.butto {
+				display: inline-block;
+				padding: 0 15rpx;
+				font-size: $font-size-26;
+				height: 50rpx;
+				line-height: 50rpx;
+				border-radius: 30rpx;
+				background: #ffffff;
+				// border: 1px solid #C9C9C9;
+				// color: #999999;
+				margin-top: 15rpx;
+			}
+		}
+	}
+	.productlist {
+		padding-top: 10rpx;
+		.goods-pros {
+			width: 100%;
+			height: auto;
+			padding: 20rpx 0;
+		}
+		.goods-pros-t {
+			display: flex;
+			align-items: center;
+			width: 100%;
+			height: 210rpx;
+			position: relative;
+			.img-tip {
+				display: block;
+				width: 72rpx;
+				height: 36rpx;
+				line-height: 36rpx;
+				font-size: $font-size-24;
+				text-align: center;
+				color: #ffffff;
+				border-radius: 24rpx;
+				background: rgba(51, 51, 51, 0.3);
+				// position: absolute;
+				// left: 0;
+				// top: 0;
+			}
+			.checkbox-box {
+				padding: 10rpx;
+			}
+			.pros-img {
+				width: 180rpx;
+				height: 100%;
+				border-radius: 10rpx;
+				margin: 0 20rpx;
+				border: 1px solid #f3f3f3;
+				position: relative;
+				image {
+					width: 100%;
+					height: 100%;
+					border-radius: 10rpx;
+				}
+			}
+			.pros-marks {
+				width: 750rpx;
+				height: 250rpx;
+				z-index: 90;
+				background: rgba(0, 0, 0, 0.05);
+				position: absolute;
+				left: -20rpx;
+				top: -20rpx;
+			}
+		}
+		.goods-pros-b {
+			width: 622rpx;
+			margin-left: 84rpx;
+			height: 40rpx;
+			padding: 0 0 26rpx 0;
+			// border-top: 1px solid #EBEBEB;
+			&.show {
+				display: block;
+			}
+			&.none {
+				display: none;
+			}
+			.sum {
+				font-size: $font-size-28;
+				line-height: 40rpx;
+				color: $text-color;
+				display: flex;
+				justify-content: flex-end;
+				.money {
+					color: #ff2a2a;
+					font-size: $font-size-28;
+				}
+				.money-sign {
+					font-size: $font-size-24;
+					color: #ff2a2a;
+				}
+			}
+		}
+		.pros-product {
+			width: 402rpx;
+			height: 100%;
+			line-height: 36rpx;
+			font-size: $font-size-28;
+			position: relative;
+			.producttitle {
+				width: 100%;
+				display: inline-block;
+				height: auto;
+				text-overflow: ellipsis;
+				display: -webkit-box;
+				word-break: break-all;
+				-webkit-box-orient: vertical;
+				-webkit-line-clamp: 2;
+				overflow: hidden;
+				margin-bottom: 8rpx;
+				.no-text {
+					display: inline-block;
+					height: 36rpx;
+					padding: 0 12rpx;
+					line-height: 36rpx;
+					background: linear-gradient(315deg, rgba(231, 0, 0, 1) 0%, rgba(255, 104, 1, 1) 100%);
+					border-radius: 18rpx;
+					text-align: center;
+					color: #ffffff;
+					font-size: $font-size-28;
+					margin-right: 24rpx;
+				}
+			}
+			.productspec {
+				height: 36rpx;
+				color: #999999;
+				font-size: $font-size-26;
+				margin-top: 20rpx;
+			}
+			.productstate {
+				font-size: $font-size-28;
+				height: 44rpx;
+				color: #ff2a2a;
+				position: absolute;
+				bottom: 0;
+				left: 0;
+			}
+		}
+	}
+}
+</style>

+ 125 - 0
pages/seller/cart/mixins/apisMixins.js

@@ -0,0 +1,125 @@
+import Vue from 'vue'
+const apisMixins = {
+    methods: {
+        // 购物车修改SKU规格
+        async apiUserClubCheckSku(params) {
+            try {
+                await this.ProductService.ShoppingCheckSku(params)
+                setTimeout(() => {
+                    this.initGetCartGoodsList()
+                }, 1500)
+            } catch (error) {
+                console.log('error', error)
+            }
+        },
+        //调用购买优惠券
+        async apiWeChatCouponRecord(params, coupon) {
+            try {
+                const res = await this.PayService.WeChatCouponRecord(params)
+                this.MiniWxPayFor(coupon, res.data.couponRecordId)
+                setTimeout(() => {
+                    this.initGetCartGoodsList()
+                }, 1500)
+            } catch (error) {
+                if (error.code == -1) {
+                    //个人机构不能购买
+                    this.contentModalText = '该优惠券仅限医美机构购买,请升级为医美机构后再次购买。'
+                    this.modal = true
+                } else if (error.code == -2) {
+                    //会员机构不是医美机构不能购买
+                    this.$util.msg('该优惠券仅限医美机构购买', 2000)
+                }
+            }
+        },
+        async MiniWxPayFor(coupon, couponRecordId) {
+            // 微信支付
+            const wechatcode = await authorize.getCode('weixin')
+            const params = {
+                userId: this.userId,
+                couponId: coupon.couponId,
+                couponRecordId: couponRecordId,
+                payType: 'XCX',
+                code: wechatcode,
+                source: 1 //支付来源 1 小程序 2 WWW
+            }
+            this.weChatMiniCouponWxPay(
+                params,
+                'Um_Event_cartCouponPay',
+                '机构购物车',
+                '线上支付优惠券',
+                coupon.couponId,
+                this.userId
+            )
+        },
+        //调用采美豆抵扣优惠券
+        async apiWeChatPayCouponBeans(params) {
+            try {
+                await this.PayService.WeChatPayCouponBeans(params)
+                this.$util.msg('抵扣成功', 1500)
+                setTimeout(() => {
+                    this.currentTab = 1
+                    this.couponParam.status = 2
+                    this.queryPopupCoupons()
+                }, 1500)
+            } catch (error) {
+                this.$util.msg(error.msg, 2000)
+            }
+        },
+        //领取优惠券
+        async apiReceiveCoupon(params) {
+            try {
+                await this.ProductService.ReceiveCoupon(params)
+                this.$util.msg('领取成功', 1500, true, 'success')
+                setTimeout(() => {
+                    this.currentTab = 1
+                    this.couponParam.status = 2
+                    this.queryPopupCoupons()
+                }, 1500)
+            } catch (error) {
+                this.$util.msg(error.msg, 2000)
+            }
+        },
+        // 获取弹窗优惠券列表
+        async apiShoppingCartGetCoupon(params) {
+            try {
+                const res = await this.ProductService.ShoppingCartGetCoupon(params)
+                let data = res.data
+                this.navbar[0].num = data.notCouponNum
+                this.navbar[1].num = data.couponNum
+                if (data.couponList && data.couponList.length > 0) {
+                    this.productCouponList = data.couponList
+                    this.isCouponEmpty = false
+                } else {
+                    this.isCouponEmpty = true
+                }
+            } catch (error) {
+                
+            }
+        },
+        //更新购物车商品
+        async apiShoppingCartUpdate(params) {
+            try{
+                await this.ProductService.ShoppingCartUpdate(params)
+                this.isshowDelbtn = false
+            }catch(error){
+			   console.log('更新购物车商品数量失败')
+            }
+        },
+		 // 删除购物车商品
+        async shoppingCartDelete(params) {
+            try{
+            	await this.ProductService.ShoppingCartDelete(params)
+                this.$util.msg('删除成功', 2000)
+                setTimeout(() => {
+				    this.isshowDelbtn = false
+				    this.initGetCartGoodsList()
+                }, 2000)
+            }catch(error){
+            	console.log('购物车删除失败')
+            }
+
+        }
+    }
+}
+
+export default apisMixins

+ 94 - 0
pages/seller/cart/mixins/cartMixins.js

@@ -0,0 +1,94 @@
+// 统计数据
+// 统计类型 1:首页banner;2:直播模块;3:最新活动;4:热门文章;5:新品橱窗;6:活动列表
+import Vue from 'vue'
+const cartMixins = {
+    data() {
+        return {
+            delSkuIds:''
+        }
+    },
+    methods: {
+        hanldlerToConfirm() {
+            //跳转确认订单页面
+            let skuIds = ''
+            this.isNoConfim = false
+            this.goodsList.forEach(supper => {
+                supper.cartList.forEach(pros => {
+                    if (pros.isChecked) {
+                        // 获取勾选的商品ID拼接字符串逗号隔开,最后一个逗号去掉
+                        skuIds += pros.skuId + ','
+                        // 有商品的购买量没达到最小起订量
+                        if (pros.number < pros.min) {
+                            this.isNoConfim = true
+                        }
+                    }
+                })
+            })
+            if (skuIds === '') {
+                this.$util.msg('请先选择结算商品~', 2000)
+                return
+            }
+            if (this.isNoConfim) {
+                this.$util.modal(
+                    '',
+                    '有商品的购买量没达到最小起订量,请修改数量后再次提交结算',
+                    '去修改',
+                    '',
+                    false,
+                    () => {}
+                )
+                return
+            }
+            // 友盟埋点购物车去结算点击事件
+            let cartSkuIds = { skuIds: skuIds.substring(0, skuIds.lastIndexOf(',')) }
+            console.log('cartSkuIds',cartSkuIds)
+            this.$api.navigateTo(
+                `/pages/user/order/create-order?type=2&data=${JSON.stringify({ data: cartSkuIds })}`
+            )
+        },
+        handleBtnConfirm(data) {
+            console.log('data', data)
+            // 确认重选规格调用 apisMixins -> apiQueryShoppingCartList
+            this.apiUserClubCheckSku(data)
+        },
+        updateShoppogNum(pros) {
+            const params = {
+                userId: this.userId,
+                skuId: pros.skuId,
+                productCount: pros.number,
+                source: 2
+            }
+            // 更新购物车调用 apisMixins -> apiQueryShoppingCartList
+            this.apiShoppingCartUpdate(params)
+        },
+        handleDeleteCart() { //删除购物车商品
+            this.goodsList.forEach(delitem => {
+                delitem.cartList.forEach(pros => {
+                    if (pros.isChecked) {
+                        this.delSkuIds += pros.skuId + ','
+                    }
+                })
+            })
+            this.failureList.forEach(failure => {
+                if (failure.isChecked) {
+                    this.delSkuIds += failure.skuId + ','
+                }
+            })
+            if (this.delSkuIds.length === 0) {
+                this.$util.msg('请选择要删除的商品~', 2000)
+                return
+            }
+            this.modal = true
+            this.contentModalText = '确定删除选中的商品吗?'
+        },
+        handleDeletefailures() { // 一键清楚所有失效商品
+            this.failureList.forEach(failure => {
+                this.delSkuIds += failure.skuId + ','
+            })
+            this.modal = true
+            this.contentModalText = '确定清空全部失效商品吗?'
+        }
+    }
+}
+
+export default cartMixins

+ 560 - 0
pages/seller/club/club-list.vue

@@ -0,0 +1,560 @@
+<template>
+	<view class="container club clearfix">
+		<view class="club-search clearfix">
+			<view class="search-from name">
+				<text class="iconfont icon-iconfonticonfontsousuo1"></text>
+				<input
+					class="input"
+					type="text"
+					confirm-type="search"
+					v-model="listQuery.name"
+					@input="onShowClose"
+					@confirm="GetSellerClubList()"
+					placeholder="机构名称/联系人"
+					maxlength="12"
+				/>
+				<text class="iconfont icon-shanchu1" v-if="isShowClose" @click="delInputText()"></text>
+			</view>
+			<view class="search-btn">
+				<button class="search-btn" type="default" @click.stop="searchClubList">搜索</button>
+			</view>
+		</view>
+		<view class="club-main">
+			<view v-if="isEmpty" class="empty-container">
+				<image
+					class="club-empty-image"
+					src="https://img.caimei365.com/group1/M00/03/71/Cmis2F3wna6AY2ZjAABpmnBICH4247.png"
+					mode="aspectFit"
+				></image>
+				<view class="txt">暂无机构数据</view>
+			</view>
+			<view v-else class="club-list">
+				<scroll-view scroll-y="true">
+					<view class="list" v-for="(club, index) in clubList" :key="index">
+						<view class="club-list-top">
+							<view class="list-left">
+								<view class="list-head"
+									><image
+										:src="
+											club.headpic
+												? club.headpic
+												: 'https://static.caimei365.com/app/img/icon/icon-club@3x.png'
+										"
+										mode=""
+									></image
+								></view>
+							</view>
+							<view class="list-item">
+								<view class="list-title">
+									<text class="list-name"> {{ club.name }} </text>
+									<text class="tags" v-if="club.vipFlag == 0 && club.userIdentity === 2">VIP</text>
+									<text class="tags sv" v-if="club.vipFlag == 1">SVIP</text>
+									<text class="list-hist" @click.stop="handleClickOper(5, club)"
+										><text class="iconfont icon-dingdanliebiao"></text>订单列表</text
+									>
+								</view>
+								<view class="list-opea">
+									<text
+										class="tags sm"
+										@click.stop="
+											this.$api.navigateTo('/pages/service/service?id=1041&title=标签说明')
+										"
+										>{{ club.activeState }} <text class="iconfont icon-xiayibu"></text
+									></text>
+									<text
+										class="tags sm"
+										@click.stop="
+											this.$api.navigateTo('/pages/service/service?id=1041&title=标签说明')
+										"
+										>{{ club.customerValue }} <text class="iconfont icon-xiayibu"></text
+									></text>
+								</view>
+							</view>
+						</view>
+						<view class="club-list-bot">
+							<view class="btn" @click.stop="handleClickOper(1, club)">
+								<text class="iconfont icon-lijixiadan"></text> 立即下单</view
+							>
+							<view class="btn" @click.stop="handleClickOper(2, club)">
+								<text class="iconfont icon-ershouxiadan"></text> 二手下单</view
+							>
+							<view class="btn" @click.stop="handleClickOper(4, club)">
+								<text class="iconfont icon-chongzhixiadingjin"></text> 充值/下订金</view
+							>
+							<view class="btn" @click.stop="handleShowBubble(club, index)">
+								<text class="iconfont icon-gengduo2"></text>
+								<view class="btn-bubble" v-if="currentIndex === index && club.bubble">
+									<view class="btn-view border" @click.stop="handleClickOper(3, club)">
+										<text class="iconfont icon-zaicigoumai1"></text> 再次购买
+									</view>
+									<view class="btn-view" @click.stop="handleClickOper(6, club)">
+										<text class="iconfont icon-youhuiquan"></text> 购买优惠券
+									</view>
+								</view>
+							</view>
+						</view>
+					</view>
+					<!--加载loadding-->
+					<tui-loadmore :visible="loadding" :index="3" type="black"></tui-loadmore>
+					<tui-nomore :visible="!pullUpOn" :backgroundColor="'#ffffff'" :text="nomoreText"></tui-nomore>
+					<!--加载loadding-->
+				</scroll-view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+const defaultListQuery = {
+	userIdentity: '',
+	name: '',
+	pageNum: 1,
+	pageSize: 10,
+	spId: 0,
+	status: 66,
+	type: 1,
+	groupServiceId: 0
+}
+export default {
+	data() {
+		return {
+			isShowClose: false,
+			isEmpty: false,
+			nomoreText: '上拉显示更多',
+			hasNextPage: false,
+			loadding: false,
+			pullUpOn: true,
+			pullFlag: true,
+			scrollHeight: '',
+			currPage: '', //当前页面
+			prevPage: '', //上一个页面
+			clubList: [],
+			listQuery: Object.assign({}, defaultListQuery),
+			currentIndex: 0
+		}
+	},
+	onLoad() {},
+	methods: {
+		async initGetStotage() {
+			// 初始化
+			const userInfo = await this.$api.getStorage()
+			this.listQuery.spId = userInfo.serviceProviderId ? userInfo.serviceProviderId : 0
+			this.GetSellerClubList()
+		},
+		searchClubList() {
+			// 搜索
+			this.GetSellerClubList()
+		},
+		GetSellerClubList() {
+			this.listQuery.pageNum = 1
+			this.SellerService.GetSellerClubList(this.listQuery)
+				.then(response => {
+					let data = response.data
+					if (data.list && data.list.length > 0) {
+						this.isEmpty = false
+						this.hasNextPage = response.data.hasNextPage
+						this.clubList = data.list.map((el, index) => {
+							el.bubble = false
+							return el
+						})
+						this.pullFlag = false
+						setTimeout(() => {
+							this.pullFlag = true
+						}, 500)
+						if (this.hasNextPage) {
+							this.pullUpOn = false
+							this.nomoreText = '上拉显示更多'
+						} else {
+							this.pullUpOn = true
+							this.loadding = false
+							this.nomoreText = '已至底部'
+						}
+					} else {
+						this.isEmpty = true
+					}
+				})
+				.catch(error => {
+					this.$util.msg(error.msg, 2000)
+				})
+		},
+		getOnReachBottomData() {
+			this.listQuery.pageNum += 1
+			this.SellerService.GetSellerClubList(this.listQuery)
+				.then(response => {
+					let data = response.data
+					if (data.list && data.list.length > 0) {
+						this.hasNextPage = response.data.hasNextPage
+						this.clubList = this.clubList.concat(data.list)
+						this.clubList = this.clubList.map((el, index) => {
+							el.bubble = false
+							return el
+						})
+						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)
+				})
+		},
+		onShowClose() {
+			//输入框失去焦点时触发
+			if (this.listQuery.name != '') {
+				this.isShowClose = true
+			} else {
+				this.isShowClose = false
+			}
+		},
+		delInputText() {
+			//清除输入框内容
+			this.listQuery.name = ''
+			this.isShowClose = false
+		},
+		handleClickOper(type, club) {
+			const pathMap = {
+				1: '/pages/seller/cart/immediately',
+				2: '/pages/seller/cart/second',
+				3: '/pages/seller/cart/buyagain',
+				4: '/pages/seller/order/create-recharge-order',
+				5: '/pages/seller/order/order-historylist?listType=0',
+				6: '/pages/seller/cart/coupon'
+			}
+			this.$api.setStorage('orderUserInfo', club)
+			this.$api.navigateTo(pathMap[type])
+		},
+		handleShowBubble(club, index) {
+			this.currentIndex = index
+			club.bubble = !club.bubble
+		}
+	},
+	onReachBottom() {
+		if (this.hasNextPage) {
+			this.loadding = true
+			this.pullUpOn = true
+			this.getOnReachBottomData()
+		}
+	},
+	onShow() {
+		this.initGetStotage()
+	}
+}
+</script>
+
+<style lang="scss">
+page {
+	height: auto;
+}
+page,
+.container {
+	/* padding-bottom: 120upx; */
+	background: #f7f7f7;
+}
+.container {
+	position: relative;
+}
+.club-search {
+	height: 64rpx;
+	width: 702rpx;
+	padding: 24rpx;
+	background: #ffffff;
+	display: flex;
+	align-items: center;
+	position: fixed;
+	top: 0;
+	left: 0;
+	z-index: 999;
+	.search-from {
+		width: 582rpx;
+		height: 64rpx;
+		background: #f7f7f7;
+		border-radius: 32rpx;
+		float: left;
+		position: relative;
+		.icon-iconfonticonfontsousuo1 {
+			width: 64rpx;
+			height: 64rpx;
+			line-height: 64rpx;
+			text-align: center;
+			display: block;
+			font-size: $font-size-38;
+			float: left;
+			color: #999999;
+		}
+		.icon-shanchu1 {
+			font-size: $font-size-32;
+			color: #999999;
+			position: absolute;
+			width: 64rpx;
+			height: 64rpx;
+			line-height: 64rpx;
+			text-align: center;
+			top: 0;
+			right: 0;
+			z-index: 10;
+		}
+		.input {
+			width: 500rpx;
+			height: 64rpx;
+			float: left;
+			line-height: 64rpx;
+			color: $text-color;
+			font-size: $font-size-24;
+		}
+	}
+	.search-btn {
+		width: 120rpx;
+		line-height: 64rpx;
+		text-align: center;
+		font-size: $font-size-28;
+		color: $color-system;
+		float: left;
+		background: #ffffff;
+	}
+}
+.club-main {
+	padding-top: 122rpx;
+	.list {
+		align-items: center;
+		width: 702rpx;
+		height: auto;
+		padding: 24rpx;
+		background: #ffffff;
+		position: relative;
+		border-bottom: 1px solid #ebebeb;
+		float: left;
+		.club-list-top {
+			width: 100%;
+			height: 140rpx;
+			float: left;
+			display: flex;
+			align-items: center;
+			.list-left {
+				height: 140rpx;
+				flex: 2;
+				margin-right: 10rpx;
+				.list-head {
+					width: 140rpx;
+					height: 140rpx;
+					border-radius: 14rpx;
+					image {
+						width: 140rpx;
+						height: 140rpx;
+						border-radius: 14rpx;
+					}
+				}
+			}
+			.list-item {
+				height: 140rpx;
+				flex: 8;
+				display: flex;
+				flex-direction: column;
+				.list-title {
+					flex: 2;
+					line-height: 80rpx;
+					width: 100%;
+					font-size: $font-size-28;
+					color: $text-color;
+					padding-left: 11rpx;
+					flex-direction: row;
+					justify-content: flex-start;
+					.list-name {
+						min-width: 100rpx;
+						display: block;
+						float: left;
+						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;
+					}
+					.tags {
+						display: inline-block;
+						height: 36rpx;
+						padding: 0 15rpx;
+						border-radius: 8rpx;
+						background: #f0cb72;
+						font-size: $font-size-22;
+						color: #4e4539;
+						text-align: center;
+						line-height: 36rpx;
+						margin-left: 10rpx;
+						margin-right: 10rpx;
+						&.sv {
+							background: #333333;
+							color: #f0cb72;
+						}
+					}
+					.list-hist {
+						display: block;
+						float: right;
+						color: #1890f9;
+						font-size: $font-size-24;
+						text-align: right;
+						padding-right: 30rpx;
+						.icon-dingdanxuanzhong {
+							font-size: $font-size-34;
+							color: #1890f9;
+						}
+					}
+				}
+				.list-opea {
+					width: 100%;
+					display: flex;
+					flex: 4;
+					color: #166ce1;
+					flex-direction: row;
+					align-items: center;
+					.tags {
+						display: inline-block;
+						height: 36rpx;
+						padding: 0 15rpx;
+						border-radius: 8rpx;
+						background: #f0cb72;
+						font-size: $font-size-22;
+						color: #4e4539;
+						text-align: center;
+						line-height: 36rpx;
+						margin-left: 10rpx;
+						margin-right: 10rpx;
+						&.sv {
+							background: #333333;
+							color: #f0cb72;
+						}
+						&.sm {
+							display: inline-block;
+							height: 36rpx;
+							box-sizing: border-box;
+							padding: 0 8rpx 0 15rpx;
+							border-radius: 8rpx;
+							background: #faede5;
+							font-size: $font-size-22;
+							color: $color-system;
+							text-align: center;
+							line-height: 36rpx;
+							margin-right: 10rpx;
+							.icon-xiayibu {
+								font-size: 20rpx;
+								margin-left: 10rpx;
+							}
+						}
+					}
+				}
+			}
+		}
+		.club-list-bot {
+			width: 100%;
+			height: 80rpx;
+			float: left;
+			background-color: #f7f7f7;
+			border-radius: 8rpx;
+			margin-top: 20rpx;
+			.btn {
+				height: 80rpx;
+				box-sizing: border-box;
+				line-height: 80rpx;
+				padding: 0 28rpx;
+				font-size: $font-size-24;
+				color: #333333;
+				text-align: center;
+				float: left;
+				position: relative;
+				&:nth-child(1) {
+					&:before {
+						content: '';
+						width: 1px;
+						height: 20rpx;
+						background-color: #b2b2b2;
+						position: absolute;
+						right: 0;
+						top: 30rpx;
+					}
+				}
+				&:nth-child(2) {
+					&:before {
+						content: '';
+						width: 1px;
+						height: 20rpx;
+						background-color: #b2b2b2;
+						position: absolute;
+						right: 0;
+						top: 30rpx;
+					}
+				}
+				&:nth-child(3) {
+					&:before {
+						content: '';
+						width: 1px;
+						height: 20rpx;
+						background-color: #b2b2b2;
+						position: absolute;
+						right: 0;
+						top: 30rpx;
+					}
+				}
+				&:last-child {
+					padding: 0 36rpx;
+					.iconfont {
+						font-weight: bold;
+					}
+					.btn-bubble {
+						width: 200rpx;
+						height: 160rpx;
+						background: rgba(51, 51, 51, 0.8);
+						position: absolute;
+						top: -154rpx;
+						right: 0;
+						border-radius: 8rpx;
+						&:before {
+							content: '';
+							width: 0;
+							height: 0;
+							border: 15rpx solid transparent;
+							border-top: 15rpx solid rgba(51, 51, 51, 0.8);
+							position: absolute;
+							bottom: -28rpx;
+							right: 42rpx;
+						}
+						.btn-view {
+							width: 100%;
+							height: 80rpx;
+							box-sizing: border-box;
+							line-height: 80rpx;
+							font-size: $font-size-24;
+							color: #ffffff;
+							text-align: center;
+							float: left;
+							.iconfont {
+								font-size: 28rpx;
+								color: #ffffff;
+								margin-right: 5rpx;
+								font-weight: normal;
+							}
+							&.border {
+								border-bottom: 1px solid rgba(255, 255, 255, 0.3);
+							}
+						}
+					}
+				}
+				.iconfont {
+					font-size: 30rpx;
+					color: #333333;
+					margin-right: 5rpx;
+				}
+			}
+		}
+	}
+}
+</style>

+ 119 - 0
pages/seller/index/components/banner.vue

@@ -0,0 +1,119 @@
+<template>
+	<view>
+		<view class="swiper-banner-content">
+			<view class="swiper-banner-box">
+				<swiper
+					class="tui-banner-swiper tui-banner tui-skeleton-fillet"
+					:autoplay="true"
+					:interval="5000"
+					:duration="500"
+					@change="swiperChange"
+					:circular="true"
+				>
+					<swiper-item v-for="(item, index) in list" :key="index" @click.stop="handleJumpLink(item)">
+						<image :src="item.bannerImage" class="tui-slide-image" mode="scaleToFill" />
+					</swiper-item>
+				</swiper>
+				<view class="swiper__dots-box" v-if="list.length > 1">
+					<view
+						v-for="(item, idx) in list"
+						:key="idx"
+						:class="[idx === current ? 'swiper__dots-long' : 'none']"
+						:data-index="current"
+						class="swiper__dots-item"
+					>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+import jumpMixins from '@/mixins/jumpMixins.js'
+export default {
+	mixins: [jumpMixins],
+	name: 'banner',
+	props: {
+		list: {
+			type: Array
+		}
+	},
+	data() {
+		return {
+			current: 0
+		}
+	},
+	created() {
+		console.log('list',this.list)
+	},
+	computed: {},
+	methods: {
+		swiperChange(e) {
+			//轮播图切换
+			const index = e.detail.current
+			this.current = index
+		},
+	}
+}
+</script>
+
+<style lang="scss">
+.swiper-banner-content {
+	width: 100%;
+	height: auto;
+	position: relative;
+	background-size: cover;
+}
+.swiper-banner-box {
+	width: 100%;
+	height: 360rpx;
+	position: relative;
+	background-size: cover;
+}
+.tui-banner-swiper {
+	width: 700rpx;
+	margin: 0 auto;
+	height: 340rpx;
+	border-radius: 8rpx;
+	overflow: hidden;
+	transform: translateY(0);
+	box-shadow: 0px 3px 6px rgba(225, 86, 22, 0.08);
+	margin-top: 16rpx;
+	.banner-item {
+		border-radius: 8rpx;
+	}
+	.tui-slide-image {
+		width: 100%;
+		height: 340rpx;
+		display: block;
+	}
+}
+.swiper__dots-box {
+	position: absolute;
+	bottom: 40rpx;
+	left: 0;
+	right: 0;
+	/* #ifndef APP-NVUE */
+	display: flex;
+	/* #endif */
+	flex: 1;
+	flex-direction: row;
+	justify-content: center;
+	align-items: center;
+	.swiper__dots-item {
+		width: 8rpx;
+		height: 8rpx;
+		border-radius: 100%;
+		margin-left: 6px;
+		background-color: rgba(255, 255, 255, 0.7);
+	}
+	.swiper__dots-long {
+		width: 35rpx;
+		height: 8rpx;
+		border-radius: 4rpx;
+		background-color: #ffff;
+		transition: all 0.4s;
+	}
+}
+</style>

+ 239 - 0
pages/seller/index/components/floors.vue

@@ -0,0 +1,239 @@
+<template name="floors">
+	<view>
+		<view class="floors-content clearfix">
+			<view class="tui-block__box tui-mtop__20" v-for="(floor,index) in list" :key="index">
+				<view class="tui-group-name" >
+					<view>
+						<text class="tui-sub__desc tui-color__pink">{{ floor.topic }}</text>
+					</view>
+					<view class="tui-more__box" @click="handleFloor(floor)">
+						<text>更多</text>
+						<text class="iconfont icon-xiangyou"></text>
+					</view>
+				</view>
+				<scroll-view scroll-x>
+					<view class="tui-goods__list">
+						<view class="tui-goods__item" @click="productDetail(pros.productId)" v-for="pros in floor.products">
+							<view class="tui-goods__imgbox">
+								<image :src="pros.mainImage" mode="" class="tui-goods__img"></image>
+							</view>
+							<view class="tui-goods__namebox">
+								<text>{{ pros.name }}</text>
+							</view>
+							<view class="tui-pri__box">
+								<view class="tui-sale-pri" v-if="hasLogin">
+									¥{{ pros.price | NumFormat }}
+								</view>
+								<view v-else class="tui-no-price">
+									<view class="p-stars">
+										<!-- <text class="p-no">¥</text> -->
+										<uni-grader
+											:grade="pros.priceGrade"
+											:margin="14"
+										></uni-grader>
+									</view>
+								</view>
+							</view>
+						</view>
+					</view>
+				</scroll-view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import { mapState, mapMutations } from 'vuex'
+	import uniGrader from '@/components/uni-grade/uni-grade.vue'
+	export default{
+		name:'floors',
+		components: {
+			uniGrader
+		},
+		props:{
+			list:{
+				type:Array
+			}
+		},
+		filters: {
+			NumFormat: function(text) {
+				//处理金额
+				return Number(text).toFixed(2)
+			}
+		},
+		data() {
+			return{
+			}
+		},
+		created(){
+		},
+		computed: {
+			...mapState(['hasLogin'])
+		},
+		methods:{
+			handleFloor(floor){
+				this.$api.navigateTo(`/pages/goods/good-floor?id=${floor.id}`)
+			},
+			productDetail(productId) {
+				// 跳转商品详情
+				this.$api.navigateTo(`/pages/goods/product?id=${productId}`)
+			},
+		}
+	}
+</script>
+
+<style lang="scss">
+	.floors-content{
+		width: 100%;
+		height: auto;
+		box-sizing: border-box;
+		background: #FFFFFF;
+		.tui-block__box {
+			width: 100%;
+			padding: 0 25rpx 25rpx;
+			box-sizing: border-box;
+			background-color: #ffffff;
+			border-radius: 20rpx;
+			overflow: hidden;
+		}
+		.tui-mtop__20 {
+			margin-top: 20rpx;
+		}
+		.tui-group-name {
+			width: 100%;
+			line-height: 50rpx;
+			font-weight: bold;
+			text-align: center;
+			padding: 24rpx 0 0 0;
+			display: flex;
+			align-items: center;
+			justify-content: space-between;
+			color: #333;
+		}
+		.tui-sub__desc {
+			color: #333;
+			font-size: 36rpx;
+			font-weight: 400;
+		}
+		.tui-more__box {
+			display: flex;
+			align-items: center;
+			font-weight: 400;
+			color: #999;
+			line-height: 50rpx;
+			.iconfont{
+				font-size: 28rpx;
+				margin-left: 10rpx;
+			}
+		}
+		.tui-more__box text{
+		  font-size: 24rpx;
+		}
+		.tui-goods__list {
+			display: flex;
+			align-items: center;
+		}
+		.tui-goods__item {
+			background-color: #fff;
+			width: 210rpx;
+			height: 390rpx;
+			border-radius: 6rpx;
+			box-sizing: border-box;
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			flex-direction: column;
+			flex-shrink: 0;
+			margin-right: 18rpx;
+		}
+		.tui-goods__imgbox {
+			width: 210rpx;
+			height: 210rpx;
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			box-sizing: border-box;
+			border-radius: 8rpx;
+		}
+		
+		.tui-goods__img {
+			width: 210rpx;
+			height: 210rpx;
+			display: block;
+			border-radius: 8rpx;
+		}
+		
+		.tui-goods__namebox{
+			width: 210rpx;
+			height: 80rpx;
+			margin-top: 16rpx;
+			line-height: 40rpx;
+			text-overflow: ellipsis;
+			display: -webkit-box;
+			word-break: break-all;
+			-webkit-box-orient: vertical;
+			-webkit-line-clamp: 2;
+			overflow: hidden;
+			font-size: 26rpx;
+			color: #333333;
+		}
+		
+		.tui-pri__box {
+			width: 210rpx;
+			display: flex;
+			justify-content: center;
+			align-items: center;
+		}
+		
+		.tui-sale-pri {
+			width: 210rpx;
+			display: flex;
+			align-items: flex-end;
+			padding: 10rpx 0 8rpx;
+			box-sizing: border-box;
+			font-size: 28rpx;
+			line-height: 40rpx;
+			color: #EE2727;
+			white-space: nowrap;
+			text-overflow: ellipsis;
+			overflow: hidden;
+			text-align: left;
+		}
+		.tui-no-price {
+			width: 210rpx;
+			height: 40rpx;
+			line-height: 40rpx;
+			display: flex;
+			box-sizing: border-box;
+			.p-no {
+				line-height: 40rpx;
+				font-size: $font-size-28;
+				color: $text-color;
+				display: inline-block;
+				float: left;
+			}
+			.p-stars {
+				float: left;
+			}
+		}
+		.tui-size-sm {
+			font-size: 24rpx;
+			line-height: 24rpx;
+			transform: scale(0.8);
+			transform-origin: 0 50%;
+		}
+		
+		.tui-original__pri {
+			font-size: 24rpx;
+			line-height: 24rpx;
+			color: #999999;
+			transform-origin: center 10%;
+			transform: scale(0.8);
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			text-decoration: line-through;
+		}
+		
+	}
+</style>

+ 84 - 0
pages/seller/index/components/home.vue

@@ -0,0 +1,84 @@
+<template>
+	<view class="container home clearfix">
+		<!-- 主页内容 -->
+		<tui-skeleton
+			v-if="!skeletonShow"
+			backgroundColor="#fafafa"
+			borderRadius="10rpx"
+			:isLoading="true"
+			:loadingType="5"
+		></tui-skeleton>
+		<view class="container-home tui-skeleton">
+			<!-- 轮播 -->
+			<banner :list="bannerList" v-if="skeletonShow"></banner>
+			<!-- 金刚区菜单 -->
+			<navbars :list="mainmenu" v-if="skeletonShow"></navbars>
+			<!-- 活动模块 -->
+			<hotmode :mallTheme="mallTheme" v-if="skeletonShow"></hotmode>
+			<!-- 楼层模块 -->
+			<floors :list="floorList" v-if="skeletonShow"></floors>
+		</view>
+		<!-- 侧边 -->
+		<scroll-top :isScrollTop="isScrollTop" :bottom="50"></scroll-top>
+	</view>
+</template>
+
+<script>
+import { mapState, mapMutations } from 'vuex'
+import banner from './components/banner.vue'
+import navbars from './components/navbars.vue'
+import hotmode from './components/hotmode.vue'
+import floors from './components/floors.vue'
+import homeMiXins from './index.js'
+export default {
+	mixins: [ homeMiXins ], 
+	components: {
+		banner,
+		navbars,
+		hotmode,
+		floors
+	},
+	onLoad() {},
+	onPageScroll(e) {
+		//实时获取到滚动的值
+		if (e.scrollTop > 400) {
+			this.isScrollTop = true
+		} else {
+			this.isScrollTop = false
+		}
+	},
+	onPullDownRefresh() {
+		//下拉刷新
+		this.mallOrganizeHome()
+		uni.stopPullDownRefresh()
+	},
+	onShareAppMessage(res) {
+		//分享转发
+		if (res.from === 'button') {
+			// 来自页面内转发按钮
+		} 
+		return {
+			title: '联合丽格集采商城',
+			path: 'pages/tabBar/home/index',
+			imageUrl: `${this.staticUrl}icon_share_home@2x.png`
+		}
+	},
+	onShow() {
+		this.authApplets()
+	},
+	onHide() {
+	}
+}
+</script>
+
+<style lang="scss">
+page {
+	background-color: #ffffff;
+}
+.container-section {
+	width: 100%;
+	height: auto;
+	background-color: #f7f7f7;
+}
+
+</style>

+ 73 - 0
pages/seller/index/components/hotmode.vue

@@ -0,0 +1,73 @@
+<template name="hotmode">
+	<view>
+		<view class="hotmode-content clearfix">
+			<view class="hot-image le" @click="handleProcurement">
+				<image :src="staticUrl + 'icon_model_1@2x.jpg'" mode=""></image>
+			</view>
+			<view class="hot-image ri" @click.stop="handleJumpLink(mallTheme)">
+				<image :src="mallTheme.image" mode=""></image>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import jumpMixins from '@/mixins/jumpMixins.js'
+	export default{
+		mixins: [jumpMixins],
+		name:'hotmode',
+		props:{
+			mallTheme:{
+				type:Object
+			}
+		},
+		data() {
+			return{
+				staticUrl:this.global.staticUrl,
+				navList:[]
+			}
+		},
+		created(){
+		},
+		computed: {
+	
+		},
+		methods:{
+		
+			handleProcurement() {
+				//跳转集采列表
+				this.$api.navigateTo(`/pages/goods/procurement`)
+            },
+			handleActivi(){
+				this.$api.navigateTo(`/pages/goods/good-floor?id=${floor.id}`)
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.hotmode-content{
+		width: 100%;
+		height: 228rpx;
+		box-sizing: border-box;
+		padding: 24rpx;
+		background: #F7F7F7;
+		.hot-image{
+			width: 340rpx;
+			height: 180rpx;
+			float: left;
+			&.le{
+				float: left;
+				
+			}	
+			&.ri{
+				float: right;
+			}
+			image{
+				width: 340rpx;
+				height: 180rpx;
+				display: block;
+			}
+		}
+	}
+</style>

+ 130 - 0
pages/seller/index/components/navbars.vue

@@ -0,0 +1,130 @@
+<template name="navbars">
+	<view>
+		<view class="navbars-content clearfix">
+			<view class="nav-item" v-for="(item, index) in list" :key="index" @click="handleJumpLink(item, index)">
+				<view class="icon"> <image class="icon-image" :src="item.image" mode="widthFix"></image> </view>
+				<view class="name">{{ item.topic }}</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+import jumpMixins from '@/mixins/jumpMixins.js'
+export default {
+	mixins: [jumpMixins],
+	name: 'navbars',
+	props: {
+		list: {
+			type: Array
+		}
+	},
+	data() {
+		return {
+			current: 100
+		}
+	},
+	created() {
+	},
+	computed: {},
+	methods: {
+		
+	}
+}
+</script>
+
+<style lang="scss">
+.navbars-content {
+	width: 100%;
+	height: auto;
+	box-sizing: border-box;
+	padding: 0 24rpx;
+	margin-top: 48rpx;
+	.nav-item {
+		width: 164rpx;
+		height: auto;
+		float: left;
+		margin-bottom: 30rpx;
+		margin-right: 15.3rpx;
+		&:nth-child(4) {
+			margin-right: 0;
+		}
+		&:nth-child(8) {
+			margin-right: 0;
+		}
+		.icon {
+			width: 110rpx;
+			height: 110rpx;
+			margin: 0 auto;
+			position: relative;
+			.icon-image {
+				width: 110rpx;
+				height: 110rpx;
+				display: block;
+			}
+			.icon-new {
+				width: 44rpx;
+				height: 22rpx;
+				display: block;
+				position: absolute;
+				right: 0;
+				top: 20rpx;
+			}
+		}
+		.name {
+			width: 100%;
+			height: 40rpx;
+			line-height: 40rpx;
+			text-align: center;
+			font-size: $font-size-26;
+			color: #666666;
+		}
+		.nav-cell-main {
+			width: 100%;
+			height: auto;
+			position: absolute;
+			right: 0;
+			.nav-cell {
+				width: 164rpx;
+				height: auto;
+				float: left;
+				margin-bottom: 30rpx;
+				margin-right: 15.3rpx;
+				&:nth-child(4) {
+					margin-right: 0;
+				}
+				&:nth-child(8) {
+					margin-right: 0;
+				}
+				.icon {
+					width: 130rpx;
+					height: 130rpx;
+					margin: 0 auto;
+					position: relative;
+					.icon-image {
+						width: 130rpx;
+						height: 130rpx;
+						display: block;
+					}
+					.icon-new {
+						width: 44rpx;
+						height: 22rpx;
+						display: block;
+						position: absolute;
+						right: 0;
+						top: 20rpx;
+					}
+				}
+				.name {
+					width: 100%;
+					height: 40rpx;
+					line-height: 40rpx;
+					text-align: center;
+					font-size: $font-size-28;
+					color: #666666;
+				}
+			}
+		}
+	}
+}
+</style>

+ 702 - 0
pages/seller/index/components/user.vue

@@ -0,0 +1,702 @@
+<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" @click="TestZHIboFn()"
+						><image src="https://static.caimei365.com/app/img/icon/icon-seller@3x.png" mode=""></image
+					></view>
+				</view>
+				<!-- 订单 -->
+				<view class="user-order">
+					<view class="tab-title" @click="navigator('/pages/seller/order/order-list?listType=0')">
+						<text class="cell-tit">我的订单</text> <text class="cell-more">全部订单</text>
+						<text class="iconfont icon-xiayibu"></text>
+					</view>
+					<view class="order-section">
+						<view
+							class="order-item"
+							@click="navigator('/pages/seller/order/order-list?listType=1')"
+							hover-class="common-hover"
+							:hover-stay-time="50"
+						>
+							<view class="order-icon">
+								<image src="https://static.caimei365.com/app/img/icon/order5@3x.png" mode=""></image>
+								<text
+									v-if="beforeConfirmCount > 0"
+									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('/pages/seller/order/order-list?listType=2')"
+							hover-class="common-hover"
+							:hover-stay-time="50"
+						>
+							<view class="order-icon">
+								<image src="https://static.caimei365.com/app/img/icon/order1@3x.png" mode=""></image>
+								<text
+									v-if="beforePayCount > 0"
+									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('/pages/seller/order/order-list?listType=3')"
+							hover-class="common-hover"
+							:hover-stay-time="50"
+						>
+							<view class="order-icon">
+								<image src="https://static.caimei365.com/app/img/icon/order2@3x.png" mode=""></image>
+								<text
+									v-if="beforeShipCount > 0"
+									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('/pages/seller/order/order-list?listType=4')"
+							hover-class="common-hover"
+							:hover-stay-time="50"
+						>
+							<view class="order-icon">
+								<image src="https://static.caimei365.com/app/img/icon/order3@3x.png" mode=""></image>
+								<text
+									v-if="shippedCount > 0"
+									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('/pages/seller/order/order-list?listType=5')"
+							hover-class="common-hover"
+							:hover-stay-time="50"
+						>
+							<view class="order-icon">
+								<image src="https://static.caimei365.com/app/img/icon/order4@3x.png" mode=""></image>
+								<text
+									v-if="refundsCount > 0"
+									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-image" @click="navigator('/pages/user/coupon/coupon-activity')">
+					<view class="text">
+						<view class="h1">美博会</view>
+						<view class="p">大额好券等你来领~</view>
+					</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"
+					>
+						<view class="cell-icon">
+							<image class="cell-icon-image" :src="item.icon" mode=""></image>
+						</view>
+						<text class="cell-tit">{{ item.name }}</text>
+						<text
+							v-if="index == 1 && orderNum > 0"
+							class="uni-badge uni-badge-error uni-small uni-badge--small icon-num"
+						>
+							{{ orderNum == 99 ? '99+' : orderNum }}
+						</text>
+						<text class="cell-more iconfont icon-xiayibu"></text>
+					</view>
+				</view>
+				<view class="list-cell-item">
+					<view
+						class="list-cell"
+						v-for="(item, index) in twoList"
+						:key="index"
+						@click="navigator(item.path)"
+						hover-class="cell-hover"
+						:hover-stay-time="50"
+					>
+						<view class="cell-icon">
+							<image class="cell-icon-image" :src="item.icon" mode=""></image>
+						</view>
+						<text class="cell-tit">{{ item.name }}</text>
+						<text class="cell-more iconfont icon-xiayibu"></text>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+<script>
+import authorize from '@/common/config/authorize.js'
+import { mapState, mapMutations } from 'vuex'
+
+export default {
+	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://static.caimei365.com/app/img/bg/home_cumres@2x.png',
+			name: '',
+			headpic: '',
+			userId: '',
+			serviceProviderId: '',
+			skeletonShow: true,
+			orderNum: 0, //未查看订单数量
+			beforeConfirmCount: 0, //待确认角标
+			beforePayCount: 0, //待付款角标
+			beforeShipCount: 0, //待发货角标
+			shippedCount: 0, //已发货角标
+			refundsCount: '', //退货/款角标
+			institutionsCont: 120,
+			firstList: [
+				{
+					name: '待注册机构',
+					path: '/pages/seller/club/stayClub-list',
+					icon: 'https://static.caimei365.com/app/img/icon/icon_seller_1@2x.png'
+				},
+				{
+					name: '机构列表',
+					path: '/pages/seller/club/list',
+					icon: 'https://static.caimei365.com/app/img/icon/icon_seller_2@2x.png'
+				},
+				{
+					name: '拉机构上线',
+					path: '/pages/seller/login/register-select',
+					icon: 'https://static.caimei365.com/app/img/icon/icon_seller_3@2x.png'
+				},
+				{
+					name: '邀请运营人员',
+					path: '/pages/seller/club/allClub-list',
+					icon: 'https://static.caimei365.com/app/img/icon/icon_seller_4@2x.png'
+				}
+			],
+			twoList: [
+				{
+					name: '帮机构下单',
+					path: '/pages/seller/club/club-list',
+					icon: 'https://static.caimei365.com/app/img/icon/icon_seller_5@2x.png'
+				},
+				{
+					name: '发布二手商品',
+					path: '/pages/second/form/form-select',
+					icon: 'https://static.caimei365.com/app/img/icon/icon_seller_6@2x.png'
+				},
+				{
+					name: '客户咨询记录',
+					path: '/pages/seller/remarks/list',
+					icon: 'https://static.caimei365.com/app/img/icon/icon_seller_7@2x.png'
+				}
+			]
+		}
+	},
+	created() {
+		this.initData()
+	},
+	computed: {
+		...mapState(['hasLogin', 'userInfo'])
+	},
+	methods: {
+		...mapMutations(['login', 'logout']),
+		async initData() {
+			const wechatCode = await authorize.getCode('weixin') // 根据微信的code获取用户登录状态:1已登录过 -1未登录过
+			const getUserInfo = await authorize.getUserInfo('weixin')
+			const params = { code: wechatCode, encryptedData: getUserInfo.encryptedData, iv: getUserInfo.iv }
+			this.UserService.UserLoginAuthApplets(params).then(response => {
+				if (response.code == 0 || response.code == 4) {
+					this.isLogin = true
+					this.userID = response.data.userId
+					this.userIdentity = response.data.userIdentity
+					this.clubStatus = response.data.clubStatus
+					this.serviceProviderId = response.data.serviceProviderId
+					this.$store.commit('updateStatus', response.data)
+					this.login(response.data)
+					uni.setStorageSync('token', response.data.token)
+					uni.setStorageSync('unionId', response.data.unionId)
+					this.getUserSellerHome()
+					this.getOrderCount()
+				} else {
+					this.isLogin = false
+					this.logout()
+					uni.setStorageSync('unionId', response.data.unionId)
+					this.$store.commit('updateStatus', response.data)
+					this.$api.navigateTo('/pages/seller/login/login')
+				}
+			})
+		},
+		getUserSellerHome() {
+			this.$api.getStorage().then(resolve => {
+				this.userId = resolve.userId ? resolve.userId : 0
+				this.SellerService.GetSellerHome({ userId: this.userId })
+					.then(response => {
+						let sellerData = response.data
+						this.name = sellerData.linkMan ? sellerData.linkMan : '' //协销名称
+						this.headpic = sellerData.logo //会所头像
+						this.skeletonShow = false
+					})
+					.catch(error => {
+						this.$util.msg(error.msg, 2000)
+					})
+			})
+		},
+		getOrderCount() {
+			this.SellerService.GetOrderCount({ serviceProviderId: this.serviceProviderId }).then(response => {
+				let data = response.data
+				this.beforeConfirmCount = this.showBadge(data.confirmedCount) //待确认
+				this.beforePayCount = this.showBadge(data.paymentCount) //待付款
+				this.beforeShipCount = this.showBadge(data.waitShipmentsCount) //待发货
+				this.shippedCount = this.showBadge(data.shipmentsCount) //已发货
+				this.refundsCount = this.showBadge(data.salesReturnCount) //退货/款
+				this.orderNum = this.showBadge(data.uncheckedOrderCount) //未查看订单数量
+			})
+		},
+		TestZHIboFn() {
+			//测试跳转直播小程序
+			// uni.navigateToMiniProgram({
+			// 	appId: 'wx92d650b253f8f2e3',
+			// 	path: '/pages/index/index',
+			// 	extraData: {
+			// 		'data1': 'test'
+			// 	},
+			// 	envVersion: 'develop',
+			// 	success(res) {
+			// 		// 打开成功
+			// 		console.log(res)
+			// 	}
+			// })
+		},
+		navigator(url) {
+			this.$api.navigateTo(url)
+		},
+		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, 0.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;
+}
+.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: #666666;
+		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-image {
+	width: 100%;
+	height: 168rpx;
+	background: url(https://static.caimei365.com/app/meibohui/app/activity-small-banner@2x.png);
+	background-size: cover;
+	box-sizing: border-box;
+	margin-bottom: 24rpx;
+	.text {
+		width: 100%;
+		height: 100%;
+		box-sizing: border-box;
+		padding: 38rpx 56rpx;
+		.h1 {
+			line-height: 50rpx;
+			font-size: $font-size-36;
+			color: #ffffff;
+		}
+		.p {
+			line-height: 34rpx;
+			font-size: $font-size-30;
+			color: #ffffff;
+		}
+	}
+}
+.list-cell-item {
+	width: 654rpx;
+	height: auto;
+	margin-bottom: 24rpx;
+	padding: 0 24rpx;
+	background: $bg-color;
+	border-radius: 20rpx;
+}
+.list-cell {
+	width: 100%;
+	line-height: 100rpx;
+	position: relative;
+	background: $bg-color;
+	border-bottom: 1px solid #ebebeb;
+	height: 100rpx;
+	&:last-child {
+		border-bottom: none;
+	}
+	&.cell-hover {
+		background: #fafafa;
+	}
+	.cell-icon {
+		width: 60rpx;
+		height: 100rpx;
+		text-align: center;
+		box-sizing: border-box;
+		padding: 32rpx 12rpx;
+		float: left;
+		.cell-icon-image {
+			width: 36rpx;
+			height: 36rpx;
+			display: block;
+		}
+	}
+	.cell-more {
+		width: 60rpx;
+		height: 100rpx;
+		line-height: 100rpx;
+		text-align: right;
+		position: absolute;
+		right: 0;
+		top: 0;
+		font-size: $font-size-28;
+		color: #666666;
+		.txt {
+			color: #fb4343;
+			padding-right: 10rpx;
+		}
+	}
+	.cell-tit {
+		width: 465rpx;
+		display: block;
+		float: left;
+		font-size: $font-size-28;
+		color: #666666;
+		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(0.8);
+	-ms-transform: scale(0.8);
+	transform: scale(0.8);
+	-webkit-transform-origin: center center;
+	-ms-transform-origin: center center;
+	transform-origin: center center;
+}
+.uni-badge {
+	font-family: 'Helvetica Neue', Helvetica, sans-serif;
+	-webkit-box-sizing: border-box;
+	box-sizing: border-box;
+	font-size: 12px;
+	line-height: 1;
+	display: inline-block;
+	padding: 3px 6px;
+	color: #333;
+	border-radius: 100px;
+	background-color: #f1f1f1;
+}
+.uni-badge-error {
+	color: #fff;
+	background-color: #dd524d;
+}
+</style>

+ 95 - 0
pages/seller/index/index.js

@@ -0,0 +1,95 @@
+// 首页数据
+import Vue from 'vue'
+import { mapState, mapMutations } from 'vuex'
+import authorize from '@/common/config/authorize.js'
+const homeMiXins = {
+    data() {
+        return {
+            nvabarData: {
+                // 顶部自定义导航
+                showCapsule: 1, // 是否显示左上角图标  1表示显示  0表示不显示,
+                showSearch: 0,
+                title: '联合丽格集采商城', // 导航栏 中间的标题
+                haveBack: false,
+                textLeft: this.$store.state.isIphone,
+                textColor: '#FFFFFF'
+            },
+            CustomBar: this.CustomBar, // 顶部导航栏高度
+            staticUrl: this.global.staticUrl,
+            skeletonShow: false,
+            userId: 0,
+            current: 0,
+            mode: 'round',
+            userIdentity: 0,
+            bannerList: [], // 轮播
+            mainmenu: [], // 导航分类
+            floorList: [], // 楼层
+            mallTheme: {}, //活动专题
+            isScrollTop: false,
+            authParams: {
+                code: '',
+                encryptedData: '',
+                iv: ''
+            }
+        }
+    },
+    computed: {
+        ...mapState(['hasLogin', 'userInfo', 'isWxAuthorize'])
+    },
+    methods: {
+        ...mapMutations(['login', 'logout', 'updateNoticeNum']),
+        async mallOrganizeHome() {
+            //初始化首页数据
+            try {
+                const res = await this.CommonService.mallOrganizeHome({ organizeId: 4 })
+                let data = res.data
+                this.bannerList = data.bannerList
+                this.mainmenu = data.mainmenu
+                this.floorList = data.floorList
+                this.mallTheme = data.mallTheme
+                if (this.hasLogin) {
+                    this.updateCartCount()
+                }
+                this.skeletonShow = true
+            } catch (error) {
+                //TODO handle the exception
+                console.log('error', error)
+            }
+        },
+        async authApplets() {
+            try {
+                // 根据微信的code获取用户登录状态:1已登录过 -1未登录过
+                const wechatCode = await authorize.getCode('weixin')
+                const getUserInfo = await authorize.getUserInfo('weixin')
+                this.authParams.code = wechatCode
+                this.authParams.encryptedData = getUserInfo.encryptedData
+                this.authParams.iv = getUserInfo.iv
+                // 调用授权登录
+                const res = await this.UserService.UserLoginAuthApplets(this.authParams)
+                this.userId = res.data.userId
+                this.$store.commit('updateStatus', res.data)
+                this.login(res.data)
+                uni.setStorageSync('token', res.data.token)
+                uni.setStorageSync('unionId', res.data.unionId)
+                this.mallOrganizeHome()
+            } catch (error) {
+                this.logout()
+                uni.setStorageSync('unionId', error.data.unionId)
+                this.$store.commit('updateStatus', error.data)
+                this.$api.redirectTo('/pages/login/login')
+                // this.mallOrganizeHome()
+            }
+        },
+        async updateCartCount() {
+            // 获取购物车数量
+            try {
+                const res = await this.OrderService.ShoppingCartCount({ userId: this.userId })
+                this.$store.commit('updateAllNum', res.data)
+            } catch (error) {
+                console.log('获取购物车数量异常')
+            }
+        }
+    }
+}
+
+export default homeMiXins

+ 153 - 0
pages/seller/index/index.vue

@@ -0,0 +1,153 @@
+<template>
+	<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>
+		</view>
+		<!-- 账户中心 -->
+		<view :style="{ display: show_index == 1 ? 'flex' : 'none' }">
+			<seller-user ref="user" v-if="isUserData"></seller-user>
+		</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>
+					<image v-else :src="item.icon"></image>
+					<view :class="{ tabBar_name: true, nav_active: show_index == item.id }">{{ item.name }}</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+import sellerHome from './components/home.vue'
+import sellerUser from './components/user.vue'
+export default {
+	components: {
+		sellerHome, //采美采购商城 0
+		sellerUser, //账户中心     1
+		sellerCategory //商品分类 2
+	},
+	data() {
+		return {
+			show_index: 2, //控制显示那个组件
+			isUserData: false,
+			isCategory: false,
+			isHomeData: false,
+			isIphoneX: this.$store.state.isIphone,
+			tab_nav_list: [
+				//菜单列表
+				{
+					id: 0,
+					name: '首页',
+					icon: 'https://static.caimei365.com/app/img/icon/icon-home@3x.png',
+					iconAc: 'https://static.caimei365.com/app/img/icon/icon-home-active@3x.png'
+				},
+				{
+					id: 1,
+					name: '我的',
+					icon: 'https://static.caimei365.com/app/img/icon/icon-user@3x.png',
+					iconAc: 'https://static.caimei365.com/app/img/icon/icon-user-active@3x.png'
+				}
+			],
+			nvabarData: {
+				//顶部自定义导航
+				showCapsule: 0, // 是否显示左上角图标  1表示显示  0表示不显示,
+				showSearch: 0,
+				title: '账户中心', // 导航栏 中间的标题
+				textLeft: false
+			},
+			isIphoneX: this.$store.state.isIphoneX,
+			CustomBar: this.CustomBar // 顶部导航栏高度
+		}
+	},
+	onLoad() {
+		this.$nextTick(() => {
+			// 一定要等视图更新完再调用方法
+			setTimeout(() => {
+				this.isUserData = true
+			}, 100)
+		})
+	},
+	methods: {
+		// 切换组件
+		cut_index(type) {
+			this.show_index = type
+			if (this.show_index == 0) {
+				this.isHomeData = true
+				this.isUserData = false
+				this.isCategory = false
+			} else if (this.show_index == 1) {
+				this.isHomeData = false
+				this.isUserData = false
+				this.isCategory = true
+			} else if (this.show_index == 2) {
+				this.isHomeData = false
+				this.isUserData = true
+				this.isCategory = false
+			}
+		},
+		onPullDownRefresh() {
+			if (this.show_index == 0) {
+				this.$refs.home.getHomeInformation()
+			} else if (this.show_index == 2) {
+				this.$refs.user.initData()
+			}
+			uni.stopPullDownRefresh()
+		}
+	},
+	onShareAppMessage(res) {
+		//分享转发
+		if (res.from === 'button') {
+			// 来自页面内转发按钮
+		}
+		return {
+			title: '生美医美正品采购服务平台',
+			path: 'pages/tabBar/home/index',
+			imageUrl: 'https://static.caimei365.com/app/img/bg/min-banner.jpg'
+		}
+	}
+}
+</script>
+
+<style lang="scss">
+.tabBar {
+	width: 100%;
+	height: 98rpx;
+	background: #fff;
+	border-top: 1px solid #e5e5e5;
+	position: fixed;
+	bottom: 0px;
+	left: 0px;
+	right: 0px;
+	display: flex;
+	align-items: center;
+	justify-content: center;
+	z-index: 999;
+	.tabBar_list {
+		width: 86%;
+		display: flex;
+		justify-content: space-between;
+		image {
+			width: 48rpx;
+			height: 48rpx;
+			margin-bottom: 2rpx;
+		}
+		.tabBar_item {
+			width: 150rpx;
+			display: flex;
+			justify-content: center;
+			align-items: center;
+			flex-direction: column;
+			font-size: 20rpx;
+			color: #999999;
+		}
+	}
+}
+.nav_active {
+	color: $color-system;
+}
+</style>

+ 467 - 0
pages/seller/login/login.vue

@@ -0,0 +1,467 @@
+<template>
+	<view class="container login">
+		<view class="login-main">
+			<image class="logo" :src="staticUrl + 'logo@2x.png'" mode=""></image>
+		</view>
+		<tui-skeleton
+			v-if="skeletonShow"
+			backgroundColor="#fafafa"
+			borderRadius="10rpx"
+			:isLoading="true"
+			:loadingType="5"
+		></tui-skeleton>
+		<template else>
+			<view class="login-form" v-if="loginType === 0">
+				<view class="login-input">
+					<text class="iconfont icon-shoujihao"></text>
+					<input
+						type="number"
+						v-model="codeParams.mobile"
+						maxlength="11"
+						class="input"
+						placeholder="请输入已注册的手机号"
+						@input="handleMobile"
+					/>
+				</view>
+				<view class="login-input">
+					<text class="iconfont icon-duanxin"></text>
+					<input
+						type="number"
+						v-model="codeParams.code"
+						maxlength="6"
+						class="input code"
+						placeholder="请输入短信验证码"
+						@input="handleSmsCode"
+					/>
+					<view class="code-btn" :class="isMobileDisabled ? 'disabled':''" @click.stop="handleMobileCode"> {{ mobileCodeText }} </view>
+				</view>
+				<view class="login-input link">
+					<view class="login-reg" v-if="!isUnderLogin" @click.stop="navigatorRegirst('/pages/login/register')">免费注册</view>
+					<view class="login-pwd" @click.stop="handeleLogin(1)">密码登录</view>
+				</view>
+			</view>
+			<view class="login-form" v-if="loginType === 1">
+				<view class="login-input">
+					<text class="iconfont icon-shoujihao"></text>
+					<input
+						type="text"
+						v-model="accountParams.mobileOrEmail"
+						maxlength="11"
+						class="input"
+						placeholder="请输入已注册的手机号"
+						@input="handleMobileOrEmail"
+					/>
+				</view>
+				<view class="login-input">
+					<text class="iconfont icon-mima"></text>
+					<input
+						type="password"
+						v-model="accountParams.password"
+						maxlength="18"
+						class="input"
+						placeholder="请输入密码"
+						autocomplete="new-password"
+						@input="handlePassword"
+					/>
+				</view>
+				<view class="login-input link">
+					<view class="login-reg" v-if="!isUnderLogin" @click.stop="navigatorRegirst('/pages/login/register')">免费注册</view>
+					<view class="login-pwd" @click.stop="handeleLogin(0)">验证码登录</view>
+				</view>
+			</view>
+			<button class="login-btn" :disabled="isDisabled" :class="isDisabled ? 'disabled' : ''" @click="handleSubLogin">
+				登录
+			</button>
+			<view class="login-text" v-if="loginType === 1" @click.stop="this.$api.navigateTo('/pages/login/password')"
+				>忘记密码?</view
+			>
+		</template>
+		<!-- 弹窗提示 -->
+		<tui-modal
+			:show="modal"
+			@click="handleClick"
+			@cancel="modal = false"
+			:content="modalContent"
+			:button="modalButton"
+			color="#333"
+			:size="32"
+			shape="circle"
+			:maskClosable="false"
+		>
+		</tui-modal>
+	</view>
+</template>
+
+<script>
+import { mapState, mapMutations } from 'vuex'
+import authorize from '@/common/config/authorize.js'
+import wxLogin from '@/common/config/wxLogin.js'
+export default {
+	data() {
+		return {
+			staticUrl:this.global.staticUrl,
+			skeletonShow:true,
+			getOption: '', //页面传递参数
+			accountParams: {
+				mobileOrEmail: '', //用户登录账号
+				password: '', //用户登录密码
+				unionId: ''
+			},
+			codeParams: {
+				mobile: '', //用户登录手机号
+				code: '',
+				unionId: ''
+			},
+			smsCodeParams: {
+				mobile: '' ,//用户登录手机号
+				imgCode:'',
+				platformType:0,
+				isCheckCaptcha:1,
+				activateCodeType:9
+			},
+			loginType: 0,
+			isMobileDisabled: false, //手机验证码按钮控制
+			mobilCount: '', //倒计时
+			mobileCodeText: '获取验证码',
+			mobilTime: null,
+			isDisabled: true,
+			isUnderLogin:false,
+			modal:false,
+			modalButton: [
+				{
+					text: '取消',
+					type: 'gray',
+					plain: true //是否空心
+				},
+				{
+					text: '去修改',
+					customStyle: {
+						color: '#fff',
+						bgColor: '#F3B574'
+					},
+					plain: false
+				}
+			],
+			modalContent:''
+		}
+	},
+	onLoad(option) {
+		this.getOption = JSON.stringify(option)
+	},
+	computed: {
+		...mapState(['hasLogin', 'isWxAuthorize', 'isLoginType'])
+	},
+	methods: {
+		...mapMutations(['login']),
+		async infoClucbUser(){
+			const user = await this.$api.getStorage()
+			if(user.clubStatus === 1 || user.clubStatus === 99){
+				this.isUnderLogin = true
+			}
+			this.skeletonShow = false
+		},
+		handleMobileOrEmail(e) {
+			//账号输入
+			this.accountParams.mobileOrEmail = e.detail.value
+			this.handldeCheckInput()
+		},
+		handlePassword(e) {
+			//密码输入
+			this.accountParams.password = e.detail.value
+			this.handldeCheckInput()
+		},
+		handleMobile(e) {
+			//短信验证手机号输入
+			this.codeParams.mobile = this.smsCodeParams.mobile = e.detail.value
+			this.handldeCheckInput()
+		},
+		handleSmsCode(e) {
+			//短信验证码输入
+			this.codeParams.code = e.detail.value
+			this.handldeCheckInput()
+		},
+		handldeCheckInput() {
+			// 控制按钮按钮高亮
+			if (this.loginType === 0) {
+				this.isDisabled = !(this.codeParams.mobile !== '' && this.codeParams.code !== '')
+			} else {
+				this.isDisabled = !(this.accountParams.mobileOrEmail !== '' && this.accountParams.password !== '')
+			}
+		},
+		handleMobileCode() {
+			// 获取短信验证码
+			if(this.isMobileDisabled){ return }
+			if (this.smsCodeParams.mobile == '') {
+				this.$util.msg('请输入手机号', 2000)
+				return
+			}
+			if (!this.$reg.isMobile(this.smsCodeParams.mobile)) {
+				this.$util.msg('请输入正确的手机号', 2000)
+				return
+			}
+			this.isMobileDisabled = true
+			this.userLoginCode(this.smsCodeParams)
+		},
+		async userLoginCode(params) {
+			// 获取登录短息验证码
+			try{
+				const res = await this.UserService.userLoginCode(params)
+				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){
+				//TODO handle the exception
+				this.$util.msg(error.msg, 2000)
+				this.isMobileDisabled = false
+			}
+		},
+		async handleSubLogin() {
+			// 点击登录
+			const stor = await this.$api.getStorage()
+			this.accountParams.unionId = this.codeParams.unionId = stor.unionId ? stor.unionId : ''
+			if (this.loginType === 0) {
+				this.userCodeLogin()
+			} else {
+				this.userPasswordLogin()
+			}
+		},
+		async userCodeLogin() {
+			// 短信验证码登录
+			try{
+				const res =await this.UserService.userCodeLogin(this.codeParams)
+				this.updataeStatus(res)
+			}catch(error){
+				this.$util.msg(error.msg, 2000)
+			}
+		},
+		async userPasswordLogin() {
+			// 账号密码登录
+			try{
+				const res =await this.UserService.AorganizationLogin(this.accountParams)
+				this.updataeStatus(res)
+			}catch(error){
+				this.$util.msg(error.msg, 2000)
+			}
+		},
+		updataeStatus(data) {
+			// 处理返回数据
+			if (data.code === 0) {
+				uni.setStorageSync('token', data.data.token)
+				this.$store.commit('updateStatus', data.data)
+				this.login(data.data)
+				// 登录成功处理
+				const url = uni.getStorageSync('LOGIN_REDIRECT_URL')
+				if (url) {
+				    if (url.indexOf('tabBar') > -1) {
+				        uni.switchTabTo(url)
+				    } else {
+						this.$api.redirectTo(url)
+				    }
+				} else {
+				   this.$api.switchTabTo('/pages/tabBar/user/user')
+				}
+				uni.removeStorageSync('LOGIN_REDIRECT_URL')
+			} else if(data.code === -3) {
+				this.modal = true
+				this.modalContent = data.msg
+			}else{
+				this.$util.msg(data.msg, 2000)
+			}
+		},
+		handleClick(e) {
+			//确认删除
+			if (e.index == 1) {
+				this.$api.navigateTo('/pages/login/register-unid')
+			}
+			this.modal = false
+		},
+		navigatorRegirst(url) {
+			this.$api.navigateTo(url)
+		},
+		handeleLogin(type) {
+			this.loginType = type
+		},
+		async checkedAuthorize() {
+			//是否已授权 0:为取消授权 1:为已授权 2:为未操作
+			wxLogin.wxLoginQuick()
+		}
+	},
+	onShow() {
+		this.infoClucbUser()
+	}
+}
+</script>
+
+<style lang="scss">
+.login {
+	width: 100%;
+	height: auto;
+	.model-warp.none {
+		display: none;
+	}
+	.model-warp.show {
+		display: block;
+	}
+	.login-main {
+		width: 100%;
+		display: flex;
+		flex-direction: column;
+		align-items: center;
+		height: 206rpx;
+		padding: 60rpx 0 40rpx 0;
+		margin-bottom: 70rpx;
+		.logo {
+			width: 358rpx;
+			height: 206rpx;
+			display: block;
+		}
+	}
+	.login-input {
+		width: 600rpx;
+		height: 88rpx;
+		padding: 24rpx 0;
+		margin: 0 auto;
+		margin-bottom: 30rpx;
+		background: #ffffff;
+		position: relative;
+		box-sizing: border-box;
+		border-bottom: 1px solid #e1e1e1;
+		.input {
+			width: 100%;
+			height: 100%;
+			background: #ffffff;
+			font-size: $font-size-28;
+			line-height: 88rpx;
+			color: #333333;
+			padding-left: 100rpx;
+			box-sizing: border-box;
+			&.code {
+				padding-right: 200rpx;
+			}
+		}
+		.code-btn {
+			width: 180rpx;
+			height: 64rpx;
+			position: absolute;
+			right: 0;
+			top: 10rpx;
+			line-height: 64rpx;
+			text-align: center;
+			color: #FFFFFF;
+			font-size: $font-size-24;
+			border-radius: 32rpx;
+			background: $btn-confirm;
+			&.disabled{
+				background: #E1E1E1;
+			}
+		}
+		.iconfont {
+			position: absolute;
+			left: 0;
+			top: 0;
+			font-size: 48rpx;
+			color: #333333;
+			width: 100rpx;
+			height: 88rpx;
+			line-height: 88rpx;
+			text-align: left;
+		}
+		&.link {
+			background: #ffffff;
+			margin-bottom: 40rpx;
+			padding: 0 0;
+			line-height: 40rpx;
+			font-size: $font-size-24;
+			border-bottom: none;
+			.login-reg {
+				float: left;
+				color: $color-system;
+			}
+			.login-pwd {
+				float: right;
+				color: $text-color;
+			}
+		}
+	}
+	.login-btn {
+		width: 600rpx;
+		height: 88rpx;
+		border-radius: 44rpx;
+		font-size: $font-size-28;
+		line-height: 88rpx;
+		color: #ffffff;
+		margin: 0 auto;
+		text-align: center;
+		background: $btn-confirm;
+		&.disabled {
+			background: #e2e2e2;
+		}
+	}
+	.login-text {
+		width: 600rpx;
+		height: 88rpx;
+		font-size: $font-size-28;
+		line-height: 88rpx;
+		color: #333333;
+		margin: 0 auto;
+		text-align: center;
+	}
+	.login-tel {
+		width: 702rpx;
+		font-size: $font-size-28;
+		line-height: 80rpx;
+		margin: 0 auto;
+		color: $text-color;
+		text-align: center;
+		margin-top: 150rpx;
+	}
+	.model-authorization {
+		width: 100%;
+		height: 100%;
+		position: fixed;
+		top: 0;
+		left: 0;
+		z-index: 999;
+		.authorization {
+			width: 518rpx;
+			height: 320rpx;
+			position: absolute;
+			background: rgba(255, 255, 255, 0.7);
+			left: 0;
+			right: 0;
+			bottom: 0;
+			top: 0;
+			margin: auto;
+			.to-btn {
+				position: absolute;
+				top: 0;
+				left: 0;
+				right: 0;
+				bottom: 0;
+				margin: auto;
+				width: 70%;
+				height: 88rpx;
+				font-size: $font-size-28;
+				line-height: 88rpx;
+				color: #ffffff;
+				text-align: center;
+				border-radius: 44rpx;
+			}
+		}
+	}
+}
+</style>

+ 235 - 0
pages/seller/order/components/details/activipopu.vue

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

+ 475 - 0
pages/seller/order/components/details/goodsList.vue

@@ -0,0 +1,475 @@
+<template name="goods">
+	<view class="goods-template">
+		<!-- 商品列表 -->
+		<view class="goods-list">
+			<view v-for="(item, index) in list" :key="index" class="goods-item clearfix">
+				<view class="shoptitle">
+					<view class="title-text" v-if="information.secondHandOrderFlag == 1"
+						>{{ item.shopName }}
+					</view>
+					<view class="title-text" v-else @click="goShophome(item)">
+						{{ item.shopName }} <label class="iconfont icon-jinrudianpu"></label>
+					</view>
+				</view>
+				<view class="productlist" v-for="(pros, idx) in item.orderProductList" :key="idx">
+					<view class="goods-pros-t " @click="details(pros)">
+						<view class="pros-left">
+							<view class="pros-img">
+								<image :src="pros.image" alt="" />
+							</view>
+						</view>
+						<view class="pros-product">
+							<view class="producttitle">{{ pros.name }}</view>
+							<view class="productspec product-view" v-if="pros.productCategory != 2"
+								>规格:{{ pros.productUnit ? pros.productUnit : '' }}</view
+							>
+							<view class="product-view">
+								<view class="view-num red">¥{{ pros.price | NumFormat }}</view>
+								<view class="view-num right">x {{ pros.num }}</view>
+							</view>
+						</view>
+					</view>
+					<!-- <view class=" product-info clearfix"> 
+						<view class="product-view" v-if="pros.returnedNum > 0 || pros.actualCancelNum > 0">
+							<view class="view-num">已退货/已取消:<text class="text">{{ pros.returnedNum }}/{{ pros.actualCancelNum }}</text></view>
+						</view>
+						<view class="product-view" v-if="pros.svipPriceType != 1">
+							<view class="view-num">折扣:<text class="text">{{ pros.discount == null ? '0' : pros.discount }}%</text></view>
+						</view>
+						<view class="product-view">
+							<view class="view-num">税率:<text class="text">{{ pros.taxRate }}%</text></view>
+						</view>
+						<view class="product-view">
+							<view class="view-num">折后单价:<text class="text">¥{{ pros.discountPrice | NumFormat }}</text></view>
+						</view>
+						<view class="product-view allPrice">
+							<view class="view-num">合计:<text class="text">¥{{ pros.totalFee | NumFormat }}</text></view>
+						</view>
+					</view> -->
+				</view>
+				<view class="goods-pros-m" v-if="item.note">
+					<view class="m-text">留言:</view>
+					<view class="m-input">
+						<view class="text">{{ item.note ? item.note : '' }}</view>
+					</view>
+				</view>
+				<view class="goods-pros-b clearfix">
+					<view class="pros-price-view" v-if="item.isHandelShow">
+						<view class="price-view-le">商品总额:</view>
+						<view class="price-view-ri">¥{{ item.totalAmount | NumFormat }}</view>
+					</view>
+					<view class="pros-price-view" v-if="item.isHandelShow">
+						<view class="price-view-le">应付金额:</view>
+						<view class="price-view-ri">¥{{ item.realPay | NumFormat }}</view>
+					</view>
+					<view class="pros-price-view" v-if="item.isHandelShow">
+						<view class="price-view-le">已付金额:</view>
+						<view class="price-view-ri">¥{{ item.receiptAmount | NumFormat }}</view>
+					</view>
+					<view class="pros-price-view">
+						<view class="price-view-le">待付金额:</view>
+						<view class="price-view-ri red">¥{{ item.obligation | NumFormat }}</view>
+					</view>
+					<view class="pros-price-btn">
+						<view class="btn" @click="handelShowDetails(item)">
+							{{ item.isHandelShow ? '收起' : '查看更多' }}
+							<text class="iconfont" :class="item.isHandelShow ? 'icon-xiangshangjiantou' : 'icon-xiangxiajiantou'"></text>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+export default {
+	name: 'goods',
+	props: {
+		shopOrderData: {
+			type: Array
+		},
+		information: {
+			type: Object
+		}
+	},
+	data() {
+		return {
+			list: [],
+			vipFlag: 0,
+		}
+	},
+	created() {
+		this.initGetStotage(this.shopOrderData)
+	},
+	filters: {
+		NumFormat(value) {
+			//处理金额
+			return Number(value).toFixed(2)
+		},
+		formatIncludedTax(value) {
+			if (value === '1') {
+				return '不含税 '
+			} else if (value === '2') {
+				return '含税'
+			} else {
+				return ''
+			}
+		}
+	},
+	computed: {},
+	methods: {
+		async initGetStotage(data) {
+			const userInfo = await this.$api.getStorage()
+			this.vipFlag = userInfo.vipFlag ? userInfo.vipFlag : 0
+			this.list = data.map((el,index)=>{
+				el.isHandelShow = false
+				return el
+			})
+		},
+		handelShowDetails(item){
+			item.isHandelShow = !item.isHandelShow
+		},
+		goShophome(shop) {
+			if(shop.shopType === 2){
+				return
+			}
+			this.$api.navigateTo(`/pages/supplier/user/my-shop?shopId=${shop.shopId}`)
+		},
+		details(pros) {
+			if (pros.validFlag == 9) {
+				return
+			} else {
+				this.$api.navigateTo(`/pages/goods/product?id=${pros.productId}`)
+			}
+		},
+		clickPopupShow(pros) {
+			console.log(pros)
+			this.$emit('popupClick', pros)
+		},
+		PromotionsFormat(promo) {
+			//促销活动类型数据处理
+			if (promo != null) {
+				if (promo.type == 1 && promo.mode == 1) {
+					return true
+				} else {
+					return false
+				}
+			}
+			return false
+		}
+	}
+}
+</script>
+
+<style lang="scss">
+.goods-template {
+	width: 100%;
+	height: auto;
+	background: #ffffff;
+	float: left;
+	margin-top: 24rpx;
+	.goods-list {
+		width: 100%;
+		height: auto;
+		background: #f7f7f7;
+		.goods-item {
+			width: 702rpx;
+			padding: 24rpx;
+			height: auto;
+			background: #ffffff;
+			margin-bottom: 24rpx;
+			&:last-child {
+				margin-bottom: 0;
+			}
+		}
+		.shoptitle {
+			width: 100%;
+			float: left;
+			height: 56rpx;
+			line-height: 56rpx;
+			margin-bottom: 12rpx;
+            .floor-item-act{
+                height: 56rpx;
+                text-align: center;
+                box-sizing: border-box;
+                float: left;
+                padding: 10rpx 0;
+                margin-right: 12rpx;
+                .floor-tags{
+                    height: 28rpx;
+                    border-radius: 6rpx;
+                    background-color: #FFFFFF;
+                    line-height: 28rpx;
+                    color: $color-system;
+                    text-align: center;
+                    display: inline-block;
+                    padding:0 6rpx;
+                    font-size: $font-size-20;
+                    border: 1px solid #FF5B00;
+                    float: left;
+                }
+            }
+			.title-text {
+				width: 400rpx;
+				overflow: hidden;
+				text-overflow: ellipsis;
+				white-space: nowrap;
+				float: left;
+				font-size: $font-size-28;
+				color: $text-color;
+				text-align: left;
+				line-height: 56rpx;
+				font-weight: bold;
+				.iconfont {
+					color: #999999;
+					font-size: 28rpx;
+					margin-left: 10rpx;
+				}
+				.paymenttext {
+					color: #f9a94b;
+					font-size: $font-size-22;
+					margin-left: 20rpx;
+				}
+			}
+		}
+		.productlist {
+			width: 100%;
+			height: auto;
+			padding: 0;
+			box-sizing: border-box;
+		}
+		.goods-pros-t {
+			display: flex;
+			width: 100%;
+			height: auto;
+			margin: 20rpx 0;
+			.pros-left {
+				width: 210rpx;
+				height: 100%;
+				margin: 0 26rpx 0 0;
+			}
+			.pros-img {
+				width: 210rpx;
+				height: 210rpx;
+				border-radius: 10rpx;
+				border: 1px solid #f3f3f3;
+				position: relative;
+				.tips {
+					display: inline-block;
+					width: 80rpx;
+					height: 40rpx;
+					background-image: linear-gradient(214deg, #ff4500 0%, #ff5800 53%, #ff4367 100%);
+					line-height: 40rpx;
+					text-align: center;
+					font-size: $font-size-24;
+					color: #ffffff;
+					border-radius: 10rpx 0 10rpx 0;
+					position: absolute;
+					top: 0;
+					left: 0;
+				}
+				image {
+					width: 210rpx;
+					height: 210rpx;
+					border-radius: 10rpx;
+				}
+			}
+		}
+		.product-info {
+			padding: 10rpx 0;
+			.product-view {
+				font-size: $font-size-24;
+				color: #999999;
+				overflow: hidden;
+				height: 44rpx;
+				line-height: 44rpx;
+				float: left;
+				width: 50%;
+				.view-num {
+					float: left;
+					.text{
+						color: #333333;
+					}
+				}
+			}
+		}
+		.pros-product {
+			width: 468rpx;
+			height: 100%;
+			line-height: 36rpx;
+			font-size: $font-size-26;
+			position: relative;
+			.product-view {
+				&.allPrice {
+					width: 100%;
+				}
+				.view-num {
+					flex: 1;
+					text-align: left;
+					font-size: $font-size-26;
+					color: #999999;
+					line-height: 44rpx;
+					float: left;
+					&.right {
+						float: right;
+					}
+					&.red {
+						color: #ff2000;
+						font-weight: bold;
+						&.none {
+							text-decoration: line-through;
+							color: #999999;
+						}
+					}
+				}
+			}
+			.producttitle {
+				width: 100%;
+				display: inline-block;
+				height: auto;
+				text-overflow: ellipsis;
+				display: -webkit-box;
+				word-break: break-all;
+				-webkit-box-orient: vertical;
+				-webkit-line-clamp: 2;
+				overflow: hidden;
+				margin-bottom: 8rpx;
+			}
+			.productspec {
+				height: 44rpx;
+				color: #999999;
+				line-height: 44rpx;
+				text-overflow: ellipsis;
+				display: -webkit-box;
+				word-break: break-all;
+				-webkit-box-orient: vertical;
+				-webkit-line-clamp: 1;
+				overflow: hidden;
+			}
+			.productprice {
+				height: 48rpx;
+				position: absolute;
+				width: 100%;
+				bottom: 0;
+				.price {
+					line-height: 48rpx;
+					font-size: $font-size-28;
+					width: 48%;
+					color: #ff2a2a;
+					float: left;
+					.price {
+						line-height: 48rpx;
+						font-size: $font-size-28;
+						width: 48%;
+						color: #ff2a2a;
+						float: left;
+						font-weight: bold;
+					}
+				}
+				.count {
+					height: 100%;
+					float: right;
+					position: relative;
+					.small {
+						color: #666666;
+					}
+				}
+			}
+			.floor-item-act {
+				width: 100%;
+				height: 56rpx;
+				text-align: center;
+				box-sizing: border-box;
+				float: left;
+				padding: 10rpx 0 0 0;
+			}
+			.floor-item-act {
+				height: 56rpx;
+				text-align: center;
+				box-sizing: border-box;
+				float: left;
+				padding: 10rpx 0;
+				margin-right: 12rpx;
+			}
+		}
+		.goods-pros-m {
+			width: 100%;
+			height: auto;
+			line-height: 76rpx;
+			font-size: $font-size-26;
+			color: $text-color;
+			float: left;
+			.m-text {
+				width: 62rpx;
+				float: left;
+				padding-right: 20rpx;
+				font-weight: bold;
+			}
+			.m-input {
+				display: -webkit-box;
+				display: -webkit-flex;
+				display: flex;
+				-webkit-box-align: center;
+				-webkit-align-items: center;
+				align-items: center;
+				position: relative;
+				width: 620rpx;
+				height: auto;
+				padding: 20rpx 0 10rpx 0;
+				background: #ffffff;
+				.text {
+					width: 100%;
+					height: 100%;
+					font-size: $font-size-26;
+					line-height: 36rpx;
+					color: #333333;
+				}
+			}
+		}
+		.goods-pros-b {
+			width: 100%;
+			padding-top: 12rpx;
+			float: left;
+			.pros-price-view{
+				width: 100%;
+				height: 44rpx;
+				font-size: 24rpx;
+				line-height: 44rpx;
+				.price-view-le{
+					float: left;
+					color: #999999;
+					text-align: left;
+				}
+				.price-view-ri{
+					float: right;
+					color: #333333;
+					text-align: right;
+					&.red{
+						color: #F94B4B;
+					}
+				}
+			}
+			.pros-price-btn{
+				width: 100%;
+				height: 48rpx;
+				.btn{
+					width: 168rpx;
+					height: 48rpx;
+					line-height: 46rpx;
+					box-sizing: border-box;
+					border: 2rpx solid #e1e1e1;
+					border-radius: 8rpx;
+					text-align: center;
+					color: #b2b2b2;
+					margin: 0 auto;
+					font-size: $font-size-24;
+					.iconfont {
+						
+					}
+				}
+			}
+		}
+	}
+}
+</style>

+ 197 - 0
pages/seller/order/components/details/invoiceTent.vue

@@ -0,0 +1,197 @@
+<template name="invoice">
+	<view class="invoice-template">
+		 <!-- 发票信息 -->
+		 <view class="invoice-content">
+		 	<view class="invoice-title">发票信息</view>
+			<view class="invoice-empty" v-if="isEmpty">
+			 	<text>不要发票</text></text>
+			</view>
+			<view class="invoice-text" v-else>
+				<view class="invoice-top" @click="showInvoice">
+					<view class="name">{{orderInvoice.invoiceTitle ? orderInvoice.invoiceTitle : ''}}</view>
+					<text class="iconfont icon-web_xiangxiazhankai" :class="{'icon-web_xiangxiazhankai-active':isOpen}"></text>
+				</view>
+				<view :class="{'invoice-warp--hide':!isOpen}" class="invoice-warp">
+					<view  class="invoice-warp__wrapper invoice-animation" 
+						   :style="{'transform':isOpen?'translateY(0)':'translateY(-50%)','-webkit-transform':isOpen?'translateY(0)':'translateY(-50%)'}">
+						<view class="table">
+							<text class="label-name">单位名称:</text>
+							<text>{{orderInvoice.invoiceTitle ? orderInvoice.invoiceTitle : ''}}</text>
+						</view>
+						<view class="table long">
+							<text class="label-name">纳锐人识别号:</text>
+							<text>{{orderInvoice.corporationTaxNum ? orderInvoice.corporationTaxNum :''}}</text> 
+						</view>
+						<view class="table">
+							<text class="label-name">注册地址:</text>
+							<text>{{orderInvoice.registeredAddress ? orderInvoice.registeredAddress : ''}}</text> 
+						</view>
+						<view class="table">
+							<text class="label-name">注册电话:</text>
+							<text>{{orderInvoice.registeredPhone ? orderInvoice.registeredPhone : ''}}</text>
+						</view>
+						<view class="table">
+							<text class="label-name">开户银行:</text>
+							<text>{{orderInvoice.openBank ? orderInvoice.openBank : ''}}</text>
+						</view>
+						<view class="table">
+							<text class="label-name">银行账号:</text>
+							<text>{{bankAccountNo ? bankAccountNo : ''}}</text>
+						</view>
+					</view>
+				</view>
+			</view>
+		 </view>
+	</view>
+</template>
+
+<script>
+	export default{
+		name:"invoice",
+		props:{
+			orderInvoice:{
+				type:Object
+			}
+		},
+		data() {
+			return{
+				isEmpty:false,
+				title:'发票信息',
+				isOpen:false,
+				bankAccountNo:''
+			}
+		},
+		created(){
+			this.initData(this.orderInvoice)
+		},
+		computed: {
+
+		},
+		methods:{
+			initData(res) {
+				if(res == null || res.type == 0){
+					this.isEmpty = true
+				}else{
+					this.isEmpty = false
+					this.bankAccountNo = this.$reg.bankRegex(res.bankAccountNo)
+				}
+			},
+			onMessage(pros){
+			},
+			showInvoice(){
+				this.isOpen = !this.isOpen
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.invoice-template{
+		width: 100%;
+		height: auto;
+		background: #FFFFFF;
+		float: left;
+		margin-top: 24rpx;
+		.invoice-content{
+			width: 702rpx;
+			padding: 20rpx 24rpx;
+		}
+		.invoice-title{
+			font-size: $font-size-28;
+			color: $text-color;
+			text-align: left;
+			line-height: 40rpx;
+			font-weight: bold;
+			margin-bottom: 30rpx;
+		}
+		.invoice-empty{
+			font-size: $font-size-28;
+			color: $text-color;
+			text-align: left;
+			line-height: 40rpx;
+			.txt{
+				font-size: $font-size-24;
+				color: #999999;
+			}
+		}
+		.invoice-animation {
+			/* transition: transform 0.3s ease;*/
+			transition-property: transform;
+			transition-duration: 0.3s;
+			transition-timing-function: ease;
+		}
+		.invoice-text{
+			width: 100%;
+			height: auto;
+			.invoice-top{
+				width: 100%;
+				height: 40rpx;
+				line-height: 40rpx;
+				font-size: $font-size-28;
+				color: $text-color;
+				text-align: left;
+				.name{
+					width: 400rpx;
+					float: 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;
+				}
+				.icon-web_xiangxiazhankai{
+					transform: rotate(0deg);
+					transform-origin: center center;
+					float: right;
+					font-size: $font-size-32;
+					color: #000000;
+					/* transition: transform 0.3s ease;*/
+					transition-property: transform;
+					transition-duration: 0.3s;
+					transition-timing-function: ease;
+				}
+				.icon-web_xiangxiazhankai-active{
+					transform: rotate(180deg);
+				}
+			}
+			.invoice-warp{
+				width: 100%;
+				padding: 24rpx 0 0 0;
+				overflow: hidden;
+				.table{
+					padding-left: 130rpx;
+					height: auto;
+					line-height: 64rpx;
+					font-size: $font-size-26;
+					color: $text-color;
+					text-align: left;
+					position: relative;
+					.label-name{
+						display: inline-block;
+						line-height: 64rpx;
+						position: absolute;
+						left: 0;
+						top: 0;
+					}
+					&.long{
+						padding-left: 180rpx;
+					}
+				}
+			}	
+			.invoice-warp__wrapper{
+				/* #ifndef APP-NVUE */
+				display: flex;
+				/* #endif */
+				flex-direction: column;
+				padding-top: 20rpx;
+			}
+			.invoice-warp--hide {
+				padding: 0 0;
+				height: 0px;
+				line-height: 0px;
+			}		
+		}
+	}
+</style>

+ 198 - 0
pages/seller/order/components/details/logisticsRecord.vue

@@ -0,0 +1,198 @@
+<template name="logistics">
+	<view class="logistics-template">
+		<!-- 物流信息 -->
+		<view
+			class="logistics-content"
+			v-if="logisticsData.length > 0"
+			v-for="(item, index) in logisticsData"
+			:key="index"
+		>
+			<view class="logistics-top"> <text class="name">物流信息</text> </view>
+			<view class="logistics-warp">
+				<view class="logistics-warp__wrapper">
+					<view class="logistics-main">
+						<view class="logistics-main-top">
+							<view class="main-top" @click="showlogistics(index)">
+								{{ item.expressname }}:{{ item.expressNumber }}
+								<text class="clipboard" @click="clipboard(item.expressNumber)">复制</text>
+								<text
+									class="arrow-showMore iconfont icon-web_xiangxiazhankai"
+									:style="{ transform: item.isOpen ? 'rotate(180deg)' : 'rotate(0)' }"
+								></text>
+							</view>
+							<view class="main-bot"> 发货时间:{{ item.expressNewtime }} </view>
+						</view>
+						<view
+							v-if="item.expressRecord.length > 0"
+							v-for="(infoItem, infoIndex) in item.expressRecord"
+							:key="infoIndex"
+							:class="{ 'logistics-warp--hide': !item.isOpen }"
+							class="logistics-main-bot logistics-animation"
+							:style="{
+								transform: item.isOpen ? 'translateY(0)' : 'translateY(-50%)',
+								'-webkit-transform': item.isOpen ? 'translateY(0)' : 'translateY(-50%)'
+							}"
+						>
+							{{ infoItem.time }} {{ infoItem.desc }}
+						</view>
+						<view
+							v-if="item.expressRecord"
+							:class="{ 'logistics-warp--hide': !item.isOpen }"
+							class="logistics-main-bot logistics-animation"
+							:style="{
+								transform: item.isOpen ? 'translateY(0)' : 'translateY(-50%)',
+								'-webkit-transform': item.isOpen ? 'translateY(0)' : 'translateY(-50%)'
+							}"
+						>
+							暂无物流信息
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+		<view class="logistics-content" v-else> 暂无物流信息 </view>
+	</view>
+</template>
+
+<script>
+const thorui = require('@/components/clipboard/clipboard.thorui.js')
+export default {
+	name: 'logistics',
+	data() {
+		return {
+			title: '发票信息',
+			logisticsData: ''
+		}
+	},
+	created() {},
+	computed: {},
+	methods: {
+		initData(res) {
+			this.logisticsData = res
+		},
+		showlogistics(index) {
+			let isOpen = this.logisticsData[index]['isOpen']
+			this.logisticsData[index]['isOpen'] = !isOpen
+		},
+		clipboard(data) {
+			thorui.getClipboardData(data, res => {
+				if (res) {
+					this.$util.msg('复制成功', 2000, true, 'success')
+				} else {
+					this.$util.msg('复制失败', 2000, true, 'none')
+				}
+			})
+		}
+	}
+}
+</script>
+
+<style lang="scss">
+.logistics-template {
+	width: 100%;
+	height: 100%;
+	background: #ffffff;
+	float: left;
+	.logistics-content {
+		width: 702rpx;
+		padding: 20rpx 24rpx;
+		height: auto;
+		.arrow-showMore {
+			position: absolute;
+			right: 24rpx;
+			z-index: 99;
+		}
+		.logistics-top {
+			width: 100%;
+			height: 40rpx;
+			line-height: 40rpx;
+			font-size: $font-size-28;
+			color: $text-color;
+			text-align: left;
+			padding-bottom: 24rpx;
+			border-bottom: 1px solid #f8f8f8;
+			.name {
+				float: left;
+				font-weight: bold;
+			}
+			.icon-web_xiangxiazhankai {
+				transform: rotate(0deg);
+				transform-origin: center center;
+				float: right;
+				font-size: $font-size-32;
+				color: #000000;
+				/* transition: transform 0.3s ease;*/
+				transition-property: transform;
+				transition-duration: 0.3s;
+				transition-timing-function: ease;
+			}
+			.icon-web_xiangxiazhankai-active {
+				transform: rotate(180deg);
+			}
+		}
+		.logistics-warp {
+			width: 100%;
+			overflow: hidden;
+			.table {
+				height: 76rpx;
+				line-height: 76rpx;
+				font-size: $font-size-26;
+				color: $text-color;
+				text-align: left;
+			}
+		}
+		.logistics-main-top {
+			width: 100%;
+			height: auto;
+			float: left;
+			padding-top: 24rpx;
+			margin-bottom: 14rpx;
+			.main-top,
+			.main-bot {
+				font-size: $font-size-28;
+				color: $text-color;
+				line-height: 40rpx;
+				margin: 4rpx 0;
+			}
+		}
+		.logistics-main-bot {
+			width: 100%;
+			height: auto;
+			font-size: $font-size-24;
+			color: $text-color;
+			line-height: 56rpx;
+			text-align: justify;
+		}
+		.logistics-animation {
+			/* transition: transform 0.3s ease;*/
+			transition-property: transform;
+			transition-duration: 0.3s;
+			transition-timing-function: ease;
+		}
+		.logistics-warp__wrapper {
+			/* #ifndef APP-NVUE */
+			display: flex;
+			/* #endif */
+			flex-direction: column;
+		}
+		.logistics-warp--hide {
+			// padding: 0 0;
+			// height: 0px;
+			// line-height: 0px;
+			display: none;
+		}
+		.clipboard {
+			width: 84rpx;
+			height: 36rpx;
+			background: linear-gradient(34deg, rgba(255, 41, 41, 1) 0%, rgba(255, 109, 27, 1) 100%);
+			text-align: center;
+			font-size: $font-size-24;
+			color: #ffffff;
+			border-radius: 6rpx;
+			line-height: 36rpx;
+			display: inline-block;
+			margin-left: 42rpx;
+		}
+	}
+}
+</style>

+ 174 - 0
pages/seller/order/components/details/orderAddress.vue

@@ -0,0 +1,174 @@
+<template name="address">
+	<view class="address-template">
+		 <!-- 地址信息 -->
+		 <view class="address-section">
+		 	<view class="address-content">
+				<view class="address-cen">
+					<view class="top">
+						<view class="name">{{addressData.receiver ? addressData.receiver : ''}}</view>
+						<view class="mobile">{{addressData.mobile ? addressData.mobile : ''}}</view>
+					</view>
+					<view class="address">
+						<view class="address-icon">
+							<text class="iconfont icon-shouhuodizhi1"></text>
+						</view>
+						<view class="address-text">
+							{{addressData.province ? addressData.province : ''}}
+							{{addressData.city ? addressData.city : ''}}
+							{{addressData.town ? addressData.town : ''}}
+							{{addressData.address ? addressData.address : ''}}
+						</view>
+					</view>
+				</view>
+		 	</view>
+		 </view>
+		 <image  src="../../../static/temp/line@3x.png" mode=""></image>
+	</view>
+</template>
+
+<script>
+	import { mapState, mapMutations } from 'vuex'	
+	export default{
+		name:'address',
+		props:{
+			addressData:{
+				type:Object
+			}
+		},
+		data() {
+			return{
+				initData:''
+			}
+		},
+		created(){
+			this.initData = this.addressData
+		},
+		computed: {
+			...mapState(['isManage'])
+		},
+		methods:{
+			
+		}
+	}
+</script>
+
+<style lang="scss">
+	.address-template{
+		width: 100%;
+		height: auto;
+		background: #FFFFFF;
+        
+        &::after{
+            content: "";
+            display: block;
+            clear: both;
+        }
+		// border-top: 1px solid #F8F8F8;
+		image{
+			float: left;
+			width: 100%;
+			height: 6rpx;
+		}
+	}
+	.address-section {
+		width: 100%;
+		height: auto;
+		float: left;
+		position: relative;
+		
+		.address-empty{
+			width: 100%;
+			height: 84rpx;
+			line-height: 84rpx;
+			color: $color-system;
+			text-align: center;
+			font-size: $font-size-26;
+			font-weight: bold;
+			background: #fff;
+			float: left;
+			.icon-tianjiadizhi{
+				font-size: 30rpx;
+				margin: 0 8rpx;
+			}
+		}
+		.address-content {
+			display: flex;
+			align-items: center;
+			padding:20rpx 24rpx;
+			background: #fff;
+		}
+		
+		.icon-shouhuodizhi1 {
+			flex-shrink: 0;
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			width: 40rpx;
+			color: $color-system;
+			font-size: 46rpx;
+			margin-right: 10rpx;
+		}	
+		.address-cen {
+			width: 100%;
+			height: auto;
+			position: relative;
+			.top{
+				padding-left: 50rpx;
+				height: 42rpx;
+				line-height: 42rpx;
+				text-align: left;
+				font-size: $font-size-30;
+				color: $text-color;
+				padding-bottom: 8rpx;
+				display: flex;
+				float: left;
+				.name{
+					margin-right: 48rpx;
+				}
+				.mobile{
+					margin-right: 40rpx;
+				}
+			}
+			.address {
+				width: 100%;
+				height: auto;
+				float: left;
+				.address-icon{
+					width: 40rpx;
+					height: auto;
+					float: left;
+					line-height: 40rpx;
+				}
+				.address-text{
+					width: 650rpx;
+					padding-left: 10rpx;
+					float: left;
+					line-height: 40rpx;
+					font-size: $font-size-28;
+					color: #666666;
+					text-align: left;
+					-o-text-overflow: ellipsis;
+					text-overflow: ellipsis;
+					display: -webkit-box;
+					word-break: break-all;
+					-webkit-box-orient: vertical;
+					-webkit-line-clamp: 2;
+					overflow: hidden;
+				}
+			}
+		}
+		.icon-xiangyou {
+			font-size: 32rpx;
+			color: $text-color;
+			margin-right: 30rpx;
+		}
+		.a-bg {
+			position: absolute;
+			left: 0;
+			bottom: 0;
+			display: block;
+			width: 100%;
+			height: 5rpx;
+		}
+	}
+</style>

+ 237 - 0
pages/seller/order/components/details/orderButton.vue

@@ -0,0 +1,237 @@
+<template name="button">
+	<view class="button-template" :style="{paddingBottom :isIphoneX ? '68rpx' : '0rpx'}">
+		<!-- 底部按钮 -->
+		<view class="button-content">
+			<!-- <view class="btn btn-payment" v-if="order.affirmPaymentFlag == 10" @click.stop="btnConfirm('payment',order)">确认打款<text>供应商</text></view> -->
+			<!-- <view class="btn btn-confirm" v-if="btnState.isConfirmation" @click.stop="btnConfirm('confirmation',order)">确认订单</view> -->
+			<view class="btn btn-pay" v-if="btnState.isPay" @click.stop="btnConfirm('pay',order)">付款</view>
+			<view class="btn btn-cancel" v-if="order.checkFlag === 1" @click.stop="btnConfirm('upload',order)">上传凭证</view>
+			<view class="btn btn-share" @click.stop="onShareCode">
+				<view class="tips" v-if="shareCode">分享码:{{shareCode}}</view>
+				分享订单
+			</view>
+			<view class="btn btn-cancel" v-if="btnState.isCancel" @click.stop="btnConfirm('cancel',order)">取消订单</view>
+			<!-- <view class="btn btn-delete" v-if="btnState.isDelete" @click.stop="btnConfirm('delete',order)">删除订单</view> -->
+			<view class="btn btn-query" v-if="btnState.isQuery" @click.stop="btnConfirm('query',order)">查看物流</view>
+			<view class="btn btn-firm" v-if="btnState.isConfirm" @click.stop="btnConfirm('confirm',order)">
+				确认收货
+			</view>
+			
+		</view>
+	</view>
+</template>
+
+<script>
+	export default{
+		name:'button',
+		props:{
+			status:{
+				type:Number
+			},
+			order: {
+				type:Object
+			},
+			shareCode:{
+				type:String
+			},
+		},
+		watch:{
+			status:{
+				handler:function(val){
+					this.initData(val)
+				},
+				deep:true//对象内部的属性监听,也叫深度监听
+			}
+		},
+		data() {
+			return{
+				btnState:this.initStatus(),
+				isIphoneX:this.$store.state.isIphoneX,
+				mapStateArr:[
+					{label:'isQuery',val:[4,5,12,13,33,22,23,32,77],status: true},
+					{label:'isDelete',val:[6],status: true},
+					{label:'isCancel',val:[0,111],status: true},
+					{label:'isConfirm',val:[33],status: true},
+					{label:'isConfirmation',val:[0],status: true},
+					{label:'isPay',val:[11,12,13,21,22,23,111],status: true},
+					{label:'isUpload',val:[11,12,13,21,22,23,111],status: true},
+				]
+			}
+		},
+		created(){
+			this.initData(this.status)
+		},
+		computed: {
+
+		},
+		methods:{
+			initData(resVal) {
+				/**
+				 * @分享按钮统一显示
+				 * @按钮根据状态显示
+				 * @(4、5、7、12、22、23、32)显示[查看物流]按钮,其他隐藏
+				 * @(6)显示[删除订单],其他隐藏
+				 * @(0、111)显示[取消订单],其他隐藏
+				 * @(21,31)只显示分享
+				 * @(13,33)显示[确认收货]和[查看物流]
+				 */
+				this.btnState = this.initStatus()
+				this.mapStateArr.forEach(el => {
+					el.val.forEach(value => {
+						if(resVal === value){
+							this.btnState[el.label] = el.status
+						}
+					})
+				})
+			},
+			initStatus(){
+				let btnState= {
+						isQuery: false,
+						isDelete: false,
+						isCancel: false,
+						isConfirm: false,
+						isConfirmation:false,
+					}
+				return 	btnState
+			},
+			getShareCode(code){
+				this.shareCode = code
+			},
+			onShareCode(){
+				this.$parent.isShareModal = true
+				this.$emit('shareConfirm')
+			},
+			btnConfirm(type,order){
+				let data = {
+						type:type,
+						orderId:order.orderId,
+						order:order
+					}
+				this.$emit('buttonConfirm',data)
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.button-template{
+		width: 100%;
+		height: auto;
+		position: fixed;
+		bottom: 0;
+		left: 0;
+		background: #FFFFFF;
+		z-index: 99999;
+		.button-content{
+			padding:0 24rpx;
+			height: auto;
+			float: right;
+			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: 150rpx;
+				height:  64rpx;
+				margin:22rpx 22rpx 22rpx 0;
+				line-height: 64rpx;
+				font-size:$font-size-26;
+				color: #666666;
+				text-align: center;
+				float: right;
+				border: 2rpx solid #999999;
+				border-radius: 34rpx;
+				&.btn-payment{
+					line-height: 38rpx;
+					font-size: 24rpx;
+					background: #f9a94b;
+					color: #fff;
+					border: 2rpx solid #f9a94b;
+					text{
+						display: block;
+						line-height: 15rpx;
+					}
+				}
+				&.btn-share{
+					position: relative;
+				}
+			}
+			.btn-confirm{
+				background:#ff7a51;
+				border-color:#ff7a51;
+				color: #FFFFFF;
+			}
+			.btn-pay{
+				background:$btn-confirm;
+				margin-right: 0;
+				border: 2rpx solid $btn-confirm;
+				color: #fff;
+			}
+			.btn-firm{
+				position:relative;
+				.tips{
+					width: 74rpx;
+					height: 32rpx;
+					line-height: 32rpx;
+					padding: 0 7rpx;
+					border-radius: 16rpx;
+					background-color: #ffe6dc;
+					color: $color-system;
+					text-align: center;
+					font-size: $font-size-20;
+					position:absolute;
+					right: 0;
+					top: -40rpx;
+					z-index: 90;
+					.line{
+						display: block;
+						width: 20rpx;
+						height: 20rpx;
+						background-color: #ffe6dc;
+						position: relative;
+						bottom: 18rpx;
+						left: 15rpx;
+						z-index: -1;
+						transform:rotate(45deg);
+					}
+				}
+			}
+			.btn-share{
+				.tips{
+					width: 160rpx;
+					height: 34rpx;
+					padding: 10rpx 10rpx;
+					background:#F3B574;
+					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:#F3B574;
+						position: absolute;
+						bottom: -8rpx;
+						left: 30rpx;
+						z-index: -1;
+						transform:rotate(45deg);
+					}
+				}
+			}
+		}
+	}
+</style>

+ 284 - 0
pages/seller/order/components/details/orderInformation.vue

@@ -0,0 +1,284 @@
+<template name="information">
+	<view class="information-template">
+		<!-- 订单信息 -->
+		<view class="information-content">
+			<view class="information-view title">
+				<view class="view-num">
+					<view class="bage-text">
+						订单编号:<label class="label">{{ orderData.orderNo ? orderData.orderNo : '' }}</label>
+					</view>
+				</view>
+			</view>
+			<view class="information-view same">
+				<view class="view-num bold">
+					订单标识:<label class="label">{{ orderData.orderMark ? orderData.orderMark : '' }}</label>
+				</view>
+			</view>
+			<view class="information-view">
+				<view class="view-num time">
+					下单时间:<label class="label">{{ orderData.orderTime ? orderData.orderTime : '' }}</label>
+				</view>
+			</view>
+			<view class="information-view same">
+				<view class="view-num">
+					订单总额:<label class="label">¥{{ orderData.payTotalFee | NumFormat }}</label>
+				</view>
+			</view>
+			<template v-if="openShowflag">
+				<view class="information-view">
+					<view class="view-num">
+						待付金额:<text class="red">¥{{ orderData.pendingPayments | NumFormat }}</text>
+					</view>
+					<view class="view-man"></view>
+				</view>
+				<view class="information-view same">
+					<view class="view-man">
+						应付总额:<label class="red">¥{{ orderData.payableAmount | NumFormat }}</label>
+					</view>
+				</view>
+				<view class="information-view">
+					<view class="view-num">
+						已支付:<label class="red">¥{{ orderData.receiptAmount | NumFormat }}</label>
+					</view>
+					<view class="view-man"></view>
+				</view>
+				<view class="information-view none">
+					<view class="view-num">
+						运费:<label class="label">{{ orderData.postageInfo }}</label>
+					</view>
+				</view>
+			</template>
+		</view>
+		<view class="openinfo" v-if="infoflag">
+			<view class="btnInfo" @click="openShow">
+				查看更多 <text class="iconfont icon-xiangxiajiantou"></text>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+const thorui = require('@/components/clipboard/clipboard.thorui.js')
+export default {
+	name: 'information',
+	props: {
+		information: {
+			type: Object
+		}
+	},
+	data() {
+		return {
+			orderData: '',
+			openShowflag: false,
+			infoflag: true
+		}
+	},
+	created() {
+		this.initData(this.information)
+	},
+	filters: {
+		NumFormat(value) {
+			//处理金额
+			if (!value) return '0.00'
+			let number = Number(value)
+			return number.toFixed(2)
+		},
+		TextFormat(status) {
+			//处理金额
+			let HtmlText,
+				typeTextObject = {
+					0: '待确认',
+					4: '交易完成',
+					5: '订单完成',
+					6: '已关闭',
+					7: '交易全退',
+					77: '交易全退',
+					11: '待付款待发货',
+					12: '待付款部分发货',
+					13: '待付款已发货',
+					21: '部分付款待发货',
+					22: '部分付款部分发货',
+					23: '部分付款已发货',
+					31: '已付款待发货',
+					32: '已付款部分发货',
+					33: '已付款已发货',
+					111: '待付款待发货'
+				}
+
+			Object.keys(typeTextObject).forEach(key => {
+				if (key == status) {
+					HtmlText = typeTextObject[key]
+				}
+			})
+			return HtmlText
+		}
+	},
+	computed: {},
+	watch: {
+		information: {
+			handler: function(val) {
+				this.initData(val)
+			},
+			deep: true //对象内部的属性监听,也叫深度监听
+		}
+	},
+	methods: {
+		openShow() {
+			this.openShowflag = true
+			this.infoflag = false
+		},
+		initData(res) {
+			this.orderData = res
+		},
+		clipboard(data) {
+			thorui.getClipboardData(data, res => {
+				if (res) {
+					this.$util.msg('复制成功', 2000, true, 'success')
+				} else {
+					this.$util.msg('复制失败', 2000, true, 'none')
+				}
+			})
+		}
+	}
+}
+</script>
+
+<style lang="scss">
+.information-template {
+	width: 100%;
+	height: auto;
+	background: #ffffff;
+	float: left;
+	margin-top: 24rpx;
+	.information-content {
+		width: 702rpx;
+		padding: 15rpx 24rpx 20rpx 24rpx;
+		.information-view {
+			height: 50rpx;
+			line-height: 50rpx;
+			font-size: $font-size-24;
+			margin: 4rpx 0;
+			// display: flex;
+			width: 55%;
+			display: inline-block;
+			&.same {
+				width: 45%;
+				text-align: right;
+			}
+			&.none {
+				width: 100%;
+				text-align: left;
+			}
+			// &.title{
+			// 	height: 68rpx;
+			// 	line-height: 68rpx;
+			// 	margin-bottom: 5rpx;
+			// }
+			view {
+				// flex: 1;
+				color: $text-color;
+				color: #999999;
+				.label {
+					color: #666666;
+				}
+			}
+			.view-num.title {
+				height: 68rpx;
+				line-height: 68rpx;
+				position: relative;
+				.bage-icon {
+					width: 50rpx;
+					height: 50rpx;
+					display: block;
+					position: absolute;
+					right: 0;
+					top: 9rpx;
+				}
+				.bage-buss {
+					display: inline-block;
+					width: 72rpx;
+					height: 30rpx;
+					background: radial-gradient(circle, rgba(255, 39, 180, 1) 0%, rgba(193, 77, 245, 1) 100%);
+					border-radius: 4rpx;
+					line-height: 30rpx;
+					font-size: $font-size-24;
+					text-align: center;
+					color: #ffffff;
+					margin-top: 10rpx;
+				}
+				.bage-auto {
+					display: inline-block;
+					width: 72rpx;
+					height: 30rpx;
+					background: radial-gradient(circle, rgba(255, 180, 39, 1) 0%, rgba(245, 142, 77, 1) 100%);
+					border-radius: 4rpx;
+					line-height: 30rpx;
+					font-size: $font-size-24;
+					text-align: center;
+					color: #ffffff;
+					margin-top: 10rpx;
+				}
+				.bage-text {
+					display: inline-block;
+					font-size: $font-size-28;
+					line-height: 68rpx;
+					text-align: left;
+					color: $color-system;
+					// margin-left: 10rpx;
+				}
+			}
+			.view-num.ord {
+				color: $color-system;
+				text-align: left;
+				flex: 3;
+				font-weight: bold;
+			}
+			.view-num.time {
+				color: #999999;
+				flex: 6;
+			}
+			// .bold{
+			// 	font-weight: bold;
+			// }
+			.red {
+				color: #ff2a2a;
+			}
+			.view-type {
+				float: right;
+				text-align: right;
+				color: #ff2a2a;
+				flex: 4;
+			}
+			.clipboard {
+				width: 84rpx;
+				height: 36rpx;
+				background: linear-gradient(34deg, rgba(255, 41, 41, 1) 0%, rgba(255, 109, 27, 1) 100%);
+				text-align: center;
+				font-size: $font-size-24;
+				color: #ffffff;
+				border-radius: 6rpx;
+				line-height: 36rpx;
+				display: inline-block;
+				margin-left: 42rpx;
+			}
+		}
+	}
+}
+.openinfo {
+	width: 100%;
+	height: 48rpx;
+	margin-bottom: 30rpx;
+	.btnInfo {
+		width: 168rpx;
+		height: 48rpx;
+		line-height: 46rpx;
+		box-sizing: border-box;
+		border: 2rpx solid #e1e1e1;
+		border-radius: 8rpx;
+		text-align: center;
+		color: #b2b2b2;
+		margin: 0 auto;
+		font-size: $font-size-24;
+	}
+}
+</style>

+ 245 - 0
pages/seller/order/components/details/orderListButton.vue

@@ -0,0 +1,245 @@
+<template name="button">
+	<view class="button-template">
+		<!-- 底部按钮 -->
+		<view class="button-content">
+			<view class="btn btn-pay" v-if="btnState.isPay" @click.stop="btnConfirm('pay',order)">付款</view>
+			<view class="btn btn-cancel" v-if="order.checkFlag === 1" @click.stop="btnConfirm('upload',order)">上传凭证</view>
+			<!-- <view class="btn btn-confirm" v-if="btnState.isConfirmation" @click.stop="btnConfirm('confirmation',order)">确认订单</view> -->
+			<view class="btn btn-share"  @click.stop="onShareCode(order.orderId)">分享订单</view>
+			<view class="btn btn-cancel" v-if="btnState.isCancel" @click.stop="btnConfirm('cancel',order)">取消订单</view>
+			<!-- <view class="btn btn-delete" v-if="btnState.isDelete" @click.stop="btnConfirm('delete',order)">删除订单</view> -->
+			<view class="btn btn-query" v-if="btnState.isQuery" @click.stop="btnConfirm('query',order)">查看物流</view>
+			<view class="btn btn-firm" v-if="btnState.isConfirm" @click.stop="btnConfirm('confirm',order)">
+				确认收货
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default{
+		name:"button",
+		props:{
+			status: {
+				type:Number
+			},
+			order: {
+				type:Object
+			},
+		},
+		data() {
+			return{
+				isShare:true,
+				shareCode:'',
+				btnState:this.initStatus(),
+				mapStateArr:[
+					{label:'isQuery',val:[4,5,12,13,33,22,23,32,77],status: true},
+					{label:'isDelete',val:[6],status: true},
+					{label:'isCancel',val:[0,111],status: true},
+					{label:'isConfirm',val:[33],status: true},
+					{label:'isConfirmation',val:[0],status: true},
+					{label:'isPay',val:[11,12,13,21,22,23,111],status: true},
+					{label:'isUpload',val:[11,12,13,21,22,23,111],status: true},
+				]
+			}
+		},
+		created(){
+			this.initData(this.status)
+		},
+		computed: {
+
+		},
+		watch:{
+			status:{
+				handler:function(val){
+					this.initData(val)
+				},
+				deep:true//对象内部的属性监听,也叫深度监听
+			}
+		},
+		methods:{
+			initData(resVal) {
+				/**
+				 * @分享按钮统一显示
+				 * @按钮根据状态显示
+				 * @(4、5、7、12、22、23、32)显示[查看物流]按钮,其他隐藏
+				 * @(6)显示[删除订单],其他隐藏
+				 * @(0、111)显示[取消订单],其他隐藏
+				 * @(21,31)只显示分享
+				 * @(13,33)显示[确认收货]和[查看物流]
+				 */
+				this.btnState = this.initStatus()
+				this.mapStateArr.forEach(el => {
+					el.val.forEach(value => {
+						if(resVal === value){
+							this.btnState[el.label] = el.status
+						}
+					})
+				})
+			},
+			initStatus(){
+				let btnState= {
+						isQuery: false,
+						isDelete: false,
+						isCancel: false,
+						isConfirm: false,
+						isShare: true,
+						isConfirmation:false,
+					}
+				return 	btnState
+			},
+			getShareCode(code){
+				this.shareCode = code
+			},
+			onShareCode(orderId){
+				this.$parent.isShareModal = true
+				this.$parent.handleOrderId = orderId
+				this.$emit('shareConfirm')
+			},
+			btnConfirm(type,order){
+				let data = {
+						type:type,
+						orderId:order.orderId,
+						order:order
+					}
+				this.$emit('buttonConfirm',data)
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.button-template{
+		width: 100%;
+		height: auto;
+		float: left;
+		background: #FFFFFF;
+		.button-content{
+			height: auto;
+			float: right;
+			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: 150rpx;
+				height:  64rpx;
+				margin: 22rpx 0 20rpx 20rpx;
+				line-height: 64rpx;
+				font-size:$font-size-26;
+				color: #999999;
+				text-align: center;
+				float: right;
+				border-radius: 34rpx;
+				border: 2rpx solid #999999;
+				&.btn-payment{
+					line-height: 38rpx;
+					font-size: 24rpx;
+					background: #f9a94b;
+					color: #fff;
+					border: 2rpx solid #f9a94b;
+					text{
+						display: block;
+						line-height: 15rpx;
+					}
+				}
+			}
+			.btn-color{
+				background: $btn-confirm;
+				// margin: 22rpx 0 22rpx 22rpx;
+			}
+			.btn-cancel{
+				// background:#FFFFFF;
+				// color: #999999;
+				// float: left;
+				// margin: 22rpx 0;
+				text-align: center;
+			}
+			// .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:#ff7a51;
+				border-color:#ff7a51;
+				color: #FFFFFF;
+			}
+			.btn-pay{
+				background:$btn-confirm;
+				margin-right: 0;
+				border: 2rpx solid $btn-confirm;
+				color: #fff;
+			}
+			.btn-firm{
+				position:relative;
+				.tips{
+					width: 74rpx;
+					height: 32rpx;
+					line-height: 32rpx;
+					padding: 0 7rpx;
+					border-radius: 16rpx;
+					background-color: #ffe6dc;
+					color: $color-system;
+					text-align: center;
+					font-size: $font-size-20;
+					position:absolute;
+					right: 0;
+					top: -40rpx;
+					z-index: 90;
+					.line{
+						display: block;
+						width: 20rpx;
+						height: 20rpx;
+						background-color: #ffe6dc;
+						position: relative;
+						bottom: 18rpx;
+						left: 15rpx;
+						z-index: -1;
+						transform:rotate(45deg);
+					}
+				}
+			}
+			.btn-share{
+				// background:linear-gradient(315deg,rgba(0,212,150,1) 0%,rgba(126,243,174,1) 100%);
+				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>

+ 159 - 0
pages/seller/order/components/details/paymentRecord.vue

@@ -0,0 +1,159 @@
+<template name="record">
+	<view class="record-template">
+		<!-- 支付记录 -->
+		<view class="record-content">
+			<view class="record-title">
+				<view class="record-title-l">支付记录</view>
+				<view class="record-title-r" v-if="!isEmpty">
+					已支付:<text class="red">¥{{ receiptAmount != null ? receiptAmount.toFixed(2): '0.00'}}</text>
+				</view>
+			</view>
+			<view class="record-empty" v-if="isEmpty">
+			 	<text>暂无支付记录</text>
+			</view>
+			<view class="record-list" v-else>
+				<view class="record-item" v-for="(record,index) in discernReceiptList" :key="index">
+					<view class="record-item-t">
+						<view class="item-time mm">¥{{record.associateAmount.toFixed(2)}}</view>
+					</view>
+					<view class="record-item-t">
+						<view class="item-time tt">{{ record.receiptDate }}</view>
+						<view class="item-time pp">{{ payTypeText(record) }}</view>
+					</view>	
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default{
+		name:'record',
+		props:{
+			discernReceiptList:{
+				type:Array
+			},
+			receiptAmount:{
+				type:Number
+			}
+		},
+		data() {
+			return{
+				isEmpty:false,
+				paymentData:'',
+				typeText:'',
+				isOpen:false,
+			}
+		},
+		created(){
+			this.initData(this.discernReceiptList)
+		},
+		computed: {
+
+		},
+		methods:{
+			initData(res) {
+				if(res!=''){
+					this.isEmpty = false
+					this.paymentData = res
+				}else{
+					this.isEmpty = true
+				}
+			},
+			payTypeText(record) {
+				//处理支付记录文字
+				const map = {
+					12: '企业网银',
+					13: '微信支付',
+					14: '支付宝',
+					15: '微信支付',
+					16: '余额抵扣',
+				}
+				if(record.payType === 28 || record.payType === 29 ){
+					return record.quickPayStr
+				}else{
+					return map[record.payType]
+				}
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.record-template{
+		width: 100%;
+		height: auto;
+		background: #FFFFFF;
+		float: left;
+		margin-top: 24rpx;
+		.record-content{
+			width: 702rpx;
+			padding: 20rpx 24rpx;
+			height: auto;
+			.record-title{
+				width: 100%;
+				font-size: $font-size-28;
+				color: $text-color;
+				text-align: left;
+				line-height: 40rpx;
+				margin-bottom: 12rpx;
+				float: left;
+				.record-title-l{
+					font-weight: bold;
+					float: left;
+				}
+				.record-title-r{
+					float: right;
+					.red{
+						color: #FF2A2A;
+						font-weight: bold;
+					}
+				}
+			}
+			.record-empty{
+				font-size: $font-size-28;
+				color: $text-color;
+				text-align: left;
+				line-height: 40rpx;
+			}
+			.record-list{
+				width: 100%;
+				height: auto;
+				float: left;
+				margin-top: 12rpx;
+				.record-item{
+					height: auto;
+					width: 100%;
+					padding: 12rpx 0;
+					font-size: $font-size-28;
+					float: left;
+					.record-item-t{
+						width: 100%;
+						height: 40rpx;
+						display: flex;
+						justify-content: center;
+						flex-direction: row;
+						.item-time{
+							line-height: 48rpx;
+							&.mm{
+								flex: 1;
+								color: $text-color;
+								text-align: left;
+							}
+							&.pp{
+								flex: 5;
+								color: #999999;
+								text-align: right;
+							}
+							&.tt{
+								flex: 5;
+								color: #999999;
+								text-align: left;
+							}
+						}
+					}
+				}
+			}
+		}
+	}
+</style>

+ 120 - 0
pages/seller/order/components/details/refundRecord.vue

@@ -0,0 +1,120 @@
+<template name="refund">
+	<view class="record-template" v-if="isEmpty">
+		<!-- 支付记录 -->
+		<view class="record-content">
+			<view class="record-title">
+				<view class="record-title-l">退款记录</view>
+				<view class="record-title-r">
+					已退款:<text class="red">¥{{ returnedPurchaseFee != null ? returnedPurchaseFee.toFixed(2) : '0.00'}}</text>
+				</view>
+			</view>
+			<view class="record-list">
+				<view class="record-item" v-for="(item,index) in returnedPurchaseList" :key="index">
+					<view class="item-nums">{{item.returnedWay =='4' ? '无支付无退款' : '¥'+item.refundFee.toFixed(2)}}</view>
+					<view class="item-time">{{item.confirmReturnTime}}</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default{
+		name:"refund",
+		props:{
+			returnedPurchaseList:{
+				type:Array
+			},
+			returnedPurchaseFee:{
+				type:Number
+			}
+		},
+		data() {
+			return{
+				isEmpty:false,
+				isOpen:false,
+			}
+		},
+		created(){
+			this.initData(this.returnedPurchaseList)
+		},
+		computed: {
+		
+		},
+		methods:{
+			initData(res) {
+				if(res!=''){
+					this.isEmpty = true
+				}else{
+					this.isEmpty = false
+					this.refundData = res;
+				}
+			},
+		}
+	}
+</script>
+
+<style lang="scss">
+	.record-template{
+		width: 100%;
+		height: auto;
+		background: #FFFFFF;
+		float: left;
+		margin-top: 24rpx;
+		padding-bottom: 40rpx;
+		.record-content{
+			width: 702rpx;
+			padding: 20rpx 24rpx;
+			height: auto;
+			.record-title{
+				width: 100%;
+				font-size: $font-size-28;
+				color: $text-color;
+				text-align: left;
+				line-height: 40rpx;
+				margin-bottom: 12rpx;
+				float: left;
+				.record-title-l{
+					font-weight: bold;
+					float: left;
+				}
+				.record-title-r{
+					float: right;
+					.red{
+						color: #FF2A2A;
+						font-weight: bold;
+					}
+				}
+			}
+			.record-empty{
+				font-size: $font-size-28;
+				color: $text-color;
+				text-align: left;
+				line-height: 40rpx;
+			}
+			.record-list{
+				width: 100%;
+				height: auto;
+				float: left;
+				margin-top: 12rpx;
+				.record-item{
+					height: 40rpx;
+					width: 100%;
+					padding: 12rpx 0;
+					font-size: $font-size-28;
+					line-height: 40rpx;
+					float: left;
+					.item-time{
+						float: right;
+						color: #999999;
+					}
+					.item-nums{
+						font-weight: bold;
+						float: left;
+						color: $text-color;
+					}
+				}
+			}
+		}
+	}
+</style>

+ 150 - 0
pages/seller/order/components/details/voucherRecord.vue

@@ -0,0 +1,150 @@
+<template name="refund">
+	<view class="record-template" v-if="isEmpty">
+		<!-- 支付凭证 -->
+		<view class="record-content">
+			<view class="record-title">线下支付凭证</view>
+			<view class="record-list" v-for="(item,index) in voucherList">
+				<view class="record-list-time">{{ item.addtime }}</view>
+				<scroll-view scroll-x>
+					<view class="tui-goods__list">
+						<view class="tui-goods__item" @click.stop="previewImg(image.img)" v-for="image in item.imgs">
+							<view class="tui-goods__imgbox">
+								<image :src="image.img" mode="" class="tui-goods__img"></image>
+							</view>
+						</view>
+					</view>
+				</scroll-view>
+				<view class="record-list-tmk">
+					备注:{{ item.remarks }}
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default{
+		name:"refund",
+		props:{
+			list:{
+				type:Array
+			},
+		},
+		data() {
+			return{
+				isEmpty:true,
+				voucherList:[]
+			}
+		},
+		created(){
+			this.initData(this.list)
+		},
+		computed: {
+		
+		},
+		methods:{
+			initData(data) {
+				this.voucherList = data
+			},
+			previewImg (image) {//顶部商品图片预览
+				this.isPreviewImage = true
+				let urls = []
+				urls.push(image)
+				uni.previewImage({
+					urls: urls,
+					current: 0
+				})
+			},
+		}
+	}
+</script>
+
+<style lang="scss">
+	.record-template{
+		width: 100%;
+		height: auto;
+		background: #FFFFFF;
+		float: left;
+		margin-top: 24rpx;
+		padding-bottom: 40rpx;
+		.record-content{
+			width: 100%;
+			padding: 24rpx;
+			box-sizing: border-box;
+			height: auto;
+			.record-title{
+				width: 100%;
+				font-size: $font-size-28;
+				color: $text-color;
+				text-align: left;
+				line-height: 40rpx;
+				margin-bottom: 12rpx;
+				float: left;
+				font-weight: bold;
+				padding: 24rpx 0;
+				box-sizing: border-box;
+			}
+			.record-list{
+				width: 100%;
+				padding: 0 24rpx 24rpx;
+				box-sizing: border-box;
+				overflow: hidden;
+				.record-list-time{
+					width: 100%;
+					line-height: 37rpx;
+					text-align: left;
+					display: flex;
+					align-items: center;
+					justify-content: space-between;
+					color: #666666;
+					font-size: $font-size-26;
+					margin-bottom: 20rpx;
+				}
+				.record-list-tmk{
+					width: 100%;
+					line-height: 37rpx;
+					text-align: justify;
+					display: flex;
+					align-items: center;
+					justify-content: space-between;
+					color: #999999;
+					font-size: $font-size-26;
+					margin-top: 20rpx;
+				}
+			}
+		}
+	}
+	.tui-goods__list {
+		display: flex;
+		align-items: center;
+	}
+	.tui-goods__item {
+		background-color: #fff;
+		width: 210rpx;
+		height: 210rpx;
+		border-radius: 6rpx;
+		box-sizing: border-box;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		flex-direction: column;
+		flex-shrink: 0;
+		margin-right: 18rpx;
+		border:1px solid #B8BFCA;
+	}
+	.tui-goods__imgbox {
+		width: 210rpx;
+		height: 210rpx;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		box-sizing: border-box;
+		border-radius: 8rpx;
+	}
+	
+	.tui-goods__img {
+		width: 210rpx;
+		height: 210rpx;
+		display: block;
+	}
+</style>

+ 48 - 0
pages/seller/order/components/empty.vue

@@ -0,0 +1,48 @@
+<template>
+	<view class="empty-content">
+		<image class="empty-content-image" :src="staticUrl+'icon_order_empty@2x.png'" mode="aspectFit"></image>
+		<text class="error-text">您还没有任何的订单哟~</text>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				staticUrl:this.global.staticUrl,
+			}
+		},
+		created(){
+			
+		},
+		computed: {
+			
+		},
+	}
+</script>
+
+<style lang="scss">
+	.empty-content {
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		flex-direction: column;
+		position: fixed;
+		top: 0;
+		left: 0;
+		bottom: 0;
+		right: 0;
+		margin: auto;
+		background: $bg-color;
+		z-index: 999;
+		&-image {
+			width: 386rpx;
+			height: 286rpx;
+		}
+		.error-text{
+			font-size: $font-size-28;
+			color: $text-color;
+			line-height: 88rpx;
+		}
+	}
+</style>

+ 202 - 0
pages/seller/order/components/sellerAddress.vue

@@ -0,0 +1,202 @@
+<template name="address">
+	<view class="address-template">
+		 <!-- 地址 -->
+		 <navigator :url="addressSrc" class="address-section">
+			<view class="address-empty" v-if="isEmpty">
+			 	<text>添加收货地址</text><text class="iconfont icon-tianjiadizhi"></text>
+			</view>
+		 	<view class="address-content" v-else>
+		 		<view class="address-cen">
+		 			<view class="top">
+		 				<view class="name">{{addressData.receiver  ? addressData.receiver : ''}}</view>
+		 				<view class="mobile">{{addressData.mobile  ? addressData.mobile : ''}}</view>
+		 			</view>
+		 			<view class="address">
+						<view class="address-icon">
+							<text class="iconfont icon-shouhuodizhi"></text>
+						</view>
+						<view class="address-text">
+							收货地址:
+							{{addressData.province ? addressData.province : ''}}
+							{{addressData.city ? addressData.city : ''}}
+							{{addressData.town ? addressData.town : ''}}
+							{{addressData.address ? addressData.address : ''}}
+						</view>
+					</view>
+					<view class="nexpage"><text class="iconfont icon-genghuan"></text></view>
+		 		</view>
+		 	</view>
+		 </navigator>
+		 <image  src="../../../static/temp/line@3x.png" mode=""></image>
+	</view>
+</template>
+
+<script>
+	export default{
+		name:"address",
+		props:{
+			addressData:{
+				type:Object
+			}
+		},
+		data() {
+			return{
+				isEmpty:false,
+				addressSrc:'',
+			}
+		},
+		created(){
+			this.initData(this.addressData)
+		},
+		computed: {
+
+		},
+		watch:{
+			addressData:{
+				handler:function(val){
+					this.initData(val)
+				}
+			}
+		},
+		methods:{
+			initData(res) {
+				if(Object.keys(res).length == 0){
+					this.isEmpty = true
+					this.addressSrc = '/pages/seller/address/addressManage'
+				}else{
+					this.isEmpty = false
+					this.$parent.isFreight = false
+					this.addressSrc = '/pages/seller/address/address?type=select'
+				}
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.address-template{
+		width: 100%;
+		height: auto;
+		background: #FFFFFF;
+		border-top: 1px solid #F8F8F8;
+		image{
+			float: left;
+			width: 100%;
+			height: 16rpx;
+		}
+	}
+	.address-section {
+		width: 100%;
+		height: auto;
+		float: left;
+		position: relative;
+		
+		.address-empty{
+			width: 100%;
+			height: 84rpx;
+			line-height: 84rpx;
+			color: $color-system;
+			text-align: center;
+			font-size: $font-size-26;
+			font-weight: bold;
+			background: #fff;
+			float: left;
+			.icon-tianjiadizhi{
+				font-size: 30rpx;
+				margin: 0 8rpx;
+			}
+		}
+		.address-content {
+			display: flex;
+			align-items: center;
+			padding:20rpx 24rpx;
+			background: #fff;
+		}
+		
+		.icon-shouhuodizhi {
+			flex-shrink: 0;
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			width: 40rpx;
+			color: $color-system;
+			font-size: 46rpx;
+			margin-right: 10rpx;
+		}	
+		.address-cen {
+			width: 100%;
+			height: auto;
+			position: relative;
+			.top{
+				padding-left: 50rpx;
+				height: 42rpx;
+				line-height: 42rpx;
+				text-align: left;
+				font-size: $font-size-30;
+				color: $text-color;
+				padding-bottom: 8rpx;
+				display: flex;
+				float: left;
+				.name{
+					font-weight: bold;
+					margin-right: 48rpx;
+				}
+				.mobile{
+					margin-right: 40rpx;
+					font-weight: bold;
+				}
+			}
+			.address {
+				width: 100%;
+				height: auto;
+				float: left;
+				.address-icon{
+					width: 40rpx;
+					height: auto;
+					float: left;
+					line-height: 40rpx;
+				}
+				.address-text{
+					width: 610rpx;
+					padding-left: 10rpx;
+					float: left;
+					line-height: 40rpx;
+					font-size: $font-size-28;
+					color: $text-color;
+					text-align: left;
+					-o-text-overflow: ellipsis;
+					text-overflow: ellipsis;
+					display: -webkit-box;
+					word-break: break-all;
+					-webkit-box-orient: vertical;
+					-webkit-line-clamp: 2;
+					overflow: hidden;
+				}
+			}
+			.nexpage{
+				text-align: right;
+				font-size: $font-size-30;
+				color: $color-system;
+				position: absolute;
+				right: 0;
+				top: 45rpx;
+				.icon-genghuan{
+					font-size: $font-size-30;
+				}
+			}
+		}
+		.icon-xiayibu {
+			font-size: 32rpx;
+			color: $text-color;
+			margin-right: 30rpx;
+		}
+		.a-bg {
+			position: absolute;
+			left: 0;
+			bottom: 0;
+			display: block;
+			width: 100%;
+			height: 5rpx;
+		}
+	}
+</style>

+ 165 - 0
pages/seller/order/components/sellerClubVisible.vue

@@ -0,0 +1,165 @@
+<template name="Visible">
+	<view class="orderVisible-template">
+		<!-- 订单对机构是否可见 -->
+		<view class="visible-title" @tap.stop="showPopup">
+			<text class="orderVisible">订单对机构是否可见</text>
+			<view class="visible-right">
+				<text class="text-l">{{ orderVisibleText }}</text> <text class="iconfont icon-xiayibu"></text>
+			</view>
+		</view>
+		<!-- 优惠券 -->
+		<tui-bottom-popup :radius="true" :show="popupShow" @close="hidePopup">
+			<view class="tui-popup-box clearfix" :style="{ paddingBottom: isIphoneX ? '68rpx' : '34rpx' }">
+				<view class="tui-popup-content">
+					<radio-group @change="radioChange">
+						<label class="uni-list-cell uni-list-cell-pd" v-for="(item, index) in items" :key="item.value">
+							<view class="uni-list-text">{{ item.name }}</view>
+							<view class="uni-list-radio">
+								<radio
+									:value="item.value"
+									:checked="index === current"
+									color="#FF5B00"
+									style="transform:scale(0.7)"
+								/>
+							</view>
+						</label>
+					</radio-group>
+				</view>
+				<view class="tui-right-flex tui-popup-btn">
+					<view class="tui-flex-1"> <view class="tui-button" @click="hidePopup">确定</view> </view>
+				</view>
+			</view>
+		</tui-bottom-popup>
+	</view>
+</template>
+
+<script>
+export default {
+	name: 'Visible',
+	props: {},
+	data() {
+		return {
+			StaticUrl: this.$Static, //静态图片路径
+			isIphoneX: this.$store.state.isIphoneX,
+			popupShow: false,
+			orderVisibleText: '可见',
+			orderVisibleValue: '1',
+			items: [
+				{
+					value: '1',
+					name: '可见',
+				},
+				{
+					value: '2',
+					name: '不可见'
+				}
+			],
+			current: 0
+		}
+	},
+	created() {},
+	methods: {
+		showPopup() {
+			this.popupShow = true
+		},
+		radioChange(evt) {
+			console.log('radioChange',evt)
+			for (let i = 0; i < this.items.length; i++) {
+				if (this.items[i].value === evt.detail.value) {
+					this.current = i
+					this.orderVisibleText = this.items[i].name
+					this.orderVisibleValue = Number(this.items[i].value)
+					console.log('orderVisibleText',this.orderVisibleText)
+				}
+			}
+		},
+		hidePopup() {
+			this.popupShow = false
+			this.$emit('handleClubVisible', this.orderVisibleValue)
+		}
+	}
+}
+</script>
+
+<style lang="scss">
+.orderVisible-template {
+	width: 100%;
+	height: auto;
+	background: #ffffff;
+	float: left;
+	.visible-title {
+		width: 702rpx;
+		padding: 0 24rpx;
+		height: 88rpx;
+		line-height: 88rpx;
+		position: relative;
+		font-size: $font-size-28;
+		font-weight: bold;
+		border-bottom: 1px solid #ebebeb;
+		.orderVisible {
+			font-size: $font-size-28;
+			color: $text-color;
+			font-weight: bold;
+		}
+		.visible-right {
+			float: right;
+			color: #2a81ff;
+			.text-l {
+				margin-right: 40rpx;
+			}
+			.iconfont {
+				width: 50rpx;
+				height: 88rpx;
+				line-height: 88rpx;
+				color: #999999;
+				display: block;
+				position: absolute;
+				right: 0;
+				top: 0;
+			}
+		}
+	}
+}
+.tui-popup-box {
+	position: relative;
+	box-sizing: border-box;
+	min-height: 220rpx;
+	padding: 24rpx 24rpx 0 24rpx;
+	.tui-popup-content {
+		width: 100%;
+		height: 168rpx;
+		.uni-list-cell {
+			width: 100%;
+			height: 66rpx;
+			line-height: 66rpx;
+			display: block;
+			.uni-list-radio {
+				float: right;
+				height: 66rpx;
+			}
+			.uni-list-text {
+				float: left;
+				height: 66rpx;
+				font-size: $font-size-28;
+				color: #333;
+			}
+		}
+	}
+	.tui-popup-btn {
+		width: 100%;
+		height: auto;
+		float: left;
+		margin-top: 24rpx;
+		.tui-button {
+			width: 100%;
+			height: 88rpx;
+			background: $btn-confirm;
+			line-height: 88rpx;
+			text-align: center;
+			color: #ffffff;
+			font-size: $font-size-28;
+			border-radius: 44rpx;
+		}
+	}
+}
+</style>

+ 466 - 0
pages/seller/order/components/sellerCoupon.vue

@@ -0,0 +1,466 @@
+<template name="coupon">
+	<view class="coupon-template">
+		<view class="coupon-title" @tap.stop="showPopup">
+			<text class="text">优惠券:</text> <text class="text-coupon">-¥{{ coupon.couponAmount | NumFormat }}</text>
+			<text class="iconfont icon-xiayibu"></text>
+		</view>
+		<!-- 优惠券 -->
+		<tui-bottom-popup :radius="true" :show="popupShow" @close="hidePopup">
+			<view class="tui-popup-box clearfix">
+				<view class="title">
+					<view class="title-l">优惠券</view>
+					<view class="title-r" @click="showExchangePopup">兑换优惠券</view>
+				</view>
+				<div class="tui-popup-main coupon">
+					<scroll-view class="tui-popup-scroll" scroll-y="true">
+						<view class="coupon-empty" v-if="isCouponEmpty">
+							<image
+								class="empty-container-image"
+								:src="StaticUrl + '/icon/icon-coupon-empty@2x.png'"
+							></image>
+							<text class="error-text">暂无可用优惠券~</text>
+						</view>
+						<template>
+							<view
+								v-for="(coupon, index) in dataList"
+								:key="index"
+								class="coupon-list"
+								@click.stop="checkedCoupon(index)"
+								v-if="dataList.length > 0"
+							>
+								<view class="list-cell-le">
+									<view class="coupon-maxMoney">
+										<text class="small">¥</text> {{ coupon.couponAmount }}
+									</view>
+									<view class="coupon-minMoney"> 满{{ coupon.touchPrice }}可用 </view>
+								</view>
+								<view class="list-cell-ri">
+									<view class="list-cell-top">
+										<view class="list-cell-type">
+											<view class="list-cell-tags">
+												<template v-if="coupon.moneyCouponFlag == 1">
+													<text class="tags" v-if="coupon.moneyCouponType == 1"
+														>意向{{ coupon.couponType | TypeFormat }}</text
+													>
+													<text class="tags" v-else
+														>定向{{ coupon.couponType | TypeFormat }}</text
+													>
+												</template>
+												<template v-else>
+													<text class="tags">{{ coupon.couponType | TypeFormat }}</text>
+												</template>
+											</view>
+											<view class="list-cell-texts">
+												<text v-if="coupon.couponType == 0">
+													{{
+														coupon.productType && coupon.productType == 1
+															? '全商城商品通用'
+															: '仅可购买指定商品'
+													}}
+												</text>
+												<text v-if="coupon.couponType == 1">
+													{{
+														coupon.categoryType == 1
+															? '仅限购买产品类商品'
+															: '仅限购买仪器类商品'
+													}}
+												</text>
+												<text v-if="coupon.couponType == 3"
+													>仅限购买店铺【{{ coupon.shopName }}】的商品</text
+												>
+												<text v-if="coupon.couponType == 4 || coupon.couponType == 2"
+													>全商城商品通用</text
+												>
+											</view>
+										</view>
+										<view class="list-cell-btn">
+											<view class="list-cell-checkbox">
+												<view
+													class="checkbox iconfont"
+													:class="[coupon.ischecked ? 'icon-yixuanze' : 'icon-weixuanze']"
+												>
+												</view>
+											</view>
+										</view>
+									</view>
+									<view class="list-cell-time">{{ coupon.startDate }} - {{ coupon.endDate }}</view>
+								</view>
+							</view>
+						</template>
+					</scroll-view>
+				</div>
+				<view class="tui-right-flex tui-popup-btn" :style="{ paddingBottom: isIphoneX ? '68rpx' : '34rpx' }">
+					<view class="tui-flex-1"> <view class="tui-button" @click="hidePopup">确定</view> </view>
+				</view>
+			</view>
+		</tui-bottom-popup>
+	</view>
+</template>
+
+<script>
+export default {
+	name: 'coupon',
+	props: {
+		couponList: {
+			type: Array
+		}
+	},
+	data() {
+		return {
+			StaticUrl: this.$Static, //静态图片路径
+			isIphoneX: this.$store.state.isIphoneX,
+			popupShow: false,
+			isCouponEmpty: false,
+			checkedIndex: null,
+			dataList: [],
+			coupon: {
+				couponAmount: 0,
+				clubCouponId: 0
+			}
+		}
+	},
+	filters: {
+		NumFormat(value) {
+			//处理金额
+			return Number(value).toFixed(2)
+		},
+		TypeFormat(value) {
+			switch (value) {
+				case 0:
+					return '活动券'
+					break
+				case 1:
+					return '品类券'
+					break
+				case 2:
+					return '用户专享券'
+					break
+				case 3:
+					return '店铺券'
+					break
+				case 4:
+					return '新用户券'
+					break
+			}
+		}
+	},
+	created() {
+		this.initData(this.couponList)
+	},
+	watch: {
+		couponList: {
+			handler: function(el) {
+				//监听对象的变换使用 function,箭头函数容易出现this指向不正确
+				console.log(el)
+				this.couponList = el
+			},
+			deep: true
+		}
+	},
+	methods: {
+		initData(data) {
+			if (data.length > 0) {
+				data.forEach((el, index) => {
+					this.dataList.push(Object.assign({}, el, { ischecked: false }))
+				})
+				this.coupon.couponAmount = data[0].couponAmount
+				this.dataList[0].ischecked = true
+				this.isCouponEmpty = false
+			} else {
+				this.isCouponEmpty = true
+			}
+		},
+		checkedCoupon(idx) {
+			// 选择优惠券
+			this.checkedIndex = idx
+			this.dataList.forEach((el, index) => {
+				if (this.checkedIndex == index) {
+					el.ischecked = !el.ischecked
+				} else {
+					el.ischecked = false
+				}
+			})
+		},
+		showExchangePopup() {
+			this.popupShow = false
+			this.$parent.isExchangePopup = true
+		},
+		showPopup() {
+			if (this.$parent.rebatecheck) {
+				this.$util.msg('返佣订单不能使用优惠券', 2000)
+			} else {
+				this.popupShow = true
+			}
+		},
+		hidePopup() {
+			this.popupShow = false
+			let coupon = {
+				couponAmount: 0,
+				clubCouponId: 0
+			}
+			this.dataList.forEach((el, index) => {
+				if (el.ischecked) {
+					coupon.couponAmount = el.couponAmount
+					coupon.clubCouponId = el.clubCouponId
+				}
+			})
+			this.coupon = coupon
+			this.$emit('handleChoiceaCoupon', this.coupon)
+		}
+	}
+}
+</script>
+
+<style lang="scss">
+.coupon-template {
+	width: 100%;
+	height: auto;
+	background: #ffffff;
+	float: left;
+	margin-top: 24rpx;
+	.coupon-title {
+		width: 702rpx;
+		padding: 0 24rpx;
+		height: 88rpx;
+		line-height: 88rpx;
+		position: relative;
+		.text {
+			font-size: $font-size-28;
+			color: $text-color;
+			font-weight: bold;
+		}
+		.text-coupon {
+			display: inline-block;
+			float: right;
+			padding-right: 30rpx;
+			line-height: 88rpx;
+			font-size: 28rpx;
+			color: #f94b4b;
+		}
+		.iconfont {
+			width: 50rpx;
+			height: 88rpx;
+			line-height: 88rpx;
+			color: #999999;
+			display: block;
+			position: absolute;
+			right: 0;
+			top: 0;
+		}
+	}
+}
+.tui-popup-box {
+	position: relative;
+	box-sizing: border-box;
+	min-height: 220rpx;
+	padding: 24rpx 24rpx 0 24rpx;
+	.title {
+		font-size: $font-size-34;
+		color: $text-color;
+		line-height: 88rpx;
+		text-align: center;
+		float: left;
+		width: 100%;
+		height: 88rpx;
+		display: flex;
+		box-sizing: border-box;
+		padding: 0 24rpx;
+		.title-l {
+			flex: 1;
+			text-align: left;
+		}
+		.title-r {
+			flex: 1;
+			text-align: right;
+			color: #f94b4b;
+		}
+	}
+	.tui-popup-main {
+		width: 100%;
+		float: left;
+		padding-top: 10rpx;
+		.tui-popup-scroll {
+			width: 100%;
+			height: 600rpx;
+			.coupon-empty {
+				width: 100%;
+				height: 600rpx;
+				display: flex;
+				align-items: center;
+				justify-content: center;
+				flex-direction: column;
+				position: fixed;
+				background: $bg-color;
+				.empty-container-image {
+					width: 150rpx;
+					height: 150rpx;
+					margin-bottom: 0;
+					margin-top: 0;
+				}
+				.error-text {
+					font-size: $font-size-28;
+					color: #999999;
+					line-height: 88rpx;
+				}
+			}
+			.coupon-list {
+				width: 100%;
+				height: 200rpx;
+				margin-bottom: 24rpx;
+				box-sizing: border-box;
+				background: url(https://static.caimei365.com/app/img/icon/icon-coupon-uesb@2x.png);
+				background-size: cover;
+				.list-cell-le {
+					width: 224rpx;
+					height: 100%;
+					box-sizing: border-box;
+					padding: 37rpx 0;
+					float: left;
+					.coupon-maxMoney {
+						width: 100%;
+						height: 78rpx;
+						line-height: 78rpx;
+						font-size: 56rpx;
+						color: #ffffff;
+						text-align: center;
+						.small {
+							font-size: $font-size-24;
+						}
+					}
+					.coupon-minMoney {
+						width: 100%;
+						height: 33rpx;
+						line-height: 33rpx;
+						font-size: $font-size-24;
+						color: #ffffff;
+						text-align: center;
+					}
+				}
+				.list-cell-ri {
+					width: 478rpx;
+					height: 100%;
+					box-sizing: border-box;
+					padding: 20rpx 24rpx 0 24rpx;
+					float: right;
+					.list-cell-top {
+						width: 100%;
+						height: 121rpx;
+						float: left;
+						border-bottom: 1px solid #e1e1e1;
+						.list-cell-type {
+							width: 286rpx;
+							height: 100%;
+							float: left;
+							.list-cell-tags {
+								width: 100%;
+								height: 32rpx;
+								margin-bottom: 7rpx;
+								.tags {
+									display: inline-block;
+									padding: 0 10rpx;
+									height: 32rpx;
+									line-height: 32rpx;
+									background-color: #ffdcce;
+									color: #f94b4b;
+									font-size: $font-size-20;
+									border-radius: 8rpx;
+									text-align: center;
+									float: left;
+								}
+							}
+							.list-cell-texts {
+								width: 100%;
+								height: auto;
+								line-height: 35rpx;
+								text-overflow: ellipsis;
+								display: -webkit-box;
+								word-break: break-all;
+								-webkit-box-orient: vertical;
+								-webkit-line-clamp: 2;
+								overflow: hidden;
+								font-size: 26rpx;
+								color: #333333;
+							}
+						}
+						.list-cell-btn {
+							width: 128rpx;
+							height: 100%;
+							float: right;
+							.list-cell-checkbox {
+								width: 100%;
+								height: 50%;
+								.checkbox {
+									width: 40rpx;
+									line-height: 60rpx;
+									float: right;
+									box-sizing: border-box;
+									text-align: center;
+									text-decoration: none;
+									-webkit-tap-highlight-color: transparent;
+									overflow: hidden;
+									color: #f94b4b;
+								}
+							}
+						}
+					}
+					.list-cell-time {
+						width: 100%;
+						height: 58rpx;
+						line-height: 58rpx;
+						text-align: left;
+						font-size: $font-size-20;
+						color: #999999;
+					}
+				}
+			}
+		}
+		.tui-popup-coupon {
+			width: 100%;
+			height: 500rpx;
+			box-sizing: border-box;
+			padding: 30rpx 20rpx;
+			.tui-popup-h1 {
+				width: 100%;
+				height: 66rpx;
+				display: flex;
+				align-items: center;
+				.tui-popup-text {
+					flex: 1;
+					height: 66rpx;
+					line-height: 66rpx;
+					font-size: $font-size-30;
+					color: #333333;
+					&.red {
+						color: #f94b4b;
+					}
+					&.bold {
+						font-weight: bold;
+					}
+					&.left {
+						text-align: left;
+					}
+					&.right {
+						text-align: right;
+					}
+				}
+			}
+		}
+	}
+	.tui-popup-btn {
+		width: 100%;
+		height: auto;
+		float: left;
+		margin-top: 24rpx;
+		.tui-button {
+			width: 100%;
+			height: 88rpx;
+			background: $btn-confirm;
+			line-height: 88rpx;
+			text-align: center;
+			color: #ffffff;
+			font-size: $font-size-28;
+			border-radius: 44rpx;
+		}
+	}
+}
+</style>

+ 256 - 0
pages/seller/order/components/sellerDetaileButton.vue

@@ -0,0 +1,256 @@
+<template name="button">
+	<view class="button-template" :style="{paddingBottom :isIphoneX ? '68rpx' : '0rpx'}">
+		<!-- 底部按钮 -->
+		<view class="button-content">
+			<view class="btn btn-cancel"  v-if="secondHandOrderFlag!=1 && !rechargeGoods"  @click.stop="btnConfirm('again',order)">再来一单</view>
+			<view class="btn btn-cancel" v-if="btnState.isCancel"  @click.stop="btnConfirm('cancel',order)">取消订单</view>
+			<!-- <view class="btn btn-cancel" v-if="btnState.isDelete"  @click.stop="btnConfirm('delete',order)">删除订单</view> -->
+			<template>
+				<view class="btn btn-share" v-if="btnState.isPay" @click.stop="onShareCode(1)">
+					<view class="tips" v-if="shareCode">分享码:{{shareCode}}</view>
+					分享支付
+				</view>	
+				<view class="btn btn-share" v-else @click.stop="onShareCode(2)">
+					<view class="tips" v-if="shareCode">分享码:{{shareCode}}</view>
+					分享订单
+				</view>	
+			</template>
+			<view class="btn btn-color" v-if="btnState.isConfirm" @click.stop="btnConfirm('confirm',order)">确认订单</view>
+			<view class="btn btn-query" v-if="btnState.isQuery && order.secondHandOrderFlag!=1" @click.stop="btnConfirm('query',order)">查看物流</view>
+			<view class="btn btn-color" v-if="btnState.isPay && ableUserMoney > 0 && !rechargeGoods" @click.stop="btnConfirm('balance',order)">余额抵扣</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default{
+		name:'button',
+		props:{
+			status:{
+				type:Number
+			},
+			order: {
+				type:Object
+			},
+			ableUserMoney:{
+				type:Number
+			},
+			rechargeGoods:{
+				type:Boolean
+			},
+			shareCode:{
+				type:String
+			},
+			serviceProviderId:{
+				type:Number
+			},
+			secondHandOrderFlag:{
+				type:String
+			}
+		},
+		watch:{
+			status:{
+				handler:function(val){
+					this.initData(val)
+				},
+				deep:true//对象内部的属性监听,也叫深度监听
+			}
+		},
+		data() {
+			return{
+				btnState:this.initStatus(),
+				isIphoneX:this.$store.state.isIphoneX,
+				invoiceStatus:false,
+				mapStateArr:[
+					{label:'isQuery',val:[4,5,12,13,33,22,23,32,77],status: true},
+					{label:'isDelete',val:[6],status: true},
+					{label:'isCancel',val:[0,111],status: true},
+					{label:'isConfirm',val:[0],status: true},
+					{label:'isPay',val:[11,12,13,21,22,23,111],status: true},
+				]
+			}
+		},
+		created(){
+			console.log(this.rechargeGoods)
+			this.initData(this.status)
+		},
+		computed: {
+
+		},
+		methods:{
+			initData(resVal) {
+				/**
+				 * @分享按钮统一显示
+				 * @按钮根据状态显示
+				 * @(4、5、7、12、22、23、32)显示[查看物流]按钮,其他隐藏
+				 * @(6)显示[删除订单],其他隐藏
+				 * @(0、111)显示[取消订单],其他隐藏
+				 * @(21,31)只显示分享
+				 * @(13,33)显示[确认收货]和[查看物流]
+				 */
+				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,
+						isPay: false,
+					}
+				return 	btnState
+			},
+			getShareCode(code){
+				this.shareCode = code
+			},
+			onShareCode(type){
+				if(this.order.onlinePayFlag == 1){
+					this.$util.modal('提示','本订单不能进行线上支付,请让客户选择线下转账方式付款','继续分享','知道了',true,() =>{
+						this.$parent.isShareModal = true
+					})	
+				}else{
+					this.$parent.isShareModal = true
+					this.$parent.isShareType = type
+				}
+			},
+			btnConfirm(type,order){
+				let data = {
+						type:type,
+						orderId:order.orderId,
+						order:order
+					}
+				this.$emit('buttonConfirm',data)
+			},
+		}
+	}
+</script>
+
+<style lang="scss">
+	.button-template{
+		width: 100%;
+		height: auto;
+		position: fixed;
+		bottom: 0;
+		left: 0;
+		background: #FFFFFF;
+		.button-content{
+			padding:0 24rpx;
+			height: auto;
+			float: right;
+			position: relative;
+			margin: 20rpx 0;
+			.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: 34rpx;
+				float: right;
+			}
+			.btn-color{
+				background: #f94b4b;
+				// margin: 20rpx 0 20rpx 20rpx;
+				.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: #666666;
+				float: left;
+				// margin: 22rpx 0;
+				margin-right: 15rpx;
+				border: 2rpx solid #999999;
+			}
+			.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:#FFFFFF;
+				color: #666666;
+				float: left;
+				// margin: 22rpx 0;
+				margin-right: 15rpx;
+				border: 2rpx solid #999999;
+				position: relative;
+				.tips{
+					width: 160rpx;
+					height: 34rpx;
+					padding: 10rpx 10rpx;
+					background:#FF5B00;
+					border-radius: 8rpx;
+					position: absolute;
+					color: #FFFFFF;
+					line-height: 34rpx;
+					font-size: $font-size-24;
+					text-align: left;
+					right: 0;
+					top: -69rpx;
+					&:before{
+						content: "";
+						width: 25rpx;
+						height: 25rpx;
+						background:#FF5B00;
+						position: absolute;
+						bottom: -8rpx;
+						left: 30rpx;
+						z-index: -1;
+						transform:rotate(45deg);
+					}
+				}
+			}
+		}
+	}
+</style>

+ 211 - 0
pages/seller/order/components/sellerExchangeCoupon.vue

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

+ 524 - 0
pages/seller/order/components/sellerFreight.vue

@@ -0,0 +1,524 @@
+<template name="freight">
+	<view class="freight-template">
+		 <!-- 运费信息 -->
+		<view class="invoice-freight" @tap.stop="hanldOperationConfim">
+			<view class="freight-left">运费</view>
+			<view class="freight-right">
+				<text class="text-l">{{freightText}}</text>
+				<text class="text" v-if="hanldFreightData.postageFlag == 1">¥{{orderPriceToFixed(freightMoney)}}</text>
+				<text class="iconfont icon-xiayibu"></text>
+			</view>
+		</view>
+		<!--底部选择模态层弹窗组件 -->
+		<view class="popup spec" :class="specClass"  @touchmove.stop.prevent="discard" @click="freightConfim">
+			<!-- 遮罩层 -->
+			<view class="mask"></view>
+			<view class="layer" @tap.stop="discard">
+				<view class="content">
+					<view class="freight-ltitle">选择运费</view>
+					<view class="freight-radio">
+						<radio-group class="row-group" @change="radioChange">
+							<label class="row-input" v-for="(item, index) in freightList" :key="item.value">
+								<radio class="row-radio" :value="item.value" :checked="index === current" color="#FF5B00"/>
+								<view class="row-text">{{item.name}}</view>
+							</label>
+						</radio-group>
+					</view>
+					<view class="freight-group" v-if="hanldFreightData.postageFlag == 1">
+						<view class="group-from">
+							<input class="form-input" type="number" v-model="hanldFreight" @input="setFreightMoney" placeholder="请填写运费" maxlength="20">
+						</view>
+					</view>	
+					<view class="freight-group" v-if="hanldFreightData.postageFlag == 0">
+						<text class="text">{{freightText}}</text>
+					</view>
+					<view class="freight-group" v-if="hanldFreightData.postageFlag == -1">
+						<text class="text">{{freightText}}</text>
+					</view>
+				</view>
+				<view class="btn">
+					<view class="button add" @click="freightConfim">完成</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default{
+		name:'freight',
+		props:{
+			freightDatas:{
+				type:Object
+			}
+		},
+		data() {
+			return{
+				freightText:'不包邮',
+				freightMoney:0,
+				specClass: '',//规格弹窗css类,控制开关动画
+				freightList:[
+					{value:1,name:'不包邮'},
+					{value:0,name:'包邮'},
+					{value:-1,name:'到付'},
+				],
+				current:0,
+				hanldFreight:0,
+				hanldFreightData:{
+					postageFlag:1,
+					postage:0
+				}
+			}
+		},
+		created(){
+			this.infoData(this.freightDatas)
+		},
+		watch: {
+			freightDatas: {
+				handler: function (el) {//监听对象的变换使用 function,箭头函数容易出现this指向不正确
+					this.freightDatas = el
+					this.infoData(this.freightDatas)
+				},
+				deep: true
+			}
+		},
+		methods:{
+			infoData(data){//初始化运费
+				console.log('初始化运费',data)
+				switch(data.postageFlag){
+					case 1:
+						this.current = 0
+						this.hanldFreightData.postageFlag = data.postageFlag
+						if(data.freight == 0){
+							this.hanldFreight = ''
+						}else{
+							this.hanldFreight = data.postage
+						}
+						this.hanldFreightData.postage = data.postage
+						this.freightMoney = this.hanldFreight
+						this.freightText = ''
+						break
+					case 0:
+						this.current = 1
+						this.hanldFreightData.postageFlag = data.postageFlag
+						this.freightText = '包邮'
+						break
+					case -1:
+						this.current = 2
+						this.hanldFreightData.postageFlag = data.postageFlag
+						this.freightText = '到付'
+						break
+				}
+			},
+			freightConfim(){//提交完成运费选择
+				switch(this.hanldFreightData.postageFlag){
+					case 1:
+						this.choiceaFreightFirst(this.hanldFreightData.postageFlag)
+						break
+					case 0:
+						this.choiceaFreightFirst(this.hanldFreightData.postageFlag)
+						break
+					case -1:
+						this.choiceaFreightFirst(this.hanldFreightData.postageFlag)
+						break	
+				}		
+			},
+			choiceaFreightFirst(index){//校验运费形式及运费价
+				if(index == 1){
+					if(this.hanldFreight == 0 || this.hanldFreight== ''){
+						this.$util.msg('请填写运费',2000)
+						return
+					}
+					this.hanldFreightData.postage = this.hanldFreight
+					this.$emit('handleChoiceaFreight',this.hanldFreightData)
+				}else{
+					this.hanldFreightData.postage = 0
+					this.$emit('handleChoiceaFreight',this.hanldFreightData)
+				}
+				this.hideSpec()
+			},
+			showTip(){//显示运费弹窗
+				this.$emit('showFreightAlert')
+			},
+			hideSpec() {//关闭编辑运费弹窗
+				this.specClass = 'hide'
+				setTimeout(() => {
+					this.specClass = 'none'
+				}, 200)
+			},
+			hanldOperationConfim(data){//显示编辑运费弹窗
+				if(this.$parent.rebatecheck){
+					this.$util.msg('返佣订单不能编辑运费',2000)
+				}else{
+					this.specClass = 'show'
+					this.freightMoney = this.hanldFreight
+				}
+			},
+			radioChange(e) {//运费选择切换
+				this.hanldFreightData.postageFlag = parseInt(e.target.value)
+				switch(this.hanldFreightData.postageFlag){
+					case 1:
+						this.freightText = '不包邮'
+						break
+					case 0:
+						this.freightText = '包邮'
+						break
+					case -1:
+						this.freightText = '到付'
+						break	
+				}		
+				for (let i = 0; i < this.freightList.length; i++) {
+					if (this.freightList[i].value === this.postageFlag) {
+						this.current = i
+						break
+					}
+				}
+			},
+			setFreightMoney(e){//处理邮费显示
+				if(e.detail.value == ''){
+					this.freightMoney=0
+					this.hanldFreightData.postage=0
+				}else{
+					this.hanldFreightData.postage = e.detail.value
+					this.freightMoney = this.orderPriceToFixed(e.detail.value)
+				}
+			},
+			orderPriceToFixed (num){
+				let price =''
+				price = parseInt(num).toFixed(2)
+				return price
+			},
+			discard(){
+				//丢弃
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.freight-template{
+		width: 100%;
+		height: auto;
+		background: #FFFFFF;
+		float: left;
+		margin-top: 24rpx;
+		.invoice-freight{
+			width: 702rpx;
+			padding: 0 24rpx;
+			height: 88rpx;
+			line-height: 88rpx;
+			font-size: $font-size-28;
+			color: $text-color;
+			background: #FFFFFF;
+			float: left;
+			font-weight: bold;
+			.freight-left{
+				float: left;
+				.icon-yunfeishuoming{
+					height: 100%;
+					padding:15rpx;
+					color: $color-system;
+					font-weight: normal;
+				}
+			}
+			.freight-right{
+				float: right;
+				color: #2A81FF;
+				.text-l{
+					margin-right: 20rpx;
+				}
+				.text{
+					line-height: 88rpx;
+					color: #ff0000;
+					margin:0 20rpx;
+					font-weight: normal;
+				}
+				.icon-xiayibu{
+					line-height: 88rpx;
+					color: #999999;
+					font-weight: normal;
+				}
+			}
+		}
+	}
+	.freight-ltitle{
+		width: 100%;
+		line-height: 60rpx;
+		height: 60rpx;
+		font-size: $font-size-28;
+		color: #333333;
+	}
+	.freight-radio{
+		width: 100%;
+		height: 88rpx;
+		line-height: 88rpx;
+		display: flex;
+		border-bottom: 1px solid #EBEBEB;
+		.row-group{
+			flex:1;
+			display: flex;
+		}
+		.row-input{
+			flex: 1;
+			height: 88rpx;
+			line-height: 88rpx;
+		}
+		.row-radio{
+			float: left;
+			transform: scale(0.6);
+		}
+		.row-text{
+			font-size: $font-size-24;
+			color: $text-color;
+		}
+	}
+	.freight-group{
+		width: 100%;
+		height: 88rpx;
+		display: flex;
+		border-bottom: 1px solid #FFFFFF;
+		flex-direction: row;
+		.text{
+			display: block;
+			flex: 1;
+			line-height: 88rpx;
+			font-size: $font-size-24;
+			color: #999999;
+			text-align: left;
+			padding-left: 10rpx;
+		}
+		.group-from{
+			flex: 1;
+			height: 40rpx;
+			padding: 20rpx;
+			line-height: 40rpx;
+			align-items: flex-start;
+			font-size: $font-size-24;
+			color: $text-color;
+			background: #F7F7F7;
+			border-radius: 14rpx;
+			margin-bottom: 20rpx;
+			margin-top: 10rpx;
+			.form-input{
+				height: 40rpx;
+				line-height: 40rpx;
+				flex-grow: 1;
+			}
+		}
+	}	
+	/* 加入购物模态层*/
+	@keyframes showPopup {
+		0% {
+			opacity: 0;
+		}
+		100% {
+			opacity: 1;
+		}
+	}
+	@keyframes hidePopup {
+		0% {
+			opacity: 1;
+		}
+		100% {
+			opacity: 0;
+		}
+	}
+	@keyframes showLayer {
+		0% {
+			transform: translateY(0);
+		}
+		100% {
+			transform: translateY(-100%);
+		}
+	}
+	@keyframes hideLayer {
+		0% {
+			transform: translateY(-100%);
+		}
+		100% {
+			transform: translateY(0);
+		}
+	}
+	@keyframes showAmnation {
+		0% {
+			top: -12rpx;
+			opacity: 0;
+		}
+		50% {
+			top: -60rpx;
+			opacity: 1;
+		}
+		100% {
+			top: -100rpx;
+			opacity: 0;
+		}
+	}
+	@keyframes hideAmnation {
+		0% {
+			top: -100rpx;
+			opacity: 0;
+		}
+		100% {
+			top: -12rpx;
+			opacity: 0;
+		}
+	}
+	.popup {
+		position: fixed;
+		top: 0;
+		width: 100%;
+		height: 100%;
+		z-index: 999;
+		display: none;
+		.mask{
+			position: fixed;
+			top: 0;
+			width: 100%;
+			height: 100%;
+			z-index: 21;
+			background-color: rgba(0, 0, 0, 0.6);
+		}
+		.layer {
+			position: fixed;
+			z-index: 22;
+			bottom: -460rpx;
+			width: 702rpx;
+			padding: 24rpx 24rpx 36rpx 24rpx;
+			height: 400rpx;
+			border-radius: 20rpx 20rpx 0 0;
+			background-color: #fff;
+			display: flex;
+			flex-wrap: wrap;
+			align-content: space-between;
+			.content {
+				width: 100%;
+			}
+			.btn {
+				width: 100%;
+				height: 88rpx;
+				display: flex;
+				.button {
+					width: 702rpx;
+					height: 88rpx;
+					color: #fff;
+					display: flex;
+					align-items: center;
+					justify-content: center;
+					font-size: $font-size-28;
+					border-radius: 44rpx;
+					background: $btn-confirm;
+				}
+			}
+		}
+		
+		&.show {
+			display: block;
+			.mask{
+				animation: showPopup 0.2s linear both;
+			}
+			.layer {
+				animation: showLayer 0.2s linear both;
+			}
+		}
+		&.hide {
+			display: block;
+			.mask{
+				animation: hidePopup 0.2s linear both;
+			}
+			
+			.layer {
+				animation: hideLayer 0.2s linear both;
+			}
+		}
+		&.none {
+			display: none;
+		}
+		&.service {
+			.row {
+				margin: 30upx 0;
+				.title {
+					font-size: 30upx;
+					margin: 10upx 0;
+				}
+				.description {
+					font-size: 28upx;
+					color: #999;
+				}
+			}
+		}
+		.layer-smimg{
+			width: 114rpx;
+			height: 114rpx;
+			float: left;
+			border-radius: 10rpx;
+			margin-right: 24rpx;
+			image{
+				width: 114rpx;
+				height: 114rpx;	
+				border-radius: 10rpx;
+			}
+		}
+		.layer-nunbox{
+			justify-content: space-between;
+			align-items: center;
+			width: 536rpx;
+			height: 88rpx;
+			padding: 13rpx 0 0 0;
+			float: left;
+			.layer-nunbox-t{
+				width: 100%;
+				height:44rpx;
+				position:relative;
+				display: flex;
+				.layer-nunbox-text{
+					line-height: 44rpx;
+					font-size: $font-size-28;
+				}
+				.number-box{
+					display: flex;
+					justify-content: center;
+					align-items: center;
+					.iconfont{
+						font-size: $font-size-32;
+						padding:0 18rpx;
+						font-size: $text-color;
+					}
+					.btn-input{
+						width: 62rpx;
+						height: 48rpx;
+						line-height: 48rpx;
+						background: #F8F8F8;
+						border-radius: 4rpx;
+						text-align: center;
+						font-size: $font-size-28;
+					}
+				}
+				.product-step{
+					position: absolute;
+					left: 45rpx;
+					bottom: 0;
+					height: 44rpx;
+					background: #FFFFFF;
+				}
+			}
+			.layer-nunbox-b{
+				width: 100%;
+				height:44rpx;
+				margin-top: 13rpx;
+			}
+			.text{
+				line-height: 44rpx;
+				font-size: $font-size-28;
+				.p{
+					color: #FF2A2A;
+				}
+				.p:first-child{
+					margin-left: 30rpx;
+				}
+				.p.sm{
+					font-size: $font-size-24;
+				}
+			}
+		}
+	}	
+</style>

+ 369 - 0
pages/seller/order/components/sellerGoodsList.vue

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

+ 695 - 0
pages/seller/order/components/sellerInvoice.vue

@@ -0,0 +1,695 @@
+<template name="invoice">
+	<view class="invoice-template">
+		 <!-- 发票信息 -->
+		<view class="invoice-title" @tap.stop="hanldOperationConfim">
+			<text class="text">发票信息</text>
+			<view class="invoice-right">
+				<text class="text-l">{{invoiceText}}</text>
+				<text class="iconfont icon-xiayibu"></text>
+			</view>
+		</view>
+		<!-- <view class="invoice-text">
+			<text>{{invoiceText}}</text>
+		</view> -->
+		<!--底部选择模态层弹窗组件 -->
+		<view class="popup spec" :class="specClass"  @touchmove.stop.prevent="discard" @tap="choiceaInvoiceConfim">
+			<!-- 遮罩层 -->
+			<view class="mask"></view>
+			<view class="layer" @tap.stop="discard">
+				<view class="content clearfix">
+					<view class="invoice-ltitle">发票类型</view>
+					<view class="invoice-radio">
+						<radio-group class="row-group" @change="radioChange">
+							<label class="row-input" v-for="(item, index) in invoiceTypeList" :key="item.value">
+								<radio class="row-radio" :value="item.value" :checked="index === current" color="#FF5B00"/>
+								<view class="row-text">{{item.name}}</view>
+							</label>
+						</radio-group>
+					</view>
+					<view class="invoice-main from" v-if="invoiceType == '2'">
+						<view class="invoice-from">
+							<view class="label">单位名称:</view>
+							<input class="form-input" type="text" v-model="invoiceData.invoiceTitle" placeholder="请填写单位信息(必填)" placeholder-class="placeholder" maxlength="24">
+						</view>
+						<view class="invoice-from">
+							<view class="label">纳税人识别号:</view>
+							<input class="form-input" type="text" v-model="invoiceData.corporationTaxNum" placeholder="请填写纳税人识别号(必填)" placeholder-class="placeholder" maxlength="24">
+						</view>
+						<view class="invoice-from">
+							<view class="label">注册地址:</view>
+							<input class="form-input" type="text" v-model="invoiceData.registeredAddress" placeholder="请填写单位注册地址(必填)" placeholder-class="placeholder" maxlength="100">
+						</view>
+						<view class="invoice-from">
+							<view class="label">注册电话:</view>
+							<input class="form-input" type="text" v-model="invoiceData.registeredPhone" placeholder="请填写注册电话(必填)" placeholder-class="placeholder" maxlength="15">
+						</view>
+						<view class="invoice-from">
+							<view class="label">开户银行:</view>
+							<input class="form-input" type="text" v-model="invoiceData.openBank"   placeholder="请填写开户银行(必填)" placeholder-class="placeholder" maxlength="30">
+						</view>
+						<view class="invoice-from">
+							<view class="label">银行账号:</view>
+							<input class="form-input" 
+								   type="text" 
+								   v-model="invoiceData.bankAccountNo" 
+								   placeholder="请填写银行账号(必填)" 
+								   maxlength="30"
+								   placeholder-class="placeholder">
+						</view>
+					</view>
+					<view class="invoice-main" v-if="invoiceType == '3'">
+						<view class="invoice-ltitle">发票内容</view>
+						<view class="invoice-group tit">
+							<checkbox-group class="row-group" @change="checkboxChange">
+								<view class="text">商品明细</view>
+								<checkbox class="row-radio" value="明细"  :checked="inventoryChecked" color="#FF5B00"></checkbox>
+							</checkbox-group>
+						</view>
+						<view class="invoice-ltitle">发票抬头</view>
+						<view class="invoice-group tit">
+							<radio-group class="row-group radio" @change="radioChangeTitle">
+								<label class="row-input" v-for="(item, index) in invoiceTitleList" :key="item.value">
+									<radio class="row-radio" :value="item.value" :checked="index === titleCurrent" color="#FF5B00"/>
+									<view class="row-text">{{item.name}}</view>
+								</label>
+							</radio-group>
+						</view>
+						<view class="invoice-group from">
+							<view class="group-from" v-if="peopleInvoiceData.invoiceTitleType == '0'">
+								<input class="form-input" type="text" v-model="peopleInvoiceData.invoiceTitle"   placeholder="请填写个人抬头" placeholder-class="placeholder" maxlength="20">
+							</view>
+							<view class="group-from" v-if="peopleInvoiceData.invoiceTitleType == '1'">
+								<input class="form-input" type="text" v-model="peopleInvoiceData.invoiceTitle"   placeholder="请填写公司抬头" placeholder-class="placeholder" maxlength="20">
+							</view>
+							<view class="group-from" v-if="peopleInvoiceData.invoiceTitleType == '1'">
+								<input class="form-input" type="text" v-model="peopleInvoiceData.corporationTaxNum"   placeholder="请填写纳税人识别号" placeholder-class="placeholder" maxlength="20">
+							</view>
+						</view>
+					</view>
+					<view class="invoice-main" v-if="invoiceType == '1'">
+						<view class="invoice-none">不开具发票信息</view>
+					</view>
+				</view>
+				<view class="btn">
+					<view class="button add" @click="choiceaInvoiceConfim">完成</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default{
+		name:'invoice',
+		data() {
+			return{
+				invoiceText:'不要发票',
+				specClass: '',//规格弹窗css类,控制开关动画
+				invoiceType:'1',//发票类型
+				current:0,
+				titleCurrent:0,
+				inventoryChecked:false,
+				invoiceTypeList:[
+					{value:'1',name:'不要发票'},
+					{value:'2',name:'增值税发票'},
+				],
+				invoiceTitleList:[
+					{value:'0',name:'个人'},
+					{value:'1',name:'公司'},
+				],
+				peopleInvoiceData:{
+					invoiceTitle:'',
+					invoiceContent:'',
+					corporationTaxNum:'',
+					invoiceTitleType:'0'//发票抬头类型 1企业 0个人
+				},
+				invoiceData:{
+					invoiceTitle:'',	 //单位名称
+					corporationTaxNum:'',//纳税人识别号
+					registeredAddress: '',//单位地址
+					registeredPhone:'',	 //注册电话
+					openBank:'',		//开户银行
+					bankAccountNo: ''  ,//银行账号
+				},
+			}
+		},
+		created(){
+			// this.initData(this.invoiceDatas)
+		},
+		computed: {
+
+		},
+		methods:{
+			getUseFindInvoice(){//获取发票信息
+				this.$api.getComStorage('orderUserInfo').then((resolve) =>{
+					this.OrderService.GetFindInvoice({userId:resolve.userId}).then(response =>{
+						if(response.data == null){
+							this.invoiceData = Object.assign(this.invoiceData,'',{type:0})
+						}else{
+							this.invoiceData = response.data
+						} 
+					})
+				})
+			},
+			updateInvoiceFn(){//保存发票信息
+				this.$api.getComStorage('orderUserInfo').then((resolve) =>{
+					let params =Object.assign(this.invoiceData,'',{userId:resolve.userId})
+					this.OrderService.UpdateInvoice(params).then(response =>{})
+				})
+			},
+			choiceaInvoiceConfim(){
+				switch(this.invoiceType){
+					case '1':
+						this.choiceaInvoiceThree()
+						this.invoiceText = '不要发票'
+						break
+					// case '2':
+					// 	this.choiceaInvoiceTwo()
+					// 	this.invoiceText = this.peopleInvoiceData.invoiceTitle
+					// 	break;
+					case '2':
+						this.choiceaInvoiceFirst()
+						this.invoiceText = this.invoiceData.invoiceTitle
+						break
+						default:
+						this.choiceaInvoiceThree()
+						this.invoiceText = '不要发票'
+				}
+			},
+			choiceaInvoiceFirst(){//增值税发票
+				if(this.invoiceData.invoiceTitle == ''){
+					this.$util.msg('请输入单位名称',2000)
+					return
+				}
+				if(this.invoiceData.corporationTaxNum == ''){
+					this.$util.msg('请输入纳税人识别号',2000)
+					return
+				}
+				if(this.invoiceData.registeredAddress == ''){
+					this.$util.msg('请输入单位地址',2000)
+					return
+				}
+				if(this.invoiceData.registeredPhone == ''){
+					this.$util.msg('请输入注册电话',2000)
+					return
+				}
+				if(this.invoiceData.openBank == ''){
+					this.$util.msg('请输入开户银行',2000)
+					return
+				}
+				if(this.invoiceData.bankAccountNo == ''){
+					this.$util.msg('请输入银行账号',2000)
+					return
+				}
+				this.updateInvoiceFn()
+				this.$emit('handleChoiceaInvoice',Object.assign(this.invoiceData,'',{type:2}))
+				this.hideSpec()
+			},
+			choiceaInvoiceTwo(){//普通发票			
+				switch(this.peopleInvoiceData.invoiceTitleType){
+					case '0':
+						if(this.peopleInvoiceData.invoiceContent == ''){
+							this.$util.msg('请选择商品明细',2000)
+							return
+						}
+						if(this.peopleInvoiceData.invoiceTitle == ''){
+							this.$util.msg('请输入个人抬头',2000)
+							return
+						}
+						break
+					case '1':
+						if(this.peopleInvoiceData.invoiceContent == ''){
+							this.$util.msg('请选择商品明细',2000)
+							return
+						}
+						if(this.peopleInvoiceData.invoiceTitle == ''){
+							this.$util.msg('请输入公司抬头',2000)
+							return
+						}
+						if(this.peopleInvoiceData.corporationTaxNum == ''){
+							this.$util.msg('请输入纳税人识别号',2000)
+							return
+						}
+						break
+				}
+				this.$emit('handleChoiceaInvoice',Object.assign(this.peopleInvoiceData,'',{type:1}))
+				this.hideSpec()
+			},
+			choiceaInvoiceThree(){//不要发票
+				this.invoiceData = {}
+				this.$emit('handleChoiceaInvoice',Object.assign(this.invoiceData,'',{type:0}))
+				this.hideSpec()
+			},
+			hideSpec() {//关闭弹窗
+				this.specClass = 'hide'
+				setTimeout(() => {
+					this.specClass = 'none'
+				}, 200)
+			},
+			hanldOperationConfim(){//显示发票弹窗
+				this.specClass = 'show'
+			},
+			radioChange(e) {
+				this.invoiceType = e.target.value
+				for (let i = 0; i < this.invoiceTypeList.length; i++) {
+					if (this.invoiceTypeList[i].value === this.invoiceType) {
+						this.current = i
+						break
+					}
+				}
+				switch(this.invoiceType){
+					case '2':
+						this.getUseFindInvoice()
+						break
+				}		
+			},
+			radioChangeTitle(e) {
+				this.peopleInvoiceData.invoiceTitleType = e.target.value
+				for (let i = 0; i < this.invoiceTitleList.length; i++) {
+					if (this.invoiceTitleList[i].value === this.peopleInvoiceData.invoiceTitleType) {
+						this.titleCurrent = i
+						break
+					}
+				}
+				switch(this.peopleInvoiceData.invoiceTitleType){
+					case '1':
+						this.inventoryChecked = false
+						this.peopleInvoiceData.invoiceTitle = ''
+						this.peopleInvoiceData.invoiceContent = ''
+						break
+				}		
+			},
+			checkboxChange(e){
+				this.inventoryChecked = !this.inventoryChecked
+				this.peopleInvoiceData.invoiceContent = e.detail.value[0]
+			},
+			inputBankNum(val) {
+				if (/\S{5}/.test(val)) {
+					this.invoiceData.bankAccountNo = val.replace(/\s/g, '').replace(/(.{4})/g, '$1 ')
+				}
+			},
+			discard(){
+				//丢弃
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.invoice-template{
+		width: 100%;
+		height: auto;
+		background: #FFFFFF;
+		float: left;
+		.invoice-title{
+			width: 702rpx;
+			padding: 0 24rpx;
+			height: 88rpx;
+			line-height: 88rpx;
+			position: relative;
+			font-size: $font-size-28;
+			font-weight: bold;
+			border-bottom: 1px solid #EBEBEB;
+			.text{
+				font-size: $font-size-28;
+				color: $text-color;
+				font-weight: bold;
+			}
+			.invoice-right{
+				float: right;
+				color: #2A81FF;
+				.text-l{
+					margin-right: 40rpx;
+				}
+				.iconfont{
+					width: 50rpx;
+					height: 88rpx;
+					line-height: 88rpx;
+					color: #999999;
+					display: block;
+					position: absolute;
+					right: 0;
+					top: 0;
+				}
+			}
+		}
+		.invoice-text{
+			width: 702rpx;
+			padding: 0 24rpx;
+			font-size: $font-size-24;
+			color: #666666;
+			line-height: 60rpx;
+		}
+		.invoice-ltitle{
+			width: 100%;
+			line-height: 60rpx;
+			height: 60rpx;
+			font-size: $font-size-28;
+			color: #333333;
+		}
+		.invoice-radio{
+			width: 100%;
+			height: 88rpx;
+			line-height: 88rpx;
+			display: flex;
+			border-bottom: 1px solid #EBEBEB;
+			.row-group{
+				flex:1;
+				display: flex;
+			}
+			.row-input{
+				flex: 1;
+				height: 88rpx;
+				line-height: 88rpx;
+			}
+			.row-radio{
+				float: left;
+				transform: scale(0.6);
+			}
+			.row-text{
+				font-size: $font-size-24;
+				color: $text-color;
+			}
+		}
+		.invoice-main{
+			width: 100%;
+			height: auto;
+			margin-top: 30rpx;
+			&.from{
+				padding-bottom: 40rpx;
+			}
+			.invoice-none{
+				line-height: 60rpx;
+				height: 60rpx;
+				font-size: $font-size-24;
+				color: #666666;
+				text-align: center;
+			}
+			.invoice-from{
+				width: 662rpx;
+				height: 40rpx;
+				padding: 20rpx;
+				line-height: 40rpx;
+				align-items: flex-start;
+				font-size: $font-size-28;
+				color: $text-color;
+				// background: #F7F7F7;
+				// border-radius: 14rpx;
+				margin-bottom: 20rpx;
+				border-bottom: 2rpx solid #e1e1e1;
+				.label{
+					height: 40rpx;
+					line-height: 40rpx;
+					float: left;
+				}
+				.form-input{
+					height: 40rpx;
+					line-height: 40rpx;
+					flex-grow: 1;
+					padding-left: 20rpx;
+				}
+			}
+			.invoice-group{
+				width: 100%;
+				height: 88rpx;
+				display: flex;
+				border-bottom: 1px solid #EBEBEB;
+				&.tit{
+					margin-bottom: 30rpx;
+				}
+				&.from{
+					margin-bottom: 30rpx;
+					border-bottom: 1px solid #FFFFFF;
+					flex-direction: row;
+					display: block;
+					.group-from{
+						flex: 1;
+						height: 40rpx;
+						padding: 20rpx;
+						line-height: 40rpx;
+						align-items: flex-start;
+						font-size: $font-size-24;
+						color: $text-color;
+						background: #F7F7F7;
+						border-radius: 14rpx;
+						margin-bottom: 20rpx;
+						.form-input{
+							height: 40rpx;
+							line-height: 40rpx;
+							flex-grow: 1;
+						}
+					}
+				}
+				.row-group{
+					line-height: 88rpx;
+					flex: 1;
+					.text{
+						font-size: $font-size-24;
+						color: $text-color;
+						line-height: 88rpx;
+						float: left;
+					}
+					.row-radio{
+						float: right;
+						transform: scale(0.8);
+						border-radius: 50%;
+					}
+					&.radio{
+						display: flex;
+						.row-input{
+							flex: 1;
+							height: 88rpx;
+							line-height: 88rpx;
+						}
+						.row-radio{
+							float: left;
+							transform: scale(0.6);
+						}
+						.row-text{
+							font-size: $font-size-24;
+							color: $text-color;
+						}
+					}
+				}
+			}
+		}
+	}
+	/* 加入购物模态层*/
+	@keyframes showPopup {
+		0% {
+			opacity: 0;
+		}
+		100% {
+			opacity: 1;
+		}
+	}
+	@keyframes hidePopup {
+		0% {
+			opacity: 1;
+		}
+		100% {
+			opacity: 0;
+		}
+	}
+	@keyframes showLayer {
+		0% {
+			transform: translateY(0);
+		}
+		100% {
+			transform: translateY(-100%);
+		}
+	}
+	@keyframes hideLayer {
+		0% {
+			transform: translateY(-100%);
+		}
+		100% {
+			transform: translateY(0);
+		}
+	}
+	@keyframes showAmnation {
+		0% {
+			top: -12rpx;
+			opacity: 0;
+		}
+		50% {
+			top: -60rpx;
+			opacity: 1;
+		}
+		100% {
+			top: -100rpx;
+			opacity: 0;
+		}
+	}
+	@keyframes hideAmnation {
+		0% {
+			top: -100rpx;
+			opacity: 0;
+		}
+		100% {
+			top: -12rpx;
+			opacity: 0;
+		}
+	}
+	.popup {
+		position: fixed;
+		top: 0;
+		width: 100%;
+		height: 100%;
+		z-index: 999;
+		display: none;
+		.mask{
+			position: fixed;
+			top: 0;
+			width: 100%;
+			height: 100%;
+			z-index: 21;
+			background-color: rgba(0, 0, 0, 0.6);
+		}
+		.layer {
+			position: absolute;
+			z-index: 22;
+			bottom: -1010rpx;
+			width: 702rpx;
+			padding: 24rpx 24rpx 65rpx 24rpx;
+			height: 920rpx;
+			border-radius: 20rpx 20rpx 0 0;
+			background-color: #fff;
+			display: flex;
+			flex-wrap: wrap;
+			align-content: space-between;
+			.content {
+				width: 100%;
+			}
+			.btn {
+				width: 100%;
+				height: 88rpx;
+				display: flex;
+				.button {
+					width: 702rpx;
+					height: 88rpx;
+					color: #fff;
+					display: flex;
+					align-items: center;
+					justify-content: center;
+					font-size: $font-size-28;
+					border-radius: 44rpx;
+					background: $btn-confirm;
+				}
+			}
+		}
+		
+		&.show {
+			display: block;
+			.mask{
+				animation: showPopup 0.2s linear both;
+			}
+			.layer {
+				animation: showLayer 0.2s linear both;
+			}
+		}
+		&.hide {
+			display: block;
+			.mask{
+				animation: hidePopup 0.2s linear both;
+			}
+			
+			.layer {
+				animation: hideLayer 0.2s linear both;
+			}
+		}
+		&.none {
+			display: none;
+		}
+		&.service {
+			.row {
+				margin: 30upx 0;
+				.title {
+					font-size: 30upx;
+					margin: 10upx 0;
+				}
+				.description {
+					font-size: 28upx;
+					color: #999;
+				}
+			}
+		}
+		.layer-smimg{
+			width: 114rpx;
+			height: 114rpx;
+			float: left;
+			border-radius: 10rpx;
+			margin-right: 24rpx;
+			image{
+				width: 114rpx;
+				height: 114rpx;	
+				border-radius: 10rpx;
+			}
+		}
+		.layer-nunbox{
+			justify-content: space-between;
+			align-items: center;
+			width: 536rpx;
+			height: 88rpx;
+			padding: 13rpx 0 0 0;
+			float: left;
+			.layer-nunbox-t{
+				width: 100%;
+				height:44rpx;
+				position:relative;
+				display: flex;
+				.layer-nunbox-text{
+					line-height: 44rpx;
+					font-size: $font-size-28;
+				}
+				.number-box{
+					display: flex;
+					justify-content: center;
+					align-items: center;
+					.iconfont{
+						font-size: $font-size-32;
+						padding:0 18rpx;
+						font-size: $text-color;
+					}
+					.btn-input{
+						width: 62rpx;
+						height: 48rpx;
+						line-height: 48rpx;
+						background: #F8F8F8;
+						border-radius: 4rpx;
+						text-align: center;
+						font-size: $font-size-28;
+					}
+				}
+				.product-step{
+					position: absolute;
+					left: 45rpx;
+					bottom: 0;
+					height: 44rpx;
+					background: #FFFFFF;
+				}
+			}
+			.layer-nunbox-b{
+				width: 100%;
+				height:44rpx;
+				margin-top: 13rpx;
+			}
+			.text{
+				line-height: 44rpx;
+				font-size: $font-size-28;
+				.p{
+					color: #FF2A2A;
+				}
+				.p:first-child{
+					margin-left: 30rpx;
+				}
+				.p.sm{
+					font-size: $font-size-24;
+				}
+			}
+		}
+	}	
+	.placeholder{
+		color: #b2b2b2;
+	}
+</style>

+ 218 - 0
pages/seller/order/components/sellerOrderButton.vue

@@ -0,0 +1,218 @@
+<template name="button">
+	<view class="button-template">
+		<!-- 底部按钮 -->
+		<view class="button-content"> 
+			<view class="btn btn-cancel" v-if="secondHandOrderFlag!=1 && !rechargeGoods"  @click.stop="btnConfirm('again',orderId)">再来一单</view>
+			<view class="btn btn-cancel" v-if="btnState.isCancel" @click.stop="btnConfirm('cancel',orderId)">取消订单</view>
+			<!-- <view class="btn btn-cancel" v-if="btnState.isDelete" @click.stop="btnConfirm('delete',orderId)">删除订单</view> -->
+			<template>
+				<view class="btn btn-cancel" v-if="btnState.isPay" @click.stop="onShareCode(orderId,userId,1)">分享支付</view>
+				<view class="btn btn-cancel" v-else @click.stop="onShareCode(orderId,userId,2)">分享订单</view>	
+			</template>
+			<view class="btn btn-query" v-if="btnState.isQuery && order.secondHandOrderFlag!=1" @click.stop="btnConfirm('query',orderId)">查看物流</view>
+			<view class="btn btn-color" v-if="btnState.isConfirm" @click.stop="btnConfirm('confirm',orderId)">确认订单</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default{
+		name:'button',
+		props:{
+			status: {
+				type:Number
+			},
+			order: {
+				type:Object
+			},
+			orderId: {
+				type:Number
+			},
+			userId:{
+				type:Number
+			},
+			rechargeGoods:{
+				type:Boolean
+			},
+			serviceProviderId:{
+				type:Number
+			},
+			secondHandOrderFlag:{
+				type:String
+			}
+		},
+		data() {
+			return{
+				isShare:true,
+				shareCode:'',
+				btnState:this.initStatus(),
+				mapStateArr:[
+					{label:'isQuery',val:[4,5,12,13,33,22,23,32,77],status: true},
+					{label:'isDelete',val:[6],status: true},
+					{label:'isCancel',val:[0,111],status: true},
+					{label:'isConfirm',val:[0],status: true},
+					{label:'isPay',val:[11,12,13,21,22,23,111],status: true},
+				]
+			}
+		},
+		created(){
+			this.initData(this.status)
+		},
+		computed: {
+			
+		},
+		watch:{
+			status:{
+				handler:function(val){
+					this.initData(val)
+				},
+				deep:true//对象内部的属性监听,也叫深度监听
+			}
+		},
+		methods:{
+			initData(resVal) {
+				/**
+				 * @分享按钮统一显示
+				 * @按钮根据状态显示
+				 * @(4、5、7、12、22、23、32)显示[查看物流]按钮,其他隐藏
+				 * @(6)显示[删除订单],其他隐藏
+				 * @(0、111)显示[取消订单],其他隐藏
+				 * @(21,31)只显示分享
+				 * @(13,33)显示[确认收货]和[查看物流]
+				 */
+				this.btnState = this.initStatus()
+				this.mapStateArr.forEach(el => {
+					el.val.forEach(value => {
+						if(resVal === value){
+							this.btnState[el.label] = el.status
+						}
+					})
+				})
+			},
+			initStatus(){
+				let btnState= {
+						isDelete: false,
+						isCancel: false,
+						isConfirm: false,
+						isShare: true
+					}
+				return 	btnState
+			},
+			getShareCode(code){
+				this.shareCode = code
+			},
+			onShareCode(oID,uID,type){
+				if(this.order.onlinePayFlag == 1){
+					this.$util.modal('提示','本订单不能进行线上支付,请让客户选择线下转账方式付款','继续分享','知道了',true,() =>{
+						this.$parent.isShareModal = true
+						this.$parent.btnoRderID = oID,
+						this.$parent.btnClubUserID = uID
+						this.$parent.isShareType = type
+						this.$emit('shareConfirm')
+					})	
+				}else{
+					this.$parent.isShareModal = true
+					this.$parent.btnoRderID = oID,
+					this.$parent.btnClubUserID = uID
+					this.$parent.isShareType = type
+					this.$emit('shareConfirm')
+				}
+			},
+			btnConfirm(type,orderId){
+				let data = {
+						type:type,
+						orderId:orderId,
+					}
+				this.$emit('buttonConfirm',data)
+			},
+		}
+	}
+</script>
+
+<style lang="scss">
+	.button-template{
+		width: 100%;
+		height: auto;
+		float: left;
+		background: #FFFFFF;
+		.button-content{
+			height: auto;
+			float: right;
+			position: relative;
+			margin: 20rpx 0;
+			.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;
+				line-height: 64rpx;
+				font-size:$font-size-26;
+				color: #FFFFFF;
+				text-align: center;
+				border-radius:34rpx;
+				// float: right; 
+				display: inline-block;
+			}
+			.btn-color{
+				background: $btn-confirm;
+				// margin: 22rpx 0 22rpx 22rpx;
+			}
+			.btn-cancel{
+				border: 2rpx solid #999999;
+				background:#FFFFFF;
+				color: #666666;
+				// float: left;
+				margin-right: 15rpx;
+			}
+			.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:#FF5B00;
+					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:#FF5B00;
+						position: absolute;
+						bottom: -8rpx;
+						left: 30rpx;
+						z-index: -1;
+						transform:rotate(45deg);
+					}
+				}
+			}
+		}
+	}
+</style>

+ 440 - 0
pages/seller/order/components/sellerRegulations.vue

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

+ 156 - 0
pages/seller/order/components/sellerShareAlert.vue

@@ -0,0 +1,156 @@
+<template name="sharealert">
+	<view class="alert spec" :class="specClass">
+		<view class="model-warp">
+			<view class="content">
+				<view class="text-content">
+					<view class="title">分享订单</view>
+					<view class="share">您的分享码:<text class="txt">{{shareCode}}</text></view>
+					<view class="text" v-if="shareType == 1">
+						<text>有效期为72小时。订单分享后客户可无需登录直接线上支付订单,也支持客户使用账号密码登录或直接输入分享码的方式查看订单。</text>
+					</view>
+					<view class="text" v-if="shareType == 2">
+						<text>有效期为72小时。订单分享后若对方无法直接登录小程序查看订单,请提供该分享码给对方,通过输入分享码查看。</text>
+					</view>
+				</view>				
+				<view class="alert-btn">
+					<view class="btn btn-cancel" @click="hideConfirm">取消</view>
+					<!-- #ifdef MP-WEIXIN -->
+					<button class="btn btn-confirm" open-type="share" @click="btnConfirm(shareCode)">去分享</button>
+					<!-- #endif -->
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default{
+		name:'sharealert',
+		props:{
+			orderId:{
+				type:Number
+			},
+			shareType:{
+				type:Number
+			}
+		},
+		data() {
+			return{
+				shareCode:'',
+			}
+		},
+		created() {
+			this.getShareCode(this.orderId)
+		},
+		methods:{
+			getShareCode(res){
+				this.OrderService.QueryOrderShareCode({orderId:res}).then(response =>{
+					this.shareCode = response.data
+					this.$parent.shareCode = this.shareCode
+				}).catch(error =>{
+					this.$parent.isShareModal = false
+					this.$util.modal('提示',error.msg,'确定','',false,() =>{})
+				})
+			},
+			hideConfirm(){
+				this.$parent.isShareModal = false
+			},
+			btnConfirm(code){//点击事件
+				this.$emit('btnConfirm')
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	/*弹窗*/
+	 .model-warp.none{
+		 display: none;
+	 }
+	 .model-warp.show{
+		 display: block;
+	 }
+	 .model-warp{
+		width: 100%;
+		height: 100%;
+		background: rgba(0,0,0,0.3);
+		position: fixed;
+		top: 0;
+		left: 0;
+		z-index: 10000;
+		transition: all 0.4s;
+		&.none{
+			display: none;			
+		}
+		&.show{
+			display: block;
+		}
+		.content{
+			width: 518rpx;
+			height: 428rpx;
+			position: absolute;
+			background: $bg-color;
+			left: 0;
+			right: 0;
+			bottom: 0;
+			top: 0;
+			margin: auto;
+			border-radius: 14rpx;
+			.text-content{
+				width: 448rpx;
+				height: 284rpx;
+				padding: 20rpx 35rpx;
+				float: left;
+				.title{
+					line-height: 40rpx;
+					font-size: $font-size-28;
+					color: $text-color;
+					text-align: center;
+					font-weight: bold;
+					margin-bottom: 36rpx;
+				}
+				.share{
+					line-height: 36rpx;
+					font-size: $font-size-26;
+					color: $text-color;
+					text-align: justify;
+					margin-top: 22rpx;
+					font-weight: normal;
+					.txt{
+						margin-left: 10rpx;
+						color: #FF2A2A;
+					}
+				}
+				.text{
+					line-height: 36rpx;
+					font-size: $font-size-26;
+					color: $text-color;
+					text-align: justify;
+					margin-top: 22rpx;
+				}
+			}
+			.alert-btn{
+				width: 80%;
+				height: 70rpx;
+				display: flex;
+				margin: 0 auto;
+				.btn{
+					flex: 1;
+					line-height: 70rpx;
+					font-size: $font-size-28;
+					text-align: center;
+					color: #FFFFFF;
+					border-radius: 35rpx;
+					padding: 0;
+					margin: 0 15rpx;
+					&.btn-cancel{
+						background: $btn-cancel;
+					}
+					&.btn-confirm{
+						background: $btn-confirm;
+					}
+				}
+			}
+		}	
+	}
+</style>

+ 1140 - 0
pages/seller/order/order-club-list.vue

@@ -0,0 +1,1140 @@
+<template>
+	<view class="container" :style="{ paddingTop: 82 + 'px' }">
+		<view class="order-section-top">
+			<scroll-view scroll-x scroll-with-animation class="tab-view" :scroll-left="scrollLeft">
+				<view
+					v-for="(item, index) in orderTabBar"
+					:key="index"
+					class="tab-bar-item"
+					:class="[currentTab == index ? 'active' : '']"
+					:data-current="index"
+					@tap.stop="onClickTab"
+				>
+					<text class="tab-bar-title">{{ item.text }}</text>
+				</view>
+			</scroll-view>
+			<view class="tab-screen">
+				<view
+					v-for="(item, index) in screenTabBar"
+					:key="index"
+					class="tab-screen-item"
+					:class="[screenTab == index ? 'active' : '']"
+					:data-current="index"
+					@tap.stop="onClickScreenTab(index)"
+					>{{ item.text }}</view
+				>
+			</view>
+		</view>
+		<swiper
+			class="tab-content"
+			:current="currentTab"
+			duration="80"
+			@animationfinish="onChange"
+			:style="{ height: winHeight + 'px' }"
+		>
+			<swiper-item v-for="(tabItem, index) in orderTabBar" :key="index">
+				<tui-skeleton
+					v-if="skeletonShow"
+					backgroundColor="#fafafa"
+					borderRadius="10rpx"
+					:isLoading="false"
+					:loadingType="5"
+				></tui-skeleton>
+				<scroll-view
+					scroll-y
+					class="scoll-y tui-skeleton"
+					@scrolltolower="scrolltolower"
+					:style="{ height: winHeight + 'px' }"
+				>
+					<view :class="{ 'tui-order-list': scrollTop >= 0 }" class="tui-skeleton clearfix">
+						<!-- 空白页 -->
+						<empty
+							v-if="tabItem.loaded === true && tabItem.orderList.length === 0"
+							:typeIndex="currentTab"
+							:navbarHeight="navbarHeight"
+						></empty>
+						<!-- 列表 -->
+						<view v-else class="tui-order-content">
+							<view
+								class="tui-order-item"
+								v-for="(order, orderIndex) in tabItem.orderList"
+								:key="orderIndex"
+								@click.stop="detail(order)"
+							>
+								<view class="order-title">
+									<view class="order-title-name">
+										<text>{{ order.clubName ? order.clubName : '' }}</text>
+										<text class="tags" v-if="order.svipUserFlag == 0 && order.userIdentity === 2 ">VIP</text>
+										<text class="tags sv" v-if="order.svipUserFlag == 1">SVIP</text>
+									</view>
+									<view class="order-title-t">
+										<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 }}({{ order.orderId }})
+										</text>
+										<image
+											class="bage-icon"
+											src="https://static.caimei365.com/app/img/icon/icon-type@3x.png"
+											mode="widthFix"
+											v-if="order.secondHandOrderFlag == 1"
+										>
+										</image>
+									</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">
+											{{ StateExpFormat(order.status) }}
+										</view>
+									</view>
+								</view>
+								<block v-for="(shop, index) in order.shopOrderList" :key="index">
+									<view class="goods-title">
+										<view v-if="shop.shopPromotion" class="floor-item-act">
+											<view class="floor-tags"> {{ shop.shopPromotion.name }} </view>
+										</view>
+										<view class="title-text tui-skeleton-fillet"> {{ shop.shopName }} </view>
+									</view>
+									<view
+										class="goods-item"
+										v-for="(pros, prosIndex) in shop.orderProductList"
+										:key="prosIndex"
+									>
+										<view class="goods-pros-t">
+											<view class="pros-img tui-skeleton-fillet">
+												<image :src="pros.image" alt="" />
+												<text class="tips" v-if="pros.productType == 2 || pros.productType == 1"
+													>赠品</text
+												>
+											</view>
+											<view class="pros-product clearfix">
+												<view class="producttitle tui-skeleton-fillet">{{ pros.name }}</view>
+												<view
+													class="productspec tui-skeleton-fillet"
+													v-if="pros.productCategory != 2"
+												>
+													规格:{{ pros.productUnit ? pros.productUnit : '' }}
+												</view>
+												<view class="productprice">
+													<view
+														class="price tui-skeleton-fillet"
+														:class="
+															pros.svipPriceFlag == 1 ||
+															PromotionsFormat(pros.productPromotion)
+																? 'none'
+																: ''
+														"
+													>
+														<text>¥{{ pros.price | NumFormat }}</text>
+													</view>
+													<view class="count tui-skeleton-fillet">
+														<text class="small">x</text>{{ pros.num }}
+													</view>
+												</view>
+												<view class="floor-item-act">
+													<template v-if="pros.productPromotion">
+														<view
+															v-if="PromotionsFormat(pros.productPromotion)"
+															class="floor-tags"
+															@click.stop="clickPopupShow(pros.productPromotion)"
+														>
+															{{ pros.productPromotion.name }}
+															<text
+																v-if="
+																	pros.productPromotion != null &&
+																		pros.productPromotion.type != 3
+																"
+															>
+																:¥{{
+																	pros.productPromotion == null
+																		? '0.00'
+																		: pros.productPromotion.touchPrice | NumFormat
+																}}
+															</text>
+														</view>
+														<view
+															v-else-if="pros.productPromotion.type != 3"
+															class="floor-tags"
+															@click.stop="clickPopupShow(pros.productPromotion)"
+															>{{ pros.productPromotion.name }}</view
+														>
+													</template>
+													<template v-if="pros.svipPriceFlag == 1">
+														<view class="svip-tags">
+															<view class="tags">SVIP</view>
+															<view class="price">{{ pros.svipPriceTag }}</view>
+														</view>
+													</template>
+												</view>
+											</view>
+										</view>
+									</view>
+								</block>
+								<view class="order-footer">
+									<view class="order-footer-top" v-if="order.discountFee != 0">
+										经理折扣:¥{{ order.discountFee | NumFormat }}
+									</view>
+									<view class="order-footer-bot">
+										<view class="count tui-skeleton-fillet">共{{ order.productCount }}件商品</view>
+										<view
+											class="money tui-skeleton-fillet"
+											v-if="order.status == 31 || order.status == 32 || order.status == 33"
+										>
+											已支付:<label style="color:#f94b4b ;"
+												>¥{{ order.receiptAmount | NumFormat }}</label
+											>
+										</view>
+										<view class="money tui-skeleton-fillet" v-else>
+											待付总额:<label style="color:#f94b4b ;"
+												>¥{{ order.pendingPayments | NumFormat }}</label
+											>
+										</view>
+									</view>
+								</view>
+								<!-- 底部button -->
+								<order-button
+									ref="orderButton"
+									v-if="clubSpId === serviceProviderId"
+									:status="order.status"
+									:order = "order"
+									:rechargeGoods="order.rechargeGoods"
+									:orderId="order.orderId"
+									:userId="order.userId"
+									:secondHandOrderFlag="order.secondHandOrderFlag"
+									@buttonConfirm="handButtonConfirm"
+								>
+								</order-button>
+							</view>
+							<!--加载loadding-->
+							<tui-loadmore :visible="loadding" :index="3" type="black"></tui-loadmore>
+							<tui-nomore
+								:visible="!pullUpOn"
+								:backgroundColor="'#ffffff'"
+								:text="nomoreText"
+							></tui-nomore>
+							<!--加载loadding-->
+						</view>
+					</view>
+				</scroll-view>
+			</swiper-item>
+		</swiper>
+		<!-- 分享弹窗 -->
+		<share-alert v-if="isShareModal" :shareType="isShareType" :orderId="btnoRderID" @shareConfirm="onShareAppMessage"> </share-alert>
+		<!-- 透明模态层 -->
+		<modal-layer v-if="isModalLayer"></modal-layer>
+		<!-- 再来一单弹窗 -->
+		<view class="aganBj" v-show="showAgan">
+			<view class="alertAgan">
+				<text class="title">{{ promptitle }}</text>
+				<view class="goods">
+					<view class="list" v-for="(item, index) in failList" :key="index">
+						<image class="image-left" :src="item.image"></image>
+						<view class="name-right">{{ item.name }}</view>
+					</view>
+				</view>
+				<view class="BtnAll">
+					<view class="closebtn btn" @click="closeBtn">取消</view>
+					<view class="cancel btn" @click="cancelBtn">确定</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+import { mapState, mapMutations } from 'vuex'		
+import headerBack from '@/components/cm-module/headerNavbar/header-back' // 自定义顶部导航
+import btSearch from '@/components/uni-search/bt-search.vue' // 搜索
+import orderButton from './components/sellerOrderButton' // 操作按钮
+import modalLayer from '@/components/modal-layer'
+import empty from './components/empty'
+import shareAlert from './components/sellerShareAlert.vue' // 分享弹窗
+
+export default {
+	components: {
+		headerBack,
+		empty,
+		btSearch,
+		orderButton,
+		modalLayer,
+		shareAlert
+	},
+	data() {
+		return {
+			orderTabBar: [
+				{ listType: 0, text: '全部订单', orderList: [] },
+				{ listType: 1, text: '待确认', orderList: [] },
+				{ listType: 2, text: '待付款', orderList: [] },
+				{ listType: 3, text: '待发货', orderList: [] },
+				{ listType: 4, text: '已发货', orderList: [] },
+				{ listType: 5, text: '退货/款', orderList: [] }
+			],
+			screenTabBar: [
+				{ type: 0, text: '全部订单' },
+				{ type: 1, text: '自主订单' },
+				{ type: 2, text: '协销订单' }
+			],
+			winHeight: '', //窗口高度
+			clubId: 0, //机构ID
+			userId: 0,
+			currentTab: 0, //预设当前项的值
+			screenTab: 0, //筛选预设当前项的值
+			scrollLeft: 0, //tab标题的滚动条位置
+			clubSpId:0, // 机构协销Id
+			serviceProviderId: 0, //协销用户ID
+			orderData: [],
+			btnClubUserID: 0,
+			btnoRderID: 0, //点击按钮传入的的订单ID
+			pageNum: 1, //页数
+			pageSize: 10, //条数
+			scrollTop: 0,
+			deteleType: '',
+			skeletonShow: true,
+			isClickChange: false,
+			isShareModal: false, //控制分享弹窗
+			isShareType:2,
+			isSeller: false,
+			isModalLayer: false,
+			loadding: false,
+			pullUpOn: true,
+			hasNextPage: false,
+			pullFlag: true,
+			navbarHeight: '',
+			nomoreText: '上拉显示更多',
+			showAgan: false,
+			failList: [], // 再来一单可购买商品
+			promptitle: '',
+			aganOrderId: 0,
+			authType:0,
+		}
+	},
+	onLoad(option) {
+		let self = this
+		this.currentTab = option.listType
+		this.authType = option.authType
+		this.initDataInfo()
+		uni.getSystemInfo({
+			//  高度自适应
+			success: function(res) {
+				let calc = res.windowHeight
+				self.winHeight = calc - 82
+			}
+		})
+	},
+	filters: {
+		NumFormat(value) {
+			//处理金额
+			return Number(value).toFixed(2)
+		}
+	},
+	methods: {
+		async initDataInfo() {
+			const clubInfo = await this.$api.getComStorage('orderUserInfo')
+			const userInfo = await this.$api.getStorage()
+			this.clubId = clubInfo.clubId ? clubInfo.clubId : 0
+			this.userId = clubInfo.userId ? clubInfo.userId : 0
+			this.clubSpId = clubInfo.serviceProviderId
+			this.serviceProviderId = userInfo.serviceProviderId ? userInfo.serviceProviderId : 0
+			this.getOrderDatainit(this.currentTab)
+		},
+		onChange(e) {
+			// 滚动切换标签样式
+			let index = e.target.current || e.detail.current
+			if (this.isClickChange) {
+				this.currentTab = index
+				this.isClickChange = false
+				return
+			}
+			this.isClickChange = false
+			this.currentTab = index
+			this.checkCor()
+			this.pageNum = 1
+			this.pullUpOn = true //切换时隐藏
+			this.loadding = false //切换时隐藏
+			this.nomoreText = ''
+			this.getOrderDatainit(this.currentTab, 'tabChange')
+		},
+		// 点击标题切换当前页时改变样式
+		onClickTab(e) {
+			let tabIndex = e.target.dataset.current || e.currentTarget.dataset.current
+			if (this.currentTab === tabIndex) {
+				return false
+			} else {
+				this.isClickChange = true
+				this.currentTab = tabIndex
+				this.pageNum = 1
+				this.pullUpOn = true //切换时隐藏
+				this.loadding = false //切换时隐藏
+				this.getOrderDatainit(this.currentTab)
+			}
+		},
+		onClickScreenTab(index) {
+			console.log(index)
+			this.screenTab = index
+			this.pageNum = 1
+			this.pullUpOn = true //切换时隐藏
+			this.loadding = false //切换时隐藏
+			this.nomoreText = ''
+			this.getOrderDatainit(this.currentTab)
+		},
+		//判断当前滚动超过一屏时,设置tab标题滚动条。
+		checkCor: function() {
+			if (this.currentTab > 3) {
+				//这里距离按实际计算
+				this.scrollLeft = 300
+			} else {
+				this.scrollLeft = 0
+			}
+		},
+		getOrderDatainit(index, source) {
+			setTimeout(() => {
+				this.skeletonShow = false
+			}, 1500)
+			let orderItem = this.orderTabBar[index]
+			let listType = orderItem.listType
+			if (source === 'tabChange' && orderItem.loaded === true) {
+				//tab切换只有第一次需要加载数据
+				return
+			}
+			setTimeout(() => {
+				this.SellerService.GetSellerClubOrderList({
+					listType: index,
+					clubId: this.clubId,
+					orderSubmitType: this.screenTab,
+					serviceProviderId: this.serviceProviderId,
+					pageNum: 1,
+					pageSize: this.pageSize
+				})
+					.then(response => {
+						let data = response.data
+						let orderList = data.list.filter(item => {
+							//添加不同状态下订单的表现形式
+							item = Object.assign(item, this.StateExpFormat(item.listType))
+							return item
+						})
+						orderItem.orderList = []
+						orderList.forEach(item => {
+							orderItem.orderList.push(item)
+						})
+						//loaded新字段用于表示数据加载完毕,如果为空可以显示空白页
+						this.$set(orderItem, 'loaded', true)
+						this.hasNextPage = data.hasNextPage
+						if (this.hasNextPage) {
+							this.pullUpOn = false
+							this.nomoreText = '上拉显示更多'
+						} else {
+							if (orderItem.orderList.length < 2) {
+								this.pullUpOn = true
+							} else {
+								this.pullUpOn = false
+								this.nomoreText = '已至底部'
+							}
+						}
+					})
+					.catch(error => {
+						this.$util.msg(error.msg, 2000)
+					})
+			}, 600)
+		},
+		getOnReachBottomData(index) {
+			//上拉加载
+			this.pageNum += 1
+			this.SellerService.GetSellerClubOrderList({
+				listType: index,
+				clubId: this.clubId,
+				orderSubmitType: this.screenTab,
+				serviceProviderId: this.serviceProviderId,
+				pageNum: this.pageNum,
+				pageSize: this.pageSize
+			})
+				.then(response => {
+					let orderItem = this.orderTabBar[index]
+					let data = response.data
+					this.hasNextPage = data.hasNextPage
+					orderItem.orderList = orderItem.orderList.concat(data.list)
+					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)
+				})
+		},
+		scrolltolower() {
+			if (this.hasNextPage) {
+				this.loadding = true
+				this.pullUpOn = true
+				this.getOnReachBottomData(this.currentTab)
+			}
+		},
+		detail(order) {
+			//订单详情跳转
+			this.isModalLayer = true
+			if(this.authType === '1' || this.authType === '2'){
+				this.$api.navigateTo(
+					`/pages/seller/order/order-club-details?listType=${this.currentTab}&orderId=${order.orderId}&userId=${
+						order.userId
+					}`
+				)
+			}else{
+				this.$api.navigateTo(
+					`/pages/seller/order/order-details?listType=${this.currentTab}&orderId=${order.orderId}&userId=${
+						order.userId
+					}`
+				)
+			}
+			
+		},
+		handButtonConfirm(data) {
+			//获取点击
+			this.handShowAlert(data)
+			this.btnoRderID = data.orderId
+		},
+		handShowAlert(data) {
+			//执行
+			switch (data.type) {
+				case 'query':
+					this.isModalLayer = true
+					this.$api.navigateTo('/pages/user/order/order-logistics?orderId=' + data.orderId)
+					break
+				case 'delete':
+					this.handOrderDetele(data.orderId)
+					break
+				case 'cancel':
+					this.handCenceConfirm(data.orderId)
+					break
+				case 'confirm':
+					this.handOrderConfirm(data.orderId)
+					break
+				case 'again':
+					this.handOrderAgain(data.orderId)
+					break
+			}
+		},
+		handOrderAgain(orderId) {
+			this.aganOrderId = orderId
+			this.SellerService.SellerCreateOrderAgain({
+				confirmFlag: 0,
+				orderId: this.aganOrderId,
+				serviceProviderId: this.serviceProviderId
+			})
+				.then(res => {
+					if (res.code == 0) {
+						this.$api.setStorage('orderUserInfo', {
+							clubId: res.data.clubId,
+							againBuyProductIds: res.data.productIds,
+							userId: res.data.userId
+						})
+						this.$api.navigateTo('/pages/seller/cart/cart')
+					}
+				})
+				.catch(error => {
+					if (error.code == -3) {
+						this.showAgan = true
+						this.promptitle = error.msg
+						this.failList = error.data
+					} else if (error.code == -2) {
+						this.$util.modal('', error.msg, '确定', '', false, () => {})
+					} else {
+						this.$util.msg(error.msg, 2000)
+					}
+				})
+		},
+		closeBtn() {
+			//
+			this.showAgan = false
+		},
+		cancelBtn() {
+			// 再来一单弹窗
+			this.SellerService.SellerCreateOrderAgain({
+				serviceProviderId: this.serviceProviderId,
+				orderId: this.aganOrderId,
+				confirmFlag: 1
+			}).then(res => {
+				if (res.code == 0) {
+					this.$api.navigateTo('/pages/seller/cart/cart')
+					this.showAgan = false
+				}
+			})
+		},
+		handOrderConfirm(orderId) {
+			//确认订单
+			this.$util.modal('提示', '确认此订单?', '确定', '取消', true, () => {
+				this.OrderService.AffirmOrder({ orderId: orderId })
+					.then(response => {
+						this.$util.msg(response.msg, 2000, true, 'success')
+						setTimeout(() => {
+							this.getOrderDatainit(this.currentTab)
+						}, 2000)
+					})
+					.catch(error => {
+						this.$util.msg(error.msg, 2000)
+					})
+			})
+		},
+		handOrderDetele(orderId) {
+			//删除订单
+			this.$util.modal('提示', '确认删除该订单吗?', '确定', '取消', true, () => {
+				this.OrderService.DeleteOrder({ orderId: orderId })
+					.then(response => {
+						this.$util.msg(response.msg, 2000, true, 'success')
+						setTimeout(() => {
+							this.getOrderDatainit(this.currentTab)
+						}, 2000)
+					})
+					.catch(error => {
+						this.$util.msg(error.msg, 2000)
+					})
+			})
+		},
+		handCenceConfirm(orderId) {
+			//取消订单
+			this.$util.modal('提示', '确认取消该订单吗?', '确定', '取消', true, () => {
+				this.OrderService.CancelOrder({ orderId: orderId , userIdentity : 1})
+					.then(response => {
+						this.$util.msg(response.msg, 2000, true, 'success')
+						setTimeout(() => {
+							this.getOrderDatainit(this.currentTab)
+						}, 2000)
+					})
+					.catch(error => {
+						this.$util.msg(error.msg, 2000)
+					})
+			})
+		},
+		handlSearchPath() {
+			this.$api.navigateTo('/pages/seller/order/search-order')
+		},
+		onShareAppMessage(res) {
+			//分享转发
+			this.isShareModal = false
+			if (res.from === 'button') {
+				// 来自页面内转发按钮
+				// console.log(res.target)
+			}
+			return {
+				title: '您有新的分享订单,快来查看吧~',
+				path: `/pages/user/order/order-sharelogin?orderId=${this.btnoRderID}&userId=${
+					this.btnClubUserID
+				}&serviceProviderId=${this.serviceProviderId}`,
+				imageUrl: 'https://img.caimei365.com/group1/M00/03/95/Cmis216Sk_SABnOFABZCgCzFV_g063.png'
+			}
+		},
+		PromotionsFormat(promo) {
+			//促销活动类型数据处理
+			if (promo != null) {
+				if (promo.type == 1 && promo.mode == 1) {
+					return true
+				} else {
+					return false
+				}
+			}
+			return false
+		},
+		//订单状态文字和颜色
+		StateExpFormat(state) {
+			let stateText = '',
+				stateTextObject = {
+					0: '待确认',
+					4: '交易完成',
+					5: '订单完成',
+					6: '已关闭',
+					7: '交易全退',
+					77: '交易全退',
+					11: '待付款待发货',
+					12: '待付款部分发货',
+					13: '待付款已发货',
+					21: '部分付款待发货',
+					22: '部分付款部分发货',
+					23: '部分付款已发货',
+					31: '已付款待发货',
+					32: '已付款部分发货',
+					33: '已付款已发货',
+					111: '待付款待发货'
+				}
+			Object.keys(stateTextObject).forEach(key => {
+				if (key == state) {
+					stateText = stateTextObject[key]
+				}
+			})
+			return stateText
+		},
+		orderPriceToFixed(n) {
+			let price = ''
+			price = n.toFixed(2)
+			return price
+		}
+	},
+	onPageScroll(e) {
+		this.scrollTop = e.scrollTop
+	},
+	onShow() {
+		this.isModalLayer = false
+	}
+}
+</script>
+
+<style lang="scss">
+/*tabbar end*/
+page {
+	background: #ffffff;
+}
+/*tabbar start*/
+::-webkit-scrollbar {
+	width: 0;
+	height: 0;
+	color: transparent;
+}
+.order-section-top {
+	width: 100%;
+	position: fixed;
+	top: 0;
+	left: 0;
+	z-index: 99;
+	background: #ffffff;
+	.tab-screen {
+		height: 60rpx;
+		width: 702rpx;
+		padding: 10rpx 24rpx;
+		border-top: 1px solid #f7f7f7;
+		border-bottom: 1px solid #f7f7f7;
+		display: flex;
+		justify-content: center;
+		justify-items: center;
+		.tab-screen-item {
+			flex: 1;
+			height: 60rpx;
+			border-radius: 10rpx;
+			background: #f7f7f7;
+			margin-right: 22rpx;
+			line-height: 66rpx;
+			font-size: $font-size-28;
+			color: #333333;
+			text-align: center;
+			&.active {
+				color: $color-system;
+			}
+			&:last-child {
+				margin-right: 0;
+			}
+		}
+	}
+}
+.tab-view::before {
+	content: '';
+	position: absolute;
+	border-bottom: 1rpx solid #eaeef1;
+	-webkit-transform: scaleY(0.5);
+	transform: scaleY(0.5);
+	bottom: 0;
+	right: 0;
+	left: 0;
+}
+.tab-view {
+	width: 100%;
+	height: 80rpx;
+	overflow: hidden;
+	box-sizing: border-box;
+	background: #fff;
+	white-space: nowrap;
+	border-top: 1px solid #f7f7f7;
+}
+.tab-bar-item {
+	padding: 0;
+	height: 80rpx;
+	min-width: 80rpx;
+	line-height: 80rpx;
+	margin: 0 28rpx;
+	display: inline-block;
+	text-align: center;
+	box-sizing: border-box;
+	&.active {
+		border-bottom: 6rpx solid $color-system;
+	}
+	.tab-bar-title {
+		height: 80rpx;
+		line-height: 80rpx;
+		font-size: $font-size-28;
+		color: $text-color;
+	}
+	&.active .tab-bar-title {
+		color: $color-system !important;
+	}
+}
+.container {
+	padding-bottom: env(safe-area-inset-bottom);
+	height: auto;
+	position: relative;
+}
+.tui-order-content {
+	width: 100%;
+	height: auto;
+}
+.tui-order-list {
+	width: 100%;
+	position: relative;
+}
+.tui-order-item {
+	display: flex;
+	flex-direction: column;
+	width: 702rpx;
+	padding: 0 24rpx;
+	background: #fff;
+	border-bottom: 20rpx solid #f7f7f7;
+}
+.order-title {
+	width: 100%;
+	height: auto;
+	.order-title-name {
+		width: 100%;
+		height: 72rpx;
+		border-bottom: 1px solid #f7f7f7;
+		line-height: 72rpx;
+		text-align: left;
+		font-size: $font-size-28;
+		color: #333333;
+		.tags {
+			display: inline-block;
+			width: 60rpx;
+			height: 32rpx;
+			border-radius: 8rpx;
+			background: #f0cb72;
+			font-size: $font-size-22;
+			color: #4e4539;
+			text-align: center;
+			line-height: 32rpx;
+			margin-left: 10rpx;
+			&.sv {
+				background: #333333;
+				color: #f0cb72;
+			}
+		}
+	}
+	.order-title-t {
+		width: 100%;
+		height: 68rpx;
+		float: left;
+		line-height: 68rpx;
+		position: relative;
+		.bage-icon {
+			width: 50rpx;
+			height: 50rpx;
+			display: block;
+			position: absolute;
+			right: 0;
+			top: 9rpx;
+		}
+		.bage-buss {
+			display: inline-block;
+			width: 72rpx;
+			height: 30rpx;
+			background: radial-gradient(circle, rgba(255, 39, 180, 1) 0%, rgba(193, 77, 245, 1) 100%);
+			border-radius: 4rpx;
+			line-height: 30rpx;
+			font-size: $font-size-22;
+			text-align: center;
+			color: #ffffff;
+			margin-top: 8rpx;
+		}
+		.bage-auto {
+			display: inline-block;
+			width: 72rpx;
+			height: 30rpx;
+			background: radial-gradient(circle, rgba(255, 180, 39, 1) 0%, rgba(245, 142, 77, 1) 100%);
+			border-radius: 4rpx;
+			line-height: 30rpx;
+			font-size: $font-size-22;
+			text-align: center;
+			color: #ffffff;
+			margin-top: 8rpx;
+		}
+		.bage-text {
+			display: inline-block;
+			font-size: $font-size-28;
+			line-height: 68rpx;
+			text-align: left;
+			color: $color-system;
+			margin-left: 15rpx;
+		}
+	}
+	.order-title-b {
+		width: 100%;
+		height: 40rpx;
+		float: left;
+		margin-top: 8rpx;
+		.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 {
+	width: 100%;
+	height: 56rpx;
+	float: left;
+	margin-top: 10rpx;
+	.floor-item-act {
+		height: 56rpx;
+		text-align: center;
+		box-sizing: border-box;
+		float: left;
+		padding: 10rpx 0;
+		margin-right: 12rpx;
+	}
+	.title-text {
+		width: 400rpx;
+		overflow: hidden;
+		text-overflow: ellipsis;
+		white-space: nowrap;
+		float: left;
+		font-size: $font-size-28;
+		color: $text-color;
+		text-align: left;
+		line-height: 56rpx;
+		font-weight: bold;
+	}
+}
+.goods-item {
+	width: 100%;
+	height: auto;
+}
+.goods-pros-t {
+	width: 100%;
+	height: auto;
+	padding: 24rpx 0;
+	.pros-img {
+		float: left;
+		width: 210rpx;
+		height: 100%;
+		border-radius: 10rpx;
+		margin: 0 26rpx 0 0;
+		position: relative;
+		.tips {
+			display: inline-block;
+			width: 80rpx;
+			height: 40rpx;
+			background-image: linear-gradient(214deg, #ff4500 0%, #ff5800 53%, #ff4367 100%);
+			line-height: 40rpx;
+			text-align: center;
+			font-size: $font-size-24;
+			color: #ffffff;
+			border-radius: 10rpx 0 10rpx 0;
+			position: absolute;
+			top: 0;
+			left: 0;
+		}
+		image {
+			width: 210rpx;
+			height: 210rpx;
+			border-radius: 10rpx;
+			border: 1px solid #f3f3f3;
+		}
+	}
+}
+.pros-product {
+	width: 460rpx;
+	height: 100%;
+	line-height: 36rpx;
+	font-size: $font-size-26;
+	position: relative;
+	float: left;
+	.producttitle {
+		width: 100%;
+		display: inline-block;
+		height: auto;
+		text-overflow: ellipsis;
+		display: -webkit-box;
+		word-break: break-all;
+		-webkit-box-orient: vertical;
+		-webkit-line-clamp: 2;
+		overflow: hidden;
+		margin-bottom: 8rpx;
+	}
+	.productspec {
+		height: 36rpx;
+		color: #999999;
+		text-overflow: ellipsis;
+		display: -webkit-box;
+		word-break: break-all;
+		-webkit-box-orient: vertical;
+		-webkit-line-clamp: 1;
+		overflow: hidden;
+	}
+	.productprice {
+		height: 48rpx;
+		width: 100%;
+		float: left;
+		.price {
+			line-height: 48rpx;
+			font-size: $font-size-28;
+			width: 48%;
+			color: #ff2a2a;
+			float: left;
+			font-weight: bold;
+			&.none {
+				text-decoration: line-through;
+				color: #999999;
+			}
+		}
+		.count {
+			height: 100%;
+			float: right;
+			position: relative;
+			.small {
+				color: #666666;
+			}
+		}
+	}
+	.floor-item-act {
+		width: 100%;
+		height: 56rpx;
+		text-align: center;
+		box-sizing: border-box;
+		float: left;
+		padding: 0 0 10rpx 0;
+	}
+}
+.order-footer {
+	width: 100%;
+	height: 78rpx;
+	float: left;
+	.order-footer-top {
+		width: 100%;
+		height: 34rpx;
+		line-height: 34rpx;
+		font-size: $font-size-24;
+		color: #999999;
+		text-align: right;
+	}
+	.order-footer-bot {
+		width: 100%;
+		float: left;
+		height: 48rpx;
+		line-height: 48rpx;
+		font-size: $font-size-28;
+		font-weight: bold;
+		color: $text-color;
+		.count {
+			width: 50%;
+			float: left;
+			text-align: left;
+		}
+		.money {
+			width: 50%;
+			float: right;
+			text-align: right;
+		}
+	}
+}
+.aganBj {
+	position: fixed;
+	left: 0;
+	top: 0;
+	bottom: 0;
+	width: 100%;
+	height: 100%;
+	background-color: rgba(0, 0, 0, 0.5);
+	z-index: 999999;
+	.alertAgan {
+		position: absolute;
+		top: 50%;
+		left: 50%;
+		transform: translate(-50%, -50%);
+		width: 580rpx;
+		background-color: #fff;
+		border-radius: 16rpx;
+		.title {
+			font-size: 30rpx;
+			color: #333333;
+			line-height: 42rpx;
+			padding: 30rpx;
+			display: block;
+		}
+		.goods {
+			padding: 0 30rpx;
+			.list {
+				padding: 10px 0;
+				border-bottom: 1rpx solid #e1e1e1;
+				margin: 10rpx 0;
+				.image-left {
+					width: 86rpx;
+					height: 86rpx;
+					border: 2rpx solid #e1e1e1;
+					border-radius: 6rpx;
+					display: inline-block;
+					vertical-align: middle;
+				}
+				.name-right {
+					display: inline-block;
+					width: 416rpx;
+					margin-left: 15rpx;
+					font-size: 26rpx;
+					color: #666666;
+					vertical-align: middle;
+					word-break: break-all;
+					overflow: hidden;
+					text-overflow: ellipsis;
+					display: -webkit-inline-box;
+					-webkit-line-clamp: 2;
+					-webkit-box-orient: vertical;
+				}
+			}
+		}
+		.BtnAll {
+			margin-top: 30rpx;
+			.btn {
+				display: inline-block;
+				width: 290rpx;
+				height: 90rpx;
+				line-height: 90rpx;
+				text-align: center;
+				&.closebtn {
+					border-radius: 0px 0px 0px 10px;
+					color: #999999;
+					background: #efefef;
+				}
+				&.cancel {
+					border-radius: 0px 0px 8px 0px;
+					background: $btn-confirm;
+					color: #fff;
+				}
+			}
+		}
+	}
+}
+</style>

+ 1094 - 0
pages/seller/order/order-confirm.vue

@@ -0,0 +1,1094 @@
+<template>
+	<view class="container order clearfix" :style="{paddingBottom :isIphoneX ? '190rpx' : '134rpx'}">
+		<!-- 地址选择 -->
+		<choice-address ref="choiceAddress" v-if="isAddress" :addressData="addressData"></choice-address>
+		<!-- 商品 -->
+		<seller-goodsList ref='goods' v-if="isRequest" :secondflag="secondflag" :goodsData="goodsData" @handleGoodList="handChangeInputGoodsList"></seller-goodsList>
+		<!-- 返佣订单 -->
+		<view class="order-return" v-if="goodsData.length==1 && secondflag">
+			<view class="order-return-main" @click="handleRebateFlag">
+				<view class="label">是否返佣</view>
+				<view class="label-right">
+					<text class="text-l">{{ rebateFeeText }}</text>
+					<text class="iconfont icon-xiayibu"></text>
+				</view>
+			</view>
+			<view class="order-return-input" v-if="confirmParam.payInfo.rebateFlag === 2">
+				<input class="input" v-model="rebateFee" type="number" placeholder="请输入返佣服务费" maxlength="20">
+			</view>
+		</view>
+		<!-- 返佣订单 -->
+		<view class="Rebate" @click="handleSecondFlag" v-if="!secondflag">
+			<text class="rebate-title">二手返佣订单</text>
+			<text class="iconfont" :class="rebatecheck?'icon-yixuanze':'icon-weixuanze'" ></text>
+		</view>
+		<!-- 发票信息 -->
+		<seller-invoice ref="invoice" 
+						v-if="isRequest" 
+						:invoiceDatas="invoiceData" 
+						@handleChoiceaInvoice="handleChoiceaInvoiceData">
+		</seller-invoice>
+		<!-- 优惠券选择弹窗 -->
+		<sellerCoupon ref="coupon" 
+				v-if="isCouponShow"
+				:couponList="couponList" 
+				@handleChoiceaCoupon="handleChoiceaCouponData">
+		</sellerCoupon>
+		<!-- 兑换优惠券弹窗 -->
+		<sellerExchangeCoupon v-if="isExchangePopup"></sellerExchangeCoupon>
+		<!-- 运费 -->
+		<seller-freight ref="freight" 
+						v-if="isFreight" 
+						:freightDatas="freightData" 
+						@handleChoiceaFreight="handleChoiceaFreightData" 
+						@showFreightAlert="handFreightAlertShow">
+		</seller-freight>
+		<freight-alert v-if="isfreightTip" ref="csPhone"></freight-alert>
+		<!-- 余额抵扣 -->
+		<view class="invoice-balance" v-if="!rechargeGoods">
+			<view class="balabce-t">
+				<view class="balabce-t-le">余额抵扣</view>
+				<view class="balabce-t-ri">
+					<view class="money">
+						<text>可用余额:</text>
+						<text>¥{{ userMoney | NumFormat }}</text>
+					</view>
+					<view class="checkbox-box">
+						<button class="checkbox iconfont" 
+								hover-class="btn-hover"
+								v-if="userMoney!=0"
+								@click.stop="checkedBalabce"
+								:class="[ischecked ?'icon-yixuanze':'icon-weixuanze']"
+						>
+						</button>
+					</view>
+				</view>
+			</view>
+			<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 | NumFormat}},剩余:¥{{ surplusMoney | NumFormat }}</text>
+				</view>
+			</view>
+		</view>
+		<!-- 选择对机构是否可见 -->
+		<sellerClubVisible ref="clubVisible"  v-if="isRequest" @handleClubVisible="handleClubVisibleData"></sellerClubVisible>
+		<!-- 售后条例 -->
+		<seller-regulations  ref="regulations"
+							 v-if="isRequest && seconDepositFlg" 
+							:regulaDatas="clauseList" 
+							@handleData="handleClauseData">
+		</seller-regulations>
+		<regula-alert v-if="isregulaTip" ref="csPhone"></regula-alert>
+		<!-- 底部 -->
+		<view class="footer" :style="{paddingBottom :isIphoneX ? '68rpx' : '0rpx'}">
+			<view class="footer-le">
+				<view class="footer-count">
+					<text>共{{ totalCount }}件商品</text>
+				</view>
+				<view class="footer-price">
+					<view class="sum" :class="totalDiscountAmount == 0 ? 'none' : ''">
+						总价:<text class="price">¥{{orderShouldPayFee | NumFormat}}</text>
+					</view>
+					<view class="sum-none" v-if="totalDiscountAmount > 0">
+						<text class="money-reduced">共减<text>¥{{ totalDiscountAmount  | NumFormat}}</text></text>
+					</view>
+				</view>
+			</view>
+			<view class="footer-submit" @click.stop="orderSubmitMit">
+				<view class="btn" :class="isSubLoading ? 'disabled' : ''">提交订单</view>
+			</view>
+		</view>
+		<!-- 优惠券 -->
+		<view class="coupon-content-model" v-if="isCouponModel">
+			<view class="coupon-alert-content">
+				<view class="coupon">
+					<view class="coupon-list">
+						<view class="list-cell-tags">{{ ExchangeCouponData.couponType | TypeFormat }}</text></view>
+						<view class="list-cell-le">
+							<view class="coupon-maxMoney">
+								<text class="small">¥</text>
+								{{ ExchangeCouponData.couponAmount }}
+							</view>
+							<view class="coupon-minMoney">
+								<text class="txt">满{{ ExchangeCouponData.touchPrice }}可用</text>
+							</view>
+						</view>
+						<view class="list-cell-ri">
+							<view class="list-cell-top">
+								<text v-if="ExchangeCouponData.couponType == 0">
+									{{ ExchangeCouponData.productType && ExchangeCouponData.productType == 1 ? '全商城商品通用' : '仅可购买指定商品'  }}
+								</text>
+								<text v-if="ExchangeCouponData.couponType == 1">
+									{{ ExchangeCouponData.categoryType == 1 ? '仅限购买产品类商品' : '仅限购买仪器类商品' }}
+								</text>
+								<text v-if="ExchangeCouponData.couponType == 3">仅限购买店铺【{{ ExchangeCouponData.shopName }}】的商品</text>
+								<text v-if="ExchangeCouponData.couponType == 4 || ExchangeCouponData.couponType == 2">全商城商品通用</text>
+							</view>
+							<view class="list-cell-time">{{ ExchangeCouponData.startDate  }} - {{ ExchangeCouponData.endDate }}</view>
+						</view>
+					</view>
+					<view class="coupon-btn" @click.stop="handleClickCancel">立即收下</view>
+				</view>
+			</view>
+		</view>
+		<!-- 弹窗提示 -->
+		<tui-modal
+			:show="modal"
+			@click="handleClick"
+			@cancel="hideMobel"
+			:content="contentModalText"
+			:button="modalButton"
+			color="#333"
+			:size="32"
+			shape="circle"
+			:maskClosable="false"
+		>
+		</tui-modal>
+	</view>
+</template>
+
+<script>
+	import freightAlert from '@/components/cm-module/modelAlert/freightAlert.vue'
+	import choiceAddress from './components/sellerAddress'  
+	import sellerGoodsList from './components/sellerGoodsList'
+	import sellerInvoice from './components/sellerInvoice'
+	import sellerFreight from './components/sellerFreight'
+	import sellerCoupon from './components/sellerCoupon'
+	import sellerExchangeCoupon from './components/sellerExchangeCoupon'
+	import sellerClubVisible from './components/sellerClubVisible'
+	import sellerRegulations from './components/sellerRegulations.vue'
+	
+	export default {
+		components:{
+			choiceAddress,
+			sellerGoodsList,
+			sellerInvoice,
+			sellerFreight,
+			sellerCoupon,
+			sellerExchangeCoupon,
+			sellerClubVisible,
+			freightAlert,
+			sellerRegulations
+		},
+		data() {
+			return {
+				isSubLoading:false,
+				modalButton: [
+					{
+						text: '再想一想',
+						type: 'gray',
+						plain: true //是否空心
+					},
+					{
+						text: '继续提交',
+						customStyle: {
+							color: '#fff',
+							bgColor: 'linear-gradient(90deg, #F28F31 0%, #FF5B00 100%)'
+						},
+						plain: false
+					}
+				],
+				contentModalText: '', //操作文字提示语句
+				modal: false,
+				showModalstauts:1,
+				isIphoneX:this.$store.state.isIphoneX,
+				cartParam: {// 购物车立即结算确认订单参数
+					skuIds:0,		// 商品Id(逗号隔开)
+					serviceProviderId:0,// 协销Id
+					clubId:0			// 机构Id
+				}, 		
+				productParam: {// 商品立即购买确认订单参数
+					productCount:0, 	// 商品数量
+					productId:0,		// 商品Id
+					serviceProviderId:0,// 协销Id
+					clubId:0			// 机构Id
+				}, 	
+				postageParam: {// 邮费计算参数
+					skuIds:0,			// 商品Id(逗号隔开)
+					userId:0,			// 用户Id
+					townId:0			// 地区Id
+				},	
+				confirmParam: {// 提交订单参数
+					cartType:3, 		// 购买类型:(1自主下单, 3协销下单)
+					orderMiniType:0,    // 订单提交状态 0初始提交 1 继续提交
+					orderSource:6,		// 订单来源 1WWW 6小程序[采美,星范]
+					addressId:0,		// 收货地址Id
+					clubCouponId:0,		// 关联优惠券Id
+					clubId:0,			// 机构Id
+					orderInfo:[],		// 订单商品数据
+					orderInvoice:{type:0},	// 订单发票信息
+					orderSeen:1,		// 订单对机构可见度 1可见  2不可见
+					payInfo:{			// 订单金额数据
+						isColdChina:0, 		//是否勾选冷链费
+						orderShouldPayFee: 0,	// 订单最终支付金额
+						balancePayFlag: 0,		// 勾选余额的状态(1使用,0不使用)
+						clauseId:0,				// 条款Id
+						postage: 0,				// 运费金额
+						postageFlag: 0,			// 运费类型
+						userBeans: 0,			// 抵扣采美豆数量
+						rebateFee:0, 			// 返佣服务费
+						rebateFlag:0			// 是否返佣订单
+					},
+					unionId:uni.getStorageSync('unionId'),// 用户unionId
+				}, 	
+				rebateFee:'',
+				rebateFeeText:'否',
+				confirmType:1,			  
+				submitState:'',  		  // 提交状态
+				totalCount:0,			  // 订单提交总数量
+				reducedPrice:0,			  // 满减金额
+				couponAmount:0,	  		  // 优惠券金额
+				totalDiscountAmount:0,	  // 共减金额
+				orderShouldPayFee:0.00,	  // 订单提交总金额
+				allPrice:0.00,			  // 订单总金额
+				surplusMoney:0.00,		  // 显示勾选后的剩余抵扣
+				userMoney:0.00,			  // 显示可使用余额
+				deductMoney:0.00,		  // 显示已使用的余额
+				isRequest:false,		  // 是否加载完成渲染子组件
+				isFreight:false,		  // 是否加载完成渲染子组件
+				isAddress:false,		  // 是否加载完成地址
+				isExchangePopup:false, 	  // 控制兑换优惠券弹窗
+				isfreightTip:false,		  // 控制邮费弹窗
+				ischecked:false,	      // 是否勾选余额
+				addressData:{},			  // 初始化地址信息
+				goodsData:[],			  // 初始化商品信息
+				couponList:[],		  	  // 初始化优惠券信息
+				invoiceData:{type:0},	  // 初始化发票信息
+				freightData:{},			  // 邮费数据
+				handleFreightData:{},	  // 监听邮费数据
+				orderInfo:[],			  // 提交的商品信息
+				payInfo:{},				  // 订单信息
+				rechargeGoods:false,
+				clauseList:[],
+				seconDepositFlg:true,
+				rebatecheck:false,
+				isCouponShow:false,		  // 是否显示可选优惠券
+				secondflag:true,
+				isCouponModel:false,	  // 兑换优惠券成功提示
+				ExchangeCouponData:{},	  // 兑换优惠券信息
+			}
+		},
+		onLoad(option){//商品数据
+			this.initStorage(option)
+		},
+		filters:{
+			NumFormat(value) {//处理金额
+				return Number(value).toFixed(2)
+			},
+		},
+		methods: {
+			async initStorage(option){
+					const data = JSON.parse(option.data)
+					const clubInfo = await this.$api.getComStorage('orderUserInfo')
+					const userInfo = await this.$api.getStorage()
+					this.productParam.clubId = this.cartParam.clubId = this.confirmParam.clubId = clubInfo.clubId ? clubInfo.clubId : 0
+					this.postageParam.userId = clubInfo.userId ? clubInfo.userId : 0
+					this.productParam.serviceProviderId = userInfo.serviceProviderId ? userInfo.serviceProviderId : 0
+					this.cartParam.serviceProviderId = userInfo.serviceProviderId ? userInfo.serviceProviderId : 0
+					this.confirmParam.serviceProviderId = userInfo.serviceProviderId ? userInfo.serviceProviderId : 0
+					if(option.type =='prodcut'){
+						this.confirmType = 1
+						this.productParam.productCount = data.data.productCount
+						this.productParam.productId = data.data.productIds
+						this.getInitProdcutCrearOrder()
+					}else{
+						this.confirmType = 2
+						this.cartParam.skuIds = data.data.skuIds
+						this.getInitCrearOrder()
+					}
+			},
+			getInitCrearOrder(){//协销购物车跳转确认订单初始化信息
+				this.SellerService.SellerSettlement(this.cartParam).then(response =>{
+					let data = response.data
+					this.isRequest = true
+					this.goodsData = data.list
+					this.userMoney = data.userMoney
+					this.couponList = data.couponList
+					this.reducedPrice = data.reducedPrice
+					this.totalCount = data.totalCount
+					this.allPrice = data.totalPrice
+					this.rechargeGoods = data.includeRecharge
+					this.clauseList = data.clauseList
+					this.postageParam.skuIds  = this.getProductIds(data.list)
+					this.isCouponShow = true
+					if(this.couponList.length>0){
+						this.couponAmount = data.couponList[0].couponAmount
+						this.confirmParam.clubCouponId = data.couponList[0].clubCouponId 
+					}
+					this.orderShouldPayFee = this.allPrice - this.couponAmount
+					this.totalDiscountAmount = this.reducedPrice + this.couponAmount
+					this.getAddressData()
+				}).catch(error =>{
+					this.$util.msg(error.msg,2000)
+				})
+			},
+			getInitProdcutCrearOrder(){//二手下单初始化查询
+				this.seconDepositFlg = false
+				this.SellerService.GetSettlementBySencondProduct(this.productParam).then(response =>{
+					const data = response.data
+					this.isRequest = true
+					this.goodsData = data.list
+					this.userMoney = data.userMoney
+					this.totalCount = data.totalCount
+					this.allPrice = data.totalPrice
+					this.orderShouldPayFee = this.allPrice
+					this.isCouponShow = false
+					this.secondflag = false
+					this.getAddressData()
+				}).catch(error =>{
+					this.$util.msg(error.msg,2000)
+				})
+			},
+			getProductIds(list){// 获取订单商品id列表
+				let skuId = []
+				list.forEach(function(supplier){
+					supplier.cartList.forEach(function(product){
+						skuId.push(product.skuId)
+					})
+				})
+				return skuId.join(',')
+			},
+			getFreightData(){//获取邮费信息
+				this.OrderService.GetOrderPostage(this.postageParam).then(response =>{
+					let data = response.data
+					this.freightData  = data
+					this.handleFreightData = data
+					this.isFreight = true
+					if(data.postageFlag== 1){
+						this.orderShouldPayFee = this.allPrice + data.postage
+						this.attributePallPrice()
+					}else{
+						this.orderShouldPayFee = this.allPrice
+						this.attributePallPrice()
+					}
+				})
+			},
+			async getAddressData(){//获取地址信息
+				const clubInfo = await this.$api.getComStorage('orderUserInfo')
+				this.UserService.QueryAddressList(
+					{
+						pageNum:1,
+						pageSize:1,
+						userId:clubInfo.userId,
+					}
+				).then(response =>{
+					let data = response.data
+					this.isAddress = true
+					this.addressData = {}
+					if(response.data.results != ''){
+						this.confirmParam.addressId = data.list[0].addressId
+						this.postageParam.townId = data.list[0].townId
+						this.addressData = data.list[0]
+						this.getFreightData()
+					}else{
+						this.addressData = this.addressData
+					}
+				})
+			},
+			handChangeInputGoodsList(data){//对应供应商的留言信息
+				this.goodsData = data
+			},
+			handleChoiceaInvoiceData(data){//获取发票信息
+				this.confirmParam.orderInvoice = data
+			},
+			handleChoiceaFreightData(data){//获取运费信息
+				console.log('编辑运费信息',data)
+				if(data.postageFlag == 1){
+					this.handleFreightData = data
+					this.orderShouldPayFee = this.allPrice + parseInt(data.postage)
+					this.attributePallPrice()
+				}else{
+					this.handleFreightData = data
+					this.orderShouldPayFee = this.allPrice
+					this.attributePallPrice()
+				}
+			},
+			handleClauseData(clauseId){// 条款Id
+				this.confirmParam.payInfo.clauseId = parseInt(clauseId)
+			},
+			handleChoiceaCouponData(data){// 勾选使用优惠券
+				console.log('优惠券信息',data)
+				this.couponAmount = data.couponAmount
+				this.totalDiscountAmount = this.reducedPrice + this.couponAmount
+				this.confirmParam.clubCouponId = data.clubCouponId
+				this.attributePallPrice()
+			},
+			handleClubVisibleData(data){// 订单对机构是否可见
+				console.log('对机构是否可见',data)
+				this.confirmParam.orderSeen = Number(data) 
+			},
+			checkedBalabce(){//勾选使用余额
+				if(this.rebatecheck){
+					this.$util.msg('返佣订单不能使用余额抵扣',2000)
+				}else{
+					if(this.userMoney > 0){
+						this.ischecked = !this.ischecked
+						if(this.ischecked){
+							this.confirmParam.payInfo.balancePayFlag = 1
+							this.attributePallPrice()
+						}else{
+							this.confirmParam.payInfo.balancePayFlag = 0
+							if( this.handleFreightData.postageFlag == 1 ){
+								this.orderShouldPayFee = this.allPrice + parseInt(this.handleFreightData.postage) - this.couponAmount
+							}else{
+								this.orderShouldPayFee = this.allPrice - this.couponAmount
+							}
+						}
+						console.log('最终订单支付金额',this.orderShouldPayFee)
+						console.log('优惠券金额',this.couponAmount)
+					}else{
+						return
+					}
+				}
+			},	
+			attributePallPrice(){//计算价格
+				if( this.handleFreightData.postageFlag == 1){
+					this.attributeHashfreight(this.handleFreightData.postage)
+				}else{
+					this.attributeNofreight()
+				}
+			},
+			attributeNofreight(){//计算没有邮费的支付价格
+				if(this.ischecked){
+					let totalAmount = this.allPrice - this.couponAmount//计算不包邮的价格 总价等于商品价格+邮费
+					if(this.userMoney > totalAmount){
+						this.orderShouldPayFee = 0.00
+						this.deductMoney = this.allPrice - this.couponAmount		// 勾选后使用抵余额
+						this.surplusMoney = this.userMoney - this.deductMoney	    // 勾选后的剩余抵扣
+					}else{
+						this.orderShouldPayFee = this.allPrice - this.userMoney -	this.couponAmount //勾选后的总价
+						this.deductMoney = this.userMoney				            // 勾选后使用抵余额
+						this.surplusMoney = this.userMoney - this.deductMoney	    // 勾选后的剩余抵扣
+					}
+				}else{
+					this.orderShouldPayFee = this.allPrice  - this.couponAmount
+					this.deductMoney = 0.00
+					this.surplusMoney = this.userMoney
+				}
+				console.log('最终订单支付金额',this.orderShouldPayFee)
+				console.log('优惠券金额',this.couponAmount)
+			},
+			attributeHashfreight(postage){//计算需要邮费的支付价格
+				let totalAmount = this.allPrice + parseInt(postage) - this.couponAmount//计算不包邮的价格 总价等于商品价格+邮费
+				if(this.ischecked){
+					if(this.userMoney > totalAmount ){							//余额大于支付金额
+						this.orderShouldPayFee = 0.00
+						this.deductMoney = this.allPrice + parseInt(postage) - this.couponAmount			//勾选后使用抵余额
+						this.surplusMoney = this.userMoney - this.deductMoney	    //勾选后的剩余抵扣
+					}else{
+						this.orderShouldPayFee = this.allPrice + parseInt(postage) - this.userMoney  - this.couponAmount       	//勾选后的总价
+						this.deductMoney = this.userMoney				            //勾选后使用抵余额
+						this.surplusMoney = this.userMoney - this.deductMoney	    //勾选后的剩余抵扣
+					}
+				}else{
+					this.orderShouldPayFee = this.allPrice + parseInt(postage) - this.couponAmount
+					this.deductMoney = 0.00
+					this.surplusMoney = this.userMoney
+				}
+				console.log('最终订单支付金额',this.orderShouldPayFee)
+				console.log('优惠券金额',this.couponAmount)
+			},
+			orderSubmitMit(){//提交订单
+				if(this.confirmParam.addressId == ''){
+					this.$util.msg('请先添加收货地址~',2000)
+					return
+				}
+				if(this.confirmParam.payInfo.rebateFlag ===2){
+					if(this.rebateFee == 0){
+						this.$util.msg('请输入返佣服务费',2000)
+						return
+					}
+					this.confirmParam.payInfo.rebateFee = Number(this.rebateFee).toFixed(2)
+				}
+				this.modal = true
+				this.contentModalText = '请仔细确认订单是否为返佣订单后再提交订单'
+			},
+			SellerCreateOrderSubmit(){
+				//提交订单
+				if(this.isSubLoading){ return }
+				this.confirmParam.orderInfo = this.goodsData.map(el => {
+					let productInfo = []
+					el.cartList.forEach(pros => {
+						productInfo.push({
+							skuId:pros.skuId,
+							productNum:pros.number,
+							presentNum:0,
+							productType:pros.giftType
+						})
+					})
+					return {splitCode:el.splitCode,shopId:el.shopId,note:el.note?el.note:'',productInfo:productInfo}
+				})
+				this.confirmParam.payInfo.postage = parseInt(this.handleFreightData.postage).toFixed(2)
+				this.confirmParam.payInfo.postageFlag = parseInt(this.handleFreightData.postageFlag)
+				this.confirmParam.payInfo.orderShouldPayFee = this.orderShouldPayFee.toFixed(2)
+				this.confirmParam.payInfo = JSON.stringify(this.confirmParam.payInfo)
+				this.confirmParam.orderInfo = JSON.stringify(this.confirmParam.orderInfo)
+				this.confirmParam.orderInvoice = JSON.stringify(this.confirmParam.orderInvoice)
+				this.isSubLoading = true	
+				this.hanldeOrderSubmit(this.confirmParam)
+			},
+			hanldeOrderSubmit(params){// 提交订单
+				this.SellerService.SellerCreateOrderSubmit(params).then(response =>{
+					const data = response.data
+					if(data.code === 1){
+						this.$util.msg('支付成功',2000,true,'success')
+						setTimeout(() =>{
+							this.isSubLoading = false
+							this.$api.redirectTo(`/pages/seller/order/order-details?type=cash&orderId=${data.orderId}&userId=${this.postageParam.userId}`)
+						},2000)
+					}else{
+						this.$util.msg('订单提交成功',2000,true,'success')
+						setTimeout(()=>{
+							this.isSubLoading = false
+							this.$api.redirectTo(`/pages/seller/order/order-details?type=cash&orderId=${data.orderId}&userId=${this.postageParam.userId}`)
+						},2000)
+					}
+				}).catch(error =>{
+					this.isSubLoading = false
+					this.handleError(error)
+				})
+			},
+			handleError(data){// 提交订单异常处理
+				this.formatConfirmParam()
+				const buttonMap = {
+						1:{
+							contentModalText :  '订单内存在械字号三类商品,需要拥有医疗执业许可证的医美机构才能购买。建议升级医美机构后再下单,否则会导致订单退款或影响发货。',
+							modalButton :  [
+								{ text: '取消',  type: 'gray', plain: true },
+								{ text: '继续提交', customStyle: { color: '#fff', bgColor: 'linear-gradient(90deg, #F28F31 0%, #FF5B00 100%)' },plain: false }
+							]
+						}
+				}
+				if(data.code === -6){// 非医美机构下三类商品订单
+					this.modal = true
+					this.showModalstauts = 2
+					this.contentModalText = buttonMap[1].contentModalText
+					this.modalButton= buttonMap[1].modalButton
+				}else{
+					this.$util.msg(error.msg,3000)
+				}
+			},
+			formatConfirmParam(){// 还原提交订单参数格式
+				this.confirmParam.payInfo = JSON.parse(this.confirmParam.payInfo)
+				this.confirmParam.orderInfo = JSON.parse(this.confirmParam.orderInfo)
+				this.confirmParam.orderInvoice = JSON.parse(this.confirmParam.orderInvoice)
+			},
+			handleRebateFlag(){// 普通订单返佣
+				let self = this
+				uni.showActionSheet({
+					itemList: ['返佣订单', '普通订单,存在返佣服务费','否'],
+					success: (e) => {
+						switch(e.tapIndex){
+							case 0:
+								self.confirmParam.payInfo.rebateFlag = 1
+								self.rebateFeeText = '返佣订单'
+								break
+							case 1:
+								self.confirmParam.payInfo.rebateFlag = 2
+								self.rebateFeeText = '普通订单,存在返佣服务费'
+								break
+							case 2:
+								self.confirmParam.payInfo.rebateFlag = 0
+								self.rebateFeeText = '否'
+								break
+						}
+					}
+				})
+				if(this.confirmParam.payInfo.rebateFlag ===1){
+					this.confirmParam.payInfo.balancePayFlag = 0
+					this.couponAmount = 0
+					this.confirmParam.clubCouponId = 0
+					this.confirmParam.orderSeen = 2
+					this.$refs.clubVisible.orderVisibleText = '不可见'
+					this.$refs.clubVisible.current = 1
+					this.orderShouldPayFee = this.allPrice + parseInt(this.freightData.postage) - this.couponAmount
+					this.totalDiscountAmount = this.reducedPrice + this.couponAmount
+					this.$refs.coupon.coupon.couponAmount = 0
+					this.$refs.freight.infoData(this.freightData)
+					this.$refs.freight.freightData  = this.freightData
+					this.handleFreightData = this.freightData
+				}else{
+					this.confirmParam.orderSeen = 1
+					this.$refs.clubVisible.orderVisibleText = '可见'
+					if(this.couponList.length>0){
+						this.confirmParam.clubCouponId = this.couponList[0].clubCouponId 
+						this.$refs.coupon.coupon.couponAmount = this.couponAmount = this.couponList[0].couponAmount
+					}
+					this.totalDiscountAmount = this.reducedPrice + this.couponAmount 
+					this.orderShouldPayFee = this.allPrice + parseInt(this.freightData.postage) - this.couponAmount
+				}
+			},
+			handleClick(e){
+				//确认提交
+				if (e.index == 1) {
+					if(this.showModalstauts == 2){
+						this.confirmParam.orderMiniType = 2
+						this.SellerCreateOrderSubmit()
+					}else{
+						this.SellerCreateOrderSubmit()
+					}
+				}
+				this.confirmParam.orderMiniType = 0
+				this.modal = false
+			},
+			handleSecondFlag(){// 二手订单勾选返佣
+				this.rebatecheck = !this.rebatecheck
+				if(this.rebatecheck){
+					this.ischecked = false
+					this.confirmParam.payInfo.rebateFlag=1
+					this.confirmParam.payInfo.balancePayFlag = 0
+					this.confirmParam.clubCouponId = 0
+					this.confirmParam.orderSeen = 2
+					this.$refs.clubVisible.orderVisibleText = '不可见'
+					this.$refs.clubVisible.current = 1
+					this.orderShouldPayFee = this.allPrice + parseInt(this.freightData.postage)
+					this.$refs.freight.infoData(this.freightData)
+					this.$refs.freight.freightData  = this.freightData
+					this.handleFreightData = this.freightData
+				}else{
+					this.confirmParam.orderSeen = 1
+					this.$refs.clubVisible.orderVisibleText = '可见'
+					this.confirmParam.payInfo.rebateFlag=0
+					this.orderShouldPayFee = this.allPrice + parseInt(this.freightData.postage)
+				}
+			},
+			handFreightAlertShow(){//显示邮费弹窗
+				this.isfreightTip = true
+			},
+			handleClickCancel(){// 关闭优惠券弹窗
+				this.isCouponModel = false
+				this.getInitCrearOrder()
+			},
+			hideFreight(){//关闭邮费弹窗
+				this.isfreightTip = false
+			},
+			hideMobel() {
+				this.modal = false
+			},
+		},
+		onShow() {
+			let pages = getCurrentPages()
+			let currPage = pages[pages.length-1]
+			if(currPage.data.select =='select'){
+				this.isAddress = true
+				let SelectData = uni.getStorageSync('selectAddress')
+				this.confirmParam.addressId = SelectData.addressId
+				this.postageParam.townId = SelectData.townId 
+				this.addressData = SelectData
+				this.getFreightData()
+			}else{
+				this.getAddressData()
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	page {
+		height: auto;
+		background:#F7F7F7;
+	}
+	.btn-hover{
+		background: #FFFFFF;
+	}
+	.animation{
+		/* transition: transform 0.3s ease;*/
+		transition-property: transform;
+		transition-duration: 0.3s;
+		transition-timing-function: ease;
+	}
+	.invoice-freight{
+		width: 702rpx;
+		padding: 0 24rpx;
+		height: 86rpx;
+		line-height: 86rpx;
+		font-size: $font-size-28;
+		color: $text-color;
+		background: #FFFFFF;
+		float: left;
+		font-weight: bold;
+		.freight-left{
+			float: left;
+			.icon-yunfeishuoming{
+				height: 100%;
+				padding: 0 15rpx;
+				color: $color-system;
+				font-weight: normal;
+			}
+		}
+		.freight-right{
+			float: right;
+			color: #2A81FF;
+		}
+	}
+	.invoice-balance{
+		width: 702rpx;
+		height: auto;
+		padding:0 24rpx;
+		background: #FFFFFF;
+		float: left;
+		margin-top: 24rpx;
+		margin-bottom: 24rpx;
+		.balabce-t{
+			width: 100%;
+			height: 86rpx;
+			line-height: 86rpx;
+			font-size: $font-size-28;
+			color: $text-color;
+			float: left;
+			.balabce-t-le{
+				float: left;
+				font-weight: bold;
+			}
+			.balabce-t-ri{
+				float: right;
+				display: flex;
+				align-items: center;
+				.money{
+					display: flex;
+					float: left;
+				}
+				.checkbox-box{
+					display: flex;
+					width: 60rpx;
+					float: left;
+					height: 100%;
+					font-size: $font-size-24;
+					.checkbox{
+						width: 40rpx;
+						text-align: right;
+						box-sizing: border-box;
+						text-align: center;
+						text-decoration: none;
+						border-radius: 0;
+						-webkit-tap-highlight-color: transparent;
+						overflow: hidden;
+						color: $color-system;
+						padding: 5rpx;
+					}
+				}	
+			}
+		}
+		.balabce-b{
+			width: 100%;	
+			float: left;
+			overflow: hidden;
+			.balabce-b-text{
+				width: 100%;
+				line-height: 58rpx;
+				font-size: $font-size-24;
+				color: #FF2A2A;
+				text-align: right;
+				float: right;
+			}
+			&.balabce-b--hide {
+				padding: 0 0;
+				height: 0px;
+				line-height: 0px;
+			}	
+		}
+	}
+	.footer{
+		position: fixed;
+		left: 0;
+		bottom: 0;
+		display: flex;
+		align-items: center;
+		width: 100%;
+		height: 110rpx;
+		line-height: 110rpx;
+		justify-content: space-between;
+		font-size: $font-size-28;
+		background-color: #FFFFFF;
+		z-index: 990;
+		color: $text-color;
+		.footer-le{
+			width:570rpx;
+			height:100%;
+			float: left;
+		}
+		.footer-count{
+			float: left;
+			padding-left: 24rpx;
+			width:190rpx;
+			box-sizing: border-box;
+			font-size: $font-size-26;
+		}
+		.footer-price{
+			width:370rpx;
+			float: right;
+			text-align: right;
+			color: $text-color;
+			padding: 10rpx 20rpx 10rpx 0;
+			box-sizing: border-box;
+			.sum-none{
+				width: 100%;
+				height: 45rpx;
+				line-height: 45rpx;
+				color: $text-color;
+				float: left;
+				text-align: right;
+				.money{
+					font-size: $font-size-26;
+					color: #999999;
+					text-decoration: line-through;
+				}
+				.money-sign{
+					font-size: $font-size-26;
+					color: #999999;
+					text-decoration: line-through;
+				}
+				.money-reduced{
+					margin-left: 10rpx;
+					font-size: $font-size-26;
+					color:$color-system;
+				}
+			}
+			.sum{
+				width: 100%;
+				height: 45rpx;
+				line-height: 45rpx;
+				float: left;
+				&.none{
+					height: 90rpx;
+					line-height: 90rpx;
+				}
+				.price{
+					font-size: $font-size-32;
+					color: #FF2A2A;
+				}
+			}
+			
+		}
+		.footer-submit{
+			display:flex;
+			align-items:center;
+			justify-content: center;
+			width: 180rpx;
+			height: 100%;
+			box-sizing: border-box;
+			padding: 15rpx 5rpx;
+			.btn{
+				width: 100%;
+				height: 100%;
+				color: #FFFFFF;
+				background:linear-gradient(90deg, #FF9300 0%, #FF5B00 100%);
+				font-size: $font-size-26;
+				text-align: center;
+				line-height: 80rpx;
+				border-radius: 40rpx;
+				&.disabled{
+					background: #e4e8eb;
+					color: #999999;
+				}
+			}
+		}
+	}
+	.order-return{
+		width: 100%;
+		height: auto;
+		box-sizing: border-box;
+		padding: 0 24rpx;
+		background: #FFFFFF;
+		float: left;
+		margin: 24rpx 0;
+		.order-return-main{
+			width:100%;
+			height: 86rpx;
+			line-height: 86rpx;
+			.label{
+				float: left;
+				font-weight: bold;
+				color: #333333;
+				font-size: $font-size-28;
+			}
+			.label-right{
+				float: right;
+				color: #2A81FF;
+				.text-l{
+					font-size: 28rpx;
+					font-weight: bold;
+					margin-right: 20rpx;
+				}
+				.icon-xiayibu{
+					line-height: 88rpx;
+					color: #999999;
+					font-weight: normal;
+				}
+			}
+			
+		}
+		.order-return-input{
+			width: 100%;
+			height: 86rpx;
+			padding-bottom: 20rpx;
+			box-sizing: border-box;
+			.input{
+				width: 100%;
+				height: 66rpx;
+				font-size: $font-size-26;
+				border: 1px solid #e1e1e1;
+				line-height: 66rpx;
+				color: #333333;
+				border-radius: 4rpx;
+				box-sizing: border-box;
+				padding: 0 20rpx;
+			}
+		}
+	}
+	.Rebate{
+		width: 702rpx;
+		height: auto;
+		padding: 0 24rpx;
+		background: #FFFFFF;
+		float: left;
+		margin-bottom: 24rpx;
+		margin-top: 24rpx;
+		line-height: 86rpx;
+		.rebate-title{
+			float: left;
+			font-weight: bold;
+			color: #333333;
+			font-size: $font-size-28;
+		}
+		.iconfont{
+			float: right;
+			color: #b2b2b2;
+			font-size: 40rpx;
+			&.icon-yixuanze{
+				color: $color-system;
+			}
+		}
+	}
+	.coupon-content-model{
+		width: 100%;
+		height: 100%;
+		background: rgba(0,0,0,.5);
+		position: fixed;
+		top: 0;
+		left: 0;
+		z-index: 8888;
+		transition: all 0.4s;
+		.coupon-alert-content{
+			width: 600rpx;
+			height: 612rpx;
+			position: absolute;
+			top: 0;
+			left: 0;
+			bottom: 0;
+			right: 0;
+			margin: auto;
+			box-sizing: border-box;
+			padding-top: 92rpx;
+			.coupon{
+				width: 600rpx;
+				height: 522rpx;
+				background: url(https://static.caimei365.com/app/img/icon/icon-coupon-alertbg@2x.png);
+				background-size: cover;
+				box-sizing: border-box;
+				padding: 230rpx 40rpx 0 40rpx;
+				.coupon-list{
+					width: 100%;
+					height: 147rpx;
+					margin-bottom: 32rpx;
+					box-sizing: border-box;
+					background: url(https://static.caimei365.com/app/img/icon/icon-coupon-bg@2x.png);
+					background-size: cover;
+					position: relative;
+					.list-cell-tags{
+						display: inline-block;
+						padding: 0 10rpx;
+						height: 32rpx;
+						line-height: 32rpx;
+						background-color: #f94b4b;
+						color: #FFFFFF;
+						font-size: 18rpx;
+						border-radius: 16rpx 0 16rpx 0;
+						text-align: center;
+						position: absolute;
+						top: 0;
+						left: 0;
+					}
+					.list-cell-le{
+						width: 154rpx;
+						height: 100%;
+						box-sizing: border-box;
+						padding: 30rpx 0;
+						float: left;
+						.coupon-maxMoney{
+							width: 100%;
+							height: 54rpx;
+							line-height: 54rpx;
+							font-size: 42rpx;
+							color: #f94b4b;
+							text-align: center;
+							margin-top: 10rpx;
+							.small{
+								font-size: $font-size-20;
+							}
+						}
+						.coupon-minMoney{
+							width: 100%;
+							height: 28rpx;
+							float: left;
+							box-sizing: border-box;
+							padding-left: 24rpx;
+							.txt{
+								display: block;
+								height: 28rpx;
+								line-height: 28rpx;
+								font-size: 16rpx;
+								color: #f94b4b;
+								text-align: center;
+								padding: 0 5rpx;
+								background-color: #fff1eb;
+								border-radius: 4rpx;
+								float: left;
+							}
+						}
+					}
+					.list-cell-ri{
+						width: 366rpx;
+						height: 100%;
+						box-sizing: border-box;
+						padding:30rpx 20rpx;
+						float: left;
+						.list-cell-top{
+							width: 100%;
+							height: 64rpx;
+							line-height: 64rpx;
+							font-size: $font-size-26;
+							color: #333333;
+							float: left;
+							text-overflow:ellipsis;
+							display: -webkit-box;
+							word-break: break-all;
+							-webkit-box-orient: vertical;
+							-webkit-line-clamp: 1;
+							overflow: hidden;
+						}
+						.list-cell-time{
+							width: 100%;
+							height: 28rpx;
+							line-height: 28rpx;
+							text-align: left;
+							font-size: $font-size-20;
+							color: #999999;
+						}
+					}
+				}
+				.coupon-btn{
+					width: 100%;
+					height: 78rpx;
+					background: url(https://static.caimei365.com/app/img/icon/icon-coupon-alertbtnbg@2x.png);
+					background-size: cover;
+					line-height: 78rpx;
+					text-align: center;
+					color: #FFFFFF;
+					font-size: $font-size-36;
+				}
+			}
+		}
+	}
+</style>

+ 496 - 0
pages/seller/order/order-details.vue

@@ -0,0 +1,496 @@
+<template>
+	<view class="container details clearfix" :style="{ paddingBottom: isIphoneX ? 130 + 68 + 'rpx' : '130rpx' }">
+		<!-- 自定义返回 -->
+		<header-back
+			:systeminfo="systeminfo"
+			:navbar-data="nvabarData"
+			:headerBtnPosi="headerBtnPosi"
+			:isShare="isOrderShare"
+		></header-back>
+		<tui-skeleton
+			v-if="!skeletonShow"
+			backgroundColor="#fafafa"
+			borderRadius="10rpx"
+			:isLoading="true"
+			:loadingType="5"
+		></tui-skeleton>
+		<view v-else class="container-details" :style="{ paddingTop: navbarHeight + 'px' }">
+			<!-- 地址选择 -->
+			<order-address ref="orderAddress" v-if="skeletonShow" :addressData="addressData" />
+			<!-- 商品 -->
+			<goods-list ref="goods" v-if="skeletonShow" :shopOrderData="shopOrderData" :information="information" />
+			<!-- 订单信息 -->
+			<order-information ref="information" v-if="skeletonShow" :information="information" />
+			<!-- 发票信息 -->
+			<invoice-tent ref="invoice" v-if="skeletonShow" :orderInvoice="orderInvoice" />
+			<!-- 支付记录 -->
+			<payment-record
+				ref="payment"
+				v-if="skeletonShow && discernReceiptList.length > 0"
+				:discernReceiptList="discernReceiptList"
+				:receiptAmount="receiptAmount"
+			/>
+			<!-- 退款记录 -->
+			<refund-record
+				ref="refund"
+				v-if="skeletonShow"
+				:returnedPurchaseList="returnedPurchaseList"
+				:returnedPurchaseFee="returnedPurchaseFee"
+			/>
+			<!-- 支付凭证记录 -->
+			<voucher-record ref="voucher" v-if="skeletonShow && voucherList.length > 0" :list="voucherList" />
+			<!-- 底部button -->
+			<order-button
+				ref="orderButton"
+				v-if="skeletonShow"
+				:status="btnStatus"
+				:shareCode="shareCode"
+				:order="orderInfo"
+				@buttonConfirm="handButtonConfirm"
+			/>
+		</view>
+		<!-- 分享弹窗 -->
+		<share-alert :orderId="orderId" v-if="isShareModal" @btnConfirm="onShareAppMessage"> </share-alert>
+		<!-- 提示弹窗 -->
+		<tui-modal
+			:show="modal"
+			@click="handleClick"
+			:content="contentModalText"
+			:button="modalButton"
+			color="#333"
+			:size="32"
+			shape="circle"
+			:maskClosable="false"
+		>
+		</tui-modal>
+	</view>
+</template>
+
+<script>
+import headerBack from '@/components/cm-module/headerNavbar/header-back' //自定义导航
+import orderAddress from './components/details/orderAddress' //地址信息
+import goodsList from './components/details/goodsList' //商品列表
+import invoiceTent from './components/details/invoiceTent' //发票信息
+import orderInformation from './components/details/orderInformation' //订单信息
+import paymentRecord from './components/details/paymentRecord' //支付记录
+import refundRecord from './components/details/refundRecord' //退款记录
+import voucherRecord from './components/details/voucherRecord' //支付凭证记录
+import orderButton from './components/details/orderButton' //底部按钮
+import shareAlert from '@/components/cm-module/modelAlert/shareAlert.vue' //分享弹窗
+
+export default {
+	components: {
+		headerBack,
+		orderInformation,
+		orderAddress,
+		invoiceTent,
+		goodsList,
+		paymentRecord,
+		refundRecord,
+		voucherRecord,
+		orderButton,
+		shareAlert
+	},
+	data() {
+		return {
+			skeletonShow: false,
+			headerBtnPosi: this.setHeaderBtnPosi(), //获取设备顶部胶囊高度
+			systeminfo: this.setSysteminfo(), //获取设备信息
+			isIphoneX: this.$store.state.isIphoneX,
+			CustomBar: this.CustomBar, // 顶部导航栏高度
+			navbarHeight: '',
+			nvabarData: {
+				//顶部自定义导航
+				showCapsule: 1, // 是否显示左上角图标   1表示显示    0表示不显示
+				title: '订单详情' // 导航栏 中间的标题
+			},
+			state: 0,
+			userId: '',
+			orderId: '',
+			shareCode: '', //分享码
+			shareType: '', //分享登录页过来记录的状态
+			cellPhone: '', //客服电话
+			payStatus: 0,
+			btnStatus: 0, //按钮组件状态
+			onlinePayFlag: '',
+			isOrderShare: false,
+			isShareModal: false,
+			modelType: 0,
+			orderInfo: {},
+			alertOrderInfo: {},
+			addressData: {}, //地址信息初始化
+			information: {}, //订单信息初始化
+			shopOrderData: {}, //商品信息初始化
+			orderInvoice: {}, //发票信息初始化
+			returnedPurchaseList: {}, //退款信息初始化
+			discernReceiptList: {}, //支付信息初始化
+			voucherList: [], //支付凭证
+			receiptAmount: 0, //支付金额
+			returnedPurchaseFee: 0, //退款金额
+			handleModelEven: 0,
+			modal: false,
+			contentModalText: '订单查询失败,请稍候重试~', //操作文字提示语句
+			modalButton: [
+				{
+					text: '取消',
+					type: 'gray',
+					plain: true //是否空心
+				},
+				{
+					text: '确定',
+					customStyle: {
+						color: '#fff',
+						bgColor: '#F3B574'
+					},
+					plain: false
+				}
+			]
+		}
+	},
+	onLoad(option) {
+		console.log(option)
+		this.shareType = option.type
+		this.orderId = option.orderId
+		if (this.shareType === 'share') {
+			this.state = 0
+			this.isOrderShare = true
+		} else if (option.type === 'confim' || option.type === 'search') {
+			this.state = 0
+		} else {
+			this.state = option.state
+		}
+		this.getHeaderTopHeight()
+		this.initOrderDetaileData()
+	},
+	filters: {
+		TextFormat(status) {
+			//处理金额
+			let HtmlText,
+				typeTextObject = {
+					0: '待确认',
+					4: '交易完成',
+					5: '订单完成',
+					6: '已关闭',
+					7: '交易全退',
+					77: '交易全退',
+					11: '待付款待发货',
+					12: '待付款部分发货',
+					13: '待付款已发货',
+					21: '部分付款待发货',
+					22: '部分付款部分发货',
+					23: '部分付款已发货',
+					31: '已付款待发货',
+					32: '已付款部分发货',
+					33: '已付款已发货',
+					111: '待付款待发货'
+				}
+			Object.keys(typeTextObject).forEach(key => {
+				if (key == status) {
+					HtmlText = typeTextObject[key]
+				}
+			})
+			return HtmlText
+		}
+	},
+	methods: {
+		// 获取订单详情
+		async initOrderDetaileData() {
+			try {
+				const userInfo = await this.$api.getStorage()
+				this.userId = userInfo.userId ? userInfo.userId : 0
+				const res = await this.OrderService.QueryOrderDetails({ orderId: this.orderId, userId: this.userId })
+				const data = res.data
+				this.skeletonShow = true
+				this.orderInfo = data.order
+				this.shareCode = data.shareCode
+				this.addressData = data.userInfo
+				this.information = data.order
+				this.btnStatus = data.order.status
+				this.payStatus = data.order.payStatus
+				this.payableAmount = data.order.payableAmount
+				this.shopOrderData = data.shopOrderList
+				this.orderInvoice = data.orderInvoice
+				this.onlinePayFlag = data.order.onlinePayFlag
+				this.returnedPurchaseList = data.returnedPurchaseList
+				this.discernReceiptList = data.discernReceiptList
+				this.voucherList = data.voucher
+				this.receiptAmount = data.order.receiptAmount
+				this.returnedPurchaseFee = data.order.returnedPurchaseFee
+			} catch (error) {
+				//TODO handle the exception
+				this.$util.msg(error.msg, 2000)
+			}
+		},
+		handButtonConfirm(data) {
+			//监听点击时间的按钮类型并执行...
+			this.handShowAlert(data)
+		},
+		handShowAlert(data) {
+			//判断点击的按钮类型并执行...
+			switch (data.type) {
+				case 'cancel':
+					//取消订单
+					this.modal = true
+					this.contentModalText = '确认取消该订单吗?'
+					this.handleModelEven = 1
+					break
+				case 'query':
+					this.$api.navigateTo('/pages/user/order/order-logistics?orderId=' + this.orderId)
+					break
+				case 'upload':
+					this.$api.navigateTo('/pages/user/order/order-addpay?orderId=' + this.orderId)
+					break
+				case 'confirm':
+					//确认收货
+					this.modal = true
+					this.contentModalText = '确认收货吗?'
+					this.handleModelEven = 2
+					break
+				case 'pay':
+					this.getOrderPaymentValidation(data)
+					break
+			}
+		},
+		getOrderPaymentValidation(data) {
+			//监听根据付款状态做操作
+			this.OrderService.OrderPaymentValidation({ orderId: data.orderId })
+				.then(response => {
+					let data = response.data
+					if (data.onlinePayFlag == 1) {
+						// 只能线下
+						this.$api.navigateTo(`/pages/user/pay/card-under?orderId=${data.orderId}`)
+					} else {
+						this.$api.navigateTo(`/pages/user/order/order-pay-list?orderId=${data.orderId}`)
+					}
+				})
+				.catch(error => {
+					this.$util.msg(error.msg, 2000)
+				})
+		},
+		handleClick(e) {
+			//确认操作
+			if (e.index == 1) {
+				switch (this.handleModelEven) {
+					case 1: //取消订单
+						this.cancelOrder()
+						break
+					case 2: //确认收货
+						this.confirmReceipt()
+						break
+				}
+			}
+			this.modal = false
+		},
+		async confirmReceipt() {
+			//确认收货
+			try {
+				const res = await this.OrderService.ConfirmReceipt({ orderId: this.orderId })
+				this.$util.msg(res.msg, 2000, true, 'success')
+				setTimeout(() => {
+					this.initOrderDetaileData()
+				}, 2000)
+			} catch (error) {
+				this.$util.msg(error.msg, 2000)
+			}
+		},
+		async cancelOrder() {
+			//取消订单
+			try {
+				const res = await this.OrderService.CancelOrder({ orderId: this.orderId, userIdentity: 0 })
+				this.$util.msg(res.msg, 2000, true, 'success')
+				setTimeout(() => {
+					this.initOrderDetaileData()
+				}, 2000)
+			} catch (error) {
+				this.$util.msg(error.msg, 2000)
+			}
+		},
+		onShareAppMessage(res) {
+			//分享转发
+			this.isShareModal = false
+			if (res.from === 'button') {
+				// 来自页面内转发按钮
+			}
+			return {
+				title: '您有新的分享订单,快来查看吧~',
+				path: `/pages/user/order/order-sharelogin?orderId=${this.orderId}&userId=${this.userId}`,
+				imageUrl: 'https://static.caimei365.com/app/mini-mcare/icon/icon_shareOrder@2x.png'
+			}
+		},
+		getHeaderTopHeight() {
+			let statusBarHeight = this.systeminfo.statusBarHeight // 状态栏高度
+			let headerPosi = this.headerBtnPosi
+			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
+			}
+			this.navbarHeight = headerPosi.bottom + btnPosi.bottom // 原胶囊bottom + 现胶囊bottom
+		},
+		setHeaderBtnPosi() {
+			// 获得胶囊按钮位置信息
+			let headerBtnPosi = uni.getMenuButtonBoundingClientRect()
+			return headerBtnPosi
+		},
+		setSysteminfo() {
+			let systeminfo
+			uni.getSystemInfo({
+				// 获取设备信息
+				success: res => {
+					systeminfo = res
+				}
+			})
+			return systeminfo
+		}
+	},
+	onShow() {}
+}
+</script>
+
+<style lang="scss">
+page {
+	height: auto;
+	background: #f7f7f7;
+}
+.details {
+	padding-bottom: 130rpx;
+}
+.return-instructions {
+	font-size: 26rpx;
+	color: #f3b574;
+	line-height: 42rpx;
+	padding: 32rpx 50rpx;
+	background-color: #fffaf8;
+	text-align: justify;
+}
+.btn-hover {
+	background: #ffffff;
+}
+.animation {
+	/* transition: transform 0.3s ease;*/
+	transition-property: transform;
+	transition-duration: 0.3s;
+	transition-timing-function: ease;
+}
+.invoice-balance {
+	width: 702rpx;
+	height: auto;
+	padding: 0 24rpx;
+	background: #ffffff;
+	float: left;
+	margin-top: 24rpx;
+	margin-bottom: 24rpx;
+	.balabce-t {
+		width: 100%;
+		height: 86rpx;
+		line-height: 86rpx;
+		font-size: $font-size-28;
+		color: $text-color;
+		float: left;
+		.balabce-t-le {
+			float: left;
+			font-weight: bold;
+		}
+		.balabce-t-ri {
+			float: right;
+			display: flex;
+			align-items: center;
+			.money {
+				display: flex;
+				float: left;
+			}
+			.checkbox-box {
+				display: flex;
+				width: 60rpx;
+				float: left;
+				height: 100%;
+				font-size: $font-size-24;
+				.checkbox {
+					width: 40rpx;
+					text-align: right;
+					box-sizing: border-box;
+					text-align: center;
+					text-decoration: none;
+					border-radius: 0;
+					-webkit-tap-highlight-color: transparent;
+					overflow: hidden;
+				}
+			}
+		}
+	}
+	.balabce-b {
+		width: 100%;
+		float: left;
+		overflow: hidden;
+		.balabce-b-text {
+			width: 100%;
+			line-height: 58rpx;
+			font-size: $font-size-24;
+			color: #ff2a2a;
+			text-align: right;
+			float: right;
+		}
+		&.balabce-b--hide {
+			padding: 0 0;
+			height: 0px;
+			line-height: 0px;
+		}
+	}
+}
+.clause {
+	float: right;
+	font-size: 24rpx;
+	color: #999999;
+	margin-top: 60rpx;
+	margin-right: 24rpx;
+	&.noclick {
+		pointer-events: none;
+	}
+	.text {
+		color: #1890f9;
+		&.color-bg {
+			color: #333333;
+		}
+	}
+}
+.status-text {
+	overflow: hidden;
+	padding: 24rpx;
+	background: #fff;
+	font-size: $font-size-26;
+	.view-type {
+		float: left;
+		color: #ff2a2a;
+	}
+	.bage-buss {
+		display: inline-block;
+		width: 72rpx;
+		height: 32rpx;
+		background: radial-gradient(circle, rgba(255, 39, 180, 1) 0%, rgba(193, 77, 245, 1) 100%);
+		border-radius: 6rpx;
+		line-height: 32rpx;
+		text-align: center;
+		color: #ffffff;
+		margin-top: 10rpx;
+		float: right;
+	}
+	.bage-auto {
+		display: inline-block;
+		width: 72rpx;
+		height: 32rpx;
+		background: radial-gradient(circle, rgba(255, 180, 39, 1) 0%, rgba(245, 142, 77, 1) 100%);
+		border-radius: 6rpx;
+		line-height: 32rpx;
+		text-align: center;
+		color: #ffffff;
+		margin-top: 10rpx;
+		float: right;
+	}
+}
+</style>

+ 1237 - 0
pages/seller/order/order-list.vue

@@ -0,0 +1,1237 @@
+<template>
+	<view class="container" :style="{ paddingTop: navbarHeight + 82 + 'px' }">
+		<!-- 自定义返回 -->
+		<header-back
+			:systeminfo="systeminfo"
+			:navbar-data="nvabarData"
+			:headerBtnPosi="headerBtnPosi"
+			:isDelete="isDelete"
+			:isUsertype="1"
+			:screenTab="screenTab"
+			@goSearchPath="handlSearchPath"
+		>
+		</header-back>
+		<view class="order-section-top" :style="{ marginTop: navbarHeight + 'px' }">
+			<scroll-view scroll-x scroll-with-animation class="tab-view" :scroll-left="scrollLeft">
+				<view
+					v-for="(item, index) in orderTabBar"
+					:key="index"
+					class="tab-bar-item"
+					:class="[currentTab == index ? 'active' : '']"
+					:data-current="index"
+					@tap.stop="onClickTab"
+				>
+					<text class="tab-bar-title">{{ item.text }}</text>
+				</view>
+			</scroll-view>
+			<scroll-view scroll-x scroll-with-animation class="tab-screen" :scroll-left="scrollLeft">
+				<view
+					v-for="(item, index) in screenTabBar"
+					:key="index"
+					class="tab-screen-item"
+					:class="[screenTab == index ? 'active' : '']"
+					:data-current="index"
+					@tap.stop="onClickScreenTab(index)"
+					>{{ item.text }}</view
+				>
+				<view
+					class="tab-screen-item"
+					v-if="isManage"
+					:data-current="3"
+					:class="[screenTab == 3 ? 'active' : '']"
+					@tap.stop="onClickScreenTab(3)"
+					>组员订单</view
+				>
+			</scroll-view>
+		</view>
+		<swiper
+			class="tab-content"
+			:current="currentTab"
+			duration="80"
+			@animationfinish="onChange"
+			:style="{ height: winHeight + 'px' }"
+		>
+			<swiper-item v-for="(tabItem, index) in orderTabBar" :key="index">
+				<tui-skeleton
+					v-if="skeletonShow"
+					backgroundColor="#fafafa"
+					borderRadius="10rpx"
+					:isLoading="false"
+					:loadingType="5"
+				></tui-skeleton>
+				<scroll-view
+					scroll-y
+					class="scoll-y tui-skeleton"
+					@scrolltolower="scrolltolower"
+					:style="{ height: winHeight + 'px' }"
+				>
+					<view :class="{ 'tui-order-list': scrollTop >= 0 }" class="tui-skeleton clearfix">
+						<!-- 空白页 -->
+						<empty
+							v-if="tabItem.loaded === true && tabItem.orderList.length === 0"
+							:typeIndex="currentTab"
+							:navbarHeight="navbarHeight"
+						></empty>
+						<!-- 列表 -->
+						<view v-else class="tui-order-content">
+							<view
+								class="tui-order-item"
+								v-for="(order, orderIndex) in tabItem.orderList"
+								:key="orderIndex"
+								@click.stop="detail(order)"
+							>
+								<view class="order-title">
+									<view class="order-title-name">
+										<text>{{ order.clubName ? order.clubName : '' }}</text>
+										<text class="tags" v-if="order.svipUserFlag == 0 && order.userIdentity === 2"
+											>VIP</text
+										>
+										<text class="tags sv" v-if="order.svipUserFlag == 1">SVIP</text>
+										<view class="name" v-if="screenTab === 3">【 {{ order.serviceName ? order.serviceName : '' }} 】</view>
+									</view>
+									<view class="order-title-t">
+										<view class="Rebate " v-if="order.rebateFlag == 1">返佣</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 }}({{ order.orderId }})
+										</text>
+										<image
+											class="bage-icon"
+											src="https://static.caimei365.com/app/img/icon/icon-type@3x.png"
+											mode="widthFix"
+											v-if="order.secondHandOrderFlag == 1"
+										>
+										</image>
+									</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">
+											{{ StateExpFormat(order.status) }}
+										</view>
+									</view>
+								</view>
+								<block v-for="(shop, index) in order.shopOrderList" :key="index">
+									<view class="goods-title">
+										<view v-if="shop.shopPromotion" class="floor-item-act">
+											<view class="floor-tags">{{ shop.shopPromotion.name }}</view>
+										</view>
+										<view class="title-text tui-skeleton-fillet">{{ shop.shopName }}</view>
+									</view>
+									<view
+										class="goods-item"
+										v-for="(pros, prosIndex) in shop.orderProductList"
+										:key="prosIndex"
+									>
+										<view class="goods-pros-t">
+											<view class="pros-img tui-skeleton-fillet">
+												<image :src="pros.image" alt="" />
+												<text class="tips" v-if="pros.productType == 2 || pros.productType == 1"
+													>赠品</text
+												>
+											</view>
+											<view class="pros-product clearfix">
+												<view class="producttitle tui-skeleton-fillet">{{ pros.name }}</view>
+												<view
+													class="productspec tui-skeleton-fillet"
+													v-if="pros.productCategory != 2"
+												>
+													规格:{{ pros.productUnit ? pros.productUnit : '' }}
+												</view>
+												<view class="productprice">
+													<view
+														class="price tui-skeleton-fillet"
+														:class="
+															pros.svipPriceFlag == 1 ||
+															PromotionsFormat(pros.productPromotion)
+																? 'none'
+																: ''
+														"
+													>
+														<text>¥{{ pros.price | NumFormat }}</text>
+													</view>
+													<view class="count tui-skeleton-fillet">
+														<text class="small">x</text>{{ pros.num }}
+													</view>
+												</view>
+												<view class="floor-item-act">
+													<template v-if="pros.productPromotion">
+														<view
+															v-if="PromotionsFormat(pros.productPromotion)"
+															class="floor-tags"
+															@click.stop="clickPopupShow(pros.productPromotion)"
+														>
+															{{ pros.productPromotion.name }}
+															<text
+																v-if="
+																	pros.productPromotion != null &&
+																		pros.productPromotion.type != 3
+																"
+															>
+																:¥{{
+																	pros.productPromotion == null
+																		? '0.00'
+																		: pros.productPromotion.touchPrice | NumFormat
+																}}
+															</text>
+														</view>
+														<view
+															v-else-if="pros.productPromotion.type != 3"
+															class="floor-tags"
+															@click.stop="clickPopupShow(pros.productPromotion)"
+															>{{ pros.productPromotion.name }}</view
+														>
+													</template>
+													<template v-if="pros.svipPriceFlag == 1">
+														<view class="svip-tags">
+															<view class="tags">SVIP</view>
+															<view class="price">{{ pros.svipPriceTag }}</view>
+														</view>
+													</template>
+												</view>
+											</view>
+										</view>
+									</view>
+								</block>
+								<view class="order-footer">
+									<view class="order-footer-top" v-if="order.discountFee != 0"
+										>经理折扣:¥{{ order.discountFee | NumFormat }}</view
+									>
+									<view class="order-footer-bot">
+										<view class="count tui-skeleton-fillet">共{{ order.productCount }}件商品</view>
+										<view
+											class="money tui-skeleton-fillet"
+											v-if="order.status == 31 || order.status == 32 || order.status == 33"
+										>
+											已支付:<label style="color:#f94b4b ;"
+												>¥{{ order.receiptAmount | NumFormat }}</label
+											>
+										</view>
+										<view class="money tui-skeleton-fillet" v-else
+											>待付总额:<label style="color:#f94b4b ;">
+												¥{{ order.pendingPayments | NumFormat }}</label
+											>
+										</view>
+									</view>
+								</view>
+								<!-- 底部button -->
+								<order-button
+									ref="orderButton"
+									v-if="screenTab != 3"
+									:status="order.status"
+									:order="order"
+									:orderId="order.orderId"
+									:rechargeGoods="order.rechargeGoods"
+									:userId="order.userId"
+									:secondHandOrderFlag="order.secondHandOrderFlag"
+									@buttonConfirm="handButtonConfirm"
+								>
+								</order-button>
+							</view>
+							<!--加载loadding-->
+							<tui-loadmore :visible="loadding" :index="3" type="black"></tui-loadmore>
+							<tui-nomore
+								:visible="!pullUpOn"
+								:backgroundColor="'#ffffff'"
+								:text="nomoreText"
+							></tui-nomore>
+							<!--加载loadding-->
+						</view>
+					</view>
+				</scroll-view>
+			</swiper-item>
+		</swiper>
+		<!-- 分享弹窗 -->
+		<share-alert
+			v-if="isShareModal"
+			:orderId="btnoRderID"
+			:shareType="isShareType"
+			@shareConfirm="onShareAppMessage"
+		>
+		</share-alert>
+		<!-- 透明模态层 -->
+		<modal-layer v-if="isModalLayer"></modal-layer>
+		<view class="aganBj" v-show="showAgan">
+			<view class="alertAgan">
+				<text class="title">{{ promptitle }}</text>
+				<view class="goods">
+					<view class="list" v-for="(item, index) in failList" :key="index">
+						<image class="image-left" :src="item.image"></image>
+						<view class="name-right">{{ item.name }}</view>
+					</view>
+				</view>
+				<view class="BtnAll">
+					<view class="closebtn btn" @click="closeBtn">取消</view>
+					<view class="cancel btn" @click="cancelBtn">确定</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+import { mapState, mapMutations } from 'vuex'
+import headerBack from '@/components/cm-module/headerNavbar/header-back' //自定义顶部导航
+import btSearch from '@/components/uni-search/bt-search.vue' //搜索
+import orderButton from './components/sellerOrderButton' //操作按钮
+import modalLayer from '@/components/modal-layer'
+import empty from './components/empty'
+import shareAlert from './components/sellerShareAlert.vue' //分享弹窗
+
+export default {
+	components: {
+		headerBack,
+		empty,
+		btSearch,
+		orderButton,
+		modalLayer,
+		shareAlert
+	},
+	data() {
+		return {
+			orderTabBar: [
+				{ listType: 0, text: '全部订单', orderList: [] },
+				{ listType: 1, text: '待确认', orderList: [] },
+				{ listType: 2, text: '待付款', orderList: [] },
+				{ listType: 3, text: '待发货', orderList: [] },
+				{ listType: 4, text: '已发货', orderList: [] },
+				{ listType: 5, text: '退货/款', orderList: [] }
+			],
+			screenTabBar: [
+				{ type: 0, text: '全部订单(我的)' },
+				{ type: 1, text: '自主订单(我的)' },
+				{ type: 2, text: '协销订单(我的)' }
+			],
+			headerBtnPosi: this.setHeaderBtnPosi(), //获取设备顶部胶囊高度
+			systeminfo: this.setSysteminfo(), //获取设备信息
+			nvabarData: {
+				//顶部自定义导航
+				showCapsule: 1, // 是否显示左上角图标  1表示显示  0表示不显示,
+				showSearch: 1,
+				title: ' ' // 导航栏中间的标题
+			},
+			CustomBar: this.CustomBar, // 顶部导航栏高度
+			winHeight: '', //窗口高度
+			currentTab: 0, //预设当前项的值
+			screenTab: 0, //筛选预设当前项的值
+			scrollLeft: 0, //tab标题的滚动条位置
+			serviceProviderId: 0, //协销用户ID
+			orderData: [],
+			btnClubUserID: 0,
+			btnoRderID: 0, //点击按钮传入的的订单ID
+			pageNum: 1, //页数
+			pageSize: 10, //条数
+			groupServiceId: 0,
+			scrollTop: 0,
+			deteleType: '',
+			skeletonShow: true,
+			isClickChange: false,
+			isShareModal: false, //控制分享弹窗
+			isShareType: 2,
+			isSeller: false,
+			isModalLayer: false,
+			loadding: false,
+			pullUpOn: true,
+			hasNextPage: false,
+			pullFlag: true,
+			navbarHeight: '',
+			nomoreText: '上拉显示更多',
+			showAgan: false,
+			failList: [], // 再来一单可购买商品
+			promptitle: '',
+			aganOrderId: 0, // 再来一单商品id
+			userId: 0,
+			manager: 0,
+			rightDrawer: false //控制筛选抽屉
+		}
+	},
+	onLoad(option) {
+		let self = this
+		if (option.type === 'detele') {
+			self.isDelete = true
+		}
+		self.currentTab = option.listType
+		self.getHeaderTopHeight() //设置自定义导航高度
+		//  高度自适应
+		uni.getSystemInfo({
+			success: function(res) {
+				let calc = res.windowHeight
+				self.winHeight = calc - self.CustomBar - 82
+			}
+		})
+	},
+	filters: {
+		NumFormat(value) {
+			//处理金额
+			return Number(value).toFixed(2)
+		}
+	},
+	computed: {
+		...mapState(['isManage'])
+	},
+	methods: {
+		async initGetStotage() {
+			const userInfo = await this.$api.getStorage()
+			this.userId = userInfo.userId ? userInfo.userId : 0
+			this.manager = userInfo.manager ? userInfo.manager : 0
+			this.getOrderDatainit(this.currentTab)
+		},
+		// 滚动切换标签样式
+		onChange(e) {
+			let index = e.target.current || e.detail.current
+			if (this.isClickChange) {
+				this.currentTab = index
+				this.isClickChange = false
+				return
+			}
+			this.isClickChange = false
+			this.currentTab = index
+			this.checkCor()
+			this.pageNum = 1
+			this.pullUpOn = true //切换时隐藏
+			this.loadding = false //切换时隐藏
+			this.nomoreText = ''
+			this.getOrderDatainit(this.currentTab, 'tabChange')
+		},
+		// 点击标题切换当前页时改变样式
+		onClickTab(e) {
+			let tabIndex = e.target.dataset.current || e.currentTarget.dataset.current
+			if (this.currentTab === tabIndex) {
+				return false
+			} else {
+				this.isClickChange = true
+				this.currentTab = tabIndex
+				this.pageNum = 1
+				this.pullUpOn = true //切换时隐藏
+				this.loadding = false //切换时隐藏
+				this.getOrderDatainit(this.currentTab)
+			}
+		},
+		onClickScreenTab(index) {
+			this.screenTab = index
+			this.pageNum = 1
+			this.pullUpOn = true //切换时隐藏
+			this.loadding = false //切换时隐藏
+			this.nomoreText = ''
+			this.getOrderDatainit(this.currentTab)
+		},
+		//判断当前滚动超过一屏时,设置tab标题滚动条。
+		checkCor: function() {
+			if (this.currentTab > 3) {
+				//这里距离按实际计算
+				this.scrollLeft = 300
+			} else {
+				this.scrollLeft = 0
+			}
+		},
+		getOrderDatainit(index, source) {
+			setTimeout(() => {
+				this.skeletonShow = false
+			}, 1500)
+			let orderItem = this.orderTabBar[index]
+			let listType = orderItem.listType
+			if (source === 'tabChange' && orderItem.loaded === true) {
+				//tab切换只有第一次需要加载数据
+				return
+			}
+			setTimeout(() => {
+				this.$api.getStorage().then(resolve => {
+					this.serviceProviderId = resolve.serviceProviderId
+					this.SellerService.GetSellerOrderList({
+						listType: index,
+						orderSubmitType: this.screenTab,
+						serviceProviderId: this.serviceProviderId,
+						pageNum: 1,
+						pageSize: this.pageSize,
+						groupServiceId: this.groupServiceId
+					})
+						.then(response => {
+							let data = response.data
+							if (data.list && data.list.length > 0) {
+								let orderList = data.list.filter(item => {
+									//添加不同状态下订单的表现形式
+									item = Object.assign(item, this.StateExpFormat(item.listType))
+									return item
+								})
+								orderItem.orderList = []
+								orderList.forEach(item => { 
+									orderItem.orderList.push(item)
+								})
+								//loaded新字段用于表示数据加载完毕,如果为空可以显示空白页
+								this.$set(orderItem, 'loaded', true)
+								this.hasNextPage = data.hasNextPage
+								if (this.hasNextPage) {
+									this.pullUpOn = false
+									this.nomoreText = '上拉显示更多'
+								} else {
+									if (orderItem.orderList.length < 2) {
+										this.pullUpOn = true
+									} else {
+										this.pullUpOn = false
+										this.nomoreText = '已至底部'
+									}
+								}
+							}else{
+								orderItem.orderList = []
+							}
+						})
+						.catch(error => {
+							this.$util.msg(error.msg, 2000)
+						})
+				})
+			}, 600)
+		},
+		getOnReachBottomData(index) {
+			//上拉加载
+			this.SellerService.GetSellerOrderList({
+				listType: index,
+				orderSubmitType: this.screenTab,
+				serviceProviderId: this.serviceProviderId,
+				pageNum: (this.pageNum += 1),
+				pageSize: this.pageSize,
+				groupServiceId: this.groupServiceId
+			})
+				.then(response => {
+					let orderItem = this.orderTabBar[index]
+					let data = response.data
+					this.hasNextPage = data.hasNextPage
+					orderItem.orderList = orderItem.orderList.concat(data.list)
+					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)
+				})
+		},
+		scrolltolower() {
+			if (this.hasNextPage) {
+				this.loadding = true
+				this.pullUpOn = true
+				this.getOnReachBottomData(this.currentTab)
+			}
+		},
+		detail(order) {
+			//订单详情跳转
+			this.isModalLayer = true
+			if(this.screenTab === 3){
+				this.$api.navigateTo(
+					`/pages/seller/order/order-club-details?listType=${this.currentTab}&orderId=${order.orderId}&userId=${
+						order.userId
+					}`
+				)
+			}else{
+				this.$api.navigateTo(
+					`/pages/seller/order/order-details?listType=${this.currentTab}&orderId=${order.orderId}&userId=${
+						order.userId
+					}`
+				)
+			}
+		},
+		handButtonConfirm(data) {
+			//获取点击
+			this.handShowAlert(data)
+			this.btnoRderID = data.orderId
+		},
+		handShowAlert(data) {
+			//执行
+			console.log(data)
+			switch (data.type) {
+				case 'query':
+					this.isModalLayer = true
+					this.$api.navigateTo('/pages/user/order/order-logistics?orderId=' + data.orderId)
+					break
+				case 'delete':
+					this.handOrderDetele(data.orderId)
+					break
+				case 'cancel':
+					this.handCenceConfirm(data.orderId)
+					break
+				case 'confirm':
+					this.handOrderConfirm(data.orderId)
+					break
+				case 'again':
+					this.handOrderAgain(data.orderId)
+					break
+			}
+		},
+		handOrderAgain(orderId) {
+			this.aganOrderId = orderId
+			this.SellerService.SellerCreateOrderAgain({
+				confirmFlag: 0,
+				orderId: this.aganOrderId,
+				serviceProviderId: this.serviceProviderId
+			})
+				.then(res => {
+					if (res.code == 0) {
+						this.$api.setStorage('orderUserInfo', {
+							clubId: res.data.clubId,
+							againBuyProductIds: res.data.productIds,
+							userId: res.data.userId
+						})
+						this.$api.navigateTo('/pages/seller/cart/cart')
+					}
+				})
+				.catch(error => {
+					if (error.code == -3) {
+						this.showAgan = true
+						this.promptitle = error.msg
+						this.failList = error.data
+					} else if (error.code == -2) {
+						this.$util.modal('', error.msg, '确定', '', false, () => {})
+					} else {
+						this.$util.msg(error.msg, 2000)
+					}
+				})
+		},
+		closeBtn() {
+			//
+			this.showAgan = false
+		},
+		cancelBtn() {
+			// 再来一单弹窗
+			this.SellerService.SellerCreateOrderAgain({
+				serviceProviderId: this.serviceProviderId,
+				orderId: this.aganOrderId,
+				confirmFlag: 1
+			}).then(res => {
+				if (res.code == 0) {
+					this.$api.navigateTo('/pages/seller/cart/cart')
+					this.showAgan = false
+				}
+			})
+		},
+		handOrderConfirm(orderId) {
+			//确认订单
+			this.$util.modal('提示', '确认此订单?', '确定', '取消', true, () => {
+				this.OrderService.AffirmOrder({ orderId: orderId })
+					.then(response => {
+						this.$util.msg(response.msg, 2000, true, 'success')
+						setTimeout(() => {
+							this.getOrderDatainit(this.currentTab)
+						}, 2000)
+					})
+					.catch(error => {
+						this.$util.msg(error.msg, 2000)
+					})
+			})
+		},
+		handOrderDetele(orderId) {
+			//删除订单
+			this.$util.modal('提示', '确认删除该订单吗?', '确定', '取消', true, () => {
+				this.OrderService.DeleteOrder({ orderId: orderId })
+					.then(response => {
+						this.$util.msg(response.msg, 2000, true, 'success')
+						setTimeout(() => {
+							this.getOrderDatainit(this.currentTab)
+						}, 2000)
+					})
+					.catch(error => {
+						this.$util.msg(error.msg, 2000)
+					})
+			})
+		},
+		handCenceConfirm(orderId) {
+			//取消订单
+			this.$util.modal('提示', '确认取消该订单吗?', '确定', '取消', true, () => {
+				this.OrderService.CancelOrder({ orderId: orderId ,userIdentity : 1 })
+					.then(response => {
+						this.$util.msg(response.msg, 2000, true, 'success')
+						setTimeout(() => {
+							this.getOrderDatainit(this.currentTab)
+						}, 2000)
+					})
+					.catch(error => {
+						this.$util.msg(error.msg, 2000)
+					})
+			})
+		},
+		handSearchConfirmData(data) {
+			//确定筛选
+			this.groupServiceId = data.serviceProviderId
+			this.getOrderDatainit(this.currentTab)
+		},
+		handlSearchPath() {
+			this.$api.navigateTo('/pages/seller/order/search-order')
+		},
+		onShareAppMessage(res) {
+			//分享转发
+			this.isShareModal = false
+			if (res.from === 'button') {
+				// 来自页面内转发按钮
+				// console.log(res.target)
+			}
+			return {
+				title: '您有新的订单,请点击查看~',
+				path: `/pages/user/order/order-sharelogin?orderId=${this.btnoRderID}&userId=${
+					this.btnClubUserID
+				}&serviceProviderId=${this.serviceProviderId}`,
+				imageUrl: 'https://img.caimei365.com/group1/M00/03/95/Cmis216Sk_SABnOFABZCgCzFV_g063.png'
+			}
+		},
+		PromotionsFormat(promo) {
+			//促销活动类型数据处理
+			if (promo != null) {
+				if (promo.type == 1 && promo.mode == 1) {
+					return true
+				} else {
+					return false
+				}
+			}
+			return false
+		},
+		//订单状态文字和颜色
+		StateExpFormat(state) {
+			let stateText = '',
+				stateTextObject = {
+					0: '待确认',
+					4: '交易完成',
+					5: '订单完成',
+					6: '已关闭',
+					7: '交易全退',
+					77: '交易全退',
+					11: '待付款待发货',
+					12: '待付款部分发货',
+					13: '待付款已发货',
+					21: '部分付款待发货',
+					22: '部分付款部分发货',
+					23: '部分付款已发货',
+					31: '已付款待发货',
+					32: '已付款部分发货',
+					33: '已付款已发货',
+					111: '待付款待发货'
+				}
+			Object.keys(stateTextObject).forEach(key => {
+				if (key == state) {
+					stateText = stateTextObject[key]
+				}
+			})
+			return stateText
+		},
+		orderPriceToFixed(n) {
+			let price = ''
+			price = n.toFixed(2)
+			return price
+		},
+		getHeaderTopHeight() {
+			// 状态栏高度
+			let statusBarHeight = this.systeminfo.statusBarHeight
+			let headerPosi = this.headerBtnPosi
+			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
+			}
+			this.navbarHeight = headerPosi.bottom + btnPosi.bottom // 原胶囊bottom + 现胶囊bottom
+		},
+		setHeaderBtnPosi() {
+			// 获得胶囊按钮位置信息
+			let headerBtnPosi = uni.getMenuButtonBoundingClientRect()
+			return headerBtnPosi
+		},
+		setSysteminfo() {
+			let systeminfo
+			uni.getSystemInfo({
+				// 获取设备信息
+				success: res => {
+					systeminfo = res
+				}
+			})
+			return systeminfo
+		}
+	},
+	onPageScroll(e) {
+		this.scrollTop = e.scrollTop
+	},
+	onShow() {
+		this.isModalLayer = false
+		this.initGetStotage()
+	}
+}
+</script>
+
+<style lang="scss">
+page {
+	background-color: #ffffff;
+}
+/*tabbar start*/
+::-webkit-scrollbar {
+	width: 0;
+	height: 0;
+	color: transparent;
+}
+.order-section-top {
+	width: 100%;
+	position: fixed;
+	top: 0;
+	left: 0;
+	z-index: 99;
+	background: #ffffff;
+	.tab-screen {
+		width: 100%;
+		box-sizing: border-box;
+		background: #fff;
+		white-space: nowrap;
+		height: 80rpx;
+		padding: 10rpx 0;
+		border-top: 1px solid #f7f7f7;
+		border-bottom: 1px solid #f7f7f7;
+		overflow: hidden;
+		.tab-screen-item {
+			min-width: 100rpx;
+			height: 60rpx;
+			border-radius: 10rpx;
+			background: #f7f7f7;
+			margin: 0 15rpx;
+			padding: 0 15rpx;
+			line-height: 60rpx;
+			font-size: $font-size-28;
+			color: #333333;
+			text-align: center;
+			display: inline-block;
+			&.active {
+				color: $color-system;
+			}
+		}
+	}
+}
+.tab-view::before {
+	content: '';
+	position: absolute;
+	border-bottom: 1rpx solid #eaeef1;
+	-webkit-transform: scaleY(0.5);
+	transform: scaleY(0.5);
+	bottom: 0;
+	right: 0;
+	left: 0;
+}
+.tab-view {
+	width: 100%;
+	height: 80rpx;
+	overflow: hidden;
+	box-sizing: border-box;
+	background: #fff;
+	white-space: nowrap;
+	border-top: 1px solid #f7f7f7;
+}
+.tab-bar-item {
+	padding: 0;
+	height: 80rpx;
+	min-width: 80rpx;
+	line-height: 80rpx;
+	margin: 0 28rpx;
+	display: inline-block;
+	text-align: center;
+	box-sizing: border-box;
+	&.active {
+		border-bottom: 6rpx solid $color-system;
+	}
+	.tab-bar-title {
+		height: 80rpx;
+		line-height: 80rpx;
+		font-size: $font-size-28;
+		color: $text-color;
+	}
+	&.active .tab-bar-title {
+		color: $color-system !important;
+	}
+}
+.container {
+	padding-bottom: env(safe-area-inset-bottom);
+	height: auto;
+	position: relative;
+}
+.tui-order-content {
+	width: 100%;
+	height: auto;
+}
+.tui-order-list {
+	width: 100%;
+	position: relative;
+}
+.tui-order-item {
+	display: flex;
+	flex-direction: column;
+	width: 702rpx;
+	padding: 20rpx 24rpx 0 24rpx;
+	background: #fff;
+	border-bottom: 20rpx solid #f7f7f7;
+}
+.order-title {
+	width: 100%;
+	height: auto;
+	.order-title-name {
+		width: 100%;
+		height: 72rpx;
+		border-bottom: 1px solid #f7f7f7;
+		line-height: 72rpx;
+		text-align: left;
+		font-size: $font-size-28;
+		color: #333333;
+		.tags {
+			display: inline-block;
+			width: 60rpx;
+			height: 32rpx;
+			border-radius: 8rpx;
+			background: #f0cb72;
+			font-size: $font-size-22;
+			color: #4e4539;
+			text-align: center;
+			line-height: 32rpx;
+			margin-left: 10rpx;
+			&.sv {
+				background: #333333;
+				color: #f0cb72;
+			}
+		}
+		.name {
+			float: right;
+			font-size: 26rpx;
+			color: #999999;
+		}
+	}
+	.order-title-t {
+		width: 100%;
+		height: 68rpx;
+		float: left;
+		line-height: 68rpx;
+		position: relative;
+		.bage-icon {
+			width: 50rpx;
+			height: 50rpx;
+			display: block;
+			position: absolute;
+			right: 0;
+			top: 9rpx;
+		}
+		.bage-buss {
+			display: inline-block;
+			width: 72rpx;
+			height: 30rpx;
+			background: radial-gradient(circle, rgba(255, 39, 180, 1) 0%, rgba(193, 77, 245, 1) 100%);
+			border-radius: 4rpx;
+			line-height: 30rpx;
+			font-size: $font-size-22;
+			text-align: center;
+			color: #ffffff;
+		}
+		.bage-auto {
+			display: inline-block;
+			width: 72rpx;
+			height: 30rpx;
+			background: radial-gradient(circle, rgba(255, 180, 39, 1) 0%, rgba(245, 142, 77, 1) 100%);
+			border-radius: 4rpx;
+			line-height: 30rpx;
+			font-size: $font-size-22;
+			text-align: center;
+			color: #ffffff;
+		}
+		.Rebate {
+			display: inline-block;
+			width: 72rpx;
+			height: 32rpx;
+			background: #ff7a51;
+			border-radius: 6rpx;
+			line-height: 32rpx;
+			text-align: center;
+			color: #ffffff;
+			margin-top: 10rpx;
+			font-size: $font-size-22;
+			margin-right: 20rpx;
+		}
+		.bage-text {
+			display: inline-block;
+			font-size: $font-size-28;
+			line-height: 68rpx;
+			text-align: left;
+			color: $text-color;
+			margin-left: 10rpx;
+		}
+	}
+	.order-title-b {
+		width: 100%;
+		height: 40rpx;
+		float: left;
+		margin-top: 8rpx;
+		.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 {
+	width: 100%;
+	height: 56rpx;
+	float: left;
+	margin-top: 10rpx;
+	.floor-item-act {
+		height: 56rpx;
+		text-align: center;
+		box-sizing: border-box;
+		float: left;
+		padding: 10rpx 0;
+		margin-right: 12rpx;
+	}
+	.title-text {
+		width: 400rpx;
+		overflow: hidden;
+		text-overflow: ellipsis;
+		white-space: nowrap;
+		float: left;
+		font-size: $font-size-28;
+		color: $text-color;
+		text-align: left;
+		line-height: 56rpx;
+		font-weight: bold;
+	}
+}
+.goods-item {
+	width: 100%;
+	height: auto;
+}
+.goods-pros-t {
+	width: 100%;
+	height: auto;
+	padding: 24rpx 0;
+	.pros-img {
+		float: left;
+		width: 210rpx;
+		height: 100%;
+		border-radius: 10rpx;
+		margin: 0 26rpx 0 0;
+		position: relative;
+		.tips {
+			display: inline-block;
+			width: 80rpx;
+			height: 40rpx;
+			background-image: linear-gradient(214deg, #ff4500 0%, #ff5800 53%, #ff4367 100%);
+			line-height: 40rpx;
+			text-align: center;
+			font-size: $font-size-24;
+			color: #ffffff;
+			border-radius: 10rpx 0 10rpx 0;
+			position: absolute;
+			top: 0;
+			left: 0;
+		}
+		image {
+			width: 210rpx;
+			height: 210rpx;
+			border-radius: 10rpx;
+			border: 1px solid #f3f3f3;
+		}
+	}
+}
+.pros-product {
+	width: 460rpx;
+	height: 100%;
+	line-height: 36rpx;
+	font-size: $font-size-26;
+	position: relative;
+	float: left;
+	.producttitle {
+		width: 100%;
+		display: inline-block;
+		height: auto;
+		text-overflow: ellipsis;
+		display: -webkit-box;
+		word-break: break-all;
+		-webkit-box-orient: vertical;
+		-webkit-line-clamp: 2;
+		overflow: hidden;
+		margin-bottom: 8rpx;
+	}
+	.productspec {
+		height: 36rpx;
+		color: #999999;
+		text-overflow: ellipsis;
+		display: -webkit-box;
+		word-break: break-all;
+		-webkit-box-orient: vertical;
+		-webkit-line-clamp: 1;
+		overflow: hidden;
+	}
+	.productprice {
+		height: 48rpx;
+		width: 100%;
+		float: left;
+		.price {
+			line-height: 48rpx;
+			font-size: $font-size-28;
+			width: 48%;
+			color: #ff2a2a;
+			float: left;
+			font-weight: bold;
+			&.none {
+				text-decoration: line-through;
+				color: #999999;
+			}
+		}
+		.count {
+			height: 100%;
+			float: right;
+			position: relative;
+			.small {
+				color: #666666;
+			}
+		}
+	}
+	.floor-item-act {
+		width: 100%;
+		height: 56rpx;
+		text-align: center;
+		box-sizing: border-box;
+		float: left;
+		padding: 0 0 10rpx 0;
+	}
+}
+.order-footer {
+	width: 100%;
+	height: 78rpx;
+	float: left;
+	.order-footer-top {
+		width: 100%;
+		height: 34rpx;
+		line-height: 34rpx;
+		font-size: $font-size-24;
+		color: #999999;
+		text-align: right;
+	}
+	.order-footer-bot {
+		width: 100%;
+		float: left;
+		height: 48rpx;
+		line-height: 48rpx;
+		font-size: $font-size-28;
+		font-weight: bold;
+		color: $text-color;
+		.count {
+			width: 50%;
+			float: left;
+			text-align: left;
+		}
+		.money {
+			width: 50%;
+			float: right;
+			text-align: right;
+		}
+	}
+}
+.aganBj {
+	position: fixed;
+	left: 0;
+	top: 0;
+	bottom: 0;
+	width: 100%;
+	height: 100%;
+	background-color: rgba(0, 0, 0, 0.5);
+	z-index: 999999;
+	.alertAgan {
+		position: absolute;
+		top: 50%;
+		left: 50%;
+		transform: translate(-50%, -50%);
+		width: 580rpx;
+		background-color: #fff;
+		border-radius: 16rpx;
+		.title {
+			font-size: 30rpx;
+			color: #333333;
+			line-height: 42rpx;
+			padding: 30rpx;
+			display: block;
+		}
+		.goods {
+			padding: 0 30rpx;
+			.list {
+				padding: 10px 0;
+				border-bottom: 1rpx solid #e1e1e1;
+				margin: 10rpx 0;
+				.image-left {
+					width: 86rpx;
+					height: 86rpx;
+					border: 2rpx solid #e1e1e1;
+					border-radius: 6rpx;
+					display: inline-block;
+					vertical-align: middle;
+				}
+				.name-right {
+					display: inline-block;
+					width: 416rpx;
+					margin-left: 15rpx;
+					font-size: 26rpx;
+					color: #666666;
+					vertical-align: middle;
+					word-break: break-all;
+					overflow: hidden;
+					text-overflow: ellipsis;
+					display: -webkit-inline-box;
+					-webkit-line-clamp: 2;
+					-webkit-box-orient: vertical;
+				}
+			}
+		}
+		.BtnAll {
+			margin-top: 30rpx;
+			.btn {
+				display: inline-block;
+				width: 290rpx;
+				height: 90rpx;
+				line-height: 90rpx;
+				text-align: center;
+				&.closebtn {
+					border-radius: 0px 0px 0px 10px;
+					color: #999999;
+					background: #efefef;
+				}
+				&.cancel {
+					border-radius: 0px 0px 8px 0px;
+					background: $btn-confirm;
+					color: #fff;
+				}
+			}
+		}
+	}
+}
+</style>

+ 161 - 0
pages/user/operator/form.vue

@@ -0,0 +1,161 @@
+<template>
+	<view class="container operator clearfix">
+		<view class="operator-content">
+			<view class="operator-from">
+				<view class="from-row">
+					<input class="input" type="text" v-model="params.linkName" placeholder="请输入运营人员姓名" maxlength="6"/>
+				</view>
+				<view class="from-row">
+					<input class="input" type="text" v-model="params.mobile" placeholder="请输入运营人员手机号" maxlength="11"/>
+				</view>
+				<button class="add-btn" @click="hanldConfirm">确定</button>
+			</view>
+			<view class="operator-text">
+				<view class="text-main">
+					<view>1. 添加运营人员后,运营人员会收到一条邀请码短信</view>
+					<view>2. 运营人员在微信搜索【采美采购商城】小程序,或者搜索关注【采美365】公众号,从底部菜单进入【采美采购商城】小程序</view>
+					<view>3. 使用邀请码进行登录并绑定微信</view>
+					<view>4. 绑定后,运营人员可通过微信直接登录采美365网</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>	
+	import authorize from '@/common/config/authorize.js'	
+	
+	export default {
+		data() {
+			return {
+				params:{
+					mobile:'',
+					linkName:'',
+					userId:0,
+					clubId:0,
+					configFlag:2
+				}
+			}
+		},
+		onLoad(option){
+			
+		},
+		methods: {			
+			//提交
+			hanldConfirm(){
+				let data = this.addressData;
+				if(this.params.linkName== ''){
+					this.$util.msg('请输入运营人员姓名');
+					return;
+				}
+				if(this.params.mobile == ''){
+					this.$util.msg('请输入运营人员手机号');
+					return;
+				}
+				if(!/(^1[0-9][0-9]{9}$)/.test(this.params.mobile)){
+					this.$util.msg('请输入正确的手机号码');
+					return;
+				}
+				this.UserService.PostAddOperator(this.params).then(response =>{
+					this.$util.msg('添加成功',2000,true,'success')
+					setTimeout(() =>{
+						uni.navigateBack();
+					},2000)
+				}).catch(error =>{
+					this.$util.msg(error.msg,2000);
+				})
+			}
+		},
+		onShow() {
+			this.$api.getStorage().then((resolve) =>{
+				this.params.userId = resolve.userId ? resolve.userId : 0
+				this.params.clubId = resolve.clubId ? resolve.clubId : 0
+			})
+		}
+	}
+</script>
+
+<style lang="scss">
+	page{
+		height: auto;
+		background: $bg-color;
+		border-top: 1px solid #EBEBEB;
+	}
+	.operator{
+		padding-top: 160rpx;
+		.operator-content{
+			width: 100%;
+			padding: 0 75rpx;
+			box-sizing: border-box;
+			.operator-from{
+				width: 100%;
+				height: auto;
+				.from-row{
+					height: 40rpx;
+					padding: 24rpx 0;
+					background: #FFFFFF;
+					margin-bottom: 40rpx;
+					font-size: $font-size-28;
+					color: $text-color;
+					border-bottom: 1px solid #E1E1E1;
+					.input{
+						width: 100%;
+						height: 100%;
+						text-align: left;
+					}
+				}
+			}
+			.operator-text{
+				width: 100%;
+				height: auto;
+				margin-top: 50rpx;
+				line-height: 40rpx;
+				.title{
+					margin-bottom: 50rpx;
+					.icon-gantanhao-yuankuang{
+						font-size: $font-size-32;
+						color: #166CE1;
+						margin-right: 10rpx;
+					}
+					.text-m{
+						font-size: $font-size-30;
+						color: #166CE1;
+					}
+					.text-s{
+						font-size: $font-size-24;
+						color: #999999;
+					}
+				}
+				.text-main{
+					width: 100%;
+					height: auto;
+					view{
+						line-height: 40rpx;
+						font-size: $font-size-28;
+						color: $text-color;
+						text-align: justify;
+						margin-bottom: 10rpx;
+					}
+				}
+			}
+			
+		}
+		.add-btn{
+			width: 600rpx;
+			height: 88rpx;
+			font-size: $font-size-28;
+			line-height: 88rpx;
+			color: #FFFFFF;
+			margin: 0 auto;
+			text-align: center;
+			background: $btn-confirm;
+			border-radius: 44rpx;
+			margin-top: 80rpx;
+		}
+		.add-btn.disabled{
+			background: #F8F8F8;
+			border-radius: 44rpx;
+		}
+	}
+</style>
+

+ 634 - 0
pages/user/operator/list.vue

@@ -0,0 +1,634 @@
+<template>
+	<view class="container operator clearfix">
+		<view class="operator-top clearfix">
+			<view class="operator-title">
+				<view class="head"><image :src="clubImage" mode=""></image></view>
+				<view class="title">{{ clubName }}</view>
+			</view>
+			<view class="operator-search">
+				<view class="search-wrap">
+					<view class="search-from name">
+						<input
+							class="input"
+							type="text"
+							v-model="listQuery.linkName"
+							placeholder="请输入姓名"
+							maxlength="6"
+						/>
+					</view>
+					<view class="search-from phone">
+						<input
+							class="input"
+							type="text"
+							v-model="listQuery.mobile"
+							placeholder="请输入手机号"
+							maxlength="11"
+						/>
+					</view>
+					<view class="search-from search">
+						<button class="search-btn" type="default" @click.stop="handSearchOpertor">搜索</button>
+					</view>
+				</view>
+			</view>
+		</view>
+		<view class="operator-main">
+			<view v-if="isEmpty" class="empty-container"> <view class="txt">暂无运营人员</view> </view>
+			<view v-else class="operator-list">
+				<scroll-view scroll-y="true">
+					<view
+						class="list"
+						v-for="(item, index) in operatorList"
+						:key="index"
+						@click.stop="showOperatorModel(item)"
+					>
+						<view class="list-left">
+							<view class="list-head"
+								><image
+									:src="
+										item.avatarUrl
+											? item.avatarUrl
+											: 'https://static.caimei365.com/app/img/icon/icon-seller@3x.png'
+									"
+									mode=""
+								></image
+							></view>
+							<view class="list-tel">
+								<text class="txt">{{ item.linkName ? item.linkName : '' }}</text>
+								<text class="txt">{{ item.mobile ? item.mobile : '' }}</text>
+							</view>
+						</view>
+						<view class="list-opea">
+							<view class="opea-type">
+								<view class="opea-type-cell" v-if="item.effectiveFlag != null">
+									<text
+										class="iconfont icon-iconfontweixin"
+										:style="{ color: iconStautsColor(item.status) }"
+									></text>
+									<text :style="{ color: rexpStautsColor(item.effectiveFlag) }">{{
+										rexpStautsText(item.effectiveFlag)
+									}}</text>
+								</view>
+								<view class="opea-type-cell none" v-else> <text>- -</text> </view>
+							</view>
+							<view class="opea-del">
+								<view class="opea-type-cell" @click.stop="deleteOperator(item.id)">
+									<text class="iconfont icon-shanchu"></text> <text>删除</text>
+								</view>
+							</view>
+						</view>
+					</view>
+					<!--加载loadding-->
+					<tui-loadmore :visible="loadding" :index="3" type="black"></tui-loadmore>
+					<tui-nomore :visible="!pullUpOn" :backgroundColor="'#ffffff'" :text="nomoreText"></tui-nomore>
+					<!--加载loadding-->
+				</scroll-view>
+			</view>
+		</view>
+		<div class="operator-btn" :style="{ paddingBottom: isIphoneX ? '68rpx' : '0rpx' }">
+			<view class="add-btn" @click="this.$api.navigateTo('/pages/user/operator/addoperator')">添加运营人员</view>
+		</div>
+		<view class="operator-model" v-if="isOperatorModel" @click.stop="closeModel">
+			<view class="operator-alert">
+				<text class="iconfont icon-iconfontguanbi" @click.stop="closeModel"></text>
+				<view class="content">
+					<view class="ciew-t">姓名:{{ modelData.linkName }}</view>
+					<view class="ciew-t">手机号:{{ modelData.mobile }}</view>
+					<view class="ciew-t"
+						>邀请码:{{ modelData.invitationCode ? modelData.invitationCode : '无' }}
+						<text :style="{ color: rexpStautsColor(modelData.status) }">{{
+							modelStautsText(modelData.effectiveFlag)
+						}}</text>
+					</view>
+					<view class="ciew-t"
+						>邀请码有效期:{{ modelData.effectiveDays ? modelData.effectiveDays : '0' }}天</view
+					>
+					<view class="ciew-t">状态:{{ modelData.status == 2 ? '已绑定' : '未绑定' }}</view>
+					<view class="ciew-t">添加时间:{{ modelData.addTime }}</view>
+					<view class="ciew-t">绑定时间:{{ modelData.bindTime == null ? '无' : modelData.bindTime }}</view>
+				</view>
+				<view class="btn" v-if="modelData.status != 2" @click.stop="updateInvitationCode(modelData)"
+					>更新邀请码</view
+				>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+export default {
+	data() {
+		return {
+			clubName: '',
+			clubImage: '',
+			linkman: '',
+			clubMobile: '',
+			isEmpty: false,
+			nomoreText: '上拉显示更多',
+			userID: '',
+			pageNum: 1,
+			pageSize: 10,
+			hasNextPage: false,
+			loadding: false,
+			pullUpOn: true,
+			pullFlag: true,
+			allowDataStatus: true,
+			wrapperHeight: '100%',
+			scrollHeight: '',
+			deleteAddressId: '',
+			currPage: '', //当前页面
+			prevPage: '', //上一个页面
+			isOperatorModel: false,
+			operatorList: [],
+			isIphoneX: this.$store.state.isIphoneX,
+			modelData: '',
+			listQuery: {
+				userId: '',
+				linkName: '',
+				mobile: '',
+				pageNum: 1,
+				pageSize: 10
+			}
+		}
+	},
+	onLoad() {
+		this.setScrollHeight()
+	},
+	methods: {
+		setScrollHeight() {
+			// 窗口高度 - 底部距离
+			setTimeout(() => {
+				const query = wx.createSelectorQuery().in(this)
+				query.selectAll('.add-btn').boundingClientRect()
+				query.exec(res => {
+					if (res[0][0]) {
+						let winHeight = this.$api.getWindowHeight(),
+							eleTop = res[0][0].top - 1
+						this.scrollHeight = eleTop
+					}
+				})
+			}, 500)
+		},
+		handSearchOpertor() {
+			this.listQuery.pageNum = 1
+			this.InitOperatorList()
+		},
+		InitOperatorList() {
+			//查询机构运营人员列表
+			this.UserService.QueryOperatorList(this.listQuery)
+				.then(response => {
+					let responseData = response.data
+					if (responseData.results && responseData.results.length > 0) {
+						this.isEmpty = false
+						this.hasNextPage = response.data.hasNextPage
+						this.operatorList = responseData.results
+						this.pullFlag = false
+						setTimeout(() => {
+							this.pullFlag = true
+						}, 500)
+						if (this.hasNextPage) {
+							this.pullUpOn = false
+							this.nomoreText = '上拉显示更多'
+						} else {
+							this.pullUpOn = true
+							this.loadding = false
+							this.nomoreText = '已至底部'
+						}
+					} else {
+						this.isEmpty = true
+					}
+				})
+				.catch(error => {
+					this.$util.msg(error.msg, 2000)
+				})
+		},
+		getOnReachBottomData() {
+			this.listQuery.pageNum += 1
+			this.UserService.QueryOperatorList(this.listQuery)
+				.then(response => {
+					let responseData = response.data
+					if (responseData.results && responseData.results.length > 0) {
+						this.hasNextPage = response.data.hasNextPage
+						this.operatorList = this.operatorList.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)
+				})
+		},
+		showOperatorModel(item) {
+			this.isOperatorModel = true
+			this.modelData = item
+		},
+		closeModel() {
+			this.isOperatorModel = false
+		},
+		deleteOperator(id) {
+			//删除运营人员
+			this.$util.modal('', '确定删除运营人员吗?', '确定删除', '取消', true, () => {
+				this.UserService.PostDeleteOperator({ id: id })
+					.then(response => {
+						this.$util.msg('删除成功', 2000, true, 'success')
+						setTimeout(() => {
+							this.InitOperatorList()
+						}, 2000)
+					})
+					.catch(error => {
+						this.$util.msg(error.msg, 2000)
+					})
+			})
+		},
+		updateInvitationCode(item) {
+			//更新邀请码
+			this.$util.modal('', '确定更新邀请码并发送给运营人员?', '确定更新', '取消', true, () => {
+				this.UserService.PostUpdateOperatorCode({ id: item.id, status: item.status })
+					.then(response => {
+						this.isOperatorModel = false
+						this.$util.msg('更新邀请码成功', 2000)
+						setTimeout(() => {
+							this.InitOperatorList()
+						}, 2000)
+					})
+					.catch(error => {
+						this.$util.msg(error.msg, 2000)
+					})
+			})
+		},
+		rexpStautsText(n) {
+			let text = ''
+			switch (n) {
+				case '':
+					text = '--'
+					break
+				case 1:
+					text = '邀请码有效'
+			 	break
+				case 2:
+					text = '邀请码已使用'
+					break
+				case 3:
+					text = '邀请码已过期'
+					break
+			}
+			return text
+		},
+		modelStautsText(n) {
+			let text = ''
+			switch (n) {
+				case 1:
+			 	text = '(有效)'
+					break
+				case 2:
+					text = '(已使用)'
+					break
+				case 3:
+					text = '(已过期)'
+					break
+			}
+			return text
+		},
+		rexpStautsColor(status) {
+			let textColor = ''
+			switch (status) {
+				case 1:
+					textColor = '#55BB00'
+					break
+				case 2:
+					textColor = '#0056BB'
+					break
+				case 3:
+					textColor = '#BB0000'
+					break
+			}
+			return textColor
+		},
+		iconStautsColor(status) {
+			let textColor = ''
+			if (status == 2) {
+				textColor = '#09BB07'
+			} else {
+				textColor = '#DDDDDD'
+			}
+			return textColor
+		}
+	},
+	onReachBottom() {
+		if (this.hasNextPage) {
+			this.loadding = true
+			this.pullUpOn = true
+			this.getOnReachBottomData()
+		}
+	},
+	onShow() {
+		this.$api.getComStorage('clubInfo').then(resolve => {
+			this.clubName = resolve.name
+			this.clubImage = resolve.image
+				? resolve.image
+				: 'https://static.caimei365.com/app/img/icon/icon-club@3x.png'
+			this.listQuery.userId = resolve.userId
+			this.listQuery.pageNum = 1
+			this.InitOperatorList()
+		})
+	}
+}
+</script>
+
+<style lang="scss">
+page {
+	height: auto;
+}
+page,
+.container {
+	/* padding-bottom: 120upx; */
+	background: #f7f7f7;
+	border-top: 1px solid #ebebeb;
+}
+.container {
+	position: relative;
+}
+.operator-top {
+	width: 702rpx;
+	padding: 0 24rpx;
+	height: 282rpx;
+	background: #ffffff;
+	position: fixed;
+	top: 0;
+	left: 0;
+	z-index: 999;
+	.operator-title {
+		width: 100%;
+		height: 92rpx;
+		padding: 34rpx 0;
+		.title {
+			width: 420rpx;
+			float: left;
+			font-size: $font-size-32;
+			color: $text-color;
+			line-height: 92rpx;
+			text-align: left;
+			margin-left: 20rpx;
+			-o-text-overflow: ellipsis;
+			text-overflow: ellipsis;
+			display: -webkit-box;
+			word-break: break-all;
+			-webkit-box-orient: vertical;
+			-webkit-line-clamp: 1;
+			overflow: hidden;
+		}
+		.head {
+			width: 92rpx;
+			height: 92rpx;
+			border-radius: 50%;
+			border: 1px solid #ebebeb;
+			float: left;
+			image {
+				width: 92rpx;
+				height: 92rpx;
+				border-radius: 50%;
+			}
+		}
+	}
+	.operator-search {
+		width: 100%;
+		height: auto;
+		.search-from {
+			width: 300rpx;
+			height: 40rpx;
+			padding: 20rpx;
+			background: $sub-bg-color;
+			border-radius: 40rpx;
+			position: relative;
+			margin-bottom: 20rpx;
+			float: left;
+			&.name {
+				width: 180rpx;
+				margin-right: 20rpx;
+				.input {
+					width: 180rpx;
+					font-size: $font-size-28;
+					color: $text-color;
+					line-height: 40rpx;
+					float: left;
+					height: 40rpx;
+				}
+			}
+			&.phone {
+				width: 228rpx;
+				margin-right: 20rpx;
+				.input {
+					width: 228rpx;
+					padding-left: 10rpx;
+					font-size: $font-size-28;
+					color: $text-color;
+					line-height: 40rpx;
+					float: left;
+					height: 40rpx;
+				}
+			}
+			&.search {
+				width: 175rpx;
+				padding: 0;
+				background: #ffffff;
+				.search-btn {
+					width: 170rpx;
+					height: 78rpx;
+					border-radius: 39rpx;
+					font-size: $font-size-28;
+					color: #ffffff;
+					line-height: 78rpx;
+					background: $btn-confirm;
+				}
+			}
+			.label {
+				text-align: left;
+				font-size: $font-size-28;
+				color: $text-color;
+				line-height: 40rpx;
+				float: left;
+			}
+		}
+	}
+}
+.operator-main {
+	padding-top: 282rpx;
+	padding-bottom: 120rpx;
+}
+.list {
+	display: flex;
+	align-items: center;
+	width: 702rpx;
+	height: 92rpx;
+	padding: 24rpx;
+	background: #ffffff;
+	position: relative;
+	border-bottom: 1px solid #ebebeb;
+	.list-left {
+		display: flex;
+		flex: 4;
+		.list-head {
+			width: 92rpx;
+			height: 92rpx;
+			border-radius: 50%;
+			image {
+				width: 92rpx;
+				height: 92rpx;
+				border-radius: 50%;
+			}
+		}
+		.list-tel {
+			margin-left: 18rpx;
+			.txt {
+				display: flex;
+				flex: 1;
+				font-size: $font-size-28;
+				color: $text-color;
+				line-height: 46rpx;
+			}
+		}
+	}
+	.list-opea {
+		flex: 6;
+		.opea-type {
+			flex-direction: column;
+			align-items: center;
+			margin-left: 35rpx;
+			float: left;
+			.opea-type-cell {
+				width: 186rpx;
+				height: 64rpx;
+				padding: 0 16rpx;
+				border-radius: 32rpx;
+				border: 1px solid #dddddd;
+				line-height: 64rpx;
+				font-size: $font-size-24;
+				.icon-iconfontweixin {
+					margin-right: 8rpx;
+					font-size: $font-size-32;
+				}
+				&.none {
+					text-align: center;
+				}
+			}
+		}
+		.opea-del {
+			float: right;
+			flex-direction: column;
+			align-items: center;
+			.opea-type-cell {
+				width: 86rpx;
+				height: 64rpx;
+				padding: 0 24rpx;
+				border-radius: 32rpx;
+				border: 1px solid #dddddd;
+				line-height: 64rpx;
+				font-size: $font-size-24;
+				color: #ff0000;
+				.icon-shanchu {
+					font-size: $font-size-32;
+					margin-right: 6rpx;
+				}
+			}
+		}
+	}
+}
+.operator-model {
+	width: 100%;
+	height: 100%;
+	background: rgba(0, 0, 0, 0.1);
+	position: fixed;
+	top: 0;
+	left: 0;
+	bottom: 0;
+	right: 0;
+	margin: auto;
+	z-index: 1000;
+	.operator-alert {
+		width: 435rpx;
+		height: 360rpx;
+		padding: 68rpx 32rpx;
+		background: #ffffff;
+		border-radius: 14rpx;
+		position: absolute;
+		top: 0;
+		left: 0;
+		bottom: 0;
+		right: 0;
+		margin: auto;
+		z-index: 1001;
+		.icon-iconfontguanbi {
+			width: 68rpx;
+			height: 68rpx;
+			text-align: center;
+			line-height: 68rpx;
+			position: absolute;
+			right: 0;
+			top: 0;
+			font-size: $font-size-36;
+			color: #999999;
+		}
+		.content {
+			.ciew-t {
+				font-size: $font-size-28;
+				color: $text-color;
+				line-height: 48rpx;
+			}
+		}
+		.btn {
+			width: 100%;
+			height: 68rpx;
+			border-top: 1px solid #f7f7f7;
+			line-height: 68rpx;
+			font-size: $font-size-26;
+			text-align: center;
+			color: $color-system;
+			position: absolute;
+			bottom: 0;
+			left: 0;
+		}
+	}
+}
+.operator-btn {
+	position: fixed;
+	width: 100%;
+	height: 140rpx;
+	left: 0;
+	bottom: 0;
+	background: #ffffff;
+	z-index: 95;
+	display: flex;
+	align-items: center;
+	justify-content: center;
+	.add-btn {
+		width: 600rpx;
+		height: 88rpx;
+		font-size: $font-size-28;
+		line-height: 88rpx;
+		color: #ffffff;
+		text-align: center;
+		background: $btn-confirm;
+		border-radius: 44rpx;
+	}
+}
+.adds-btn {
+	width: 600rpx;
+	height: 88rpx;
+	font-size: 28rpx;
+	line-height: 88rpx;
+	color: #ffffff;
+	margin: 0 auto;
+	text-align: center;
+	background: #000000;
+	border-radius: 44rpx;
+}
+</style>