import { useEffect, useState } from 'react' import { ReloadOutlined, ReadOutlined, RightOutlined, LeftOutlined, SearchOutlined, MailOutlined, DeleteOutlined, CloseOutlined, CloseCircleTwoTone, CloseCircleOutlined } from '@ant-design/icons' import { Flex, Button, Tooltip, List, Form, Row, Col, Input, Checkbox, DatePicker, Switch, Breadcrumb, Skeleton, Popconfirm } from 'antd' import { useEmailList } from '@/hooks/useEmail' import { isEmpty } from '@/utils/commons' import { MailboxDirIcon } from './MailboxDirIcon' import { AttachmentIcon, MailCheckIcon, MailOpenIcon } from '@/components/Icons' import NewEmailButton from './NewEmailButton' import MailOrderSearchModal from './MailOrderSearchModal' import MailListSearchModal from './MailListSearchModal' const PAGE_SIZE = 50 // 每页显示条数 const MailBox = ({ mailboxDir, onMailItemClick, ...props }) => { const [selectedItems, setSelectedItems] = useState([]) const { mailList, loading, error, tempBreadcrumb, refresh, markAsUnread, markAsProcessed, markAsDeleted, } = useEmailList(mailboxDir) const [pagination, setPagination] = useState({ current: 1, pageSize: PAGE_SIZE, total: 0, pagedList: [], }) useEffect(() => { if (mailList) { const total = mailList.length const pageCount = Math.ceil(total / PAGE_SIZE) setPagination((prev) => ({ ...prev, total, pageCount, current: 1, // 重置到第一页 pagedList: getPagedData(mailList, 1), })) } }, [mailList]) const getPagedData = (data, currentPage) => { const startIndex = (currentPage - 1) * PAGE_SIZE const endIndex = Math.min(startIndex + PAGE_SIZE, data.length) return data.slice(startIndex, endIndex) } const prePage = () => { if (pagination.current > 1) { const newCurrent = pagination.current - 1 setPagination((prev) => ({ ...prev, current: newCurrent, pagedList: getPagedData(mailList, newCurrent), })) } } const nextPage = () => { if (pagination.current < Math.ceil(pagination.total / PAGE_SIZE)) { const newCurrent = pagination.current + 1 setPagination((prev) => ({ ...prev, current: newCurrent, pagedList: getPagedData(mailList, newCurrent), })) } } const mailItemRender = (item) => { const isOrderNode = mailboxDir.COLI_SN > 0 const orderNumber = isEmpty(item.MAI_COLI_ID) || isOrderNode ? '' : item.MAI_COLI_ID + ' - ' const folderName = (item.showFolder) ? `[${item.FDir}] ` : '' const orderMailType = item.MAT_Name ? {item.MAT_Name} : '' const countryName = isEmpty(item.CountryCN) ? '' : '[' + item.CountryCN + '] ' const mailStateClass = item.MOI_ReadState === 0 ? 'font-bold' : '' const hasAtta = item.MAI_Attachment !== 0 ? : null return (
  • i.MAI_SN === item.MAI_SN)} onClick={(e) => { const isChecked = e.target.checked const updatedSelection = isChecked ? [...selectedItems, item] : selectedItems.filter((item) => item.MAI_SN !== item.MAI_SN) setSelectedItems(updatedSelection) }}>
    { onMailItemClick(item) }}>
    {folderName}{orderNumber} {item.MAI_Subject || '[无主题]'} {hasAtta}
    {countryName + item.SenderReceiver} {orderMailType} {item.SRDate}
  • ) } return (
    0 && selectedItems.length < pagination.pagedList.length} checked={pagination.pagedList.length === 0 ? false : pagination.pagedList.every((item) => selectedItems.some((selected) => selected.MAI_SN === item.MAI_SN))} onChange={(e) => { const isChecked = e.target.checked if (isChecked) { setSelectedItems((prev) => [...prev, ...pagination.pagedList]) } else { setSelectedItems([]) } }}>
    { return { title: ( <> {bc.title} ), } })} /> {tempBreadcrumb && (
    ) } export default MailBox