import React, { useState, useEffect } from 'react' import { View, Text, ScrollView, Image } from '@tarojs/components' import Taro from '@tarojs/taro' import { listCmsArticle } from '@/api/cms/cmsArticle' import type { CmsArticle } from '@/api/cms/cmsArticle/model' import EmptyState from '@/components/common/EmptyState' import { useScrollHeight } from '@/hooks/useScrollHeight' import { getCompressedImageUrl } from '@/utils/image' definePageConfig({ navigationBarTitleText: '活动列表', }) const ArticleListPage: React.FC = () => { const [articles, setArticles] = useState([]) const [loading, setLoading] = useState(true) const [page, setPage] = useState(1) const [hasMore, setHasMore] = useState(true) const scrollHeight = useScrollHeight(44) const type = (Taro.getCurrentInstance().router?.params as any)?.type || 'activity' useEffect(() => { fetchArticles() }, []) const fetchArticles = async (loadMore = false) => { try { const currentPage = loadMore ? page + 1 : 1 const data = await listCmsArticle({ category: type === 'activity' ? 'activity' : 'notice', status: 1, page: currentPage, limit: 10, }) if (data) { if (loadMore) { setArticles(prev => [...prev, ...data]) setPage(currentPage) } else { setArticles(data) } setHasMore(data.length >= 10) } } catch (e) { console.error('获取文章列表失败:', e) } finally { setLoading(false) } } const handleLoadMore = () => { if (!hasMore || loading) return fetchArticles(true) } const handleArticleClick = (id: number) => { Taro.navigateTo({ url: `/pages/index/article-detail?id=${id}` }) } return ( {loading ? ( 加载中... ) : articles.length === 0 ? ( ) : ( {articles.map(item => ( handleArticleClick(item.id)} > {item.coverImage && ( )} {item.title} {item.summary && ( {item.summary} )} {item.createTime} {item.isHot && ( 热门 )} ))} {hasMore && ( 加载更多... )} )} ) } export default ArticleListPage