import { Image, ScrollView, Text, View } from "@tarojs/components" import classnames from "classnames"; import Search from '@/components/search' import Filter from "@/components/filter"; import InfiniteScroll from '@/components/infiniteScroll' import SortBtn from "@/components/sortBtn"; import SelectData, {ListProps} from "./components/selectData"; import { goLink } from "@/common/common"; import styles from './searchList.module.scss' import { useCallback, useEffect, useMemo, useRef, useState } from "react"; import {GetProductListApi} from "@/api/material" import Taro, { useDidShow, usePullDownRefresh, useRouter } from "@tarojs/taro"; import { formatHashTag, formatImgUrl } from "@/common/fotmat"; import { dataLoadingStatus, getFilterData } from "@/common/util"; import useLogin from "@/use/useLogin"; import LabAndImg from "@/components/LabAndImg"; export default () => { useLogin() const [showFilter, setShowFilter] = useState(false) const router = useRouter() //搜索参数 const [searchField, setSearchField] = useState({ code_or_name: router.params.key, page : 1, size : 10, width: '', weight_density: '', product_kind_id: '', component: '', abstract_sort_key: '' }) //获取面料列表 const [materialList, setMaterialList] = useState<{list:any[], total:number}>({list:[], total:0}) const {fetchData: materialFetchData, state: materialState} = GetProductListApi() const getProductList = async () => { let {data} = await materialFetchData(getFilterData(searchField)) setMaterialList({list:data.list, total:data.total}) Taro.stopPullDownRefresh() } //监听筛选条件变化 useEffect(() => { getProductList() }, [searchField]) //上拉加载数据 const pageNum = useRef({size: searchField.size, page: searchField.page}) const getScrolltolower = () => { if(materialList.list.length < materialList.total) { pageNum.current.page++ const size = pageNum.current.size * pageNum.current.page setSearchField({...searchField, size }) } } //数据加载状态 const statusMore = useMemo(() => { return dataLoadingStatus({list:materialList.list, total: materialList.total, status: materialState.loading}) }, [materialList, materialState]) //输入了搜索关键字 const getSearchData = useCallback((e) => { pageNum.current.page = 1 setMaterialList(() => ({list:[], total:0})) setSearchField((val) => ({...val, code_or_name:e, size:10})) }, []) const goLinkPage = (item) => { goLink('/pages/details/index',{id:item.id}) } //页面下拉刷新 usePullDownRefresh(() => { setSearchField({...searchField ,size : 10}) }) //监听滚动 const [scrollStatus, setScrollStatus] = useState(false) const onscroll = useCallback((e) => { if(e.detail.scrollTop > 20) { setScrollStatus(true) } else { setScrollStatus(false) } },[]) //获取筛选条件 const getFiltr = (e) => { pageNum.current.page = 1 setMaterialList(() => ({list:[], total:0})) const {data} = e setSearchField({ ...searchField, width: data?.width, weight_density: data?.weight, size: 10, component: data?.element, product_kind_id: data?.seriesId }) formatSelectList(e) } //筛选条件格式化 const [selectList , setSelectList] = useState() const formatSelectList = (val = {data:{}, field:{}}) => { let data:ListProps[] = [] for(let key in val.data) { if(key !== 'seriesId'&& val.data[key] != '') { data.push({title:val.field[key], value:val.data[key]}) } } setSelectList([...data]) } //排序 type sortParam = 'none'|'top'|'bottom' const sortComprehensiveRef = useRef(null) const sortCollectionRef = useRef(null) const [sortStatus, setSortStatus] = useState<{comprehensive:sortParam, collection:sortParam}>({ comprehensive: 'none', collection: 'none' }) const changeSort = (val) => { if(val == 1) { const {status, value} = sortComprehensiveRef.current.changeSort() setSortStatus((e) => ({...e, comprehensive: status, collection: 'none'})) setSearchField((e) => ({...e, abstract_sort_key: value})) } else { const {status, value} = sortCollectionRef.current.changeSort() setSortStatus((e) => ({...e, collection: status, comprehensive: 'none'})) setSearchField((e) => ({...e, abstract_sort_key: value})) } } const labAndImgObj = useCallback((item) => { const img = item?item.texture_url.split(',')[0]:'' return {lab:item.lab,rgb:item.rgb,texture_url:img} }, [materialList]) return ( changeSort(1)}> 综合 changeSort(2)}> 收藏 goLink('/pages/searchList/hightSearchList')}> 高级搜索 setShowFilter(true)}> 筛选 搜索结果 ({materialList.total}条记录) {materialList.list.map(item => { return goLinkPage(item)}> {(item.product_color_count)}色 {formatHashTag(item.code, item.name)} {item.width} {item.weight_density} {item.component} })} setShowFilter(false)} onFiltr={(e) => getFiltr(e)} /> ) }