From 34a1b0fd86cc4679265253ec4ddaf51a1364e2ad Mon Sep 17 00:00:00 2001 From: Lei OT Date: Thu, 12 Dec 2024 16:19:42 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=8E=B7=E5=8F=96=E9=A1=BE=E9=97=AE?= =?UTF-8?q?=E7=AD=BE=E5=90=8D,=20=E5=8A=A0=E8=BD=BD=E5=88=B0=E7=BC=96?= =?UTF-8?q?=E8=BE=91=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/actions/EmailActions.js | 7 +++-- src/hooks/useEmail.js | 28 +++++++++++++++++-- .../Online/Input/EmailComposer.jsx | 2 +- .../Online/Input/EmailEditorPopup.jsx | 19 ++++++++----- 4 files changed, 44 insertions(+), 12 deletions(-) diff --git a/src/actions/EmailActions.js b/src/actions/EmailActions.js index 354311a..6eafa78 100644 --- a/src/actions/EmailActions.js +++ b/src/actions/EmailActions.js @@ -4,13 +4,16 @@ import testData from './test1.json'; /** * 获取顾问签名 + * @param {object} { opi_sn } */ -export const salesSignature = async (opisn, lgc = 1) => { +export const getSalesSignatureAction = async (params) => { try { - const html = await fetchJSON(`http://202.103.68.35/CustomerManager/english/mailsign.asp`, { WL_SN: opisn, LGC: lgc }); + const { result } = await fetchJSON(`${EMAIL_HOST}/email_sign`, params) + const { SignContent: html } = result const parser = new DOMParser(); const doc = parser.parseFromString(html, 'text/html'); const bodyContent = doc.body.innerHTML; + return bodyContent; } catch (error) { return ''; diff --git a/src/hooks/useEmail.js b/src/hooks/useEmail.js index de805e3..a93cdf5 100644 --- a/src/hooks/useEmail.js +++ b/src/hooks/useEmail.js @@ -1,10 +1,34 @@ -import { useState, useEffect } from 'react' +import { useState, useEffect, useCallback } from 'react' import { isEmpty } from '@/utils/commons' -import { getEmailDetailAction, postResendEmailAction, } from '@/actions/EmailActions' +import { getEmailDetailAction, postResendEmailAction, getSalesSignatureAction } from '@/actions/EmailActions' import { App } from 'antd' import useConversationStore from '@/stores/ConversationStore'; import { msgStatusRenderMapped } from '@/channel/bubbleMsgUtils'; +export const useEmailSignature = (opi_sn) => { + + const [signature, setSignature] = useState('') + + const getSignature = useCallback(async () => { + if (isEmpty(opi_sn)) { + return false + } + try { + const data = await getSalesSignatureAction({ opi_sn }) + setSignature(data) + } catch (err) { + console.error(err) + } + }, [opi_sn]) + + useEffect(() => { + getSignature() + }, [opi_sn]) + + return { signature, getSignature } + +} + /** * @param mai_sn 邮件编号ID * @param data 直接传递, 不重复获取 diff --git a/src/views/Conversations/Online/Input/EmailComposer.jsx b/src/views/Conversations/Online/Input/EmailComposer.jsx index 8e0aedf..830861f 100644 --- a/src/views/Conversations/Online/Input/EmailComposer.jsx +++ b/src/views/Conversations/Online/Input/EmailComposer.jsx @@ -238,7 +238,7 @@ const EmailComposer = ({ ...props }) => { value={pickEmail} onChange={(val) => { setPickEmail(val) - setFromUser(val.opi_sn) + setFromUser(emailListAddrMapped?.[val.value]?.opi_sn) }} // variant={'borderless'} /> diff --git a/src/views/Conversations/Online/Input/EmailEditorPopup.jsx b/src/views/Conversations/Online/Input/EmailEditorPopup.jsx index 77734a8..85c0cd1 100644 --- a/src/views/Conversations/Online/Input/EmailEditorPopup.jsx +++ b/src/views/Conversations/Online/Input/EmailEditorPopup.jsx @@ -14,7 +14,7 @@ import { cloneDeep, isEmpty, } from '@/utils/commons'; import './EmailEditor.css'; import { postSendEmail } from '@/actions/EmailActions'; import { sentMsgTypeMapped, } from '@/channel/bubbleMsgUtils'; -import { EmailBuilder, useEmailDetail } from '@/hooks/useEmail'; +import { EmailBuilder, useEmailDetail, useEmailSignature } from '@/hooks/useEmail'; import useSnippetStore from '@/stores/SnippetStore' import { useOrderStore } from '@/stores/OrderStore' @@ -29,7 +29,7 @@ const getAbstract = (longtext) => { return abstract; }; -const generateQuoteContent = (mailData) => `

+const generateQuoteContent = (mailData) => `

@@ -60,7 +60,7 @@ const generateQuoteContent = (mailData) => `

`; -const generateMailContent = (mailData) => ` +const generateMailContent = (mailData) => `

${mailData.content}

` @@ -86,7 +86,6 @@ const EmailEditorPopup = ({ open, setOpen, fromEmail, fromUser, fromOrder, oid, const emailListMatMapped = emailListOption?.reduce((r, v) => ({ ...r, [v.mat_sn]: v }), {}); // console.log('emailListMapped', emailListOption, emailListAddrMapped); - const mai_sn = quoteid; const { loading: getLoading, mailData } = useEmailDetail(mai_sn, _mailData) @@ -163,6 +162,8 @@ const EmailEditorPopup = ({ open, setOpen, fromEmail, fromUser, fromOrder, oid, setEmailOPI(_findMat?.opi_sn) }; + const { signature } = useEmailSignature(emailOPI) + const [isRichText, setIsRichText] = useState(mobile === false); // const [isRichText, setIsRichText] = useState(false); // 默认纯文本 const [htmlContent, setHtmlContent] = useState(''); @@ -198,10 +199,14 @@ const EmailEditorPopup = ({ open, setOpen, fromEmail, fromUser, fromOrder, oid, const { info } = mailData // setShowCc(!isEmpty(mailData.info?.MAI_CS)); + const signatureBody = generateMailContent({ content: signature }) + const preQuoteBody = generateQuoteContent(mailData) + const _initialContent = isEmpty(mailData.info) ? signatureBody : signatureBody+preQuoteBody + if (!isEmpty(mailData.info) && action !== 'edit') { - setInitialContent(preQuoteBody) + setInitialContent(_initialContent) } const _formValues = { @@ -234,11 +239,11 @@ const EmailEditorPopup = ({ open, setOpen, fromEmail, fromUser, fromOrder, oid, const newEmail = { to: newToEmail, subject: draft?.subject || '' } form.setFieldsValue(newEmail) setInitialForm(newEmail) - setInitialContent(draft?.content || '') + setInitialContent((draft?.content || '') + signatureBody) } return () => {} - }, [propsSerialize, mailData.info, newToEmail, newFromEmail]); + }, [propsSerialize, mailData.info, signature, newToEmail, newFromEmail]); const [openPlainTextConfirm, setOpenPlainTextConfirm] = useState(false); const handlePlainTextOpenChange = ({ target }) => {