|
|
- <template>
- <view class="square-page">
- <navbar title="广场"/>
-
-
- <!-- 一级分类:关注/发现 -->
- <view class="primary-tabs">
- <view
- class="primary-tab-item"
- :class="{active: currentPrimaryTab === 0}"
- @click="switchPrimaryTab(0)"
- >
- 关注
- </view>
- <view
- class="primary-tab-item"
- :class="{active: currentPrimaryTab === 1}"
- @click="switchPrimaryTab(1)"
- >
- 发现
- </view>
- </view>
-
- <!-- 二级分类:城市列表 -->
- <!-- <view class="secondary-tabs">
- <scroll-view scroll-x="true" class="city-scroll">
- <view class="city-tabs">
- <view
- class="city-tab-item"
- :class="{active: currentCityIndex === -1}"
- @click="switchCity(-1, null)"
- >
- 全部
- </view>
- <view
- v-for="(city, index) in cityList"
- :key="city.id || index"
- class="city-tab-item"
- :class="{active: currentCityIndex === index}"
- @click="switchCity(index, city)"
- >
- {{ city.name || city.cityName }}
- </view>
- </view>
- </scroll-view>
- </view> -->
-
- <!-- 使用uv-tabs组件的城市分类 -->
- <view class="city-tabs-container">
- <uv-tabs
- :list="cityTabsList"
- :current="currentCityTabIndex"
- :activeStyle="{color: '#5baaff', fontWeight: 600}"
- lineColor="#5baaff"
- lineHeight="6rpx"
- lineWidth="40rpx"
- keyName="name"
- @click="onCityTabClick"
- />
- </view>
-
- <!-- 瀑布流列表 -->
- <view class="content-container">
- <waterfallContainer
- :list="List"
- @item-click="onItemClick"
- @item-like="onItemLike"
- />
-
- <!-- 加载更多提示 -->
- <view v-if="loadmore && List.length > 0" class="load-more">
- <uv-loading-icon size="28"></uv-loading-icon>
- <text class="load-more-text">加载更多...</text>
- </view>
-
- <!-- 没有更多数据提示 -->
- <view v-if="!loadmore && List.length > 0" class="no-more">
- <text>— 没有更多了 —</text>
- </view>
- </view>
-
- <!-- 空状态 -->
- <view v-if="!loading && List.length === 0" class="empty-state">
- <uv-empty
- text="暂无动态"
- textColor="#999"
- icon="list"
- iconColor="#ddd"
- iconSize="120"
- ></uv-empty>
- </view>
-
- <!-- 加载状态 -->
- <view v-if="loading && List.length === 0" class="loading-state">
- <uv-loading-icon size="40"></uv-loading-icon>
- <text class="loading-text">加载中...</text>
- </view>
-
- <tabber select="1" />
- </view>
- </template>
-
- <script>
- import navbar from '@/components/base/navbar.vue'
- import tabber from '@/components/base/tabbar.vue'
- import waterfallContainer from '@/components/list/square/waterfallContainer.vue'
- import mixinsList from '@/mixins/loadList.js'
- import { mapState } from 'vuex'
-
- export default {
- mixins: [mixinsList],
- components: {
- navbar,
- tabber,
- waterfallContainer
- },
- data() {
- return {
- mixinsListApi: 'getPostPage', // 使用与首页相同的API
- currentPrimaryTab: 1, // 默认显示发现
- currentCityIndex: -1, // 默认全部城市
- currentCity: null,
- currentCityTabIndex: 0 // uv-tabs当前选中的城市索引
- }
- },
- onLoad() {
- // 获取城市列表
- this.$store.commit('getCityList')
-
- // 初始化查询参数
- this.initQueryParams()
- },
- onShow() {
- this.refreshList()
- },
- onPullDownRefresh() {
- this.refreshList()
- },
- onReachBottom() {
- this.loadMore()
- },
- computed: {
- ...mapState(['cityList']),
-
- // 城市标签页列表(包含"全部"选项)
- cityTabsList() {
- const allTab = { id: null, name: '全部' }
- const cityTabs = this.cityList.map(city => ({
- id: city.id || city.cityId,
- name: city.name || city.cityName || city.title
- }))
- return [allTab, ...cityTabs]
- }
- },
- methods: {
- // 初始化查询参数
- initQueryParams() {
- // 设置默认查询参数
- this.queryParams = {
- ...this.queryParams,
- type: this.currentPrimaryTab // 0: 关注, 1: 发现
- }
-
- // 如果有选择城市,添加城市参数
- if (this.currentCity) {
- this.queryParams.cityId = this.currentCity.id || this.currentCity.cityId
- }
- },
-
- // 切换一级分类
- switchPrimaryTab(index) {
- if (this.currentPrimaryTab === index) return
-
- this.currentPrimaryTab = index
- this.queryParams.type = index
-
- this.refreshList()
- },
-
- // 切换城市(已注释,改用uv-tabs的onCityTabClick方法)
- // switchCity(index, city) {
- // if (this.currentCityIndex === index) return
- //
- // this.currentCityIndex = index
- // this.currentCity = city
- //
- // // 更新查询参数
- // if (city) {
- // this.queryParams.cityId = city.id || city.cityId
- // } else {
- // delete this.queryParams.cityId
- // }
- //
- // this.refreshList()
- // },
-
- // 重写刷新方法
- onRefresh() {
- this.refreshList()
- },
-
- // 点击动态项
- onItemClick(item) {
- this.$utils.navigateTo('/pages_order/post/postDetail?id=' + item.id)
- },
-
- // 点赞动态
- onItemLike(item) {
- console.log('点赞动态:', item.id)
- // 这里可以添加点赞API调用
- },
-
- // uv-tabs城市切换事件
- onCityTabClick(item) {
- this.currentCityTabIndex = item.index
-
- // 如果是第一个(全部),清除城市筛选
- if (item.index === 0) {
- this.currentCity = null
- this.currentCityIndex = -1
- delete this.queryParams.cityId
- } else {
- // 获取对应的城市数据
- const cityData = this.cityList[item.index - 1] // 减1是因为第一个是"全部"
- this.currentCity = cityData
- this.currentCityIndex = item.index - 1
- this.queryParams.cityId = cityData.id || cityData.cityId
- }
-
- this.refreshList()
- }
- }
- }
- </script>
-
- <style scoped lang="scss">
- .square-page {
- background-color: #f5f5f5;
- min-height: 100vh;
- }
-
-
-
- .primary-tabs {
- background-color: #fff;
- display: flex;
- padding: 0 30rpx;
- border-bottom: 1rpx solid #eee;
-
- .primary-tab-item {
- flex: 1;
- text-align: center;
- padding: 30rpx 0;
- font-size: 32rpx;
- color: #666;
- position: relative;
-
- &.active {
- color: #5baaff;
- font-weight: bold;
-
- &::after {
- content: '';
- position: absolute;
- bottom: 0;
- left: 50%;
- transform: translateX(-50%);
- width: 60rpx;
- height: 6rpx;
- background-color: #5baaff;
- border-radius: 3rpx;
- }
- }
- }
- }
-
- // 原有的二级分类样式(已注释)
- // .secondary-tabs {
- // background-color: #fff;
- // border-bottom: 1rpx solid #eee;
- //
- // .city-scroll {
- // padding: 20rpx 0;
- //
- // .city-tabs {
- // display: flex;
- // white-space: nowrap;
- // padding: 0 30rpx;
- //
- // .city-tab-item {
- // flex-shrink: 0;
- // padding: 16rpx 32rpx;
- // margin-right: 20rpx;
- // background-color: #f8f9fa;
- // border-radius: 30rpx;
- // font-size: 28rpx;
- // color: #666;
- // border: 1rpx solid transparent;
- //
- // &.active {
- // background-color: #5baaff;
- // color: #fff;
- // }
- //
- // &:last-child {
- // margin-right: 30rpx;
- // }
- // }
- // }
- // }
- // }
-
- // uv-tabs城市分类容器
- .city-tabs-container {
- background-color: #fff;
- border-bottom: 1rpx solid #eee;
- padding: 0 20rpx;
- }
-
- .content-container {
- padding: 0;
- }
-
- .empty-state {
- padding: 100rpx 0;
- text-align: center;
- }
-
- .loading-state {
- padding: 100rpx 0;
- text-align: center;
- display: flex;
- flex-direction: column;
- align-items: center;
-
- .loading-text {
- margin-top: 20rpx;
- font-size: 28rpx;
- color: #999;
- }
- }
-
- .load-more {
- padding: 30rpx 0;
- text-align: center;
- display: flex;
- flex-direction: column;
- align-items: center;
-
- .load-more-text {
- margin-top: 15rpx;
- font-size: 24rpx;
- color: #999;
- }
- }
-
- .no-more {
- padding: 30rpx 0;
- text-align: center;
-
- text {
- font-size: 24rpx;
- color: #ccc;
- }
- }
-
- // 原有的城市滚动条隐藏样式(已注释,uv-tabs自带滚动处理)
- // /deep/ .city-scroll::-webkit-scrollbar {
- // display: none;
- // }
- </style>
|