2 Commits

Author SHA1 Message Date
Eamon-meng
b2c36196b4 修复实名认证阶段的问题 2026-03-13 18:26:23 +08:00
Eamon-meng
d2d6c1709c 我的套餐新增状态筛选字段 2026-03-13 18:12:22 +08:00
5 changed files with 43 additions and 8 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

@@ -98,6 +98,16 @@ export default function IdentifyPage(props: IdentifyPageProps) {
const profile = useProfileStore(store => store.profile) const profile = useProfileStore(store => store.profile)
const refreshProfile = useProfileStore(store => store.refreshProfile) const refreshProfile = useProfileStore(store => store.refreshProfile)
// 重置认证流程
const handleDialogOpenChange = async (open: boolean) => {
setOpenDialog(open)
if (!open) {
setStep('form')
setTarget('')
await refreshProfile()
}
}
// ====================== // ======================
// render // render
// ====================== // ======================
@@ -125,7 +135,7 @@ export default function IdentifyPage(props: IdentifyPageProps) {
</div> </div>
<Suspense> <Suspense>
<IfNotIdentofy> <IfNotIdentofy>
<Dialog open={openDialog} onOpenChange={setOpenDialog}> <Dialog open={openDialog} onOpenChange={handleDialogOpenChange}>
<DialogTrigger asChild> <DialogTrigger asChild>
<Button className="w-full"></Button> <Button className="w-full"></Button>
</DialogTrigger> </DialogTrigger>
@@ -165,10 +175,7 @@ export default function IdentifyPage(props: IdentifyPageProps) {
<div className="flex flex-col gap-4 items-center"> <div className="flex flex-col gap-4 items-center">
<canvas ref={canvas} width={256} height={256}/> <canvas ref={canvas} width={256} height={256}/>
<p className="text-sm text-gray-600"></p> <p className="text-sm text-gray-600"></p>
<Button onClick={async () => { <Button onClick={() => handleDialogOpenChange(false)}>
await refreshProfile()
setOpenDialog(false)
}}>
</Button> </Button>
</div> </div>
@@ -223,7 +230,7 @@ export default function IdentifyPage(props: IdentifyPageProps) {
<p className="flex gap-2 items-center justify-between w-56 self-center"> <p className="flex gap-2 items-center justify-between w-56 self-center">
<span className="flex gap-2"> <span className="flex gap-2">
<span className="bg-primary/25 text-primary w-8 h-8 rounded-full flex items-center justify-center">03</span> <span className="bg-primary/25 text-primary w-8 h-8 rounded-full flex items-center justify-center">03</span>
<span></span> <span></span>
</span> </span>
<Image alt="步骤配图" src={step3}/> <Image alt="步骤配图" src={step3}/>
</p> </p>

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
@@ -41,13 +42,27 @@ export default function ResourceFilter({form, onSubmit, onReset}: ResourceFilter
<SelectValue placeholder="选择套餐类型"/> <SelectValue placeholder="选择套餐类型"/>
</SelectTrigger> </SelectTrigger>
<SelectContent> <SelectContent>
<SelectItem value="all"></SelectItem> <SelectItem value="all" ></SelectItem>
<SelectItem value="expire"></SelectItem> <SelectItem value="expire"></SelectItem>
<SelectItem value="quota"></SelectItem> <SelectItem value="quota"></SelectItem>
</SelectContent> </SelectContent>
</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) {