Merge branch 'main' of github.com:hainatravel/global-sales

# Conflicts:
#	src/views/Conversations/Online/order/CustomerProfile.jsx   resolved by theirs version
dev/emitter
LiaoYijun 10 months ago
commit cbebd167ea

@ -125,6 +125,14 @@ export const postNewOrEditConversationItem = async (body) => {
};
};
/**
* @param {object} params { conversationid, coli_sn }
*/
export const postEditConversationItemColiAction = async (params) => {
const { errcode, result } = await fetchJSON(`${API_HOST}/update_conversation_orderid`, params);
return errcode !== 0 ? {} : result;
};
/**
* @param {object} params { opisn, whatsappid }
*/

@ -27,6 +27,8 @@ import 'react-chat-elements/dist/main.css'
import EmailFetch from './Conversations/Online/Components/EmailFetch'
import { getEmailFetchAction } from '@/actions/EmailActions'
const fetchEmailWorkerURL = new URL('./../workers/fetchEmailWorker.js', import.meta.url);
function AuthApp() {
const navigate = useNavigate()
@ -52,24 +54,34 @@ function AuthApp() {
} else {
Notification.requestPermission()
}
let fetchEmailWorker;
if (loginUser.userId > 0) {
appendRequestHeader('X-User-Id', loginUser.userId)
loadPageSpy(loginUser.username)
connectWebsocket(loginUser.userId)
fetchInitialData(loginUser)
if (isPermitted(PERM_USE_EMAL)) startEmailInterval(loginUser.userId)
let fetchEmailWorker;
if (isPermitted(PERM_USE_EMAL)) {
fetchEmailWorker = startEmailInterval(loginUser.userId)
}
}
return () => {
disconnectWebsocket()
if (fetchEmailWorker) {
fetchEmailWorker.terminate();
}
}
}, [])
const startEmailInterval = (userId) => {
setInterval(() => {
// TODO 线
getEmailFetchAction({opi_sn: userId})
}, 1000*10)
const fetchEmailWorker = new Worker(fetchEmailWorkerURL, { type: 'module' });
fetchEmailWorker.postMessage({ command: 'fetchEmail', param: { opi_sn: userId } });
return fetchEmailWorker;
// setInterval(() => {
// // TODO 线
// getEmailFetchAction({opi_sn: userId})
// }, 1000*10)
}
const uploadLog = () => {

@ -76,6 +76,7 @@ const EmailQuotation = ({ sfi_sn, ...props }) => {
fromUser={orderDetail.opi_sn}
toEmail={currentConversation?.channels?.email || customerDetail?.email}
fromOrder={currentConversation.coli_sn}
oid={orderDetail?.order_no}
conversationid={currentConversation.sn}
// emailMsg={ReferEmailMsg}
// quoteid={mailID}

@ -145,6 +145,7 @@ const EmailComposer = ({ ...props }) => {
subject: values.subject,
content: body.mailcontent,
},
coli_id: orderDetail?.order_no || '',
}
setSendLoading(true)
body.externalID = stickToCid
@ -177,7 +178,7 @@ const EmailComposer = ({ ...props }) => {
<Form
form={form}
preserve={false}
name='email_max_form'
name='email_quick_form'
layout={'inline'}
// initialValues={{}}
onFinish={handleSendEmail}
@ -256,6 +257,7 @@ const EmailComposer = ({ ...props }) => {
fromEmail={fromEmail}
fromUser={fromUser}
fromOrder={currentConversation.coli_sn}
oid={orderDetail?.order_no}
conversationid={currentConversation.sn}
toEmail={toEmail}
draft={quickData}

@ -68,13 +68,13 @@ const generateMailContent = (mailData) => `
/**
* @property {string} fromEmail - 发件人邮箱
* @property {string} fromUser - 发件人用户
* @property {string} fromOrder - 发件订单
* @property {string} fromOrder - 发件订单
* @property {string} toEmail - 收件人邮箱
* @property {string} conversationid - 会话ID
* @property {string} quoteid - 引用邮件ID
* @property {object} draft - 草稿
*/
const EmailEditorPopup = ({ open, setOpen, fromEmail, fromUser, fromOrder, 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 = {}, ...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, draft });
setStickToProps({ fromEmail, fromUser, fromOrder, oid, toEmail, conversationid, quoteid, action, draft });
setStickToCid(conversationid)
setEmailOrder(fromOrder)
@ -408,6 +408,7 @@ const EmailEditorPopup = ({ open, setOpen, fromEmail, fromUser, fromOrder, toEma
subject: values.subject,
content: body.mailcontent,
},
coli_id: stickToProps.oid || `{${emailOrder}}`
}
setSendLoading(true);
body.externalID = stickToCid;
@ -422,6 +423,8 @@ const EmailEditorPopup = ({ open, setOpen, fromEmail, fromUser, fromOrder, toEma
const result = await postSendEmail(body);
const mailSavedId = result.id || '';
bubbleMsg.email.mai_sn = mailSavedId;
// console.log('invokeEmailMessage', bubbleMsg);
invokeEmailMessage(bubbleMsg);
// setSendLoading(false);
@ -473,7 +476,7 @@ const EmailEditorPopup = ({ open, setOpen, fromEmail, fromUser, fromOrder, toEma
</Popconfirm>
<Select labelInValue
options={emailListOption}
value={newFromEmail}
value={{key: newFromEmail, value: newFromEmail, label: newFromEmail}}
onChange={handleSwitchEmail}
variant={'borderless'}
/>

@ -228,6 +228,7 @@ const MessagesWrapper = ({ updateRead = true, forceGetMessages }) => {
fromEmail={fromEmail}
fromUser={Number(orderDetail?.opi_sn || userId)}
fromOrder={currentConversation.coli_sn}
oid={orderDetail?.order_no}
quoteid={ReferEmailMsg.mai_sn || ReferEmailMsg.id}
conversationid={currentConversation.sn}
key={`email-msg-reply-top-popup_${ReferEmailMsg.id}`}

@ -13,6 +13,7 @@ import ConversationBind from "./../ConversationBind";
import ConversationsNewItem from "./../ConversationsNewItem";
import { useConversationNewItem } from "@/hooks/useConversation";
import EmailDetail from './../Components/EmailDetail';
import { postEditConversationItemColiAction } from "@/actions/ConversationActions";
const CustomerProfile = () => {
const { notification, message } = App.useApp();
@ -47,6 +48,7 @@ const CustomerProfile = () => {
const mapOrderList = orderList.map(o => {
return { value: o.coli_sn, label: o.coli_id }
})
// mapOrderList.unshift({ value: 0, label: "" });
setOrderList(mapOrderList)
if (!isEmpty(orderList)) {
setChatOrder(currentOrder)
@ -122,6 +124,12 @@ const CustomerProfile = () => {
openDetail();
}, [])
const handleOrderSwitch = async (coli_sn) => {
await postEditConversationItemColiAction({conversationid: currentConversationID, coli_sn });
setChatOrder(coli_sn);
updateCurrentConversation({ coli_sn });
};
if (currentOrder) {
return (
<div className="divide-x-0 divide-y divide-dashed divide-gray-300">
@ -136,10 +144,7 @@ const CustomerProfile = () => {
variant="borderless"
value={chatOrder}
options={orderList}
onSelect={(x) => {
setChatOrder(x);
updateCurrentConversation({ coli_sn: x });
}}
onSelect={handleOrderSwitch}
/>}
actions={[
<Select

@ -0,0 +1,14 @@
import { getEmailFetchAction } from '@/actions/EmailActions'
self.onmessage = (event) => {
if (event.data.command === 'fetchEmail') {
// Get the parameter
const param = event.data.param // { opi_sn: userId }
// console.log('Worker: Received command start with param:', param);
// Do something......
setInterval(() => {
getEmailFetchAction(param)
}, 10 * 1000) // prod: 30 minutes
}
}
Loading…
Cancel
Save