diff --git a/src/actions/EmailActions.js b/src/actions/EmailActions.js
index b39d49d..0d34ae7 100644
--- a/src/actions/EmailActions.js
+++ b/src/actions/EmailActions.js
@@ -72,6 +72,12 @@ export const getEmailDetailAction = async (params) => {
return { info: encodeEmailInfo(result.MailInfo?.[0] || {}), content: mailType === 'text/html' ? parseHTMLString((result.MailContent || '').replace(/\r\n/g, '')) : (result.MailContent || ''), attachments: result?.AttachList || [] };
}
+export const getEmailOrderAction = async ({ colisn }) => {
+ const { errcode, result } = await fetchJSON(`${API_HOST}/getorderinfo`, { colisn })
+ return errcode === 0 ? { ...result[0], customerDetail: result[0].contact[0] } : {}
+}
+
+
/**
* 主动收邮件, 单个账户
* @param {object} { opi_sn, }
diff --git a/src/hooks/useEmail.js b/src/hooks/useEmail.js
index 3cb3e3f..b35a15a 100644
--- a/src/hooks/useEmail.js
+++ b/src/hooks/useEmail.js
@@ -1,6 +1,6 @@
import { useState, useEffect, useCallback } from 'react'
import { isEmpty } from '@/utils/commons'
-import { getEmailDetailAction, postResendEmailAction, getSalesSignatureAction } from '@/actions/EmailActions'
+import { getEmailDetailAction, postResendEmailAction, getSalesSignatureAction, getEmailOrderAction } from '@/actions/EmailActions'
import { App } from 'antd'
import useConversationStore from '@/stores/ConversationStore';
import { msgStatusRenderMapped } from '@/channel/bubbleMsgUtils';
@@ -38,6 +38,8 @@ export const useEmailDetail = (mai_sn, data) => {
const {notification} = App.useApp()
const [loading, setLoading] = useState(false)
const [mailData, setMailData] = useState({ loading, info: {}, content: '', attachments: [] })
+ const [coliSN, setColiSN] = useState('');
+ const [orderDetail, setOrderDetail] = useState({});
const [updateMessageItem] = useConversationStore(state => [state.updateMessageItem]);
@@ -50,6 +52,7 @@ export const useEmailDetail = (mai_sn, data) => {
setLoading(true)
const data = await getEmailDetailAction({ mai_sn })
setMailData(data)
+ setColiSN(data.info.MAI_COLI_SN)
setLoading(false)
} catch (err) {
setLoading(false)
@@ -66,6 +69,31 @@ export const useEmailDetail = (mai_sn, data) => {
else setMailData(data)
}, [mai_sn])
+
+ useEffect(() => {
+ const getOrderDetail = async () => {
+ if (isEmpty(coliSN)) {
+ return false
+ }
+ try {
+ setLoading(true)
+ const data = await getEmailOrderAction({ colisn: coliSN })
+ setOrderDetail(data)
+ setLoading(false)
+ } catch (err) {
+ setLoading(false)
+ notification.error({
+ message: "请求失败",
+ description: err.message || '网络异常',
+ placement: "top",
+ duration: 3,
+ });
+ }
+ }
+
+ getOrderDetail()
+ }, [coliSN])
+
const postEmailResend = async ({ mai_sn, conversationid: externalid, actionId: actionid, ...body }) => {
if (isEmpty(mai_sn)) {
return false
@@ -75,7 +103,7 @@ export const useEmailDetail = (mai_sn, data) => {
updateMessageItem({ conversationid: externalid, actionid, id: actionid, status: msgStatusRenderMapped['accepted'] })
}
- return { loading, mailData, postEmailResend }
+ return { loading, mailData, orderDetail, postEmailResend }
}
export const EmailBuilder = ({subject, content}) => {
diff --git a/src/views/Conversations/Online/Components/EmailDetail.jsx b/src/views/Conversations/Online/Components/EmailDetail.jsx
index 38fb089..9153bd4 100644
--- a/src/views/Conversations/Online/Components/EmailDetail.jsx
+++ b/src/views/Conversations/Online/Components/EmailDetail.jsx
@@ -48,7 +48,7 @@ const EmailDetail = ({ open, setOpen, emailMsg={}, disabled=false, ...props }) =
const [mobile] = useStyleStore((state) => [state.mobile])
- const { loading, mailData, postEmailResend } = useEmailDetail(mailID)
+ const { loading, mailData, orderDetail, postEmailResend } = useEmailDetail(mailID)
const [showBindBtn, setShowBindBtn] = useState(false);
useEffect(() => {
setShowBindBtn(isEmpty(mailData.info?.MAI_COLI_SN))
@@ -203,6 +203,8 @@ const EmailDetail = ({ open, setOpen, emailMsg={}, disabled=false, ...props }) =
fromUser={mailData.info?.MAI_OPI_SN || order_opi}
fromOrder={mailData.info?.MAI_COLI_SN || coli_sn}
conversationid={conversationid}
+ oid={orderDetail.order_no}
+ customerDetail={orderDetail.customerDetail}
// emailMsg={ReferEmailMsg}
quoteid={mailID}
initial={{ ...initialPosition, ...initialSize }}
diff --git a/src/views/Conversations/Online/Components/EmailQuotation.jsx b/src/views/Conversations/Online/Components/EmailQuotation.jsx
index 32c7b05..58f3d25 100644
--- a/src/views/Conversations/Online/Components/EmailQuotation.jsx
+++ b/src/views/Conversations/Online/Components/EmailQuotation.jsx
@@ -83,6 +83,7 @@ const EmailQuotation = ({ sfi_sn, ...props }) => {
// initial={{ ...initialPosition, ...initialSize }}
// mailData={mailData}
draft={draft}
+ // customerDetail={customerDetail}
action={'new'}
key={`email-quotation-new-popup_${currentConversation.sn}`}
/>
diff --git a/src/views/Conversations/Online/Input/EmailComposer.jsx b/src/views/Conversations/Online/Input/EmailComposer.jsx
index 1f95b79..a553216 100644
--- a/src/views/Conversations/Online/Input/EmailComposer.jsx
+++ b/src/views/Conversations/Online/Input/EmailComposer.jsx
@@ -262,6 +262,7 @@ const EmailComposer = ({ ...props }) => {
conversationid={currentConversation.sn}
toEmail={toEmail}
draft={quickData}
+ customerDetail={customerDetail}
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 d3c0180..667847b 100644
--- a/src/views/Conversations/Online/Input/EmailEditorPopup.jsx
+++ b/src/views/Conversations/Online/Input/EmailEditorPopup.jsx
@@ -59,7 +59,7 @@ const generateMailContent = (mailData) => `
${mailData.content}
` * @property {string} quoteid - 引用邮件ID * @property {object} draft - 草稿 */ -const EmailEditorPopup = ({ open, setOpen, fromEmail, fromUser, fromOrder, oid, toEmail, conversationid, quoteid, initial = {}, mailData: _mailData, action = 'reply', draft = {}, ...props }) => { +const EmailEditorPopup = ({ open, setOpen, fromEmail, fromUser, fromOrder, oid, toEmail, conversationid, quoteid, initial = {}, mailData: _mailData, action = 'reply', draft = {}, customerDetail={}, ...props }) => { const { notification, message } = App.useApp(); const [form] = Form.useForm(); @@ -93,6 +93,8 @@ const EmailEditorPopup = ({ open, setOpen, fromEmail, fromUser, fromOrder, oid, setNewToEmail('') } + const [contentPrefix, setContentPrefix] = useState(''); + // 存储: 会话ID, // 这个窗口没有模态, 即使不是focus, 还是需要保持会话ID // 否则, 会话列表切换之后, 会话ID更新, 导致消息关联错误 @@ -100,6 +102,8 @@ const EmailEditorPopup = ({ open, setOpen, fromEmail, fromUser, fromOrder, oid, useEffect(() => { const propsObj = { open, setOpen, fromEmail, fromUser, fromOrder, oid, toEmail, conversationid, quoteid, mai: _mailData?.info?.MAI_MAT_SN, action, draft } + setContentPrefix(oid ? `Dear Mr./Ms. ${customerDetail.name || ''}
Reference Number: ${oid}
` : ''); + // 没有引用邮件 if (isEmpty(quoteid)) { setStickToProps(propsObj) @@ -197,7 +201,7 @@ const EmailEditorPopup = ({ open, setOpen, fromEmail, fromUser, fromOrder, oid, // const _initialContent = isEmpty(mailData.info) ? signatureBody : signatureBody+preQuoteBody if (!isEmpty(mailData.info) && action !== 'edit') { - setInitialContent(signatureBody) + setInitialContent(contentPrefix + signatureBody) } const _formValues = { @@ -230,7 +234,7 @@ const EmailEditorPopup = ({ open, setOpen, fromEmail, fromUser, fromOrder, oid, const newEmail = { to: newToEmail, subject: draft?.subject || '' } form.setFieldsValue(newEmail) setInitialForm(newEmail) - setInitialContent((draft?.content || '') + signatureBody) + setInitialContent((draft?.content || contentPrefix || '') + signatureBody) } return () => {} diff --git a/src/views/Conversations/Online/MessagesWrapper.jsx b/src/views/Conversations/Online/MessagesWrapper.jsx index bf9be98..8edd7da 100644 --- a/src/views/Conversations/Online/MessagesWrapper.jsx +++ b/src/views/Conversations/Online/MessagesWrapper.jsx @@ -30,7 +30,7 @@ const MessagesWrapper = ({ updateRead = true, forceGetMessages }) => { const currentConversationSN = useConversationStore(useShallow((state) => state.currentConversation.sn)); const currentConversationColiSN = useConversationStore(useShallow((state) => state.currentConversation.coli_sn)); - const [orderDetail, ] = useOrderStore(state => [state.orderDetail, ]); + const [orderDetail, customerDetail] = useOrderStore(state => [state.orderDetail, state.customerDetail ]); const isVisible = useVisibilityState(); @@ -268,6 +268,7 @@ const MessagesWrapper = ({ updateRead = true, forceGetMessages }) => { fromUser={Number(orderDetail?.opi_sn || userId)} fromOrder={currentConversation.coli_sn} oid={orderDetail?.order_no} + customerDetail={customerDetail} quoteid={ReferEmailMsg.mai_sn || ReferEmailMsg.id} conversationid={currentConversation.sn} key={`email-msg-reply-top-popup_${ReferEmailMsg.id}`}