123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- <template>
- <view class="topic">
- <view class="header flex row-between">
- <view class="normal lg bold"># {{ topicName }}</view>
- <view class="flex">
- <image src="/bundle_b/static/icon_see.png"></image>
- <text class="lighter sm m-l-10">{{ click }}</text>
- </view>
- </view>
- <!-- Menu -->
- <view class="menu flex">
- <view class="menu--item" :class="{'active': sortHot}" @click="handleSortHot">最热</view>
- <view class="menu--item" :class="{'active': sortNew}" @click="handleSortNew">最新</view>
- </view>
- <view>
- <view v-if="lists.length">
- <u-waterfall ref="uWaterfall" v-model="lists" :add-time="200">
- <template v-slot:left="{leftList}">
- <view style="padding:0 9rpx 0 30rpx">
- <community-list width="336rpx" type="waterfall" :list="leftList"></community-list>
- </view>
- </template>
- <template v-slot:right="{rightList}">
- <view style="padding:0 30rpx 0 9rpx;">
- <community-list width="336rpx" type="waterfall" :list="rightList"></community-list>
- </view>
- </template>
- </u-waterfall>
- </view>
- <view class="p-t-60" v-else>
- <view class="flex row-center m-t-40">
- <u-image width="300" height="300" :src="'/bundle_b/static/works_null.png'"></u-image>
- </view>
- <view class="text-center muted m-t-40">
- 暂无话题文章~
- </view>
- </view>
- </view>
- </view>
- </template>
- <script>
- import {
- getCommunityTopicArticle
- } from "@/api/community.js"
- export default {
- data() {
- return {
- topicId: '',
- topicName: '',
- sortHot: true,
- sortNew: false,
- lists: [],
- click: 0, //查看|点击数
- page: 1,
- more: 1,
- pageSize: 10
- }
- },
- onLoad() {
- const options = this.$Route.query;
- this.topicId = options.id || '';
- this.topicName = options.name || '';
- },
- onShow() {
- this.getCommunityTopic()
- },
- // 触底加载
- onReachBottom() {
- console.log('触底')
- if (this.more) {
- this.getCommunityTopic()
- }
- },
- methods: {
- handleSortHot() {
- this.sortHot = !this.sortHot
- this.page = 1;
- this.getCommunityTopic()
- },
- handleSortNew() {
- this.sortNew = !this.sortNew
- this.page = 1;
- this.getCommunityTopic()
- },
- // 获取
- getCommunityTopic() {
- getCommunityTopicArticle({
- topic_id: this.topicId,
- sort_hot: this.sortHot ? 'desc' : 'asc',
- sort_new: this.sortNew ? 'desc' : 'asc',
- page_no: this.page,
- page_size: this.pageSize,
- }).then(res => {
- // 如果是第一页需手动置空列表
- if (this.page == 1) {
- if('uWaterfall' in this.$refs) this.$refs.uWaterfall.clear()
- this.lists = []
- }
- if (res.data.more === 1) {
- this.page += 1
- }
- this.click = res.data.click
- this.more = res.data.lists.more;
- // 异步:让vue能够监听到数据改变过了
- setTimeout(() => {
- this.lists = [...this.lists, ...res.data.lists.list]
- }, 0)
- })
- },
- }
- }
- </script>
- <style lang="scss">
- page {
- background-color: #FFFFFF;
- }
- .topic {
- .header {
- padding: 40rpx 40rpx 30rpx 30rpx;
- border-top: 1px solid $-color-body;
- border-bottom: 1px solid $-color-body;
- image {
- width: 42rpx;
- height: 42rpx;
- }
- }
- .menu {
- padding: 0 30rpx;
- &--item {
- margin: 20rpx 0;
- font-size: 28rpx;
- color: $-color-muted;
- margin-right: 50rpx;
- }
- .active {
- color: $-color-primary;
- font-weight: 500;
- }
- }
- }
- </style>
|