Compare commits
2 Commits
a76e61beb0
...
b2c36196b4
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b2c36196b4 | ||
|
|
d2d6c1709c |
@@ -24,6 +24,7 @@ export async function listResourceShort(props: {
|
||||
size: number
|
||||
resource_no?: string
|
||||
type?: number
|
||||
status?: number
|
||||
create_after?: Date
|
||||
create_before?: Date
|
||||
expire_after?: Date
|
||||
@@ -37,6 +38,7 @@ export async function listResourceLong(props: {
|
||||
size: number
|
||||
resource_no?: string
|
||||
type?: number
|
||||
status?: number
|
||||
create_after?: Date
|
||||
create_before?: Date
|
||||
expire_after?: Date
|
||||
|
||||
@@ -98,6 +98,16 @@ export default function IdentifyPage(props: IdentifyPageProps) {
|
||||
const profile = useProfileStore(store => store.profile)
|
||||
const refreshProfile = useProfileStore(store => store.refreshProfile)
|
||||
|
||||
// 重置认证流程
|
||||
const handleDialogOpenChange = async (open: boolean) => {
|
||||
setOpenDialog(open)
|
||||
if (!open) {
|
||||
setStep('form')
|
||||
setTarget('')
|
||||
await refreshProfile()
|
||||
}
|
||||
}
|
||||
|
||||
// ======================
|
||||
// render
|
||||
// ======================
|
||||
@@ -125,7 +135,7 @@ export default function IdentifyPage(props: IdentifyPageProps) {
|
||||
</div>
|
||||
<Suspense>
|
||||
<IfNotIdentofy>
|
||||
<Dialog open={openDialog} onOpenChange={setOpenDialog}>
|
||||
<Dialog open={openDialog} onOpenChange={handleDialogOpenChange}>
|
||||
<DialogTrigger asChild>
|
||||
<Button className="w-full">去认证</Button>
|
||||
</DialogTrigger>
|
||||
@@ -165,10 +175,7 @@ export default function IdentifyPage(props: IdentifyPageProps) {
|
||||
<div className="flex flex-col gap-4 items-center">
|
||||
<canvas ref={canvas} width={256} height={256}/>
|
||||
<p className="text-sm text-gray-600">请扫码完成认证</p>
|
||||
<Button onClick={async () => {
|
||||
await refreshProfile()
|
||||
setOpenDialog(false)
|
||||
}}>
|
||||
<Button onClick={() => handleDialogOpenChange(false)}>
|
||||
已完成认证
|
||||
</Button>
|
||||
</div>
|
||||
@@ -223,7 +230,7 @@ export default function IdentifyPage(props: IdentifyPageProps) {
|
||||
<p className="flex gap-2 items-center justify-between w-56 self-center">
|
||||
<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>充值、支付</span>
|
||||
<span>支付订单</span>
|
||||
</span>
|
||||
<Image alt="步骤配图" src={step3}/>
|
||||
</p>
|
||||
|
||||
@@ -12,6 +12,7 @@ import {Eraser, Search} from 'lucide-react'
|
||||
export interface ResourceFilterValues {
|
||||
resource_no: string
|
||||
type: 'expire' | 'quota' | 'all'
|
||||
status: '0' | '1' | '2'
|
||||
create_after?: Date
|
||||
create_before?: Date
|
||||
expire_after?: Date
|
||||
@@ -48,6 +49,20 @@ export default function ResourceFilter({form, onSubmit, onReset}: ResourceFilter
|
||||
</Select>
|
||||
)}
|
||||
</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">
|
||||
<Label className="text-sm">开通时间</Label>
|
||||
<div className="flex items-center">
|
||||
|
||||
@@ -17,6 +17,7 @@ import {
|
||||
ExpireBadge,
|
||||
formatDateTime,
|
||||
getTodayUsage,
|
||||
isValidResourcestatus,
|
||||
isValidResourceType,
|
||||
ResourceTypeBadge,
|
||||
} from './utils'
|
||||
@@ -24,6 +25,7 @@ import {
|
||||
const filterSchema = zod.object({
|
||||
resource_no: zod.string().optional().default(''),
|
||||
type: zod.enum(['expire', 'quota', 'all']).default('all'),
|
||||
status: zod.enum(['0', '1', '2']).default('1'),
|
||||
create_after: zod.date().optional(),
|
||||
create_before: zod.date().optional(),
|
||||
expire_after: zod.date().optional(),
|
||||
@@ -47,12 +49,13 @@ export default function ResourceList({resourceType}: ResourceListProps) {
|
||||
// 从 URL 参数初始化筛选条件
|
||||
const params = useSearchParams()
|
||||
const paramType = params.get('type')
|
||||
|
||||
const paramStatus = params.get('status')
|
||||
const form = useForm<ResourceFilterValues>({
|
||||
resolver: zodResolver(filterSchema),
|
||||
defaultValues: {
|
||||
resource_no: params.get('resource_no') || '',
|
||||
type: isValidResourceType(paramType) ? paramType : 'all',
|
||||
status: isValidResourcestatus(paramStatus) ? paramStatus : '1',
|
||||
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,
|
||||
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,
|
||||
quota: 2,
|
||||
}[getValues('type')]
|
||||
const status = getValues('status')
|
||||
const create_after = getValues('create_after')
|
||||
const create_before = getValues('create_before')
|
||||
const expire_after = getValues('expire_after')
|
||||
@@ -82,6 +86,7 @@ export default function ResourceList({resourceType}: ResourceListProps) {
|
||||
page,
|
||||
size,
|
||||
type,
|
||||
status: Number(status),
|
||||
create_after,
|
||||
create_before,
|
||||
expire_after,
|
||||
@@ -116,6 +121,7 @@ export default function ResourceList({resourceType}: ResourceListProps) {
|
||||
const handleReset = () => {
|
||||
form.reset({
|
||||
type: 'all',
|
||||
status: '1',
|
||||
resource_no: '',
|
||||
create_after: undefined,
|
||||
create_before: undefined,
|
||||
|
||||
@@ -7,6 +7,11 @@ export function isValidResourceType(type: string | null): type is 'expire' | 'qu
|
||||
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}) {
|
||||
if (type === 1) {
|
||||
|
||||
Reference in New Issue
Block a user