瀏覽代碼

增加协销模块

zhengjinyi 5 年之前
父節點
當前提交
f2e259f61f

+ 3 - 2
App.vue

@@ -62,8 +62,9 @@
 				authorize.getCode('weixin').then(wechatcode =>{
 					// 根据微信的code获取用户登录状态:1已登录过 -1未登录过
 					userInfoLogin({code:wechatcode}).then(response =>{
-						uni.removeStorageSync('sessionid')
+						this.login(response.data)
 						uni.setStorageSync('token',response.data.token)
+						uni.removeStorageSync('sessionid')
 						uni.setStorageSync('sessionid','JSESSIONID='+response.data.sessionId)
 						this.$store.commit('updateStatus',response.data)
 					}).catch(response =>{
@@ -82,7 +83,7 @@
 			}
 		},
 		onShow: function() {
-			console.log('App Show')
+			// this.getCheekeyCode()
 		},
 		onHide: function() {
 			console.log('App Hide')

+ 87 - 0
components/cu-tabbar.vue

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

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

@@ -16,7 +16,7 @@
 					</view>
 					<view>
 						<image class="authenticated-icon" src="../../../static/temp/authenticated-icon.png"></image>
-						<text class="green-color">{{item.brands.length}}个品牌已认证</text>
+						<text class="green-color">{{item.brandCount}}个品牌已认证</text>
 						<!-- <image class="arrow-right" src="../../static/temp/arrow-right.png"></image> -->
 					</view>
 				</view>

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

@@ -126,7 +126,7 @@
 				display: flex;
 				align-items: center;
 				width: 100%;
-				height: 260rpx;
+				height: auto;
 				padding: 12rpx 0;
 				.pros-left{
 					width: 210rpx;

+ 0 - 1177
extend/pages/register/register.vue

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

+ 248 - 0
market/pages/category/category.vue

@@ -0,0 +1,248 @@
+<template>
+	<view id="category" :style="{paddingBottom:isIphoneX?'140rpx':'98rpx'}">
+		<!--顶部搜索导航栏-->
+		<view class="'search-input-fixed">
+			<bt-search :clickPath="clickPath" :toestText='hotSearchText'></bt-search>
+		</view>
+		<view class="category-list">
+			<!-- 左侧分类导航 -->
+			<scroll-view class="left-aside" scroll-y="true" scroll-with-animation :scroll-top="verticalNavTop" style="height:calc(100vh - 102rpx)">
+				<view class="row" v-if="m.smalltypeList.length > 0" v-for="(m, index) in categoryList" :key="index" :class="[index==showCategoryIndex?'on':'']" @tap="showCategory($event,index)" :data-id="index">
+					<view class="text">
+						{{m.name}}
+					</view>
+					<view class="block"></view>
+				</view>
+			</scroll-view>
+			<!--右侧子导航-->
+			<scroll-view  scroll-y="true" class="right-aside">
+				<view class="category" v-if="n.smalltypeList.length > 0" v-for="(n,index) in categoryList" :key="index" v-show="index==showCategoryIndex" >
+					<view class="category-box" v-for="(o,oIndex) in n.smalltypeList" :key="oIndex">
+						<view class="title">{{o.name}}</view>
+						<view class="list" v-if="o.tinytypeList.length > 0">
+							<view class="box" v-for="(pro,proIndex) in o.tinytypeList" :key="proIndex" @click.stop="navToListPage(pro,proIndex)">
+								<image :src="pro.icon"></image>
+								<view class="text">{{pro.name}}</view>
+							</view>
+						</view>
+						<view v-else class="no-data">
+							该栏目暂无分类~
+						</view>
+					</view>
+				</view>
+			</scroll-view>
+		</view>
+		<!-- 底部tabbar -->
+		<cu-tabbar :active-index ="1"></cu-tabbar>
+	</view>
+</template>
+<script>
+	import cuTabbar from '@/components/cu-tabbar.vue'
+	import btSearch from '@/components/uni-search/bt-search.vue'
+	import { queryGoodscategory } from "@/api/product.js"
+
+	export default {
+		components: {
+			btSearch,
+			cuTabbar
+		},
+		data() {
+			return {
+				headerShow:true,
+				hotSearchText: '你想要的这里都有',
+				clickPath:'/pages/search/search',
+				showCategoryIndex: 0,
+				//分类列表
+				categoryList: [],
+				search: '',
+				cateTop: {},
+				verticalNavTop: 0,
+				isIphoneX:this.$store.state.isIphoneX,
+			}
+		},
+		onLoad() {
+			this.initData();
+		},
+		methods: {
+			// 跳转至商品列表
+			navToList(id){
+				uni.navigateTo({
+					url: `/pages/product/list?cate_id=${id}`
+				})
+			},
+			// 数据初始化
+			initData() {
+				this.getProductCate();
+			},
+			// 获取商品分类列表
+			getProductCate () {
+				queryGoodscategory().then(res =>{
+					this.categoryList = res.data
+					// 查询第一个拥有二级菜单的子菜单
+					for (let i = 0; i < this.categoryList.length; i++) {
+						if (this.categoryList[i].smalltypeList.length > 0) {
+							this.showCategoryIndex = i;
+							break;
+						}
+					}
+				}).catch(res =>{
+					this.$util.msg(res.msg,2000);
+				})
+			},
+			showCategory(e,index){//分类切换显示
+				this.showCategoryIndex = index;
+				this.verticalNavTop = (e.currentTarget.dataset.id - 1) * 50
+			},
+			toSearch () {// 跳转至搜索详情页
+				uni.navigateTo({
+					url: `/pages/search/search?search=${JSON.stringify(this.search)}`
+				})
+			},
+			navToListPage(pro,index){//分类导航跳转
+				let self = this;
+				uni.setStorage({
+					key: 'commodity_id',
+					data: pro.tinyTypeID,
+					success: function () {
+						self.$api.navToListPage({type:'商品分类',value:pro.name,id:pro.tinyTypeID});
+					}
+				})
+			}
+		}
+	}
+</script>
+<style scoped lang="scss">
+	page {
+		background-color: #fff;
+	}
+	.search-input-fixed{
+		width: 100%;
+		height:auto;
+		position: fixed;
+		top: 0;
+		left: 0;
+		z-index: 1000;
+		background: #FFFFFF;
+		border-bottom: 1px solid #F7F7F7;
+	}		
+	#category {
+		/*模块分类*/
+		.category-list{
+			width: 100%;
+			background-color: #fff;
+			display: flex;
+			
+			.left-aside,.right-aside{
+				position: absolute;
+				top: 100rpx;
+				/*  #ifdef  APP-PLUS  */
+				top: calc(100rpx + var(--status-bar-height));
+				/*  #endif  */
+				bottom: 0rpx;
+			}
+			.left-aside{
+				width: 200rpx;
+				left: 0rpx;
+				background-color: #f2f2f2;
+				.row{
+					width: 100%;
+					height: 100rpx;
+					display: flex;
+					align-items: center;
+					position: relative;
+					.text{
+						width: 100%;
+						position: relative;
+						font-size: $font-size-28;
+						display: flex;
+						justify-content: center;
+						color: $text-color;
+						/* transition: transform 0.3s ease;*/
+						transition-property: transform;
+						transition-duration: 0.2s;
+						transition-timing-function: ease;
+					}
+					.block{
+						position: absolute;
+						width: 0rpx;
+						left: 0;
+						/* transition: transform 0.3s ease;*/
+						transition-property: transform;
+						transition-duration: 0.2s;
+						transition-timing-function: ease;
+					}
+					&.on{
+						height: 100rpx;
+						background-color: #fff;
+						.text{
+							font-size: $font-size-28;
+							color: $color-system;
+						}
+						.block{
+							width: 10rpx;
+							height: 60rpx;
+							top: 20rpx;
+							background-color: $color-system;
+							border-radius: 0 15rpx 15rpx 0;
+						}
+					}
+				}
+			}
+			.right-aside{
+				width: 550rpx;
+				left: 200rpx;
+				.category{
+					width: calc(100%);
+					padding: 0 15rpx 20rpx 0;
+					background: #F7F7F7;
+					.category-box{
+						background: #FFFFFF;
+						margin-bottom: 20rpx;
+						.title{
+							padding: 0 24rpx;
+							line-height: 80rpx;
+							height: 80rpx;
+							text-align: left;
+							color: $text-color;
+							font-size: $font-size-26;
+							border-bottom: 1px solid #F7F7F7;
+							font-weight: 600;
+						}
+						.list{
+							margin-top: 24rpx;
+							width: 100%;
+							display: flex;
+							flex-wrap: wrap;
+							.box{
+								width: calc(71.44vw / 3);
+								margin-bottom: 40rpx;
+								display: flex;
+								justify-content: center;
+								align-items: center;
+								flex-wrap: wrap;
+								image{
+									width: 140rpx;
+									height: 140rpx;
+								}
+								.text{
+									margin-top: 8rpx;
+									width: 100%;
+									display: flex;
+									justify-content: center;
+									font-size: $font-size-24;
+								}
+							}
+						}
+						.no-data {
+							text-align: center;
+							margin: 30rpx 0;
+							color: #999999;
+							font-size: 24rpx;
+							line-height: 80rpx;
+						}
+					}
+				}
+			}
+		}
+	}
+</style>

+ 667 - 0
market/pages/home/home.vue

@@ -0,0 +1,667 @@
+<template>
+	<view class="container home clearfix" :style="{paddingBottom:isIphoneX?'140rpx':'98rpx'}">	
+		<!-- 头部轮播 -->
+		<tui-skeleton v-if="skeletonShow" backgroundColor="#fafafa" borderRadius="10rpx" :isLoading	="true" :loadingType="9"></tui-skeleton>
+		<view :class="'container-home-'+ inputActive" class="tui-skeleton">
+			<view :class="'search-input-' + inputActive">
+				<bt-search :clickPath="clickPath" :toestText='hotSearchText'></bt-search>
+			</view>
+			<view class="banner-section">
+				<!-- <uni-swiper-dot :info="bannerList" :current="current" field="content" :mode="mode" > -->
+				<swiper class="banner tui-banner tui-skeleton-rect" circular @change="swiperChange" :autoplay="true" :interval="5000" :duration="500" :circular="false">
+					<swiper-item v-for="(item, index) in bannerImageList" :key="index" class="banner-item"> 
+						<image :src="item" />
+					</swiper-item>
+				</swiper>
+				<view class="swiper__dots-box" v-if="bannerImageList.length > 1">
+					<view v-for="(item,idx) in bannerImageList" 
+						  :key="idx" 
+						  :class="[idx===current?'swiper__dots-long':'none']" 
+						  :data-index="current" class="swiper__dots-item" />
+				</view>
+				<!-- </uni-swiper-dot> -->
+			</view>
+			<view class="cate-section clearfix">
+				<!-- 优选分类 -->
+				<view class="tabbar clearfix">
+					<view class="cate-item-info" @click.stop="this.$api.navToListPage({type:'1',value:firstModulesName})">
+						<image class="tui-skeleton-fillet" :src="firstModulesImage"></image>
+						<text class="tui-skeleton-fillet">{{firstModulesName}}</text>
+					</view>
+					<view class="cate-item-info" @click.stop="this.$api.navToListPage({type:'2',value:secondModulesName})">
+						<image class="tui-skeleton-fillet" :src="secondModulesImage"></image>
+						<text class="tui-skeleton-fillet">{{secondModulesName}}</text>
+					</view>
+					<view class="cate-item-info" @click="showTost">
+						<image class="tui-skeleton-fillet" :src="navInforList[0].icon"></image>
+						<text class="tui-skeleton-fillet">{{navInforList[0].text}}</text>
+					</view>
+					<view class="cate-item-info">
+						<!-- #ifdef MP-WEIXIN -->
+						<button class="contact-btn" open-type="contact" @bindcontact="handleContact">
+							<image class="tui-skeleton-fillet" :src="navInforList[1].icon"></image>
+						</button>	
+						<!-- #endif -->
+						<text class="tui-skeleton-fillet">{{navInforList[1].text}}</text>
+					</view>
+				</view>
+			</view>
+			<!-- 热销商品 -->
+			<view class="hotgoods-section">
+				<view class="s-header tui-skeleton-fillet" @click="this.$api.navToListPage({type:'3',value:thirdModulesName})">
+					<text class="tip">{{thirdModulesName}}</text>
+					<text class="tit">更多</text>
+					<text class="iconfont icon-xiayibu"></text>
+				</view>
+				<view class="hotgoods-swiper">
+					<scroll-view class="floor-list" scroll-x>
+						<view class="scoll-wrapper">
+							<view 
+								v-for="(item, index) in organizeProducts" :key="index"
+								class="floor-item"
+								@click.stop="navToDetailPage(item.productID)"
+							>
+								<image class="tui-skeleton-fillet" :src="item.mainImage" mode="aspectFill"></image>
+								<view class="title tui-skeleton-rect">
+									<text class="mclap">{{item.name}}</text>
+								</view>
+								<view class="" v-if="isLogin">
+									<view class="title-none" v-if="item.price1TextFlag == '1'">
+										<text class="p big">尚未公开价格</text>
+									</view>
+									<view class="price tui-skeleton-rect" v-else>
+										<text class="p sm">¥</text>
+										<text class="p big">{{item.retailPrice.toFixed(2)}}</text>
+									</view>
+								</view>
+								<view v-else class="no-price">
+									<text class="p-no">价格:</text>
+									<uni-stars :stars="parseInt(item.price1Grade)"></uni-stars>
+								</view>	
+							</view>
+						</view>
+					</scroll-view>
+				</view>	
+			</view>
+			<!-- 底部 -->
+			<view class="footer-section ">
+				<view class="s-header tui-skeleton-fillet">
+					<text class="tip">医美机构正品联盟</text>
+				</view>
+				<view class="f-content tui-skeleton-fillet" @click="navto('/pages/service/member')">
+					<image class="tui-banner" src="https://img.caimei365.com/group1/M00/03/71/Cmis2F3wna6AEwQlAAjGFdpI2LM357.png" mode=""></image>
+				</view>
+				<view class="f-tab-section">
+					<!-- 优选分类 -->
+					<view class="tabbar clearfix">
+						<view class="cate-item" @click="showTost">
+							<image class="tui-skeleton-fillet" :src="navServerList[0].icon"></image>
+							<text class="tui-skeleton-fillet">{{navServerList[0].text}}</text>
+						</view>
+						<view class="cate-item" @click="navto(navServerList[1].path)">
+							<image class="tui-skeleton-fillet" :src="navServerList[1].icon"></image>
+							<text class="tui-skeleton-fillet">{{navServerList[1].text}}</text>
+						</view>
+						<view class="cate-item" @click="navto(navServerList[2].path)">
+							<image class="tui-skeleton-fillet" :src="navServerList[2].icon"></image>
+							<text class="tui-skeleton-fillet">{{navServerList[2].text}}</text>
+						</view>
+						<view class="cate-item" @click="telPhoneTo">
+							<image class="tui-skeleton-fillet" :src="navServerList[3].icon"></image>
+							<text class="tui-skeleton-fillet">{{navServerList[3].text}}</text>
+						</view>
+					</view>
+				</view>
+				<view class="f-text tui-skeleton-fillet">
+					<view class="">
+						<image class="logo" src="../../../static/logo-c@2x.png" mode=""></image>
+						<text class="">采美365网</text>
+					</view>
+				</view>
+			</view>	
+		</view>
+		<!-- 透明模态层 -->
+		<modal-layer v-if='modallayer'></modal-layer>
+		<!-- 底部tabbar -->
+		<cu-tabbar :active-index ="0"></cu-tabbar>
+	</view>
+</template>
+
+<script>
+	import tuiSkeleton from "@/components/tui-skeleton/tui-skeleton"
+	import authorize from '@/common/config/authorize.js'
+	import modalLayer from "@/components/modal-layer"
+	import cuTabbar from '@/components/cu-tabbar.vue'
+	import btSearch from '@/components/uni-search/bt-search.vue'
+	import uniStars from '@/components/uni-stars/uni-stars.vue'
+	import { userInfoLogin, queryHomeInfo } from "@/api/use.js"
+	import { queryPreferred } from "@/api/product.js"
+	import { mapMutations} from 'vuex';
+	export default {
+		components:{
+			tuiSkeleton,
+			modalLayer,
+			btSearch,
+			uniStars,
+			cuTabbar
+		},
+		data() {
+			return {
+				userID:'',
+				inputActive:'float',
+				hotSearchText:'你想要的这里都有',
+				clickPath:'/pages/search/search',
+				current:0,
+				mode:'round',
+				modallayer:false,
+				isLogin:false,
+				bannerImageList:[],
+				hotGoodsList:[],
+				skeletonShow: true,
+				isIphoneX:this.$store.state.isIphoneX,
+				organizeProducts:[],//常用商品
+				firstModulesName:'https://img.caimei365.com/group1/M00/03/8C/Cmis215XHXSAAZU0AACaPrfbB8I435.png', //优惠模块1
+				secondModulesName:'', //优惠模块2
+				firstModulesImage:'https://img.caimei365.com/group1/M00/03/8C/Cmis215XHXSAAZU0AACaPrfbB8I435.png',//优惠模块icon1
+				secondModulesImage:'',//优惠模块icon2
+				thirdModulesName:'', //优惠模块3
+				navInforList:[
+					{text:'会员中心',icon:'https://img.caimei365.com/group1/M00/03/8C/Cmis215XHXSAAZU0AACaPrfbB8I435.png'},
+					{text:'在线客服',icon:'https://img.caimei365.com/group1/M00/03/8D/Cmis215XHXWABv0rAACt9b8scec656.png'}
+				],
+				navServerList:[
+					{text:'会员优惠',icon:'../../../static/temp/server1@2x.png',path:'/pages/service/member'},
+					{text:'售后无忧',icon:'../../../static/temp/server2@2x.png',path:'/pages/service/aftersale'},
+					{text:'购物须知',icon:'../../../static/temp/server3@2x.png',path:'/pages/service/shoppingnotice'},
+					{text:'联系我们',icon:'../../../static/temp/server4@2x.png',path:''},
+				]
+			}
+		},
+		onLoad() {
+			this.initData()
+		},
+		methods: {
+			...mapMutations(['login','logout']),
+			async initData(){
+				this.skeletonShow = true;
+				let hotGoodsList = await this.$util.json('hotGoodsList'); 
+				this.hotGoodsList = hotGoodsList;
+			},	
+			getCheekeyCode(){
+				authorize.getCode('weixin').then(wechatcode =>{
+					// console.log(wechatcode);
+					// 根据微信的code获取用户登录状态:1已登录过 -1未登录过
+					userInfoLogin({code:wechatcode}).then(response =>{
+						this.isLogin = true;
+						this.userID = response.data.userID;						
+						this.$store.commit('updateStatus',response.data)
+						this.login(response.data);
+						uni.setStorageSync('token',response.data.token)
+						uni.removeStorageSync('sessionid')
+						uni.setStorageSync('sessionid','JSESSIONID='+response.data.sessionId)
+						this.getHomeInformation()
+						this.getOrganizeProducts()
+					}).catch(response =>{
+						this.isLogin = false;
+						this.logout()
+						uni.removeStorageSync('sessionid')
+						uni.setStorageSync('sessionid','JSESSIONID='+response.data)
+						this.$store.commit('updateStatus',response.data)
+						this.getHomeInformation()
+						this.getOrganizeProducts()
+					})
+				})
+			},		
+			getHomeInformation(){		
+				queryHomeInfo({}).then(res =>{
+					let data = res.data;
+					this.bannerImageList = data.bannerImageList
+					this.mallPageModules = data.mallPageModules
+					this.$store.commit('updateAllNum',data.shoppingCartCount)
+					this.firstModulesName= data.firstModulesName
+					this.secondModulesName= data.secondModulesName
+					this.firstModulesImage= data.firstModulesImage
+					this.secondModulesImage= data.secondModulesImage
+					this.thirdModulesName= data.thirdModulesName
+					this.skeletonShow = false;
+				})
+			},
+			getOrganizeProducts(){//获取模块三商品
+				queryPreferred({userId:this.userID,preferredFlag:100,pageNum:1,pageSize:5}).then(res =>{
+					this.organizeProducts = res.data.results
+				})
+			},
+			//轮播图切换修改背景色
+			swiperChange(e) {
+				const index = e.detail.current;
+				this.current = index;
+				// console.log('current',this.current)
+				// this.titleNViewBackground = this.carouselList[index].background;
+			},
+			formatMoney(num){
+				return num.toString().replace(/\d+/, function (n) { // 先提取整数部分
+					return n.replace(/(\d)(?=(\d{3})+$)/g, function ($1) { // 对整数部分添加分隔符
+						return $1 + ",";
+					});
+				});
+			},
+			//分类导航跳转
+			navToListPage(nav){
+				let self = this;
+				uni.setStorage({
+					key: 'commodity_id',
+					data: nav.id,
+					success: function () {
+						self.$api.navToListPage({type:'商品分类',value:nav.classifyName,id:nav.id});
+					}
+				})
+			},
+			navToDetailPage(id) {//跳转商品详情页
+				this.modallayer = true;
+				this.$api.navigateTo(`/pages/goods/product?id=${id}`)
+			},
+			handleContact(e){
+				console.log(e.detail.path)
+				console.log(e.detail.query)
+			},
+			showTost(){
+				this.$util.msg("正在开发中,敬请期待~",2000);
+				// uni.navigateToMiniProgram({
+				// 	appId: 'wx5a5cda32926f55ac',
+				// 	path: '/pages/tabBar/home/home',
+				// 	extraData: {
+				// 		'data1': 'test'
+				// 	},
+				// 	envVersion: 'develop',
+				// 	success(res) {
+				// 		console.log(res)
+				// 		// 打开成功
+						
+				// 	}
+				// })
+			},
+			navto(url){
+				this.$api.navigateTo(url)
+			},
+			telPhoneTo(){
+				let self = this;
+				this.$api.get('/home/afterSale',{organizeID:this.userOrganizeID}, 
+					response => {
+						console.log(response.data.contactNumber)
+						uni.makePhoneCall({
+							phoneNumber:response.data.contactNumber //仅为示例
+						});
+					}
+				)	
+			}
+		},
+		onPageScroll(e){
+			// console.log(e.scrollTop);//实时获取到滚动的值
+			if(e.scrollTop>50){
+				this.inputActive = 'fixed'
+			}else{
+				this.inputActive = 'float'
+			}	
+		},
+		onPullDownRefresh() {//下拉刷新
+			this.getHomeInformation()
+			uni.stopPullDownRefresh()
+		},
+		onShareAppMessage(res){//分享转发
+			if (res.from === 'button') {
+		      // 来自页面内转发按钮
+		      console.log(res.target)
+		    }
+			return {
+			  title: '采美采购商城-生美/医美采购服务平台',
+			  path: 'pages/tabBar/home/home',
+			  imageUrl:'https://img.caimei365.com/group1/M00/03/8C/Cmis215XHXSAWWkhAAXDP4-6m_c397.png'
+			}
+		},
+		onShow(){
+			this.modallayer = false;
+			//查看此微信用户是否已经授权过
+			authorize.getSetting().then(res =>{// console.log('是否已授权',res);//0:为取消授权 1:为已授权 2:为未操作
+				if(res == 1){
+					this.getCheekeyCode()
+				}else{
+					this.$api.redirectTo('/pages/authorization/authorization')
+				}
+			})				
+		}
+	}
+</script>
+
+<style lang="scss">
+	page,.home{
+		width: 100%;
+		height: auto;
+	}			
+	.container-home-float{
+		padding-top: 0;
+	}
+	.container-home-fixed{
+		padding-top: 100rpx;
+	}
+	.search-input-float{
+		width: 100%;
+		height:auto;
+	}
+	.search-input-fixed{
+		width: 100%;
+		height:auto;
+		position: fixed;
+		top: 0;
+		left: 0;
+		z-index: 1000;
+		background: #FFFFFF;
+	}
+	.banner-section{
+		width: 100%;
+		height: 366rpx;
+		position: relative;
+	}	
+	.banner{
+		width: 100%;
+		height: 366rpx;
+		image {
+			width: 100%;
+			height: 100%;
+		}
+	}
+	.swiper__dots-box{
+		position: absolute;
+		bottom: 10px;
+		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: 32rpx;
+			height: 8rpx;
+			border-radius: 4rpx;
+			background-color: #ffff;
+			transition: all 0.4s;
+		}
+	}
+	/* 分类 */
+	.cate-section {
+		width: 702rpx;
+		height: auto;
+		padding:34rpx 24rpx 14rpx 24rpx; 
+		background: #fff;
+		.tabbar{
+			margin-bottom: 26rpx;
+		}
+		.cate-item {
+			width: 118rpx;
+			margin-right:28rpx;
+			margin-bottom:28rpx;
+			display: flex;
+			float: left;
+			flex-direction: column;
+			align-items: center;
+			font-size: $font-size-26;
+			color: $text-color;
+			line-height: 36rpx;
+			&:last-child{
+				margin-right: 0;
+			}
+			&:nth-child(5n){
+				margin-right: 0;
+			}
+			image {
+				width: 90rpx;
+				height: 90rpx;
+				margin-bottom: 8rpx;
+			}	
+		}
+		.cate-item-info {
+			width: 160rpx;
+			margin-right:20.666rpx;
+			display: flex;
+			float: left;
+			flex-direction: column;
+			align-items: center;
+			font-size: $font-size-26;
+			color: $text-color;
+			line-height: 36rpx;
+			&:last-child{
+				margin-right: 0;
+			}
+			image {
+				width: 160rpx;
+				height: 90rpx;
+				margin-bottom: 16rpx;
+			}	
+			button.contact-btn{
+				width: 160rpx;
+				height: 90rpx;
+				margin: 0;
+				padding: 0;
+				display: flex;
+				flex-direction: column;
+				align-items: center;
+				box-sizing: border-box;
+				text-align: center;
+				text-decoration: none;
+				border-radius: 0;
+				-webkit-tap-highlight-color: transparent;
+				overflow: hidden;
+				background-color:#FFFFFF;
+				margin-bottom: 16rpx;
+				image{
+					width: 160rpx;
+					height: 90rpx;
+					margin-bottom: 0;
+				}
+			}
+		}
+	}
+	/* 活动 */
+	.hot-section{
+		padding:0 24rpx 48rpx 24rpx; 
+		background: #FFFFFF;
+		.ht-l{
+			width: 339rpx;
+			height: 188rpx;
+			float: left;
+			image{
+				width: 339rpx;
+				height: 188rpx;
+				border-radius:10rpx;
+			}
+		}
+		.ht-r{
+			width: 339rpx;
+			height: 188rpx;
+			float: right;
+			image{
+				width: 339rpx;
+				height: 188rpx;
+				border-radius:10rpx;
+			}
+		}
+	}
+	.hotgoods-section{
+		padding: 4rpx 0 24rpx 24rpx;
+		background: #fff;
+		.s-header{
+			display:flex;
+			align-items:center;
+			height: 40rpx;
+			line-height: 40rpx;
+			.tip{
+				flex: 4;
+				font-size: 30rpx;
+				color: $text-color;
+				font-weight: bolder;
+			}
+			.tit{
+				flex: 4.4;
+				font-size: $font-size-28;
+				color: $text-color;
+				text-align: right;
+			}
+			.icon-xiayibu{
+				flex: 0.6;
+				color: $text-color;
+				text-align: left;
+				font-size: $font-size-24;
+			}
+		}
+	}	
+	.hotgoods-swiper{
+		width: 100%;
+		height: auto;				
+		overflow: hidden;
+		scroll-view{
+			padding: 26rpx 0;
+			width: 100%;
+		}
+		.scoll-wrapper{
+			display:flex;
+			align-items: flex-start;
+		}
+		.floor-item{
+			width: 210rpx;
+			padding-right: 24rpx;
+			font-size: $font-size-24;
+			color: $text-color;
+			line-height: 36rpx;
+			border-radius: 10rpx;			
+			image{
+				width: 210rpx;
+				height: 217rpx;
+				border-radius: 10rpx;
+			}
+			.title-none{
+				font-size: $font-size-26;
+				color: #FF2A2A;
+				line-height: 20rpx;
+				margin-top: 18rpx;
+			}
+			.title{
+				width: 210rpx;
+				height: 72rpx;
+				display: flex;
+				flex-direction: column;
+				.mclap{
+					width: 100%;
+					line-height: 36rpx;
+					text-overflow:ellipsis;
+					display: -webkit-box;
+					word-break: break-all;
+					-webkit-box-orient: vertical;
+					-webkit-line-clamp: 2;
+					overflow: hidden;
+					font-size: 26rpx;
+				}
+			}
+			.no-price{
+				height: 36rpx;
+				line-height: 36rpx;
+				display: flex;
+				margin-top: 8rpx;
+				.p-no{
+					font-size: $font-size-24;
+					color: $color-system;
+					margin-right: 5rpx;
+				}
+				image{
+					width:30rpx;
+					height: 36rpx;
+				}
+			}
+			.price{
+				color:#FF2A2A;
+				line-height: 20rpx;
+				margin-top: 18rpx;
+				.sm{
+					font-size: $font-size-24;
+				}
+				.big{
+					font-size: $font-size-28;
+				}
+			}
+		}
+	}
+	.footer-section{
+		width: 702rpx;
+		padding: 0  24rpx 30rpx 24rpx;
+		.s-header{
+			display:flex;
+			align-items:center;
+			height: 40rpx;
+			line-height: 40rpx;
+			margin-bottom: 38rpx;
+			.tip{
+				flex: 1;
+				font-size: 30rpx;
+				color: $text-color;
+				font-weight: bolder;
+			}
+		}
+		.f-content{
+			width: 100%;
+			image{
+				width: 100%;
+				height: 350rpx;
+			}
+		}
+		/*底部服务导航*/
+		.f-tab-section {
+			width: 100%;
+			height: auto;
+			padding: 38rpx 0; 
+			background: #fff;
+			/*底部服务导航*/
+			.cate-item {
+				width: 99rpx;
+				margin-right: 102rpx;
+				float: left;
+				display: flex;
+				flex-direction: column;
+				align-items: center;
+				font-size: $font-size-24;
+				color: $text-color;
+				&:last-child{
+					margin-right: 0;
+				}
+				image {
+					width: 75rpx;
+					height: 75rpx;
+					margin-bottom: 8rpx;
+					border-radius: 50%;
+				}
+			}
+		}	
+		.f-text{
+			.logo{
+				width: 80rpx;
+				height: 80rpx;
+				float: left;
+				margin: 0 6rpx;
+			}
+			display: flex;
+			flex-direction: column;
+			align-items: center;
+			font-size: $font-size-24;
+			color: $text-color;
+			line-height: 80rpx;
+			padding-top: 20rpx;
+		}
+	}
+</style>

+ 139 - 0
market/pages/index/index.vue

@@ -0,0 +1,139 @@
+<template>
+	<view class="content">
+		<!-- 比赛 -->
+		<view :style="{'display':show_index == 0 ?'block':'none'}">
+			<tab-game  ref="game"></tab-game>
+		</view>
+		<!-- 发现 -->
+		<view :style="{'display':show_index == 1 ?'flex':'none'}">
+			<tab-discovery  ref="discovery"></tab-discovery>
+		</view>
+		<!-- 数据 -->
+		<view :style="{'display':show_index == 2? 'block':'none'}">
+			<tab-data   ref="data"></tab-data>
+		</view>
+		<!-- 资讯 -->
+		<view :style="{'display':show_index == 3 ?'block':'none'}">
+			<tab-information  ref="information"></tab-information>
+		</view>
+		<!-- 个人中心 -->
+		<view :style="{'display':show_index == 4 ? 'flex':'none'}">
+			<tab-mycenter :style="{'display':show_index == 4 ? 'flex':'none'}" ref="mycenter"></tab-mycenter>
+		</view>
+		<!-- is_lhp判断是否为刘海屏在main.js里,好像uniapp有一个css变量获取刘海屏的安全区域 -->
+		<view class="tabBar" :style="{height:is_lhp?'140rpx':'98rpx'}">
+			<!-- 导航的中间圆圈 --> 
+			<view class="border_box" :style="{paddingBottom:is_lhp?'40rpx':''}">
+				<view class="tabBar_miden_border"></view>
+			</view>
+			<view class="tabBar_list" :style="{paddingBottom:is_lhp?'40rpx':''}">
+				<view v-for="(item) in tab_nav_list" :key="item.id" :class="{'tabBar_item':item.id!=2,'tabBar_item2':item.id==2}" @tap="cut_index(item.id)">
+					<image v-if="show_index == item.id"  :src="`../../static/tabBar/${item.id+1}${item.id+1}.png`"></image>
+					<image v-else :src="`../../static/tabBar/${item.id+1}.png`"></image>
+					<view :class="{'tabBar_name':true,'nav_active':show_index == item.id}">{{item.name}}</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import tabGame from '@/components/tabBar/game.vue'
+	import tabDiscovery from '@/components/tabBar/discovery.vue'
+	import tabInformation from '@/components/tabBar/information.vue'
+	import tabData from '@/components/tabBar/Data.vue'
+	import tabMycenter from '@/components/tabBar/mycenter.vue'
+	export default {
+		components: {
+			tabGame,//比赛    0
+			tabDiscovery,//发现    1
+			tabInformation,//资讯   2
+			tabData,//数据   3
+			tabMycenter//个人中心  4
+		},
+		data() {
+			return {
+				show_index:0,//控制显示那个组件
+				tab_nav_list :[{'id':0,'name':'首页'},{'id':1,'name':'分类'},{'id':2,'name':'推荐'},{'id':3,'name':'购物车'},{'id':4,'name':'我'}],//菜单列表
+				is_lhp:false
+			}
+		},
+		onLoad() {
+			let _this = this
+			this.is_lhp = this.$is_bang
+			this.$nextTick(function(){
+				// 一定要等视图更新完再调用方法   -----------++++++++++++++++重要
+				setTimeout(function(){
+					uni.setNavigationBarColor({
+						frontColor: '#ffffff',
+						backgroundColor: '#6739b6'
+					})
+					_this.$refs.game.ontrueGetList()//初次加载第一个页面的请求数据
+				},100)
+			})
+			
+			console.log("是否为刘海屏",this.is_lhp ) 
+		},
+		methods: {
+			// 切换组件
+			cut_index(type){
+				console.log('----------------------------------',type)
+				let _this = this
+				_this.show_index = type
+				if(_this.show_index == 0){
+					uni.setNavigationBarColor({
+						frontColor: '#ffffff',
+						backgroundColor: '#6739b6'
+					})
+					_this.$refs.game.ontrueGetList()
+				}
+				else if(_this.show_index == 1){
+					_this.$refs.discovery.ontrueGetList()
+				}
+				else if(_this.show_index == 2){
+					_this.$refs.data.ontrueGetList()
+				}
+				else if(_this.show_index == 3){
+					uni.setNavigationBarColor({
+						frontColor: '#ffffff',
+						backgroundColor: '#ec008c'
+					})
+					_this.$refs.information.ontrueGetList()
+					
+				}
+				else if(_this.show_index == 4){
+					_this.$refs.mycenter.ontrueGetList()
+				}
+			},
+			onPullDownRefresh(){
+				uni.showToast({
+					title:`第${this.show_index+1}个页面的刷新`
+				})
+				setTimeout(function(){
+					uni.stopPullDownRefresh()
+				},2000)
+				console.log('下拉刷新四个组件公用的下拉刷新方法,根据在哪个页面下拉执行哪个页面的刷新方方法即可')
+				console.log('如果想要自定义刷新的话,插件市场就有一个   非常好用也非常容易入手')
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.tabBar{ width:100%;height: 98rpx;background: #fff;border-top:1px solid #E5E5E5;position: fixed;bottom:0px;left:0px;right:0px;display: flex;align-items: center;justify-content: center;
+		.tabBar_list{ width:86%;display: flex;justify-content: space-between;
+			image{ width:48rpx;height: 48rpx;margin-bottom:2rpx}
+			.tabBar_item{ width:68rpx;display: flex;justify-content: center;align-items: center;flex-direction: column;font-size: 20rpx;color: #969BA3;}
+			.tabBar_item2{
+				width:68rpx;height:100%;display: flex;justify-content: center;align-items: center;flex-direction: column;font-size: 20rpx;color: #969BA3;margin-top:-20rpx;position: relative;z-index: 101;
+				image{ width:68rpx;height: 68rpx;}
+			}
+		 } 
+	}
+	.border_box{
+		// pointer-events: none; 事件穿透解决z-index层级问题
+		width:100%;height: 100rpx;display: flex;justify-content: center;align-items: center;position: fixed;left:0px;bottom:50rpx;z-index: 100;pointer-events: none;
+		.tabBar_miden_border{   width:100rpx;height:50rpx;border-top:2rpx solid #E5E5E5;border-radius:50rpx 50rpx 0 0; /* 左上、右上、右下、左下 */background: #fff;}
+	}
+	.nav_active{color: #007AFF;}
+</style>

+ 247 - 0
market/pages/login/login.vue

@@ -0,0 +1,247 @@
+<template>
+	<view class="container login">
+		<view class="login-main">
+			<image class="logo" src="../../static/login-logo@3x.png" mode=""></image>
+			<text class="logo-text">生美/医美采购服务平台</text>
+		</view>
+		<view class="login-form">
+			<view class="login-input">
+				<input type="text" 
+					   v-model="accountNumber"  
+					   maxlength="30" 
+					   class="input" 
+					   placeholder="请输入邮箱/手机号"
+				/>
+			</view>
+			<view class="login-input">
+				<input v-show="isShowEye" type="text" v-model="password"  maxlength="18" class="input" placeholder="请输入密码" autocomplete="new-password"/>
+				<input v-show="!isShowEye" type="password" v-model="password"  :password="true" maxlength="18" class="input" placeholder="请输入密码" autocomplete="new-password"/>
+				<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-pwd" @click.stop="this.$api.navigateTo('/pages/login/password')">忘记密码?</view>
+			</view>
+		</view>
+		<view class="login-btn"  @click="confirmLogin">登录</view>
+		<view class="login-btn-last" @click.stop="this.$api.navigateTo(`/pages/login/login?data=${getOption}`)">邀请码登录</view>
+		<view class="login-tel">客服热线:0755-22907771</view>
+	</view>
+</template>
+
+<script>
+	import { mapMutations } from 'vuex';
+	import authorize from '@/common/config/authorize.js' 
+	import { organizationLogin } from '@/api/use.js' 
+	var self;
+	export default{
+		data() {
+			return{
+				isShowEye:false,
+				iconEyes:'icon-yanjing_yincang_o',
+				iconEyen:'icon-yanjing_xianshi_o',
+				accountNumber:'',  //用户登录账号
+				password:'',	   //用户登录密码	
+				toestText:'',
+				telPhone:'',
+				loginType:'',		//跳转类型
+				alertText:'',
+				listType: '',
+				listVal: '',
+				detilType:'',
+				id:'',			//商品ID
+				getOption:''	//页面传递参数
+			}
+		},
+		onLoad(option) {
+			console.log(option)
+			this.getOption = JSON.stringify(option)
+			
+		},
+		methods:{
+			...mapMutations(['login']),
+			confirmLogin(){
+				let params ={
+						mobileOrEmail:this.accountNumber,
+						password:this.password,
+						source:'www',
+				}
+				organizationLogin(params).then(response =>{
+					if(response.code == '0' ){
+						this.storeUpdataeStatus(response.data)
+						this.$api.navigateTo(`/pages/login/bindwechat?data=${JSON.stringify(this.getOption)}&codeType=${response.code}`)
+					}else if(response.code == '4'){
+						this.storeUpdataeStatus(response.data)					
+						this.$api.navigateTo(`/pages/login/bindemail?data=${JSON.stringify(this.getOption)}&codeType=${response.code}`)
+					}else if(response.code == '-3'){
+						this.storeUpdataeStatus(response.data)
+						this.$util.modal('',response.msg,'前往修改','',false,() =>{
+							 this.$api.navigateTo('/pages/login/apply')
+						})
+					}else{
+						this.$util.msg(response.msg,2000);
+					}
+				})
+			},
+			storeUpdataeStatus(data){
+				let user_key = {
+						clubID:data.clubID,
+						shopID:data.shopID,
+						userID:data.userID,
+						bindMobile:data.bindMobile,
+				}						
+				uni.setStorageSync('token',data.token)
+				this.$store.commit('updateStatus',user_key)
+				this.login(data);
+			},
+			passwordClick() { //密码显隐操作
+				this.isShowEye = !this.isShowEye;
+			},
+		},
+		onShow() {
+		
+		}
+	}
+</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: 198rpx;
+			padding: 170rpx 0 60rpx 0;
+			.logo{
+				width: 138rpx;
+				height: 118rpx;
+				display: block;
+			}
+			.logo-text{
+				font-size: 30rpx;
+				line-height: 44rpx;
+				color: $color-system;
+				font-weight: 600;
+				margin-top: 20rpx;
+			}
+		}
+		.login-input{
+			width: 654rpx;
+			height: 40rpx;
+			padding: 24rpx;
+			margin: 0 auto;
+			margin-bottom: 20rpx;
+			background: #F7F7F7;
+			border-radius: 14rpx;
+			position: relative;
+			.input{
+				width: 100%;
+				height: 100%;
+				background: #F7F7F7;
+				font-size: $font-size-28;
+				line-height: 40rpx;
+				color: #333333;
+				border-radius: 14rpx;
+			}
+			.iconfont{
+				position: absolute;
+				right: 0;
+				top: 0;
+				font-size: 44rpx;
+				color: #999999;
+				font-weight: bold;
+				z-index: 99;
+				width: 96rpx;
+				height: 96rpx;
+				line-height: 96rpx;
+				text-align: center;
+			}
+			&.link{
+				background: #FFFFFF;
+				margin-bottom: 40rpx;
+				padding: 0 24rpx;
+				line-height: 40rpx;
+				font-size: $font-size-28;
+				.login-reg{
+					float: left;
+					color: $color-system;
+				}
+				.login-pwd{
+					float: right;
+					color: $text-color;
+				}
+			}
+		}
+		.login-btn{
+			width: 702rpx;
+			height: 88rpx;
+			border-radius: 14rpx;
+			font-size: $font-size-28;
+			line-height: 88rpx;
+			color: #FFFFFF;
+			margin: 0 auto;
+			text-align: center;
+			background: $btn-confirm;
+		}
+		.login-btn-last{
+			width: 702rpx;
+			font-size: $font-size-28;
+			line-height: 160rpx;
+			margin: 0 auto;
+			color: $text-color;
+			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: 100rpx;
+		}
+		.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>

+ 418 - 0
market/pages/user/user.vue

@@ -0,0 +1,418 @@
+<template>
+	<view class="container user clearfix" :style="{paddingBottom:isIphoneX?'140rpx':'98rpx'}">
+		<view class="user-section" :class="[!isShowNoLogin  ? 'show' : 'none']">
+			<view class="u-header">
+				<image src="https://admin-b.caimei365.com/userfiles/1/images/photo/2020/03/%E6%88%91%E7%9A%84%20%E2%80%93%201%403x.png" mode=""></image>
+				<view class="u-header-main">
+					<view class="user-item">
+						<view class="logo-m">
+							<image :src="headpic == null? '../../../static/temp/icon-club@3x.png' : headpic" mode=""></image>
+							<text class="txt">协销员工</text>
+						</view>
+					</view>
+					<view class="user-item">
+						<text class="u-h1">{{name}}</text>
+					</view>
+				</view>
+			</view>
+			<!-- 订单 -->
+			<view class="user-order">
+				<view class="tab-title">
+					<text class="cell-tit">我的订单</text>
+					<text class="cell-more iconfont icon-xiayibu">查看更多</text>
+				</view>
+				<view class="order-section">
+					<view class="order-item" @click="navigator('/pages/user/order/order-list?state=1')" hover-class="common-hover"  :hover-stay-time="50">
+						<view class="order-icon">
+							<image src="../../../static/temp/order1@3x.png" mode=""></image>
+							<text 	v-if="paymentCount >0" 
+									class="uni-badge uni-badge-error uni-small uni-badge--small icon-num" 
+									:class="[paymentCount < 10 ? 'goleft':'']">
+									{{paymentCount == 99? '99+' : paymentCount}}
+							</text>
+						</view>
+						<text class="order-t">待付款</text>
+					</view>
+					<view class="order-item" @click="navigator('/pages/user/order/order-list?state=2')"  hover-class="common-hover" :hover-stay-time="50">
+						<view class="order-icon">
+							<image src="../../../static/temp/order2@3x.png" mode=""></image>
+							<text  v-if="waitShipmentsCount >0" 
+								   class="uni-badge uni-badge-error uni-small uni-badge--small icon-num " 
+								   :class="[waitShipmentsCount < 10 ? 'goleft':'']">
+								   {{waitShipmentsCount == 99? '99+' : waitShipmentsCount}}
+							</text>
+						</view>
+						<text class="order-t">待发货</text>
+					</view>
+					<view class="order-item" @click="navigator('/pages/user/order/order-list?state=3')" hover-class="common-hover"  :hover-stay-time="50">
+						<view class="order-icon">
+							<image src="../../../static/temp/order3@3x.png" mode=""></image>
+							<text   v-if="shipmentsCount >0" 
+									class="uni-badge uni-badge-error uni-small uni-badge--small icon-num" 
+									:class="[shipmentsCount < 10 ? 'goleft':'']">
+									{{shipmentsCount == 99? '99+' : shipmentsCount}}
+							</text>
+						</view>
+						<text class="order-t">待确认</text>
+					</view>
+					<view class="order-item" @click="navigator('/pages/user/order/order-list?state=4')" hover-class="common-hover"  :hover-stay-time="50">
+						<view class="order-icon">
+							<image src="../../../static/temp/order4@3x.png" mode=""></image>
+							<text 	v-if="salesReturnCount >0" 
+									class="uni-badge uni-badge-error uni-small uni-badge--small icon-num" 
+									:class="[salesReturnCount < 10 ? 'goleft':'']">
+									{{salesReturnCount == 99? '99+' : salesReturnCount}}
+							</text>
+						</view>
+						<text class="order-t">已发货</text>
+					</view>
+					<view class="order-item" @click="navigator('/pages/user/order/order-list?state=0')" hover-class="common-hover"  :hover-stay-time="50">
+						<view class="order-icon">
+							<image src="../../../static/temp/order5@3x.png" mode=""></image>
+						</view>
+						<text class="order-t">退货/款</text>
+					</view>
+				</view>
+			</view>
+			<!-- 底部跳转 -->
+			<view class="foot-list">
+				<view class="list-cell-item">
+					<view class="list-cell"  v-for="(item, index) in firstList" :key="index" @click="navigator(item.path)" hover-class="cell-hover" :hover-stay-time="50">
+						<text class="cell-tit">{{item.name}}</text>
+						<text class="cell-more iconfont icon-xiayibu"></text>
+					</view>
+				</view>
+			</view>
+		</view>	
+		<!-- 底部tabbar -->
+		<cu-tabbar :active-index ="2"></cu-tabbar>
+	</view>
+</template>
+<script>
+	import cuTabbar from '@/components/cu-tabbar.vue'
+	import uniBadge from '@/components/uni-badge/uni-badge.vue'
+	import { mapState,mapMutations } from 'vuex'
+	import { personalInfo } from "@/api/use.js"
+	
+	export default{
+		components: {
+			uniBadge,
+			cuTabbar
+		},
+		data() {
+			return{	
+				name:'采美采购商城',
+				headpic:'',
+				userMoney:0.00,
+				contactNumber:'',
+				openid:'',
+				aboutHtml:'',
+				telPhone:'',
+				paymentCount:0, //待付款角标
+				waitShipmentsCount:0, //待收货角标
+				shipmentsCount:0,  //已发货角标
+				salesReturnCount:'',//退货/款角标
+				isShowNoLogin:false,
+				isIphoneX:this.$store.state.isIphoneX,
+				firstList:[
+					{name:'机构列表',path:'/pages/user/operator/list'},
+					{name:'帮机构下单',path:'/pages/login/information'},
+					{name:'拉机构上线',path:'/pages/user/address/address'}
+				],
+			}
+		},
+		onLoad(){
+			
+		},
+		computed: {
+			...mapState(['hasLogin','userInfo'])
+		},
+		methods:{
+			initData(){
+				personalInfo({userID:this.userID}).then(response =>{
+					this.$store.commit('updateAllNum',response.data.count)
+					let user_data =response.data
+					let _userData = user_data.user
+					let _clubData = user_data.club
+					if(_userData.ableUserMoney == 0){
+						this.userMoney = '0.00';
+					}else{
+						let i =  _userData.ableUserMoney.toString().lastIndexOf('.');
+						let money;
+						if(i==-1){
+							money = this.$api.FormatMoney(_userData.ableUserMoney); //会所剩余余额
+							this.userMoney = money +'.00'
+						}else{
+							money = this.$api.FormatMoney(_userData.ableUserMoney); //会所剩余余额
+							this.userMoney = money
+						}
+					}
+					this.name = _clubData.name //会所名称
+					this.headpic = _userData.image //会所头像
+					this.contactNumber = user_data.organize.contactNumber //联系电话		
+					this.paymentCount = this.showBadge(user_data.paymentCount)//待付款
+					this.waitShipmentsCount = this.showBadge(user_data.waitShipmentsCount)//待收货		
+					this.shipmentsCount = this.showBadge(user_data.shipmentsCount)//已发货	
+					this.salesReturnCount = this.showBadge(user_data.salesReturnCount)//退货/款	
+					let clubInfo ={name:this.name,image:this.headpic,clubID:_clubData.clubID}
+					uni.setStorage({//缓存机构
+						key: 'clubInfo',  
+						data: clubInfo  
+					}) 
+				}).catch(response =>{
+					this.$util.msg(response.msg,2000)
+				})
+			},
+			toPhone(){
+				uni.makePhoneCall({
+				    phoneNumber:this.contactNumber //仅为示例
+				});
+			},
+			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()
+			},
+			onShow(){
+				if(!this.hasLogin){
+					this.isShowNoLogin = true;
+					this.$api.redirectTo('/pages/login/login-accont?type=4')
+					this.$store.commit('updateAllNum',0)
+				}else{
+					this.$api.getStorage().then((resolve) =>{
+						// console.log(resolve)
+						this.userID = resolve.userID
+						this.initData()
+						this.isShowNoLogin = false;
+					})
+				}
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	@import "@/uni.scss";
+	page{
+		background-color: #F7F7F7;
+	}
+	.user{
+		width: 100%;
+		height: 100%;
+		position:relative;
+		background: rgba(247, 247, 247, 1);
+	}	
+	.user-section.none{
+		display: none;
+	}
+	.user-section.show{
+		display: block;
+	}
+	.u-header{
+		width: 100%;
+		height: 400rpx;
+		position: relative;
+		image{
+			width: 100%;
+			height: 400rpx;
+		}
+	}	
+	.u-header-main{
+		width: 100%;
+		height: 284rpx;
+		padding: 58rpx 0;
+		position: absolute;
+		top: 0;
+		left: 0;
+		.user-item{
+			width: 100%;
+			display: flex;
+			flex-direction: column;
+			align-items: center;
+			margin-bottom: 16rpx;
+			.u-h1{
+				width: 410rpx;
+				font-size: $font-size-28;
+				line-height: 40rpx;
+				color: #FFFFFF;
+				margin-bottom: 8rpx;
+				-o-text-overflow: ellipsis;
+				text-overflow: ellipsis;
+				display: -webkit-box;
+				word-break: break-all;
+				-webkit-box-orient: vertical;
+				-webkit-line-clamp: 1;
+				overflow: hidden;
+				align-items: center;
+			}
+			.u-p{
+				font-size: $font-size-24;
+				line-height: 40rpx;
+				color: #FFFFFF;
+			}
+		}
+		.logo-m{
+			width: 144rpx;
+			height: 144rpx;
+			border: 2rpx solid #FFFFFF;
+			border-radius: 100%;
+			background: $bg-color;
+			position: relative;
+			.txt{
+				width: 144rpx;
+				height: 42rpx;
+				display: inline-block;
+				background: linear-gradient(45deg,rgba(225,86,22,1) 0%,rgba(255,177,0,1) 100%);
+				border-radius: 21rpx;
+				line-height: 42rpx;
+				text-align: center;
+				color: #FFFFFF;
+				font-size: $font-size-22;
+				position: absolute;
+				bottom: -10rpx;
+				left: 0;
+			}
+			image{
+				width: 144rpx;
+				height: 144rpx;
+				border-radius: 100%;
+			}
+		}
+	}
+
+	.user-order{
+		width: 702rpx;
+		height: auto;
+		padding: 0 24rpx;
+		background-color: $bg-color;
+		margin-bottom: 24rpx;
+	}	
+	.tab-title{
+		font-size: $font-size-28;
+		line-height: 80rpx;
+		color: #333333;
+		text-align:left;
+		border-bottom: 1px solid #F8F8F8;
+		.cell-tit{
+			font-size: $font-size-28;
+			color: $text-color;
+		}
+	}
+	.order-section{
+		display: flex;
+		justify-content: space-around;
+		align-items: center;
+		flex-wrap:wrap;
+		height: 99rpx;
+		padding: 24rpx 0;
+	}
+	.order-item{
+		display: flex;
+		flex-direction: column;
+		align-items: center;
+		width: 98rpx;
+		position: relative;
+		margin-right: 53rpx;
+		&:last-child{
+			margin-right: 0;
+		}
+		.order-icon{
+			width: 52rpx;
+			height: 52rpx;
+			position: relative;
+			image{
+				width: 52rpx;
+				height: 52rpx;
+			}
+			.icon-num{
+				position: absolute;
+				right:-24rpx;
+				top: -9rpx;
+			}
+			.icon-num.goleft{
+				right: -12rpx;
+			}
+		}
+		.order-t{
+			line-height: 50rpx;
+			font-size: $font-size-24;
+			color: $text-color;
+		}
+	}
+
+
+	.foot-list{
+		width: 100%;
+		// margin-bottom: 150rpx;
+	}	
+	.list-cell-item{
+		width: 702rpx;
+		height: auto;
+		margin-bottom: 24rpx;
+		padding:0 24rpx;
+		background: $bg-color;
+	}
+	.list-cell{
+		display:flex;
+		width: 100%;
+		align-items:baseline;
+		line-height:100rpx;
+		position:relative;
+		background: $bg-color;
+		justify-content: center;
+		// border-bottom: 1px solid #EBEBEB;
+		&.cell-hover{
+			background:#fafafa;
+		}
+		.cell-more{
+			align-self: baseline;
+			font-size:$font-size-28;
+			color:$text-color;
+			margin-left:10rpx;
+		}
+		.cell-tit{
+			flex: 1;
+			font-size: $font-size-28;
+			color: $text-color;
+			margin-right:10rpx;
+		}
+		.cell-tip{
+			font-size: $font-size-28;
+			color: $text-color;
+		}
+	}	
+	.list-cell.last{
+		border-bottom: none;
+	}
+	.uni-badge--small {
+		-webkit-transform: scale(.8);
+		-ms-transform: scale(.8);
+		transform: scale(.8);
+		-webkit-transform-origin: center center;
+		-ms-transform-origin: center center;
+		transform-origin: center center;
+	}
+	.uni-badge {
+		font-family: 'Helvetica Neue', Helvetica, sans-serif;
+		-webkit-box-sizing: border-box;
+		box-sizing: border-box;
+		font-size: 12px;
+		line-height: 1;
+		display: inline-block;
+		padding: 3px 6px;
+		color: #333;
+		border-radius: 100px;
+		background-color: #f1f1f1;
+	}
+	.uni-badge-error {
+		color: #fff;
+		background-color: #dd524d;
+	}
+</style>

+ 21 - 4
pages.json

@@ -238,13 +238,30 @@
     ],
 	"subPackages": [
 		{
-			"root": "extend",
+			"root": "market",
 			"pages": [
 				{
-					"path": "pages/register/register",
+					"path": "pages/login/login",
 					"style": {
-						"navigationBarTitleText": "注册",
-						"navigationStyle":"custom"
+						"navigationBarTitleText": "登录"
+					}
+				},
+				{
+					"path": "pages/home/home",
+					"style": {
+						"navigationBarTitleText": "首页"
+					}
+				},
+				{
+					"path": "pages/category/category",
+					"style": {
+						"navigationBarTitleText": "分类"
+					}
+				},
+				{
+					"path": "pages/user/user",
+					"style": {
+						"navigationBarTitleText": "账户中心"
 					}
 				}
 			]

+ 3 - 2
pages/tabBar/home/home.vue

@@ -260,7 +260,8 @@
 				console.log(e.detail.query)
 			},
 			showTost(){
-				this.$util.msg("正在开发中,敬请期待~",2000);
+				this.$api.navigateTo('/market/pages/home/home')
+				// this.$util.msg("正在开发中,敬请期待~",2000);
 				// uni.navigateToMiniProgram({
 				// 	appId: 'wx5a5cda32926f55ac',
 				// 	path: '/pages/tabBar/home/home',
@@ -543,7 +544,7 @@
 				border-radius: 10rpx;
 			}
 			.title-none{
-				font-size: $font-size-28;
+				font-size: $font-size-26;
 				color: #FF2A2A;
 				line-height: 20rpx;
 				margin-top: 18rpx;

+ 1 - 1
pages/user/address/address.vue

@@ -129,7 +129,7 @@
 			},
 			addAddress(type,item){
 				uni.navigateTo({
-					url: `/user/address/addressManage?type=${type}&data=${JSON.stringify(item)}`
+					url: `/pages/user/address/addressManage?type=${type}&data=${JSON.stringify(item)}`
 				})
 			},
 			//删除收货地址

+ 4 - 3
pages/user/operator/addoperator.vue

@@ -11,15 +11,16 @@
 				<button class="add-btn" @click="confirm">确定</button>
 			</view>
 			<view class="operator-text">
-				<view class="title" @click="this.$api.navigateTo('/user/operator/bindstep')">
+				<view class="title" @click="this.$api.navigateTo('/pages/user/operator/bindstep')">
 					<text class="iconfont icon-gantanhao-yuankuang"></text>
 					<text class="text-m">运营人员绑定步骤</text>
 					<text class="text-s">(点击查看图片引导)</text>
 				</view>
 				<view class="text-main">
 					<view>1. 添加运营人员后,运营人员会收到一条邀请码短信</view>
-					<view>2.运营人员在微信搜索“采美采购商城”小程序,在登录页使用邀请码授权绑定微信或关注“采美365网”公众号,在聊天框中输入“绑定运营人员”并发送,点击自动回复的链接,然后输入邀请码绑定微信</view>
-					<view>3. 绑定微信后,运营人员可通过微信授权直接登录采美365网</view>
+					<view>2. 运营人员在微信搜索【采美采购商城】小程序,或者搜索关注【采美365网】,从底部菜单进入【采美采购商城】小程序</view>
+					<view>3. 使用邀请码进行登录并绑定微信</view>
+					<view>4. 绑定后,运营人员可通过微信直接登录采美365网</view>
 				</view>
 			</view>
 		</view>

+ 1 - 1
pages/user/operator/list.vue

@@ -59,7 +59,7 @@
 			</view>
 		</view>
 		<div class="operator-btn" :style="{paddingBottom :isIphoneX ? '68rpx' : '0rpx'}">
-			<view class="add-btn" @click="this.$api.navigateTo('/user/operator/addoperator')">添加运营人员</view>
+			<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">

+ 2 - 2
pages/user/order/create-order.vue

@@ -211,7 +211,7 @@
 					if(response.code === 1){
 						this.submitState ='success'
 						let data = {orderID:response.data.orderID}
-						this.$api.navigateTo(`/user/order/order-cashier?type=${this.submitState}&data=${JSON.stringify({data:data})}`)
+						this.$api.navigateTo(`/pages/user/order/order-cashier?type=${this.submitState}&data=${JSON.stringify({data:data})}`)
 					}else if(response.code === 2){
 						this.submitState ='nosuccess'
 						let data = {
@@ -220,7 +220,7 @@
 								orderMark:response.data.orderMark,
 								payableAmount:response.data.payableAmount
 						}
-						this.$api.navigateTo(`/user/order/order-cashier?type=${this.submitState}&data=${JSON.stringify({data:data})}`)
+						this.$api.navigateTo(`/pages/user/order/order-cashier?type=${this.submitState}&data=${JSON.stringify({data:data})}`)
 					}else{
 						this.$util.msg(response.msg,2000);
 					}

+ 3 - 3
pages/user/order/myOrder.vue

@@ -247,7 +247,7 @@
 			},
 			detail(id) {//订单详情跳转
 				this.isModalLayer = true;	
-				this.$api.navigateTo(`/user/order/order-details?state=${this.currentTab}&orderID=${id}`)
+				this.$api.navigateTo(`/pages/user/order/order-details?state=${this.currentTab}&orderID=${id}`)
 			},
 			handButtonConfirm(data) {//获取点击
 				console.log('点击按钮的类型是',data);
@@ -264,7 +264,7 @@
 						break
 					case 'query':
 						this.isModalLayer = true;
-						this.$api.navigateTo('/user/order/order-logistics?orderID='+data.orderId)
+						this.$api.navigateTo('/pages/user/order/order-logistics?orderID='+data.orderId)
 						break
 					case 'confirm':
 						this.handOrderConfirm(data.orderId);
@@ -325,7 +325,7 @@
 			    }
 				return {
 					title: '您有新的分享订单,快来查看吧~',
-					path: `/user/order/orderShareLogin?orderID=${this.btnoRderID}&userID=${this.userID}`,
+					path: `/pages/user/order/orderShareLogin?orderID=${this.btnoRderID}&userID=${this.userID}`,
 					imageUrl:'https://img.caimei365.com/group1/M00/03/8C/Cmis215XHXSAWWkhAAXDP4-6m_c397.png'
 				}
 			},

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

@@ -31,7 +31,7 @@
 				</view>	
 				<view class="cash-btn" :style="{paddingBottom :isIphoneX ? '68rpx' : '20rpx'}">
 					<view class="btn btn-share" @click="onShareCode">分享订单<view class="tips" v-if="isShareCode">分享码:{{shareCode}}</view></view>
-					<view class="btn btn-query" @click="this.$api.navigateTo('/user/order/order-details?type=confim&orderID='+shareOrderID)">查看订单</view>
+					<view class="btn btn-query" @click="this.$api.navigateTo('/pages/user/order/order-details?type=confim&orderID='+shareOrderID)">查看订单</view>
 					<view class="btn btn-makes" @click="this.$api.switchTabTo('/pages/tabBar/home/home')">继续采购</view>
 				</view>
 			</view>
@@ -162,7 +162,7 @@
 			    }
 				return {
 					title: '您有新的分享订单,快来查看吧~',
-					path: `/user/order/orderShareLogin?orderID=${this.shareOrderID}&userID=${this.userID}`,
+					path: `/pages/user/order/orderShareLogin?orderID=${this.shareOrderID}&userID=${this.userID}`,
 					imageUrl:'https://admin-b.caimei365.com/userfiles/1/images/photo/2020/03/%E8%AE%A2%E5%8D%95%E5%88%86%E4%BA%AB%E5%9B%BE%403x.png'
 				}
 			},

+ 3 - 3
pages/user/order/order-details.vue

@@ -138,7 +138,7 @@
 						this.handCenceConfirm();
 						break
 					case 'query':
-						this.$api.navigateTo('/user/order/order-logistics?orderID='+this.orderID)
+						this.$api.navigateTo('/pages/user/order/order-logistics?orderID='+this.orderID)
 						break
 					case 'confirm':
 						this.handOrderConfirm()
@@ -162,7 +162,7 @@
 							if(this.shareType ==='share'){
 								this.$api.switchTabTo('/pages/tabBar/user/user')
 							}else{
-								this.$api.redirectTo(`/user/order/order-list?type=detele&state=${this.state}`)
+								this.$api.redirectTo(`/pages/user/order/order-list?type=detele&state=${this.state}`)
 							}
 						},500)
 					}).catch(response =>{
@@ -188,7 +188,7 @@
 			    }
 				return {
 					title: '您有新的分享订单,快来查看吧~',
-					path: `/user/order/orderShareLogin?orderID=${this.orderID}&userID=${this.userID}`,
+					path: `/pages/user/order/orderShareLogin?orderID=${this.orderID}&userID=${this.userID}`,
 					imageUrl:'https://admin-b.caimei365.com/userfiles/1/images/photo/2020/03/%E8%AE%A2%E5%8D%95%E5%88%86%E4%BA%AB%E5%9B%BE%403x.png'
 				}
 			},

+ 3 - 3
pages/user/order/order-list.vue

@@ -285,7 +285,7 @@
 			detail(id) {//订单详情跳转
 				console.log(id)
 				this.isModalLayer = true;	
-				this.$api.navigateTo(`/user/order/order-details?state=${this.currentTab}&orderID=${id}`)
+				this.$api.navigateTo(`/pages/user/order/order-details?state=${this.currentTab}&orderID=${id}`)
 			},
 			handButtonConfirm(data) {//获取点击
 				console.log('点击按钮的类型是',data);
@@ -302,7 +302,7 @@
 						break
 					case 'query':
 						this.isModalLayer = true;
-						this.$api.navigateTo('/user/order/order-logistics?orderID='+data.orderId)
+						this.$api.navigateTo('/pages/user/order/order-logistics?orderID='+data.orderId)
 						break
 					case 'confirm':
 						this.handOrderConfirm(data.orderId);
@@ -355,7 +355,7 @@
 			    }
 				return {
 					title: '您有新的分享订单,快来查看吧~',
-					path: `/user/order/orderShareLogin?orderID=${this.btnoRderID}&userID=${this.userID}`,
+					path: `/pages/user/order/orderShareLogin?orderID=${this.btnoRderID}&userID=${this.userID}`,
 					imageUrl:'https://admin-b.caimei365.com/userfiles/1/images/photo/2020/03/%E8%AE%A2%E5%8D%95%E5%88%86%E4%BA%AB%E5%9B%BE%403x.png'
 				}
 			},

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

@@ -98,7 +98,7 @@
 				})
 			},
 			queryLogistics(){//跳转查询物流页面
-				this.$api.navigateTo('/user/order/order-logistics?orderID='+this.orderID)
+				this.$api.navigateTo('/pages/user/order/order-logistics?orderID='+this.orderID)
 			},
 		},
 		onShow() {

+ 3 - 3
pages/user/order/orderShareLogin.vue

@@ -49,10 +49,10 @@
 						if (response.code === 0) {
 							if(response.data == true){
 								console.log('同为会所运营人员查看订单详情')
-								this.$api.navigateTo(`/user/order/order-details?type=share&orderID=${this.orderID}`)
+								this.$api.navigateTo(`/pages/user/order/order-details?type=share&orderID=${this.orderID}`)
 							}else{
 								console.log('游客第二次查看订单详情')
-								this.$api.redirectTo(`/user/order/order-sharedetails?orderID=${this.orderID}`)
+								this.$api.redirectTo(`/pages/user/order/order-sharedetails?orderID=${this.orderID}`)
 							}
 						}else if(response.code === -2){
 							this.$util.modal('提示',response.msg,'确定','',false,() =>{
@@ -83,7 +83,7 @@
 					orderShareCode(params).then(response =>{
 						if (response.code === 0) {
 							console.log('游客第一次查看订单详情')
-							this.$api.redirectTo('/user/order/order-sharedetails?orderID='+this.orderID)
+							this.$api.redirectTo('/pages/user/order/order-sharedetails?orderID='+this.orderID)
 						}else{
 							this.$util.msg(response.msg,2000);
 						}

+ 1 - 1
pages/user/regularPurchase/regularPurchase.vue

@@ -124,7 +124,7 @@
 						id:this.handleData.productID,
 						productCount:this.number
 				}	
-				this.$api.navigateTo(`/user/order/create-order?type=prodcut&data=${JSON.stringify({data:productStp})}`)
+				this.$api.navigateTo(`/pages/user/order/create-order?type=prodcut&data=${JSON.stringify({data:productStp})}`)
 				setTimeout(() => {
 					this.specClass = 'none';
 				}, 200);

+ 1 - 1
pages/user/setting/password.vue

@@ -134,7 +134,7 @@
 			},
 			addAddress(type,item){
 				uni.navigateTo({
-					url: `/user/address/addressManage?type=${type}&data=${JSON.stringify(item)}`
+					url: `/pages/user/address/addressManage?type=${type}&data=${JSON.stringify(item)}`
 				})
 			},
 			//删除收货地址

+ 1 - 1
pages/user/setting/phone.vue

@@ -134,7 +134,7 @@
 			},
 			addAddress(type,item){
 				uni.navigateTo({
-					url: `/user/address/addressManage?type=${type}&data=${JSON.stringify(item)}`
+					url: `/pages/user/address/addressManage?type=${type}&data=${JSON.stringify(item)}`
 				})
 			},
 			//删除收货地址

+ 1 - 0
uni.scss

@@ -23,6 +23,7 @@ $green-color: #62BF00;
 
 /* 字体大小变量 */
 $font-size-20:20rpx;
+$font-size-22:22rpx;
 $font-size-24:24rpx;
 $font-size-26:26rpx;
 $font-size-28:28rpx;