修复admin卡密统计GORM累积条件问题、data-table传递server-pagination

This commit is contained in:
2026-05-10 05:44:16 +08:00
parent ba7b6015eb
commit f198ae268e
2 changed files with 19 additions and 20 deletions
+12 -15
View File
@@ -446,27 +446,24 @@ func handleGetCards(c *gin.Context) {
var total int64 var total int64
query.Count(&total) query.Count(&total)
baseQuery := database.DB.Model(&model.Card{}). countBase := func(status string) int64 {
var count int64
q := database.DB.Model(&model.Card{}).
Joins("JOIN card_types ON cards.card_type_id = card_types.id"). Joins("JOIN card_types ON cards.card_type_id = card_types.id").
Joins("JOIN applications ON card_types.application_id = applications.id") Joins("JOIN applications ON card_types.application_id = applications.id")
if len(authorizedAppIDs) > 0 { if len(authorizedAppIDs) > 0 {
baseQuery = baseQuery.Where("applications.user_id = ? OR (cards.application_id IN ? AND cards.creator_id = ?)", userID, authorizedAppIDs, userID) q = q.Where("applications.user_id = ? OR (cards.application_id IN ? AND cards.creator_id = ?)", userID, authorizedAppIDs, userID)
} else { } else {
baseQuery = baseQuery.Where("applications.user_id = ?", userID) q = q.Where("applications.user_id = ?", userID)
}
q.Where("cards.status = ?", status).Count(&count)
return count
} }
var unusedCount int64 unusedCount := countBase("unused")
baseQuery.Where("cards.status = ?", "unused").Count(&unusedCount) usedCount := countBase("used")
bannedCount := countBase("banned")
var usedCount int64 expiredCount := countBase("expired")
baseQuery.Where("cards.status = ?", "used").Count(&usedCount)
var bannedCount int64
baseQuery.Where("cards.status = ?", "banned").Count(&bannedCount)
var expiredCount int64
baseQuery.Where("cards.status = ?", "expired").Count(&expiredCount)
page, _ := strconv.Atoi(c.DefaultQuery("page", "1")) page, _ := strconv.Atoi(c.DefaultQuery("page", "1"))
pageSize, _ := strconv.Atoi(c.DefaultQuery("page_size", "20")) pageSize, _ := strconv.Atoi(c.DefaultQuery("page_size", "20"))
@@ -19,6 +19,7 @@ const props = defineProps<Omit<DataTableProps<Card>, 'columns'> & {
onToggleStatus: (row: Card) => void onToggleStatus: (row: Card) => void
onDelete: (row: Card) => void onDelete: (row: Card) => void
searchFilter?: string searchFilter?: string
serverPagination?: DataTableProps<Card>['serverPagination']
}>() }>()
const emit = defineEmits<{ const emit = defineEmits<{
@@ -45,6 +46,7 @@ const table = generateVueTable<Card>({
get data() { return props.data }, get data() { return props.data },
get loading() { return props.loading }, get loading() { return props.loading },
columns: columns.value, columns: columns.value,
serverPagination: props.serverPagination,
}) })
const columnLabels: Record<string, string> = { const columnLabels: Record<string, string> = {
@@ -67,7 +69,7 @@ defineExpose({
</script> </script>
<template> <template>
<DataTable :columns="columns" :data :loading :table @refresh="emit('refresh')"> <DataTable :columns="columns" :data :loading :table :server-pagination @refresh="emit('refresh')">
<template #toolbar> <template #toolbar>
<div class="space-y-3"> <div class="space-y-3">
<div class="flex items-center justify-end"> <div class="flex items-center justify-end">