我的套餐新增状态筛选字段

This commit is contained in:
Eamon-meng
2026-03-13 18:12:22 +08:00
parent a76e61beb0
commit d2d6c1709c
4 changed files with 30 additions and 2 deletions

View File

@@ -24,6 +24,7 @@ export async function listResourceShort(props: {
size: number size: number
resource_no?: string resource_no?: string
type?: number type?: number
status?: number
create_after?: Date create_after?: Date
create_before?: Date create_before?: Date
expire_after?: Date expire_after?: Date
@@ -37,6 +38,7 @@ export async function listResourceLong(props: {
size: number size: number
resource_no?: string resource_no?: string
type?: number type?: number
status?: number
create_after?: Date create_after?: Date
create_before?: Date create_before?: Date
expire_after?: Date expire_after?: Date

View File

@@ -12,6 +12,7 @@ import {Eraser, Search} from 'lucide-react'
export interface ResourceFilterValues { export interface ResourceFilterValues {
resource_no: string resource_no: string
type: 'expire' | 'quota' | 'all' type: 'expire' | 'quota' | 'all'
status: '0' | '1' | '2'
create_after?: Date create_after?: Date
create_before?: Date create_before?: Date
expire_after?: Date expire_after?: Date
@@ -48,6 +49,20 @@ export default function ResourceFilter({form, onSubmit, onReset}: ResourceFilter
</Select> </Select>
)} )}
</FormField> </FormField>
<FormField name="status" label={<span className="text-sm"></span>}>
{({field}) => (
<Select value={field.value} onValueChange={field.onChange}>
<SelectTrigger className="w-24 h-9">
<SelectValue placeholder="选择状态"/>
</SelectTrigger>
<SelectContent>
<SelectItem value="0"></SelectItem>
<SelectItem value="1"></SelectItem>
<SelectItem value="2"></SelectItem>
</SelectContent>
</Select>
)}
</FormField>
<div className="flex flex-col gap-2"> <div className="flex flex-col gap-2">
<Label className="text-sm"></Label> <Label className="text-sm"></Label>
<div className="flex items-center"> <div className="flex items-center">

View File

@@ -17,6 +17,7 @@ import {
ExpireBadge, ExpireBadge,
formatDateTime, formatDateTime,
getTodayUsage, getTodayUsage,
isValidResourcestatus,
isValidResourceType, isValidResourceType,
ResourceTypeBadge, ResourceTypeBadge,
} from './utils' } from './utils'
@@ -24,6 +25,7 @@ import {
const filterSchema = zod.object({ const filterSchema = zod.object({
resource_no: zod.string().optional().default(''), resource_no: zod.string().optional().default(''),
type: zod.enum(['expire', 'quota', 'all']).default('all'), type: zod.enum(['expire', 'quota', 'all']).default('all'),
status: zod.enum(['0', '1', '2']).default('1'),
create_after: zod.date().optional(), create_after: zod.date().optional(),
create_before: zod.date().optional(), create_before: zod.date().optional(),
expire_after: zod.date().optional(), expire_after: zod.date().optional(),
@@ -47,12 +49,13 @@ export default function ResourceList({resourceType}: ResourceListProps) {
// 从 URL 参数初始化筛选条件 // 从 URL 参数初始化筛选条件
const params = useSearchParams() const params = useSearchParams()
const paramType = params.get('type') const paramType = params.get('type')
const paramStatus = params.get('status')
const form = useForm<ResourceFilterValues>({ const form = useForm<ResourceFilterValues>({
resolver: zodResolver(filterSchema), resolver: zodResolver(filterSchema),
defaultValues: { defaultValues: {
resource_no: params.get('resource_no') || '', resource_no: params.get('resource_no') || '',
type: isValidResourceType(paramType) ? paramType : 'all', type: isValidResourceType(paramType) ? paramType : 'all',
status: isValidResourcestatus(paramStatus) ? paramStatus : '1',
create_after: params.get('create_after') ? new Date(params.get('create_after')!) : undefined, create_after: params.get('create_after') ? new Date(params.get('create_after')!) : undefined,
create_before: params.get('create_before') ? new Date(params.get('create_before')!) : undefined, create_before: params.get('create_before') ? new Date(params.get('create_before')!) : undefined,
expire_after: params.get('expire_after') ? new Date(params.get('expire_after')!) : undefined, expire_after: params.get('expire_after') ? new Date(params.get('expire_after')!) : undefined,
@@ -71,6 +74,7 @@ export default function ResourceList({resourceType}: ResourceListProps) {
expire: 1, expire: 1,
quota: 2, quota: 2,
}[getValues('type')] }[getValues('type')]
const status = getValues('status')
const create_after = getValues('create_after') const create_after = getValues('create_after')
const create_before = getValues('create_before') const create_before = getValues('create_before')
const expire_after = getValues('expire_after') const expire_after = getValues('expire_after')
@@ -82,6 +86,7 @@ export default function ResourceList({resourceType}: ResourceListProps) {
page, page,
size, size,
type, type,
status: Number(status),
create_after, create_after,
create_before, create_before,
expire_after, expire_after,
@@ -116,6 +121,7 @@ export default function ResourceList({resourceType}: ResourceListProps) {
const handleReset = () => { const handleReset = () => {
form.reset({ form.reset({
type: 'all', type: 'all',
status: '1',
resource_no: '', resource_no: '',
create_after: undefined, create_after: undefined,
create_before: undefined, create_before: undefined,

View File

@@ -7,6 +7,11 @@ export function isValidResourceType(type: string | null): type is 'expire' | 'qu
return type === 'expire' || type === 'quota' || type === 'all' return type === 'expire' || type === 'quota' || type === 'all'
} }
// 状态
export function isValidResourcestatus(status: string | null): status is '0' | '1' | '2' {
return status === '0' || status === '1' || status === '2'
}
// 资源类型徽章 // 资源类型徽章
export function ResourceTypeBadge({type}: {type: number}) { export function ResourceTypeBadge({type}: {type: number}) {
if (type === 1) { if (type === 1) {