From c0e870ce54618da6bd995ccab7d5af05297b147a Mon Sep 17 00:00:00 2001 From: Dream Hunter Date: Sun, 28 Apr 2024 15:58:26 +0800 Subject: [PATCH] feat: all mail use MailBox Component (#173) --- .../src/{views => components}/MailBox.vue | 287 ++++++++++-------- frontend/src/views/Index.vue | 19 +- frontend/src/views/admin/Account.vue | 4 +- frontend/src/views/admin/Mails.vue | 87 ++---- frontend/src/views/admin/MailsUnknow.vue | 98 +----- worker/src/admin_api.js | 16 + worker/src/router.js | 2 +- 7 files changed, 221 insertions(+), 292 deletions(-) rename frontend/src/{views => components}/MailBox.vue (59%) diff --git a/frontend/src/views/MailBox.vue b/frontend/src/components/MailBox.vue similarity index 59% rename from frontend/src/views/MailBox.vue rename to frontend/src/components/MailBox.vue index 3914ea6c..d5e5f81a 100644 --- a/frontend/src/views/MailBox.vue +++ b/frontend/src/components/MailBox.vue @@ -3,7 +3,6 @@ import { watch, onMounted, ref } from "vue"; import { useMessage } from 'naive-ui' import { useI18n } from 'vue-i18n' import { useGlobalState } from '../store' -import { api } from '../api' import { CloudDownloadRound } from '@vicons/material' import { useIsMobile } from '../utils/composables' import { processItem, getDownloadEmlUrl } from '../utils/email-parser' @@ -11,7 +10,30 @@ import { processItem, getDownloadEmlUrl } from '../utils/email-parser' const message = useMessage() const isMobile = useIsMobile() -const { settings, openSettings, themeSwitch } = useGlobalState() +const props = defineProps({ + enableUserDeleteEmail: { + type: Boolean, + default: false, + requried: false + }, + showEMailTo: { + type: Boolean, + default: true, + requried: false + }, + fetchMailData: { + type: Function, + default: () => { }, + requried: true + }, + deleteMail: { + type: Function, + default: () => { }, + requried: false + }, +}) + +const { themeSwitch } = useGlobalState() const autoRefresh = ref(false) const autoRefreshInterval = ref(30) const data = ref([]) @@ -29,6 +51,7 @@ const { t } = useI18n({ locale: 'zh', messages: { en: { + success: 'Success', autoRefresh: 'Auto Refresh', refreshAfter: 'Refresh After {msg} Seconds', refresh: 'Refresh', @@ -39,6 +62,7 @@ const { t } = useI18n({ deleteMailTip: 'Are you sure you want to delete this mail?' }, zh: { + success: '成功', autoRefresh: '自动刷新', refreshAfter: '{msg}秒后刷新', refresh: '刷新', @@ -80,10 +104,8 @@ watch([page, pageSize], async ([page, pageSize], [oldPage, oldPageSize]) => { const refresh = async () => { try { - const { results, count: totalCount } = await api.fetch( - `/api/mails` - + `?limit=${pageSize.value}` - + `&offset=${(page.value - 1) * pageSize.value}` + const { results, count: totalCount } = await props.fetchMailData( + pageSize.value, (page.value - 1) * pageSize.value ); data.value = await Promise.all(results.map(async (item) => { return await processItem(item); @@ -115,9 +137,7 @@ const mailItemClass = (row) => { const deleteMail = async () => { try { - await api.fetch(`/api/mails/${curMail.value.id}`, { - method: 'DELETE' - }); + await props.deleteMail(curMail.value.id); message.success(t("success")); curMail.value = null; await refresh(); @@ -133,48 +153,129 @@ onMounted(async () => {