修复提取IP表格字段和页面展示 & 前端设置白名单添加数量限制 & 修复长效套餐购买数量和提取数量默认值和递增减

This commit is contained in:
Eamon-meng
2025-12-01 19:21:29 +08:00
parent 3a5f4220ad
commit 591177e7a1
5 changed files with 130 additions and 79 deletions

View File

@@ -155,34 +155,52 @@ export default function ChannelsPage(props: ChannelsPageProps) {
}}
columns={[
{
header: '代理地址', cell: ({row}) => `${row.original.proxy_host}:${row.original.proxy_port}`,
header: '代理地址', cell: ({row}) => {
const channel = row.original
const ip = channel.proxy?.ip
const port = channel.port
return `${ip}:${port}`
},
},
{
header: '认证方式', cell: ({row}) => {
header: '认证方式',
cell: ({row}) => {
const channel = row.original
const hasWhitelist = channel.whitelists && channel.whitelists.trim() !== ''
const hasAuth = channel.username && channel.password
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 className="flex flex-col gap-1 min-w-0">
{hasWhitelist ? (
<div className="flex flex-col">
<span ></span>
<div className="flex flex-wrap gap-1 max-w-[200px]">
{channel.whitelists.split(',').map((ip, index) => (
<span
key={index}
className="inline-block px-2 py-0.5 bg-gray-100 rounded text-xs text-gray-700 break-all"
>
{ip.trim()}
</span>
))}
</div>
</div>
) : hasAuth ? (
<div className="flex flex-col">
<span></span>
<div className="px-2 py-1 bg-gray-100 rounded text-sm text-gray-700 font-mono break-all max-w-[120px]">
{channel.username}:{channel.password}
</div>
</div>
) : (
<span className="text-sm text-gray-400"></span>
)}
</div>
)
},
},
{
header: '过期时间', cell: ({row}) => format(row.original.expiration, 'yyyy-MM-dd HH:mm:ss'),
header: '过期时间', cell: ({row}) => format(row.original.expired_at, 'yyyy-MM-dd HH:mm:ss'),
},
{
header: '操作', cell: ({row}) => <span>-</span>,

View File

@@ -33,6 +33,8 @@ type SchemaType = z.infer<typeof schema>
export type WhitelistPageProps = {}
const MAX_WHITELIST_COUNT = 5
export default function WhitelistPage(props: WhitelistPageProps) {
const [wait, setWait] = useState(false)
@@ -53,6 +55,8 @@ export default function WhitelistPage(props: WhitelistPageProps) {
setWait(true)
try {
const resp = await listWhitelist({page, size})
console.log(resp, '白名单resp')
if (!resp.success) {
throw new Error(resp.message)
}
@@ -227,9 +231,10 @@ export default function WhitelistPage(props: WhitelistPageProps) {
{/* 全局操作 */}
<section>
<Button onClick={() => openDialog('add')} disabled={wait}>
<Button onClick={() => openDialog('add')} disabled={wait || data.total >= MAX_WHITELIST_COUNT}>
<Plus/>
{data.total >= MAX_WHITELIST_COUNT && '(已达上限)'}
</Button>
{/* <Button
theme="fail"
@@ -254,7 +259,7 @@ export default function WhitelistPage(props: WhitelistPageProps) {
}}
columns={[
{
header: `IP 地址`, accessorKey: 'host',
header: `IP 地址`, accessorKey: 'ip',
},
{
header: `备注`, accessorKey: 'remark',
@@ -264,7 +269,7 @@ export default function WhitelistPage(props: WhitelistPageProps) {
},
{
id: 'actions', header: `操作`, cell: ({row}) => (
<div className="flex justify-end gap-2">
<div className="flex gap-2">
<Button
className="h-9 w-9"
theme="outline"