From ac737baa4e7573611ff3eb7fc76ea608fb47ee48 Mon Sep 17 00:00:00 2001 From: Antoine Nguyen Date: Thu, 21 Aug 2025 16:20:00 +0200 Subject: [PATCH] Improved listing and detail pages --- frontend/src/api/amavis.js | 15 ++ .../components/quarantine/QuarantineList.vue | 251 ++++++++++++++++-- frontend/src/router/index.js | 8 + frontend/src/views/quarantine/MessageView.vue | 165 ++++++++++++ .../src/views/quarantine/QuarantineView.vue | 10 +- modoboa/lib/email_utils.py | 2 +- pyproject.toml | 5 +- 7 files changed, 434 insertions(+), 22 deletions(-) create mode 100644 frontend/src/views/quarantine/MessageView.vue diff --git a/frontend/src/api/amavis.js b/frontend/src/api/amavis.js index 7d6bb008b..327f903dc 100644 --- a/frontend/src/api/amavis.js +++ b/frontend/src/api/amavis.js @@ -4,4 +4,19 @@ export default { getQuarantineContent(params) { return repository.get('/amavis/quarantine/', { params }) }, + releaseSelection(data) { + return repository.post('/amavis/quarantine/release_selection/', data) + }, + deleteSelection(data) { + return repository.post('/amavis/quarantine/delete_selection/', data) + }, + markMessageSelection(data) { + return repository.post('/amavis/quarantine/mark_selection/', data) + }, + getMessageContent(mailid, rcpt) { + return repository.get(`/amavis/quarantine/${mailid}/?rcpt=${rcpt}`) + }, + getMessageHeaders(mailid) { + return repository.get(`/amavis/quarantine/${mailid}/headers/`) + }, } diff --git a/frontend/src/components/quarantine/QuarantineList.vue b/frontend/src/components/quarantine/QuarantineList.vue index 84aa30bc5..62bb08304 100644 --- a/frontend/src/components/quarantine/QuarantineList.vue +++ b/frontend/src/components/quarantine/QuarantineList.vue @@ -9,27 +9,98 @@ :items-length="totalMessages" :page="currentPage" :items-per-page="itemsPerPageR" - item-value="pk" + item-value="mailid" elevation="0" show-select + return-object + density="compact" :sort-by="sortByR" + :row-props="getRowProps" + :cell-props="getCellProps" @update:options="updatedOptions" + @click:row="openMessage" > + + + + @@ -37,13 +108,161 @@ + + diff --git a/frontend/src/router/index.js b/frontend/src/router/index.js index dbabfaa39..b1c9d08d4 100644 --- a/frontend/src/router/index.js +++ b/frontend/src/router/index.js @@ -441,6 +441,14 @@ const routes = [ requiresAuth: true, }, }, + { + path: ':mailid/:rcpt', + name: 'QuarantineMessageView', + component: () => import('@/views/quarantine/MessageView.vue'), + meta: { + requiresAuth: true, + }, + }, ], }, ], diff --git a/frontend/src/views/quarantine/MessageView.vue b/frontend/src/views/quarantine/MessageView.vue new file mode 100644 index 000000000..6e273586d --- /dev/null +++ b/frontend/src/views/quarantine/MessageView.vue @@ -0,0 +1,165 @@ + + + diff --git a/frontend/src/views/quarantine/QuarantineView.vue b/frontend/src/views/quarantine/QuarantineView.vue index 49e18c62e..b1a8990f8 100644 --- a/frontend/src/views/quarantine/QuarantineView.vue +++ b/frontend/src/views/quarantine/QuarantineView.vue @@ -1,9 +1,11 @@