引入 husky,并全局重新格式化
This commit is contained in:
@@ -1,17 +1,16 @@
|
||||
|
||||
import { ReactNode } from 'react'
|
||||
import { Metadata } from 'next'
|
||||
import {ReactNode} from 'react'
|
||||
import {Metadata} from 'next'
|
||||
|
||||
export async function generateMetadata(): Promise<Metadata> {
|
||||
return {
|
||||
title: 'IP管理 - 蓝狐代理',
|
||||
}
|
||||
return {
|
||||
title: 'IP管理 - 蓝狐代理',
|
||||
}
|
||||
}
|
||||
|
||||
export type ChannelsLayoutProps = {
|
||||
children: ReactNode
|
||||
children: ReactNode
|
||||
}
|
||||
|
||||
export default async function ChannelsLayout(props: ChannelsLayoutProps) {
|
||||
return props.children
|
||||
}
|
||||
return props.children
|
||||
}
|
||||
|
||||
@@ -20,7 +20,6 @@ import {Select, SelectContent, SelectItem, SelectTrigger, SelectValue} from '@/c
|
||||
export type ChannelsPageProps = {}
|
||||
|
||||
export default function ChannelsPage(props: ChannelsPageProps) {
|
||||
|
||||
// ======================
|
||||
// data
|
||||
// ======================
|
||||
@@ -88,7 +87,7 @@ export default function ChannelsPage(props: ChannelsPageProps) {
|
||||
expire_before: undefined,
|
||||
},
|
||||
})
|
||||
const filterHandler = filterForm.handleSubmit(async value => {
|
||||
const filterHandler = filterForm.handleSubmit(async (value) => {
|
||||
await refresh(data.page, data.size)
|
||||
})
|
||||
|
||||
@@ -98,46 +97,48 @@ export default function ChannelsPage(props: ChannelsPageProps) {
|
||||
|
||||
return (
|
||||
<Page>
|
||||
<section className={`flex justify-between`}>
|
||||
<section className="flex justify-between">
|
||||
<div></div>
|
||||
<Form form={filterForm} handler={filterHandler} className={`flex-none flex gap-4 items-end`}>
|
||||
<FormField<FilterSchema, 'auth_type'> name={`auth_type`} label={<span className={`text-sm`}>认证方式</span>}>
|
||||
<Form form={filterForm} handler={filterHandler} className="flex-none flex gap-4 items-end">
|
||||
<FormField<FilterSchema, 'auth_type'> name="auth_type" label={<span className="text-sm">认证方式</span>}>
|
||||
{({field}) => (
|
||||
<Select value={field.value} onValueChange={field.onChange}>
|
||||
<SelectTrigger className={`h-9 w-36`}>
|
||||
<SelectValue placeholder={`选择认证方式`}/>
|
||||
<SelectTrigger className="h-9 w-36">
|
||||
<SelectValue placeholder="选择认证方式"/>
|
||||
</SelectTrigger>
|
||||
<SelectContent>
|
||||
<SelectItem value={'0'}>全部</SelectItem>
|
||||
<SelectItem value={'1'}>IP 白名单</SelectItem>
|
||||
<SelectItem value={'2'}>账号密码</SelectItem>
|
||||
<SelectItem value="0">全部</SelectItem>
|
||||
<SelectItem value="1">IP 白名单</SelectItem>
|
||||
<SelectItem value="2">账号密码</SelectItem>
|
||||
</SelectContent>
|
||||
</Select>
|
||||
)}
|
||||
</FormField>
|
||||
<fieldset className={`flex flex-col gap-2 items-start`}>
|
||||
<fieldset className="flex flex-col gap-2 items-start">
|
||||
<div>
|
||||
<legend className={`block text-sm`}>过期时间</legend>
|
||||
<legend className="block text-sm">过期时间</legend>
|
||||
</div>
|
||||
<div className={`flex gap-1 items-center`}>
|
||||
<FormField<FilterSchema, 'expire_after'> name={`expire_after`}>
|
||||
<div className="flex gap-1 items-center">
|
||||
<FormField<FilterSchema, 'expire_after'> name="expire_after">
|
||||
{({field}) => (
|
||||
<DatePicker placeholder={`选择开始时间`} {...field} format={`yyyy-MM-dd`}/>
|
||||
<DatePicker placeholder="选择开始时间" {...field} format="yyyy-MM-dd"/>
|
||||
)}
|
||||
</FormField>
|
||||
<span>-</span>
|
||||
<FormField<FilterSchema, 'expire_before'> name={`expire_before`}>
|
||||
<FormField<FilterSchema, 'expire_before'> name="expire_before">
|
||||
{({field}) => (
|
||||
<DatePicker placeholder={`选择结束时间`} {...field} format={`yyyy-MM-dd`}/>
|
||||
<DatePicker placeholder="选择结束时间" {...field} format="yyyy-MM-dd"/>
|
||||
)}
|
||||
</FormField>
|
||||
</div>
|
||||
</fieldset>
|
||||
<Button className={`h-9`}>
|
||||
<SearchIcon/>筛选
|
||||
<Button className="h-9">
|
||||
<SearchIcon/>
|
||||
筛选
|
||||
</Button>
|
||||
<Button theme={`outline`} className={`h-9`} onClick={() => filterForm.reset()}>
|
||||
<EraserIcon/>重置
|
||||
<Button theme="outline" className="h-9" onClick={() => filterForm.reset()}>
|
||||
<EraserIcon/>
|
||||
重置
|
||||
</Button>
|
||||
</Form>
|
||||
</section>
|
||||
@@ -149,8 +150,8 @@ export default function ChannelsPage(props: ChannelsPageProps) {
|
||||
page: data.page,
|
||||
size: data.size,
|
||||
total: data.total,
|
||||
onPageChange: (page) => refresh(page, data.size),
|
||||
onSizeChange: (size) => refresh(1, size),
|
||||
onPageChange: page => refresh(page, data.size),
|
||||
onSizeChange: size => refresh(1, size),
|
||||
}}
|
||||
columns={[
|
||||
{
|
||||
@@ -158,16 +159,26 @@ export default function ChannelsPage(props: ChannelsPageProps) {
|
||||
},
|
||||
{
|
||||
header: '认证方式', cell: ({row}) => {
|
||||
return <div className={`flex flex-col gap-1`}>
|
||||
{row.original.auth_ip && (<>
|
||||
<span className={`text-weak`}>IP 白名单</span>
|
||||
<span>{row.original.whitelists.replaceAll(",", ", ")}</span>
|
||||
</>)}
|
||||
{row.original.auth_pass && (<>
|
||||
<span className={`text-weak`}>账号密码</span>
|
||||
<span>{row.original.username}:{row.original.password}</span>
|
||||
</>)}
|
||||
</div>
|
||||
return (
|
||||
<div className="flex flex-col gap-1">
|
||||
{row.original.auth_ip && (
|
||||
<>
|
||||
<span className="text-weak">IP 白名单</span>
|
||||
<span>{row.original.whitelists.replaceAll(',', ', ')}</span>
|
||||
</>
|
||||
)}
|
||||
{row.original.auth_pass && (
|
||||
<>
|
||||
<span className="text-weak">账号密码</span>
|
||||
<span>
|
||||
{row.original.username}
|
||||
:
|
||||
{row.original.password}
|
||||
</span>
|
||||
</>
|
||||
)}
|
||||
</div>
|
||||
)
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -181,4 +192,3 @@ export default function ChannelsPage(props: ChannelsPageProps) {
|
||||
</Page>
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user