From 92d54d7a27ee83774214cf6a01c879b1514e8716 Mon Sep 17 00:00:00 2001 From: Lei OT Date: Fri, 29 Nov 2024 13:14:06 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E9=82=AE=E4=BB=B6=E5=BF=AB=E9=80=9F?= =?UTF-8?q?=E5=9B=9E=E5=A4=8D,=20=E7=BA=AF=E6=96=87=E6=9C=AC,=20=E6=97=A0?= =?UTF-8?q?=E9=99=84=E4=BB=B6,=20=E6=97=A0=E5=BC=95=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/actions/EmailActions.js | 2 +- .../Online/Input/EmailEditorPopup.jsx | 5 +- .../Online/Input/EmailNewBtn.jsx | 229 +++++++++++++++--- 3 files changed, 197 insertions(+), 39 deletions(-) diff --git a/src/actions/EmailActions.js b/src/actions/EmailActions.js index 1825c19..4c06613 100644 --- a/src/actions/EmailActions.js +++ b/src/actions/EmailActions.js @@ -21,7 +21,7 @@ export const salesSignature = async (opisn, lgc = 1) => { * 发送邮件 */ export const postSendEmail = async (body) => { - const { attaList, atta, content, ...bodyData } = body; + const { attaList=[], atta, content, ...bodyData } = body; const formData = new FormData(); Object.keys(bodyData).forEach(function (key) { formData.append(key, bodyData[key]); diff --git a/src/views/Conversations/Online/Input/EmailEditorPopup.jsx b/src/views/Conversations/Online/Input/EmailEditorPopup.jsx index c69416e..09b75b8 100644 --- a/src/views/Conversations/Online/Input/EmailEditorPopup.jsx +++ b/src/views/Conversations/Online/Input/EmailEditorPopup.jsx @@ -297,7 +297,8 @@ const EmailEditorPopup = ({ open, setOpen, fromEmail, fromUser, fromOrder, toEma }; /** - * 先推到消息记录上面, 再发送 + * 保存成功, 推一个气泡 + * 再从异步通知更新消息发送状态 */ const sentOrReceivedNewMessage = useConversationStore((state) => state.sentOrReceivedNewMessage); const invokeEmailMessage = (msgObj) => { @@ -425,7 +426,7 @@ const EmailEditorPopup = ({ open, setOpen, fromEmail, fromUser, fromOrder, toEma
{ + const { notification } = App.useApp() + const [form] = Form.useForm() + const [mobile] = useStyleStore((state) => [state.mobile]) const { userId, username, emailList, email } = useAuthStore((state) => state.loginUser) @@ -17,8 +26,10 @@ const EmailNewBtn = ({ ...props }) => { const currentConversation = useConversationStore((state) => state.currentConversation) // const talkabled = !isEmpty(currentConversation.sn) && websocketOpened; const { orderDetail, customerDetail } = useOrderStore() + const [openPaymentDrawer] = useOrderStore((state) => [state.openDrawer]) const emailListOption = emailList?.map((ele) => ({ ...ele, label: ele.email, key: ele.email, value: ele.email })) || [] + const emailListAddrMapped = emailListOption?.reduce((r, v) => ({ ...r, [v.email]: v }), {}); const [pickEmail, setPickEmail] = useState({ key: email, email }) const [fromUser, setFromUser] = useState() @@ -47,40 +58,187 @@ const EmailNewBtn = ({ ...props }) => { setToEmail(currentConversation?.channels?.email || customerDetail?.email || '') } + const textInputRef = useRef(null) + const websocketOpened = useConversationStore((state) => state.websocketOpened) + const talkabled = !isEmpty(currentConversation.sn) && websocketOpened + const [sendLoading, setSendLoading] = useState(false) + + /** + * 保存成功, 推一个气泡 + * 再从异步通知更新消息发送状态 + */ + const sentOrReceivedNewMessage = useConversationStore((state) => state.sentOrReceivedNewMessage); + const invokeEmailMessage = (msgObj) => { + const msgObjMerge = { + sender: 'me', + senderName: 'me', + msg_source: 'email', + // to: currentConversation.whatsapp_phone_number, + date: new Date(), + status: 'waiting', // accepted + ...msgObj, + // id: `${currentConversation.sn}.${msgObj.id}`, + // id: `${stickToCid}.${msgObj.id}`, + conversationid: currentConversation.sn, + }; + // olog('invoke upload', msgObjMerge) + const contentToRender = sentMsgTypeMapped[msgObjMerge.type].contentToRender(msgObjMerge); + // console.log(contentToRender, 'contentToRender sendMessage------------------'); + sentOrReceivedNewMessage(contentToRender.conversationid, contentToRender); + }; + + const addEmoji = (emoji) => { + form.setFieldValue('mailcontent', form.getFieldValue('mailcontent') + emoji) + // setTextContent((prevValue) => { + // return prevValue + emoji + // }) + } + + // const [quickValidateHelp, setQuickValidateHelp] = useState('') + + const handleSendEmail = async (values) => { + console.log('invoke email message'); + + const emailAccount = { opi_sn: fromUser, email: pickEmail.key, mat_sn: '' }; + emailAccount.opi_sn = fromUser || emailListAddrMapped?.[emailAccount.email]?.opi_sn || ''; + emailAccount.mat_sn = emailListAddrMapped?.[emailAccount.email]?.mat_sn || ''; + + const stickToCid = currentConversation.sn + const body = {} + body.subject = values.subject + body.mailcontent = values.mailcontent + body.from = emailAccount.email + body.to = currentConversation.channels?.email || customerDetail?.email || '' + // body.attaList = fileList; + body.opi_sn = emailAccount.opi_sn + body.mat_sn = emailAccount.mat_sn + body.coli_sn = currentConversation?.coli_sn || '' + // console.log('body', body, '\n') + body.cc = '' + body.bcc = '' + const msgObj = { + type: 'email', + id: uuid(), + from: body.from, + to: body.to, + cc: '', + bcc: '', + subject: values.subject, + content: body.mailcontent, + email: { + subject: values.subject, + content: body.mailcontent, + }, + } + setSendLoading(true) + body.externalID = stickToCid + body.actionID = `${stickToCid}.${msgObj.id}` + try { + const bubbleMsg = cloneDeep(msgObj) + bubbleMsg.id = `${stickToCid}.${msgObj.id}` + bubbleMsg.content = undefined + // console.log('email message', body, '\n', bubbleMsg) + const result = await postSendEmail(body) + const mailSavedId = result.id || '' + bubbleMsg.email.mai_sn = mailSavedId + invokeEmailMessage(bubbleMsg) + + form.resetFields(); + } catch (error) { + notification.error({ + message: '邮件保存失败', + description: error.message, + placement: 'top', + duration: 3, + }) + } finally { + setSendLoading(false) + } + } + return ( - - {/* 新邮件: */} - {/* { - const find = emailListOption?.find((ele) => ele.email === key) - setPickEmail(find) - // openEditor(key); - }, - selectedKeys: [pickEmail?.email], - }} - // onClick={() => openEditor(pickEmail.key)} - type='primary' - className='w-auto' - icon={}> - <>{pickEmail?.email} - */} - - {/* 切换邮箱: - +