diff --git a/src/actions/EmailActions.js b/src/actions/EmailActions.js index f46959e..c485a4f 100644 --- a/src/actions/EmailActions.js +++ b/src/actions/EmailActions.js @@ -231,7 +231,7 @@ export const getTodoOrdersAction = async (params) => { parent: key + '-today', parentTitle: '今日任务', parentIconIndex: 'star', - _raw: { ...o, VKey: o.COLI_SN, VName: o.COLI_ID, VParent: -1, IsTrue: 0, ApplyDate: '', OrderSourceType: 227001, parent: -1 }, + _raw: { ...o, VKey: o.COLI_SN, VName: o.COLI_ID, VParent: key + '-today', IsTrue: 0, ApplyDate: '', OrderSourceType: 227001, parent: key + '-today' }, })), }, { @@ -247,7 +247,7 @@ export const getTodoOrdersAction = async (params) => { parent: key + '-todo', parentTitle: '待办任务', parentIconIndex: 'calendar', - _raw: { ...o, VKey: o.COLI_SN, VName: o.COLI_ID, VParent: -1, IsTrue: 0, ApplyDate: '', OrderSourceType: 227001, parent: -1 }, + _raw: { ...o, VKey: o.COLI_SN, VName: o.COLI_ID, VParent: key + '-todo', IsTrue: 0, ApplyDate: '', OrderSourceType: 227001, parent: key + '-todo' }, })), }, ...(!isEmpty(sticky[1] || []) @@ -265,7 +265,7 @@ export const getTodoOrdersAction = async (params) => { parent: key + '-reminder', parentTitle: '催信', parentIconIndex: 'reminder', - _raw: { ...o, VKey: o.COLI_SN, VName: o.COLI_ID, VParent: -1, IsTrue: 0, ApplyDate: '', OrderSourceType: 227001, parent: -1 }, + _raw: { ...o, VKey: o.COLI_SN, VName: o.COLI_ID, VParent: key + '-reminder', IsTrue: 0, ApplyDate: '', OrderSourceType: 227001, parent: key + '-reminder' }, })), }, ] @@ -428,3 +428,9 @@ export const deleteEmailAttachmentAction = async (ati_sn_list) => { const { errcode, result } = await postJSON(`${API_HOST_V3}/mail_attachment_delete`, { ati_sn_list }) return errcode === 0 ? result : {} }; + + +export const queryHTOrderListAction = async (params) => { + const { errcode, result } = await fetchJSON(`${API_HOST}/query_order`, params) + return errcode !== 0 ? [] : result +} diff --git a/src/stores/EmailSlice.js b/src/stores/EmailSlice.js index a322525..44a46d6 100644 --- a/src/stores/EmailSlice.js +++ b/src/stores/EmailSlice.js @@ -1,5 +1,5 @@ import { getEmailDirAction, getRootMailboxDirAction } from '@/actions/EmailActions' -import { buildTree, isEmpty } from '@/utils/commons' +import { buildTree, isEmpty, sortArrayByOrder } from '@/utils/commons' import { readIndexDB, writeIndexDB, createIndexedDBStore, clean7DaysMailboxLog } from '@/utils/indexedDB'; /** @@ -85,6 +85,21 @@ const emailSlice = (set, get) => ({ setMailboxNestedDirsActive: (dir) => { return set(() => ({ mailboxNestedDirsActive: dir })) }, + updateMailboxNestedDirs: (dirs) => { + const { mailboxNestedDirsActive } = get(); + const keep = mailboxNestedDirsActive.filter((ele) => isEmpty(ele.parent)) + return set(() => ({ mailboxNestedDirsActive: [...keep, ...dirs] })) + }, + addMailboxNestedDirs: dirs => { + const { mailboxNestedDirsActive } = get() + const _Map = new Map(mailboxNestedDirsActive.map((obj) => [obj.key, obj])) + dirs.forEach((row) => { + _Map.set(row.key, row) + }) + const _newValue = sortArrayByOrder(Array.from(_Map.values()), 'key', ['search-orders']) + + return set(() => ({ mailboxNestedDirsActive: _newValue })) + }, mailboxActiveNode: {}, setMailboxActiveNode: (node) => { diff --git a/src/views/Conversations/Online/Components/EmailDetailInline.jsx b/src/views/Conversations/Online/Components/EmailDetailInline.jsx index 279573d..c4ff306 100644 --- a/src/views/Conversations/Online/Components/EmailDetailInline.jsx +++ b/src/views/Conversations/Online/Components/EmailDetailInline.jsx @@ -200,13 +200,11 @@ const EmailDetailInline = ({ mailID, emailMsg = {}, disabled = false, variant, s const showFullBtn = variant !== 'full' if (showFullBtn) { + btns.push(); btns.push( - <> - - ) } diff --git a/src/views/orders/Follow.jsx b/src/views/orders/Follow.jsx index a5863ff..32e19da 100644 --- a/src/views/orders/Follow.jsx +++ b/src/views/orders/Follow.jsx @@ -122,10 +122,10 @@ function Follow() { useEffect(() => { const first = currentMailboxDEI || accountDEI[0].value const opi = accountListDEIMapped[first].OPI_SN - setExpandTree([`${opi}-today`, `${opi}-todo`]) + setExpandTree([`${opi}-today`, `${opi}-todo`, `search-orders`, ...[mailboxActiveNode?.VParent || []]]) return () => {} - }, [currentMailboxDEI, mailboxNestedDirsActive]) + }, [currentMailboxDEI, mailboxNestedDirsActive, mailboxActiveNode]) return ( <> diff --git a/src/views/orders/components/MailOrderSearchModal.jsx b/src/views/orders/components/MailOrderSearchModal.jsx index 9a682ad..851d1bf 100644 --- a/src/views/orders/components/MailOrderSearchModal.jsx +++ b/src/views/orders/components/MailOrderSearchModal.jsx @@ -1,16 +1,16 @@ import { createContext, useEffect, useState } from 'react' import { ReloadOutlined, ReadOutlined, RightOutlined, LeftOutlined, SearchOutlined, MailOutlined } from '@ant-design/icons' -import { Button, Modal, Form, Input, Checkbox, Select, Radio, DatePicker, Divider } from 'antd' +import { Button, Modal, Form, Input, Checkbox, Select, Radio, DatePicker, Divider, Typography } from 'antd' import dayjs from 'dayjs' -import { getEmailDirAction } from '@/actions/EmailActions' -import { objectMapper } from '@/utils/commons' +import { getEmailDirAction, queryHTOrderListAction } from '@/actions/EmailActions' +import { isEmpty, objectMapper, pick } from '@/utils/commons' import useConversationStore from '@/stores/ConversationStore' const yearsArray = Array.from({ length: new Date().getFullYear() - 2004 + 1 }, (_, i) => ({ key: 2004 + i, value: 2004 + i, label: 2004 + i })) const MailOrderSearchModal = ({ ...props }) => { const [currentMailboxOPI] = useConversationStore((state) => [state.currentMailboxOPI]) - const [setMailboxNestedDirsActive, setMailboxActiveNode] = useConversationStore((state) => [state.setMailboxNestedDirsActive, state.setMailboxActiveNode]) + const [addMailboxNestedDirs, updateMailboxNestedDirs, setMailboxActiveNode] = useConversationStore((state) => [state.addMailboxNestedDirs, state.updateMailboxNestedDirs, state.setMailboxActiveNode]) const [open, setOpen] = useState(false) const [form] = Form.useForm() @@ -23,34 +23,33 @@ const MailOrderSearchModal = ({ ...props }) => { setLoading(true) const valuesToSub = objectMapper(values, { year: { key: 'year', transform: (val) => (val ? dayjs(val).year() : '') }, - important: { key: 'important', transform: (val) => (val ? '1' : '0') }, + important: { key: 'important', transform: (val) => (val || '-1') }, by_success: { key: 'by_success', transform: (val) => (val ? '1' : '0') }, if_want_book: { key: 'if_want_book', transform: (val) => (val ? '1' : '0') }, if_thinking: { key: 'if_thinking', transform: (val) => (val ? '1' : '0') }, by_start_date: { key: 'by_start_date', transform: (val) => (val ? '1' : '0') }, + coli_id: { key: 'coli_id', transform: (val) => (val ? val : '') }, + is_biz: { key: 'sourcetype', transform: (val) => (val ? '227002' : '227001') }, }) - const result = await getEmailDirAction({ ...valuesToSub, opi_sn: currentMailboxOPI }, true) - console.log('res', result) + let result; + if (isEmpty(valuesToSub.coli_id)) { + const { coli_id, sourcetype, ...mailboxParams} = valuesToSub; + result = await getEmailDirAction({ ...mailboxParams, opi_sn: currentMailboxOPI }, false) + updateMailboxNestedDirs(result[`${currentMailboxOPI}`]) + } else { + const htOrderParams = pick(valuesToSub, ['coli_id', 'sourcetype',]) + result = await queryHTOrderListAction(htOrderParams) + const addToTree = { + key: 'search-orders', + title: '搜索结果', + iconIndex: 'search', + _raw: { COLI_SN: 0, IsTrue: 0 }, + children: result.map((o) => ({ key: `search-${o.COLI_SN}`, title: `${o.COLI_ID}`, iconIndex: 13, parent: 'search-orders', parentTitle: '搜索结果', parentIconIndex: 'search', _raw: { ...o, VKey: o.COLI_SN, VName: o.COLI_ID, VParent: 'search-orders', IsTrue: 0, ApplyDate: '', OrderSourceType: htOrderParams.sourcetype, parent: 'search-orders' }, })), + } + addMailboxNestedDirs([addToTree]); + setMailboxActiveNode(addToTree); + } setLoading(false) - // setMailboxActiveNode({ - // key: 1130915, - // parent: -1, - // iconIndex: 13, - // title: 'QYCAH250101022', - // parentTitle: '1月', - // parentIconIndex: 1, - // VKey: 1130915, - // VName: 'QYCAH250101022', - // VParent: -1, - // ImageIndex: 13, - // COLI_SN: 1130915, - // OrderSourceType: 227001, - // IsTrue: 0, - // ApplyDate: '2025-01-01T00:06:00', - // StartDate: '2024-12-16', - // IsSuccess: 0, - // OPI_SN: 586, - // }) setOpen(false) } return ( @@ -60,7 +59,7 @@ const MailOrderSearchModal = ({ ...props }) => { { size='small' form={form} name='searchmailorder_form_in_modal' - initialValues={{ year: dayjs() }} + initialValues={{ year: dayjs(), important: '-1' }} clearOnDestroy onFinish={(values) => onSubmitSearchMailOrder(values)} className='[&_.ant-form-item]:m-2'> @@ -83,11 +82,12 @@ const MailOrderSearchModal = ({ ...props }) => { )}> - + { 按出发日期 - {/* */} - +
+ +
+ + + 查找订单 + + + 商务订单 +
) diff --git a/src/views/orders/components/MailboxDirIcon.jsx b/src/views/orders/components/MailboxDirIcon.jsx index 05b2428..227169f 100644 --- a/src/views/orders/components/MailboxDirIcon.jsx +++ b/src/views/orders/components/MailboxDirIcon.jsx @@ -1,7 +1,8 @@ -import { StarTwoTone, CalendarTwoTone, FolderOutlined, DeleteOutlined, ClockCircleOutlined, FormOutlined, DatabaseOutlined, BellTwoTone } from '@ant-design/icons' +import { StarTwoTone, CalendarTwoTone, FolderOutlined, DeleteOutlined, ClockCircleOutlined, FormOutlined, DatabaseOutlined, BellTwoTone, SearchOutlined } from '@ant-design/icons' import { InboxIcon, MailUnreadIcon, SendPlaneFillIcon } from '@/components/Icons' const EmailDirTypeIcons = { + 'search': { component: SearchOutlined, color: '', className: 'text-blue-600' }, 'star': { component: StarTwoTone, color: '', className: '' }, 'calendar': { component: CalendarTwoTone, color: '', className: '' }, 'reminder': { component: BellTwoTone, color: '', className: '' },