Explorar o código

协销机构画像

zhengjinyi %!s(int64=2) %!d(string=hai) anos
pai
achega
f3ed944ed7

+ 7 - 1
pages.json

@@ -702,7 +702,13 @@
 				{
 					"path": "club/club-info",
 					"style": {
-						"navigationBarTitleText": "机构信息"
+						"navigationBarTitleText": "商城访问记录"
+					}
+				},
+				{
+					"path": "club/club-detail",
+					"style": {
+						"navigationBarTitleText": "资料详情"
 					}
 				},
 				{

+ 257 - 0
pages/seller/club/club-detail.vue

@@ -0,0 +1,257 @@
+<template>
+	<view class="container club-info">
+		<tui-skeleton
+			v-if="skeletonShow"
+			backgroundColor="#fafafa"
+			borderRadius="10rpx"
+			:isLoading="true"
+			:loadingType="5"
+		></tui-skeleton>
+		<template v-else>
+			<view class="info-content clearfix">
+				<view class="info-main border">
+					<view class="info-p"
+						>机构名称:<text>{{ clubInfo.name }}</text></view
+					>
+					<view class="info-p"
+						>状态:<text
+							class="info-h1-tag"
+							:class="{
+								orange: clubInfo.status == 1,
+								grey: clubInfo.status == 90,
+								warn: clubInfo.status == 92
+							}"
+						>
+							{{ clubInfo.status | statusFilters }}
+						</text></view
+					>
+					<view class="info-p"
+						>机构级别:<text>{{ clubInfo.userIdentity === 2 ? '资质机构' : '个人机构' }}</text></view
+					>
+					<view class="info-p"
+						>机构类型:<text
+							>{{ clubInfo.firstClubType | FirstFormat }}-{{ clubInfo.secondClubType | TwoFormat }}</text
+						></view
+					>
+					<view class="info-p"
+						>联系人:<text>{{ clubInfo.linkMan }}</text></view
+					>
+					<view class="info-p"
+						>手机号:<text>{{ clubInfo.contractMobile }}</text></view
+					>
+					<view class="info-p"
+						>联系人身份:<text>{{ clubInfo.linkManIdentity | linkManFormat }}</text></view
+					>
+					<view class="info-p"
+						>注册时间:<text>{{ clubInfo.addTime }}</text></view
+					>
+					<view class="info-p"
+						>联系地址:<text>{{ clubInfo.provincialAddress }}{{ clubInfo.address }}</text></view
+					>
+					<view class="info-p"
+						>营业执照编号:<text>{{ clubInfo.socialCreditCode }}</text></view
+					>
+					<view class="info-p">营业执照:</view>
+					<view class="info-img"><image :src="clubInfo.businessLicense" alt=""/></view>
+					<view class="info-p" v-if="clubInfo.medicalPracticeLicense">医疗许可证:</view>
+					<view class="info-img" v-if="clubInfo.medicalPracticeLicense"
+						><image :src="clubInfo.medicalPracticeLicense" alt=""
+					/></view>
+				</view>
+				<view class="info-main">
+					<view class="info-p"
+						>机构简称:<text>{{ clubInfo.shortName }}</text></view
+					>
+					<view class="info-p"
+						>邮箱:<text>{{ clubInfo.contractEmail }}</text></view
+					>
+					<view class="info-p" v-if="clubInfo.shopPhoto">门头照:</view>
+					<view class="info-img" v-if="clubInfo.shopPhoto"><image :src="clubInfo.shopPhoto" alt=""/></view>
+					<view class="info-p"
+						>主营内容:<text>{{ clubInfo.mainProduct }}</text></view
+					>
+					<template v-if="clubInfo.contractPhone || clubInfo.fax || clubInfo.profile">
+						<view class="info-p" v-if="clubInfo.contractPhone"
+							>固定电话:<text>{{ clubInfo.contractPhone ? clubInfo.contractPhone : '无' }}</text></view
+						>
+						<view class="info-p" v-if="clubInfo.fax"
+							>传真:<text>{{ clubInfo.fax ? clubInfo.fax : '无' }}</text></view
+						>
+						<view class="info-p" v-if="clubInfo.profile"
+							>公司介绍:<text>{{ clubInfo.profile ? clubInfo.profile : '无' }}</text></view
+						>
+					</template>
+				</view>
+			</view>
+		</template>
+	</view>
+</template>
+
+<script>
+import { mapState, mapMutations } from 'vuex'
+import authorize from '@/common/config/authorize.js'
+import wxLogin from '@/common/config/wxLogin.js'
+
+export default {
+	data() {
+		return {
+			skeletonShow: true,
+			clubInfo: {},
+			isSellerpopup: false
+		}
+	},
+	onLoad(option) {
+		wxLogin.wxLoginAuthorize()
+		this.userClubRecordLinkage({ userId: option.userId })
+	},
+	filters: {
+		FirstFormat(value) {
+			//处理格式
+			const map = {
+				1: '医美',
+				2: '生美',
+				3: '项目公司',
+				4: '个人',
+				5: '其他'
+			}
+			return map[value]
+		},
+		TwoFormat(value) {
+			const map = {
+				1: '诊所',
+				2: '门诊',
+				3: '医院',
+				4: '其他',
+				5: '美容院',
+				6: '养生馆',
+				7: '其他',
+			}
+			return map[value]
+		},
+		linkManFormat(value) {
+			const map = {
+				1: '老板',
+				2: '采购',
+				3: '运营',
+				4: '其他'
+			}
+			return map[value]
+		},
+		statusFilters(value) {
+			// 状态
+			const map = {
+				1: '待审核',
+				90: '已上线',
+				92: '审核未通过'
+			}
+			return map[value]
+		}
+	},
+	computed: {
+		...mapState(['isManage'])
+	},
+	methods: {
+		async userClubRecordLinkage(param) {
+			//查询机构信息
+			const userInfo = await this.$api.getStorage()
+			this.UserService.OrganizationUpdateModifyInfo(param)
+				.then(response => {
+					this.clubInfo = response.data.club
+					setTimeout(() => {
+						this.skeletonShow = false
+					}, 1000)
+				})
+				.catch(error => {
+					this.isInvalid = true
+				})
+		}
+	},
+	onShow() {}
+}
+</script>
+
+<style lang="scss">
+page {
+	height: auto;
+}
+.club-info {
+	width: 100%;
+	.info-content {
+		width: 100%;
+		height: auto;
+		float: left;
+		box-sizing: border-box;
+		.info-main {
+			width: 100%;
+			height: auto;
+			padding: 24rpx 0;
+			margin-bottom: 24rpx;
+			&.border{
+				border-bottom: 30rpx solid #F5F5F5;
+			}
+			.info-h1 {
+				width: 100%;
+				box-sizing: border-box;
+				padding: 0 24rpx;
+				position: relative;
+				line-height: 80rpx;
+				font-size: 30rpx;
+				color: #333333;
+				&:before {
+					content: '';
+					width: 6rpx;
+					height: 24rpx;
+					background-color: #e15616;
+					position: absolute;
+					left: 0;
+					top: 30rpx;
+				}
+			}
+			.info-p {
+				width: 100%;
+				box-sizing: border-box;
+				padding: 0 24rpx;
+				position: relative;
+				line-height: 66rpx;
+				font-size: 30rpx;
+				color: #999999;
+				.info-h1-tag {
+					display: inline-block;
+					padding: 0 16rpx;
+					line-height: 40rpx;
+					background-color: #fff2d5;
+					font-size: 24rpx;
+					border-radius: 20rpx;
+					color: #ffffff;
+					text-align: center;
+					margin-left: 16rpx;
+					&.orange {
+						background-color: #fff2d5;
+						color: #e4aa43;
+					}
+					&.grey {
+						background-color: #0db26d;
+					}
+					&.warn {
+						background-color: #f94b4b;
+					}
+				}
+				text {
+					color: #333333;
+				}
+			}
+			.info-img {
+				width: 200rpx;
+				height: 200rpx;
+				image {
+					width: 200rpx;
+					height: 200rpx;
+					display: block;
+					margin-left: 24rpx;
+					border: 1px dashed #e2e2e2;
+				}
+			}
+		}
+	}
+}
+</style>

+ 51 - 37
pages/seller/club/club-info.vue

@@ -8,6 +8,10 @@
 			:loadingType="5"
 		></tui-skeleton>
 		<template v-else>
+			<view class="info-header-path" @click="handlePathVisit">
+				<view class="path-text">客户访问采美商城全部记录</view>
+				<view class="path-icon"><text class="iconfont icon-xiayibu"></text></view>
+			</view>
 			<view class="info-header clearfix" v-if="clubInfo.ipAddress">
 				<view class="pp"
 					>注册地:<text>{{ clubInfo.ipAddress }}</text></view
@@ -99,7 +103,7 @@
 			</view>
 		</template>
 		<!-- 按钮 -->
-		<template v-if="clubInfo.spType === 0 && isManage">
+<!-- 	<template v-if="clubInfo.spType === 0 && isManage">
 			<tui-bottom-popup :radius="false" :mask="false" :show="true">
 				<view class="tui-popup-box clearfix">
 					<view
@@ -112,7 +116,7 @@
 					</view>
 				</view>
 			</tui-bottom-popup>
-		</template>
+		</template> -->
 		<!-- 选择弹窗 -->
 		<cm-seller-popup
 			ref="cmresellerpopup"
@@ -154,43 +158,28 @@ export default {
 		this.userClubRecordLinkage({ clubId: this.salesParams.clubId })
 	},
 	filters: {
-		FirstFormat: function(type) {
-			//处理金额
-			let name = ''
-			switch (type) {
-				case 1:
-					name = '医美'
-					break
-				case 2:
-					name = '生美'
-					break
-				case 3:
-					name = '项目公司'
-					break
-				case 4:
-					name = '个人'
-					break
-				case 5:
-					name = '其他'
-					break
+		FirstFormat(value) {
+			//处理格式
+			const map = {
+				1: '医美',
+				2: '生美',
+				3: '项目公司',
+				4: '个人',
+				5: '其他'
 			}
-			return name
+			return map[value]
 		},
-		TwoFormat: function(type) {
-			//处理金额
-			let text = ''
-			switch (type) {
-				case 1:
-					text = '诊所'
-					break
-				case 2:
-					text = '门诊'
-					break
-				case 3:
-					text = '医院'
-					break
+		TwoFormat(value) {
+			const map = {
+				1: '诊所',
+				2: '门诊',
+				3: '医院',
+				4: '其他',
+				5: '美容院',
+				6: '养生馆',
+				7: '其他',
 			}
-			return text
+			return map[value]
 		},
 		statusFilters(value) {
 			// 状态
@@ -243,6 +232,10 @@ export default {
 		handleShowSellerpopup() {
 			//显示选择协销弹窗
 			this.isSellerpopup = true
+		},
+		handlePathVisit(){
+			// 跳转商城访问记录
+			this.$api.navigateTo(`/pages/seller/club/club-visit?clubId=${this.salesParams.clubId}`)
 		}
 	},
 	onShow() {}
@@ -255,6 +248,28 @@ page {
 }
 .club-info {
 	width: 100%;
+	.info-header-path{
+		width: 100%;
+		height: 90rpx;
+		box-sizing: border-box;
+		padding: 0 24rpx;
+		background-color: #FEF6F3;
+		line-height: 90rpx;
+		.path-text{
+			float: left;
+			font-size: 28rpx;
+			color: #e15616;
+			font-weight: bold;
+		}
+		.path-icon{
+			width: 90rpx;
+			height: 90rpx;
+			float: right;
+			text-align: right;
+			font-size: 30rpx;
+			color: #e15616;
+		}
+	}
 	.info-header {
 		width: 100%;
 		height: auto;
@@ -283,7 +298,6 @@ page {
 		box-sizing: border-box;
 		padding: 0 24rpx;
 		background-color: #ffffff;
-		padding-bottom: 240rpx;
 		.info-title {
 			width: 100%;
 			height: 68rpx;

+ 116 - 62
pages/seller/club/club-portrait.vue

@@ -1,28 +1,47 @@
 <template>
 	<view class="container clearfix">
-		<view class="charts-navbar" id="topBar">
-			<view
-				class="nav-item tui-skeleton-fillet"
-				v-for="(nav, index) in navBarList"
-				:key="index"
-				:class="{ current: tabCurrentIndex === nav.index }"
-				@click="tabChange(nav.index)"
-			>
-				<text>{{ nav.name }}</text> <text class="line"></text>
+		<tui-skeleton
+			v-if="skeletonShow"
+			backgroundColor="#fafafa"
+			borderRadius="10rpx"
+			:isLoading="true"
+			:loadingType="5"
+		></tui-skeleton>
+		<template v-else>
+<!-- 			<view class="charts-navbar" id="topBar">
+				<view
+					class="nav-item tui-skeleton-fillet"
+					v-for="(nav, index) in navBarList"
+					:key="index"
+					:class="{ current: tabCurrentIndex === nav.index }"
+					@click="tabChange(nav.index)"
+				>
+					<text>{{ nav.name }}</text> <text class="line"></text>
+				</view>
+			</view> -->
+			<view class="charts-content">
+				<!-- 重点资料 -->
+				<view class="charts-box charts-box0" id="charts-box0">
+					<echartInfo ref="echart-info" :clubInfo="clubInfo" :clubId="clubInfo.clubId" v-if="isRequest" />
+				</view>
+				<!-- 订单 -->
+				<view class="charts-box charts-box1" id="charts-box1">
+					<echartOrder ref="echartOrder" :clubId="clubInfo.clubId" v-if="isRequest" />
+				</view>
+				<!-- 关键词 -->
+				<view class="charts-box charts-box2" id="charts-box2">
+					<echartKeyword ref="echartKeyword" :clubId="clubInfo.clubId" v-if="isRequest" />
+				</view>
+				<!-- 咨询记录 -->
+				<view class="charts-box charts-box3" id="charts-box3">
+					<echartContact ref="echartContact" :clubId="clubInfo.clubId" v-if="isRequest" />
+				</view>
+				<!-- 访问记录 -->
+				<view class="charts-box charts-box4" id="charts-box4">
+					<echartService ref="echartService" :clubId="clubInfo.clubId" v-if="isRequest" />
+				</view>
 			</view>
-		</view>
-		<view class="charts-content">
-			<!-- 重点资料 -->
-			<view class="charts-box charts-box0" id="charts-box0"> <echartInfo ref="echart-info" /> </view>
-			<!-- 订单 -->
-			<view class="charts-box charts-box1" id="charts-box1"> <echartOrder ref="echart-order" /> </view>
-			<!-- 关键词 -->
-			<view class="charts-box charts-box2" id="charts-box2"> <echartKeyword ref="echart-keyword" /> </view>
-			<!-- 咨询记录 -->
-			<view class="charts-box charts-box3" id="charts-box3"> <echartContact ref="echart-contact" /> </view>
-			<!-- 访问记录 -->
-			<view class="charts-box charts-box4" id="charts-box4"> <echartService ref="echart-service" /> </view>
-		</view>
+		</template>
 	</view>
 </template>
 
@@ -34,8 +53,10 @@ import echartOrder from './components/echart-order'
 import echartKeyword from './components/echart-keyword'
 import echartContact from './components/echart-contact'
 import echartService from './components/echart-service'
+import chartMixin from './components/mixins/chart.mixin.js'
 const observers = {}
 export default {
+	mixins: [chartMixin],
 	components: {
 		echartInfo,
 		echartOrder,
@@ -45,6 +66,9 @@ export default {
 	},
 	data() {
 		return {
+			skeletonShow: true,
+			isRequest: false,
+			clubInfo: {},
 			navBarList: [
 				{ name: '重点资料', index: 0 },
 				{ name: '订单数据', index: 1 },
@@ -57,19 +81,30 @@ export default {
 			anchorStatus: [0, 0, 0, 0, 0] // 分别代表5个锚点区域的开关 0:关  1:开
 		}
 	},
-	onLoad(option) {},
+	onLoad(option) {
+		this.getClubInfo(option.userId)
+	},
 	onReady() {
 		console.log('onReady')
-		// if (!this.isRequest) {
-		//     this.getAnchorSection()
-		// }
 		setTimeout(() => {
 			this.getAnchorSection()
 		}, 2000)
 	},
-	filters: {},
-	computed: {},
 	methods: {
+		getClubInfo(userId) {
+			//获取机构信息
+			this.UserService.OrganizationUpdateModifyInfo({ userId: userId })
+				.then(response => {
+					this.clubInfo = response.data.club
+					setTimeout(() => {
+						this.skeletonShow = false
+						this.isRequest = true
+					}, 1000)
+				})
+				.catch(error => {
+					console.log(error)
+				})
+		},
 		tabChange(index) {
 			this.tabCurrentIndex = index
 			this.scrollToAnchor()
@@ -77,28 +112,34 @@ export default {
 		// 获取锚点元素信息
 		getAnchorSection() {
 			const query = uni.createSelectorQuery().in(this)
-			query.selectAll('.charts-box').boundingClientRect(data => {
-				if (data.length > 0) {
-					this.anchorList = data
-					this.anchorList.forEach((dom, index) => {
-						uni.createSelectorQuery().select('.charts-content').boundingClientRect(data => {
-							//目标节点、也可以是最外层的父级节点
-							uni.createSelectorQuery().select(`#${dom.id}`).boundingClientRect(res => {
-								//dom
-								dom.top = res.top - data.top + 5
-							}).exec()
-						}).exec()
-					})
-					console.log(this.anchorList)
-					console.log('tabs is ready')
-					// clearInterval(this.selectorTimer)
-					this.observerAnchor(data)
-				}
-			}).exec()
+			query
+				.selectAll('.charts-box')
+				.boundingClientRect(data => {
+					if (data.length > 0) {
+						this.anchorList = data
+						this.anchorList.forEach((dom, index) => {
+							uni.createSelectorQuery()
+								.select('.charts-content')
+								.boundingClientRect(data => {
+									//目标节点、也可以是最外层的父级节点
+									uni.createSelectorQuery()
+										.select(`#${dom.id}`)
+										.boundingClientRect(res => {
+											//dom
+											dom.top = res.top - data.top + 8
+										})
+										.exec()
+								})
+								.exec()
+						})
+						console.log(this.anchorList)
+						this.observerAnchor(data)
+					}
+				})
+				.exec()
 		},
 		// 滚动到锚点
 		scrollToAnchor() {
-			// const selector = '#anchor' + (this.currentTab + 1)
 			let scrollTop = 0
 			const query = uni.createSelectorQuery().in(this)
 			if (this.tabCurrentIndex > 0) {
@@ -123,12 +164,7 @@ export default {
 					}
 				})
 			})
-		},
-		// 设置currentTab
-		setCurrentTab: debounce(function() {
-			const index = this.anchorStatus.lastIndexOf(1)
-			if (this.tabCurrentIndex !== index) this.tabCurrentIndex = index
-		}, 200)
+		}
 	},
 	onPageScroll(e) {
 		this.scrollTop = e.scrollTop
@@ -145,8 +181,8 @@ page {
 	width: 100%;
 	height: auto;
 	box-sizing: border-box;
-	padding: 0 24rpx;
-	padding-top: 122rpx;
+	padding: 24rpx;
+	// padding-top: 122rpx;
 }
 .charts-navbar {
 	width: 100%;
@@ -158,7 +194,8 @@ page {
 	position: fixed;
 	top: 0;
 	left: 0;
-	z-index: 99;
+	z-index: 9999999;
+	display: none;
 	.nav-item {
 		display: flex;
 		flex: 1;
@@ -188,13 +225,13 @@ page {
 		}
 	}
 }
-.charts-content{
+.charts-content {
 	width: 100%;
 	height: auto;
 }
 .charts-box {
 	width: 100%;
-	min-height: 500rpx;
+	min-height: 350rpx;
 	box-sizing: border-box;
 	padding: 34rpx 24rpx;
 	background-color: #fff;
@@ -252,7 +289,7 @@ page {
 		}
 		.echart-main {
 			width: 100%;
-			height: 404rpx;
+			min-height: 200rpx;
 			box-sizing: border-box;
 			padding: 32rpx 40rpx;
 			position: relative;
@@ -275,8 +312,7 @@ page {
 				height: 100%;
 				position: absolute;
 				right: 10rpx;
-				top: 0;
-				line-height: 404rpx;
+				top: 50%;
 				font-size: 28rpx;
 				color: #1890f9;
 			}
@@ -365,8 +401,26 @@ page {
 		}
 		.echart-mains {
 			width: 100%;
-			min-height: 400rpx;
+			min-height: 300rpx;
 			float: left;
+			.echart-mains-none {
+				width: 100%;
+				height: 100%;
+				display: flex;
+				align-items: center;
+				justify-content: center;
+				flex-direction: column;
+				.none-image {
+					width: 220rpx;
+					height: 220rpx;
+					margin-bottom: 20rpx;
+				}
+				.none-text {
+					font-size: $font-size-28;
+					color: #999999;
+					line-height: 44rpx;
+				}
+			}
 		}
 	}
 }

+ 278 - 26
pages/seller/club/club-visit-detail.vue

@@ -1,34 +1,286 @@
 <template>
-	<view>
-			<view class="uni-container">
-				<uni-table ref="table" :loading="loading" border stripe type="selection" emptyText="暂无更多数据" @selection-change="selectionChange">
-					<uni-tr>
-						<uni-th width="150" align="center">日期</uni-th>
-						<uni-th width="150" align="center">姓名</uni-th>
-						<uni-th align="center">地址</uni-th>
-						<uni-th width="204" align="center">设置</uni-th>
-					</uni-tr>
-					<uni-tr v-for="(item, index) in tableData" :key="index">
-						<uni-td>{{ item.date }}</uni-td>
-						<uni-td>
-							<view class="name">{{ item.name }}</view>
-						</uni-td>
-						<uni-td align="center">{{ item.address }}</uni-td>
-						<uni-td>
-							<view class="uni-group">
-								<button class="uni-button" size="mini" type="primary">修改</button>
-								<button class="uni-button" size="mini" type="warn">删除</button>
-							</view>
-						</uni-td>
-					</uni-tr>
-				</uni-table>
-				<view class="uni-pagination-box"><uni-pagination show-icon :page-size="pageSize" :current="pageCurrent" :total="total" @change="change" /></view>
+	<view class="container club-visit">
+		<tui-skeleton
+			v-if="skeletonShow"
+			backgroundColor="#fafafa"
+			borderRadius="10rpx"
+			:isLoading="true"
+			:loadingType="5"
+		></tui-skeleton>
+		<template v-else>
+			<view class="visit-content clearfix">
+				<view class="info-title">{{ listQuery.accessDate }}</view>
+				<view class="info-main" v-for="(visit, index) in list" :key="index">
+					<view class="info-p">访问时间:<text>{{ visit.accessNewTime }}</text></view>
+					<view class="info-p">页面类型:<text>{{ visit.pageType ? visit.pageType : '--' }}</text></view>
+					<view class="info-p">页面标签:<text>{{ visit.pageLabel ? visit.pageLabel : '--' }}</text></view>
+					<view class="info-p">商品名称:<text>{{ visit.productName ? visit.productName  : '--'  }}</text></view>
+					<view class="info-p">商品图片: <text v-if="!visit.productImage">--</text></view>
+					<view class="info-img" v-if="visit.productImage"><image :src="visit.productImage" alt=""/></view>
+					<view class="info-p">访问来源:<text>{{ visit.accessSource | accessSourceFilters }}</text></view>
+					<view class="info-p">访问客户端:<text>{{ visit.accessClient | accessClientFilters }}</text></view>
+					<view class="info-p">访问时长:<text>{{ visit.accessDuration }}</text></view>
+				</view>
+				<!--加载loadding-->
+				<tui-loadmore :visible="loadding" :index="3" type="black"></tui-loadmore>
+				<tui-nomore :visible="!pullUpOn" :backgroundColor="'#F7F7F7'" :text="nomoreText"></tui-nomore>
+				<!--加载loadding-->
+			</view>
+		</template>
+		<!-- 侧边 -->
+		<view class="scrollTop" :style="{bottom:'150rpx'}">
+			<view class="icon top" @click="onPageScrollTop" :class="isScrollTop ? 'show' : 'none'">
+				<text class="iconfont icon-zhiding"></text>
 			</view>
 		</view>
+	</view>
 </template>
 
 <script>
+import { mapState, mapMutations } from 'vuex'
+import authorize from '@/common/config/authorize.js'
+import wxLogin from '@/common/config/wxLogin.js'
+
+export default {
+	data() {
+		return {
+			skeletonShow: true,
+			isScrollTop:false,
+			nomoreText: '上拉显示更多',
+			hasNextPage: false,
+			loadding: false,
+			pullUpOn: true,
+			pullFlag: true,
+			listQuery:{
+				clubId:0,
+				accessDate:'',
+				ip:'',
+				pageNum:1,
+				pageSize:10
+			},
+			list:[] ,
+		}
+	},
+	filters: {
+		accessClientFilters(value) {
+		  // 访问客户端
+		  const map = {
+			'0': '网站',
+			'1': '小程序'
+		  }
+		  return map[value]
+		},
+		accessSourceFilters(value) {
+		  // 访问来源
+		  if(!value) return '--'
+		  const map = {
+			'0': '直接访问',
+			'1': '百度搜索',
+			'2': '360搜索',
+			'3': '谷歌搜索',
+			'4': '神马搜索',
+			'5': '头条搜索',
+			'6': '搜狗搜索',
+			'7': '直接访问'
+		  }
+		  return map[value]
+		}
+	},
+	computed: {},
+	onLoad(option) {
+		this.listQuery.clubId = option.clubId
+		this.listQuery.accessDate = option.accessDate
+		this.listQuery.ip = option.ip
+		this.getClubRecordDetail()
+		setTimeout(() => {
+			this.skeletonShow = false
+		}, 1000)
+		this.listQuery
+	},
+	methods: {
+		getClubRecordDetail() {
+			//获取记录详情
+			this.listQuery.pageNum = 1
+			this.UserService.userClubRecordDetail(this.listQuery)
+				.then(response => {
+					let data = response.data
+					if (data.list && data.list.length > 0) {
+						this.hasNextPage = response.data.hasNextPage
+						this.list = 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 = '已至底部'
+						}
+					}
+				})
+				.catch(error => {
+					this.$util.msg(error.msg, 2000)
+				})
+		},
+		getOnReachBottomData() {
+			this.listQuery.pageNum += 1
+			this.UserService.userClubRecordDetail(this.listQuery)
+				.then(response => {
+					let data = response.data
+					if (data.list && data.list.length > 0) {
+						this.hasNextPage = response.data.hasNextPage
+						this.list = this.list.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)
+				})
+		},
+		onPageScrollTop(){
+			uni.pageScrollTo({
+			    scrollTop: 0,
+			    duration: 600
+			})
+		},
+	},
+	onPullDownRefresh() {
+		setTimeout(() => {
+			this.getClubRecordDetail()
+			uni.stopPullDownRefresh()
+		}, 200)
+	},
+	onReachBottom() {
+		if (this.hasNextPage) {
+			this.loadding = true
+			this.pullUpOn = true
+			this.getOnReachBottomData()
+		}
+	},
+	onPageScroll(e) {
+		//实时获取到滚动的值
+		if (e.scrollTop > 800) {
+			this.isScrollTop = true
+		} else {
+			this.isScrollTop = false
+		}
+	},
+	onShow() {}
+}
 </script>
 
-<style>
-</style>
+<style lang="scss">
+page {
+	height: auto;
+}
+.club-visit {
+	width: 100%;
+	.visit-content {
+		width: 100%;
+		height: auto;
+		float: left;
+		box-sizing: border-box;
+		.info-title {
+			width: 100%;
+			padding: 24rpx 24rpx 0 24rpx;
+			position: relative;
+			line-height: 48rpx;
+			font-size: 40rpx;
+			color: #333;
+			font-weight: bold;
+		}
+		.info-main {
+			width: 100%;
+			height: auto;
+			padding: 20rpx 0;
+			margin-bottom: 24rpx;
+			border-bottom: 30rpx solid #f5f5f5;
+			&:last-child {
+				border-bottom: none;
+			}
+			.info-p {
+				width: 100%;
+				box-sizing: border-box;
+				padding: 0 24rpx;
+				position: relative;
+				line-height: 66rpx;
+				font-size: 30rpx;
+				color: #999999;
+				text-overflow: ellipsis;
+				overflow: hidden;
+				display: -webkit-box;
+				-webkit-line-clamp: 1;
+				line-clamp: 1;
+				-webkit-box-orient: vertical;
+				text {
+					color: #333333;
+				}
+			}
+			.info-img {
+				width: 200rpx;
+				height: 200rpx;
+				image {
+					width: 200rpx;
+					height: 200rpx;
+					display: block;
+					margin-left: 24rpx;
+					border: 1px dashed #e2e2e2;
+				}
+			}
+		}
+	}
+}
+.scrollTop{
+	width: 80rpx;
+	height: 100rpx;
+	position: fixed;
+	right: 20rpx;
+	z-index: 99;
+	.icon{
+		width: 80rpx;
+		height: 80rpx;
+		border-radius: 50%;
+		float: left;
+		margin: 10rpx 0;
+		line-height: 80rpx;
+		text-align: center;
+		.contact-btn{
+			width: 80rpx;
+			height: 80rpx;
+			background-color: rgba(0,0,0,0);
+			line-height: 80rpx;
+			.iconfont{
+				font-size: $font-size-44;
+				color: #FFFFFF;
+			}
+		}
+		&.top{
+			background-color: rgba(0,0,0,0.4);
+			&.show{
+				opacity: 1;
+			}
+			&.none{
+				opacity: 0;
+			}
+		}
+		.iconfont{
+			font-size: $font-size-44;
+			color: #FFFFFF;
+		}
+	}
+	}
+</style>

+ 70 - 78
pages/seller/club/club-visit.vue

@@ -1,23 +1,33 @@
 <template>
 	<view class="container ">
-		<au-custom :navbar-data='nvabarData' @navigateBack="hanldNavigateBack"></au-custom>
-		<view class="vsit-content">
-			<view class="list" v-for="(item,index) in list" :key="index" >
-				<view class="list-title">{{ item.year }}年</view>
-				<view class="list-main clear">
-					<view class="list-main-item" v-for="(visit,index) in item.data">
-						<view class="item-le">
-							<view class="item-le-t none">{{ visit.month }}</view>
-							<view class="item-le-t">{{ visit.day }}</view>
-						</view>
-						<view class="item-ri">
-							<view class="item-ri-i">访问记录</view>
-							<view class="item-ri-i none">{{ visit.num }}条</view>
+		<tui-skeleton
+			v-if="skeletonShow"
+			backgroundColor="#fafafa"
+			borderRadius="10rpx"
+			:isLoading="true"
+			:loadingType="5"
+		></tui-skeleton>
+		<template v-else>
+			<au-custom :navbar-data='nvabarData' @navigateBack="hanldNavigateBack"></au-custom>
+			<view class="vsit-content" v-if="list.length>0">
+				<view class="list" v-for="(item,index) in list" :key="index" >
+					<view class="list-title">{{ item.year }}年</view>
+					<view class="list-main clear">
+						<view class="list-main-item" v-for="(visit,vIndex) in item.data" :key="vIndex" @click="handleVisitDeatil(visit)">
+							<view class="item-le">{{ visit.monthAndDay }}</view>
+							<view class="item-ri">
+								<view class="item-ri-i">访问记录</view>
+								<view class="item-ri-i none">{{ visit.number }}条</view>
+							</view>
 						</view>
 					</view>
 				</view>
 			</view>
-		</view>
+			<view class="vsit-content-none" v-else>
+				<image class="none-image" src="https://static.caimei365.com/app/img/bg/bg_visit_none@2x.png" mode=""></image>
+				<view class="none-text">暂无数据</view>
+			</view>
+		</template>
 	</view>	
 </template>
 
@@ -25,6 +35,8 @@
 	export default{
 		data(){
 			return{
+				skeletonShow:true,
+				clubId:0,
 				nvabarData: {		//顶部自定义导航
 					haveHome:true,
 					haveBack:true,
@@ -34,67 +46,32 @@
 					title: '',  // 导航栏 中间的标题
 					textLeft:this.$store.state.isIphone
 				},
-				list:[
-					{
-						year:"2023",
-						data:[
-							{
-								month:'三月',
-								day:'03-27',
-								num:5
-							},
-							{
-								month:'三月',
-								day:'03-27',
-								num:5
-							},
-							{
-								month:'三月',
-								day:'03-27',
-								num:5
-							},
-							{
-								month:'三月',
-								day:'03-27',
-								num:5
-							}
-						]
-					},
-					{
-						year:"2022",
-						data:[
-							{
-								month:'十二月',
-								day:'12-27',
-								num:5
-							},
-							{
-								month:'十二月',
-								day:'12-27',
-								num:15
-							},
-							{
-								month:'十二月',
-								day:'12-27',
-								num:50
-							},
-							{
-								month:'十二月',
-								day:'12-27',
-								num:5
-							}
-						]
-					},
-				]
+				list:[]
 			}
 		},
 		filters:{
 			
 		},
 		onLoad(option) {
-			
+			this.clubId = option.clubId
+			this.getVisitList(option.clubId)
 		},
 		methods:{
+			getVisitList(clubId){
+			    this.UserService.userClubRecordList({ clubId : clubId })
+			        .then(response => {
+			            this.list = response.data
+						setTimeout(()=>{
+							this.skeletonShow = false
+						},500)
+			        })
+			        .catch(error => {
+			            console.log(error)
+			        })
+			},
+			handleVisitDeatil(visit){
+				this.$api.navigateTo(`/pages/seller/club/club-visit-detail?clubId=${this.clubId}&accessDate=${visit.accessDate}&ip=${visit.ip}`)
+			},
 			hanldNavigateBack(){
 				uni.navigateBack({
 					delta: 1
@@ -122,6 +99,28 @@
 		padding: 0 24rpx;
 		padding-top: 441rpx;
 	}
+	.vsit-content-none{
+		width: 100%;
+		min-height: 1000rpx;
+		background: #FFFFFF;
+		border-radius: 24rpx;
+		padding: 52rpx 24rpx;
+		box-sizing: border-box;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		flex-direction: column;
+		.none-image{
+			width: 260rpx;
+			height: 260rpx;
+			margin-bottom: 20rpx;
+		}
+		.none-text{
+			font-size: $font-size-28;
+			color: #999999;
+			line-height: 44rpx;
+		}
+	}
 	.vsit-content{
 		width: 100%;
 		min-height: 1000rpx;
@@ -179,6 +178,10 @@
 						padding-right: 30rpx;
 						position: relative;
 						float: left;
+						line-height: 96rpx;
+						font-size: 30rpx;
+						text-align: center;
+						color: #333333;
 						&::before{
 							content: '';
 							width: 1px;
@@ -188,17 +191,6 @@
 							top: 24rpx;
 							right: 0;
 						}
-						.item-le-t{
-							width: 120rpx;
-							height: 48rpx;
-							line-height: 48rpx;
-							font-size: 30rpx;
-							text-align: center;
-							color: #333333;
-							&.none{
-								color: #999;
-							}
-						}
 					}
 					.item-ri{
 						height: 96rpx;

+ 113 - 50
pages/seller/club/components/echart-contact.vue

@@ -1,24 +1,37 @@
 <template>
 	<view class="echart-content">
 		<view class="echart-title">
-			<view class="e-icon e4"><text class="iconfont icon-zixunjilu"></text></view> <view class="e-name">咨询记录</view>
+			<view class="e-icon e4"><text class="iconfont icon-zixunjilu"></text></view>
+			<view class="e-name">咨询记录</view>
 		</view>
 		<view class="echart-search">
 			<view class="echart-search-text">
-				<view class="search-text">所有:<text>¥10000(10个)</text></view>
-				<view class="search-text">当前范围:<text>¥10000(10个)</text></view>
+				<view class="search-text">所有:<text>{{ contactData.remarksTotal }}条</text></view>
+				<view class="search-text">当前范围:<text>{{ contactData.remarksScopeNum }}条</text></view>
 			</view>
 			<view class="echart-search-date">
 				<view class="echart-search-date-input">
-					<picker mode="date" :value="date" :start="startDate" :end="endDate" @change="bindStartDateChange">
-						<text class="input-text">{{ queryData.startAddTime }}</text>
+					<picker
+						mode="date"
+						:value="date"
+						:start="startDate"
+						:end="endDate"
+						@change="bindStartDateChange($event, 2)"
+					>
+						<text class="input-text">{{ contactData.startTime }}</text>
 					</picker>
 					<text class="iconfont icon-riqi"></text>
 				</view>
 				<view class="line">-</view>
 				<view class="echart-search-date-input">
-					<picker mode="date" :value="date" :start="startDate" :end="endDate" @change="bindEndDateChange">
-						<text class="input-text">{{ queryData.endAddTime }}</text>
+					<picker
+						mode="date"
+						:value="date"
+						:start="startDate"
+						:end="endDate"
+						@change="bindEndDateChange($event, 2)"
+					>
+						<text class="input-text">{{ contactData.endTime }}</text>
 					</picker>
 					<text class="iconfont icon-riqi"></text>
 				</view>
@@ -29,13 +42,23 @@
 					v-for="(time, index) in timeList"
 					:class="{ current: current === index }"
 					:key="index"
-					@click="handleTimeClick(time.current,index)"
+					@click="handleTimeClick(time.current, index, 2)"
 					>{{ time.label }}</view
 				>
 			</view>
 		</view>
 		<view class="echart-mains">
-			<qiun-data-charts type="column" :opts="opts" :chartData="chartData" :animation="false"/>
+			<view class="echart-mains-none" v-if="isEmpty">
+				<image
+					class="none-image"
+					src="https://static.caimei365.com/app/img/bg/icon_echart_none@2x.png"
+					mode=""
+				></image>
+				<view class="none-text">暂无数据</view>
+			</view>
+			<view class="echart-mains-data" v-else>
+				<qiun-data-charts type="column" :opts="opts" :chartData="contactChartData" :animation="false" />
+			</view>
 		</view>
 	</view>
 </template>
@@ -45,50 +68,71 @@ import { mapState, mapMutations } from 'vuex'
 import chartMixin from './mixins/chart.mixin.js'
 export default {
 	mixins: [chartMixin],
+	props:{
+		clubId:{
+			type:Number,
+			default:0
+		}
+	},
 	data() {
 		return {
-			chartData: {},
+			isEmpty:false,
+			current: 0,
+			contactChartData:null,
+			contactData:{
+			    startTime: '',
+			    endTime: '',
+			    remarksTotal:0,
+			    remarksScopeNum:0
+			},
+			params:{
+			    clubId:0,//  机构id
+			    dateType:3,//   日期类别 0日 1月 2半年 3全年
+			    startTime:'',//   开始时间
+			    endTime:'',//   结束时间
+			    type:0	//  统计类别 0订单 1搜索关键词 2咨询记录 3访问记录 4初始状态
+			},
 			opts: {
-				legend:{
-					show:false
+				legend: {
+					show: false
 				},
-				color: ["#81ecec"],
-				dataLabel:true,
+				color: ['#81ecec'],
+				dataLabel: true,
 				padding: [15, 30, 0, 5],
 				enableScroll: false,
 				xAxis: {
 					disableGrid: true,
 					min: 0,
 					axisLine: false,
-					max: 40 ,
-					rotateLabel:true,
-					format:'xAxisDemo3'
+					max: 40,
+					rotateLabel: true,
+					format: 'xAxisDemo3'
 				},
 				yAxis: {
-					fontSize:12,
-					fontColor:'#CCCCCC',
-					axisLineColor:'#DCDCDC',
-					gridColor:'#DCDCDC',
-					boundaryGap: 'justify', 
-					disabled:true,
+					fontSize: 12,
+					fontColor: '#CCCCCC',
+					axisLineColor: '#DCDCDC',
+					gridColor: '#DCDCDC',
+					boundaryGap: 'justify',
+					disabled: true,
 					axisLine: false,
 					min: 0,
-					max: 40 ,
+					max: 40
 				},
 				extra: {
 					column: {
-						type: "group",
+						type: 'group',
 						width: 20,
 						meterBorde: 1,
-						meterFillColor: "#FFFFFF",
-						activeBgColor: "#000000",
+						meterFillColor: '#FFFFFF',
+						activeBgColor: '#000000',
 						activeBgOpacity: 0.08,
 						seriesGap: 2,
 						categoryGap: 3,
 						barBorderCircle: false,
-						linearType: "custom",
-						linearOpacity: 1, 
-						customColor:['#00cec9','#81ecec'],
+						linearType: 'custom',
+						linearOpacity: 1,
+						customColor: ['#00cec9', '#81ecec'],
 						colorStop: 0
 					}
 				}
@@ -96,34 +140,55 @@ export default {
 		}
 	},
 	created() {
-		this.getServerData()
+		this.params.clubId = this.clubId
+		this.userClubPortrait(2)
 	},
-	computed: {},
 	methods: {
-		getServerData() {
+		handleTimeClick(dateType,index,type) {
+		    //年月日点击
+		    console.log('dateType', dateType)
+		    this.current = index
+		    this.params.dateType = dateType
+			this.params.startTime = ''
+			this.params.endTime = ''
+		    this.userClubPortrait(type)
+		},
+		async userClubPortrait(type){
+			this.params.type = type
+			this.contactData.startTime = this.params.startTime
+			this.contactData.endTime = this.params.endTime
+			try {
+				const res = await this.UserService.userClubPortrait(this.params)
+				const data = res.data
+				console.log('data',data)
+				this.contactData.remarksTotal = data.portrait.remarksTotal
+				this.contactData.remarksScopeNum = data.portrait.remarksScopeNum
+				this.contactData.startTime = this.params.startTime = data.portrait.startTime
+				this.contactData.endTime = this.params.endTime = data.portrait.endTime
+				if(data.remarks){
+					this.isEmpty = false  
+				    this.getSetContactData(data.remarks)
+				}else{
+					this.isEmpty = true  
+				}
+				console.log('contactData',this.contactData)
+			} catch (error) {
+			   this.$util.msg(error.msg, 2000)
+			}
+		},
+		getSetContactData(data) {
 			setTimeout(() => {
 				//模拟服务器返回数据,如果数据格式和标准格式不同,需自行按下面的格式拼接
 				let res = {
-					categories: [
-						'美博会',
-						'玻尿酸',
-						'氨基酸',
-						'Rossa阿萨科技的和',
-						'啊啊咔咔卡时间段',
-						'啊啊咔咔卡时间段',
-						'啊啊咔咔卡时间段',
-						'啊啊咔咔卡时间段',
-						'啊啊咔咔卡时间段',
-						'奥术大师..'
-					],
+					categories:data.name,
 					series: [
 						{
 							name: '',
-							data: [50, 72, 100, 83, 63, 42, 42, 42, 42, 42]
+							data: data.value
 						}
 					]
 				}
-				this.chartData = JSON.parse(JSON.stringify(res))
+				this.contactChartData = JSON.parse(JSON.stringify(res))
 			}, 500)
 		}
 	},
@@ -131,6 +196,4 @@ export default {
 }
 </script>
 
-<style lang="scss">
-
-</style>
+<style lang="scss"></style>

+ 75 - 12
pages/seller/club/components/echart-info.vue

@@ -3,15 +3,27 @@
 		<view class="echart-title">
 			<view class="e-icon e1"><text class="iconfont icon-gongsi"></text></view>
 			<view class="e-name">采美信息技术有限公司</view>
-			<view class="e-start">已上线</view>
+			<view class="e-start">{{ data.status | statusFilters }}</view>
 		</view>
-		<view class="echart-main clearfix">
-			<view class="echart-text"><text class="label">联系人:</text>黄志国</view>
-			<view class="echart-text"><text class="label">手机号:</text>15817887258</view>
-			<view class="echart-text"><text class="label">联系人身份:</text>采购</view>
-			<view class="echart-text"><text class="label">机构类型:</text>医美-门诊</view>
-			<view class="echart-text"><text class="label">地址:</text>安徽省合肥市</view>
-			<view class="echart-text"><text class="label">注册 间:</text> 2023-03-23</view>
+		<view class="echart-main clearfix" @click="handleClubInfo">
+			<view class="echart-text">
+				<text class="label">联系人:</text>{{ data.linkMan }}
+			</view>
+			<view class="echart-text">
+				<text class="label">手机号:</text>{{ data.contractMobile }}
+			</view>
+			<view class="echart-text" v-if="data.linkManIdentity">
+				<text class="label">联系人身份:</text>{{ data.linkManIdentity | linkManFormat }}
+			</view>
+			<view class="echart-text" v-if="data.firstClubType">
+				<text class="label">机构类型:</text>{{ data.firstClubType | FirstFormat }}-{{ data.secondClubType | TwoFormat }}
+			</view>
+			<view class="echart-text" v-if="data.provincialAddress">
+				<text class="label">地址:</text>{{ data.provincialAddress }}
+			</view>
+			<view class="echart-text">
+				<text class="label">注册时间:</text> {{ data.addTime }}
+			</view>
 			<view class="echart-next">详情></view>
 		</view>
 	</view>
@@ -20,17 +32,68 @@
 <script>
 import { mapState, mapMutations } from 'vuex'
 export default {
+	props:{
+		clubInfo:{
+			type:Object,
+			default:{}
+		}
+	},
 	data() {
 		return {
-			
+			data:{}
 		}
 	},
 	created() {
+		this.data = this.clubInfo
+	},
+	filters: {
+		FirstFormat(value) {
+			//处理格式
+			const map = {
+				1: '医美',
+				2: '生美',
+				3: '项目公司',
+				4: '个人',
+				5: '其他'
+			}
+			return map[value]
+		},
+		TwoFormat(value) {
+			if(!value){  return ''}
+			const map = {
+				1: '诊所',
+				2: '门诊',
+				3: '医院',
+				4: '其他',
+				5: '美容院',
+				6: '养生馆',
+				7: '其他',
+			}
+			return map[value]
+		},
+		linkManFormat(value) {
+			const map = {
+				1: '老板',
+				2: '采购',
+				3: '运营',
+				4: '其他'
+			}
+			return map[value]
+		},
+		statusFilters(value) {
+			// 状态
+			const map = {
+				1: '待审核',
+				90: '已上线',
+				92: '审核未通过'
+			}
+			return map[value]
+		}
 	},
-	filters: {},
-	computed: {},
 	methods: {
-		
+		handleClubInfo(){
+			this.$api.navigateTo(`/pages/seller/club/club-detail?userId=${this.data.userId}`)
+		},
 	},
 	onShow() {}
 }

+ 117 - 50
pages/seller/club/components/echart-keyword.vue

@@ -1,24 +1,41 @@
 <template>
 	<view class="echart-content">
 		<view class="echart-title">
-			<view class="e-icon e3"><text class="iconfont icon-sousuoguanjianci"></text></view> <view class="e-name">搜索关键词</view>
+			<view class="e-icon e3"><text class="iconfont icon-sousuoguanjianci"></text></view>
+			<view class="e-name">搜索关键词</view>
 		</view>
 		<view class="echart-search">
 			<view class="echart-search-text">
-				<view class="search-text">所有:<text>¥10000(10个)</text></view>
-				<view class="search-text">当前范围:<text>¥10000(10个)</text></view>
+				<view class="search-text"
+					>所有:<text>{{ keyWordData.totalKeywords }}条</text></view
+				>
+				<view class="search-text"
+					>当前范围:<text>{{ keyWordData.keyWordsScopeNum }}条</text></view
+				>
 			</view>
 			<view class="echart-search-date">
 				<view class="echart-search-date-input">
-					<picker mode="date" :value="date" :start="startDate" :end="endDate" @change="bindStartDateChange">
-						<text class="input-text">{{ queryData.startAddTime }}</text>
+					<picker
+						mode="date"
+						:value="date"
+						:start="startDate"
+						:end="endDate"
+						@change="bindStartDateChange($event, 1)"
+					>
+						<text class="input-text">{{ keyWordData.startTime }}</text>
 					</picker>
 					<text class="iconfont icon-riqi"></text>
 				</view>
 				<view class="line">-</view>
 				<view class="echart-search-date-input">
-					<picker mode="date" :value="date" :start="startDate" :end="endDate" @change="bindEndDateChange">
-						<text class="input-text">{{ queryData.endAddTime }}</text>
+					<picker
+						mode="date"
+						:value="date"
+						:start="startDate"
+						:end="endDate"
+						@change="bindEndDateChange($event, 1)"
+					>
+						<text class="input-text">{{ keyWordData.endTime }}</text>
 					</picker>
 					<text class="iconfont icon-riqi"></text>
 				</view>
@@ -29,13 +46,23 @@
 					v-for="(time, index) in timeList"
 					:class="{ current: current === index }"
 					:key="index"
-					@click="handleTimeClick(time.current,index)"
+					@click="handleTimeClick(time.current, index, 1)"
 					>{{ time.label }}</view
 				>
 			</view>
 		</view>
 		<view class="echart-mains">
-			<qiun-data-charts type="column" :opts="opts" :chartData="chartData" :animation="false"/>
+			<view class="echart-mains-none" v-if="isEmpty">
+				<image
+					class="none-image"
+					src="https://static.caimei365.com/app/img/bg/icon_echart_none@2x.png"
+					mode=""
+				></image>
+				<view class="none-text">暂无数据</view>
+			</view>
+			<view class="echart-mains-data" v-else>
+				<qiun-data-charts type="column" :opts="opts" :chartData="keyWordChartData" :animation="false" />
+			</view>
 		</view>
 	</view>
 </template>
@@ -45,50 +72,71 @@ import { mapState, mapMutations } from 'vuex'
 import chartMixin from './mixins/chart.mixin.js'
 export default {
 	mixins: [chartMixin],
+	props:{
+		clubId:{
+			type:Number,
+			default:0
+		}
+	},
 	data() {
 		return {
-			chartData: {},
+			isEmpty:false,
+			current: 0,
+			keyWordChartData: null,
+			keyWordData: {
+				startTime: '',
+				endTime: '',
+				totalKeywords: 0,
+				keyWordsScopeNum: 0
+			},
+			params:{
+			    clubId:0,//  机构id
+			    dateType:3,//   日期类别 0日 1月 2半年 3全年
+			    startTime:'',//   开始时间
+			    endTime:'',//   结束时间
+			    type:0	//  统计类别 0订单 1搜索关键词 2咨询记录 3访问记录 4初始状态
+			},
 			opts: {
-				legend:{
-					show:false
+				legend: {
+					show: false
 				},
-				color: ["#9370DB"],
-				dataLabel:true,
+				color: ['#9370DB'],
+				dataLabel: true,
 				padding: [15, 30, 0, 5],
 				enableScroll: false,
 				xAxis: {
 					disableGrid: true,
 					min: 0,
 					axisLine: false,
-					max: 40 ,
-					rotateLabel:true,
-					format:'xAxisDemo3'
+					max: 40,
+					rotateLabel: true,
+					format: 'xAxisDemo3'
 				},
 				yAxis: {
-					fontSize:12,
-					fontColor:'#CCCCCC',
-					axisLineColor:'#DCDCDC',
-					gridColor:'#DCDCDC',
-					boundaryGap: 'justify', 
-					disabled:true,
+					fontSize: 12,
+					fontColor: '#CCCCCC',
+					axisLineColor: '#DCDCDC',
+					gridColor: '#DCDCDC',
+					boundaryGap: 'justify',
+					disabled: true,
 					axisLine: false,
 					min: 0,
-					max: 40 ,
+					max: 40
 				},
 				extra: {
 					column: {
-						type: "group",
+						type: 'group',
 						width: 20,
 						meterBorde: 1,
-						meterFillColor: "#FFFFFF",
-						activeBgColor: "#000000",
+						meterFillColor: '#FFFFFF',
+						activeBgColor: '#000000',
 						activeBgOpacity: 0.08,
 						seriesGap: 2,
 						categoryGap: 3,
 						barBorderCircle: false,
-						linearType: "custom",
-						linearOpacity: 1, 
-						customColor:['#7B68EE','#9370DB'],
+						linearType: 'custom',
+						linearOpacity: 1,
+						customColor: ['#7B68EE', '#9370DB'],
 						colorStop: 0
 					}
 				}
@@ -96,34 +144,55 @@ export default {
 		}
 	},
 	created() {
-		this.getServerData()
+		this.params.clubId = this.clubId
+		this.userClubPortrait(1)
 	},
-	computed: {},
 	methods: {
-		getServerData() {
+		handleTimeClick(dateType, index,type) {
+			//年月日点击
+			console.log('dateType', dateType)
+			this.current = index
+			this.params.dateType = dateType
+			this.params.startTime = ''
+			this.params.endTime = ''
+			this.userClubPortrait(type)
+		},
+		async userClubPortrait(type){
+			this.params.type = type
+			this.keyWordData.startTime = this.params.startTime
+			this.keyWordData.endTime = this.params.endTime
+			try {
+				const res = await this.UserService.userClubPortrait(this.params)
+				const data = res.data
+				console.log('data',data)
+				this.keyWordData.totalKeywords = data.portrait.totalKeywords
+				this.keyWordData.keyWordsScopeNum = data.portrait.keyWordsScopeNum
+				this.keyWordData.startTime = this.params.startTime = data.portrait.startTime
+				this.keyWordData.endTime = this.params.endTime = data.portrait.endTime
+				if (data.behavior) {
+					this.isEmpty = false
+					this.getSetKeywordData(data.behavior)
+				}else{
+					this.isEmpty = true  
+				}
+				console.log('keyWordData', this.keyWordData)
+			} catch (error) {
+			   this.$util.msg(error.msg, 2000)
+			}
+		},
+		getSetKeywordData(data) {
 			setTimeout(() => {
 				//模拟服务器返回数据,如果数据格式和标准格式不同,需自行按下面的格式拼接
 				let res = {
-					categories: [
-						'美博会',
-						'玻尿酸',
-						'氨基酸',
-						'Rossa阿萨科技的和',
-						'啊啊咔咔卡时间段',
-						'啊啊咔咔卡时间段',
-						'啊啊咔咔卡时间段',
-						'啊啊咔咔卡时间段',
-						'啊啊咔咔卡时间段',
-						'奥术大师..'
-					],
+					categories: data.name,
 					series: [
 						{
 							name: '',
-							data: [50, 72, 100, 83, 63, 42, 42, 42, 42, 42]
+							data: data.value
 						}
 					]
 				}
-				this.chartData = JSON.parse(JSON.stringify(res))
+				this.keyWordChartData = JSON.parse(JSON.stringify(res))
 			}, 500)
 		}
 	},
@@ -131,6 +200,4 @@ export default {
 }
 </script>
 
-<style lang="scss">
-
-</style>
+<style lang="scss"></style>

+ 89 - 26
pages/seller/club/components/echart-order.vue

@@ -5,20 +5,32 @@
 		</view>
 		<view class="echart-search">
 			<view class="echart-search-text">
-				<view class="search-text">所有:<text>¥10000(10个)</text></view>
-				<view class="search-text">当前范围:<text>¥10000(10个)</text></view>
+				<view class="search-text">所有:<text>¥{{ orderData.orderTotalAmount }}({{ orderData.orderTotal }}个)</text></view>
+				<view class="search-text">当前范围:<text>¥{{ orderData.orderScopeTotalFee }}({{ orderData.orderScopeNum }}个)</text></view>
 			</view>
 			<view class="echart-search-date">
 				<view class="echart-search-date-input">
-					<picker mode="date" :value="date" :start="startDate" :end="endDate" @change="bindStartDateChange">
-						<text class="input-text">{{ queryData.startAddTime }}</text>
+					<picker
+						mode="date"
+						:value="date"
+						:start="startDate"
+						:end="endDate"
+						@change="bindStartDateChange($event, 0)"
+					>
+						<text class="input-text">{{ orderData.startTime }}</text>
 					</picker>
 					<text class="iconfont icon-riqi"></text>
 				</view>
 				<view class="line">-</view>
 				<view class="echart-search-date-input">
-					<picker mode="date" :value="date" :start="startDate" :end="endDate" @change="bindEndDateChange">
-						<text class="input-text">{{ queryData.endAddTime }}</text>
+					<picker
+						mode="date"
+						:value="date"
+						:start="startDate"
+						:end="endDate"
+						@change="bindEndDateChange($event, 0)"
+					>
+						<text class="input-text">{{ orderData.endTime }}</text>
 					</picker>
 					<text class="iconfont icon-riqi"></text>
 				</view>
@@ -29,13 +41,23 @@
 					v-for="(time, index) in timeList"
 					:class="{ current: current === index }"
 					:key="index"
-					@click="handleTimeClick(time.current,index)"
+					@click="handleTimeClick(time.current, index, 0)"
 					>{{ time.label }}</view
 				>
 			</view>
 		</view>
 		<view class="echart-mains">
-			<qiun-data-charts type="pie" :opts="opts" :chartData="chartData" :errorShow="false" />
+			<view class="echart-mains-none" v-if="isEmpty">
+				<image
+					class="none-image"
+					src="https://static.caimei365.com/app/img/bg/icon_echart_none@2x.png"
+					mode=""
+				></image>
+				<view class="none-text">暂无数据</view>
+			</view>
+			<view class="echart-mains-data" v-else>
+				<qiun-data-charts type="pie" :opts="opts" :chartData="orderChartData" :errorShow="false" />
+			</view>
 		</view>
 	</view>
 </template>
@@ -45,12 +67,32 @@ import { mapState, mapMutations } from 'vuex'
 import chartMixin from './mixins/chart.mixin.js'
 export default {
 	mixins: [chartMixin],
+	props:{
+		clubId:{
+			type:Number,
+			default:0
+		}
+	},
 	data() {
-		const currentDate = this.getDate({
-			format: true
-		})
 		return {
-			chartData: {},
+			isEmpty:false,
+			current: 0,
+			orderChartData:null,
+			orderData:{
+			    startTime: '',
+			    endTime: '',
+			    orderTotal:0,
+			    orderScopeNum:0,
+				orderTotalAmount:0,
+				orderScopeTotalFee:0
+			},
+			params:{
+			    clubId:0,//  机构id
+			    dateType:3,//   日期类别 0日 1月 2半年 3全年
+			    startTime:'',//   开始时间
+			    endTime:'',//   结束时间
+			    type:0	//  统计类别 0订单 1搜索关键词 2咨询记录 3访问记录 4初始状态
+			},
 			opts: {
 				timing: 'easeOut',
 				duration: 1000,
@@ -151,13 +193,41 @@ export default {
 		}
 	},
 	created() {
-		console.log('111111111')
-		this.getServerData()
+		this.params.clubId = this.clubId
+		this.userClubPortrait(0)
 	},
-	filters: {},
-	
 	methods: {
-		getServerData() {
+		handleTimeClick(dateType,index,type) {
+		    //年月日点击
+		    console.log('dateType', dateType)
+		    this.current = index
+		    this.params.dateType = dateType
+			this.params.startTime = ''
+			this.params.endTime = ''
+		    this.userClubPortrait(type)
+		},
+		async userClubPortrait(type){
+			this.params.type = type
+			try {
+				const res = await this.UserService.userClubPortrait(this.params)
+				const data = res.data
+				this.orderData.orderTotal = data.portrait.orderTotal
+				this.orderData.orderScopeNum = data.portrait.orderScopeNum
+				this.orderData.orderTotalAmount = data.portrait.orderTotalAmount
+				this.orderData.orderScopeTotalFee = data.portrait.orderScopeTotalFee
+				this.orderData.startTime = this.params.startTime = data.portrait.startTime
+				this.orderData.endTime = this.params.endTime = data.portrait.endTime
+				if(data.order){
+					this.isEmpty = false
+				    this.getSetOrderData(data.order)
+				}else{
+					this.isEmpty = true  
+				}
+			} catch (error) {
+			   this.$util.msg(error.msg, 2000)
+			}
+		},
+		getSetOrderData(data) {
 			//模拟从服务器获取数据时的延时
 			setTimeout(() => {
 				//模拟服务器返回数据,如果数据格式和标准格式不同,需自行按下面的格式拼接
@@ -165,18 +235,11 @@ export default {
 					series: [
 						{
 							format: 'pieDemo1',
-							data: [
-								{ name: '普通', value: 50, per: '63.5%' },
-								{ name: '二手', value: 5, per: '0%' },
-								{ name: '返佣', value: 5, per: '0%' },
-								{ name: '部分退款', value: 2, per: '0%' },
-								{ name: '全部退款', value: 4, per: '36.5%' },
-								{ name: '已关闭', value: 60, per: '0%' }
-							]
+							data: data.orderList
 						}
 					]
 				}
-				this.chartData = JSON.parse(JSON.stringify(res))
+				this.orderChartData = JSON.parse(JSON.stringify(res))
 			}, 500)
 		}
 	},

+ 106 - 47
pages/seller/club/components/echart-service.vue

@@ -1,20 +1,33 @@
 <template>
 	<view class="echart-content">
 		<view class="echart-title">
-			<view class="e-icon e5"><text class="iconfont icon-fangwenjilu"></text></view> <view class="e-name">访问记录</view>
+			<view class="e-icon e5"><text class="iconfont icon-fangwenjilu"></text></view>
+			<view class="e-name">访问记录</view>
 		</view>
 		<view class="echart-search">
 			<view class="echart-search-date">
 				<view class="echart-search-date-input">
-					<picker mode="date" :value="date" :start="startDate" :end="endDate" @change="bindStartDateChange">
-						<text class="input-text">{{ queryData.startAddTime }}</text>
+					<picker
+						mode="date"
+						:value="date"
+						:start="startDate"
+						:end="endDate"
+						@change="bindStartDateChange($event, 3)"
+					>
+						<text class="input-text">{{ serviceData.startTime }}</text>
 					</picker>
 					<text class="iconfont icon-riqi"></text>
 				</view>
 				<view class="line">-</view>
 				<view class="echart-search-date-input">
-					<picker mode="date" :value="date" :start="startDate" :end="endDate" @change="bindEndDateChange">
-						<text class="input-text">{{ queryData.endAddTime }}</text>
+					<picker
+						mode="date"
+						:value="date"
+						:start="startDate"
+						:end="endDate"
+						@change="bindEndDateChange($event, 3)"
+					>
+						<text class="input-text">{{ serviceData.endTime }}</text>
 					</picker>
 					<text class="iconfont icon-riqi"></text>
 				</view>
@@ -25,13 +38,23 @@
 					v-for="(time, index) in timeList"
 					:class="{ current: current === index }"
 					:key="index"
-					@click="handleTimeClick(time.current,index)"
+					@click="handleTimeClick(time.current, index, 3)"
 					>{{ time.label }}</view
 				>
 			</view>
 		</view>
 		<view class="echart-mains">
-			<qiun-data-charts type="column" :opts="opts" :chartData="chartData" :animation="false"/>
+			<view class="echart-mains-none" v-if="isEmpty">
+				<image
+					class="none-image"
+					src="https://static.caimei365.com/app/img/bg/icon_echart_none@2x.png"
+					mode=""
+				></image>
+				<view class="none-text">暂无数据</view>
+			</view>
+			<view class="echart-mains-data" v-else>
+				<qiun-data-charts type="column" :opts="opts" :chartData="serviceChartData" :animation="false" />
+			</view>
 		</view>
 	</view>
 </template>
@@ -41,49 +64,68 @@ import { mapState, mapMutations } from 'vuex'
 import chartMixin from './mixins/chart.mixin.js'
 export default {
 	mixins: [chartMixin],
+	props:{
+		clubId:{
+			type:Number,
+			default:0
+		}
+	},
 	data() {
 		return {
-			chartData: {},
+			isEmpty:false,
+			current: 0,
+			serviceChartData:null,
+			serviceData:{
+			    startTime: '',
+			    endTime: ''
+			},
+			params:{
+			    clubId:0,//  机构id
+			    dateType:3,//   日期类别 0日 1月 2半年 3全年
+			    startTime:'',//   开始时间
+			    endTime:'',//   结束时间
+			    type:0	//  统计类别 0订单 1搜索关键词 2咨询记录 3访问记录 4初始状态
+			},
 			opts: {
-				legend:{
-					show:false
+				legend: {
+					show: false
 				},
-				color: ["#74b9ff"],
-				dataLabel:true,
+				color: ['#74b9ff'],
+				dataLabel: true,
 				padding: [15, 30, 0, 5],
 				enableScroll: false,
 				xAxis: {
 					disableGrid: true,
 					min: 0,
 					axisLine: false,
-					max: 40 ,
-					rotateLabel:true,
-					format:'xAxisDemo3'
+					max: 40,
+					rotateLabel: true,
+					format: 'xAxisDemo3'
 				},
 				yAxis: {
-					fontSize:12,
-					fontColor:'#CCCCCC',
-					axisLineColor:'#DCDCDC',
-					gridColor:'#DCDCDC',
-					boundaryGap: 'justify', 
-					disabled:true,
+					fontSize: 12,
+					fontColor: '#CCCCCC',
+					axisLineColor: '#DCDCDC',
+					gridColor: '#DCDCDC',
+					boundaryGap: 'justify',
+					disabled: true,
 					axisLine: false,
 					min: 0,
-					max: 40 ,
+					max: 40
 				},
 				extra: {
 					column: {
-						type: "group",
+						type: 'group',
 						width: 20,
 						meterBorde: 1,
-						meterFillColor: "#FFFFFF",
-						activeBgColor: "#000000",
+						meterFillColor: '#FFFFFF',
+						activeBgColor: '#000000',
 						activeBgOpacity: 0.08,
 						seriesGap: 2,
 						categoryGap: 3,
 						barBorderCircle: false,
-						linearType: "custom",
-						linearOpacity: 1, 
+						linearType: 'custom',
+						linearOpacity: 1,
 						customColor: ['#0984e3', '#74b9ff'],
 						colorStop: 0
 					}
@@ -92,34 +134,53 @@ export default {
 		}
 	},
 	created() {
-		this.getServerData()
+		this.params.clubId = this.clubId
+		this.userClubPortrait(3)
 	},
-	computed: {},
 	methods: {
-		getServerData() {
+		handleTimeClick(dateType,index,type) {
+		    //年月日点击
+		    console.log('dateType', dateType)
+		    this.current = index
+		    this.params.dateType = dateType
+			this.params.startTime = ''
+			this.params.endTime = ''
+		    this.userClubPortrait(type)
+		},
+		async userClubPortrait(type){
+			this.params.type = type
+			this.serviceData.startTime = this.params.startTime
+			this.serviceData.endTime = this.params.endTime
+			try {
+				const res = await this.UserService.userClubPortrait(this.params)
+				const data = res.data
+				console.log('data',data)
+				this.serviceData.startTime = this.params.startTime = data.portrait.startTime
+				this.serviceData.endTime = this.params.endTime = data.portrait.endTime
+				if(data.pageType){
+					this.isEmpty = false  
+				    this.getSetServiceData(data.pageType)
+				}else{
+					this.isEmpty = true  
+				}
+				console.log('serviceData',this.serviceData)
+			} catch (error) {
+			   this.$util.msg(error.msg, 2000)
+			}
+		},
+		getSetServiceData(data) {
 			setTimeout(() => {
 				//模拟服务器返回数据,如果数据格式和标准格式不同,需自行按下面的格式拼接
 				let res = {
-					categories: [
-						'美博会',
-						'玻尿酸',
-						'氨基酸',
-						'Rossa阿萨科技的和',
-						'啊啊咔咔卡时间段',
-						'啊啊咔咔卡时间段',
-						'啊啊咔咔卡时间段',
-						'啊啊咔咔卡时间段',
-						'啊啊咔咔卡时间段',
-						'奥术大师..'
-					],
+					categories: data.name,
 					series: [
 						{
 							name: '',
-							data: [50, 72, 100, 83, 63, 42, 42, 42, 42, 42]
+							data: data.value
 						}
 					]
 				}
-				this.chartData = JSON.parse(JSON.stringify(res))
+				this.serviceChartData = JSON.parse(JSON.stringify(res))
 			}, 500)
 		}
 	},
@@ -127,6 +188,4 @@ export default {
 }
 </script>
 
-<style lang="scss">
-
-</style>
+<style lang="scss"></style>

+ 32 - 36
pages/seller/club/components/mixins/chart.mixin.js

@@ -1,20 +1,18 @@
-// 统计数据
-// 统计类型 1:首页banner;2:直播模块;3:最新活动;4:热门文章;5:新品橱窗;6:活动列表
+// 机构画像
 import Vue from 'vue'
 const chartMixin = {
     data() {
         const currentDate = this.getDate({
-        	format: true
+            format: true
         })
         return {
-        	date: currentDate,
-        	current:0,
-        	timeList: [
-        		{ label: '全年', current: 0 },
-        		{ label: '半年', current: 1 },
-        		{ label: '月', current: 2 },
-        		{ label: '日', current: 3 }
-        	]
+            date: currentDate,
+            timeList: [
+                { label: '全年', current: 3 },
+                { label: '半年', current: 2 },
+                { label: '月', current: 1 },
+                { label: '日', current: 0 }
+            ]
         }
     },
     computed: {
@@ -26,35 +24,33 @@ const chartMixin = {
         }
     },
     methods: {
-        handleTimeClick(type,index){
-      	//年月日点击
-      	this.current = index
+        bindStartDateChange(event,type) {
+            //开始时间
+            console.log('开始时间==>', event.detail.value)
+            this.params.startTime = event.detail.value
+            this.userClubPortrait(type)
         },
-        bindStartDateChange(event) {
-      	//开始时间
-      	console.log('开始时间==>', event.detail.value)
-      	this.queryData.startAddTime = event.detail.value
-        },
-        bindEndDateChange(event) {
-      	//结束时间
-      	console.log('结束时间==>', event.detail.value)
-      	this.queryData.endAddTime = event.detail.value
+        bindEndDateChange(event,type) {
+            //结束时间
+            console.log('结束时间==>', event.detail.value)
+            this.params.endTime = event.detail.value
+            this.userClubPortrait(type)
         },
         getDate(type) {
-      	const date = new Date()
-      	let year = date.getFullYear()
-      	let month = date.getMonth() + 1
-      	let day = date.getDate()
-      	if (type === 'start') {
-      		year = year - 1
-      	} else if (type === 'end') {
-      		year = year + 1
-      	}
-      	month = month > 9 ? month : '0' + month
-      	day = day > 9 ? day : '0' + day
-      	return `${year}-${month}-${day}`
+            const date = new Date()
+            let year = date.getFullYear()
+            let month = date.getMonth() + 1
+            let day = date.getDate()
+            if (type === 'start') {
+                year = year - 1
+            } else if (type === 'end') {
+                year = year + 1
+            }
+            month = month > 9 ? month : '0' + month
+            day = day > 9 ? day : '0' + day
+            return `${year}-${month}-${day}`
         }
     }
 }
 
-export default chartMixin
+export default chartMixin

+ 60 - 27
pages/seller/club/list.vue

@@ -120,7 +120,7 @@
 										"
 										>{{ club.customerValue }} <text class="iconfont icon-xiayibu"></text
 									></text>
-									<text class="tags-or" @click.stop="orderHistory(club)">
+									<text class="tags-or" @click.stop="handleOrderHistory(club)">
 										<text class="iconfont icon-dingdan"></text> 订单列表
 										<text
 											v-if="club.orderNum > 0"
@@ -147,7 +147,7 @@
 								<view class="btn" @click.stop="handleClickOper(2, club)">
 									<text class="iconfont icon-tianxie"></text> 填写咨询记录</view
 								>
-								<view class="btn" @click.stop="handleClickOper(4, club)">
+								<view class="btn" @click.stop="handleClickOper(3, club)">
 									<text class="iconfont icon-shangcheng"></text>商城访问记录
 								</view>
 								<view
@@ -156,11 +156,22 @@
 									@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="checkData(club)">
+									<view
+										class="btn-bubble"
+										:style="{
+											height: isManage ? '160rpx' : '80rpx',
+											top: isManage ? '-154rpx' : '-76rpx'
+										}"
+										v-if="currentIndex === index && club.bubble"
+									>
+										<view class="btn-view border" @click.stop="handleClickOper(4, club)">
 											<text class="iconfont icon-xiugaiziliao"></text> 修改资料
 										</view>
-										<view class="btn-view" @click.stop="handleReplaceClub(club)">
+										<view
+											class="btn-view"
+											v-if="isManage && club.serviceProviderId != 1342"
+											@click.stop="handleClickOper(5, club)"
+										>
 											<text class="iconfont icon-xiaoshou"></text> 更换协销
 										</view>
 									</view>
@@ -170,10 +181,14 @@
 								<view class="btn" @click.stop="handleClickOper(1, club)">
 									<text class="iconfont icon-jigouhuaxiang"></text> 机构画像</view
 								>
-								<view class="btn" @click.stop="handleClickOper(2, club)">
-									<text class="iconfont icon-tianxie"></text> 填写咨询记录</view
+								<view class="btn" @click.stop="handleClickOper(3, club)">
+									<text class="iconfont icon-tianxie"></text>商城访问记录</view
+								>
+								<view
+									class="btn none"
+									v-if="isManage && club.serviceProviderId != 1342"
+									@click.stop="handleClickOper(5, club)"
 								>
-								<view class="btn none" @click.stop="handleClickOper(4, club)">
 									<text class="iconfont icon-xiaoshou"></text>更换协销</view
 								>
 							</template>
@@ -437,27 +452,49 @@ export default {
 			this.salesParams.spId = data.serviceProviderId
 			this.userClubChoseSales(this.salesParams)
 		},
-		handleReplaceClub(club) {
-			//更换协销
-			this.salesParams.clubId = club.clubId
-			this.isSellerpopup = true
-		},
 		showRightDrawer() {
 			//显示筛选抽屉
 			this.rightDrawer = true
 		},
-		checkData(club) {
-			//修改机构资料
-			switch (this.tabCurrentNum) {
-				case 0:
-					this.$api.navigateTo(`/pages/seller/login/apply?userID=${club.userId}`)
-					break
+		// 按钮操作
+		handleClickOper(type, club) {
+			/**
+			 * 1:机构画像 2:填写咨询记录 3:商城访问记录 4:修改资料 5:更换协销
+			 * */
+
+			console.log('type', type)
+			switch (type) {
 				case 1:
-					this.$api.navigateTo(`/pages/seller/login/information?userID=${club.userId}`)
+					this.$api.navigateTo(`/pages/seller/club/club-portrait?userId=${club.userId}`)
 					break
+				case 2:
+					this.$api.navigateTo(`/pages/seller/remarks/add?userId=${club.userId}`)
+					break
+				case 3:
+					this.$api.navigateTo(`/pages/seller/club/club-info?clubId=${club.clubId}`)
+					break
+				case 4:
+					this.handleReturnPath(club)
+					break
+				case 5:
+					this.handleReplaceClub(club)
+					break
+			}
+		},
+		handleReplaceClub(club) {
+			//更换协销
+			this.salesParams.clubId = club.clubId
+			this.isSellerpopup = true
+		},
+		handleReturnPath(club) {
+			//修改机构资料
+			const tabMap = {
+				0: `/pages/seller/login/apply?userID=${club.userId}`,
+				1: `/pages/seller/login/information?userID=${club.userId}`
 			}
+			this.$api.navigateTo(tabMap[this.tabCurrentNum])
 		},
-		orderHistory(club) {
+		handleOrderHistory(club) {
 			//跳转机构历史订单
 			this.$api.setStorage('orderUserInfo', club)
 			if (this.tabSmallCurrentIndex === 1 || this.tabSmallCurrentIndex === 2) {
@@ -471,10 +508,6 @@ export default {
 				this.$api.navigateTo(`/pages/seller/order/order-historylist?clubId=${club.clubId}&listType=0`)
 			}
 		},
-		handleClubinfo(club) {
-			//跳转机构信息
-			this.$api.navigateTo(`/pages/seller/club/club-info?clubId=${club.clubId}`)
-		},
 		onShowClose() {
 			//输入框失去焦点时触发
 			if (this.listQuery.name != '') {
@@ -870,8 +903,8 @@ page,
 							border: 15rpx solid transparent;
 							border-top: 15rpx solid rgba(51, 51, 51, 0.8);
 							position: absolute;
-							bottom: -28rpx;
-							right: 42rpx;
+							bottom: -26rpx;
+							right: 35rpx;
 						}
 						.btn-view {
 							width: 100%;

+ 1 - 1
services/config.env.js

@@ -3,7 +3,7 @@ if(process.env.NODE_ENV === 'development'){
     // 开发环境
     // URL_CONFIG = 'http://192.168.2.67:18002'	 //智捷联调地址
     // URL_CONFIG = 'http://192.168.2.68:18002'	 //涛涛联调地址
-    // URL_CONFIG = 'http://192.168.2.17:18002' //志国联调地址
+    // URL_CONFIG = 'http://192.168.2.102:18002' //志国联调地址
     URL_CONFIG = 'https://core-b.caimei365.com'
     // URL_CONFIG = 'https://core.caimei365.com'  
 }else{

+ 30 - 0
services/user.service.js

@@ -900,5 +900,35 @@ export default class UserService {
 	        isLoading: false,
 	    }) 
     }
+    /**
+	 *@机构访问记录列表
+	 */
+    userClubRecordList(data = {}) {
+	    return this.AjaxService.get({
+	        url: '/user/club/record/list',
+	        data,
+	        isLoading: false,
+	    }) 
+    }
+    /**
+	 *@机构访问记录详情
+	 */
+    userClubRecordDetail(data = {}) {
+	    return this.AjaxService.get({
+	        url: '/user/club/record/detail',
+	        data,
+	        isLoading: false,
+	    }) 
+    }
+    /**
+	 *@机构画像
+	 */
+    userClubPortrait(data = {}) {
+	    return this.AjaxService.post({
+	        url: '/user/club/clubPortrait',
+	        data,
+	        isLoading: false,
+	    }) 
+    }
 	 
 }

+ 1 - 1
uni_modules/qiun-data-charts/js_sdk/u-charts/config-ucharts.js

@@ -73,7 +73,7 @@ const cfu = {
         },
         'pieDemo1':function(val, index, series, opts){
 		    if(index !== undefined){
-		        return `${series[index].name}${series[index].per}`
+		        return `${series[index].name}${series[index].per}%`
 		    }
         },
         'xAxisDemo3': function(val) {