引入 husky,并全局重新格式化

This commit is contained in:
2025-06-07 11:49:57 +08:00
parent 05fce179c9
commit c7527177b0
89 changed files with 2140 additions and 1899 deletions

View File

@@ -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
}

View File

@@ -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>
)
}