<template>
|
|
<view class="profile-page">
|
|
<!-- 顶部导航 -->
|
|
<!-- <navbar
|
|
:title="userProfile.nickName || '用户主页'"
|
|
:leftClick="true"
|
|
:moreClick="showMoreOptions"
|
|
bgColor="transparent"
|
|
color="#fff"
|
|
@leftClick="$utils.navigateBack"
|
|
/> -->
|
|
|
|
<!-- 用户信息头部 -->
|
|
<view class="profile-header">
|
|
<!-- 背景装饰 -->
|
|
<view class="header-bg"></view>
|
|
|
|
<!-- 返回按钮 -->
|
|
<view class="back-btn" @click="$utils.navigateBack">
|
|
<uv-icon name="arrow-left" size="30rpx" color="#fff"></uv-icon>
|
|
</view>
|
|
|
|
<!-- 用户基本信息 -->
|
|
<view class="user-info">
|
|
<view class="user-avatar">
|
|
<image :src="userProfile.headImage" mode="aspectFill" @click="previewAvatar"></image>
|
|
<!-- VIP标识 -->
|
|
<view class="vip-badge" v-if="userProfile.isPay">
|
|
<text>{{ getVipLevel(userProfile.isPay) }}</text>
|
|
</view>
|
|
</view>
|
|
|
|
<view class="user-details">
|
|
<view class="username">{{ userProfile.nickName }}</view>
|
|
<view class="user-tags">
|
|
<!-- 性别年龄 -->
|
|
<view class="tag gender-tag" v-if="userProfile.sex">
|
|
<uv-icon :name="sexIcons[userProfile.sex]" size="24rpx" :color="sexColors[userProfile.sex]"></uv-icon>
|
|
<text>{{ userProfile.sex }}</text>
|
|
<text v-if="userProfile.yearDate">{{ getAge() }}岁</text>
|
|
</view>
|
|
<!-- 地址 -->
|
|
<view class="tag location-tag" v-if="userProfile.address">
|
|
<uv-icon name="map-pin" size="20rpx" color="#666"></uv-icon>
|
|
<text>{{ userProfile.address }}</text>
|
|
</view>
|
|
<!-- 认证状态 -->
|
|
<view class="tag auth-tag" v-if="userProfile.idCardOpen">
|
|
<uv-icon name="checkmark-circle-fill" size="20rpx" color="#52c41a"></uv-icon>
|
|
<text>{{ getAuthText(userProfile.idCardOpen) }}</text>
|
|
</view>
|
|
</view>
|
|
|
|
<!-- 学校信息 -->
|
|
<view class="school-info" v-if="userProfile.czSchool || userProfile.gzSchool">
|
|
<text v-if="userProfile.czSchool">🎓 {{ userProfile.czSchool }}</text>
|
|
<text v-if="userProfile.gzSchool">🏫 {{ userProfile.gzSchool }}</text>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
|
|
<!-- 数据统计 -->
|
|
<view class="stats-row">
|
|
<view class="stat-item" @click="showFans">
|
|
<view class="stat-number">{{ userProfile.intentionNum || 0 }}</view>
|
|
<view class="stat-label">粉丝</view>
|
|
</view>
|
|
<view class="stat-item" @click="showFollowing">
|
|
<view class="stat-number">{{ userProfile.followNum || 0 }}</view>
|
|
<view class="stat-label">关注</view>
|
|
</view>
|
|
<view class="stat-item" @click="showLikes">
|
|
<view class="stat-number">{{ userProfile.likeNum || 0 }}</view>
|
|
<view class="stat-label">获赞</view>
|
|
</view>
|
|
</view>
|
|
|
|
<!-- 操作按钮 -->
|
|
<view class="action-buttons" v-if="!isCurrentUser">
|
|
<button class="follow-btn" :class="{followed: isFollowed}" @click="toggleFollow">
|
|
<uv-icon :name="isFollowed ? 'checkmark' : 'plus'" size="24rpx"></uv-icon>
|
|
<text>{{ isFollowed ? '已关注' : '关注' }}</text>
|
|
</button>
|
|
<button class="message-btn" @click="sendMessage">
|
|
<uv-icon name="chat" size="24rpx"></uv-icon>
|
|
<text>私信</text>
|
|
</button>
|
|
</view>
|
|
</view>
|
|
|
|
<!-- 内容标签页 -->
|
|
<view class="content-tabs">
|
|
<uv-tabs
|
|
:list="contentTabs"
|
|
:current="currentTabIndex"
|
|
:activeStyle="{color: '#333', fontWeight: 600}"
|
|
lineColor="#5baaff"
|
|
lineHeight="6rpx"
|
|
lineWidth="40rpx"
|
|
keyName="name"
|
|
@click="onTabClick"
|
|
/>
|
|
</view>
|
|
|
|
<!-- 内容区域 -->
|
|
<view class="content-container">
|
|
<!-- 帖子 - 瀑布流展示 -->
|
|
<view v-if="currentTabIndex === 0" class="posts-content">
|
|
<waterfallContainer
|
|
v-if="postsList.length > 0"
|
|
:list="postsList"
|
|
@item-click="onPostClick"
|
|
@item-like="onPostLike"
|
|
/>
|
|
</view>
|
|
|
|
<!-- 租房信息 -->
|
|
<view v-else-if="currentTabIndex === 1" class="renting-content">
|
|
<rentingItem
|
|
v-for="(item, index) in rentingList"
|
|
:key="index"
|
|
:item="item"
|
|
@click="onRentingClick(item)"
|
|
/>
|
|
</view>
|
|
|
|
<!-- 招聘信息 -->
|
|
<view v-else-if="currentTabIndex === 2" class="work-content">
|
|
<workItem
|
|
v-for="(item, index) in workList"
|
|
:key="index"
|
|
:item="item"
|
|
@click="onWorkClick(item)"
|
|
/>
|
|
</view>
|
|
|
|
<!-- 店铺信息 -->
|
|
<view v-else-if="currentTabIndex === 3" class="shop-content">
|
|
<gourmetItem
|
|
v-for="(item, index) in shopList"
|
|
:key="index"
|
|
:item="item"
|
|
@click="onShopClick(item)"
|
|
/>
|
|
</view>
|
|
|
|
<!-- 加载更多提示 -->
|
|
<view v-if="showLoadMore" class="load-more-state">
|
|
<uv-loading-icon size="32"></uv-loading-icon>
|
|
<text>加载更多...</text>
|
|
</view>
|
|
|
|
<!-- 没有更多数据提示 -->
|
|
<view v-if="showNoMore" class="no-more-state">
|
|
<text>— 没有更多了 —</text>
|
|
</view>
|
|
</view>
|
|
|
|
<!-- 空状态 -->
|
|
<view v-if="showEmptyState" class="empty-state">
|
|
<uv-empty
|
|
:text="getEmptyText()"
|
|
:icon="getEmptyIcon()"
|
|
iconSize="120"
|
|
></uv-empty>
|
|
</view>
|
|
|
|
<!-- 初始加载状态 -->
|
|
<view v-if="loading && currentList.length === 0" class="loading-state">
|
|
<uv-loading-icon size="40"></uv-loading-icon>
|
|
<text>加载中...</text>
|
|
</view>
|
|
</view>
|
|
</template>
|
|
|
|
<script>
|
|
import navbar from '@/components/base/navbar.vue'
|
|
import waterfallContainer from '@/components/list/square/waterfallContainer.vue'
|
|
import rentingItem from '@/components/list/renting/rentingItem.vue'
|
|
import workItem from '@/components/list/work/workItem.vue'
|
|
import gourmetItem from '@/components/list/gourmet/gourmetItem.vue'
|
|
import { mapState } from 'vuex'
|
|
|
|
export default {
|
|
components: {
|
|
navbar,
|
|
waterfallContainer,
|
|
rentingItem,
|
|
workItem,
|
|
gourmetItem
|
|
},
|
|
data() {
|
|
return {
|
|
userId: '', // 要查看的用户ID
|
|
userProfile: {}, // 用户资料
|
|
currentTabIndex: 0, // 当前标签页索引
|
|
contentTabs: [
|
|
{ name: '帖子', icon: 'grid' },
|
|
{ name: '租房', icon: 'home' },
|
|
{ name: '招聘', icon: 'search' },
|
|
{ name: '店铺', icon: 'shop' }
|
|
],
|
|
postsList: [], // 帖子列表
|
|
rentingList: [], // 租房列表
|
|
workList: [], // 招聘列表
|
|
shopList: [], // 店铺列表
|
|
loading: false, // 初始加载状态
|
|
loadingMore: false, // 加载更多状态
|
|
isFollowed: false, // 是否已关注
|
|
// 分页参数
|
|
pageParams: {
|
|
postsList: { pageNum: 1, hasMore: true },
|
|
rentingList: { pageNum: 1, hasMore: true },
|
|
workList: { pageNum: 1, hasMore: true },
|
|
shopList: { pageNum: 1, hasMore: true }
|
|
},
|
|
sexIcons: {
|
|
'男': 'mars',
|
|
'女': 'venus',
|
|
'其他': 'transgender'
|
|
},
|
|
sexColors: {
|
|
'男': '#4A90E2',
|
|
'女': '#FF69B4',
|
|
'其他': '#999'
|
|
}
|
|
}
|
|
},
|
|
computed: {
|
|
...mapState(['userInfo']),
|
|
|
|
// 是否是当前登录用户
|
|
isCurrentUser() {
|
|
return this.userInfo.id === this.userId
|
|
},
|
|
|
|
// 当前显示的列表
|
|
currentList() {
|
|
const listMap = ['postsList', 'rentingList', 'workList', 'shopList']
|
|
return this[listMap[this.currentTabIndex]] || []
|
|
},
|
|
|
|
// 当前列表的分页参数
|
|
currentPageParams() {
|
|
const listMap = ['postsList', 'rentingList', 'workList', 'shopList']
|
|
return this.pageParams[listMap[this.currentTabIndex]]
|
|
},
|
|
|
|
// 是否显示空状态
|
|
showEmptyState() {
|
|
return !this.loading && this.currentList.length === 0
|
|
},
|
|
|
|
// 是否显示加载更多
|
|
showLoadMore() {
|
|
return this.currentList.length > 0 && this.currentPageParams.hasMore && this.loadingMore
|
|
},
|
|
|
|
// 是否显示没有更多
|
|
showNoMore() {
|
|
return this.currentList.length > 0 && !this.currentPageParams.hasMore
|
|
}
|
|
},
|
|
onLoad(options) {
|
|
this.userId = options.userId || this.userInfo.id
|
|
this.loadUserProfile()
|
|
this.loadUserContent(false)
|
|
},
|
|
onPullDownRefresh() {
|
|
this.loadUserProfile()
|
|
this.refreshUserContent()
|
|
},
|
|
onReachBottom() {
|
|
this.loadMoreContent()
|
|
},
|
|
methods: {
|
|
|
|
// 显示更多选项
|
|
showMoreOptions() {
|
|
uni.showActionSheet({
|
|
itemList: ['举报用户', '拉黑用户'],
|
|
success: (res) => {
|
|
if (res.tapIndex === 0) {
|
|
this.reportUser()
|
|
} else if (res.tapIndex === 1) {
|
|
this.blockUser()
|
|
}
|
|
}
|
|
})
|
|
},
|
|
|
|
// 预览头像
|
|
previewAvatar() {
|
|
if (this.userProfile.headImage) {
|
|
uni.previewImage({
|
|
urls: [this.userProfile.headImage]
|
|
})
|
|
}
|
|
},
|
|
|
|
// 获取VIP等级
|
|
getVipLevel(level) {
|
|
const levels = ['', 'VIP', 'SVIP']
|
|
return levels[level] || ''
|
|
},
|
|
|
|
// 获取年龄
|
|
getAge() {
|
|
if (!this.userProfile.yearDate) return ''
|
|
const birthYear = parseInt(this.userProfile.yearDate)
|
|
const currentYear = new Date().getFullYear()
|
|
return currentYear - birthYear
|
|
},
|
|
|
|
// 获取认证文本
|
|
getAuthText(status) {
|
|
const authTexts = ['审核中', '个人认证', '店铺认证']
|
|
return authTexts[status] || '未认证'
|
|
},
|
|
|
|
// 标签页切换
|
|
onTabClick(item) {
|
|
this.currentTabIndex = item.index
|
|
this.refreshUserContent()
|
|
},
|
|
|
|
// 切换关注状态
|
|
toggleFollow() {
|
|
if (!uni.getStorageSync('token')) {
|
|
uni.showToast({
|
|
title: '请先登录',
|
|
icon: 'none'
|
|
})
|
|
return
|
|
}
|
|
|
|
this.isFollowed = !this.isFollowed
|
|
// 这里调用关注/取消关注API
|
|
this.$api(this.isFollowed ? 'followUser' : 'unfollowUser', {
|
|
userId: this.userId
|
|
}, res => {
|
|
if (res.code === 200) {
|
|
uni.showToast({
|
|
title: this.isFollowed ? '关注成功' : '取消关注',
|
|
icon: 'success'
|
|
})
|
|
}
|
|
})
|
|
},
|
|
|
|
// 发送私信
|
|
sendMessage() {
|
|
if (!uni.getStorageSync('token')) {
|
|
uni.showToast({
|
|
title: '请先登录',
|
|
icon: 'none'
|
|
})
|
|
return
|
|
}
|
|
|
|
uni.navigateTo({
|
|
url: `/pages_order/chat/chatDetail?userId=${this.userId}`
|
|
})
|
|
},
|
|
|
|
// 显示粉丝列表
|
|
showFans() {
|
|
uni.navigateTo({
|
|
url: `/pages_order/profile/fansList?userId=${this.userId}&type=fans`
|
|
})
|
|
},
|
|
|
|
// 显示关注列表
|
|
showFollowing() {
|
|
uni.navigateTo({
|
|
url: `/pages_order/profile/fansList?userId=${this.userId}&type=following`
|
|
})
|
|
},
|
|
|
|
// 显示点赞列表
|
|
showLikes() {
|
|
uni.showToast({
|
|
title: '功能开发中',
|
|
icon: 'none'
|
|
})
|
|
},
|
|
|
|
// 加载用户资料
|
|
loadUserProfile() {
|
|
this.loading = true
|
|
this.$api('getUserProfile', { userId: this.userId }, res => {
|
|
this.loading = false
|
|
uni.stopPullDownRefresh()
|
|
|
|
if (res.code === 200) {
|
|
this.userProfile = res.result
|
|
// 检查是否已关注(如果不是当前用户)
|
|
if (!this.isCurrentUser) {
|
|
this.checkFollowStatus()
|
|
}
|
|
}
|
|
})
|
|
},
|
|
|
|
// 检查关注状态
|
|
checkFollowStatus() {
|
|
this.$api('checkFollowStatus', { userId: this.userId }, res => {
|
|
if (res.code === 200) {
|
|
this.isFollowed = res.result.isFollowed
|
|
}
|
|
})
|
|
},
|
|
|
|
// 刷新用户内容(重置分页)
|
|
refreshUserContent() {
|
|
const listMap = ['postsList', 'rentingList', 'workList', 'shopList']
|
|
const currentListKey = listMap[this.currentTabIndex]
|
|
|
|
// 重置分页参数
|
|
this.pageParams[currentListKey].pageNum = 1
|
|
this.pageParams[currentListKey].hasMore = true
|
|
|
|
// 清空当前列表
|
|
this[currentListKey] = []
|
|
|
|
// 加载第一页数据
|
|
this.loadUserContent(false)
|
|
},
|
|
|
|
// 加载用户内容
|
|
loadUserContent(isLoadMore = false) {
|
|
const apiMap = [
|
|
'getUserPosts', // 帖子
|
|
'getUserRenting', // 租房
|
|
'getUserWork', // 招聘
|
|
'getUserShop' // 店铺
|
|
]
|
|
|
|
const listMap = ['postsList', 'rentingList', 'workList', 'shopList']
|
|
const currentListKey = listMap[this.currentTabIndex]
|
|
const currentPageParams = this.pageParams[currentListKey]
|
|
|
|
// 设置加载状态
|
|
if (isLoadMore) {
|
|
this.loadingMore = true
|
|
} else {
|
|
this.loading = true
|
|
}
|
|
|
|
this.$api(apiMap[this.currentTabIndex], {
|
|
userId: this.userId,
|
|
pageNum: currentPageParams.pageNum,
|
|
pageSize: 20
|
|
}, res => {
|
|
// 清除加载状态
|
|
this.loading = false
|
|
this.loadingMore = false
|
|
uni.stopPullDownRefresh()
|
|
|
|
if (res.code === 200) {
|
|
const newData = res.result.records || res.result || []
|
|
|
|
if (isLoadMore) {
|
|
// 加载更多:追加数据
|
|
this[currentListKey] = [...this[currentListKey], ...newData]
|
|
} else {
|
|
// 首次加载:替换数据
|
|
this[currentListKey] = newData
|
|
}
|
|
|
|
// 更新分页状态
|
|
if (newData.length < 20) {
|
|
// 数据不足一页,说明没有更多了
|
|
this.pageParams[currentListKey].hasMore = false
|
|
} else {
|
|
// 还有更多数据,页码+1
|
|
this.pageParams[currentListKey].pageNum += 1
|
|
}
|
|
} else {
|
|
// 请求失败,恢复分页参数
|
|
if (isLoadMore && currentPageParams.pageNum > 1) {
|
|
this.pageParams[currentListKey].pageNum -= 1
|
|
}
|
|
}
|
|
})
|
|
},
|
|
|
|
// 加载更多内容
|
|
loadMoreContent() {
|
|
// 检查是否有更多数据和是否正在加载
|
|
if (!this.currentPageParams.hasMore || this.loadingMore || this.loading) {
|
|
return
|
|
}
|
|
|
|
// 检查当前列表是否有数据
|
|
if (this.currentList.length === 0) {
|
|
return
|
|
}
|
|
|
|
this.loadUserContent(true)
|
|
},
|
|
|
|
// 点击帖子
|
|
onPostClick(item) {
|
|
this.$utils.navigateTo(`/pages_order/post/postDetail?id=${item.id}`)
|
|
},
|
|
|
|
// 点赞帖子
|
|
onPostLike(item) {
|
|
console.log('点赞帖子:', item.id)
|
|
},
|
|
|
|
// 点击租房
|
|
onRentingClick(item) {
|
|
this.$utils.navigateTo(`/pages_order/renting/rentingDetail?id=${item.id}`)
|
|
},
|
|
|
|
// 点击招聘
|
|
onWorkClick(item) {
|
|
this.$utils.navigateTo(`/pages_order/work/workDetail?id=${item.id}`)
|
|
},
|
|
|
|
// 点击店铺
|
|
onShopClick(item) {
|
|
this.$utils.navigateTo(`/pages_order/gourmet/gourmetDetail?id=${item.id}`)
|
|
},
|
|
|
|
// 举报用户
|
|
reportUser() {
|
|
uni.showToast({
|
|
title: '举报功能开发中',
|
|
icon: 'none'
|
|
})
|
|
},
|
|
|
|
// 拉黑用户
|
|
blockUser() {
|
|
uni.showModal({
|
|
title: '确认拉黑该用户?',
|
|
success: (res) => {
|
|
if (res.confirm) {
|
|
// 调用拉黑API
|
|
uni.showToast({
|
|
title: '拉黑功能开发中',
|
|
icon: 'none'
|
|
})
|
|
}
|
|
}
|
|
})
|
|
},
|
|
|
|
// 获取空状态文本
|
|
getEmptyText() {
|
|
const emptyTexts = ['暂无帖子', '暂无租房信息', '暂无招聘信息', '暂无店铺信息']
|
|
return emptyTexts[this.currentTabIndex] || '暂无数据'
|
|
},
|
|
|
|
// 获取空状态图标
|
|
getEmptyIcon() {
|
|
const emptyIcons = ['list', 'home', 'search', 'shop']
|
|
return emptyIcons[this.currentTabIndex] || 'list'
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style scoped lang="scss">
|
|
.profile-page {
|
|
background-color: #f5f5f5;
|
|
min-height: 100vh;
|
|
}
|
|
|
|
|
|
|
|
.profile-header {
|
|
position: relative;
|
|
padding: 40rpx 30rpx 40rpx;
|
|
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
|
padding-top: 180rpx;
|
|
|
|
.header-bg {
|
|
position: absolute;
|
|
top: 0;
|
|
left: 0;
|
|
right: 0;
|
|
bottom: 0;
|
|
background: linear-gradient(135deg, rgba(102, 126, 234, 0.9) 0%, rgba(118, 75, 162, 0.9) 100%);
|
|
}
|
|
|
|
.back-btn {
|
|
position: absolute;
|
|
top: 80rpx;
|
|
left: 30rpx;
|
|
z-index: 3;
|
|
width: 70rpx;
|
|
height: 70rpx;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
background: rgba(255, 255, 255, 0.2);
|
|
border-radius: 50%;
|
|
backdrop-filter: blur(10rpx);
|
|
}
|
|
|
|
.user-info {
|
|
position: relative;
|
|
z-index: 2;
|
|
display: flex;
|
|
margin-bottom: 40rpx;
|
|
|
|
.user-avatar {
|
|
position: relative;
|
|
margin-right: 30rpx;
|
|
|
|
image {
|
|
width: 160rpx;
|
|
height: 160rpx;
|
|
border-radius: 80rpx;
|
|
border: 6rpx solid rgba(255, 255, 255, 0.3);
|
|
}
|
|
|
|
.vip-badge {
|
|
position: absolute;
|
|
bottom: -10rpx;
|
|
left: 50%;
|
|
transform: translateX(-50%);
|
|
background: linear-gradient(45deg, #FFD700, #FFA500);
|
|
color: #333;
|
|
padding: 6rpx 16rpx;
|
|
border-radius: 20rpx;
|
|
font-size: 20rpx;
|
|
font-weight: 600;
|
|
}
|
|
}
|
|
|
|
.user-details {
|
|
flex: 1;
|
|
color: #fff;
|
|
|
|
.username {
|
|
font-size: 36rpx;
|
|
font-weight: 600;
|
|
margin-bottom: 16rpx;
|
|
}
|
|
|
|
.user-tags {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
gap: 12rpx;
|
|
margin-bottom: 16rpx;
|
|
|
|
.tag {
|
|
display: flex;
|
|
align-items: center;
|
|
background: rgba(255, 255, 255, 0.2);
|
|
padding: 8rpx 16rpx;
|
|
border-radius: 20rpx;
|
|
font-size: 22rpx;
|
|
|
|
text {
|
|
margin-left: 6rpx;
|
|
}
|
|
}
|
|
}
|
|
|
|
.school-info {
|
|
font-size: 24rpx;
|
|
opacity: 0.9;
|
|
|
|
text {
|
|
display: block;
|
|
margin-bottom: 6rpx;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
.stats-row {
|
|
position: relative;
|
|
z-index: 2;
|
|
display: flex;
|
|
justify-content: space-around;
|
|
margin-bottom: 40rpx;
|
|
|
|
.stat-item {
|
|
text-align: center;
|
|
color: #fff;
|
|
|
|
.stat-number {
|
|
font-size: 40rpx;
|
|
font-weight: 600;
|
|
margin-bottom: 8rpx;
|
|
}
|
|
|
|
.stat-label {
|
|
font-size: 24rpx;
|
|
opacity: 0.8;
|
|
}
|
|
}
|
|
}
|
|
|
|
.action-buttons {
|
|
position: relative;
|
|
z-index: 2;
|
|
display: flex;
|
|
gap: 20rpx;
|
|
|
|
button {
|
|
flex: 1;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
padding: 20rpx 0;
|
|
border-radius: 50rpx;
|
|
font-size: 28rpx;
|
|
border: none;
|
|
|
|
text {
|
|
margin-left: 8rpx;
|
|
}
|
|
}
|
|
|
|
.follow-btn {
|
|
background: #fff;
|
|
color: #333;
|
|
|
|
&.followed {
|
|
background: rgba(255, 255, 255, 0.3);
|
|
color: #fff;
|
|
}
|
|
}
|
|
|
|
.message-btn {
|
|
background: rgba(255, 255, 255, 0.3);
|
|
color: #fff;
|
|
}
|
|
}
|
|
}
|
|
|
|
.content-tabs {
|
|
background: #fff;
|
|
border-bottom: 1rpx solid #eee;
|
|
padding: 0 20rpx;
|
|
}
|
|
|
|
.content-container {
|
|
min-height: 400rpx;
|
|
|
|
.posts-content,
|
|
.renting-content,
|
|
.work-content,
|
|
.shop-content {
|
|
padding: 20rpx 0;
|
|
}
|
|
}
|
|
|
|
.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;
|
|
}
|
|
}
|
|
|
|
.load-more-state {
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
padding: 40rpx 0;
|
|
|
|
text {
|
|
margin-top: 15rpx;
|
|
font-size: 24rpx;
|
|
color: #666;
|
|
}
|
|
}
|
|
|
|
.no-more-state {
|
|
padding: 30rpx 0;
|
|
text-align: center;
|
|
|
|
text {
|
|
font-size: 24rpx;
|
|
color: #ccc;
|
|
}
|
|
}
|
|
</style>
|