2022-09-27 17:14:52 +08:00

306 lines
12 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { View, Input, Button } from '@tarojs/components'
import { useCallback, useEffect, useMemo, useRef, useState, } from 'react'
import Search from '@/components/search'
import { dataLoadingStatus, getFilterData } from '@/common/util'
import styles from "./index.module.scss"
import classnames from "classnames";
import Popup from '@/components/popup'
import InfiniteScroll from '@/components/infiniteScroll'
import Taro, { faceVerifyForPay, useDidShow } from '@tarojs/taro'
import ItemList from './components/itemList'
import { formatDateTime, formatHashTag, formatImgUrl, formatPriceDiv, formatWeightDiv } from '@/common/format'
import {
mpcashManagementOrderlist
} from "@/api/newCollection"
import TimePicker from "@/components/timePicker"
import dayjs from 'dayjs'
import IconFont from '@/components/iconfont/iconfont'
export default () => {
let myDate = new Date();
const [searchField, setSearchField] = useState<
{
page: number;
size: number;
search_name: string;
start_time: number | string;
end_time: number | string;
}>({
page: 1,
size: 10,
search_name: '',
start_time: `${dayjs(new Date(myDate?.toLocaleDateString() + ' ' + '00:00:00',)).format('YYYY-MM-DD')} 00:00:00`,
end_time: `${dayjs(new Date(myDate?.toLocaleDateString() + ' ' + '00:00:00',)).add(14, 'day').format('YYYY-MM-DD')} 00:00:00`,
})
const pageNum = useRef({ size: searchField.size, page: searchField.page })
useDidShow(() => {
getOrderList()
})
//监听筛选条件变化
useEffect(() => {
getOrderList()
}, [searchField.size, searchField.search_name])
//输入了搜索关键字
const getSearchData = useCallback((e) => {
pageNum.current.page = 1
setOrderData(() => ({ list: [], total: 0 }))
setSearchField((val) => ({ ...val, search_name: e, size: 10 }))
}, [])
//获取订单列表
const { fetchData: listFetchData, state: orderState } = mpcashManagementOrderlist()
const [orderData, setOrderData] = useState<{ list: any[]; total: number, summary?: any }>({ list: [], total: 0, summary: {} })
const getOrderList = async () => {
let res = await listFetchData({
...searchField
})
setOrderData((e) => ({ ...e, list: res.data?.list, total: res.data?.total, summary: res.data?.summary }))
// setshowPopup(false)
setRefresherTriggeredStatus(false)
}
//列表下拉刷新
const [refresherTriggeredStatus, setRefresherTriggeredStatus] = useState(false)
const getRefresherRefresh = async () => {
pageNum.current.page = 1
// pageNum.current.size = 10
setRefresherTriggeredStatus(true)
getOrderList()
setSearchField((val) => ({ ...val, size: 10 }))
}
//数据加载状态
const statusMore = useMemo(() => {
return dataLoadingStatus({ list: orderData.list, total: orderData.total, status: orderState.loading })
}, [orderData, orderState])
//上拉加载数据
const getScrolltolower = useCallback(() => {
if (orderData.list.length < orderData.total) {
pageNum.current.page++
const size = pageNum.current.size * pageNum.current.page
console.log(pageNum.current.page, 'pageNum.current.page')
console.log(size, 123123)
setSearchField({ ...searchField, size })
}
}, [orderData])
//是否不允许确认筛选
const isDisabled = useMemo(() => {
// if (searchField.stage !== '不限' ||
// searchField.sale_mode !== '不限' ||
// searchField.return_type !== '不限' ||
// searchField.start_time !== '' ||
// searchField.end_time !== ''
// ) {
// return false
// } else {
// return true
// }
return false
}, [])
//新建收款
const handAdd = () => {
Taro.navigateTo({
url: '/pages/addCollection/index'
})
}
//筛选弹出
const [SelectPopup, setSelectPopup] = useState(false)
//时间数组
const [TimeList, setTimeList] = useState<any[]>(
[
{
id: 1,
name: '默认14天内',
start_time: `${dayjs(new Date(myDate?.toLocaleDateString() + ' ' + '00:00:00',)).format('YYYY-MM-DD')} 00:00:00`,
end_time: `${dayjs(new Date(myDate?.toLocaleDateString() + ' ' + '00:00:00',)).add(14, 'day').format('YYYY-MM-DD')} 00:00:00`,
checked: true
},
{
id: 2,
name: '展示全部日期',
start_time: '',
end_time: '',
checked: false
}
]
)
//选择时间item
const handSelect = (it) => {
TimeList.map(item => {
if (item.id == it.id) {
item.checked = true
} else {
item.checked = false
}
return item
})
setTimeList([...TimeList])
pageNum.current.size = 10
setSearchField({ ...searchField, start_time: it.start_time, end_time: it.end_time, size: 10 })
setEnd('')
}
//重置
const handReset = () => {
TimeList.map(item => {
if (item.id == 1) {
item.checked = true
} else {
item.checked = false
}
return item
})
setTimeList([...TimeList])
pageNum.current.size = 10
setSearchField({
...searchField,
start_time: `${dayjs(new Date(myDate?.toLocaleDateString() + ' ' + '00:00:00',)).format('YYYY-MM-DD')} 00:00:00`,
end_time: `${dayjs(new Date(myDate?.toLocaleDateString() + ' ' + '00:00:00',)).add(14, 'day').format('YYYY-MM-DD')} 00:00:00`,
size: 10
})
setStart(myDate.toLocaleDateString())
setEnd('')
}
//弹窗确认选择
const handSureSelect = () => {
pageNum.current.size = 10
setSearchField({ ...searchField, size: 10 })
getOrderList()
setSelectPopup(false)
}
//展示时间筛选
const [showTime, setShowTime] = useState(false)
//关闭时间筛选
const handClose = () => {
setShowTime(false)
}
const [start, setStart] = useState<any>(myDate.toLocaleDateString())
const [end, setEnd] = useState<any>('')
//选择时间
const handTime = (eq) => {
//直接进来点确定的时候做处理
if (Object.keys(eq).length === 0) {
let obj = {
start: '',
end: ''
}
obj.start = `${dayjs(new Date(myDate?.toLocaleDateString() + ' ' + '00:00:00',)).format('YYYY-MM-DD')} 00:00:00`,
obj.end = `${dayjs(new Date(obj?.start)).add(1, 'day').format('YYYY-MM-DD')} 00:00:00`
eq.value = obj
}
setSearchField((val) => ({ ...val, start_time: eq?.value?.start, end_time: eq?.value?.end }))
setStart(eq?.value?.start)
setEnd(eq?.value?.end)
setShowTime(false)
pageNum.current.size = 10
}
const timeArea = useMemo(() => {
// const res = TimeList.filter(item => {
// return item.checked
// })
// && res.length > 0
if (end !== '') {
return start + ' ' + '-' + ' ' + end
} else {
return '自定义起始时间'
}
}, [end])
useEffect(() => {
setSearchField(searchField)
}, [searchField])
return (
<>
<View style={{ background: '#FFFFFF', paddingLeft: '20rpx', paddingBottom: '20rpx', position: 'sticky', top: '0', zIndex: '99' }}>
<Search placeholder='请输入客户或客户跟进人' showBtn={false} changeOnSearch={getSearchData} debounceTime={300} >
<View className={styles.flexBox} onClick={() => { setSelectPopup(true) }}>
<IconFont name='icon-shaixuan' size={35} color={!isDisabled ? '#0D7CFF' : ''} customClassName={styles['activeshaixuan']} />
{/* <View className={classnames('iconfont', 'icon-shaixuan', !isDisabled ? styles.icon_shaixuan : styles.activeshaixuan)}></View> */}
<View className={classnames(isDisabled ? styles.shaixuan : styles.activeshai)}></View>
</View>
</Search>
</View>
<View className={styles.pageTop}>
<View className={styles.pageTopLeft}>14</View>
<View className={styles.pageTopRight}>{formatPriceDiv(orderData.summary.receipt_amount)}</View>
</View>
<View className={styles.order_list}>
<InfiniteScroll
statusMore={statusMore}
selfonScrollToLower={getScrolltolower}
refresherEnabled={true}
refresherTriggered={refresherTriggeredStatus}
selfOnRefresherRefresh={getRefresherRefresh}>
{orderData?.list?.map((item, index) => {
return (
<View key={item.id} className={styles.order_item_con}>
<ItemList
obj={item}
key={index}
></ItemList>
</View>
)
})}
</InfiniteScroll>
<View className={styles.kongboxTwo}></View>
<View className={styles.fixedBox}>
<View className={styles.addBtn} onClick={() => handAdd()}></View>
</View>
</View>
<Popup title={'选择日期'} show={SelectPopup} onClose={() => { setSelectPopup(false) }}>
<View className={styles.popupBox}>
<View className={styles.timeFlex}>
{
TimeList.map((item, index) => {
return (
<View onClick={() => handSelect(item)} className={classnames((item.checked && timeArea == '自定义起始时间') ? styles.activetimeOne : styles.timeOne)} key={index}>{item.name}</View>
)
})
}
</View>
<View className={classnames(timeArea == '自定义起始时间' ? styles.timeBox2 : styles.activetimeBox2)} onClick={() => { setShowTime(true) }}>{timeArea}
<View className={styles.more}>
{
timeArea == '自定义起始时间' &&
<IconFont name={'icon-chakanquanbukehu'} color={'#000000'} size={40} customClassName={styles['more']}></IconFont>
}
</View>
{/* {
timeArea == '自定义起始时间' && <View className={classnames('iconfont', 'icon-chakanquanbukehu', styles.more)}></View>
} */}
</View>
<View style={{ height: '100rpx' }}></View>
<View className={styles.bottomBox}>
<Button className={styles.resetBox} onClick={() => { handReset() }}> </Button >
<Button className={classnames(isDisabled ? styles.button : styles.activeButton)} disabled={isDisabled} onClick={() => handSureSelect()}> </Button >
</View>
</View>
</Popup>
<TimePicker
start={start}
end={end}
showTime={showTime}
closePopup={handClose}
onSelectDate={(e) => handTime(e)}
></TimePicker>
</>
)
}