213 lines
6.9 KiB
TypeScript
213 lines
6.9 KiB
TypeScript
import { View, Text } from '@tarojs/components'
|
|
import { useCallback, useEffect, useMemo, useRef, useState, FC, memo } from 'react'
|
|
import styles from './index.module.scss'
|
|
import Search from '@/components/search'
|
|
import { TakeGoodsOrderList } from '@/api/index'
|
|
import Taro, { useDidShow } from '@tarojs/taro'
|
|
import { useRouter } from '@tarojs/taro'
|
|
import InfiniteScroll from '@/components/infiniteScroll'
|
|
import { dataLoadingStatus, getFilterData } from '@/common/util'
|
|
import IconText from '@/components/iconText'
|
|
import IconFont from '@/components/iconfont/iconfont'
|
|
import ItemList from './components/ItemList'
|
|
import DeliveryStatusList from './components/DeliveryStatusList'
|
|
import Popup from '@/components/popup'
|
|
import DeliveryFilter, { SearchField } from './components/Filter'
|
|
import TimePickerPopup from '@/components/timePickerPopup'
|
|
import Empty from '@/components/empty'
|
|
import { LIST_EMPTY_IMAGE } from '@/common/constant'
|
|
|
|
type SearchData = {
|
|
take_goods_order_no?: string // 提货单号
|
|
take_goods_status?: number | string // 提货状态
|
|
date_min?: string // 开始时间
|
|
date_max?: string // 结束时间
|
|
take_goods_order_type?: number // 提货类型
|
|
page: number
|
|
size: number
|
|
}
|
|
|
|
|
|
|
|
const defaultSearchFields = {
|
|
take_goods_status: 0, // 待提货
|
|
page: 1,
|
|
size: 10,
|
|
}
|
|
|
|
// 提货列表
|
|
const Delivery: FC = () => {
|
|
const [search, setSearch] = useState<SearchData>(defaultSearchFields)
|
|
const [takeDeliveryOrderList, setDeliveryOrderList] = useState<{ list: any[]; total: number }>({ list: [], total: 0 })
|
|
|
|
const isFirst = useRef(true)
|
|
|
|
const { fetchData: FetchDeliveryOrderList, state: orderState } = TakeGoodsOrderList()
|
|
//数据加载状态
|
|
const statusMore = useMemo(() => {
|
|
return dataLoadingStatus({ list: takeDeliveryOrderList.list, total: takeDeliveryOrderList.total, status: orderState.loading! })
|
|
}, [takeDeliveryOrderList, orderState])
|
|
|
|
//输入搜索关键字
|
|
const getSearchData = useCallback((searchValue: string) => {
|
|
setSearch((prevProps) => ({ ...prevProps, take_goods_order_no: searchValue }))
|
|
console.log('searchValue==>', searchValue)
|
|
}, [])
|
|
|
|
useEffect(() => {
|
|
console.log('useEffect ===> search', search)
|
|
// 已经不是第一次加载该页面了
|
|
if(!isFirst.current){
|
|
getData()
|
|
}
|
|
}, [search])
|
|
|
|
useDidShow(()=>{
|
|
getData()
|
|
isFirst.current = false
|
|
})
|
|
|
|
//上拉加载数据
|
|
const pageNum = useRef({ size: search.size, page: search.page })
|
|
|
|
const getScrollToLower = useCallback(() => {
|
|
if (takeDeliveryOrderList.list.length < takeDeliveryOrderList.total) {
|
|
pageNum.current.page++
|
|
const size = pageNum.current.size * pageNum.current.page
|
|
setSearch((e) => ({ ...e, size }))
|
|
console.log(search, 11111)
|
|
}
|
|
}, [takeDeliveryOrderList])
|
|
|
|
//列表下拉刷新
|
|
const [refresherTriggeredStatus, setRefresherTriggeredStatus] = useState(false)
|
|
|
|
const getRefresherRefresh = async () => {
|
|
pageNum.current.size = 1
|
|
setRefresherTriggeredStatus(true)
|
|
setSearch((val) => ({ ...val, size: 10 }))
|
|
}
|
|
// 请求数据
|
|
const getData = async () => {
|
|
const res = await FetchDeliveryOrderList(getFilterData(search))
|
|
|
|
setDeliveryOrderList((e) => ({ ...e, list: res.data?.list, total: res.data?.total }))
|
|
setRefresherTriggeredStatus(() => false)
|
|
}
|
|
|
|
const [currentStatus, setCurrentStatus] = useState('待提货')
|
|
|
|
const handleChangeStatus = ({ id: statusId, name: statusName }) => {
|
|
setCurrentStatus(statusName)
|
|
setSearch((e) => ({ ...e, take_goods_status: statusId }))
|
|
}
|
|
|
|
const handleAuditSuccess = () => {
|
|
getData()
|
|
}
|
|
|
|
const [showFilter, setShowFilter] = useState(false)
|
|
// 筛选列表
|
|
const onShowFilter = () => {
|
|
setShowFilter(true)
|
|
}
|
|
// 点击关闭筛选列表框
|
|
const handlePopupClose = () => {
|
|
setShowFilter(false)
|
|
}
|
|
|
|
// 展示时间筛选
|
|
const [showTime, setShowTime] = useState(false)
|
|
|
|
// 点击关闭时间筛选
|
|
const handClose = () => {
|
|
setShowTime(false)
|
|
}
|
|
const [start, setStart] = useState(new Date().toLocaleDateString())
|
|
const [end, setEnd] = useState('')
|
|
// 选择时间
|
|
const handTime = (event) => {
|
|
console.log(event?.value, 'event?.value?.start')
|
|
setStart(event?.value?.start)
|
|
setEnd(event?.value?.end)
|
|
setShowTime(false)
|
|
console.log(search, 8888)
|
|
}
|
|
// 显示时间选择器
|
|
const handleSearchTime = () => {
|
|
setShowTime(true)
|
|
}
|
|
// 筛选框点击确认
|
|
const handleConfirm = (changedFields: SearchField, timeKey) => {
|
|
console.log('changedFields==>changedFields', changedFields)
|
|
// 自定义时间
|
|
if (timeKey === '6') {
|
|
setSearch((prevProps) => ({ ...prevProps, ...changedFields, date_min: start, date_max: end }))
|
|
} else {
|
|
setSearch((prevProps) => ({ ...prevProps, ...changedFields }))
|
|
}
|
|
handlePopupClose()
|
|
}
|
|
// 筛选框点击重置
|
|
const handleReset = () => {
|
|
setSearch(defaultSearchFields)
|
|
handlePopupClose()
|
|
}
|
|
|
|
const scanIcon = () => {
|
|
// 扫描
|
|
const handleScan = () => {
|
|
Taro.scanCode({
|
|
success(res) {
|
|
setSearch((e) => ({ ...e, take_goods_order_no: res.result }))
|
|
},
|
|
fail(res) {
|
|
console.log(res)
|
|
},
|
|
})
|
|
}
|
|
return (
|
|
<View onClick={handleScan} className={styles.scanHandler}>
|
|
<IconFont name='icon-saomiao' size={40}></IconFont>
|
|
</View>
|
|
)
|
|
}
|
|
|
|
return (
|
|
<View className={styles.delivery}>
|
|
<View className={styles.searchBox}>
|
|
<Search placeholder='请输入或扫描条形码' showBtn={false} changeOnSearch={getSearchData} debounceTime={300} customRightSlot={scanIcon()}>
|
|
<View onClick={onShowFilter} className={styles.icon__filter}>
|
|
<IconText svg iconName='icon-shaixuan' text='筛选' customClass={styles['icon--filter']} />
|
|
</View>
|
|
</Search>
|
|
</View>
|
|
{/* 状态栏 */}
|
|
<DeliveryStatusList onChangeStatus={handleChangeStatus}></DeliveryStatusList>
|
|
|
|
<View className={styles.listBox}>
|
|
<InfiniteScroll
|
|
emptySlot={<Empty picUrl={LIST_EMPTY_IMAGE} text='暂无数据'/>}
|
|
statusMore={statusMore}
|
|
selfonScrollToLower={getScrollToLower}
|
|
refresherEnabled={true}
|
|
refresherTriggered={refresherTriggeredStatus}
|
|
selfOnRefresherRefresh={getRefresherRefresh}>
|
|
<Text className={styles['listBox--total']}>
|
|
{currentStatus}共 {takeDeliveryOrderList.total} 单
|
|
</Text>
|
|
{takeDeliveryOrderList.list.map((item, index) => {
|
|
return <ItemList itemData={item} key={item.id} onSuccess={handleAuditSuccess}></ItemList>
|
|
})}
|
|
</InfiniteScroll>
|
|
</View>
|
|
<Popup show={showFilter} title='筛选列表' onClose={handlePopupClose}>
|
|
<DeliveryFilter onSearchTime={handleSearchTime} onConfirm={handleConfirm} onReset={handleReset} />
|
|
</Popup>
|
|
<TimePickerPopup start={start} end={end} showTime={showTime} closePopup={handClose} onSelectDate={(e) => handTime(e)}></TimePickerPopup>
|
|
</View>
|
|
)
|
|
}
|
|
|
|
export default Delivery
|