zhengjinyi 4 роки тому
батько
коміт
8b129673d1

+ 0 - 15
api/utils.js

@@ -37,21 +37,6 @@ export function queryProtocol() {
 		})
 	});
 }
-/**
- *获取图形验证码
- * platformType:小程序 2  WWW 0  CRM 1 
- */
-export function getImageCode() {
-	return new Promise(function(resolve,reject) {
-		request.get("/user/getImgVerifyCode",{platformType:2}, res => {
-			if(res.code == 0){
-				resolve(res);
-			}else{
-				reject(res)
-			}
-		})
-	});
-}
 /**
  *获取邮箱验证码
  */

+ 15 - 1
common/json/data.json.js

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

+ 109 - 27
components/cm-module/home/cm-custom.vue

@@ -1,14 +1,33 @@
 <template name="headerNavbar">
 	<!-- 自定义导航栏 -->
-	<view class='navbar-wrap' :style="{height:(CustomBar+55)+'px',paddingTop:StatusBar+'px'}"> 
+	<view class='navbar-wrap' :style="{height:(CustomBar+55)+'px',paddingTop:StatusBar+'px'}" @touchmove.stop.prevent="discard" @tap="hideBubble"> 		
 	  	<view class="navbar-text" 
 			  :style="{color:navbarData.textColor ? navbarData.textColor:'',lineHeight:(CustomBar - StatusBar)+'px;',fontSize:fontSizeSetting+'px;',paddingLeft:navbarData.textLeft ? '' : 12+'px'}" :class="platformClass">
 	    	  {{navbarData.title ? navbarData.title : " "}}
 	  	</view>
 		<view class="search-input">
+			<view class="search-tab">
+				<view class="search-tab-btn"  @click="topBubble">
+					<text>{{ tabValue }}</text>
+					<text class="iconfont icon-xiangxiajiantou"></text>
+				</view>
+				<tui-bubble-popup :show="show" :mask="true" position="absolute" direction="top" @close="topBubble" width="140rpx"
+				 left="10rpx" bottom="0rpx" translateY="100%" triangleRight="60rpx" triangleTop="-22rpx" :maskBgColor="maskBgColor">
+					<view class="tui-menu-item" @tap="selectTabs(1)">产品</view>
+					<view class="tui-menu-item" @tap="selectTabs(2)">供应商</view>
+					<view class="tui-menu-item" @tap="selectTabs(3)">项目仪器</view>
+				</tui-bubble-popup>
+			</view>
 			<view class="gosearch-btn" @click="this.$api.navigateTo(clickPath)">
 				<text class="iconfont icon-iconfonticonfontsousuo1"></text>
-				<text>{{hotSearchText}}</text>
+				<input class="input" type="text" v-model="SearchText" value="" placeholder="你想要的这里都有"/>
+			</view>
+			<view class="search-service">
+				<!-- #ifdef MP-WEIXIN -->
+				<button class="contact-btn" open-type="contact" @bindcontact="handleContact">
+					<text class="iconfont icon-liuyan"></text>
+				</button>	
+				<!-- #endif -->
 			</view>
 		</view>
 	</view>
@@ -25,12 +44,18 @@
 		props:{
 		    navbarData: { // 由父页面传递的数据
 				type: Object
-		    }
+		    },
+			maskBgColor: {//遮罩背景色
+				type: String,
+				default: 'transparent'
+			},
 		},
 		data() {
 			return{
+				show:false,
 				clickPath:'/pages/search/search',
-				hotSearchText:'你想要的这里都有',
+				SearchText:'',
+				tabValue:'产品',
 				CustomBar:this.CustomBar,// 顶部导航栏高度
 				StatusBar: this.StatusBar,
 				fontSizeSetting:this.fontSizeSetting,
@@ -50,17 +75,33 @@
 			
 		},
 		methods:{
-			BackPage: function () {
-				this.$emit('navigateBack')
-		    },
-			_goSearchPath:function () {
-				this.$emit('goSearchPath')
+			handleContact(e){
+				console.log(e.detail.path)
+				console.log(e.detail.query)
+			},
+			topBubble() {
+				this.show = !this.show;
+			},
+			selectTabs(index){
+				this.show = false
+				switch(index){
+					case 1:
+						this.tabValue='产品'
+						break;
+					case 2:
+						this.tabValue='供应商'
+						break;
+					case 3:
+						this.tabValue='项目仪器'
+						break;
+				}
+			},
+			hideBubble(){
+				this.shwo = false
+			},
+			discard(){
+				//丢弃
 			},
-			_goHome:function(){
-				uni.switchTab({
-		        	url: '/pages/tabBar/home/home'
-		      	})
-			}
 		},
 		onShow(){
 	
@@ -80,9 +121,10 @@
 		 border-bottom:none;
 	}
 	.navbar-text {
-		 font-size: 30rpx;
-		 color: #000000;
-		 font-weight: 500;
+		width: 100%;
+		font-size: 30rpx;
+		color: #000000;
+		font-weight: 500;
 	}
 	.navbar-text.center{
 		text-align: center;
@@ -118,31 +160,71 @@
 	.search-input{
 		width: 100%;
 		height: 70rpx;
-		padding: 20rpx 0 20rpx 0;
+		padding: 20rpx 0;
+		.search-tab{
+			width: 180rpx;
+			height: 70rpx;
+			line-height: 70rpx;
+			color: #FFFFFF;
+			font-size: $font-size-28;
+			text-align: center;
+			float: left;
+			position: relative;
+			.icon-xiangxiajiantou{
+				margin-left: 10rpx;
+			}
+		}
 		.gosearch-btn{
-			/* #ifndef APP-NVUE */
-			display: flex;
-			/* #endif */
-			flex: 1;
-			flex-direction: row;
-			justify-content: center;
-			align-items: center;
-			width: 662rpx;
+			width: 470rpx;
 			height: 100%;
+			float: left;
 			border-radius: 40rpx;
 			background: #F0F0F0;
 			margin: 0 auto;
 			padding:0 20rpx;
 			font-size: 28rpx;
 			line-height: 70rpx;
+			padding-left: 70rpx;
 			color: #8A8A8A;
 			background: #FFFFFF;
+			position: relative;
+			box-sizing: border-box;
 			.icon-iconfonticonfontsousuo1{
-				margin:0 6rpx;
+				width: 70rpx;
+				height: 70rpx;
+				line-height: 70rpx;
+				text-align: center;
+				display: block;
+				position: absolute;
+				left: 0;
+				top: 0;
 				font-size: 34rpx;
 				color: #8A8A8A;
 				z-index: 10;
 			}
+			.input{
+				width: 400rpx;
+				height: 100%;
+				float: left;
+			}
+		}
+		.search-service{
+			width: 100rpx;
+			height: 70rpx;
+			line-height: 70rpx;
+			float: right;
+			text-align: center;
+			color: #FFFFFF;
+			.contact-btn{
+				width: 100%;
+				height: 70rpx;
+				background-color: rgba(0,0,0,0);
+				line-height: 70rpx;
+				.icon-liuyan{
+					font-size: 64rpx;
+					color: #FFFFFF;
+				}
+			}
 		}
 	}
 </style>

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

@@ -14,6 +14,19 @@
 				</view>	  
 			</view>
 		</view>
+		<view class="swiper-banner-msg">
+			<view class="content">
+				<view class="item le">
+					<text class="iconfont icon-zhengpin"><text class="sm">正品保证</text></text>
+				</view>
+				<view class="item ce">
+					<text class="iconfont icon-jigou"><text class="sm">500+机构</text></text>
+				</view>
+				<view class="item ri">
+					<text class="iconfont icon-gongyingshang"><text class="sm">100+供应商</text></text>
+				</view>
+			</view>
+		</view>
 	</view>
 </template>
 
@@ -99,4 +112,43 @@
 			transition: all 0.4s;
 		}
 	}
+	.swiper-banner-msg{
+		width: 100%;
+		height: 54rpx;
+		box-sizing: border-box;
+		padding: 0 24rpx;
+		margin-top: 20rpx;
+		.content{
+			width: 100%;
+			height: 54rpx;
+			box-sizing: border-box;
+			padding: 0 34rpx;
+			background-color: #fff0e9;
+			border-radius: 16rpx;
+			.item{
+				width: 33.33%;
+				height: 54rpx;
+				line-height: 54rpx;
+				font-size: $font-size-24;
+				color: $color-system;
+				float: left;
+				&.le{
+					text-align: left;
+				}
+				&.ce{
+					text-align: center;
+				}
+				&.ri{
+					text-align: right;
+				}
+				.iconfont{
+					color: $color-system;
+					font-size: $font-size-34;
+					.sm{
+						font-size: $font-size-24;
+					}
+				}
+			}
+		}
+	}
 </style>

+ 22 - 94
components/cm-module/homeIndex/customer.vue

@@ -1,33 +1,14 @@
 <template name="headerNavbar">
 	<!-- 自定义导航栏 -->
-	<view class='navbar-wrap' :style="{height:(CustomBar+55)+'px',paddingTop:StatusBar+'px'}"> 		
+	<view class='navbar-wrap' :style="{height:(CustomBar+55)+'px',paddingTop:StatusBar+'px'}"> 
 	  	<view class="navbar-text" 
 			  :style="{color:navbarData.textColor ? navbarData.textColor:'',lineHeight:(CustomBar - StatusBar)+'px;',fontSize:fontSizeSetting+'px;',paddingLeft:navbarData.textLeft ? '' : 12+'px'}" :class="platformClass">
 	    	  {{navbarData.title ? navbarData.title : " "}}
 	  	</view>
 		<view class="search-input">
-			<view class="search-tab">
-				<view class="search-tab-btn"  @click="topBubble">
-					<text>{{ tabValue }}</text>
-					<text class="iconfont icon-xiangxiajiantou"></text>
-				</view>
-				<tui-bubble-popup :show="show" :mask="false" position="absolute" direction="top" @close="topBubble" width="140rpx"
-				 left="10rpx" bottom="0rpx" translateY="100%" triangleRight="60rpx" triangleTop="-22rpx">
-					<view class="tui-menu-item" @tap="selectTabs(1)">产品</view>
-					<view class="tui-menu-item" @tap="selectTabs(2)">供应商</view>
-					<view class="tui-menu-item" @tap="selectTabs(3)">项目仪器</view>
-				</tui-bubble-popup>
-			</view>
 			<view class="gosearch-btn" @click="this.$api.navigateTo(clickPath)">
 				<text class="iconfont icon-iconfonticonfontsousuo1"></text>
-				<input class="input" type="text" v-model="SearchText" value="" placeholder="你想要的这里都有"/>
-			</view>
-			<view class="search-service">
-				<!-- #ifdef MP-WEIXIN -->
-				<button class="contact-btn" open-type="contact" @bindcontact="handleContact">
-					<text class="iconfont icon-liuyan"></text>
-				</button>	
-				<!-- #endif -->
+				<text>{{hotSearchText}}</text>
 			</view>
 		</view>
 	</view>
@@ -48,10 +29,8 @@
 		},
 		data() {
 			return{
-				show:false,
 				clickPath:'/pages/search/search',
-				SearchText:'',
-				tabValue:'产品',
+				hotSearchText:'你想要的这里都有',
 				CustomBar:this.CustomBar,// 顶部导航栏高度
 				StatusBar: this.StatusBar,
 				fontSizeSetting:this.fontSizeSetting,
@@ -71,26 +50,16 @@
 			
 		},
 		methods:{
-			handleContact(e){
-				console.log(e.detail.path)
-				console.log(e.detail.query)
-			},
-			topBubble() {
-				this.show = !this.show;
+			BackPage: function () {
+				this.$emit('navigateBack')
+		    },
+			_goSearchPath:function () {
+				this.$emit('goSearchPath')
 			},
-			selectTabs(index){
-				this.show = false
-				switch(index){
-					case 1:
-						this.tabValue='产品'
-						break;
-					case 2:
-						this.tabValue='供应商'
-						break;
-					case 3:
-						this.tabValue='项目仪器'
-						break;
-				}
+			_goHome:function(){
+				uni.switchTab({
+		        	url: '/pages/tabBar/home/home'
+		      	})
 			}
 		},
 		onShow(){
@@ -111,7 +80,6 @@
 		 border-bottom:none;
 	}
 	.navbar-text {
-		width: 476rpx;
 		 font-size: 30rpx;
 		 color: #000000;
 		 font-weight: 500;
@@ -150,71 +118,31 @@
 	.search-input{
 		width: 100%;
 		height: 70rpx;
-		padding: 20rpx 0;
-		.search-tab{
-			width: 180rpx;
-			height: 70rpx;
-			line-height: 70rpx;
-			color: #FFFFFF;
-			font-size: $font-size-28;
-			text-align: center;
-			float: left;
-			position: relative;
-			.icon-xiangxiajiantou{
-				margin-left: 10rpx;
-			}
-		}
+		padding: 20rpx 0 20rpx 0;
 		.gosearch-btn{
-			width: 470rpx;
+			/* #ifndef APP-NVUE */
+			display: flex;
+			/* #endif */
+			flex: 1;
+			flex-direction: row;
+			justify-content: center;
+			align-items: center;
+			width: 662rpx;
 			height: 100%;
-			float: left;
 			border-radius: 40rpx;
 			background: #F0F0F0;
 			margin: 0 auto;
 			padding:0 20rpx;
 			font-size: 28rpx;
 			line-height: 70rpx;
-			padding-left: 70rpx;
 			color: #8A8A8A;
 			background: #FFFFFF;
-			position: relative;
-			box-sizing: border-box;
 			.icon-iconfonticonfontsousuo1{
-				width: 70rpx;
-				height: 70rpx;
-				line-height: 70rpx;
-				text-align: center;
-				display: block;
-				position: absolute;
-				left: 0;
-				top: 0;
+				margin:0 6rpx;
 				font-size: 34rpx;
 				color: #8A8A8A;
 				z-index: 10;
 			}
-			.input{
-				width: 400rpx;
-				height: 100%;
-				float: left;
-			}
-		}
-		.search-service{
-			width: 100rpx;
-			height: 70rpx;
-			line-height: 70rpx;
-			float: right;
-			text-align: center;
-			color: #FFFFFF;
-			.contact-btn{
-				width: 100%;
-				height: 70rpx;
-				background-color: rgba(0,0,0,0);
-				line-height: 70rpx;
-				.icon-liuyan{
-					font-size: 64rpx;
-					color: #FFFFFF;
-				}
-			}
 		}
 	}
 </style>

+ 304 - 0
components/cm-module/homeIndex/hotProduct.vue

@@ -0,0 +1,304 @@
+<template name="hotProduct">
+	<view>
+		<view class="container clearfix">
+			<view class="title">推荐专区</view>
+			<view class="recommend-list">
+				<swiper class="tui-banner-swiper" :autoplay="false" :interval="5000" :duration="500" :circular="true" @change="swiperChange">
+					<swiper-item v-for="(product,index) in hotProductList" :key="index">
+						<view class="floor-item" v-for="(item, idx) in product" :key="idx" @click.stop="navToDetailPage(item.productID)">
+							<image class="tui-skeleton-fillet" :src="item.mainImage" mode="aspectFill"></image>
+							<view class="floor-item-content">
+								<view class="title tui-skeleton-rect">
+									<text class="mclap">{{item.name}}</text>
+								</view>
+								<view class="floor-item-act">
+									<template v-if="item.actStatus==1">
+										<view class="floor-tags" v-if="PromotionsFormat(item.promotions)">
+											{{item.promotions.name}}<text v-if="hasLogin && item.price1TextFlag != '1'">:¥{{item.price | NumFormat}}</text>
+										</view>
+										<view class="floor-tags" v-else>{{item.promotions.name}}</view>	
+									</template>
+									<template v-if="item.actStatus ==0  &&  item.ladderPriceFlag==1">
+										<view class="floor-tags">阶梯价格</view>	
+									</template>	
+								</view>
+								<view class="" v-if="hasLogin">
+									<view v-if="userIdentity == 4">
+										<view class="title-none" v-show="item.price1TextFlag == '1'">
+											<text class="p big">¥未公开价格</text>
+										</view>
+										<view class="title-none" v-show="item.price1TextFlag == '2'">
+											<text class="p big">¥价格仅会员可见</text>
+										</view>
+										<view class="price tui-skeleton-rect" v-show="item.price1TextFlag == '0'" :class="PromotionsFormat(item.promotions) ? 'none' : ''">
+											<text class="p sm">¥</text>
+											<text class="p big">{{ (PromotionsFormat(item.promotions) ? item.originalPrice : item.price ) | NumFormat}}</text>
+										</view>
+									</view>
+									<view v-else>
+										<view class="title-none" v-if="item.price1TextFlag == '1'">
+											<text class="p big">未公开价格</text>
+										</view>
+										<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.promotions) ? 'none' : ''">
+											<text class="p sm">¥</text>
+											<text class="p big">{{ (PromotionsFormat(item.promotions) ? item.originalPrice : item.price ) | NumFormat}}</text>
+										</view>
+									</view>
+								</view>
+								<view v-else class="no-price">
+									<view class="p-stars">
+										<text class="p-no">¥</text>
+										<uni-stars :stars="parseInt(item.price1Grade)" :fontSize="36" :widthInfo="180"></uni-stars>
+									</view>
+								</view>	
+							</view>
+						</view>
+					</swiper-item>
+				</swiper>
+				<view class="swiper__recommenddots-box" v-if="hotProductList.length > 1">
+					<view v-for="(item,idx) in hotProductList" 
+						  :key="idx" 
+						  :class="[idx===swiperCurrent?'swiper__dots-long':'none']" 
+						  :data-index="swiperCurrent" class="swiper__dots-item">
+					</view>	  
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import { mapState,mapMutations} from 'vuex';
+	export default{
+		name:"hotProduct",
+		props:{
+			list:{
+				type:Array
+			},
+			userIdentity:{
+				type:Number
+			}
+		},
+		data() {
+			return{
+				current:100,
+				swiperCurrent:0,
+				hotProductList:[],
+				pageSize:4,
+			}
+		},
+		filters: {
			NumFormat:function(text) {//处理金额
				return Number(text).toFixed(2);
			},
		},
+		created(){
+			this.initData(this.list)
+		},
+		computed: {
+			...mapState(['hasLogin','userInfo','isActivity'])
+		},
+		methods:{
+			initData(res){
+				if(res.length>0){
+					for (var i = 0, j = res.length; i < j; i += this.pageSize) {
+						this.hotProductList.push(res.slice(i, i + this.pageSize));
+					}
+				}
+				console.log(this.hotProductList)
+			},
+			PromotionsFormat(promo){//促销活动类型数据处理
+				if(promo!=null){
+					if(promo.type == 1 && promo.mode == 1){
+						return true
+					}else{
+						return false
+					}
+				}
+				return false
+			},
+			tabClick(index) {//轮播图切换
+				this.current = index;
+			},
+			swiperChange(e) {//轮播切换
+				const index = e.detail.current;
+				this.swiperCurrent = index;
+			},
+			navToDetailPage(id) {//跳转商品详情页
+				this.$api.navigateTo(`/pages/goods/product?id=${id}`)
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.container{
+		width: 100%;
+		height: auto;
+		box-sizing: border-box;
+		.title{
+			width: 100%;
+			height: 80rpx;
+			line-height: 80rpx;
+			text-align: left;
+			font-size: $font-size-34;
+			color: $text-color;
+			padding: 0 24rpx;
+			box-sizing: border-box;
+		}
+		.recommend-list{
+			width: 100%;
+			height: auto;
+			position: relative;
+			padding-bottom: 20rpx;
+			.tui-banner-swiper {
+				width: 702rpx;
+				margin: 0 auto;
+				background: #F7F7F7;
+				padding: 20rpx 24rpx;
+				height: 900rpx;
+				overflow: hidden;
+				transform: translateY(0);
+				.floor-item{
+					width: 341rpx;
+					height: 568rpx;
+					margin-right: 20rpx;
+					font-size: $font-size-24;
+					color: $text-color;
+					background: #FFFFFF;
+					line-height: 36rpx;
+					border-radius: 20rpx;
+					margin-bottom: 20rpx;
+					float: left;
+					box-sizing: border-box;
+					padding-bottom: 16rpx;
+					&:nth-child(2n){
+						margin-right: 0;
+					}
+					image{
+						width: 341rpx;
+						height: 341rpx;
+						border-radius: 20rpx 20rpx 0 0;
+						display: block;
+						margin-bottom: 20rpx;
+					}
+					.floor-item-content{
+						width: 311rpx;
+						padding: 0 15rpx;
+					}
+					.floor-item-act{
+						display: block;
+						width: 100%;
+						height: 68rpx;
+						text-align: center;
+						box-sizing: border-box;
+						padding: 16rpx 0;
+						margin-top: 8rpx;
+						.floor-tags{
+							float: left;
+							height: 36rpx;
+							border-radius: 4rpx;
+							background-color: rgba(225, 86, 22, 0.1);
+							line-height: 36rpx;
+							color: $color-system;
+							text-align: center;
+							display: inline-block;
+							padding:0 16rpx;
+							font-size: $font-size-20;
+						}
+					}
+					.title-none{
+						font-size: $font-size-26;
+						color: #FF2A2A;
+						line-height: 44rpx;
+						.btn{
+							display: inline-block;
+							float: right;
+							width: 112rpx;
+							height: 44rpx;
+							background: $btn-confirm;
+							line-height: 44rpx;
+							font-size: $font-size-24;
+							color: #FFFFFF;
+							text-align: center;
+							border-radius: 22rpx;
+							margin-top: 17rpx;
+						}
+					}
+					.title{
+						width: 100%;
+						height: 72rpx;
+						display: flex;
+						flex-direction: column;
+						.mclap{
+							width: 100%;
+							line-height: 36rpx;
+							text-overflow:ellipsis;
+							display: -webkit-box;
+							word-break: break-all;
+							-webkit-box-orient: vertical;
+							-webkit-line-clamp: 2;
+							overflow: hidden;
+							font-size: 26rpx;
+						}
+					}
+					.no-price{
+						height: 54rpx;
+						line-height: 54rpx;
+						display: flex;
+						box-sizing: border-box;
+						.p-no{
+							font-size: $font-size-30;
+							color: $text-color;
+							display: block;
+							float: left;
+						}
+						.p-stars{
+							width: 230rpx;
+							float: left;
+						}
+					}
+					.price{
+						color: #FF2A2A;
+						line-height: 44rpx;
+						&.none{
+							text-decoration: line-through;
+							color: #999999;
+						}
+						.sm{
+							font-size: $font-size-24;
+						}
+						.big{
+							font-size: $font-size-28;
+						}
+					}
+				}
+			}
+		}	
+		.swiper__recommenddots-box{
+			position: absolute;
+			bottom: -20rpx;
+			left: 0;
+			right: 0;
+			/* #ifndef APP-NVUE */
+			display: flex;
+			/* #endif */
+			flex: 1;
+			flex-direction: row;
+			justify-content: center;
+			align-items: center;
+			height: 60rpx;
+			background: #FFFFFF;
+			.swiper__dots-item{
+				width: 8rpx;
+				height: 8rpx;
+				border-radius: 100%;
+				margin-left: 6px;
+				background-color:rgba(0,0,0,.3);
+			}
+			.swiper__dots-long{
+				width: 32rpx;
+				height: 8rpx;
+				border-radius: 4rpx;
+				background-color: #000;
+				transition: all 0.4s;
+			}
+		}
+	}
+</style>

+ 0 - 1
components/cm-module/homeIndex/index.vue

@@ -1,7 +1,6 @@
 <template>
 	<view>
 		<view class="container-home tui-skeleton">
-			
 			<view class="cate-section clearfix">
 				<!-- 自定义分类导航栏 -->
 				<view class="tabbar clearfix">

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

@@ -0,0 +1,166 @@
+<template name="navbars">
+	<view>
+		<view class="navbars-content clearfix">
+			<view class="nav-item" v-for="(item,index) in navList" :key="index" @click="tabClick(index)">
+				<view class="icon">
+					<image class="icon-image" :src="item.icon" mode="widthFix"></image>
+					<image class="icon-new" src="../../../static/temp/icon-new.png" mode="widthFix" v-if="index === 7"></image>
+				</view>
+				<view class="name">{{ item.name }}</view>
+				<view class="nav-cell-main" v-if="index === current">
+					<view class="nav-cell" v-for="(cell,idx) in item.children" :key="idx">
+						<view class="icon">
+							<image class="icon-image" :src="cell.icon" mode="widthFix"></image>
+						</view>
+						<view class="name">{{ cell.name }}</view>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default{
+		name:"navbars",
+		props:{
+			list:{
+				type:Array
+			}
+		},
+		data() {
+			return{
+				current:100,
+				navList:[
+					{
+						name:'找产品',
+						icon:'https://admin-b.caimei365.com/userfiles/1/images/photo/2020/11/%E6%89%BE%E4%BA%A7%E5%93%81.png',
+						children:[
+							{name:'商品专题',icon:'https://admin-b.caimei365.com/userfiles/1/images/photo/2020/11/%E6%89%BE%E4%BA%A7%E5%93%81.png'},
+							{name:'导入液',icon:'https://admin-b.caimei365.com/userfiles/1/images/photo/2020/11/%E6%89%BE%E4%BB%AA%E5%99%A8.png'},
+							{name:'高端院用产品',icon:'https://admin-b.caimei365.com/userfiles/1/images/photo/2020/11/%E6%89%BE%E4%BB%AA%E5%99%A8.png'},
+							{name:'术后修护',icon:'https://admin-b.caimei365.com/userfiles/1/images/photo/2020/11/%E6%89%BE%E4%BB%AA%E5%99%A8.png'},
+							{name:'科学护肤品',icon:'https://admin-b.caimei365.com/userfiles/1/images/photo/2020/11/%E6%89%BE%E4%BB%AA%E5%99%A8.png'},
+						]
+					},
+					{name:'找仪器',icon:'https://admin-b.caimei365.com/userfiles/1/images/photo/2020/11/%E6%89%BE%E4%BB%AA%E5%99%A8.png'},
+					{name:'找项目',icon:'https://admin-b.caimei365.com/userfiles/1/images/photo/2020/11/%E6%89%BE%E9%A1%B9%E7%9B%AE.png'},
+					{name:'信息平台',icon:'https://admin-b.caimei365.com/userfiles/1/images/photo/2020/11/%E4%BF%A1%E6%81%AF%E5%B9%B3%E5%8F%B0.png'},
+					{name:'二手市场',icon:'https://admin-b.caimei365.com/userfiles/1/images/photo/2020/11/%E4%BA%8C%E6%89%8B%E5%B8%82%E5%9C%BA.png'},
+					{name:'正品联盟',icon:'https://admin-b.caimei365.com/userfiles/1/images/photo/2020/11/%E6%AD%A3%E5%93%81%E8%81%94%E7%9B%9F.png'},
+					{name:'品牌招商',icon:'https://admin-b.caimei365.com/userfiles/1/images/photo/2020/11/%E5%93%81%E7%89%8C%E6%8B%9B%E5%95%86.png'},
+					{name:'维修',icon:'https://admin-b.caimei365.com/userfiles/1/images/photo/2020/11/%E7%BB%B4%E4%BF%AE.png'},
+					
+				]
+			}
+		},
+		created(){
+			
+		},
+		computed: {
+	
+		},
+		methods:{
+			tabClick(index) {//轮播图切换
+				this.current = index;
+			},
+			
+		}
+	}
+</script>
+
+<style lang="scss">
+	.navbars-content{
+		width: 100%;
+		height: auto;
+		box-sizing: border-box;
+		padding: 0 24rpx;
+		margin-top: 30rpx;
+		.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: 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;
+			}
+			.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>

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

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

+ 19 - 93
components/cm-module/scrollTop/scrollTop.vue

@@ -2,32 +2,17 @@
 	<!-- 商品详情价格判断 -->
 	<view>
 		<view class="scrollTop">
-			<view class="icon msg" @click="onClickPhone">
-				<text class="iconfont icon-zixunrexian"></text>
+			<view class="icon msg">
+				<!-- #ifdef MP-WEIXIN -->
+				<button class="contact-btn" open-type="contact" @bindcontact="handleContact">
+					<text class="iconfont icon-zixunrexian"></text>
+				</button>	
+				<!-- #endif -->
 			</view>
 			<view class="icon top" @click="onPageScrollTop">
 				<text class="iconfont icon-zhiding"></text>
 			</view>
 		</view>
-		<view class="phone" v-show="isPhone">
-			<view class="content">
-				<view class="tel">
-					<view class="p">0755-22907771</view>
-					<view class="btn">
-						<tui-button margin="5rpx 0 5rpx 0" type="gradual" shape="circle" width="120rpx" height="50rpx" :size="24" @click="toTelPhone">点击咨询</tui-button>
-					</view>
-				</view>
-				<view class="tel">
-					<view class="p">153-3885-1365</view>
-					<view class="btn">
-						<tui-button margin="5rpx 0 5rpx 0" type="gradual" shape="circle" width="120rpx" height="50rpx" :size="24" @click="toPhone">点击咨询</tui-button>
-					</view>
-				</view>
-				<view class="txt">工作日</view>
-				<view class="txt">周一~周五/9:00-18:00</view>
-			</view>
-			<text class="iconfont icon-2guanbi" @click.stop="hideIsPhone"></text>
-		</view>
 	</view>
 </template>
 
@@ -54,21 +39,9 @@
 				    duration: 600
 				});
 			},
-			onClickPhone(){
-				this.isPhone = true
-			},
-			hideIsPhone(){
-				this.isPhone = false
-			},
-			toTelPhone(){
-				uni.makePhoneCall({
-				    phoneNumber:this.telPhone 
-				});
-			},
-			toPhone(){
-				uni.makePhoneCall({
-				    phoneNumber:this.mobilePhone 
-				});
+			handleContact(e){
+				console.log(e.detail.path)
+				console.log(e.detail.query)
 			},
 		},		
 	}
@@ -89,6 +62,16 @@
 			margin: 10rpx 0;
 			line-height: 80rpx;
 			text-align: center;
+			.contact-btn{
+				width: 80rpx;
+				height: 80rpx;
+				background-color: rgba(0,0,0,0);
+				line-height: 80rpx;
+				.iconfont{
+					font-size: $font-size-44;
+					color: #FFFFFF;
+				}
+			}
 			&.msg{
 				background-image: linear-gradient(0deg, #f28e31 0%, #e15616 100%);
 			}
@@ -101,63 +84,6 @@
 			}
 		}
 	}
-	.phone{
-		width: 100%;
-		height: 100%;
-		position: fixed;
-		right: 0;
-		top: 0;
-		background: rgba(0,0,0,0.4);
-		z-index: 999999;
-		.content{
-			width: 500rpx;
-			height: 704rpx;
-			position: absolute;
-			top: 0;
-			left: 0;
-			right: 0;
-			bottom: 0;
-			margin: auto;
-			background: url(https://admin-b.caimei365.com/userfiles/1/images/photo/2020/11/%E4%B8%8B%E8%BD%BD.jpg) no-repeat;
-			background-size: cover;
-			border-radius: 20rpx;
-			box-sizing: border-box;
-			padding: 220rpx 60rpx 0 60rpx;
-			.tel{
-				height: 60rpx;
-				line-height: 60rpx;
-				font-size: $font-size-28;
-				margin: 8rpx 0;
-				.p{
-					color: $color-system;
-					float: left;
-				}
-				.btn{
-					float: right;
-				}
-			}
-			.txt{
-				height: 60rpx;
-				line-height: 60rpx;
-				font-size: $font-size-28;
-				color: #666666;
-				text-align: center;
-			}
-		}
-		.icon-2guanbi{
-			width: 80rpx;
-			height: 80rpx;
-			text-align: center;
-			line-height: 80rpx;
-			font-size: 54rpx;
-			display: block;
-			position: absolute;
-			bottom: 18%;
-			left: 50%;
-			margin-left: -40rpx;
-			color: #FFFFFF;
-		}
-	}
 </style>
 
 

+ 1 - 1
components/uni-stars/uni-stars.vue

@@ -35,7 +35,7 @@
 			iconClass:{
 				// fontSize类型
 				type: String,
-				default:'icon-dkw_jine'
+				default:'icon-qian1'
 			},
 			iconColor:{
 				// fontSize类型

+ 14 - 3
pages.json

@@ -1,7 +1,7 @@
 {
 	"pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
 		{
-			"path": "pages/tabBar/home/index",
+			"path": "pages/tabBar/home/home",
 			"style": {
 				"navigationBarTitleText": "采美采购商城",
 				"enablePullDownRefresh":true,
@@ -222,9 +222,20 @@
 		},{
 			"path": "pages/login/register",
 			"style": {
-				"navigationBarTitleText": "注册",
+				"navigationBarTitleText": "机构注册",
 				"navigationStyle":"custom"
 			}
+		},{
+			"path": "pages/login/register-supplier",
+			"style": {
+				"navigationBarTitleText": "供应商注册",
+				"navigationStyle":"custom"
+			}
+		},{
+			"path": "pages/login/register-select",
+			"style": {
+				"navigationBarTitleText": "选择身份"
+			}
 		},{
 			"path": "pages/login/apply",
 			"style": {
@@ -568,7 +579,7 @@
 		"borderStyle": "black",
 		"backgroundColor": "#ffffff",
 		"list": [{
-				"pagePath": "pages/tabBar/home/index",
+				"pagePath": "pages/tabBar/home/home",
 				"iconPath": "static/icon-home@3x.png",
 				"selectedIconPath": "static/icon-home-active@3x.png",
 				"text": "商城"

+ 1 - 2
pages/login/apply.vue

@@ -208,7 +208,7 @@
 </template>
 
 <script>
-import { mapMutations } from 'vuex';
+	import { mapMutations } from 'vuex';
 	import mpvueCityPicker from '@/components/mpvue-citypicker/mpvueCityPicker.vue'
 	import { beautyList,mentuzCampNullList,medicaCampNullList } from '@/common/json/data.json.js' //本地数据
 	import { organizationUpdateModifyInfo , organizationRegister  } from "@/api/use.js"
@@ -519,7 +519,6 @@ import { mapMutations } from 'vuex';
 						}
 					}
 				})
-			
 			},
 			bindPickerChange2(e) {
 				this.typtIndex = e.target.value

+ 2 - 2
pages/login/bindOperator.vue

@@ -71,7 +71,7 @@
 	import authorize from '@/common/config/authorize.js' 
 	import wxLogin from "@/common/config/wxLogin.js"
 	import { userInfoLogin } from "@/api/use.js"
-	import { getImageCode, getbindOperatorCode } from "@/api/utils.js"
+	import { getbindOperatorCode } from "@/api/utils.js"
 	import { sellerBindingOperation } from "@/api/seller.js"
 	export default{
 		data() {
@@ -163,7 +163,7 @@
 				})	
 			},
 			getVerificationCode(){//图形验证
-				getImageCode().then(res => {
+				this.PublicService.GetImgVerifyCode().then(res => {
 					this.imageCodeUrl = res.data.baseImage
 					this.imageCodetoken = res.data.token
 				})

+ 2 - 2
pages/login/bindwechat.vue

@@ -71,7 +71,7 @@
 	import authorize from '@/common/config/authorize.js' 
 	import wxLogin from "@/common/config/wxLogin.js"
 	import { bindingWechat } from "@/api/use.js"
-	import { getImageCode, getbindWechatCode } from "@/api/utils.js"
+	import { getbindWechatCode } from "@/api/utils.js"
 	export default{
 		data() {
 			return{
@@ -121,7 +121,7 @@
 				this.bindingWechatLogin()
 			},
 			getVerificationCode(){//图形验证
-				getImageCode().then(res => {
+				this.PublicService.GetImgVerifyCode().then(res => {
 					this.imageCodeUrl = res.data.baseImage
 					this.imageCodetoken = res.data.token
 				})

+ 1 - 1
pages/login/login.vue

@@ -19,7 +19,7 @@
 				<view class="iconfont" :class="isShowEye ? iconEyen : iconEyes"  @click="passwordClick"></view>
 			</view>
 			<view class="login-input link">
-				<view class="login-reg" @click.stop="this.$api.navigateTo('/pages/login/register')">免费注册</view>
+				<view class="login-reg" @click.stop="this.$api.navigateTo('/pages/login/register-select')">免费注册</view>
 				<view class="login-pwd" @click.stop="this.$api.navigateTo('/pages/login/password')">忘记密码?</view>
 			</view>
 		</view>

+ 1 - 1
pages/login/logincode.vue

@@ -13,7 +13,7 @@
 				   placeholder="请输入邀请码"
 			/>
 		</view>
-		<view class="login-row" @click.stop="this.$api.navigateTo('/pages/login/register')"><text>免费注册</text></view>
+		<view class="login-row" @click.stop="this.$api.navigateTo('/pages/login/register-select')"><text>免费注册</text></view>
 		<view class="login-btn"  @click.stop="goLogin">登录</view>
 		<view class="login-btn-last" @click.stop="this.$api.navigateTo('/pages/login/login')">账号登录</view>
 	</view>

+ 2 - 2
pages/login/password.vue

@@ -109,7 +109,7 @@
 <script>
 	import authorize from '@/common/config/authorize.js' 
 	import { mobilePassword , emailPassword } from "@/api/use.js"
-	import { getImageCode, getEmailCode, getMobileCode } from "@/api/utils.js"
+	import { getEmailCode, getMobileCode } from "@/api/utils.js"
 	
 	export default{
 		data() {
@@ -179,7 +179,7 @@
 				})
 			},
 			getVerificationCode(){//图形验证
-				getImageCode().then(res => {
+				this.PublicService.GetImgVerifyCode().then(res => {
 					this.imageCodeUrl = res.data.baseImage
 					this.imageCodetoken = res.data.token
 				})

+ 99 - 0
pages/login/register-select.vue

@@ -0,0 +1,99 @@
+
+<template>
+	<view class="container register">
+		<view class="main">
+			<view class="title">请选择注册的账号类型</view>
+			<view class="main-item">
+				<view class="item" @click.stop="this.$api.navigateTo('/pages/login/register')">
+					<view class="icon"><image src="https://admin-b.caimei365.com/userfiles/1/images/photo/2020/11/%E6%9C%BA%E6%9E%84.png" mode=""></image></view>
+					<view class="text">机构</view>
+				</view>
+				<view class="item" @click.stop="this.$api.navigateTo('/pages/login/register-supplier')">
+					<view class="icon"><image src="https://admin-b.caimei365.com/userfiles/1/images/photo/2020/11/%E4%BE%9B%E5%BA%94%E5%95%86.png" mode=""></image></view>
+					<view class="text">供应商</view>
+				</view>
+			</view>
+		</view>
+		<image class="bg_image" src="https://admin-b.caimei365.com/userfiles/1/images/photo/2020/11/%E8%83%8C%E6%99%AF.png" mode=""></image>
+	</view>
+</template>
+
+<script>
+	export default{
+		data() {
+			return{
+				
+			}
+		},
+		onLoad(option) {
+
+		},
+		computed: {
+			
+		},
+		methods:{
+			
+		}
+	}
+</script>
+
+<style lang="scss">
+	.register{
+		width: 100%;
+		height: 100%;
+		position: relative;
+		box-sizing: border-box;
+		padding-top: 300rpx;
+		.main{
+			width: 100%;
+			height: 370rpx;
+		
+			.title{
+				width: 100%;
+				height: 46rpx;
+				line-height: 46rpx;
+				float: left;
+				text-align: center;
+				font-size: $font-size-32;
+				color: $text-color;
+				font-weight: bold;
+			}
+			.main-item{
+				width: 100%;
+				height: 324rpx;
+				float: left;
+				box-sizing: border-box;
+				padding: 0 89rpx;
+				margin-top: 70rpx;
+				.item{
+					width: 186rpx;
+					height: auto;
+					margin: 0 50rpx;
+					float: left;
+					.icon{
+						width: 186rpx;
+						height: 186rpx;
+						image{
+							width: 186rpx;
+							height: 186rpx;
+							display: block;
+						}
+					}
+					.text{
+						line-height: 54rpx;
+						font-size: $font-size-30;
+						text-align: center;
+						color: #3b77ff;
+					}
+				}
+			}
+		}
+		.bg_image{
+			position: absolute;
+			width: 100%;
+			height:354rpx;
+			left: 0;
+			bottom: 0;
+		}
+	}
+</style>

+ 988 - 0
pages/login/register-supplier.vue

@@ -0,0 +1,988 @@
+<template>
+	<view class="container register" :style="{paddingTop:CustomBar+'px'}" v-if="isWxAuthorize">
+		<cu-custom :navbar-data='nvabarData'  @navigateBack="hanldNavigateBack"></cu-custom>
+		<view class="register-step">
+			<view class="step-item" :class="stepIndex == 0 ? 'active' : ''">
+				<text class="step-num">1</text><text>账户信息</text>
+				<text class="line"></text>
+			</view>
+			<view class="step-item" :class="stepIndex == 1 ? 'active' : ''">
+				<text class="step-num">2</text><text>基本信息</text>
+				<text class="line"></text>
+			</view>
+			<view class="step-item" :class="stepIndex == 2 ? 'active' : ''">
+				<text class="step-num">3</text><text>详细信息</text>
+			</view>
+		</view>
+		<view class="register-main clearfix" v-if="stepIndex === 0">
+			<view class="register-row clearfix">
+				<view class="register-from">
+					<view class="label">手机号:</view>
+					<input class="row-input" type="number" name="input" v-model="bindMobile" placeholder="请输入联系人常用手机号" maxlength="11"/>
+				</view>
+			</view>
+			<view class="register-row clearfix">
+				<view class="register-from">
+					<input type="text" 
+						   v-model="imageCode"  
+						   maxlength="4" 
+						   class="row-input imgCode" 
+						   placeholder="请输入右侧图形验证码"
+					/>
+					<view class="vscodeimg">
+						<image :src="imageCodeUrl" mode=""></image>
+					</view>
+					<view class="vscod-refresh"  @click.stop="getVerificationCode">
+						<text class="iconfont icon-shuaxin"></text>
+						<text class="ref-text">刷新</text>
+					</view>
+				</view>
+			</view>	
+			<view class="register-row clearfix">
+				<view class="register-from">
+					<view class="label">短信验证码:</view>
+					<input class="row-input code" type="text" v-model="mobileCode" placeholder="请输入短信验证码" maxlength="6"/>
+					<view class="row-btn" :class="[isMobileDisabled  ? 'disabled' : '']">
+						<button class="row-input"
+								type="button" 
+								@click.stop="getMobileCodeFn" 
+								:disabled="isMobileDisabled">
+								{{ mobileCodeText }}
+						</button>
+					</view>
+				</view>
+			</view>
+			<view class="register-row clearfix">
+				<view class="register-from">
+					<view class="label">登录密码:</view>
+					<input class="row-input" type="password" name="input" v-model="password" placeholder="密码必须为8-16位字母数字组合" maxlength="16"/>
+				</view>
+			</view>
+			<view class="register-row clearfix">
+				<view class="register-from">
+					<view class="label">确认密码:</view>
+					<input class="row-input" type="password" name="input" v-model="passwordCheck" placeholder="请确认密码" maxlength="16"/>
+				</view>
+			</view>
+			<view class="register-row ">
+				<view class="register-btn" @click.stop="setStep(1)">下一步</view>
+			</view>
+		</view>	
+		
+		<view class="register-main clearfix" v-if="stepIndex === 1">
+			<view class="register-row clearfix">
+				<view class="register-from">
+					<view class="label">公司名称:</view>
+					<input class="row-input" type="text" name="input" v-model="userName" placeholder="请输入您的公司名称" maxlength="30"/>
+				</view>
+			</view>
+			<view class="register-row clearfix">
+				<view class="register-from">
+					<view class="label">联系人:</view>
+					<input class="row-input" type="text" name="input" v-model="userName" placeholder="请输入联系人姓名" maxlength="6"/>
+				</view>
+			</view>
+			<view class="register-row none clearfix">
+				<view class="register-from">
+					<view class="label">联系人:</view>
+					<input class="row-input" type="text" name="input" v-model="userName" placeholder="请输入邮箱地址" maxlength="30"/>
+				</view>
+			</view>
+			<view class="register-row text clearfix">
+				<text>邮箱可用作登录账号,请使用公司邮箱或法人邮箱</text>
+			</view>	
+			<view class="register-row ">
+				<view class="register-btn next" @click.stop="setStep(2)">下一步</view>
+				<view class="register-btn prev" @click.stop="setStep(0)">上一步</view>
+			</view>
+		</view>
+		<view class="register-main clearfix" v-if="stepIndex === 2">
+			<view class="register-row clearfix">
+				<view class="register-from">
+					<view class="label">公司简称:</view>
+					<input class="row-input" type="text" v-model="abbreviation" placeholder="请输入您的机构简称" maxlength="10"/>
+				</view>
+			</view>
+			<view class="register-row clearfix">
+				<view class="register-from"  @click="showMulLinkageThreePicker">
+					<view class="label">联系地址:</view>
+					<text class="row-input" :class="addressData.address === '请选择公司所在地区' ? 'none' : ''">
+						{{addressData.address }}
+					</text>		
+					<text class="iconfont icon-xiayibu"></text>
+				</view>
+			</view>
+			<view class="register-row text-textarea clearfix">
+				<view class="textarea show" v-if="isShowInput" @click="showTextareaFocus">{{addressData.addressDetail ? addressData.addressDetail :'详细地址:如道路、门牌号、小区等'}}</view>
+				<textarea 	v-else
+							class="textarea" 
+							type="text" 
+							v-model="addressData.addressDetail" 
+							placeholder="详细地址:如道路、门牌号、小区等" 
+							placeholder-class="placeholder"
+							maxlength="25"
+							@input="onTextareaInput"
+							@focus="textareaFocus"
+							@blur="hideTextareaFocus"
+							:class="isShowInput ? '':''"
+				/>
+			</view>
+			<view class="register-row clearfix">
+				<view class="register-from">
+					<view class="label">营业执照编号:</view>
+					<input class="row-input" type="text" v-model="socialCreditCode" placeholder="请填写社会统一信用代码" maxlength="20"/>
+				</view>
+			</view>
+			<view class="register-row clearfix">
+				<view class="register-picture">
+					<view class="label">营业执照:</view>
+					<view class="upload-picture">
+						<view class="upload-none" v-if="uploadBusinessImage === ''"  @click="chooseBusinessImage"><text class="iconfont icon-jiahao"></text></view>
+						<view class="upload-image" v-else>
+							<image :src="uploadBusinessImage" mode="" @click="viewBusinessImage"></image>
+							<view class="upload-del" @click="delBusinessImage">
+								<text class='iconfont icon-shanchu1'></text>
+							</view>
+						</view>
+					</view>
+				</view>
+			</view>
+			<view class="register-row clearfix">
+				<view class="register-from picker">
+					<view class="label">公司类型:</view>
+					<view class="row-input picker" @click="bindPickerChange">{{ organizationTypeText }}</view>
+					<text class="iconfont icon-xiayibu"></text>
+				</view>
+			</view>
+			<view class="register-row none clearfix">
+				<view class="register-from radio">
+					<view class="label">医疗类型:</view>
+				</view>
+			</view>
+			<view class="register-row clearfix">
+				<view class="register-from radio">
+					<radio-group @change="radioChange">
+						<label class="row-input" v-for="(item, index) in supplierList" :key="item.value">
+							<radio class="row-radio" :value="item.value" :checked="index === current" color="#E15616"/>
+							<view class="row-text">{{item.name}}</view>
+						</label>
+					</radio-group>
+				</view>
+			</view>
+			<view class="register-row clearfix">
+				<view class="register-from group">
+					<view class="label">主营内容:</view>
+					<view class="content-class">
+						<checkbox-group @change="chooseMaleLike" >
+							<label class="item" v-for="(item, index) in supplierMedicaCampList" :key="index" :class="{on: item.checked}">
+							   <checkbox :value="item.value"></checkbox>
+							   <text class="item-text">{{item.name}}</text>
+							</label>
+						</checkbox-group>
+					</view>	
+				</view>	
+				<view class="register-from group btn">
+					<view class="content-class btn">
+						<view class="item" @click="showAustomItem">
+							<text class="item-text">其他</text>
+						</view>
+					</view>
+				</view>
+				<view class="register-from group btn" v-show="isShowAustomItem">
+					<view class="content-class btn">
+						<input class="row-input other" type="text" v-model="customItemValue" placeholder="请输入自定义项目"  @blur="onBlurInput" maxlength="5"/>
+						<button type="default" 
+								class="confirm-btn" 
+								:class="[isDisabled === true ? 'disabled' : 'none']" 
+								:disabled="isDisabled"
+								@click.stop="addCustomItem"
+						>确认添加</button>
+					</view>
+				</view>
+			</view>
+			<view class="register-main clearfix">
+				<view class="register-agree">
+					<view class="agree-text"  @tap.stop="agreeCheck()">
+						<button class="checkbox iconfont" :class="[isCheck?'icon-gouxuan':'icon-weigouxuan']"></button> 
+						我已阅读并同意
+						<text @click.stop="this.$api.navigateTo('/pages/service/organagree')">《供应商协议》</text>
+						<text @click.stop="this.$api.navigateTo('/pages/service/useragree')">《用户协议》</text>及
+						<text @click.stop="this.$api.navigateTo('/pages/service/privacyagree')">《隐私权政策》</text>
+					</view>
+				</view>
+				<view class="register-row ">
+					<view class="register-btn sub" @click.stop="registerStepsfirst">注册</view>
+					<view class="register-btn prev" @click.stop="setStep(1)">上一步</view>
+				</view>
+			</view>
+		</view>
+		<mpvue-city-picker :themeColor="themeColor"
+							ref="mpvueCityPicker" 
+						    :pickerValueDefault="cityPickerValueDefault"
+							@onCancel="onCancel" 
+							@onConfirm="onConfirm">
+		</mpvue-city-picker>
+		<supplier-alert v-if="isSupplierAlert"></supplier-alert>
+	</view>
+</template>
+
+<script>
+	import { mapState,mapMutations } from 'vuex';
+	import authorize from '@/common/config/authorize.js'
+	import wxLogin from "@/common/config/wxLogin.js"
+	import mpvueCityPicker from '@/components/mpvue-citypicker/mpvueCityPicker.vue'
+	import supplierAlert from '@/components/cm-module/modelAlert/supplierRegisreAlert.vue'
+	import { supplierList,supplierMedicaCampNullList } from '@/common/json/data.json.js' //本地数据
+	import { organizationVerifyRegisterFirst,organizationRegister ,organizationLogin } from "@/api/use.js"
+	import { getRegisterMobileCode, uploadFileImage } from "@/api/utils.js"
+	export default{
+		components:{
+			mpvueCityPicker,
+			supplierAlert
+		},
+		data() {
+			return{
+				nvabarData: {//顶部自定义导航
+					showCapsule: 1, // 是否显示左上角图标  1表示显示  0表示不显示,
+					showSearch: 0,
+					title: '供应商注册', // 导航栏 中间的标题
+					haveBack:true,
+					textLeft:this.$store.state.isIphone
+				},
+				CustomBar:this.CustomBar,// 顶部导航栏高度
+				isMobileDisabled: false,	//手机验证码按钮控制
+			    mobilCount: '',				//倒计时
+			    mobileCodeText: '获取验证码',
+			    mobilTime: null,
+				password:'',			//密码
+				passwordCheck:'',		//校验密码
+				userName:'',	 		//联系人
+				bindMobile:'',		//联系人手机号
+				mobileCode:'',			//手机验证码
+				imageCode:'',			//图形验证码
+				imageCodeUrl:'',		//图形验证码图片
+				imageCodetoken:'',		//图形验证校验
+				isAgreed:0,				//是否勾选协议
+				isCheck:false,			//是否勾选协议
+				userID:'',		//机构userID
+				clubID:'',		//机构ID
+				stepIndex:0,
+				abbreviation:'',	 	//机构简称
+				socialCreditCode:'',	//统一社会信用代码
+				isDisabled:true,
+				isShowInput:true,
+				textareaFocus:false,
+				uploadBusinessImage:'',	//营业执照图片
+				uploadMentuzImage:'',  	//门头照图片
+				uploadMedicalImage:'', 	//资质照图片
+				department:'',			//科室
+				isDepartment:false,     //是否显示科室
+				secondClubType:'',		//机构类型二级分类
+				mainpro:'',				//主营内容
+				firstClubType:'',		//机构类型
+				isOrganizationType:0,
+				organizationTypeText:'请选择机构类型',
+				supplierList:supplierList,//医疗类型
+				supplierMedicaCampList:supplierMedicaCampNullList,//主营内容
+				mentuzCampList:[],		//医美主营
+				typtIndex:0,
+				organizationType:0,
+				current:0,
+				isShowAustomItem:false, //是否显示其他添加
+				customItemValue:'', 	//自定义项目
+				isMainproCheck:false,
+				addressData:{
+					address:'请选择机构所在地区',
+					townID:'',			//区ID
+					cityID:'',			//市ID
+					provinceID:'',		//省ID
+					addressDetail: '',	//地址详情
+				},
+				isSupplierAlert:true
+			}
+		},
+		onLoad() {
+			this.getVerificationCode();
+		},
+		computed:{
+			...mapState(['isWxAuthorize'])
+		},
+		methods:{
+			...mapMutations(['login']),
+			hanldNavigateBack(){
+				this.$util.modal('','注册尚未完成,确定放弃注册吗?','确定','取消',true,() =>{
+					uni.navigateBack({
+						delta: 1
+					});
+				})
+			},
+			// 三级联动选择
+			showMulLinkageThreePicker() {
+				this.isShowInput = true
+				this.$refs.mpvueCityPicker.show()
+			},
+			registerStepsfirst(){
+				
+			},
+			getMobileCodeFn(){
+				if( this.bindMobile == ''){
+					this.$util.msg('请输入手机号',2000);
+					return
+				}
+				if(!this.$reg.isMobile(this.bindMobile)){
+					this.$util.msg('请输入正确的手机号',2000);
+					return
+				}
+				let params = {
+						mobile:this.bindMobile,
+						activateCodeType:2,
+						platformType:2
+					}
+				this.isMobileDisabled = true;
+				getRegisterMobileCode(params).then(response =>{
+					this.$util.msg('验证短信已发送',2000);
+					const TIME_COUNT = 60;
+			     	if (!this.mobilTime) {
+			       		this.mobilCount = TIME_COUNT;
+			       		this.isMobileDisabled = true;
+			       		this.mobilTime = setInterval(() => {
+			       			if (this.mobilCount > 1 && this.mobilCount <= TIME_COUNT) {
+			         			this.mobilCount--
+			         			this.mobileCodeText = this.mobilCount +'s重新发送'
+			        		} else {
+				         		this.isMobileDisabled = false;
+				         		clearInterval(this.mobilTime)
+				         		this.mobilTime = null
+								this.mobileCodeText = '获取验证码'
+			        		}
+			       		},1000)
+			      	}
+				}).catch( error =>{
+					this.$util.msg(error.msg,2000);
+					this.isMobileDisabled = false;
+				})
+			},
+			bindPickerChange() {
+				let self = this
+				uni.showActionSheet({
+					title:'标题',
+					itemList: ['医疗', '非医疗'],
+					success: (e) => {
+						self.isOrganizationType = e.tapIndex+1
+						switch(e.tapIndex){
+							case 0:
+								this.organizationTypeText = '医疗'
+								break;
+							case 1:
+								this.organizationTypeText = '非医疗'
+								break;
+						}
+					}
+				})
+			},
+			setStep(index){
+				this.stepIndex = index
+			},
+			chooseMaleLike(e){
+				this.isMainproCheck = true
+				this.mainpro = this.checkLikes(e,this.supplierMedicaCampList)
+			},
+			checkLikes(e,list){
+				let	values = e.detail.value
+				let arr = []
+				list.forEach(item => {
+					if(values.indexOf(item.value) >= 0){
+						this.$set(item,'checked',true)
+						arr.push(item.name)
+					}else{
+						this.$set(item,'checked',false)
+					}
+				})
+				return arr.join('/')
+			},
+			getVerificationCode(){//图形验证
+				this.PublicService.GetImgVerifyCode().then(res => {
+					this.imageCodeUrl = res.data.baseImage
+					this.imageCodetoken = res.data.token
+				})
+			},
+			showAustomItem() {
+				this.isShowAustomItem = !this.isShowAustomItem
+			},
+			onBlurInput(e){//
+				if(e.detail.value ===''){
+					this.isDisabled = true
+				}else{
+					this.isDisabled = false
+				}
+			},
+			agreeCheck() {
+				this.isCheck = !this.isCheck
+				if(this.isCheck){
+					this.isAgreed = 1
+				}else{
+					this.isAgreed = 0
+				}
+			}
+		},
+		onShow() {
+			authorize.getSetting().then(wxResponse =>{// console.log('是否已授权',res);//0:为取消授权 1:为已授权 2:为未操作
+				if(wxResponse == 1){
+					wxLogin.wxLoginQuick()
+				}else{
+					this.$api.navigateTo('/pages/authorization/authorization?type=0')
+				}	
+			})
+		}
+	}
+</script>
+
+<style lang="scss">
+	.register{
+		width: 100%;
+		height: 100%;
+		box-sizing: border-box;
+		.register-step{
+			margin:80rpx 0;
+			width: 100%;
+			height: 44rpx;
+			box-sizing: border-box;
+			padding: 0 90rpx;
+			.step-item{
+				line-height: 44rpx;
+				color: #B2B2B2;
+				font-size: $font-size-24;
+				float: left;
+				margin-right: 60rpx;
+				position: relative;
+				&.active{
+					color: $color-system;
+					.step-num{
+						background-color: $color-system;
+					}
+					.line{
+						background-color: $color-system;
+					}
+				}
+				&:last-child{
+					margin-right: 0;
+				}
+				.step-num{
+					display: inline-block;
+					width: 40rpx;
+					height: 40rpx;
+					border-radius: 50%;
+					background-color:#e1e1e1;
+					color: #FFFFFF;
+					line-height: 40rpx;
+					text-align: center;
+					margin-right: 10rpx;
+				}
+				.line{
+					width: 60rpx;
+					height: 2rpx;
+					background-color: #B2B2B2;
+					position: absolute;
+					right:-60rpx;
+					top: 50%;
+				}
+			}
+		}
+		.register-main{
+			width: 100%;
+			height: auto;
+			position: relative;
+			.register-consult{
+				width: 110rpx;
+				height: 68rpx;
+				background:linear-gradient(223deg,rgba(225,86,21,0.6) 0%,rgba(225,86,10,0.3) 100%);
+				border-radius: 34rpx 0 0 34rpx;
+				position: absolute;
+				right: 0;
+				bottom: 120rpx;
+				text-align: left;
+				line-height: 68rpx;
+				padding-left: 20rpx;
+				.icon-kefunv{
+					font-size: 48rpx;
+					color: #31313B;
+					float: left;
+				}
+				.text{
+					font-size: $font-size-24;
+					display: block;
+					float: left;
+					width: 60rpx;
+					line-height: 30rpx;
+					color: #FFFFFF;
+					margin-top: 6rpx;
+				}
+			}
+			.register-agree{
+				display: flex;
+				flex-direction: column;
+				align-items: center;
+				margin: 100rpx 0 20rpx 0;
+				.agree-text{
+					.checkbox{
+						float: left;
+						margin: 4rpx 6rpx 0 0;
+						color: #999999;
+						font-size: $font-size-34;
+						&.icon-gouxuan{
+							color: $color-system;
+						}
+					}
+					font-size: $font-size-22;
+					line-height: 44rpx;
+					color: #999999;
+					text{
+						color:#1890f9;
+					}
+				}
+			}
+			.register-logo{
+				width: 100%;
+				display: flex;
+				flex-direction: column;
+				align-items: center;
+				height: 189rpx;
+				padding:60rpx 0 40rpx 0;
+				.logo{
+					width:467rpx;
+					height: 189rpx;
+					display: block;
+				}
+			}
+			&.detailed{
+				padding-bottom: 330rpx;
+			}			
+			.register-row{
+				width: 100%;
+				height: auto;
+				padding: 0 24rpx;
+				margin-bottom: 30rpx;
+				box-sizing: border-box;
+				&.text{
+					font-size: $font-size-20;
+					line-height: 40rpx;
+					color: #fea785;
+				}
+				&.none{
+					margin-bottom: 0;
+				}
+				&.login{
+					display: flex;
+				}
+				.register-text{
+					line-height: 44rpx;
+					margin-top: 100rpx;
+					font-size: $font-size-24;
+					color: #999999;
+					text-align: justify;
+					.txt{
+						margin-right: 15rpx;
+					}
+				}
+				.register-title{
+					line-height: 44rpx;
+					font-size: $font-size-24;
+					color: $text-color;
+					text-align: left;
+					&.first{
+						margin-top: 20rpx;
+					}
+				}
+				.register-tip{
+					line-height: 64rpx;
+					font-size: $font-size-24;
+					color: #CECECE;
+					text-align: left;
+				}
+				.register-from{
+					width: 100%;
+					height: 80rpx;
+					background: #FFFFFF;
+					position: relative;
+					border-bottom: 1px solid #e1e1e1;
+					.label{
+						text-align: left;
+						font-size: $font-size-28;
+						color:#666666;
+						line-height: 80rpx;
+						float: left;
+					}
+					.row-input{
+						width: 440rpx;
+						padding-left:10rpx;
+						font-size: $font-size-28;
+						color: $text-color;
+						line-height: 80rpx;
+						float: left;
+						height: 80rpx;
+						&.none{
+							color: #999999;
+						}
+						&.picker{
+							text-align: left;
+							color: #333333;
+						}
+						&.keshi{
+							width: 550rpx;
+						}
+						&.code{
+							width: 350rpx;
+						}
+						&.imgCode{
+							width: 390rpx;
+						}
+					}
+					.vscodeimg{
+						width: 160rpx;
+						height: 80;
+						float: left;
+						display: flex;
+						flex-direction: column;
+						align-items: center;
+						border-radius: 6rpx;
+						margin: 0 10rpx;
+						image{
+							width: 150rpx;
+							height: 68rpx;
+							border-radius: 6rpx;
+						}
+					}
+					.vscod-refresh{
+						width: 120rpx;
+						float: right;
+						line-height: 80rpx;
+						.ref-text{
+							float: left;
+							font-size: 26rpx;
+							color: #999999;
+						}
+						.icon-shuaxin{
+							float: left;
+							font-size: 36rpx;
+							color: #999999;
+							margin-right: 10rpx;
+						}
+					}
+					&.imgcode{
+						width: 410rpx;
+						float: left;
+						margin-right: 20rpx;
+						.row-input{
+							width: 230rpx;
+						}
+					}
+					.row-btn{
+						width: 180rpx;
+						height:64rpx;
+						float: left;
+						background: $btn-confirm;
+						padding: 0;
+						border-radius: 32rpx;
+						.row-input{
+							width: 180rpx;
+							height: 64rpx;
+							line-height: 64rpx;
+							padding: 0;
+							color: #FFFFFF;
+							background: $btn-confirm;
+							text-align: center;
+							border-radius: 32rpx;
+							font-size: $font-size-24;
+							&.other{
+								width: 180rpx;
+								background: #F7F7F7;
+								margin-right: 20rpx;
+							}
+							&.none{
+								background: #F7F7F7;
+							}
+						}
+						&.disabled{
+							background: #F7F7F7;
+							.row-input{
+								background: #F7F7F7;
+								color: #999999;
+							}
+						}
+					}
+					&.picker{
+						width: 100%;
+						height: 80rpx;
+						line-height: 80rpx;
+						.label{
+							line-height: 80rpx;
+						}
+						.row-input{
+							width: 470rpx;
+							height: 80rpx;
+							line-height: 80rpx;
+							padding-left: 30rpx;
+						}
+					}
+					&.radio{
+						width: 100%;
+						border-bottom: none;
+						.row-input{
+							width: 25%;
+							height: 80rpx;
+							line-height: 80rpx;
+							padding-left: 0;
+						}
+						.row-radio{
+							float: left;
+							transform: scale(0.8);
+						}
+						.row-text{
+							text-align: center;
+							float: left;
+							font-size: $font-size-24;
+						}
+					}
+					&.group{
+						width: 100%;
+						height: auto;
+						background: #FFFFFF;
+						margin-top: 30rpx;
+						border-bottom: none;
+						.label{
+							line-height: 76rpx;
+						}
+						.row-input{
+							width: 100%;
+							height: 80rpx;
+							line-height: 80rpx;
+							padding-left: 0;
+						}
+						.row-radio{
+							float: left;
+						}
+						.row-text{
+							width: 100rpx;
+							text-align: center;
+							float: left;
+						}
+					}
+					&.btn{
+						margin-top: 0;
+					}
+					.content-class {
+						margin: 20rpx auto;
+						display: flex;
+						flex-flow: row wrap;
+						justify-content: space-between;
+						align-items: center;
+						&.btn{
+							margin: 0 auto;
+							margin-left: 116rpx;
+						}
+						.row-input{
+							display: flex;
+							width: 330rpx;
+							box-sizing: border-box;
+							height: 64rpx;
+							padding:0 24rpx;
+							text-align: left;
+							border-radius: 32rpx;
+							font-size: $font-size-28;
+							color: $text-color;
+							border: 1px solid #B2B2B2;
+							line-height: 64rpx;
+						}
+						.confirm-btn{
+							width: 200rpx;
+							height: 64rpx;
+							border-radius: 32rpx;
+							line-height: 64rpx;
+							text-align: center;
+							&.other{
+								width: 213rpx;
+							}
+							&.none{
+								color: $color-system;
+								background: #ffe6dc;
+							}
+							&.disabled{
+								color: #999999;
+							}
+						}
+						.item {
+						  width: 155rpx;
+						  height: 60rpx;
+						  font-size:$font-size-28;
+						  line-height: 60rpx;
+						  border-radius:30rpx;
+						  margin: 10rpx;
+						  text-align: center;
+						  box-sizing: border-box;
+						  border: 1rpx solid #EFEFEF;
+						  float: left;
+						  checkbox {
+							display: none;
+						  }
+						}
+						.on {
+						  border-color: $color-system;
+						  color:$color-system;
+						}
+					}
+				}
+				.row-login{
+					flex: 1;
+					font-size: $font-size-28;
+					color: $text-color;
+					text-align: left;
+				}
+				.row-logincode{
+					flex: 1;
+					font-size: $font-size-28;
+					color: $text-color;
+					text-align: right;
+				}
+				.icon-xiayibu{
+					width: 80rpx;
+					height: 80rpx;
+					position: absolute;
+					right: 0;
+					top: 0;
+					line-height: 80rpx;
+					text-align: center;
+				}
+				&.text-textarea{
+					background: #FFFFFF;
+					.textarea{
+						width: 100%;
+						height: 180rpx;
+						padding: 24rpx;
+						box-sizing: border-box;
+						font-size: $font-size-28;
+						color: $text-color;
+						z-index: 1;
+						border-bottom: 1px solid #e1e1e1;
+					}
+					.textarea.hide{
+						opacity: 0;
+					}
+					.textarea.show{
+						color: #999999;
+					}
+				}
+			}
+			.register-picture{
+				height: 180rpx;
+				margin: 30rpx 0;
+				float: left;
+				&.zz{
+					width: 100%;
+				}
+				.label{
+					float: left;
+					font-size: $font-size-28;
+					color: #666666;
+					line-height: 180rpx;
+					width: 150rpx;
+					text-align: left;
+				}
+				.upload-picture{
+					float: left;
+					height: 180rpx;
+					.upload-none{
+						width: 180rpx;
+						height: 180rpx;
+						text-align: center;
+						line-height: 180rpx;
+						color: #999999;
+						border: 1px solid #999999;
+						border-radius: 10rpx;
+						margin: 0 20rpx;
+						.iconfont{
+							font-size: 60rpx;
+						}
+					}
+					.upload-image{
+						width: 180rpx;
+						height: 180rpx;
+						border-radius: 6rpx;
+						margin: 0 20rpx;
+						position: relative;
+						image{
+							width: 180rpx;
+							height: 180rpx;
+							border-radius: 6rpx;
+						}
+						.upload-del{
+							width: 40rpx;
+							height: 40rpx;
+							position: absolute;
+							top: -20rpx;
+							right: -20rpx;
+							line-height: 40rpx;
+							text-align: center;
+							.iconfont{
+								font-size: $font-size-32;
+								color: #999999;
+							}
+						}
+					}
+				}
+			}
+			.register-input{
+				width: 654rpx;
+				height: 40rpx;
+				padding: 24rpx;
+				margin: 0 auto;
+				margin-bottom: 60rpx;
+				background: #F7F7F7;
+				border-radius: 14rpx;
+				.input{
+					width: 100%;
+					height: 100%;
+					background: #F7F7F7;
+					font-size: $font-size-28;
+					line-height: 40rpx;
+					color: #333333;
+					border-radius: 14rpx;
+				}
+			}
+			.register-fiexd{
+				width: 100%;
+				height: auto;
+				position: fixed;
+				bottom: 0;
+				left: 0;
+				z-index: 999;
+				background: #FFFFFF;
+			}
+			.register-btn{
+				width: 100%;
+				height: 80rpx;
+				border-radius: 44rpx;
+				font-size: $font-size-28;
+				line-height: 80rpx;
+				color: #FFFFFF;
+				margin: 0 auto;
+				text-align: center;
+				background: $btn-confirm;
+				margin-top: 96rpx;
+				&.prev{
+					background:#ffe6dc;
+					color: $color-system;
+					margin-top: 20rpx;
+				}
+				&.none{
+					border: 1px solid $color-system;
+					background: #FFFFFF;
+					color:$color-system;
+					margin-top: 0;
+				}
+				&.sub{
+					margin-top: 0;
+				}
+			}
+		}
+	}
+</style>

+ 58 - 67
pages/login/register.vue

@@ -3,8 +3,7 @@
 		<cu-custom :navbar-data='nvabarData'  @navigateBack="hanldNavigateBack"></cu-custom>
 		<view class="register-main clearfix">
 			<view class="register-logo">
-				<image class="logo" src="../../static/login-logo@3x.png" mode=""></image>
-				<text class="logo-text">生美/医美采购服务平台</text>
+				<image class="logo" src="https://admin-b.caimei365.com/userfiles/1/images/photo/2020/11/logo.png" mode=""></image>
 			</view>
 			<view class="register-row clearfix">
 				<view class="register-from">
@@ -19,17 +18,17 @@
 				</view>
 			</view>
 			<view class="register-row clearfix">
-				<view class="register-from code">
+				<view class="register-from">
 					<view class="label">短信验证码:</view>
-					<input class="row-input" type="text" v-model="mobileCode" placeholder="请输入短信验证码" maxlength="6"/>
-				</view>
-				<view class="register-from btn" :class="[isMobileDisabled  ? 'disabled' : '']" >
-					<button class="row-input"  
-							type="button" 
-							@click.stop="getMobileCodeFn" 
-							:disabled="isMobileDisabled">
-							{{ mobileCodeText }}
-					</button>
+					<input class="row-input code" type="text" v-model="mobileCode" placeholder="请输入短信验证码" maxlength="6"/>
+					<view class="row-btn" :class="[isMobileDisabled  ? 'disabled' : '']">
+						<button class="row-input"
+								type="button" 
+								@click.stop="getMobileCodeFn" 
+								:disabled="isMobileDisabled">
+								{{ mobileCodeText }}
+						</button>
+					</view>
 				</view>
 			</view>
 			<view class="register-row clearfix">
@@ -45,13 +44,6 @@
 				</view>
 			</view>
 			<view class="register-main clearfix">
-				<view class="register-row login">
-					<view class="row-login" @click.stop="this.$api.navigateTo('/pages/login/login')">账号登录</view>
-					<view class="row-logincode" @click.stop="this.$api.navigateTo('/pages/login/logincode')">邀请码登录</view>
-				</view>
-				<view class="register-row ">
-					<view class="register-btn sub" @click.stop="registerStepsfirst">注册</view>
-				</view>
 				<view class="register-agree">
 					<view class="agree-text"  @tap.stop="agreeCheck()">
 						<button class="checkbox iconfont" :class="[isCheck?'icon-gouxuan':'icon-weigouxuan']"></button> 
@@ -61,6 +53,13 @@
 						<text @click.stop="this.$api.navigateTo('/pages/service/privacyagree')">《隐私权政策》</text>
 					</view>
 				</view>
+				<view class="register-row ">
+					<view class="register-btn sub" @click.stop="registerStepsfirst">注册</view>
+				</view>
+				<view class="register-row login">
+					<view class="row-login" @click.stop="this.$api.navigateTo('/pages/login/login')">账号登录</view>
+					<view class="row-logincode" @click.stop="this.$api.navigateTo('/pages/login/logincode')">邀请码登录</view>
+				</view>
 			</view>
 		</view>
 	</view>
@@ -73,7 +72,7 @@
 	import mpvueCityPicker from '@/components/mpvue-citypicker/mpvueCityPicker.vue'
 	import { beautyList,mentuzCampNullList,medicaCampNullList } from '@/common/json/data.json.js' //本地数据
 	import { organizationVerifyRegisterFirst,organizationRegister ,organizationLogin } from "@/api/use.js"
-	import { getImageCode, getRegisterMobileCode, uploadFileImage } from "@/api/utils.js"
+	import { getRegisterMobileCode, uploadFileImage } from "@/api/utils.js"
 	export default{
 		components:{
 			mpvueCityPicker
@@ -83,7 +82,7 @@
 				nvabarData: {//顶部自定义导航
 					showCapsule: 1, // 是否显示左上角图标  1表示显示  0表示不显示,
 					showSearch: 0,
-					title: '注册', // 导航栏 中间的标题
+					title: '机构注册', // 导航栏 中间的标题
 					haveBack:true,
 					textLeft:this.$store.state.isIphone
 				},
@@ -213,7 +212,10 @@
 <style lang="scss">
 	.register{
 		width: 100%;
-		height: auto;
+		height: 100%;
+		background: url(https://admin-b.caimei365.com/userfiles/1/images/photo/2020/11/%E8%83%8C%E6%99%AF.png) no-repeat left bottom;
+		box-sizing: border-box;
+		background-size: contain;
 		.register-main{
 			width: 100%;
 			height: auto;
@@ -248,7 +250,7 @@
 				display: flex;
 				flex-direction: column;
 				align-items: center;
-				margin: 200rpx 0 20rpx 0;
+				margin: 100rpx 0 20rpx 0;
 				.agree-text{
 					.checkbox{
 						float: left;
@@ -259,11 +261,11 @@
 							color: $color-system;
 						}
 					}
-					font-size: $font-size-24;
+					font-size: $font-size-22;
 					line-height: 44rpx;
 					color: #999999;
 					text{
-						color:#E36125;
+						color:#1890f9;
 					}
 				}
 			}
@@ -272,29 +274,23 @@
 				display: flex;
 				flex-direction: column;
 				align-items: center;
-				height: 198rpx;
+				height: 189rpx;
 				padding:60rpx 0 40rpx 0;
 				.logo{
-					width: 138rpx;
-					height: 118rpx;
+					width:467rpx;
+					height: 189rpx;
 					display: block;
 				}
-				.logo-text{
-					font-size: 30rpx;
-					line-height: 44rpx;
-					color: $color-system;
-					font-weight: 600;
-					margin-top: 20rpx;
-				}
 			}
 			&.detailed{
 				padding-bottom: 330rpx;
 			}			
 			.register-row{
-				width: 702rpx;
+				width: 100%;
 				height: auto;
-				padding: 0 24rpx;
-				margin-bottom: 20rpx;
+				padding: 0 75rpx;
+				margin-bottom: 30rpx;
+				box-sizing: border-box;
 				&.none{
 					margin-bottom: 0;
 				}
@@ -327,16 +323,15 @@
 					text-align: left;
 				}
 				.register-from{
-					width: 654rpx;
-					height: 88rpx;
-					padding:0 24rpx;
-					background: $sub-bg-color;
-					border-radius: 14rpx;
+					width: 100%;
+					height: 80rpx;
+					background: #FFFFFF;
 					position: relative;
+					border-bottom: 1px solid #e1e1e1;
 					.label{
 						text-align: left;
 						font-size: $font-size-28;
-						color: $text-color;
+						color:#666666;
 						line-height: 88rpx;
 						float: left;
 					}
@@ -345,9 +340,9 @@
 						padding-left:10rpx;
 						font-size: $font-size-28;
 						color: $text-color;
-						line-height: 88rpx;
+						line-height: 80rpx;
 						float: left;
-						height: 88rpx;
+						height: 80rpx;
 						&.none{
 							color: #999999;
 						}
@@ -358,17 +353,20 @@
 						&.keshi{
 							width: 550rpx;
 						}
+						&.code{
+							width: 264rpx;
+						}
 					}
 					&.img-btn{
 						width: 220rpx;
-						height: 88rpx;
+						height: 80rpx;
 						padding: 0;
 						float: left;
 						background: #FFFFFF;
 						display: block;
 						.vscodeimg{
 							width: 150rpx;
-							height: 88rpx;
+							height: 80rpx;
 							float: left;
 							display: flex;
 							flex-direction: column;
@@ -376,7 +374,7 @@
 							border-radius: 14rpx;
 							image{
 								width: 150rpx;
-								height: 88rpx;
+								height: 80rpx;
 								border-radius: 14rpx;
 							}
 						}
@@ -406,31 +404,24 @@
 							width: 230rpx;
 						}
 					}
-					&.code{
-						width: 410rpx;
-						float: left;
-						margin-right: 20rpx;
-						.row-input{
-							width: 230rpx;
-						}
-					}
-					&.btn{
-						width: 224rpx;
-						height: 88rpx;
+					.row-btn{
+						width: 180rpx;
+						height:64rpx;
 						float: left;
 						background: $btn-confirm;
 						padding: 0;
+						border-radius: 32rpx;
 						.row-input{
-							width: 224rpx;
-							height: 88rpx;
-							line-height: 88rpx;
+							width: 180rpx;
+							height: 64rpx;
+							line-height: 64rpx;
 							padding: 0;
 							color: #FFFFFF;
 							background: $btn-confirm;
 							text-align: center;
-							border-radius: 14rpx;
+							border-radius: 32rpx;
 							&.other{
-								width: 224rpx;
+								width: 180rpx;
 								background: #F7F7F7;
 								margin-right: 20rpx;
 							}
@@ -697,9 +688,9 @@
 				background: #FFFFFF;
 			}
 			.register-btn{
-				width: 702rpx;
+				width: 100%;
 				height: 88rpx;
-				border-radius: 14rpx;
+				border-radius: 44rpx;
 				font-size: $font-size-28;
 				line-height: 88rpx;
 				color: #FFFFFF;

+ 58 - 5
pages/tabBar/home/home.vue

@@ -147,12 +147,12 @@
 				</view>
 			</view>	
 		</view>
-		<!-- 侧边 -->
-		<scroll-top v-if="isScrollTop"></scroll-top>
 		<!-- 活动弹窗 -->
 		<!-- <activityAlert :show="isActivity" @click="handleClick" @cancel="handleCancelClick"></activityAlert> -->
 		<!-- 透明模态层 -->
 		<modal-layer v-if='modallayer'></modal-layer>
+		<!-- 侧边 -->
+		<scroll-top v-if="isScrollTop"></scroll-top>
 	</view>
 </template>
 
@@ -172,7 +172,7 @@
 			modalLayer,
 			cmCustom,
 			uniStars,
-			activityAlert,
+			activityAlert
 		},
 		data() {
 			return {
@@ -421,7 +421,7 @@
 			}else{
 				this.inputActive = 'float'
 			}	
-			if(e.scrollTop>600){
+			if(e.scrollTop>400){
 				this.isScrollTop = true
 			}else{
 				this.isScrollTop = false
@@ -471,6 +471,59 @@
 	.container-home{
 		background: #FFFFFF;
 	}
+	.swiper-banner-box{
+		width: 100%;
+		height: 360rpx;
+		padding-top:100rpx;
+		background:#FFFFFF url(https://img.caimei365.com/group1/M00/03/B0/Cmis217Z9LCALu9wAAAv45Bdpsk814.png)no-repeat;
+		position: relative;
+		background-size: cover;
+	}	
+	.tui-banner-swiper {
+		width: 700rpx;
+		margin: 0 auto;
+		height: 340rpx;
+		border-radius: 24rpx;
+		overflow: hidden;
+		transform: translateY(0);
+		box-shadow:0px 3px 6px rgba(225,86,22,0.08);
+		margin-top: 16rpx;
+		.banner-item{
+			border-radius: 24rpx;
+		}
+		.tui-slide-image {
+			width: 100%;
+			height: 340rpx;
+			display: block;
+		}
+	}
+	.swiper__dots-box{
+		position: absolute;
+		bottom: 30rpx;
+		left: 0;
+		right: 0;
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		flex: 1;
+		flex-direction: row;
+		justify-content: center;
+		align-items: center;
+		.swiper__dots-item{
+			width: 8rpx;
+			height: 8rpx;
+			border-radius: 100%;
+			margin-left: 6px;
+			background-color:rgba(255,255,255,.7);
+		}
+		.swiper__dots-long{
+			width: 35rpx;
+			height: 8rpx;
+			border-radius: 4rpx;
+			background-color: #ffff;
+			transition: all 0.4s;
+		}
+	}
 	/* 分类 */
 	.cate-section {
 		width: 702rpx;
@@ -781,4 +834,4 @@
 			padding-top: 20rpx;
 		}
 	}
-</style>
+</style>

+ 31 - 11
pages/tabBar/home/index.vue

@@ -1,11 +1,18 @@
 <template>
 	<view class="container home clearfix" :style="{paddingTop:CustomBar+'px'}">
-		<customer :navbar-data='nvabarData'></customer>
+		<customer ref="customer" :navbar-data='nvabarData'></customer>
 		<!-- 主页内容 -->
 		<tui-skeleton v-if="skeletonShow" backgroundColor="#fafafa" borderRadius="10rpx" :isLoading	="true" :loadingType="5"></tui-skeleton>
 		<view class="container-home tui-skeleton">
+			<!-- 轮播 -->
 			<banner :list="bannerImageList" v-if="isRequest"></banner>
+			<!-- 金刚区菜单 -->
+			<navbars :list="navBarsList" v-if="isRequest"></navbars>
 		</view>	
+		<view class="container-section tui-skeleton">
+			<!-- 推荐专区 -->
+			<hot-product :list="organizeProducts" :userIdentity="userIdentity" v-if="isRequest"></hot-product>
+		</view>
 		<!-- 侧边 -->
 		<scroll-top v-if="isScrollTop"></scroll-top>
 	</view>
@@ -16,15 +23,17 @@
 	import authorize from '@/common/config/authorize.js'
 	import customer from '@/components/cm-module/homeIndex/customer.vue'
 	import banner from '@/components/cm-module/homeIndex/banner.vue'
-	import home from '@/components/cm-module/homeIndex/index.vue'
+	import navbars from '@/components/cm-module/homeIndex/navbars.vue'
+	import hotProduct from '@/components/cm-module/homeIndex/hotProduct.vue'
 	import { userInfoLogin } from "@/api/use.js"
 	import { mapState,mapMutations} from 'vuex';
 	export default {
 		components:{
 			tuiSkeleton,
 			customer,
+			hotProduct,
 			banner,
-			home
+			navbars
 		},
 		data() {
 			return {
@@ -49,8 +58,10 @@
 				modallayer:false,
 				isLogin:false,
 				bannerImageList:[],
+				navBarsList:[],
 				skeletonShow: true,
 				userIdentity:'',
+				RecommendList:[],//热门推荐
 				organizeProducts:[],//常用商品
 				productsClassifyList:[
 					{classifyImage:'https://admin-b.caimei365.com/userfiles/1/images/photo/2020/04/%E7%BB%84%201238.png',classifyName:'采美'},
@@ -108,7 +119,6 @@
 								this.$api.navigateTo('/seller/pages/index/index')
 							}
 							this.getHomeInformation()
-							this.getOrganizeProducts()
 						}).catch(error =>{
 							this.isLogin = false;
 							this.logout()
@@ -116,7 +126,7 @@
 							uni.setStorageSync('sessionid','JSESSIONID='+error.data)
 							this.$store.commit('updateStatus',error.data)
 							this.getHomeInformation()
-							this.getOrganizeProducts()
+							
 						})
 					})
 				})
@@ -133,11 +143,17 @@
 					this.thirdModulesName= data.thirdModulesName
 					this.productsClassifyList = data.productsClassifyList
 					this.$store.commit('updateAllNum',data.shoppingCartCount)
-					this.isRequest = true
+					this.getOrganizeProducts()				
 				}).catch(error =>{
 					this.$util.msg(error.msg,2000)
 				})
 			},
+			GetHomeRecommendInfo(){//首页热门推荐
+				this.CommonService.GetHomeRecommendInfo().then(response =>{
+					this.RecommendList=response.data
+					this.getProductPrice()
+				})
+			},
 			getOrganizeProducts(){//获取模块三商品
 				this.ProductService.queryProductPreferred({userId:this.userID,preferredFlag:100,pageNum:1,pageSize:6}).then(res =>{
 					this.organizeProducts = res.data.results
@@ -155,7 +171,9 @@
 				productIds = productIdArr.join(",");
 				this.ProductService.querySearchProductPrice({userId: this.userID,productIds:productIds}).then(response =>{
 					this.organizeProducts = this.ReturnNewProducts(this.organizeProducts,response.data);
+					console.log(this.organizeProducts)
 					this.skeletonShow = false;
+					this.isRequest = true
 				}).catch(error =>{
 					this.$util.msg(error.msg,2000)
 				})
@@ -275,7 +293,7 @@
 			}else{
 				this.inputActive = 'float'
 			}	
-			if(e.scrollTop>600){
+			if(e.scrollTop>400){
 				this.isScrollTop = true
 			}else{
 				this.isScrollTop = false
@@ -283,7 +301,6 @@
 		},
 		onPullDownRefresh() {//下拉刷新
 			this.getHomeInformation()
-			this.getOrganizeProducts()
 			uni.stopPullDownRefresh()
 		},
 		onShareAppMessage(res){//分享转发
@@ -305,10 +322,8 @@
 					this.$api.getComStorage('userInfo').then((resolve) =>{
 						this.userID = resolve.userID ? resolve.userID :0;
 						this.getHomeInformation()
-						this.getOrganizeProducts()
 					}).catch(error =>{
 						this.getHomeInformation()
-						this.getOrganizeProducts()
 					})
 				}
 			})		
@@ -316,5 +331,10 @@
 	}
 </script>
 
-<style>
+<style lang="scss">
+	.container-section{
+		width: 100%;
+		height: auto;
+		background-color: #F7F7F7;
+	}
 </style>

+ 2 - 1
pages/tabBar/user/user.vue

@@ -18,7 +18,8 @@
 					<view class="header-text">
 						<view class="user-item">
 							<text class="u-h1" @click="navigator('/pages/login/login')">账号登录</text><text class="u-h1 line">|</text>
-							<text class="u-h1" @click="navigatorNex('/pages/login/register','2')">立即注册</text>
+							<text class="u-h1" @click="navigatorNex('/pages/login/register-select')">立即注册</text>
+							<!-- <text class="u-h1" @click="navigatorNex('/pages/login/register','2')">立即注册</text> -->
 						</view>
 						<view class="user-item">
 							<text class="u-p" @click="navigator('/pages/login/login')">登录商城了解更多产品信息吧!</text>

+ 2 - 2
seller/pages/club/addoperator.vue

@@ -74,7 +74,7 @@
 	import { mapState,mapMutations } from 'vuex'
 	import authorize from '@/common/config/authorize.js' 
 	import { bindingWechat } from "@/api/use.js"
-	import { getImageCode, getbindWechatCode } from "@/api/utils.js"
+	import { getbindWechatCode } from "@/api/utils.js"
 	export default{
 		data() {
 			return{
@@ -88,7 +88,7 @@
 		},
 		methods:{
 			getVerificationCode(){//图形验证
-				getImageCode().then(res => {
+				this.PublicService.GetImgVerifyCode().then(res => {
 					this.imageCodeUrl = res.data.baseImage
 				})
 			},

+ 4 - 0
services/common.service.js

@@ -14,4 +14,8 @@ export default class CommonService {
 	GetHomeModulesDataInfo (data = {}) {
 		return this.AjaxService.get({ url:'/home/modules', data, isLoading: false })
 	}
+	/* 首页热门推荐 */
+	GetHomeRecommendInfo (data = {}) {
+		return this.AjaxService.get({ url:'/home/recommend', data, isLoading: false })
+	}
 }

+ 4 - 1
services/index.js

@@ -12,6 +12,7 @@ import SellerService from './sellse.service'
 import ActivityService from './activity.service'
 import OrderService from './order.service'
 import SecondService from './second.service'
+import PublicService from './public.service.js'
 
 let commonService = new CommonService(ajaxService)
 let locateService = new LocateService(ajaxService)
@@ -24,6 +25,7 @@ let sellerService = new SellerService(ajaxService)
 let activityService = new ActivityService(ajaxService)
 let orderService = new OrderService(ajaxService)
 let secondService = new SecondService(ajaxService)
+let publicService = new PublicService(ajaxService)
 
 Vue.prototype.AjaxService = ajaxService
 Vue.prototype.CommonService = commonService
@@ -36,4 +38,5 @@ Vue.prototype.PhotoService = photoService
 Vue.prototype.SellerService = sellerService
 Vue.prototype.ActivityService = activityService
 Vue.prototype.OrderService = orderService
-Vue.prototype.SecondService = secondService
+Vue.prototype.SecondService = secondService
+Vue.prototype.PublicService = publicService

+ 16 - 0
services/public.service.js

@@ -0,0 +1,16 @@
+/**
+ * 这是所有模块公用业务逻辑的服务
+ */
+export default class PublicService {
+	constructor(AjaxService) {
+		Object.assign(this, { AjaxService })
+		this.name = 'PublicService'
+	}
+	/**
+	 * 获取图形验证码
+	 * platformType:小程序 2  WWW 0  CRM 1 
+	 */
+	GetImgVerifyCode (data = {platformType:2}) {
+		return this.AjaxService.get({ url:'/user/getImgVerifyCode', data, isLoading: true })
+	}
+}

BIN
static/temp/icon-new.png


+ 2 - 2
supplier/pages/login/bind-operator.vue

@@ -70,7 +70,7 @@
 	import { mapState,mapMutations } from 'vuex'
 	import authorize from '@/common/config/authorize.js' 
 	import wxLogin from "@/common/config/wxLogin.js"
-	import { getImageCode, getbindOperatorCode } from "@/api/utils.js"
+	import { getbindOperatorCode } from "@/api/utils.js"
 	export default{
 		data() {
 			return{
@@ -121,7 +121,7 @@
 				this.bindingWechatLogin()
 			},
 			getVerificationCode(){//图形验证
-				getImageCode().then(res => {
+				this.PublicService.GetImgVerifyCode().then(res => {
 					this.imageCodeUrl = res.data.baseImage
 					this.imageCodetoken = res.data.token
 				})