重构:迁移3个列表视图到useAdminListPage + 提取useAdminAction组合式函数

This commit is contained in:
yml
2026-05-19 19:27:43 +08:00
parent 110d4b9d2b
commit 671b1640aa
4 changed files with 306 additions and 266 deletions
@@ -1,17 +1,14 @@
<script setup lang="ts">
import { computed, onMounted, ref } from 'vue'
import { computed, ref } from 'vue'
import { useAdminListPage } from '@/composables/useAdminListPage'
import AdminPageHeader from '@/components/admin/AdminPageHeader.vue'
import AdminStatusTag from '@/components/admin/AdminStatusTag.vue'
import { fetchAdminMessageDeliveries } from '@/services/admin'
import type { AdminMessageDeliveryListItem, AdminPagination } from '@/types/admin'
import type { AdminMessageDeliveryListItem } from '@/types/admin'
import { formatAdminDateTime } from '@/utils/admin-time'
import { adminMessageDeliveryStatusOptions } from '@/utils/admin-options'
const loading = ref(true)
const errorMessage = ref('')
const items = ref<AdminMessageDeliveryListItem[]>([])
const provider = ref('agiso')
const platform = ref('xianyu')
const status = ref('')
@@ -21,26 +18,18 @@ const taskNo = ref('')
const dateFrom = ref('')
const dateTo = ref('')
const pagination = ref<AdminPagination>({
page: 1,
pageSize: 20,
total: 0,
})
const summary = computed(() => ({
successCount: items.value.filter((item) => item.status === 'success').length,
failedCount: items.value.filter((item) => item.status === 'failed').length,
pendingCount: items.value.filter((item) => item.status === 'pending').length,
}))
async function loadMessageDeliveries(page = pagination.value.page) {
loading.value = true
errorMessage.value = ''
try {
const response = await fetchAdminMessageDeliveries({
const {
loading,
errorMessage,
items,
pagination,
loadPage: loadMessageDeliveries,
} = useAdminListPage<AdminMessageDeliveryListItem>({
defaultErrorMessage: '读取消息发送记录失败',
fetchPage: (page, pageSize) =>
fetchAdminMessageDeliveries({
page,
pageSize: pagination.value.pageSize,
pageSize,
provider: provider.value.trim(),
platform: platform.value.trim(),
status: status.value.trim(),
@@ -49,15 +38,14 @@ async function loadMessageDeliveries(page = pagination.value.page) {
taskNo: taskNo.value.trim(),
dateFrom: dateFrom.value.trim(),
dateTo: dateTo.value.trim(),
})
items.value = response.data.items
pagination.value = response.data.pagination
} catch (error) {
errorMessage.value = error instanceof Error ? error.message : '读取消息发送记录失败'
} finally {
loading.value = false
}
}
}),
})
const summary = computed(() => ({
successCount: items.value.filter((item) => item.status === 'success').length,
failedCount: items.value.filter((item) => item.status === 'failed').length,
pendingCount: items.value.filter((item) => item.status === 'pending').length,
}))
function resetFilters() {
provider.value = 'agiso'
@@ -70,8 +58,6 @@ function resetFilters() {
dateTo.value = ''
void loadMessageDeliveries(1)
}
onMounted(loadMessageDeliveries)
</script>
<template>