perf: 邮件详情: 附件的显示

dev/ckeditor
Lei OT 4 months ago
parent be2f85a0da
commit 1393bf9899

@ -99,12 +99,15 @@ export const getEmailDetailAction = async (params) => {
const { html, bodyContent, bodyText } = mailType === 'text/html' ? parseHTMLString(cleanContent, true) : { html: '', bodyContent: '', bodyText: '' };
const attachments = (isEmpty(result?.AttachList) ? [] : result.AttachList).filter(ele => isEmpty(ele.ATI_ContentID) || !ele.ATI_Name.includes('ContentFile'));
const insideAttachments = (isEmpty(result?.AttachList) ? [] : result.AttachList).filter(ele => !isEmpty(ele.ATI_ContentID) && ele.ATI_Name.includes('ContentFile'));
const ret = {
info: { ...encodeEmailInfo(result.MailInfo?.[0] || {}), mailType },
content: mailType === 'text/html' ? html : result.MailContent || '',
abstract: bodyText || result.MailContent || '',
attachments,
insideAttachments,
AttachList: isEmpty(result?.AttachList) ? [] : result.AttachList,
}
// writeIndexDB([{key: cacheKey, data: ret}], 'mailinfo', 'mailbox')
return ret;

@ -38,7 +38,7 @@ export const useEmailSignature = (opi_sn) => {
export const useEmailDetail = (mai_sn, data) => {
const {notification} = App.useApp()
const [loading, setLoading] = useState(false)
const [mailData, setMailData] = useState({ loading, info: {}, content: '', attachments: [] })
const [mailData, setMailData] = useState({ loading, info: {}, content: '', attachments: [], AttachList: [] })
const [coliSN, setColiSN] = useState('');
const [orderDetail, setOrderDetail] = useState({});
@ -181,3 +181,7 @@ export const useEmailList = (mailboxDirNode) => {
return { loading, isFreshData, error, mailList, refresh }
}
export const emailTemplates = [
{ key: '', value: '', label: ''},
];

@ -1,6 +1,6 @@
import { useState, useEffect, useRef, useMemo } from 'react'
import { App, Button, Divider, Avatar, List, Flex, Typography, Tooltip, Empty } from 'antd'
import { LoadingOutlined, ApiOutlined, FilePdfOutlined, FileOutlined, FileWordOutlined, FileExcelOutlined, FileJpgOutlined, FileImageOutlined, FileTextOutlined, FileGifOutlined, GlobalOutlined, FileZipOutlined } from '@ant-design/icons'
import { LoadingOutlined, ApiOutlined, FilePdfOutlined, FileOutlined, FileWordOutlined, FileExcelOutlined, FileJpgOutlined, FileImageOutlined, FileTextOutlined, FileGifOutlined, GlobalOutlined, FileZipOutlined, DeleteOutlined } from '@ant-design/icons'
import { EditIcon, MailCheckIcon, ReplyAllIcon, ReplyIcon, ResendIcon, ShareForwardIcon, SendPlaneFillIcon, InboxIcon } from '@/components/Icons'
import { isEmpty, TagColorStyle } from '@/utils/commons'
import EmailEditorPopup from '../Input/EmailEditorPopup'
@ -158,8 +158,11 @@ const EmailDetailInline = ({ mailID, emailMsg = {}, disabled = false, variant, s
break
case 'failed':
btns.push(
<Tooltip key='resend-t' title='重发'>
<Button key={'resend'} onClick={() => handleResend()} size='small' type='text' icon={<ResendIcon className='text-orange-500' />}>{compactBtn ? '' : '重发'}</Button></Tooltip>,
<Tooltip key='delete-t' title='删除'>
<Button key={'delete'} danger onClick={() => alert('todo')} size='small' type='text' icon={<DeleteOutlined className='text-red-500' />}>{compactBtn ? '' : '删除'}</Button></Tooltip>,
<Tooltip key='resend-t' title='发送'>
<Button key={'resend'} onClick={() => handleResend()} size='small' type='text' icon={<SendPlaneFillIcon className='text-orange-500' />}>{compactBtn ? '' : '发送'}</Button></Tooltip>,
)
btns.push(
<Tooltip key='edit-t' title='编辑'>
@ -209,7 +212,7 @@ const EmailDetailInline = ({ mailID, emailMsg = {}, disabled = false, variant, s
</div>
<div className=' ml-auto flex flex-col justify-start gap-1 items-end'>
{/* <ActionBtns /> */}
<div className='text-xs '>{mailData.info?.MAI_SendDate || emailMsg.localDate}{mailData.info.MAI_Direction === 1 ? <SendPlaneFillIcon className='text-primary' /> : <InboxIcon className='text-indigo-500' />}</div>
<div className='text-xs '>{mailData.info?.MAI_SendDate || emailMsg.localDate}</div>
</div>
</div>
<div className='text-sm'>
@ -240,10 +243,11 @@ const EmailDetailInline = ({ mailID, emailMsg = {}, disabled = false, variant, s
{mailData.info?.mailType === 'text/html' ? (
<EmailContent content={mailData.content} id={mailID} key={mailID} />
) : (
<div className='mt-2 whitespace-pre-wrap' dangerouslySetInnerHTML={{ __html: mailData.content }}></div>
<div className='mt-2 whitespace-pre-wrap flex-auto' dangerouslySetInnerHTML={{ __html: mailData.content }}></div>
)}
{mailData.attachments.length > 0 && (
{mailData.AttachList.length > 0 && (
<div className={`${compactBtn === false ? 'w-48' : 'border-b border-t-0'} overflow-hidden`}>
{mailData.attachments.length > 0 && (<>
<span>&nbsp;附件 ({mailData.attachments.length})</span>
<List
dataSource={mailData.attachments || []}
@ -258,7 +262,9 @@ const EmailDetailInline = ({ mailID, emailMsg = {}, disabled = false, variant, s
</Typography.Text>
</List.Item>
)}
/>
/></>
)}
{mailData.insideAttachments.length > 0 && <span className='text-gray-500 italic'>&nbsp;文内附件 ({mailData.insideAttachments.length}) 已在正文显示</span>}
</div>
)}
</Flex>

Loading…
Cancel
Save