174 lines
6.0 KiB
TypeScript

import { View } from '@tarojs/components'
import Taro, { useDidShow, usePullDownRefresh, useRouter } from '@tarojs/taro'
import React, { ReactNode, memo, useCallback, useEffect, useMemo, useRef, useState } from 'react'
import classnames from 'classnames'
import styles from './index.module.scss'
import Tag from './components/Tag'
import Sort from './components/Sort'
import ChoseCity from './components/ChoseCity'
import ItemLiist from './components/ItemList'
import Popup from '@/components/popup'
import { dataLoadingStatus, debounce, getFilterData } from '@/common/util'
import { alert, goLink } from '@/common/common'
import { formatDateTime, formatPriceDiv, formatWeightDiv } from '@/common/format'
import Search from '@/components/search'
import InfiniteScroll from '@/components/infiniteScroll'
import { ClientListApi } from '@/api/order'
import SelectGroup from '@/components/SelectGroup'
const CustomerManagement = () => {
const [searchField, setSearchField] = useState<
{
page: number
size: number
label_ids: string
purchaser_type: number | string
name_phone_or_sale_user: string
province_id: any[] | string
city_id: any[] | string
abstract_sort_key: string
}
>({
page: 1,
size: 10,
label_ids: '',
purchaser_type: '',
name_phone_or_sale_user: '',
province_id: '',
city_id: '',
abstract_sort_key: '',
})
const [orderData, setOrderData] = useState<{ list: any[]; total: number }>({ list: [], total: 0 })
const { fetchData: listFetchData, state: orderState } = ClientListApi()
// 列表下拉刷新
const [refresherTriggeredStatus, setRefresherTriggeredStatus] = useState(false)
const getOrderList = async() => {
const res = await listFetchData({
...getFilterData(searchField),
})
setOrderData(e => ({ ...e, list: res.data?.list, total: res.data?.total }))
setRefresherTriggeredStatus(() => false)
}
// 监听筛选条件变化
useEffect(() => {
getOrderList()
}, [searchField])
// 数据加载状态
const statusMore = useMemo(() => {
return dataLoadingStatus({ list: orderData.list, total: orderData.total, status: orderState.loading! })
}, [orderData, orderState])
// 上拉加载数据
const pageNum = useRef({ size: searchField.size, page: searchField.page })
// 输入了搜索关键字
const getSearchData = useCallback((e) => {
pageNum.current.page = 1
setOrderData(() => ({ list: [], total: 0 }))
setSearchField(val => ({ ...val, name_phone_or_sale_user: e, size: 10 }))
}, [])
const getScrolltolower = useCallback(() => {
if (orderData.list.length < orderData.total) {
pageNum.current.page++
const size = pageNum.current.size * pageNum.current.page
setSearchField({ ...searchField, size })
}
}, [orderData])
const getRefresherRefresh = async() => {
pageNum.current.size = 1
setRefresherTriggeredStatus(true)
setSearchField(val => ({ ...val, size: 10 }))
}
// 选择排序
const sortRefRef = useRef<any>()
const handSort = useCallback((e: string) => {
pageNum.current.page = 1
setSearchField(val => ({ ...val, size: 10, abstract_sort_key: e }))
sortRefRef.current = e
}, [])
const SortRef = useRef<any>()
const TagRef = useRef<any>()
// 筛选城市
const ChoseCityRef = useRef<any>()
const handCity = useCallback((provinceVal, cityVal) => {
const provinceArr: number[] = []
const cityArr: number[] = []
provinceVal.length && provinceVal.forEach((item) => {
provinceArr.push(item.id)
})
cityVal.length && cityVal.forEach((item) => {
cityArr.push(item.id)
})
pageNum.current.page = 1
const provinceRes = provinceArr?.toString()
const cityRes = cityArr?.toString()
console.log(provinceRes, cityRes)
setSearchField(val => ({ ...val, province_id: provinceArr.length > 0 ? provinceRes : '', city_id: cityArr.length > 0 ? cityRes : '', size: 10 }))
// ChoseCityRef.current.close()
}, [])
// 选择客户类型
const handType = useCallback((val) => {
const arr = val.filter((item) => { return item.checked })
pageNum.current.page = 1
setSearchField(val => ({ ...val, size: 10, purchaser_type: arr[0]?.id }))
}, [])
// 选择标签
const handTags = useCallback((val) => {
const arr: any[] = []
const arrOne = val.filter((item) => { return item.checked })
arrOne.forEach((item) => {
arr.push(item.id)
})
pageNum.current.page = 1
const res = arr.toString()
setSearchField(val => ({ ...val, size: 10, label_ids: arr.length === 0 ? '' : res }))
}, [])
return (
<View className={styles.mainBox}>
<View className={styles.topBox}>
<View className={styles.search_input}>
<Search placeholder="搜索客户名称、电话、业务员" showBtn={false} changeOnSearch={getSearchData} />
</View>
<View className={styles.menuBox} >
<SelectGroup>
<Sort ref={SortRef} handSort={handSort} onCloseOverlay={() => true}></Sort>
<ChoseCity ref={ChoseCityRef} handCity={handCity} onCloseOverlay={() => true}></ChoseCity>
<Tag ref={TagRef} handTags={handTags} handType={handType} onCloseOverlay={() => true}></Tag>
</SelectGroup>
</View>
</View>
<View className={styles.totalFont}> {orderData?.total || 0} </View>
<View className={styles.order_list}>
<InfiniteScroll
statusMore={statusMore}
selfonScrollToLower={getScrolltolower}
refresherEnabled
refresherTriggered={refresherTriggeredStatus}
selfOnRefresherRefresh={getRefresherRefresh}
>
{orderData?.list?.map((item, index) => {
return (
<ItemLiist key={index} sortId={sortRefRef.current} obj={item}></ItemLiist>
)
})}
</InfiniteScroll>
</View>
<View className={styles.bottom_box}>
<View className={styles.bottom_btn} onClick={() => goLink('/pages/customerEditor/index?type=add')}></View>
</View>
</View >
)
}
export default CustomerManagement