<template>
|
|
<view class="page">
|
|
|
|
<navbar title="同城群"/>
|
|
|
|
<!-- 顶部操作栏 -->
|
|
<view class="top-actions">
|
|
<view class="search-container">
|
|
<uv-search
|
|
v-model="searchKeyword"
|
|
placeholder="搜索群组名称"
|
|
@search="onSearch"
|
|
@clear="onClear"
|
|
bgColor="#f5f5f5"
|
|
:showAction="false"
|
|
></uv-search>
|
|
</view>
|
|
<view class="create-btn" @click="createGroup">
|
|
<uv-icon name="plus" size="30rpx" color="#fff"></uv-icon>
|
|
<text>创建群组</text>
|
|
</view>
|
|
</view>
|
|
|
|
<!-- 城市分类标签 -->
|
|
<view class="city-tabs-container">
|
|
<uv-tabs
|
|
:list="categoryList"
|
|
:current="currentCityTabIndex"
|
|
:activeStyle="{color: '#5baaff', fontWeight: 600}"
|
|
lineColor="#5baaff"
|
|
lineHeight="6rpx"
|
|
lineWidth="40rpx"
|
|
keyName="name"
|
|
@click="onCategoryClick"
|
|
/>
|
|
</view>
|
|
|
|
<!-- 群组列表 -->
|
|
<view class="group-list">
|
|
<groupItem
|
|
:key="index"
|
|
v-for="(item, index) in groupList"
|
|
:item="item"
|
|
@click="onGroupClick(item)"
|
|
/>
|
|
</view>
|
|
|
|
<!-- 空状态 -->
|
|
<view v-if="groupList.length === 0 && !loading" class="empty-state">
|
|
<uv-empty
|
|
mode="list"
|
|
text="暂无群组"
|
|
iconSize="120"
|
|
></uv-empty>
|
|
</view>
|
|
|
|
<!-- 加载状态 -->
|
|
<view v-if="loading" class="loading-state">
|
|
<uv-loading-icon size="40"></uv-loading-icon>
|
|
<text>加载中...</text>
|
|
</view>
|
|
|
|
<tabber select="2" />
|
|
</view>
|
|
</template>
|
|
|
|
<script>
|
|
import tabber from '@/components/base/tabbar.vue'
|
|
import groupItem from '@/components/list/group/groupItem.vue'
|
|
import { mapState } from 'vuex'
|
|
|
|
export default {
|
|
components : {
|
|
tabber,
|
|
groupItem,
|
|
},
|
|
data() {
|
|
return {
|
|
searchKeyword: '',
|
|
loading: false,
|
|
currentCityTabIndex: 0, // uv-tabs当前选中的城市索引
|
|
queryParams: {
|
|
cityId: null
|
|
},
|
|
groupList: [],
|
|
}
|
|
},
|
|
computed: {
|
|
...mapState(['cityList']),
|
|
|
|
// 城市分类列表(包含"全部"选项)
|
|
categoryList() {
|
|
const allTab = { name: '全部', value: null }
|
|
const cityTabs = this.cityList.map(city => ({
|
|
name: city.name || city.cityName || city.title,
|
|
value: city.id || city.cityId
|
|
}))
|
|
return [allTab, ...cityTabs]
|
|
}
|
|
},
|
|
onLoad() {
|
|
// 获取城市列表
|
|
this.$store.commit('getCityList')
|
|
|
|
// 页面加载时初始化数据
|
|
this.loadStaticGroupData()
|
|
},
|
|
onShow() {
|
|
// 页面显示时刷新数据
|
|
if (this.groupList.length === 0) {
|
|
this.loadStaticGroupData()
|
|
}
|
|
},
|
|
methods: {
|
|
// 加载静态群组数据
|
|
loadStaticGroupData(){
|
|
console.log('开始加载静态群组数据')
|
|
this.loading = true
|
|
// 模拟加载延迟
|
|
setTimeout(() => {
|
|
this.loading = false
|
|
console.log('加载完成,开始筛选数据')
|
|
// 根据分类筛选静态数据
|
|
this.filterGroupListByCategory()
|
|
}, 500)
|
|
},
|
|
|
|
// 根据分类筛选群组列表
|
|
filterGroupListByCategory() {
|
|
const allGroups = [
|
|
{
|
|
id: 1,
|
|
name: '江华同城交流群',
|
|
description: '江华本地生活交流,分享美食、租房、工作信息',
|
|
avatar: '/static/image/logo.jpg',
|
|
memberCount: 1280,
|
|
type: '同城群',
|
|
category: 'local',
|
|
qrCode: '/static/image/qr/group1.jpg',
|
|
lastMessage: '有人知道江华哪里有好的租房信息吗?',
|
|
lastMessageTime: '2小时前'
|
|
},
|
|
{
|
|
id: 2,
|
|
name: '江华美食分享群',
|
|
description: '发现江华本地美食,分享美食攻略',
|
|
avatar: '/static/image/logo.jpg',
|
|
memberCount: 856,
|
|
type: '兴趣群',
|
|
category: 'interest',
|
|
qrCode: '/static/image/qr/group2.jpg',
|
|
lastMessage: '推荐一家新开的火锅店,味道不错',
|
|
lastMessageTime: '1小时前'
|
|
},
|
|
{
|
|
id: 3,
|
|
name: '江华租房信息群',
|
|
description: '江华租房信息发布与交流',
|
|
avatar: '/static/image/logo.jpg',
|
|
memberCount: 2341,
|
|
type: '同城群',
|
|
category: 'local',
|
|
qrCode: '/static/image/qr/group3.jpg',
|
|
lastMessage: '有单间出租,位置好,价格实惠',
|
|
lastMessageTime: '30分钟前'
|
|
},
|
|
{
|
|
id: 4,
|
|
name: '江华求职招聘群',
|
|
description: '江华本地求职招聘信息发布',
|
|
avatar: '/static/image/logo.jpg',
|
|
memberCount: 1567,
|
|
type: '工作群',
|
|
category: 'work',
|
|
qrCode: '/static/image/qr/group4.jpg',
|
|
lastMessage: '招聘销售员,待遇优厚',
|
|
lastMessageTime: '1天前'
|
|
},
|
|
{
|
|
id: 5,
|
|
name: '江华旅游攻略群',
|
|
description: '江华旅游景点推荐,攻略分享',
|
|
avatar: '/static/image/logo.jpg',
|
|
memberCount: 623,
|
|
type: '兴趣群',
|
|
category: 'interest',
|
|
qrCode: '/static/image/qr/group5.jpg',
|
|
lastMessage: '周末去瑶族文化园玩,有一起的吗?',
|
|
lastMessageTime: '3小时前'
|
|
},
|
|
{
|
|
id: 6,
|
|
name: '江华学习交流群',
|
|
description: '江华本地学习交流,分享学习资源',
|
|
avatar: '/static/image/logo.jpg',
|
|
memberCount: 445,
|
|
type: '学习群',
|
|
category: 'study',
|
|
qrCode: '/static/image/qr/group6.jpg',
|
|
lastMessage: '有人一起学习英语吗?',
|
|
lastMessageTime: '2天前'
|
|
},
|
|
{
|
|
id: 7,
|
|
name: '江华二手交易群',
|
|
description: '江华本地二手物品交易',
|
|
avatar: '/static/image/logo.jpg',
|
|
memberCount: 1890,
|
|
type: '同城群',
|
|
category: 'local',
|
|
qrCode: '/static/image/qr/group7.jpg',
|
|
lastMessage: '出售一台九成新的洗衣机',
|
|
lastMessageTime: '1小时前'
|
|
},
|
|
{
|
|
id: 8,
|
|
name: '江华宠物交流群',
|
|
description: '江华宠物爱好者交流群',
|
|
avatar: '/static/image/logo.jpg',
|
|
memberCount: 567,
|
|
type: '兴趣群',
|
|
category: 'interest',
|
|
qrCode: '/static/image/qr/group8.jpg',
|
|
lastMessage: '有人知道江华哪里有好的宠物医院吗?',
|
|
lastMessageTime: '4小时前'
|
|
},
|
|
{
|
|
id: 9,
|
|
name: '江华汽车交流群',
|
|
description: '江华汽车爱好者交流,分享用车心得',
|
|
avatar: '/static/image/logo.jpg',
|
|
memberCount: 892,
|
|
type: '兴趣群',
|
|
category: 'interest',
|
|
qrCode: '/static/image/qr/group9.jpg',
|
|
lastMessage: '有人知道江华哪里有好的汽车维修店吗?',
|
|
lastMessageTime: '5小时前'
|
|
},
|
|
{
|
|
id: 10,
|
|
name: '江华宝妈交流群',
|
|
description: '江华宝妈育儿经验分享',
|
|
avatar: '/static/image/logo.jpg',
|
|
memberCount: 1234,
|
|
type: '同城群',
|
|
category: 'local',
|
|
qrCode: '/static/image/qr/group10.jpg',
|
|
lastMessage: '推荐江华最好的儿童医院',
|
|
lastMessageTime: '6小时前'
|
|
},
|
|
{
|
|
id: 11,
|
|
name: '江华IT技术交流群',
|
|
description: '江华IT从业者技术交流',
|
|
avatar: '/static/image/logo.jpg',
|
|
memberCount: 345,
|
|
type: '工作群',
|
|
category: 'work',
|
|
qrCode: '/static/image/qr/group11.jpg',
|
|
lastMessage: '有前端开发的工作机会吗?',
|
|
lastMessageTime: '1天前'
|
|
},
|
|
{
|
|
id: 12,
|
|
name: '江华健身运动群',
|
|
description: '江华健身爱好者交流群',
|
|
avatar: '/static/image/logo.jpg',
|
|
memberCount: 678,
|
|
type: '兴趣群',
|
|
category: 'interest',
|
|
qrCode: '/static/image/qr/group12.jpg',
|
|
lastMessage: '有人一起去健身房吗?',
|
|
lastMessageTime: '2小时前'
|
|
},
|
|
{
|
|
id: 13,
|
|
name: '江华摄影爱好者群',
|
|
description: '江华摄影爱好者交流群',
|
|
avatar: '/static/image/logo.jpg',
|
|
memberCount: 456,
|
|
type: '兴趣群',
|
|
category: 'interest',
|
|
qrCode: '/static/image/qr/group13.jpg',
|
|
lastMessage: '分享一张江华夜景照片',
|
|
lastMessageTime: '1天前'
|
|
},
|
|
{
|
|
id: 14,
|
|
name: '江华创业交流群',
|
|
description: '江华创业者交流平台',
|
|
avatar: '/static/image/logo.jpg',
|
|
memberCount: 789,
|
|
type: '工作群',
|
|
category: 'work',
|
|
qrCode: '/static/image/qr/group14.jpg',
|
|
lastMessage: '寻找创业合作伙伴',
|
|
lastMessageTime: '3天前'
|
|
},
|
|
{
|
|
id: 15,
|
|
name: '江华医疗健康群',
|
|
description: '江华医疗健康咨询交流',
|
|
avatar: '/static/image/logo.jpg',
|
|
memberCount: 1123,
|
|
type: '同城群',
|
|
category: 'local',
|
|
qrCode: '/static/image/qr/group15.jpg',
|
|
lastMessage: '推荐江华最好的牙科医院',
|
|
lastMessageTime: '4小时前'
|
|
},
|
|
{
|
|
id: 16,
|
|
name: '江华读书会',
|
|
description: '江华读书爱好者交流群',
|
|
avatar: '/static/image/logo.jpg',
|
|
memberCount: 234,
|
|
type: '学习群',
|
|
category: 'study',
|
|
qrCode: '/static/image/qr/group16.jpg',
|
|
lastMessage: '推荐一本好书《江华瑶族文化》',
|
|
lastMessageTime: '1周前'
|
|
},
|
|
{
|
|
id: 17,
|
|
name: '江华音乐爱好者群',
|
|
description: '江华音乐爱好者交流群',
|
|
avatar: '/static/image/logo.jpg',
|
|
memberCount: 567,
|
|
type: '兴趣群',
|
|
category: 'interest',
|
|
qrCode: '/static/image/qr/group17.jpg',
|
|
lastMessage: '有人会弹吉他吗?想学',
|
|
lastMessageTime: '2天前'
|
|
},
|
|
{
|
|
id: 18,
|
|
name: '江华电商交流群',
|
|
description: '江华电商从业者交流群',
|
|
avatar: '/static/image/logo.jpg',
|
|
memberCount: 890,
|
|
type: '工作群',
|
|
category: 'work',
|
|
qrCode: '/static/image/qr/group18.jpg',
|
|
lastMessage: '分享电商运营经验',
|
|
lastMessageTime: '1周前'
|
|
},
|
|
{
|
|
id: 19,
|
|
name: '江华园艺爱好者群',
|
|
description: '江华园艺爱好者交流群',
|
|
avatar: '/static/image/logo.jpg',
|
|
memberCount: 345,
|
|
type: '兴趣群',
|
|
category: 'interest',
|
|
qrCode: '/static/image/qr/group19.jpg',
|
|
lastMessage: '推荐江华最好的花店',
|
|
lastMessageTime: '3天前'
|
|
},
|
|
{
|
|
id: 20,
|
|
name: '江华法律咨询群',
|
|
description: '江华法律咨询服务交流',
|
|
avatar: '/static/image/logo.jpg',
|
|
memberCount: 678,
|
|
type: '同城群',
|
|
category: 'local',
|
|
qrCode: '/static/image/qr/group20.jpg',
|
|
lastMessage: '免费法律咨询服务',
|
|
lastMessageTime: '5天前'
|
|
}
|
|
]
|
|
|
|
this.groupList = allGroups
|
|
|
|
// 强制更新视图
|
|
this.$forceUpdate()
|
|
},
|
|
|
|
// 搜索群组
|
|
onSearch(keyword) {
|
|
this.searchKeyword = keyword
|
|
this.filterGroups()
|
|
},
|
|
|
|
// 清除搜索
|
|
onClear() {
|
|
this.searchKeyword = ''
|
|
this.filterGroups()
|
|
},
|
|
|
|
// 分类点击
|
|
onCategoryClick(item) {
|
|
this.currentCityTabIndex = item.index
|
|
|
|
if (item.value) {
|
|
// 使用城市ID作为筛选条件
|
|
this.queryParams.cityId = item.value
|
|
delete this.queryParams.category // 清除原有的分类参数
|
|
} else {
|
|
// 选择"全部"时清除城市筛选
|
|
delete this.queryParams.cityId
|
|
delete this.queryParams.category
|
|
}
|
|
this.loadStaticGroupData()
|
|
},
|
|
|
|
// 群组点击
|
|
onGroupClick(item) {
|
|
// 跳转到群组详情页
|
|
this.$utils.navigateTo('/pages_order/group/groupDetail?id=' + item.id)
|
|
},
|
|
|
|
// 过滤群组
|
|
filterGroups() {
|
|
if (!this.searchKeyword) {
|
|
return
|
|
}
|
|
// 这里可以实现搜索过滤逻辑
|
|
},
|
|
|
|
// 创建群组
|
|
createGroup() {
|
|
this.$utils.navigateTo('/pages_order/group/createGroup')
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style scoped lang="scss">
|
|
.page{
|
|
background-color: #f5f5f5;
|
|
min-height: 100vh;
|
|
|
|
.top-actions {
|
|
background-color: #fff;
|
|
padding: 20rpx;
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 20rpx;
|
|
|
|
.search-container {
|
|
flex: 1;
|
|
}
|
|
|
|
.create-btn {
|
|
display: flex;
|
|
align-items: center;
|
|
background-color: #5baaff;
|
|
color: #fff;
|
|
padding: 15rpx 20rpx;
|
|
border-radius: 30rpx;
|
|
font-size: 26rpx;
|
|
|
|
text {
|
|
margin-left: 8rpx;
|
|
}
|
|
}
|
|
}
|
|
|
|
.category-tabs {
|
|
background-color: #fff;
|
|
margin-bottom: 20rpx;
|
|
}
|
|
|
|
.group-list {
|
|
padding-bottom: 120rpx;
|
|
}
|
|
|
|
.empty-state {
|
|
padding: 100rpx 0;
|
|
text-align: center;
|
|
}
|
|
|
|
.loading-state {
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
justify-content: center;
|
|
padding: 100rpx 0;
|
|
|
|
text {
|
|
margin-top: 20rpx;
|
|
color: #999;
|
|
font-size: 28rpx;
|
|
}
|
|
}
|
|
}
|
|
</style>
|