| | |
| | | placeholder="请选择收件人或者输入收件人邮箱" |
| | | v-model:value="modelRef.recipients" |
| | | :options="state.recipientsList" |
| | | :field-names="{ label: 'email', value: 'userName' }" |
| | | :field-names="{ label: 'email', value: 'email' }" |
| | | :maxTagCount="4" |
| | | @search="fetchUser" |
| | | > |
| | |
| | | placeholder="请选择抄送人或者输入抄送人邮箱" |
| | | v-model:value="modelRef.ccRecipients" |
| | | :options="state.recipientsList" |
| | | :field-names="{ label: 'email', value: 'userName' }" |
| | | :field-names="{ label: 'email', value: 'email' }" |
| | | :maxTagCount="4" |
| | | > |
| | | <template #tagRender="{ label, closable, onClose }"> |
| | |
| | | placeholder="请选择抄送人或者输入抄送人邮箱" |
| | | v-model:value="modelRef.bccRecipients" |
| | | :options="state.recipientsList" |
| | | :field-names="{ label: 'email', value: 'userName' }" |
| | | :field-names="{ label: 'email', value: 'email' }" |
| | | :maxTagCount="4" |
| | | > |
| | | <template #tagRender="{ label, closable, onClose }"> |
| | |
| | | :wrapper-col="{ span: 24 }" |
| | | :label-col="{ span: 2 }" |
| | | > |
| | | <Tinymce @change="fnChangeContent"></Tinymce> |
| | | <Tinymce v-model="modelRef.content" @change="fnChangeContent"></Tinymce> |
| | | </a-form-item> |
| | | </a-form> |
| | | </a-spin> |
| | |
| | | :selectIds="selectIds" |
| | | :idName="idName" |
| | | :title="selectUserTitle" |
| | | @sudUserList="fnGetRecipientsList" |
| | | @updateData="fnSelectUser" |
| | | /> |
| | | <a-modal |
| | |
| | | name: 'Edit'; |
| | | import { useDesign } from '@/hooks/web/useDesign'; |
| | | |
| | | import { ref, reactive, computed } from 'vue'; |
| | | import { ref, reactive, computed, onMounted } from 'vue'; |
| | | import { useMessage } from '@/hooks/web/useMessage'; |
| | | import { Tinymce } from '@/components/Tinymce'; |
| | | import { PlusCircleOutlined } from '@ant-design/icons-vue'; |
| | |
| | | }, |
| | | ], |
| | | }); |
| | | const TYPE = computed(() => { |
| | | return router.currentRoute.value.query.type || 'send'; |
| | | }); |
| | | onMounted(() => { |
| | | fnGetRecipientsList(); |
| | | if (TYPE.value === 'reply') { |
| | | fuGetReplyEmailData(); |
| | | } |
| | | if (TYPE.value === 'edit') { |
| | | fuGetEditEmailData(); |
| | | } |
| | | }); |
| | | const useForm = Form.useForm; |
| | | const { validate, validateInfos } = useForm(modelRef, rulesRef); |
| | | |
| | |
| | | sendingMailApi, |
| | | saveMailDraftsApi, |
| | | emailListAPi, |
| | | getMailInfoApi, |
| | | } from '@/api/email/userList'; |
| | | // 定义状态管理对象 |
| | | const state = reactive({ |
| | |
| | | }; |
| | | |
| | | function fnChangeContent(e) { |
| | | modelRef.content = e.content; |
| | | modelRef.attachmentList = e.attachmentList; |
| | | if (!isValidEvent(e)) { |
| | | console.error('Invalid event:', e); |
| | | return; |
| | | } |
| | | |
| | | console.log('Event:', e, '----------------'); |
| | | |
| | | modelRef.content = e.content; |
| | | modelRef.attachmentList = mergeArrayWithPrefix(fnBuildAttachmentList(e.fileUNID)); |
| | | |
| | | console.log('Updated modelRef:', modelRef); |
| | | } |
| | | |
| | | function isValidEvent(e) { |
| | | return e && typeof e === 'object' && typeof e.content === 'string'; |
| | | } |
| | | |
| | | function fnBuildAttachmentList(data) { |
| | | if (!Array.isArray(data)) { |
| | | console.error('Invalid argument: data must be an array'); |
| | | return []; |
| | | } |
| | | |
| | | return data.reduce((acc, item) => { |
| | | const uuid = item?.response?.uuid; |
| | | if (uuid) { |
| | | acc.push(uuid); |
| | | } else { |
| | | console.warn('Invalid item:', item); |
| | | } |
| | | return acc; |
| | | }, []); |
| | | } |
| | | |
| | | function mergeArrayWithPrefix(arr) { |
| | | if (!arr || arr.length === 0) return ''; |
| | | const [prefix] = arr[0].split(';'); |
| | | const suffixes = arr.map(item => item.split(';')[1]).filter(Boolean).join(';'); |
| | | |
| | | return `${prefix};${suffixes}`; |
| | | } |
| | | |
| | | function fnBuildingCommitData() { |
| | | return { |
| | |
| | | bcc: modelRef.bccRecipients, |
| | | subject: modelRef.subject, |
| | | content: modelRef.content, |
| | | attachmentList: '', |
| | | attachmentList: modelRef.attachmentList, |
| | | docCode: docCode.value, |
| | | }; |
| | | } |
| | |
| | | loading.value = false; |
| | | if (res.code === 0) { |
| | | createMessage.success(res.msg); |
| | | router.push('/email/list'); |
| | | router.push('/email/index'); |
| | | } |
| | | }) |
| | | .catch((error) => { |
| | |
| | | }, 2000); |
| | | }; |
| | | |
| | | function fnGetRecipientsList(data) { |
| | | state.recipientsList = data; |
| | | function fnGetRecipientsList() { |
| | | emailListAPi({ key: '' }).then((body) => { |
| | | state.recipientsList = body.data; |
| | | }); |
| | | } |
| | | |
| | | // 邮箱校验正则表达式 |
| | | const validateEmail = (email) => /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email); |
| | | import { debounce } from 'lodash-es'; |
| | | import DragBar from '@/layouts/default/sider/DragBar.vue'; |
| | | let lastFetchId = 0; |
| | | |
| | | const fetchUser = debounce((value) => { |
| | |
| | | state.fetching = false; |
| | | }); |
| | | }, 300); |
| | | // 编辑 |
| | | function fuGetEditEmailData() { |
| | | getMailInfoApi({ docCode: router.currentRoute.value.query.docCode }) |
| | | .then((res) => { |
| | | modelRef.sender = res.data.sender; |
| | | modelRef.recipients = res.data.receiver; |
| | | modelRef.subject = res.data.subject; |
| | | modelRef.content = res.data.content; |
| | | }) |
| | | .catch(() => {}); |
| | | } |
| | | |
| | | // 回复 |
| | | function fuGetReplyEmailData() { |
| | | getMailInfoApi({ docCode: router.currentRoute.value.query.docCode }) |
| | | .then((res) => { |
| | | console.log(ref.data, '---3022'); |
| | | modelRef.sender = res.data.receiver[0]; |
| | | modelRef.recipients = [res.data.sender]; |
| | | modelRef.subject = 'Re:' + res.data.subject; |
| | | modelRef.content = setContent(res.data); |
| | | // tableRowData.value = res.data; |
| | | }) |
| | | .catch(() => {}); |
| | | console.log('----------------4'); |
| | | } |
| | | const setContent = (row) => { |
| | | const text = `<div style=\"font-size: 12px; font-family: Arial Narrow,serif; padding: 2px 0 2px 0;\">------------------ Original ------------------</div>\n<div style=\"font-size: 12px; background: #efefef; padding: 8px;\">\n<div><strong>From: </strong> ${row.sender} <<a style=\"color: #1e7bf9; text-decoration: none;\" href=\"mailto:${row.sender}\" target=\"_blank\" rel=\"noopener noreferrer\">${row.sender}</a>></div>\n<div><strong>Send time: </strong> ${row.createTime}</div>\n<div><strong>To: </strong> ${row.userName} <<a style=\"color: #1e7bf9; text-decoration: none;\" href=\"mailto:${row.receiver}\" target=\"_blank\" rel=\"noopener noreferrer\">${row.receiver}</a>></div>\n<div><strong>Subject: </strong> ${row.subject}</div>\n</div>`; |
| | | return text + row.content; |
| | | }; |
| | | </script> |
| | | <style lang="less" scoped> |
| | | @prefix-cls: ~'@{namespace}-email'; |