diff --git a/src/actions/EmailActions.js b/src/actions/EmailActions.js index 86ef744..6ffc9a1 100644 --- a/src/actions/EmailActions.js +++ b/src/actions/EmailActions.js @@ -75,3 +75,12 @@ export const getEmailFetchAction = async (param) => { }) return result }; + +/** + * 报价信邮件草稿 + * @param {object} { sfi_sn, coli_sn, lgc } + */ +export const getEmailQuotationDraftAction = async (param) => { + const { result } = await fetchJSON(`${EMAIL_HOST}/QuotationLetter`, param) + return { subject: (result.Subject || ''), content: (result.MailContent || '').replace(/[\r\n]/g, '') } +} diff --git a/src/views/Conversations/Online/Components/EmailQuotation.jsx b/src/views/Conversations/Online/Components/EmailQuotation.jsx new file mode 100644 index 0000000..d8b5644 --- /dev/null +++ b/src/views/Conversations/Online/Components/EmailQuotation.jsx @@ -0,0 +1,91 @@ +import { useEffect, useState } from 'react' +import { App, Button } from 'antd' +import EmailEditorPopup from '../Input/EmailEditorPopup' +import { useOrderStore } from '@/stores/OrderStore' +import useAuthStore from '@/stores/AuthStore' +import useConversationStore from '@/stores/ConversationStore' +import { getEmailQuotationDraftAction } from '@/actions/EmailActions' +import { isEmpty } from '@/utils/commons' + +const EmailQuotation = ({ sfi_sn, ...props }) => { + const {notification} = App.useApp() + const currentConversation = useConversationStore((state) => state.currentConversation) + const { userId, username, emailList, email } = useAuthStore((state) => state.loginUser) + const [orderDetail, customerDetail] = useOrderStore((s) => [s.orderDetail, s.customerDetail]) + + 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 }) + + useEffect(() => { + const order_opi = Number(orderDetail?.opi_sn || userId) + + const find = + emailListOption?.find((ele) => ele.opi_sn === order_opi && ele.default === true) || + emailListOption?.find((ele) => ele.opi_sn === order_opi && ele.backup === true) || + emailListOption?.find((ele) => ele.opi_sn === order_opi) || + emailListOption?.find((ele) => ele.default === true) || + emailListOption?.find((ele) => ele.backup === true) || + emailListOption[0] + setPickEmail(find) + return () => {} + }, [orderDetail]) + + const [draftLoading, setDraftLoading] = useState(false) + const [draft, setDraft] = useState({}) + const getEmailDraft = async ({ sfi_sn, coli_sn, lgc = 1 }) => { + if (isEmpty(sfi_sn)) { + return false + } + try { + setDraftLoading(true) + const data = await getEmailQuotationDraftAction({ sfi_sn, coli_sn, lgc }) + setDraft(data) + setDraftLoading(false) + } catch (err) { + setDraftLoading(false) + notification.error({ + message: '请求失败', + description: err.message || '网络异常', + placement: 'top', + duration: 3, + }) + } + } + + const [editorOpen, setEditorOpen] = useState(false) + + + return ( + <> + + + + + ) +} +export default EmailQuotation diff --git a/src/views/Conversations/Online/Input/EmailComposer.jsx b/src/views/Conversations/Online/Input/EmailComposer.jsx index 56d7410..b37bce0 100644 --- a/src/views/Conversations/Online/Input/EmailComposer.jsx +++ b/src/views/Conversations/Online/Input/EmailComposer.jsx @@ -258,7 +258,7 @@ const EmailComposer = ({ ...props }) => { fromOrder={currentConversation.coli_sn} conversationid={currentConversation.sn} toEmail={toEmail} - quickData={quickData} + draft={quickData} action='new' key={'email-new-editor-popup'} /> diff --git a/src/views/Conversations/Online/Input/EmailEditorPopup.jsx b/src/views/Conversations/Online/Input/EmailEditorPopup.jsx index c3482c3..954cbcb 100644 --- a/src/views/Conversations/Online/Input/EmailEditorPopup.jsx +++ b/src/views/Conversations/Online/Input/EmailEditorPopup.jsx @@ -72,9 +72,9 @@ const generateMailContent = (mailData) => ` * @property {string} toEmail - 收件人邮箱 * @property {string} conversationid - 会话ID * @property {string} quoteid - 引用邮件ID - * @property {object} quickData - 纯文本输入的草稿. 仅在从快速窗口打开时传递 + * @property {object} draft - 草稿 */ -const EmailEditorPopup = ({ open, setOpen, fromEmail, fromUser, fromOrder, toEmail, conversationid, quoteid, initial = {}, mailData: _mailData, action = 'reply', quickData = {}, ...props }) => { +const EmailEditorPopup = ({ open, setOpen, fromEmail, fromUser, fromOrder, toEmail, conversationid, quoteid, initial = {}, mailData: _mailData, action = 'reply', draft = {}, ...props }) => { const { notification, message } = App.useApp(); const [form] = Form.useForm(); @@ -115,7 +115,7 @@ const EmailEditorPopup = ({ open, setOpen, fromEmail, fromUser, fromOrder, toEma useEffect(() => { if (isEmpty(quoteid)) { // console.log('emailEditorPopup effect', open, '\nto', toEmail) - setStickToProps({ fromEmail, fromUser, fromOrder, toEmail, conversationid, quoteid, action }); + setStickToProps({ fromEmail, fromUser, fromOrder, toEmail, conversationid, quoteid, action, draft }); setStickToCid(conversationid) setEmailOrder(fromOrder) @@ -198,7 +198,6 @@ const EmailEditorPopup = ({ open, setOpen, fromEmail, fromUser, fromOrder, toEma } const { info, } = mailData // setShowCc(!isEmpty(mailData.info?.MAI_CS)); - setShowCc(true); const preQuoteBody = generateQuoteContent(mailData); @@ -233,14 +232,14 @@ const EmailEditorPopup = ({ open, setOpen, fromEmail, fromUser, fromOrder, toEma setInitialContent(thisBody) } else if (action === 'new') { - const newEmail = { to: newToEmail, subject: quickData?.subject || '' } + const newEmail = { to: newToEmail, subject: draft?.subject || '' } form.setFieldsValue(newEmail); setInitialForm(newEmail); - setInitialContent(quickData?.content || ''); + setInitialContent(draft?.content || ''); } return () => {}; - }, [stickToProps, mailData.info, newToEmail, newFromEmail]); + }, [stickToProps, mailData.info, draft, newToEmail, newFromEmail]); const [openPlainTextConfirm, setOpenPlainTextConfirm] = useState(false); const handlePlainTextOpenChange = ({ target }) => { diff --git a/src/views/Conversations/Online/order/QuotesHistory.jsx b/src/views/Conversations/Online/order/QuotesHistory.jsx index a9e9cbd..b311048 100644 --- a/src/views/Conversations/Online/order/QuotesHistory.jsx +++ b/src/views/Conversations/Online/order/QuotesHistory.jsx @@ -1,6 +1,7 @@ import { LinkOutlined } from '@ant-design/icons' import { Button, Flex, List, Popover } from 'antd' import { useState } from 'react' +import EmailQuotation from '../Components/EmailQuotation' const QuotesHistory = ((props) => { @@ -10,14 +11,14 @@ const QuotesHistory = ((props) => { setOpen(newOpen) } - const handleCopyClick = (url) => { + const handleCopyClick = (url) => { navigator.clipboard.writeText(url) setOpen(false) } return ( <> - {  {item.lettertitle}} + title={ {item.lettertitle}} description={ {item.letterdate} +
+ +
} />