| 
						 | 
						- <template>
 - 	<view class="fans-list-page">
 - 		<navbar title="粉丝列表" leftClick @leftClick="$utils.navigateBack" />
 - 
 - 		<!-- 标签页切换 -->
 - 		<view class="tabs-container">
 - 			<uv-tabs 
 - 				:list="tabsList" 
 - 				:current="currentTab"
 - 				:activeStyle="{color: '#333', fontWeight: 600}"
 - 				lineColor="#5baaff" 
 - 				lineHeight="6rpx" 
 - 				lineWidth="40rpx"
 - 				keyName="name"
 - 				@click="onTabClick"
 - 			/>
 - 		</view>
 - 		
 - 		<!-- 用户列表 -->
 - 		<view class="user-list">
 - 			<view 
 - 				class="user-item" 
 - 				v-for="(user, index) in userList" 
 - 				:key="index"
 - 				@click="goToUserProfile(user)"
 - 			>
 - 				<view class="user-avatar">
 - 					<image :src="user.headImage" mode="aspectFill"></image>
 - 				</view>
 - 				
 - 				<view class="user-info">
 - 					<view class="user-name">{{ user.nickName }}</view>
 - 					<view class="user-desc">
 - 						<view class="user-tags">
 - 							<text class="tag" v-if="user.sex">{{ user.sex }}</text>
 - 							<text class="tag" v-if="user.address">{{ user.address }}</text>
 - 							<text class="auth-tag" v-if="user.idCardOpen">{{ getAuthText(user.idCardOpen) }}</text>
 - 						</view>
 - 					</view>
 - 				</view>
 - 				
 - 				<view class="user-action" v-if="!isCurrentUserPage">
 - 					<button 
 - 						class="follow-btn" 
 - 						:class="{followed: user.isFollowed}"
 - 						@click.stop="toggleFollow(user, index)"
 - 					>
 - 						{{ user.isFollowed ? '已关注' : '关注' }}
 - 					</button>
 - 				</view>
 - 			</view>
 - 		</view>
 - 		
 - 		<!-- 空状态 -->
 - 		<view v-if="!loading && userList.length === 0" class="empty-state">
 - 			<uv-empty 
 - 				:text="emptyText" 
 - 				icon="account"
 - 				iconSize="120"
 - 			></uv-empty>
 - 		</view>
 - 		
 - 		<!-- 加载状态 -->
 - 		<view v-if="loading" class="loading-state">
 - 			<uv-loading-icon size="40"></uv-loading-icon>
 - 			<text>加载中...</text>
 - 		</view>
 - 	</view>
 - </template>
 - 
 - <script>
 - 	import { mapState } from 'vuex'
 - 	
 - 	export default {
 - 		data() {
 - 			return {
 - 				userId: '', // 用户ID
 - 				type: 'fans', // fans: 粉丝, following: 关注
 - 				currentTab: 0,
 - 				tabsList: [
 - 					{ name: '粉丝', type: 'fans' },
 - 					{ name: '关注', type: 'following' }
 - 				],
 - 				userList: [], // 用户列表
 - 				loading: false,
 - 				// 模拟数据
 - 				mockFansData: [
 - 					{
 - 						id: '1',
 - 						nickName: '小美同学',
 - 						headImage: 'https://picsum.photos/100/100?random=1',
 - 						sex: '女',
 - 						address: '北京',
 - 						idCardOpen: 1,
 - 						isFollowed: false
 - 					},
 - 					{
 - 						id: '2',
 - 						nickName: '程序员小王',
 - 						headImage: 'https://picsum.photos/100/100?random=2',
 - 						sex: '男',
 - 						address: '上海',
 - 						idCardOpen: 2,
 - 						isFollowed: true
 - 					},
 - 					{
 - 						id: '3',
 - 						nickName: '设计师小李',
 - 						headImage: 'https://picsum.photos/100/100?random=3',
 - 						sex: '女',
 - 						address: '深圳',
 - 						idCardOpen: 0,
 - 						isFollowed: false
 - 					},
 - 					{
 - 						id: '4',
 - 						nickName: '产品经理老张',
 - 						headImage: 'https://picsum.photos/100/100?random=4',
 - 						sex: '男',
 - 						address: '广州',
 - 						idCardOpen: 1,
 - 						isFollowed: true
 - 					},
 - 					{
 - 						id: '5',
 - 						nickName: '运营小姐姐',
 - 						headImage: 'https://picsum.photos/100/100?random=5',
 - 						sex: '女',
 - 						address: '杭州',
 - 						idCardOpen: 2,
 - 						isFollowed: false
 - 					},
 - 					{
 - 						id: '6',
 - 						nickName: '前端工程师',
 - 						headImage: 'https://picsum.photos/100/100?random=6',
 - 						sex: '男',
 - 						address: '成都',
 - 						idCardOpen: 1,
 - 						isFollowed: true
 - 					},
 - 					{
 - 						id: '7',
 - 						nickName: 'UI设计师',
 - 						headImage: 'https://picsum.photos/100/100?random=7',
 - 						sex: '女',
 - 						address: '武汉',
 - 						idCardOpen: 0,
 - 						isFollowed: false
 - 					},
 - 					{
 - 						id: '8',
 - 						nickName: '后端大神',
 - 						headImage: 'https://picsum.photos/100/100?random=8',
 - 						sex: '男',
 - 						address: '西安',
 - 						idCardOpen: 2,
 - 						isFollowed: true
 - 					}
 - 				],
 - 				mockFollowingData: [
 - 					{
 - 						id: '9',
 - 						nickName: '技术大牛',
 - 						headImage: 'https://picsum.photos/100/100?random=9',
 - 						sex: '男',
 - 						address: '北京',
 - 						idCardOpen: 2,
 - 						isFollowed: true
 - 					},
 - 					{
 - 						id: '10',
 - 						nickName: '设计总监',
 - 						headImage: 'https://picsum.photos/100/100?random=10',
 - 						sex: '女',
 - 						address: '上海',
 - 						idCardOpen: 2,
 - 						isFollowed: true
 - 					},
 - 					{
 - 						id: '11',
 - 						nickName: '产品总监',
 - 						headImage: 'https://picsum.photos/100/100?random=11',
 - 						sex: '男',
 - 						address: '深圳',
 - 						idCardOpen: 1,
 - 						isFollowed: true
 - 					},
 - 					{
 - 						id: '12',
 - 						nickName: '运营总监',
 - 						headImage: 'https://picsum.photos/100/100?random=12',
 - 						sex: '女',
 - 						address: '广州',
 - 						idCardOpen: 2,
 - 						isFollowed: true
 - 					},
 - 					{
 - 						id: '13',
 - 						nickName: '架构师',
 - 						headImage: 'https://picsum.photos/100/100?random=13',
 - 						sex: '男',
 - 						address: '杭州',
 - 						idCardOpen: 1,
 - 						isFollowed: true
 - 					},
 - 					{
 - 						id: '14',
 - 						nickName: '资深设计师',
 - 						headImage: 'https://picsum.photos/100/100?random=14',
 - 						sex: '女',
 - 						address: '成都',
 - 						idCardOpen: 2,
 - 						isFollowed: true
 - 					}
 - 				]
 - 			}
 - 		},
 - 		computed: {
 - 			...mapState(['userInfo']),
 - 			
 - 			// 页面标题
 - 			pageTitle() {
 - 				return this.type === 'fans' ? '粉丝列表' : '关注列表'
 - 			},
 - 			
 - 			// 空状态文本
 - 			emptyText() {
 - 				return this.type === 'fans' ? '暂无粉丝' : '暂无关注'
 - 			},
 - 			
 - 			// 是否是当前用户的页面
 - 			isCurrentUserPage() {
 - 				return this.userId === this.userInfo.id
 - 			}
 - 		},
 - 		onLoad(options) {
 - 			this.userId = options.userId || this.userInfo.id
 - 			this.type = options.type || 'fans'
 - 			
 - 			// 设置初始tab
 - 			this.currentTab = this.type === 'fans' ? 0 : 1
 - 			
 - 			this.loadUserList()
 - 		},
 - 		onPullDownRefresh() {
 - 			this.loadUserList()
 - 		},
 - 		methods: {
 - 			// 返回上一页
 - 			goBack() {
 - 				uni.navigateBack()
 - 			},
 - 			
 - 			// 标签页切换
 - 			onTabClick(item) {
 - 				this.currentTab = item.index
 - 				this.type = item.type
 - 				this.loadUserList()
 - 			},
 - 			
 - 			// 获取认证文本
 - 			getAuthText(status) {
 - 				const authTexts = ['审核中', '个人认证', '店铺认证']
 - 				return authTexts[status] || '未认证'
 - 			},
 - 			
 - 			// 跳转到用户主页
 - 			goToUserProfile(user) {
 - 				uni.navigateTo({
 - 					url: `/pages_order/profile/userProfile?userId=${user.id}`
 - 				})
 - 			},
 - 			
 - 			// 切换关注状态
 - 			toggleFollow(user, index) {
 - 				if (!uni.getStorageSync('token')) {
 - 					uni.showToast({
 - 						title: '请先登录',
 - 						icon: 'none'
 - 					})
 - 					return
 - 				}
 - 				
 - 				const isFollowed = !user.isFollowed
 - 				
 - 				// 模拟API调用
 - 				setTimeout(() => {
 - 					// 更新本地数据
 - 					this.userList[index].isFollowed = isFollowed
 - 					
 - 					// 同时更新模拟数据源
 - 					if (this.type === 'fans') {
 - 						const mockIndex = this.mockFansData.findIndex(item => item.id === user.id)
 - 						if (mockIndex !== -1) {
 - 							this.mockFansData[mockIndex].isFollowed = isFollowed
 - 						}
 - 					} else {
 - 						const mockIndex = this.mockFollowingData.findIndex(item => item.id === user.id)
 - 						if (mockIndex !== -1) {
 - 							this.mockFollowingData[mockIndex].isFollowed = isFollowed
 - 						}
 - 					}
 - 					
 - 					uni.showToast({
 - 						title: isFollowed ? '关注成功' : '取消关注',
 - 						icon: 'success'
 - 					})
 - 				}, 500)
 - 			},
 - 			
 - 			// 加载用户列表
 - 			loadUserList() {
 - 				this.loading = true
 - 				
 - 				// 模拟网络延迟
 - 				setTimeout(() => {
 - 					this.loading = false
 - 					uni.stopPullDownRefresh()
 - 					
 - 					// 使用模拟数据
 - 					if (this.type === 'fans') {
 - 						this.userList = [...this.mockFansData]
 - 					} else {
 - 						this.userList = [...this.mockFollowingData]
 - 					}
 - 					
 - 					// 模拟API调用成功
 - 					console.log(`加载${this.type === 'fans' ? '粉丝' : '关注'}列表成功`)
 - 				}, 1000)
 - 			}
 - 		}
 - 	}
 - </script>
 - 
 - <style scoped lang="scss">
 - 	.fans-list-page {
 - 		background-color: #f5f5f5;
 - 		min-height: 100vh;
 - 	}
 - 	
 - 	.navbar {
 - 		position: fixed;
 - 		top: 0;
 - 		left: 0;
 - 		right: 0;
 - 		z-index: 100;
 - 		height: 88rpx;
 - 		background: #fff;
 - 		border-bottom: 1rpx solid #eee;
 - 		display: flex;
 - 		align-items: center;
 - 		justify-content: space-between;
 - 		padding: 0 30rpx;
 - 		padding-top: var(--status-bar-height, 44rpx);
 - 		
 - 		.nav-title {
 - 			color: #333;
 - 			font-size: 32rpx;
 - 			font-weight: 600;
 - 		}
 - 		
 - 		.nav-left, .nav-right {
 - 			width: 60rpx;
 - 			height: 60rpx;
 - 			display: flex;
 - 			align-items: center;
 - 			justify-content: center;
 - 		}
 - 	}
 - 	
 - 	.tabs-container {
 - 		margin-top: 88rpx;
 - 		padding-top: var(--status-bar-height, 44rpx);
 - 		background: #fff;
 - 		border-bottom: 1rpx solid #eee;
 - 		padding-left: 20rpx;
 - 		padding-right: 20rpx;
 - 	}
 - 	
 - 	.user-list {
 - 		padding: 20rpx;
 - 		
 - 		.user-item {
 - 			display: flex;
 - 			align-items: center;
 - 			background: #fff;
 - 			padding: 30rpx;
 - 			margin-bottom: 20rpx;
 - 			border-radius: 16rpx;
 - 			box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.05);
 - 			
 - 			.user-avatar {
 - 				width: 100rpx;
 - 				height: 100rpx;
 - 				border-radius: 50rpx;
 - 				overflow: hidden;
 - 				margin-right: 30rpx;
 - 				
 - 				image {
 - 					width: 100%;
 - 					height: 100%;
 - 				}
 - 			}
 - 			
 - 			.user-info {
 - 				flex: 1;
 - 				
 - 				.user-name {
 - 					font-size: 32rpx;
 - 					font-weight: 600;
 - 					color: #333;
 - 					margin-bottom: 12rpx;
 - 				}
 - 				
 - 				.user-desc {
 - 					.user-tags {
 - 						display: flex;
 - 						flex-wrap: wrap;
 - 						gap: 8rpx;
 - 						
 - 						.tag {
 - 							background: #f0f0f0;
 - 							color: #666;
 - 							padding: 4rpx 12rpx;
 - 							border-radius: 12rpx;
 - 							font-size: 20rpx;
 - 						}
 - 						
 - 						.auth-tag {
 - 							background: #52c41a;
 - 							color: #fff;
 - 							padding: 4rpx 12rpx;
 - 							border-radius: 12rpx;
 - 							font-size: 20rpx;
 - 						}
 - 					}
 - 				}
 - 			}
 - 			
 - 			.user-action {
 - 				.follow-btn {
 - 					background: #5baaff;
 - 					color: #fff;
 - 					border: none;
 - 					padding: 16rpx 32rpx;
 - 					border-radius: 30rpx;
 - 					font-size: 24rpx;
 - 					
 - 					&.followed {
 - 						background: #f0f0f0;
 - 						color: #666;
 - 					}
 - 				}
 - 			}
 - 		}
 - 	}
 - 	
 - 	.empty-state {
 - 		padding: 100rpx 0;
 - 		text-align: center;
 - 	}
 - 	
 - 	.loading-state {
 - 		display: flex;
 - 		flex-direction: column;
 - 		align-items: center;
 - 		padding: 60rpx 0;
 - 		
 - 		text {
 - 			margin-top: 20rpx;
 - 			font-size: 28rpx;
 - 			color: #999;
 - 		}
 - 	}
 - </style> 
 
 
  |