feat: 初始化
This commit is contained in:
112
pages/news/index.vue
Normal file
112
pages/news/index.vue
Normal file
@ -0,0 +1,112 @@
|
||||
<template>
|
||||
<NavBar />
|
||||
<view class="container">
|
||||
<view class="title">
|
||||
<PageTitle :title="$t('menu.news')" />
|
||||
</view>
|
||||
<view class="content">
|
||||
<Spin v-show="loading1" />
|
||||
<view v-if="newsList && newsList.length" class="top-news" @click="goDetail(newsList[0].id)">
|
||||
<image class="img" mode="aspectFill" :src="newsList[0].img_url"></image>
|
||||
<view class="info">
|
||||
<view class="news-title uni-ellipsis-2">{{ newsList[0].title }}</view>
|
||||
<view class="news-footer">
|
||||
<image class="icon" src="/static/clock.svg"></image>
|
||||
<text>{{ newsList[0].release_time }}</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="news-list">
|
||||
<template v-for="(item, index) in newsList">
|
||||
<view v-if="index > 0" class="news-item" @click="goDetail(item.id)">
|
||||
<image class="img" mode="aspectFill" :src="item.img_url"></image>
|
||||
<view class="info">
|
||||
<view class="news-title uni-ellipsis-2">{{ item.title }}</view>
|
||||
<view class="news-footer">
|
||||
<image class="icon" src="/static/clock.svg"></image>
|
||||
<text>{{ item.release_time }}</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
</view>
|
||||
<uni-load-more v-if="newsList && newsList.length" :status="loadStatus"></uni-load-more>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { queryNewsList } from '@/services/news';
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
searchFormData: {
|
||||
curr_page: 1,
|
||||
page_size: 21
|
||||
},
|
||||
loading: false,
|
||||
loading1: false,
|
||||
total: 0,
|
||||
newsList: [],
|
||||
hasMore: false
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
loadStatus() {
|
||||
if (this.loading) {
|
||||
return 'loading';
|
||||
}
|
||||
if (this.newsList && this.newsList.length) {
|
||||
if (this.newsList.length < this.total) {
|
||||
return 'more';
|
||||
}
|
||||
}
|
||||
return 'no-more';
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async getListData() {
|
||||
this.loading1 = true;
|
||||
const res = await queryNewsList(this.searchFormData);
|
||||
if (res && res.code === 0) {
|
||||
this.total = res.data.totalRecords;
|
||||
this.newsList = res.data.records;
|
||||
this.searchFormData.curr_page = this.newsList && this.total > this.newsList.length ? 2 : 1;
|
||||
this.hasMore = this.newsList && this.total > this.newsList.length;
|
||||
}
|
||||
this.loading1 = false;
|
||||
},
|
||||
goDetail(id) {
|
||||
uni.navigateTo({
|
||||
url: '/pages/news/detail?id=' + id
|
||||
});
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getListData();
|
||||
},
|
||||
onReachBottom() {
|
||||
if (this.loading || !this.hasMore) {
|
||||
return;
|
||||
}
|
||||
this.loading = true;
|
||||
queryNewsList(this.searchFormData)
|
||||
.then((res) => {
|
||||
if (res && res.code === 0) {
|
||||
this.total = res.data.totalRecords;
|
||||
this.newsList = [...this.newsList, ...res.data.records];
|
||||
this.searchFormData.curr_page = this.total > this.newsList.length ? this.searchFormData.curr_page + 1 : this.searchFormData.curr_page;
|
||||
this.hasMore = this.total > this.newsList.length;
|
||||
}
|
||||
this.loading = false;
|
||||
})
|
||||
.catch(() => {
|
||||
this.loading = false;
|
||||
});
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@import './index.scss';
|
||||
</style>
|
Reference in New Issue
Block a user