import {useState, useCallback, useEffect} from 'react' import {View, Text} from '@tarojs/components' import Taro from '@tarojs/taro' import {Loading, InfiniteLoading, Empty, Avatar, Badge} from '@nutui/nutui-react-taro' import FixedButton from "@/components/FixedButton"; import {ShopChatMessage} from "@/api/shop/shopChatMessage/model"; import {pageShopChatMessage} from "@/api/shop/shopChatMessage"; import navTo from "@/utils/common"; const MessageIndex = () => { const [list, setList] = useState([]) const [loading, setLoading] = useState(false) const [page, setPage] = useState(1) const [hasMore, setHasMore] = useState(true) // 获取消息数据 const fetchMessageData = useCallback(async (resetPage = false, targetPage?: number, searchKeyword?: string) => { setLoading(true); try { const currentPage = resetPage ? 1 : (targetPage || page); // 构建API参数,根据状态筛选 const params: any = { type: 'text', page: currentPage, toUserId: Taro.getStorageSync('UserId') }; // 添加搜索关键词 if (searchKeyword && searchKeyword.trim()) { params.keywords = searchKeyword.trim(); } const res = await pageShopChatMessage(params); if (res?.list && res.list.length > 0) { // 正确映射状态 const mappedList = res.list.map(customer => ({ ...customer })); // 如果是重置页面或第一页,直接设置新数据;否则追加数据 if (resetPage || currentPage === 1) { setList(mappedList); } else { setList(prevList => prevList.concat(mappedList)); } // 正确判断是否还有更多数据 const hasMoreData = res.list.length >= 10; // 假设每页10条数据 setHasMore(hasMoreData); } else { if (resetPage || currentPage === 1) { setList([]); } setHasMore(false); } setPage(currentPage); } catch (error) { console.error('获取消息数据失败:', error); Taro.showToast({ title: '加载失败,请重试', icon: 'none' }); } finally { setLoading(false); } }, [page]); const reloadMore = async () => { if (loading || !hasMore) return; // 防止重复加载 const nextPage = page + 1; await fetchMessageData(false, nextPage); } // 获取列表数据(现在使用服务端搜索,不需要消息端过滤) const getFilteredList = () => { return list; }; useEffect(() => { // 初始化时加载数据 fetchMessageData(true, 1, ''); }, []); // 渲染消息项 const renderMessageItem = (item: any) => ( navTo(`/user/chat/message/detail?id=${item.id}`,true)}> {item.formUserAlias || item.formUserName} {item.createTime} {item.content} ); // 渲染消息列表 const renderMessageList = () => { const filteredList = getFilteredList(); return ( { // 滚动事件处理 }} onScrollToUpper={() => { // 滚动到顶部事件处理 }} loadingText={ <> 加载中... } loadMoreText={ filteredList.length === 0 ? ( ) : ( 没有更多了 ) } > {loading && filteredList.length === 0 ? ( 加载中... ) : ( filteredList.map(renderMessageItem) )} ); }; return ( {/* 消息列表 */} {renderMessageList()} navTo(`/user/chat/message/add`,true)}/> ); }; export default MessageIndex;