feat: allow admin and user delete mail, sendbox, send access(only admin) (#329)

This commit is contained in:
Dream Hunter
2024-07-04 13:25:14 +08:00
committed by GitHub
parent 9448b3c754
commit 21fed3fb00
44 changed files with 344 additions and 278 deletions

View File

@@ -268,7 +268,7 @@ onMounted(async () => {
<span>
<p>{{ t("addressCredentialTip") }}</p>
</span>
<n-card>
<n-card :bordered="false" embedded>
<b>{{ curEmailCredential }}</b>
</n-card>
<template #action>
@@ -296,7 +296,7 @@ onMounted(async () => {
</template>
</n-pagination>
</div>
<n-data-table :columns="columns" :data="data" :bordered="false" />
<n-data-table :columns="columns" :data="data" :bordered="false" embedded />
</div>
</template>

View File

@@ -68,7 +68,7 @@ onMounted(async () => {
<template>
<div class="center">
<n-card style="max-width: 600px;">
<n-card :bordered="false" embedded style="max-width: 600px;">
<n-form-item-row :label="t('address_block_list')">
<n-select v-model:value="addressBlockList" filterable multiple tag
:placeholder="t('address_block_list_placeholder')" />

View File

@@ -71,11 +71,11 @@ onMounted(async () => {
<div class="center">
<n-modal v-model:show="showReultModal" preset="dialog" :title="t('addressCredential')">
<p>{{ t('addressCredential') }}</p>
<n-card>
<n-card :bordered="false" embedded>
<b>{{ result }}</b>
</n-card>
</n-modal>
<n-card style="max-width: 600px;">
<n-card :bordered="false" embedded style="max-width: 600px;">
<n-form-item-row v-if="openSettings.prefix" :label="t('enablePrefix')">
<n-checkbox v-model:checked="enablePrefix" />
</n-form-item-row>

View File

@@ -48,6 +48,10 @@ const fetchMailData = async (limit, offset) => {
);
}
const deleteMail = async (curMailId) => {
await api.fetch(`/admin/mails/${curMailId}`, { method: 'DELETE' });
};
onMounted(async () => {
if (!adminAuth.value) {
showAdminAuth.value = true;
@@ -66,6 +70,7 @@ onMounted(async () => {
</n-button>
</n-input-group>
<div style="margin-top: 10px;"></div>
<MailBox :key="mailBoxKey" :enableUserDeleteEmail="false" :fetchMailData="fetchMailData" />
<MailBox :key="mailBoxKey" :enableUserDeleteEmail="true" :fetchMailData="fetchMailData"
:deleteMail="deleteMail" />
</div>
</template>

View File

@@ -15,6 +15,10 @@ const fetchMailUnknowData = async (limit, offset) => {
);
}
const deleteMail = async (curMailId) => {
await api.fetch(`/api/mails/${curMailId}`, { method: 'DELETE' });
};
onMounted(async () => {
if (!adminAuth.value) {
showAdminAuth.value = true;
@@ -25,6 +29,6 @@ onMounted(async () => {
<template>
<div v-if="adminAuth" style="margin-top: 10px;">
<MailBox :enableUserDeleteEmail="false" :fetchMailData="fetchMailUnknowData" />
<MailBox :enableUserDeleteEmail="true" :fetchMailData="fetchMailUnknowData" :deleteMail="deleteMail" />
</div>
</template>

View File

@@ -91,8 +91,8 @@ onMounted(async () => {
<template>
<div class="center">
<n-card>
<n-alert :show-icon="false">
<n-card :bordered="false" embedded>
<n-alert :show-icon="false" :bordered="false">
<span>{{ t('cronTip') }}</span>
</n-alert>
<n-form :model="cleanupModel">

View File

@@ -26,6 +26,10 @@ const fetchData = async (limit, offset) => {
+ (adminSendBoxTabAddress.value ? `&address=${adminSendBoxTabAddress.value}` : '')
);
}
const deleteSenboxMail = async (curMailId) => {
await api.fetch(`/admin/sendbox/${curMailId}`, { method: 'DELETE' });
};
</script>
<template>
@@ -36,7 +40,8 @@ const fetchData = async (limit, offset) => {
{{ t('query') }}
</n-button>
</n-input-group>
<SendBox style="margin-top: 10px;" :fetchMailData="fetchData" :showEMailFrom="true" />
<SendBox style="margin-top: 10px;" :enableUserDeleteEmail="true" :deleteMail="deleteSenboxMail"
:fetchMailData="fetchData" :showEMailFrom="true" />
</div>
</template>

View File

@@ -17,6 +17,8 @@ const { t } = useI18n({
enable: 'Enable',
disable: 'Disable',
modify: 'Modify',
delete: 'Delete',
deleteTip: 'Are you sure to delete this?',
created_at: 'Created At',
action: 'Action',
itemCount: 'itemCount',
@@ -32,6 +34,8 @@ const { t } = useI18n({
enable: '启用',
disable: '禁用',
modify: '修改',
delete: '删除',
deleteTip: '确定删除吗?',
created_at: '创建时间',
action: '操作',
itemCount: '总数',
@@ -134,7 +138,25 @@ const columns = [
}
},
{ default: () => t('modify') }
)
),
h(NPopconfirm,
{
onPositiveClick: async () => {
await api.fetch(`/admin/address_sender/${row.id}`, { method: 'DELETE' });
await fetchData();
}
},
{
trigger: () => h(NButton,
{
tertiary: true,
type: "error",
},
{ default: () => t('delete') }
),
default: () => t('deleteTip')
}
),
])
}
}
@@ -183,7 +205,7 @@ onMounted(async () => {
</template>
</n-pagination>
</div>
<n-data-table :columns="columns" :data="data" :bordered="false" />
<n-data-table :columns="columns" :data="data" :bordered="false" embedded />
</div>
</template>

View File

@@ -58,7 +58,7 @@ onMounted(async () => {
</script>
<template>
<n-card>
<n-card :bordered="false" embedded>
<n-row>
<n-col :span="6">
<n-statistic :label="t('userCount')" :value="statistics.userCount">

View File

@@ -112,8 +112,8 @@ onMounted(async () => {
<template>
<div class="center">
<n-card style="max-width: 800px; overflow: auto;">
<n-card>
<n-card :bordered="false" embedded style="max-width: 800px; overflow: auto;">
<n-card :bordered="false" embedded>
<n-form-item-row :label="t('enableTelegramAllowList')">
<n-input-group>
<n-checkbox v-model:checked="settings.enableAllowList" style="width: 20%;">

View File

@@ -276,7 +276,7 @@ onMounted(async () => {
</template>
</n-pagination>
</div>
<n-data-table :columns="columns" :data="data" :bordered="false" />
<n-data-table :columns="columns" :data="data" :bordered="false" embedded />
</div>
</template>

View File

@@ -82,7 +82,7 @@ onMounted(async () => {
<template>
<div class="center">
<n-card style="max-width: 600px;">
<n-card :bordered="false" embedded style="max-width: 600px;">
<n-form :model="userSettings">
<n-form-item-row :label="t('enableUserRegister')">
<n-checkbox v-model:checked="userSettings.enable" />

View File

@@ -62,7 +62,7 @@ onMounted(async () => {
<template>
<div class="center">
<n-card style="max-width: 800px; overflow: auto;">
<n-card :bordered="false" embedded style="max-width: 800px; overflow: auto;">
<n-form-item-row :label="t('webhookAllowList')">
<n-select v-model:value="webhookSettings.allowList" filterable multiple tag
:placeholder="t('webhookAllowList')" />