yuwenjun1997 пре 2 година
родитељ
комит
cf7fbf5e91

+ 3 - 4
App.vue

@@ -1,9 +1,8 @@
 <script>
-	
 	import appMixins from '@/mixins/appMixins.js'
 	export default {
 		mixins: [appMixins],
-		onLaunch: function() {
+		onLaunch() {
 			//小程序热更新代码
 			const updateManager = uni.getUpdateManager()
 			updateManager.onCheckForUpdate(function(res) {
@@ -23,10 +22,10 @@
 			this.initSetSystemInfo()
 			this.appUpdataRefresh()
 		},
-		onShow: function() {
+		onShow() {
 			
 		},
-		onHide: function() {
+		onHide() {
 			console.log('App Hide')
 		},
 	}

+ 6 - 0
main.js

@@ -5,6 +5,9 @@ import './services/index.js'
 import * as Api from '@/common/config/caimeiApi.js'
 import * as Regs from '@/common/config/common.js'
 import { dateFormat } from './utils/util.js'
+import ResidenceTime from './plugins/simple-residence-time'
+import residence from './utils/residence.js'
+
 // 友盟
 import Uma from './plugins/uma'
 
@@ -16,6 +19,7 @@ import cmCustom from './components/cm-custom/cm-custom.vue'
 import scrollTop from '@/components/cm-module/scrollTop/scrollTop.vue'
 import CityPicker from '@/components/mpvue-citypicker/mpvueCityPicker.vue' //全局注册地址组件
 
+
 Vue.component('cu-custom', cuCustom)
 Vue.component('au-custom', auCustom)
 Vue.component('cm-custom', cmCustom)
@@ -55,6 +59,8 @@ App.mpType = 'app'
 
 // 使用插件
 Vue.use(Uma)
+Vue.use(ResidenceTime, residence)
+
 
 const app = new Vue({
     ...App

+ 72 - 34
mixins/cmSysMixins.js

@@ -1,48 +1,86 @@
 // 统计数据
-// 统计类型 1:首页banner;2:直播模块;3:最新活动;4:热门文章;5:新品橱窗;6:活动列表
 import Vue from 'vue'
-const cmSysVitaMixins = {
+const defaultParams = {
+    pagePath: '', //页面路径
+    accessDuration: 0, //浏览时长初始值为 0
+    pageType: '', //页面类型
+    pageLabel: '', //页面标签
+    userId: 0, //用户Id
+    productId: 0 //商品Id
+}
+const cmSysMixins = {
     data() {
-	    return {
-            rowseTime: 0,  // 浏览时长初始值为 0
+        return {
+            cmSysParams:Object.assign({}, defaultParams),
             clearTimeSet: null,
-	    }
+            enterTime:null,
+            outTime:null
+        }
     },
-    mounted(){
-        this.setTime() // 页面加载完成后开始计时
+    onLoad() {
+        let that = this
+        // this.cmSysVitaSetTime() // 页面加载完成后开始计时
+        // uni.addInterceptor('navigateTo', { //监听跳转
+        //     success(e) {
+        //         console.log('navigateTo============')
+        //         that.cmSysVitaMixins()
+        //     }
+        // })
+        // uni.addInterceptor('redirectTo', { //监听关闭本页面跳转
+        //     success(e) {
+        //         console.log('redirectTo============')
+        //         that.cmSysVitaMixins()
+        //     }
+        // })
+        // uni.addInterceptor('switchTab', { //监听tabBar跳转
+        //     success(e) {
+        //         console.log('switchTab============')
+        //         that.cmSysVitaMixins()
+        //     }
+        // })
+        // uni.addInterceptor('navigateBack', { //监听tabBar跳转
+        //     success(e) {
+        //         console.log('navigateBack============')
+        //         that.cmSysVitaMixins()
+        //     }
+        // })
     },
     methods: {
-        setTime() {
+        async cmSysVitaSetTime() {
             //设置定时器
+            const userInfo = await this.$api.getStorage()
+            const pages = getCurrentPages()
+            const currentPage = pages[pages.length - 1]
+            this.cmSysParams.pagePath = `/${currentPage.route}`
+            this.cmSysParams.userId = userInfo ? userInfo.userId : 0
             this.clearTimeSet = setInterval(() => {
-                this.browseTime++
-                console.log(this.browseTime, '时长累计')
+                this.cmSysParams.accessDuration++
             }, 1000)
         },
-        cmSysVitaMixins(cmsSysType,productId) {
-            this.ProductService.sYsStatisticsTypesSatisticsNumber({typeId:cmsSysType,productId:productId})
-                .then(response => {
-                    const map = {
-					    1: '首页轮播',
-					    2: '直播模块',
-					    3: '最新活动',
-					    4: '热门文章',
-					    5: '新品橱窗',
-					    6: '活动列表'
-                    }
-                    const sYsText = map[cmsSysType]
-                    console.log(`<-------${sYsText}统计数据成功------>`)
-                })
-                .catch(error => {
-                    console.log('<-------上送用户行为记录异常------>')
-                })
+        cmSysVitaMixins() { // 上送后台接口,将浏览时长等信息传到后台,离开当前路由后调用
+            console.log(`页面路径:${this.cmSysParams.pagePath}`, `停留:${this.cmSysParams.accessDuration}s`,
+                `标签:${this.cmSysParams.pageLabel}`)
+            console.log('上送用户参数', this.cmSysParams)
+            // this.userRecordStatistics(this.cmSysParams)
+            this.cmSysParams = Object.assign({}, defaultParams)
+            clearInterval(this.clearTimeSet) // 离开页面后清除定时器
         },
-    },
-    onUnload() {
-        debugger
-        clearInterval(this.clearTimeSet) // 离开页面后清除定时器
-        this.cmSysVitaMixins() // 上送后台接口,将浏览时长等信息传到后台,离开当前路由后调用
-    },
+        userRecordStatistics(cmSysParams){// 上送用户行为记录接口
+            this.UserService.userRecordStatistics(cmSysParams)
+			    .then(response => {
+			        console.log('<-------上送用户行为记录成功------>')
+			    })
+			    .catch(error => {
+			        console.log('<-------上送用户行为记录异常------>')
+			    })
+        },
+    //     onHide(){
+			 // this.cmSysVitaMixins()
+    //     },
+    //     onUnload(){
+    //         this.cmSysVitaMixins()
+    //     }
+    }
 }
 
-export default cmSysVitaMixins
+export default cmSysMixins

+ 2 - 1
pages/goods/good-floor-temp.vue

@@ -108,8 +108,9 @@ export default {
 			})
 				.then(response => {
 					let data = response.data
-					this.typeSort = data.page.typeSort
+					this.typeSort = data.typeSort
 					this.pageList = data.floorList
+					uni.setStorageSync('pageLabel',`${data.contentLabel}`)
 					this.GetHomeInit()
 				})
 				.catch(error => {

+ 1 - 0
pages/goods/good-floor.vue

@@ -75,6 +75,7 @@
 					let data = response.data
 					this.typeSort = data.typeSort
 					this.pageList = data.floorList
+					uni.setStorageSync('pageLabel',`${data.contentLabel}`)
 					this.GetHomeInit()
 				}).catch(error =>{
 					this.$util.msg(error.msg,2000)

+ 4 - 1
pages/goods/good-hot.vue

@@ -311,6 +311,7 @@ export default{
 			this.listQuery.userId = userInfo.userId ? userInfo.userId : 0
 			this.vipFlag = userInfo.vipFlag ? userInfo.vipFlag : 0
 			this.userIdentity = userInfo.userIdentity ? userInfo.userIdentity : 0
+			uni.setStorageSync('pageLabel','新品')
 			this.GetHomeRecommend()
 			this.GetHomeNewBrandNames()
 			this.GetHomeNewFloorList()
@@ -478,7 +479,9 @@ export default{
 			this.OnReachBottomData()
 		}
 	},
-	onShow() {}
+	onShow() {
+		
+	}
 }
 </script>
 

+ 1 - 0
pages/goods/goods-classify.vue

@@ -462,6 +462,7 @@ export default {
 			this.listQuery.id = this.pathQueryId = this.brandParam.id = option.id
 			this.listQuery.identity = this.identity
 			this.listQuery.idType = this.classifyType = this.brandParam.idType = Number(option.classType)
+			uni.setStorageSync('pageLabel',option.title)
 			uni.setNavigationBarTitle({ title: option.title })
 			this.userId = userInfo.userId ? userInfo.userId : 0
 			this.shopId = userInfo.shopId ? userInfo.shopId : 0

+ 1 - 0
pages/goods/goods-instrument.vue

@@ -82,6 +82,7 @@
                     this.buttonLinkParam = page.linkParam
                     this.buttonLinkKeyword = page.keywords
                     uni.setNavigationBarTitle({title:page.title})
+					uni.setStorageSync('pageLabel',`${page.contentLabel}`)
 					this.skeletonShow = false
 				}).catch(error =>{
 					this.$util.msg(error.msg,2000)

+ 20 - 1
pages/goods/product.vue

@@ -848,7 +848,9 @@ export default {
 	},
 	onLoad(option) {
 		this.productId = this.couponParam.productId = option.id //获取商品ID
-		this.typeId = option.typeId
+		if (option.typeId) {
+			this.typeId = option.typeId
+		}
 		this.opentype = option.open
 		this.isShareType = option.type
 		this.linkPath = option.path
@@ -902,13 +904,30 @@ export default {
 				typeId: this.typeId
 			})
 				.then(response => {
+					let productLabel = ''
 					this.productImage = []
 					this.shop = response.data.shop
 					this.shopId = response.data.shopId
 					this.product = response.data
+					if(this.product.tinyTypeName){
+						productLabel = this.product.tinyTypeName
+					}else if(!this.product.tinyTypeName && this.product.smallTypeName){
+						productLabel = this.product.smallTypeName
+					}else{
+						productLabel = this.product.bigTypeName
+					}
+					//设置统计数据标签
+					uni.setStorageSync(
+						'productLabel',
+						`${productLabel}-${
+							this.product.brandName ? this.product.brandName : ''
+						}`
+					)
+					//判断是否可以跳转供应商主页
 					if (this.product.shopType === 2) {
 						this.isShowCaimeiShop = true
 					}
+					// 判断是否显示已收藏
 					if (this.product.userLike && this.product.userLike == 1) {
 						this.collectionType = true
 					} else {

+ 5 - 5
pages/h5/activity/activity-topic.vue

@@ -65,9 +65,9 @@
 				this.userId = resolve.userId ? resolve.userId : 0
 				this.shopId = resolve.shopId ? resolve.shopId : 0
 				this.userIdentity = resolve.userIdentity
-				this.GetInstrumentPageData()
+				this.GetActivityFloorData()
 			}).catch(error =>{
-				this.GetInstrumentPageData()
+				this.GetActivityFloorData()
 			})
 			setTimeout(()=>{
 				this.skeletonShow = false
@@ -78,16 +78,16 @@
 		},
 		methods:{
             
-			GetInstrumentPageData(){//获取楼层数据
+			GetActivityFloorData(){//获取楼层数据
 				this.CommonService.GetActivityFloorData({pageId:this.pageId,userId:this.userId,source:2}).then(response =>{
 					let data = response.data
-					console.log(data)
-					uni.setNavigationBarTitle({title:data.page.title})
 					this.typeSort = data.page.typeSort
 					this.pageList = data.floorList
 					this.headImage = data.page.crmHeadImage
 					this.pageInfo = data.page
 					this.isRequest =true
+					uni.setStorageSync('pageLabel',`${data.page.contentLabel}`)
+					uni.setNavigationBarTitle({title:data.page.title})
 					// this.GetHomeInit()
 				}).catch(error =>{
 					this.$util.msg(error.msg,2000)

+ 1 - 0
pages/h5/activity/activity.vue

@@ -23,6 +23,7 @@
 		onLoad(option) {
 			console.log(option)
 			uni.setNavigationBarTitle({title:option.title});
+			uni.setStorageSync('pageLabel',`${option.title}`)
 			this.activityPath = option.link;
 		},
 		methods:{

+ 2 - 2
pages/h5/other/brands.vue

@@ -13,12 +13,12 @@
 	
 	export default{
 		data(){
-			return{
+			return{ 
 				isIphoneX:this.$store.state.isIphoneX,
 				isBannerHome:true,
 				isBannerOems:false,
 				image1:[
-					'https://static.caimei365.com/www/ppzs/1.png',
+					'https://static.caimei365.com/www/ppzs/1.jpg',
 				],
 				isScrollTop:false
 			} 

+ 3 - 3
pages/search/search-supplier.vue

@@ -72,13 +72,12 @@
 </template>
 
 <script>
+	import wxLogin from '@/common/config/wxLogin.js'
+	import { mapState } from 'vuex'
 	import tuiLoadmore from '@/components/tui-components/loadmore/loadmore'
 	import tuiNomore from '@/components/tui-components/nomore/nomore'
 	import uniStars from '@/components/uni-stars/uni-stars.vue'
 	import authorize from '@/common/config/authorize.js'	
-	import wxLogin from '@/common/config/wxLogin.js'
-	import { mapState } from 'vuex'
-	
 	export default {
 		components:{
 			tuiLoadmore,
@@ -140,6 +139,7 @@
 				}
 			},
 			GetSearchSupplierList(){//查询供应商列表	
+				uni.setStorageSync('pageLabel',this.listQuery.keyword)
 				this.ShopService.GetSearchSupplierList(this.listQuery).then(response =>{
 					let data = JSON.parse(response.data)
 					let dataList = data.items

+ 2 - 3
pages/search/search.vue

@@ -488,10 +488,9 @@
 </template>
 
 <script>
-import { mapState, mapMutations } from 'vuex'
+import { mapState } from 'vuex'
 import modalLayer from '@/components/modal-layer'
 import uniGrader from '@/components/uni-grade/uni-grade.vue'
-import authorize from '@/common/config/authorize.js'
 import wxLogin from '@/common/config/wxLogin.js'
 import { debounce } from '@/common/config/common.js'
 const myDebounce = fn => debounce(fn, 500, false)
@@ -1811,7 +1810,7 @@ page {
     width: 100vw;
     height: calc(100vh - 88rpx);
     background: #f5f5f5;
-    
+
     .search-library-scroll {
         height: 95%;
     }

+ 2 - 2
pages/second/form/form.vue

@@ -284,13 +284,12 @@
 </template>
 
 <script>
+	import { mapState,mapMutations } from 'vuex'
 	import mpvueCityPicker from '@/components/mpvue-citypicker/mpvueCityPicker.vue'
 	import { uploadFileImage , uploadFilePdf } from '@/services/public.js'
 	import authorize from '@/common/config/authorize.js'
 	import $reg from '@/common/config/common.js'
-	import { mapState,mapMutations } from 'vuex'
 	export default{
-		name:'secondHandrelease',
 		components:{
 			mpvueCityPicker,
 		},
@@ -582,6 +581,7 @@
 		},
 		onShow() {
 			this.getBrandList()
+			uni.setStorageSync('pageLabel','发布二手')
 			this.$api.getComStorage('userInfo').then((resolve) =>{
 				this.userIdentity = resolve.userIdentity
 				console.log(this.userIdentity)

+ 1 - 1
pages/second/product/components/secondPrice.vue

@@ -56,7 +56,7 @@
 			},
 		},
 		created() {
-			console.log(this.product)
+			
 		},
 		computed: {
 			...mapState(['hasLogin','isWxAuthorize','identity'])

+ 6 - 5
pages/second/product/components/secondRecommend.vue

@@ -22,9 +22,9 @@
 	export default{
 		name:'recommend',
 		props:{
-			queryProductid: {
+			productId: {
 				// Unistars类型
-				type: String,
+				type: Number,
 			}
 		},
 		components:{
@@ -41,8 +41,9 @@
 			}
 		},
 		created() {
-			this.productID = this.queryProductid
-			this.infoRecommend(this.queryProductid)
+			this.productID = this.productId
+			console.log('productID',this.productID)
+			this.infoRecommend(this.productID)
 		},
 		methods:{
 			infoRecommend(id){
@@ -54,7 +55,7 @@
 						this.isEmpty = true
 					}
 				}).catch(error =>{
-					this.$util.msg(error.msg,2000)
+					console.log('error',error)
 				})
 			},
 			//轮播图切换修改背景色

+ 19 - 18
pages/second/product/product-details.vue

@@ -117,12 +117,12 @@
 						<!-- 相关推荐 -->
 						<view class="title"><view class="title-tab">相关推荐</view></view>
 						<view class="content hot">
-							<recommend :query-productid="product.productId" v-if="isRequest" ></recommend>
+							<recommend :productId="product.productId" v-if="isRequest" ></recommend>
 						</view>
 					</view>
 					<!-- 商品参数 -->
 					<tui-bottom-popup :radius="true" :show="popupShow" @close="hidePopup()">
-						<view class="tui-popup-box clearfix">
+						<view class="tui-popup-box clearfix"> 
 							<view class="title">商品参数</view>
 						    <cm-parameter :product="product" :goodsData="goodsData" ></cm-parameter>
 							<view class="tui-right-flex tui-popup-btn" :style="{ paddingBottom :isIphoneX ? '68rpx' : '0rpx' }">
@@ -184,7 +184,7 @@
 				isNoneDisabled:false,
 				tabCurrentIndex:0,
 				userId:'',
-				productID:0,
+				productId:0,
 				userIdentity:'',//用户类型
 				goodsData:{},//自定义数据
 				shop:{},//供应商信息
@@ -195,8 +195,8 @@
 				isIphoneX:this.$store.state.isIphoneX,
 				windowHeight: '',
 				headerColor:false,
-				backPage:1,
-				nvabarData: {							 //顶部自定义导航
+				backPage:1, 
+				nvabarData: {					 		 //顶部自定义导航
 					showCapsule: 1, // 是否显示左上角图标   1表示显示    0表示不显示
 					title: ''		// 导航栏 中间的标题
 				},
@@ -214,32 +214,33 @@
 			...mapState(['hasLogin','userInfo','isWxAuthorize'])
 		},
 		onLoad(option) {
-			this.productID = option.id//获取商品ID
-			this.isShareType = option.type
-			this.linkPath = option.path
-			this.isHeaderPoduct = true
-			if(option.page == 2){
-				this.backPage = option.page
-			}
 			if(this.isShareType =='share'){
 				wxLogin.wxLoginAuthorize()
 			}
+			if(option.page == 2){
+				this.backPage = option.page
+			}
+			this.productId = option.id//获取商品ID
+			this.isShareType = option.type
+			this.linkPath = option.path
+			this.isHeaderPoduct = true
 		},
 		methods:{
 			initData(){// 初始化商品详情查询
-				this.SecondService.ProductDetail({productId:this.productID,userId:this.userId}).then(response =>{
+				this.SecondService.ProductDetail({productId:this.productId,userId:this.userId}).then(response =>{
 					this.skeletonShow = false
 					this.productImage=[]
-					this.shop = response.data.shop
 					this.product = response.data
+					uni.setStorageSync('productLabel', `${response.data.brandName}`)
+					this.shop = response.data.shop
 					//处理商品图片列表
 					this.product.imageList.forEach(item =>{
 						this.productImage.push(item)
 					})
 					setTimeout(()=>{
 						this.getSectionProps()
+						this.isRequest = true
 					},2000)
-					this.isRequest = true
 				}).catch(error =>{
 					console.log(error)
 					this.skeletonShow = false
@@ -304,7 +305,7 @@
 			    }
 				return {
 				  title: `${this.product.name}`,
-				  path: `second/pages/product/product-details?type=share&id=${this.productID}`,
+				  path: `second/pages/product/product-details?type=share&id=${this.productId}`,
 				  imageUrl:`${this.product.imageList[0]}`
 				}
 			},
@@ -351,7 +352,7 @@
 			},
 			activeTab: debounce((top, _this)=> {//当滑动时也能同步激活tab
 				const { sectionTopRangeArr } = _this
-				if(sectionTopRangeArr.length > 0) {
+				if(sectionTopRangeArr.length > 0) { 
 					sectionTopRangeArr.forEach((item, index) => {
 						let splitItem = item.split('-'),
 							openInterval = Number(splitItem[0]),
@@ -411,7 +412,7 @@
 		    }
 			return {
 			  title: `${this.product.name}`,
-			  path: `second/pages/product/product-details?type=share&id=${this.productID}`,
+			  path: `second/pages/product/product-details?type=share&id=${this.productId}`,
 			  imageUrl:`${this.product.imageList[0]}`
 			}
 		},

+ 3 - 5
pages/second/product/product-list.vue

@@ -104,12 +104,11 @@
 </template>
 
 <script>
+	import { mapState,mapMutations } from 'vuex'
 	import authorize from '@/common/config/authorize.js'
 	import wxLogin from '@/common/config/wxLogin.js'
 	import modalLayer from '@/components/modal-layer'
-	import { mapState,mapMutations } from 'vuex'
 	export default{
-		name:'secondList',
 		components:{
 			modalLayer
 		},
@@ -248,8 +247,7 @@
 								this.showSkeleton = false
 							   }
 							   this.hasNextPage = data.hasNextPage
-							   this.listRecord = data.totalRecord
-							  
+							   this.listRecord = data.totalRecord						  
 						   }
 						   // 防上拉暴滑
 						   this.pullFlag = false
@@ -300,7 +298,7 @@
 			}
 		},	
 		onShow() {
-				
+		   uni.setStorageSync('pageLabel', `二手市场`)
 		}
 	}
 </script>

+ 556 - 468
pages/seller/club/club-list.vue

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

+ 0 - 1
pages/supplier/user/my-shop.vue

@@ -538,7 +538,6 @@ export default {
 			this.ShopService.GetSupplierHomeProduct({ shopId: this.supplierId, identity: this.identity })
 				.then(response => {
 					let data = response.data
-					console.log('主推商品', data)
 					if (data.length > 0) {
 						this.isHomeProduct = false
 						this.QueryProductPrice(data)

+ 1 - 0
pages/tabBar/home/index.vue

@@ -179,6 +179,7 @@ export default {
 					this.pageList = data.homePageFloor
 					this.hotListPageFloor = data.pageFloorList
 					this.supplierObj = data.supplierImage
+					uni.setStorageSync('pageLabel','首页')
 					setTimeout(() => {
 						this.isRequest = true
 					}, 500)

+ 55 - 0
plugins/simple-residence-time/behavior.js

@@ -0,0 +1,55 @@
+import { getCurrentRoute } from './utils.js'
+
+/*默认配置*/
+const defaultOptions = {
+    strict: false,
+    enter(current) {},
+    leave(prev) {},
+    routting(current, prev) {}
+}
+
+// 用于存放页面路由信息
+const map = new Map()
+
+// 用于存放上一个页面路由信息
+let prev = null
+
+function behavior(options) {
+    const mixin = {}
+
+    options = { ...defaultOptions, ...options }
+
+    // 页面打开
+    mixin.onLoad = function() {
+        const route = getCurrentRoute()
+        if (!route) return
+        if (map.has(route.path)) return
+        map.set(route.path, route)
+        options.enter(route)
+        options.routting(route, prev)
+    }
+    // 页面显示
+    mixin.onShow = function() {
+        if (options.strict) return
+        mixin.onLoad()
+    }
+    // 页面隐藏
+    mixin.onHide = function() {
+        if (options.strict) return
+        mixin.onUnload()
+    }
+    // 页面关闭
+    mixin.onUnload = function() {
+        prev = null
+        const route = getCurrentRoute()
+        if (!route) return
+        if (!map.has(route.path)) return
+        prev = map.get(route.path)
+        map.delete(prev.path)
+        options.leave(prev)
+    }
+
+    return mixin
+}
+
+export default behavior

+ 3 - 0
plugins/simple-residence-time/index.js

@@ -0,0 +1,3 @@
+import behavior from './behavior.js'
+
+export default (Vue, options) => Vue.mixin(behavior(options))

+ 9 - 0
plugins/simple-residence-time/utils.js

@@ -0,0 +1,9 @@
+/** 获取当前页面路由信息 */
+export function getCurrentRoute() {
+    const pages = getCurrentPages()
+    const len = pages.length
+    const page = pages[len - 1]
+    if (!page) return
+    const route = { path: '/' + page.route, fullPath: page.$page.fullPath, query: page.options, meta: {} }
+    return route
+}

+ 1 - 1
services/config.env.js

@@ -5,7 +5,7 @@ if(process.env.NODE_ENV === 'development'){
     // URL_CONFIG = 'http://192.168.2.68:18002'	 //涛涛联调地址
     // URL_CONFIG = 'http://192.168.2.17:18002' //志国联调地址
     URL_CONFIG = 'https://core-b.caimei365.com'
-    // URL_CONFIG = 'https://core.caimei365.com'
+    // URL_CONFIG = 'https://core.caimei365.com'  
 }else{
     // 生产环境
     // URL_CONFIG = 'https://core-b.caimei365.com'

+ 1 - 1
services/sellse.service.js

@@ -76,7 +76,7 @@ export default class SellerService {
         return this.AjaxService.get({ 
             url:'/user/seller/club/list', 
             data, 
-            isLoading: true ,
+            isLoading: false ,
               
         })
     }

+ 17 - 1
services/user.service.js

@@ -822,5 +822,21 @@ export default class UserService {
 	        isLoading: false,
 	    })
     }
-	
+    /**
+	 *@上送用户浏览行为
+	 *@param userId:  登录用户userId 默认 :0
+	 *@param pagePath:页面路径
+	 *@param pageType:页面类型
+	 *@param pageLabel:页面标签
+	 *@param productId:商品Id
+	 *@param accessDuration:浏览时长
+	 */
+    userRecordStatistics(data = {}) {
+	    return this.AjaxService.get({
+	        url: '/user/record/StatisticsApp',
+	        data,
+	        isLoading: false,
+	    }) 
+    }
+	 
 }

+ 0 - 1
store/index.js

@@ -80,7 +80,6 @@ const store = new Vuex.Store({
             })
         },
         async updateNoticeNum(state) { // 更新通知消息数量
-            console.log('全部更新通知消息数量')
             const getUserService = new UserService(ajaxService)
             const userInfo = await caimeiApi.getStorage()
             const commonId = userInfo.clubId ? userInfo.clubId : 0

+ 81 - 0
utils/residence.js

@@ -0,0 +1,81 @@
+import { includeList } from './router.config.js' // 配置信息
+import ajaxService from '@/services/ajax.service.js'
+import UserService from '@/services/user.service'
+const UserApi = new UserService(ajaxService)
+
+// 校验是否为配置的路径
+const isInclude = (url) => {
+    if (!url) return false
+    return includeList.some(item => url.indexOf(item.url) > -1)
+}
+// 校验返回页面类型
+const isIncludeType = (url) => {
+    if (!url) return false
+    return includeList.find(item => url === item.url)
+}
+
+// 参数
+const userSync = uni.getStorageSync('userInfo')
+const defaultParams = {
+    pagePath: '', //页面路径
+    accessDuration: 0, //浏览时长初始值为 0
+    pageType: '', //页面类型
+    pageLabel: '', //页面标签
+    userId: userSync.userId ? userSync.userId : 0, //用户Id
+    productId: 0 //商品Id
+}
+
+// 页面进入
+const enter = (current) => {
+    current.meta.enterTime = Date.now()
+}
+
+// 页面离开
+const leave = (prev) => {
+    prev.meta.leaveTime = Date.now()
+}
+
+// 页面切换
+const routting = async (current, prev) => {
+    await userBehavior(current, prev)
+}
+
+/* 用户停留时间 */
+async function userBehavior(current, prev) {
+    const sysParams = Object.assign({}, defaultParams)
+    try {
+        if (!prev) return
+        if (!isInclude(prev.path)) return
+        //协销不记录
+        if (userSync.userIdentity === 1) return
+        console.log('\n')
+        console.log('------------------------')
+        // 停留时长参数设置
+        sysParams.accessDuration = prev.meta.leaveTime - prev.meta.enterTime
+        console.log('当前页面:', current.path)
+        console.log('离开页面:', prev.path)
+        // 接口参数设置
+        const pageData = isIncludeType(prev.path)
+        sysParams.pagePath = prev.fullPath
+        sysParams.pageType = pageData ? pageData.pageType : ''
+        if (prev.path === '/pages/goods/product' || prev.path === '/pages/second/product/product-details') {
+            sysParams.productId = prev.query.id ? prev.query.id : 0
+            sysParams.pageLabel = uni.getStorageSync('productLabel')
+        }else{
+            sysParams.pageLabel = uni.getStorageSync('pageLabel')
+        }
+        // 调用接口
+        console.log('记录路径:', prev.path, '停留时间:', sysParams.accessDuration, 'ms', '标签:', sysParams.pageLabel)
+        await UserApi.userRecordStatistics(sysParams)
+        uni.removeStorageSync('pageLabel')
+        // 删除标记标签名
+        console.log('---用户行为轨迹记录成功---')
+        console.log('------------------------')
+        console.log('\n')
+    } catch (e) {
+        console.log(e)
+        console.log('---用户行为轨迹记录异常---')
+    }
+}
+
+export default { enter, leave, routting }

+ 18 - 0
utils/router.config.js

@@ -0,0 +1,18 @@
+// 配置需要统计的路径
+export const includeList = [
+    { url:'/pages/tabBar/home/index', pageType:1},
+    { url:'/pages/goods/product', pageType:6},
+    { url:'/pages/goods/good-hot', pageType:2},
+    { url:'/pages/second/form/form', pageType:4},
+    { url:'/pages/second/product/product-list', pageType:3},
+    { url:'/pages/second/product/product-details', pageType:7},
+    { url:'/pages/search/search', pageType:8},
+    { url:'/pages/search/search-supplier', pageType:9 },
+    { url:'/pages/goods/goods-classify', pageType:10 },
+    { url:'/pages/goods/good-floor', pageType:13 },
+    { url:'/pages/goods/goods-instrument', pageType:13 },
+    { url:'/pages/goods/good-floor-temp', pageType:13 },
+    { url:'/pages/h5/activity/activity', pageType:13 },
+    { url:'/pages/h5/activity/activity-topic', pageType:13 },
+]
+