import useAuthStore from '@/stores/AuthStore' import { pick } from '@/utils/commons' import { UnorderedListOutlined, LeftOutlined } from '@ant-design/icons' import { Flex, Segmented, Tree, Typography, Layout, Splitter, Button, Tooltip, Badge } from 'antd' import { useEffect, useMemo, useState, useRef } from 'react' import EmailDetailInline from '../Conversations/Online/Components/EmailDetailInline' import OrderProfile from '@/components/OrderProfile' import Mailbox from './components/Mailbox' import useConversationStore from '@/stores/ConversationStore'; import { MailboxDirIcon } from './components/MailboxDirIcon' import { useVisibilityState } from '@/hooks/useVisibilityState' const deptMap = new Map([ ['1', 'CH'], // CH直销组 ['2', 'CH大客户组'], ['7', '市场推广'], ['8', '德语市场'], ['9', '日语市场'], ['10', '商旅市场'], ['11', '法语市场'], ['12', '西语市场'], ['13', '英文在线组'], ['14', '商务Biztravel'], ['15', 'CH产品'], ['16', 'APP移动项目组'], ['17', 'ChinaTravel组'], ['18', 'CT市场'], ['20', '俄语市场'], ['21', '意语市场'], ['22', '爱游网'], ['23', '三峡站'], ['24', '桂林站'], ['25', '上海站'], ['26', '北京站'], ['27', '西藏站'], ['28', 'AH'], // AH亚洲项目组 ['29', 'DMC地接组'], ['30', 'Trippest项目组'], // ['31', '花梨鹰'], ['32', 'Daytours板块'], ['33', 'GH'], // GH项目组 ['34', 'trippest网站'], ['35', 'newsletter营销'], ]) function Follow() { const [collapsed, setCollapsed] = useState(true) const mailboxTreeRef = useRef(null); const [treeHeight, setTreeHeight] = useState(500); const [loginUser, isPermitted] = useAuthStore((state) => [state.loginUser, state.isPermitted]) const { accountList } = loginUser const accountListDEIMapped = useMemo(() => accountList.reduce((a, c) => ({ ...a, [c.OPI_DEI_SN]: c }), {}), [accountList]) const accountDEI = useMemo(() => { return accountList.map((ele) => ({ key: ele.OPI_DEI_SN, value: ele.OPI_DEI_SN, label: deptMap.get(`${ele.OPI_DEI_SN}`) })) }, [accountList]) const [getOPIEmailDir] = useConversationStore(state => [state.getOPIEmailDir]); const [currentMailboxDEI, setCurrentMailboxDEI, mailboxNestedDirsActive] = useConversationStore(state => [state.currentMailboxDEI, state.setCurrentMailboxDEI, state.mailboxNestedDirsActive]); const [currentMailboxOPI, setCurrentMailboxOPI] = useConversationStore(state => [state.currentMailboxOPI, state.setCurrentMailboxOPI]); const [mailboxActiveNode, setMailboxActiveNode] = useConversationStore(state => [state.mailboxActiveNode, state.setMailboxActiveNode]); const [activeEmailId, setActiveEmailId] = useConversationStore(state => [state.mailboxActiveMAI, state.setMailboxActiveMAI]); const [mailboxActiveCOLI, setMailboxActiveCOLI] = useConversationStore(state => [state.mailboxActiveCOLI, state.setMailboxActiveCOLI]); const computedBreadcrumb = useMemo(() => { const { title, iconIndex, parentTitle, parentIconIndex } = mailboxActiveNode const x = [ { title: parentTitle, iconIndex: parentIconIndex }, { title, iconIndex }, ].filter((ele) => ele.title) return x }, [mailboxActiveNode.VKey]) const [expandTree, setExpandTree] = useState([]) const handleSwitchAccount = (value) => { setActiveEmailId(0); // setExpandTree([]); setCurrentMailboxDEI(value) const opi = accountListDEIMapped[value].OPI_SN getOPIEmailDir(opi) setCurrentMailboxOPI(opi); } const handleTreeSelectGetMails = (selectedKeys, { node }) => { // console.info('selectedTreeKeys: ', node) const treeNode = pick(node, ['key', 'parent', 'iconIndex', 'getMails', 'title', 'parentTitle', 'parentIconIndex' ]); const { COLI_SN, VKey, VParent, ApplyDate, OrderSourceType, IsTrue } = node?._raw || {} if (VKey && !(!IsTrue && !COLI_SN)) { setMailboxActiveNode({...treeNode, ...node._raw, key: treeNode.key, OPI_SN: currentMailboxOPI}); setActiveEmailId(0); setMailboxActiveCOLI(COLI_SN); } else { const _expandTree = expandTree.includes(node.key) ? expandTree.filter(ele => ele !== node.key) : [...expandTree, ...selectedKeys] setExpandTree(_expandTree) } } const [selectedEmail, setSelectedEmail] = useState({}); const onClickEmailItem = (emailItem) => { const mai_sn = emailItem.MAI_SN; setActiveEmailId(mai_sn); setMailboxActiveCOLI(emailItem.MAI_COLI_SN || 0) const emailMsg = { conversationid: '', order_opi: currentMailboxOPI, coli_sn: 'oid', id: emailItem.MAI_SN, MAI_SN: emailItem.MAI_SN, msgOrigin: { from: '', to: '', ...(emailItem?.msgOrigin || {}), id: emailItem.MAI_SN, email: { mai_sn: emailItem.MAI_SN, subject: emailItem.MAI_Subject, id: emailItem.MAI_SN }, subject: emailItem.MAI_Subject, }, } // console.log('emailItem', emailItem); setSelectedEmail(emailMsg) }; // 1新订单;2未读消息;3需一催;4需二催;5需三催;6未处理邮件;入境提醒coli_ordertype=7,余款提醒coli_ordertype=8 useEffect(() => { const first = currentMailboxDEI || accountDEI[0].value const opi = accountListDEIMapped[first].OPI_SN setExpandTree([...[`${opi}-today`, `${opi}-todo`, `search-orders` ]]) return () => {} }, [currentMailboxDEI ]) useEffect(() => { if (mailboxActiveNode?.expand === true) { setExpandTree([mailboxActiveNode.key]) } return () => {} }, [mailboxActiveNode]) useEffect(() => { const targetRect = mailboxTreeRef.current?.getBoundingClientRect() setTreeHeight(Math.floor(targetRect.height)) return () => {} }, []) const isVisible = useVisibilityState(); useEffect(() => { // console.log('effect isVisible', isVisible); if (isVisible && currentMailboxOPI) { getOPIEmailDir(currentMailboxOPI, null, true) } return () => {} }, [isVisible]); return ( <>
setExpandTree(expandedKeys)} expandedKeys={expandTree} defaultExpandedKeys={expandTree} treeData={mailboxNestedDirsActive} icon={(node) => } titleRender={(node) => ( {node.title} )} />
onClickEmailItem(item)} currentActiveMailItem={activeEmailId} /> {}} autoMark={true} />