import { Input, ScrollView, Text, Textarea, View } from "@tarojs/components" import classnames from "classnames"; import Search from '@/components/search' import Product from '@/components/product' import InfiniteScroll from '@/components/infiniteScroll' import styles from './index.module.scss' import { useCallback, useEffect, useMemo, useRef, useState } from "react"; import Filter from "@/components/filter"; import SortBtn from "@/components/sortBtn"; import SelectData, {ListProps} from "../searchList/components/selectData"; import {GetProductListApi} from '@/api/material' import { useRouter } from "@tarojs/taro"; import { dataLoadingStatus, getFilterData } from "@/common/util"; import LoadingCard from "@/components/loadingCard"; import useLogin from "@/use/useLogin"; export default () => { useLogin() const [showPopup, setShowPopup] = useState(false) const router = useRouter() //搜索参数 const [searchField, setSearchField] = useState({ code_or_name: '', product_category_id: router.params.id, page : 1, size : 10, width: '', weight_density: '', product_kind_id: '', component: '' }) //获取列表 const [categoryList, setCategoryList] = useState<{list:any[], total:number}>({ list:[], total:0 }) const {fetchData, state} = GetProductListApi() const getSubjectList = async () => { let res = await fetchData(getFilterData(searchField)) setCategoryList({...categoryList, list:res.data.list, total: res.data.total}) } //监听筛选数据变化 useEffect(() => { getSubjectList() }, [searchField]) //上拉加载数据 const pageNum = useRef({size: searchField.size, page: searchField.page}) const getScrolltolower = () => { if(categoryList.list.length < categoryList.total) { pageNum.current.page++ const size = pageNum.current.size * pageNum.current.page setSearchField({...searchField, size }) } } //数据加载状态 const statusMore = useMemo(() => { return dataLoadingStatus({list:categoryList.list, total: categoryList.total, status: state.loading}) }, [categoryList, state]) //获取筛选条件 const getFiltr = (e) => { pageNum.current.page = 1 setCategoryList(() => ({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]) } //输入了搜索关键字 const getSearchData = useCallback((e) => { pageNum.current.page = 1 setCategoryList(() => ({list:[], total:0})) setSearchField((val) => ({...val, code_or_name:e, size:10})) }, []) //排序 type sortParam = 'none'|'top'|'bottom' const sortComprehensiveRef = useRef(null) const [sortStatus, setSortStatus] = useState<{comprehensive:sortParam}>({ comprehensive: 'none' }) const changeSort = () => { setCategoryList(() => ({list:[], total:0})) const {status, value} = sortComprehensiveRef.current.changeSort() setSortStatus((e) => ({...e, comprehensive: status, collection: 'none'})) setSearchField((e) => ({...e, abstract_sort_key: value, size:10, page:1})) pageNum.current = {size: 10, page: 1} } return ( changeSort()}> 综合 setShowPopup(true)}> 筛选 getScrolltolower()} statusMore={statusMore}> setShowPopup(false)} onFiltr={getFiltr}/> ) }