/** * 充值明细页面 */ import { View, Text, Image } from '@tarojs/components' import { useState } from 'react' import { ArrowDown } from '@taroify/icons' import { Popup, DatetimePicker } from '@taroify/core' import Taro, { useLoad } from '@tarojs/taro' import { fetchRechargeRecordsByMonth, getCurrentYearMonth, RechargeRecordViewItem, } from '../../utils/rechargeRecords' import './index.scss' import { getBigImage } from '@/utils/imageHelper' const RechargeDetail = () => { const [selectedMonth, setSelectedMonth] = useState(getCurrentYearMonth()) const [datePickerOpen, setDatePickerOpen] = useState(false) const [pickerValue, setPickerValue] = useState(new Date()) const [dataList, setDataList] = useState([]) const loadRecords = async (yearMonth: string) => { Taro.showLoading({ title: '加载中...', mask: true }) try { const list = await fetchRechargeRecordsByMonth(yearMonth) setDataList(list) } catch (error: any) { setDataList([]) if (error?.message === 'NO_CUSTOMER_SN') { Taro.showToast({ title: '请先登录', icon: 'none', duration: 2000 }) } // 其它错误由 request 拦截器提示 } finally { Taro.hideLoading() } } useLoad(() => { loadRecords(selectedMonth) }) const groupByMonth = (records: RechargeRecordViewItem[]) => { const groups: Record = {} records.forEach(record => { const month = (record.rechargeTime || '').substring(0, 7) if (!month || month.length < 7) return if (!groups[month]) { groups[month] = [] } groups[month].push(record) }) return groups } const groupedRecords = groupByMonth(dataList) const calculateMonthTotal = (records: RechargeRecordViewItem[]) => { return records.reduce((sum, record) => sum + (record.amount || 0), 0) } const handleSelectMonth = () => { setDatePickerOpen(true) } const handleDateConfirm = async (value: Date) => { const year = value.getFullYear() const month = String(value.getMonth() + 1).padStart(2, '0') const formattedMonth = `${year}-${month}` setSelectedMonth(formattedMonth) setPickerValue(value) setDatePickerOpen(false) await loadRecords(formattedMonth) } const handleDateCancel = () => { setDatePickerOpen(false) } return ( {/* 无数据时仍可切换月份 */} {dataList.length === 0 ? ( {selectedMonth} ) : ( <> {Object.keys(groupedRecords).map(month => { const monthRecords = groupedRecords[month] const monthTotal = calculateMonthTotal(monthRecords) return ( {month} 充值 ¥ {monthTotal.toFixed(2)} {monthRecords.map((item, index) => ( {item.storeName} {item.status} {item.rechargeType} 充值时间:{item.rechargeTime} 实付 ¥ {item.amount.toFixed(2)} {index < monthRecords.length - 1 && ( )} ))} ) })} 到底了~ )} setDatePickerOpen(false)} > ) } export default RechargeDetail