diff --git a/frontend/src/features/admin/views/AdminDisputesView.vue b/frontend/src/features/admin/views/AdminDisputesView.vue
index 87d29aa..2bc4ab0 100644
--- a/frontend/src/features/admin/views/AdminDisputesView.vue
+++ b/frontend/src/features/admin/views/AdminDisputesView.vue
@@ -6,6 +6,7 @@ import { arbitrateDispute, fetchAdminDisputes, type Dispute } from '@/features/d
import { fetchAdminFileBlob } from '@/shared/api/files'
import { disputeStatusLabel } from '@/utils/statusLabels'
import { formatDateTime } from '@/utils/time'
+import AdminTablePagination from '../components/AdminTablePagination.vue'
const loading = ref(false)
const submitting = ref(false)
@@ -32,9 +33,13 @@ async function loadDisputes() {
}
}
-function handleSizeChange() {
+async function handlePageChange() {
+ await loadDisputes()
+}
+
+async function handleSizeChange() {
currentPage.value = 1
- loadDisputes()
+ await loadDisputes()
}
function openArbitration(row: Dispute) {
@@ -132,17 +137,14 @@ function readError(error: unknown, fallback: string) {
-
+
diff --git a/frontend/src/features/admin/views/AdminMgrUsersView.vue b/frontend/src/features/admin/views/AdminMgrUsersView.vue
index e96e0a1..d6b9db7 100644
--- a/frontend/src/features/admin/views/AdminMgrUsersView.vue
+++ b/frontend/src/features/admin/views/AdminMgrUsersView.vue
@@ -8,6 +8,7 @@ import { formatDateTime } from '@/utils/time'
import AdminUserDialog from '../components/AdminUserDialog.vue'
import AssignRolesDialog from '../components/AssignRolesDialog.vue'
+import AdminTablePagination from '../components/AdminTablePagination.vue'
const showDialog = ref(false)
const editingAdmin = ref
(null)
@@ -141,17 +142,14 @@ const statusLabel: Record = {
-
+
-import { computed, ref } from 'vue'
+import { computed, onMounted, ref } from 'vue'
import { fetchAdminOrders, type Order } from '@/features/orders'
-import { useAdminTable } from '@/features/admin/composables/useAdminTable'
import { handoffStatusLabel, orderStatusLabel, settlementStatusLabel } from '@/utils/statusLabels'
import { formatDateTime } from '@/utils/time'
+import AdminTablePagination from '../components/AdminTablePagination.vue'
const status = ref('')
+const loading = ref(false)
+const orders = ref([])
+const total = ref(0)
+const currentPage = ref(1)
+const currentPageSize = ref(20)
-const { loading, data: orders, load: loadOrders } = useAdminTable({
- fetchFn: fetchAdminOrders,
- initialData: [],
-})
+onMounted(loadOrders)
+
+async function loadOrders() {
+ loading.value = true
+ try {
+ const result = await fetchAdminOrders(currentPage.value, currentPageSize.value)
+ orders.value = result.items
+ total.value = result.total
+ } finally {
+ loading.value = false
+ }
+}
+
+async function handlePageChange() {
+ await loadOrders()
+}
const filteredOrders = computed(() => {
if (!status.value) return orders.value
@@ -74,5 +91,14 @@ const filteredOrders = computed(() => {
+
+
diff --git a/frontend/src/features/admin/views/AdminUsersView.vue b/frontend/src/features/admin/views/AdminUsersView.vue
index a48189f..f014826 100644
--- a/frontend/src/features/admin/views/AdminUsersView.vue
+++ b/frontend/src/features/admin/views/AdminUsersView.vue
@@ -6,6 +6,7 @@ import { fetchAdminUsers, freezeAdminUser, unfreezeAdminUser, type AdminUserItem
import { useAdminPaginatedTable } from '@/features/admin/composables/useAdminPaginatedTable'
import { userStatusLabel } from '@/utils/statusLabels'
import { formatDateTime } from '@/utils/time'
+import AdminTablePagination from '../components/AdminTablePagination.vue'
const submitting = ref(false)
const activeUser = ref(null)
@@ -88,17 +89,14 @@ function readError(error: unknown, fallback: string) {
-
+
diff --git a/frontend/src/features/admin/views/AdminWalletLedgerView.vue b/frontend/src/features/admin/views/AdminWalletLedgerView.vue
index acec643..bdbd35e 100644
--- a/frontend/src/features/admin/views/AdminWalletLedgerView.vue
+++ b/frontend/src/features/admin/views/AdminWalletLedgerView.vue
@@ -5,6 +5,7 @@ import { computed, onMounted, reactive, ref } from 'vue'
import { fetchAdminWalletLedger, type AdminWalletLedger } from '@/features/admin/api/adminWallet'
import { balanceTypeLabel, ledgerDirectionLabel } from '@/utils/statusLabels'
import { formatDateTime } from '@/utils/time'
+import AdminTablePagination from '../components/AdminTablePagination.vue'
const loading = ref(false)
const ledger = ref
([])
@@ -50,9 +51,13 @@ function resetFilters() {
void loadLedger()
}
-function handleSizeChange() {
+async function handlePageChange() {
+ await loadLedger()
+}
+
+async function handleSizeChange() {
currentPage.value = 1
- loadLedger()
+ await loadLedger()
}
function money(value: number) {
@@ -149,16 +154,13 @@ function directionLabel(direction: string) {
-
+
diff --git a/frontend/src/features/orders/api/orders.ts b/frontend/src/features/orders/api/orders.ts
index 3837fed..1b69e98 100644
--- a/frontend/src/features/orders/api/orders.ts
+++ b/frontend/src/features/orders/api/orders.ts
@@ -157,9 +157,11 @@ export async function fetchOrders() {
return data.data.items
}
-export async function fetchAdminOrders() {
- const { data } = await apiClient.get>('/admin/orders')
- return data.data.items
+export async function fetchAdminOrders(page = 1, pageSize = 20) {
+ const { data } = await apiClient.get>('/admin/orders', {
+ params: { page, page_size: pageSize },
+ })
+ return data.data
}
export async function fetchOrder(id: string | number) {