From 1507229238f08836673c8b4a7138b1d21634b155 Mon Sep 17 00:00:00 2001 From: Seefs <40468931+seefs001@users.noreply.github.com> Date: Sat, 13 Jun 2026 00:03:28 +0800 Subject: [PATCH] fix: add deleted user status filter (#5464) --- model/user.go | 6 +++++- .../src/features/users/components/users-columns.tsx | 9 +++++++-- .../src/features/users/components/users-table.tsx | 1 + web/default/src/features/users/constants.ts | 6 ++++-- web/default/src/routes/_authenticated/users/index.tsx | 2 +- 5 files changed, 18 insertions(+), 6 deletions(-) diff --git a/model/user.go b/model/user.go index e40ac3d2..a50fab0d 100644 --- a/model/user.go +++ b/model/user.go @@ -264,7 +264,11 @@ func SearchUsers(keyword string, group string, role *int, status *int, startIdx query = query.Where("role = ?", *role) } if status != nil { - query = query.Where("status = ?", *status) + if *status == -1 { + query = query.Where("deleted_at IS NOT NULL") + } else { + query = query.Where("deleted_at IS NULL").Where("status = ?", *status) + } } // 获取总数 diff --git a/web/default/src/features/users/components/users-columns.tsx b/web/default/src/features/users/components/users-columns.tsx index 1cc3953d..0fd70605 100644 --- a/web/default/src/features/users/components/users-columns.tsx +++ b/web/default/src/features/users/components/users-columns.tsx @@ -31,7 +31,12 @@ import { GroupBadge } from '@/components/group-badge' import { LongText } from '@/components/long-text' import { StatusBadge } from '@/components/status-badge' import { TableId } from '@/components/table-id' -import { USER_STATUSES, USER_ROLES, isUserDeleted } from '../constants' +import { + USER_STATUS, + USER_STATUSES, + USER_ROLES, + isUserDeleted, +} from '../constants' import { type User } from '../types' import { DataTableRowActions } from './data-table-row-actions' @@ -125,7 +130,7 @@ export function useUsersColumns(): ColumnDef[] { const requestCount = user.request_count const statusConfig = isUserDeleted(user) - ? USER_STATUSES.DELETED + ? USER_STATUSES[USER_STATUS.DELETED] : USER_STATUSES[user.status as keyof typeof USER_STATUSES] if (!statusConfig) { diff --git a/web/default/src/features/users/components/users-table.tsx b/web/default/src/features/users/components/users-table.tsx index 95efdb80..1dd9b716 100644 --- a/web/default/src/features/users/components/users-table.tsx +++ b/web/default/src/features/users/components/users-table.tsx @@ -156,6 +156,7 @@ export function UsersTable() { onGlobalFilterChange, onColumnFiltersChange, manualPagination: true, + manualFiltering: true, totalCount: data?.total || 0, ensurePageInRange, }) diff --git a/web/default/src/features/users/constants.ts b/web/default/src/features/users/constants.ts index 9be63683..71c2c340 100644 --- a/web/default/src/features/users/constants.ts +++ b/web/default/src/features/users/constants.ts @@ -34,6 +34,7 @@ export const isUserDeleted = (user: UserType): boolean => { export const USER_STATUS = { ENABLED: 1, DISABLED: 2, + DELETED: -1, } as const export const USER_STATUSES = { @@ -47,16 +48,17 @@ export const USER_STATUSES = { variant: 'neutral' as const, value: USER_STATUS.DISABLED, }, - DELETED: { + [USER_STATUS.DELETED]: { labelKey: 'Deleted', variant: 'danger' as const, - value: -1, + value: USER_STATUS.DELETED, }, } as const export const getUserStatusOptions = (t: (key: string) => string) => [ { label: t('Enabled'), value: String(USER_STATUS.ENABLED) }, { label: t('Disabled'), value: String(USER_STATUS.DISABLED) }, + { label: t('Deleted'), value: String(USER_STATUS.DELETED) }, ] // ============================================================================ diff --git a/web/default/src/routes/_authenticated/users/index.tsx b/web/default/src/routes/_authenticated/users/index.tsx index 34d49e35..5d2e4781 100644 --- a/web/default/src/routes/_authenticated/users/index.tsx +++ b/web/default/src/routes/_authenticated/users/index.tsx @@ -27,7 +27,7 @@ const usersSearchSchema = z.object({ pageSize: z.number().optional().catch(undefined), filter: z.string().optional().catch(''), status: z - .array(z.enum(['1', '2'])) + .array(z.enum(['-1', '1', '2'])) .optional() .catch([]), role: z