| | |
| | | <a-drawer |
| | | v-model:open="drawerOpen" |
| | | :placement="placement" |
| | | width="1200" |
| | | width="68%" |
| | | :body-style="{ paddingBottom: '80px' }" |
| | | :footer-style="{ textAlign: 'right' }" |
| | | @after-open-change="afterOpenChange" |
| | | @close="drawerClose" |
| | | > |
| | | <template #title> |
| | | <div class="ctb"> |
| | | <div> |
| | | <pageHeadLeft |
| | | :checked="true" |
| | | :selectAllRow="[{ docCode }]" |
| | | @nextNum="drawerClose" |
| | | ></pageHeadLeft> |
| | | <div class="ct-top"> |
| | | <div class="title" style="margin-bottom: 20px"> |
| | | <div class="left"> |
| | | <span style="margin-right: 20px; font-size: 24px; font-weight: 700"> |
| | | <a-tooltip placement="bottom"> |
| | | <template #title> |
| | | <span>{{ tableRowData.subject }}</span> |
| | | </template> |
| | | {{ truncateString(tableRowData.subject, 23) }} |
| | | </a-tooltip> |
| | | </span> |
| | | <span style="margin-right: 10px; font-size: 16px"> |
| | | <PushpinOutlined /> |
| | | </span> |
| | | </div> |
| | | <div class="right"> |
| | | <div class="tate">{{ formatToDateDay(tableRowData.receiveTime) }}</div> |
| | | <div> |
| | | <a-dropdown-button> |
| | | <span> |
| | | <a-tooltip placement="bottom"> |
| | | <template #title> |
| | | <span>回复</span> |
| | | </template> |
| | | <LeftOutlined @click="replyEmail(tableRowData)" /> |
| | | </a-tooltip> |
| | | </span> |
| | | <a-divider type="vertical" /> |
| | | <span> |
| | | <a-tooltip placement="bottom"> |
| | | <template #title> |
| | | <span>快速回复</span> |
| | | </template> |
| | | <DoubleLeftOutlined /> |
| | | </a-tooltip> |
| | | </span> |
| | | <template #overlay> |
| | | <a-menu> |
| | | <a-menu-item key="1"> |
| | | <UserOutlined /> |
| | | 1st menu item |
| | | </a-menu-item> |
| | | <a-menu-item key="2"> |
| | | <UserOutlined /> |
| | | 2nd menu item |
| | | </a-menu-item> |
| | | <a-menu-item key="3"> |
| | | <UserOutlined /> |
| | | 3rd item |
| | | </a-menu-item> |
| | | </a-menu> |
| | | </template> |
| | | </a-dropdown-button> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div></div> |
| | | </div> |
| | | </template> |
| | | <template #extra> |
| | | <div style="font-size: 16px"> |
| | |
| | | </a-button> |
| | | </div> |
| | | </template> |
| | | <div class="ct-top" :class="isOpen ? 'isOpenTop' : 'onOpenTop'"> |
| | | <div class="title"> |
| | | <div class="left"> |
| | | <span style="margin-right: 20px; font-size: 24px; font-weight: 700"> |
| | | <a-tooltip placement="bottom"> |
| | | <template #title> |
| | | <span>{{ tableRowData.subject }}</span> |
| | | </template> |
| | | <div :style="{ maxWidth: isOpen ? '300px' : '600px' }" class="text-ellipsis">{{ |
| | | tableRowData.subject |
| | | }}</div> |
| | | </a-tooltip> |
| | | </span> |
| | | <span style="margin-right: 10px; font-size: 16px"> |
| | | <PushpinOutlined /> |
| | | </span> |
| | | </div> |
| | | <div class="right"> |
| | | <div class="tate">{{ formatToDateDay(tableRowData.receiveTime || tableRowData.updateTime) }}</div> |
| | | <div> |
| | | <a-dropdown-button> |
| | | <div v-if="!isDrafts"> |
| | | <span> |
| | | <a-tooltip placement="bottom"> |
| | | <template #title> |
| | | <span>回复</span> |
| | | </template> |
| | | <LeftOutlined @click="replyEmail(tableRowData, 'reply')" /> |
| | | </a-tooltip> |
| | | </span> |
| | | <a-divider type="vertical" /> |
| | | <span> |
| | | <a-tooltip placement="bottom"> |
| | | <template #title> |
| | | <span>快速回复</span> |
| | | </template> |
| | | <DoubleLeftOutlined /> |
| | | </a-tooltip> |
| | | </span> |
| | | </div> |
| | | <div v-else> |
| | | <span @click="replyEmail(tableRowData, 'edit')">再次编辑</span> |
| | | </div> |
| | | |
| | | <template #overlay> |
| | | <a-menu> |
| | | <a-menu-item key="1"> |
| | | <UserOutlined /> |
| | | 1st menu item |
| | | </a-menu-item> |
| | | <a-menu-item key="2"> |
| | | <UserOutlined /> |
| | | 2nd menu item |
| | | </a-menu-item> |
| | | <a-menu-item key="3"> |
| | | <UserOutlined /> |
| | | 3rd item |
| | | </a-menu-item> |
| | | </a-menu> |
| | | </template> |
| | | </a-dropdown-button> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div> |
| | | <div class="flex-between"> |
| | | <div class="ct-left p-2" :class="isOpen ? 'isOpen' : 'onOpen'"> |
| | | <div class="user p-1"> |
| | | <div class="user p-1 f-z-14" style="margin-top: 40px"> |
| | | <div style="display: flex; align-items: center"> |
| | | <a-avatar size="small" style="margin-right: 8px" src="#" /> |
| | | {{ tableRowData.sender }} |
| | | <span>{{ `<${tableRowData.sender}>` }}</span> |
| | | <div> |
| | | <span>{{ tableRowData.senderName }} {{ `<${tableRowData.sender}>` }}</span> |
| | | </div> |
| | | <span style="margin: 0 10px">发送</span> |
| | | <a-popover placement="bottom"> |
| | | <template #content> |
| | |
| | | {{ `${tableRowData.receiver}` }}<span>{{ `<${tableRowData.receiver}>` }}</span> |
| | | </a-popover> |
| | | </div> |
| | | <div |
| | | type="info" |
| | | class="p-2" |
| | | style="margin-top: 10px; background-color: #e4f1ff; font-size: 14px" |
| | | > |
| | | <div type="info" class="p-2 f-z-14" style="margin-top: 10px; background-color: #e4f1ff"> |
| | | <span>{{ `<${tableRowData.sender}>` }}</span> |
| | | <span>暂未查询到该客户的当地时间</span> |
| | | <!-- <span>2024-06-08 22:22</span> --> |
| | | </div> |
| | | <div class="ct" v-if="tableRowData.content"> |
| | | <TinymcePw ref="TinymcePwRef" v-model="tableRowData.content" /> |
| | | <div class="ct"> |
| | | <div v-if="tableRowData.content"> |
| | | <TinymcePw ref="TinymcePwRef" v-model="tableRowData.content" /> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div v-show="isOpen" class="ct-right p-2">sssss</div> |
| | | <div v-show="isOpen" class="ct-right"> |
| | | <div style="position: relative"> |
| | | <div style="position: absolute; top: 0; left: 10px"> |
| | | <UserTips></UserTips> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div @click="fuToggleContent" class="toggle-btn" :class="isOpen ? 'onIconOpen' : 'iconOpen'"> |
| | | <LeftOutlined v-if="!isOpen" /> |
| | |
| | | RollbackOutlined, |
| | | } from '@ant-design/icons-vue'; |
| | | import pageHeadLeft from './pageHeadLeft.vue'; |
| | | import UserTips from '@/views/email/components/userTips/index.vue'; |
| | | import { TinymcePw } from '@/components/Tinymce'; |
| | | import { getMailInfoApi, setQuickReplyAPi } from '@/api/email/userList'; |
| | | import { useCollapseStore } from '@/store/modules/useCollapseStore'; |
| | |
| | | mailId?: string; |
| | | selectAllRow: Array<any>; |
| | | allList; |
| | | isDrafts?: boolean; |
| | | } |
| | | |
| | | const props = defineProps<Props>(); |
| | |
| | | watch( |
| | | () => props.modelValue, |
| | | (newValue) => { |
| | | drawerOpen.value = newValue; |
| | | nextTick(() => { |
| | | console.log(newValue, '---------4', TinymcePwRef.value); |
| | | drawerOpen.value = newValue; |
| | | setTimeout(() => { |
| | | console.log(newValue, '---------4', TinymcePwRef.value); |
| | | tableRowData.value.content = tableRowData.value.content; |
| | | }, 500); |
| | | }); |
| | | if (newValue) { |
| | | fnGetMailInfo(props.mailId); |
| | |
| | | function fnGetMailInfo(id) { |
| | | getMailInfoApi({ docCode: id }) |
| | | .then((res) => { |
| | | docCode.value = id; |
| | | tableRowData.value = res.data; |
| | | nextTick(() => { |
| | | docCode.value = id; |
| | | tableRowData.value = res.data; |
| | | }); |
| | | }) |
| | | .catch(() => {}); |
| | | } |
| | |
| | | drawerOpen.value = false; |
| | | }; |
| | | |
| | | function truncateString(str, maxLength) { |
| | | return str.length > maxLength ? str.substring(0, maxLength) + '...' : str; |
| | | } |
| | | |
| | | const fnGetUserList = (params) => { |
| | | // 调用接口逻辑 |
| | | }; |
| | | |
| | | // 计算属性 |
| | | const placement = computed(() => props.placement || 'right'); |
| | | |
| | | // 抽屉开关 |
| | | const fnSaveOpenChange = () => { |
| | | // 抽屉保存逻辑 |
| | | }; |
| | | |
| | | const content = ref(''); |
| | | const isOpen = ref(false); |
| | |
| | | } |
| | | import { useRouter } from 'vue-router'; |
| | | const router = useRouter(); |
| | | function replyEmail(row) { |
| | | router.push({ path: '/email/edit', query: { docCode: row.docCode, type: 'reply' } }); |
| | | function replyEmail(row, type) { |
| | | router.push({ path: '/email/edit', query: { docCode: row.docCode, type: type } }); |
| | | } |
| | | </script> |
| | | |
| | |
| | | |
| | | & .right { |
| | | display: flex; |
| | | flex: 1; |
| | | align-items: center; |
| | | justify-content: space-between; |
| | | width: 25%; |
| | | justify-content: flex-end; |
| | | |
| | | & .tate { |
| | | color: #999; |
| | | font-size: 14px; |
| | | margin-right: 10px; |
| | | } |
| | | } |
| | | } |
| | |
| | | |
| | | .flex-between { |
| | | display: flex; |
| | | padding-top: 4%; |
| | | } |
| | | |
| | | .ct-left { |
| | |
| | | } |
| | | |
| | | .ct-right { |
| | | border-left: 1px solid #f0f0f0; |
| | | flex: 1; |
| | | } |
| | | |
| | | .toggle-btn { |
| | |
| | | } |
| | | |
| | | .isOpen { |
| | | width: 69%; |
| | | width: calc(100% - 420px); |
| | | } |
| | | |
| | | .onOpenTop { |
| | | width: 98%; |
| | | } |
| | | |
| | | .isOpenTop { |
| | | width: calc(98% - 460px); |
| | | } |
| | | |
| | | .iconOpen { |
| | |
| | | } |
| | | |
| | | .onIconOpen { |
| | | right: 32%; |
| | | right: 425px; |
| | | } |
| | | |
| | | .ctb { |
| | | position: relative; |
| | | } |
| | | |
| | | .ctb .ct-top { |
| | | .ct-top { |
| | | position: absolute; |
| | | z-index: 99; |
| | | top: 41px; |
| | | left: -28px; |
| | | width: 116%; |
| | | top: 57px; |
| | | left: 10px; |
| | | padding: 10px; |
| | | background: #fff; |
| | | } |
| | | |
| | | .text-ellipsis { |
| | | overflow: hidden; |
| | | text-overflow: ellipsis; |
| | | white-space: nowrap; |
| | | } |
| | | |
| | | .f-z-14 { |
| | | font-size: 12px; |
| | | } |
| | | </style> |