完善账单功能,移除状态字段并优化支付资源创建逻辑
This commit is contained in:
@@ -4,7 +4,7 @@ import {PageRecord} from '@/lib/api'
|
||||
import {Bill} from '@/lib/models'
|
||||
import {useStatus} from '@/lib/states'
|
||||
import {listBills} from '@/actions/bill'
|
||||
import {Search, Eraser, CreditCard, AlertCircle, CheckCircle} from 'lucide-react'
|
||||
import {Search, Eraser, CreditCard, AlertCircle, CheckCircle, Clock, ClockIcon} from 'lucide-react'
|
||||
import {Select, SelectContent, SelectItem, SelectTrigger, SelectValue} from '@/components/ui/select'
|
||||
import {Button} from '@/components/ui/button'
|
||||
import DataTable from '@/components/data-table'
|
||||
@@ -20,7 +20,6 @@ import Link from 'next/link'
|
||||
|
||||
const filterSchema = zod.object({
|
||||
type: zod.enum(['all', '0', '1', '2']).default('all'),
|
||||
status: zod.enum(['all', '0', '1', '2']).default('all'),
|
||||
create_after: zod.date().optional(),
|
||||
create_before: zod.date().optional(),
|
||||
})
|
||||
@@ -47,14 +46,12 @@ export default function BillsPage(props: BillsPageProps) {
|
||||
setStatus('load')
|
||||
try {
|
||||
const typeValue = form.getValues('type')
|
||||
const statusValue = form.getValues('status')
|
||||
const type = typeValue === 'all' ? undefined : parseInt(typeValue)
|
||||
const statusParam = statusValue === 'all' ? undefined : parseInt(statusValue)
|
||||
const create_after = form.getValues('create_after')
|
||||
const create_before = form.getValues('create_before')
|
||||
|
||||
const res = await listBills({
|
||||
page, size, type, status: statusParam, create_after, create_before,
|
||||
page, size, type, create_after, create_before,
|
||||
})
|
||||
|
||||
if (res.success) {
|
||||
@@ -82,7 +79,6 @@ export default function BillsPage(props: BillsPageProps) {
|
||||
resolver: zodResolver(filterSchema),
|
||||
defaultValues: {
|
||||
type: 'all',
|
||||
status: 'all',
|
||||
},
|
||||
})
|
||||
|
||||
@@ -91,34 +87,6 @@ export default function BillsPage(props: BillsPageProps) {
|
||||
await refresh(1, data.size)
|
||||
}
|
||||
|
||||
// 获取类型显示内容
|
||||
const getBillTypeText = (type: number) => {
|
||||
switch (type) {
|
||||
case 1:
|
||||
return '充值'
|
||||
case 2:
|
||||
return '消费'
|
||||
case 3:
|
||||
return '退款'
|
||||
default:
|
||||
return '未知'
|
||||
}
|
||||
}
|
||||
|
||||
// 获取状态显示内容
|
||||
const getBillStatusText = (status: number) => {
|
||||
switch (status) {
|
||||
case 1:
|
||||
return '待支付'
|
||||
case 2:
|
||||
return '已完成'
|
||||
case 3:
|
||||
return '已取消'
|
||||
default:
|
||||
return '未知'
|
||||
}
|
||||
}
|
||||
|
||||
// ======================
|
||||
// render
|
||||
// ======================
|
||||
@@ -136,7 +104,7 @@ export default function BillsPage(props: BillsPageProps) {
|
||||
<FormField name={`type`} label={<span className={`text-sm`}>账单类型</span>}>
|
||||
{({id, field}) => (
|
||||
<Select value={field.value} onValueChange={field.onChange}>
|
||||
<SelectTrigger className={`w-24`}>
|
||||
<SelectTrigger className={`w-24 h-9`}>
|
||||
<SelectValue placeholder={`选择类型`}/>
|
||||
</SelectTrigger>
|
||||
<SelectContent>
|
||||
@@ -148,21 +116,6 @@ export default function BillsPage(props: BillsPageProps) {
|
||||
</Select>
|
||||
)}
|
||||
</FormField>
|
||||
<FormField name={`status`} label={<span className={`text-sm`}>状态</span>}>
|
||||
{({id, field}) => (
|
||||
<Select value={field.value} onValueChange={field.onChange}>
|
||||
<SelectTrigger className={`w-24`}>
|
||||
<SelectValue placeholder={`选择状态`}/>
|
||||
</SelectTrigger>
|
||||
<SelectContent>
|
||||
<SelectItem value={`all`}>全部</SelectItem>
|
||||
<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`}>
|
||||
@@ -243,47 +196,41 @@ export default function BillsPage(props: BillsPageProps) {
|
||||
),
|
||||
},
|
||||
{
|
||||
accessorKey: 'info', header: `账单详情`, cell: ({row}) => (
|
||||
<div className={`flex flex-col gap-1`}>
|
||||
<span>{row.original.info}</span>
|
||||
|
||||
{row.original.type === 1 && row.original.trade.status === 1 && (
|
||||
<Link
|
||||
href={`/admin/resources?resource_no=${row.original.resource.resource_no}`}
|
||||
className={`text-sm text-blue-500 hover:underline`}>
|
||||
<span>
|
||||
{row.original.resource.pss.type === 1 && `包时`}
|
||||
{row.original.resource.pss.type === 2 && `包量`}
|
||||
</span>
|
||||
<span>-</span>
|
||||
<span>
|
||||
{row.original.resource.pss.live / 60 + `分钟`}
|
||||
</span>
|
||||
</Link>
|
||||
)}
|
||||
</div>
|
||||
),
|
||||
accessorKey: 'info', header: `账单详情`,
|
||||
},
|
||||
{
|
||||
accessorKey: 'status', header: `状态`, cell: ({row}) => (
|
||||
<>
|
||||
{row.original.status === 0 && (
|
||||
<div className={`flex gap-1 items-center text-orange-500`}>
|
||||
<AlertCircle size={16}/>
|
||||
<span>未完成</span>
|
||||
</div>
|
||||
)}
|
||||
{row.original.status === 1 && (
|
||||
<div className={`flex gap-1 items-center text-green-500`}>
|
||||
<CheckCircle size={16}/>
|
||||
<span>已完成</span>
|
||||
</div>
|
||||
)}
|
||||
{row.original.status === 2 && (
|
||||
<div className={`flex gap-1 items-center text-gray-500`}>
|
||||
<AlertCircle size={16}/>
|
||||
<span>已作废</span>
|
||||
</div>
|
||||
{row.original.trade && (
|
||||
row.original.trade.status === 0 ? (
|
||||
<div className={`flex flex-col gap-1`}>
|
||||
<div className={`flex gap-1 items-center text-warn`}>
|
||||
<ClockIcon size={16}/>
|
||||
<span>订单待支付</span>
|
||||
<Link href={`/admin/bills`} className={`text-sm underline text-blue-500`}>
|
||||
{row.original.trade.inner_no}
|
||||
</Link>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
) : row.original.trade.status === 1 ? (
|
||||
<div className={`flex gap-1 items-center text-done`}>
|
||||
<CheckCircle size={16}/>
|
||||
<span>已完成</span>
|
||||
</div>
|
||||
) : row.original.trade.status === 2 ? (
|
||||
<div className={`flex gap-1 items-center text-weak`}>
|
||||
<AlertCircle size={16}/>
|
||||
<span>已取消</span>
|
||||
</div>
|
||||
) : row.original.trade.status === 3 ? (
|
||||
<div className={`flex gap-1 items-center text-fail`}>
|
||||
<AlertCircle size={16}/>
|
||||
<span>已退款</span>
|
||||
</div>
|
||||
) : (
|
||||
<span>-</span>
|
||||
)
|
||||
)}
|
||||
</>
|
||||
),
|
||||
|
||||
@@ -293,7 +293,7 @@ export default function ResourcesPage(props: ResourcesPageProps) {
|
||||
{
|
||||
accessorKey: 'daily_last', header: '最近使用时间', cell: ({row}) => {
|
||||
return (
|
||||
isEqual(row.original.pss.daily_last, parse('0001-01-01 00:05:43', 'yyyy-MM-dd HH:mm:ss', new Date()))
|
||||
format(row.original.pss.daily_last, "yyyy-MM-dd") === "0001-01-01"
|
||||
? '-'
|
||||
: format(row.original.pss.daily_last, 'yyyy-MM-dd HH:mm')
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user