Files
HTFX-CRM-Sales/pages/news/index.vue
2025-07-07 16:05:18 +08:00

113 lines
2.9 KiB
Vue

<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>