From 671b1640aa606f489d03ce19dc20e66ce8f5a114 Mon Sep 17 00:00:00 2001 From: yml Date: Tue, 19 May 2026 19:27:43 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E6=9E=84=EF=BC=9A=E8=BF=81=E7=A7=BB3?= =?UTF-8?q?=E4=B8=AA=E5=88=97=E8=A1=A8=E8=A7=86=E5=9B=BE=E5=88=B0useAdminL?= =?UTF-8?q?istPage=20+=20=E6=8F=90=E5=8F=96useAdminAction=E7=BB=84?= =?UTF-8?q?=E5=90=88=E5=BC=8F=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/composables/useAdminAction.ts | 42 +++ .../admin/audit-logs/AdminAuditLogsView.vue | 138 ++++---- .../AdminMessageDeliveriesView.vue | 58 ++- .../src/views/admin/tasks/AdminTasksView.vue | 334 ++++++++++-------- 4 files changed, 306 insertions(+), 266 deletions(-) create mode 100644 apps/frontend/src/composables/useAdminAction.ts diff --git a/apps/frontend/src/composables/useAdminAction.ts b/apps/frontend/src/composables/useAdminAction.ts new file mode 100644 index 00000000..2bcb9321 --- /dev/null +++ b/apps/frontend/src/composables/useAdminAction.ts @@ -0,0 +1,42 @@ +import { ref } from 'vue' + +import { isFeedbackDismissed, showConfirm, showError, showSuccess } from '@/lib/feedback' + +export interface RunActionOptions { + id: number | string + action: () => Promise + successMessage: string + confirmText: string + onAfterAction?: () => Promise | void +} + +export function useAdminAction() { + const actionLoadingId = ref(null) + + async function runAction(options: RunActionOptions) { + try { + await showConfirm(options.confirmText, '确认操作', { + type: 'warning', + confirmButtonText: '继续执行', + cancelButtonText: '取消', + }) + } catch (error) { + if (isFeedbackDismissed(error)) return + throw error + } + + actionLoadingId.value = options.id + + try { + await options.action() + showSuccess(options.successMessage) + if (options.onAfterAction) await options.onAfterAction() + } catch (error) { + showError(error instanceof Error ? error.message : '操作失败') + } finally { + actionLoadingId.value = null + } + } + + return { actionLoadingId, runAction } +} diff --git a/apps/frontend/src/views/admin/audit-logs/AdminAuditLogsView.vue b/apps/frontend/src/views/admin/audit-logs/AdminAuditLogsView.vue index 53ddd73e..91d5eb06 100644 --- a/apps/frontend/src/views/admin/audit-logs/AdminAuditLogsView.vue +++ b/apps/frontend/src/views/admin/audit-logs/AdminAuditLogsView.vue @@ -1,62 +1,52 @@