更新资源列表页面

This commit is contained in:
2025-04-09 17:17:39 +08:00
parent ba07c79b04
commit 74c6c01b7d
4 changed files with 75 additions and 9 deletions

View File

@@ -1,6 +1,21 @@
'use server' 'use server'
import {callByUser} from '@/actions/base' import {callByUser} from '@/actions/base'
import {ResourcePss} from '@/lib/models'
import {PageRecord} from '@/lib/api'
async function listResourcePss(props: {
page: number
size: number
active?: boolean
type?: number
create_after?: number
create_before?: number
expire_after?: number
expire_before?: number
}){
return await callByUser<PageRecord<ResourcePss>>('/api/resource/list/pss', props)
}
async function createResourceByBalance(props: { async function createResourceByBalance(props: {
type: number type: number
@@ -21,6 +36,7 @@ async function createResourceByWechat() {
} }
export { export {
listResourcePss,
createResourceByBalance, createResourceByBalance,
createResourceByAlipay, createResourceByAlipay,
createResourceByWechat, createResourceByWechat,

View File

@@ -59,7 +59,7 @@ export default async function DashboardLayout(props: DashboardLayoutProps) {
<NavItem href={`/admin`} icon={`💰`} label={`我的账单`}/> <NavItem href={`/admin`} icon={`💰`} label={`我的账单`}/>
<NavTitle label={`套餐管理`}/> <NavTitle label={`套餐管理`}/>
<NavItem href={`/admin/purchase`} icon={`🛒`} label={`购买套餐`}/> <NavItem href={`/admin/purchase`} icon={`🛒`} label={`购买套餐`}/>
<NavItem href={`/admin`} icon={`📦`} label={`我的套餐`}/> <NavItem href={`/admin/resources`} icon={`📦`} label={`我的套餐`}/>
<NavTitle label={`IP 管理`}/> <NavTitle label={`IP 管理`}/>
<NavItem href={`/admin/extract`} icon={`📤`} label={`IP提取`}/> <NavItem href={`/admin/extract`} icon={`📤`} label={`IP提取`}/>
<NavItem href={`/admin`} icon={`📜`} label={`IP提取记录`}/> <NavItem href={`/admin`} icon={`📜`} label={`IP提取记录`}/>

View File

@@ -1,11 +1,51 @@
import {ReactNode} from 'react' 'use client'
import {ReactNode, useEffect, useState} from 'react'
import {PageRecord} from '@/lib/api'
import {ResourcePss} from '@/lib/models'
import {useStatus} from '@/lib/states'
import {listResourcePss} from '@/actions/resource'
export type ResourcesPageProps = { export type ResourcesPageProps = {}
}
export default async function ResourcesPage(props: ResourcesPageProps) { export default function ResourcesPage(props: ResourcesPageProps) {
// region 数据
const [status, setStatus] = useStatus()
const [data, setData] = useState<PageRecord<ResourcePss>>({
page: 1,
size: 10,
total: 0,
list: [],
})
const refresh = async (page: number, size: number) => {
setStatus('load')
try {
const res = await listResourcePss({page, size})
setStatus('done')
if (res.success) {
setData(res.data)
}
else {
throw new Error('Failed to load resource pss')
}
}
catch (e) {
setStatus('fail')
}
}
useEffect(() => {
refresh(1, 10).then()
}, [])
// endregion
// render
return ( return (
<main> <main className={`flex-auto bg-white rounded-tl-xl`}>
</main> </main>
) )

View File

@@ -1,4 +1,4 @@
type User = { export type User = {
id: number id: number
admin_id: number admin_id: number
phone: string phone: string
@@ -20,6 +20,16 @@ type User = {
updated_at: Date updated_at: Date
} }
export type { export type ResourcePss = {
User, id: number
type: number
live: number
expire: Date
quota: number
used: number
daily_limit: number
daily_used: number
daily_last: Date
created_at: Date
updated_at: Date
} }