100 lines
3.6 KiB
Vue
100 lines
3.6 KiB
Vue
|
<template>
|
|||
|
<view class="">
|
|||
|
<mescroll-uni ref="mescrollRef" top="0" bottom="200rpx" :height="height" @init="mescrollInit"
|
|||
|
@down="downCallback" @up="upCallback" :down="downOption" :up="upOption">
|
|||
|
<u-waterfall ref="uWaterfall" v-model="lists" :add-time="50">
|
|||
|
<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>
|
|||
|
</mescroll-uni>
|
|||
|
</view>
|
|||
|
</template>
|
|||
|
|
|||
|
<script>
|
|||
|
import {
|
|||
|
getCommunityArticleLists
|
|||
|
} from '@/api/community.js';
|
|||
|
import {
|
|||
|
trottle
|
|||
|
} from "@/utils/tools.js"
|
|||
|
import MescrollMixin from "@/components/mescroll-uni/mescroll-mixins.js";
|
|||
|
import MescrollMoreItemMixin from "@/components/mescroll-uni/mixins/mescroll-more-item.js";
|
|||
|
export default {
|
|||
|
mixins: [MescrollMixin, MescrollMoreItemMixin],
|
|||
|
props: {
|
|||
|
cateId: {
|
|||
|
type: [String, Number]
|
|||
|
}
|
|||
|
},
|
|||
|
data() {
|
|||
|
return {
|
|||
|
height: '',
|
|||
|
upOption: {
|
|||
|
empty: {
|
|||
|
icon: '/static/images/news_null.png',
|
|||
|
tip: '暂无任何内容...', // 提示
|
|||
|
fixed: true,
|
|||
|
top: "0",
|
|||
|
}
|
|||
|
},
|
|||
|
lists: []
|
|||
|
}
|
|||
|
},
|
|||
|
mounted() {
|
|||
|
uni.$on('changeItem', (event) => {
|
|||
|
const index = this.lists.findIndex(el => el.id == event.id)
|
|||
|
if (index == -1) return
|
|||
|
this.$refs.uWaterfall.modify(event.id, 'like', event.like)
|
|||
|
this.$refs.uWaterfall.modify(event.id, 'is_like', event.is_like)
|
|||
|
})
|
|||
|
|
|||
|
uni.getSystemInfo({
|
|||
|
success: (res) => {
|
|||
|
this.height = res.windowHeight - 46 + 'px';
|
|||
|
}
|
|||
|
});
|
|||
|
},
|
|||
|
methods: {
|
|||
|
// 获取
|
|||
|
async upCallback(page) {
|
|||
|
const pageNum = page.num
|
|||
|
const pageSize = page.size
|
|||
|
|
|||
|
getCommunityArticleLists({
|
|||
|
cate_id: this.cateId,
|
|||
|
page_no: pageNum,
|
|||
|
page_size: pageSize,
|
|||
|
}).then(res => {
|
|||
|
// 如果是第一页需手动置空列表
|
|||
|
if (pageNum == 1) {
|
|||
|
this.$refs.uWaterfall.clear()
|
|||
|
this.lists = []
|
|||
|
}
|
|||
|
// 重置列表数据
|
|||
|
const hasNext = !!res.data.more;
|
|||
|
// 异步:让vue能够监听到数据改变过了
|
|||
|
|
|||
|
// has_new 是通知父组件将关注右上角的是否新更新小点显示或隐藏
|
|||
|
uni.$emit('hasNew', res.data.has_new)
|
|||
|
|
|||
|
setTimeout(() => {
|
|||
|
this.lists = [...this.lists, ...res.data.list]
|
|||
|
}, 0)
|
|||
|
this.mescroll.endSuccess(res.data.list.length, hasNext);
|
|||
|
})
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
</script>
|
|||
|
|
|||
|
<style>
|
|||
|
</style>
|