import {useState, useCallback, useRef, useEffect} from "react"; import Taro from '@tarojs/taro' import {Space, NavBar, Button, Input} from '@nutui/nutui-react-taro' import {Search, Filter, ArrowLeft} from '@nutui/icons-react-taro' import {View} from '@tarojs/components'; import OrderList from "./components/OrderList"; import {useRouter} from '@tarojs/taro' import {ShopOrderParam} from "@/api/shop/shopOrder/model"; import './order.scss' function Order() { const {params} = useRouter(); const [statusBarHeight, setStatusBarHeight] = useState(0) // 默认值为0 const [searchParams, setSearchParams] = useState({ statusFilter: params.statusFilter != undefined && params.statusFilter != '' ? parseInt(params.statusFilter) : -1 }) const [showSearch, setShowSearch] = useState(false) const [searchKeyword, setSearchKeyword] = useState('') const searchTimeoutRef = useRef() const reload = async (where?: ShopOrderParam) => { console.log(where,'where...') setSearchParams(prev => ({ ...prev, ...where })) } // 防抖搜索函数 const debouncedSearch = useCallback((keyword: string) => { if (searchTimeoutRef.current) { clearTimeout(searchTimeoutRef.current); } searchTimeoutRef.current = setTimeout(() => { if (keyword.trim()) { handleSearch({keywords: keyword.trim()}); } else { // 如果搜索关键词为空,清除keywords参数 const newSearchParams = { ...searchParams }; delete newSearchParams.keywords; setSearchParams(newSearchParams); reload(newSearchParams).then(); } }, 500); // 500ms防抖延迟 }, [searchParams]); // 处理搜索 const handleSearch = (where: ShopOrderParam) => { // 合并搜索参数,保留当前的statusFilter const newSearchParams = { ...searchParams, // 保留当前的所有参数(包括statusFilter) ...where // 应用新的搜索条件 }; setSearchParams(newSearchParams) reload(newSearchParams).then() } useEffect(() => { // 获取状态栏高度 Taro.getSystemInfo({ success: (res) => { setStatusBarHeight(res.statusBarHeight ?? 0) }, }) // 设置导航栏标题 Taro.setNavigationBarTitle({ title: '我的订单' }); Taro.setNavigationBarColor({ backgroundColor: '#ffffff', frontColor: '#000000', }); reload().then() }, []); return (
Taro.navigateBack()}/> setShowSearch(!showSearch)} />
} > 我的订单
{/* 搜索和筛选工具栏 */} setShowSearch(!showSearch)} /> 筛选 {/* 搜索组件 */} {showSearch && ( { setSearchKeyword(value); debouncedSearch(value); // 使用防抖搜索 }} onConfirm={() => { if (searchKeyword.trim()) { handleSearch({keywords: searchKeyword.trim()}); } }} style={{ padding: '8px 12px', border: '1px solid #e5e5e5', borderRadius: '4px', backgroundColor: '#f8f9fa' }} /> )} {/*订单列表*/} reload(searchParams)} searchParams={searchParams} showSearch={showSearch} />
); } export default Order;