修复套餐编码顺序问题
This commit is contained in:
@@ -171,7 +171,7 @@ function getTodayUsage(lastAt: Date | null | undefined, daily: number) {
|
|||||||
export default function ResourcesPage() {
|
export default function ResourcesPage() {
|
||||||
return (
|
return (
|
||||||
<Page>
|
<Page>
|
||||||
<Tabs defaultValue="short">
|
<Tabs defaultValue="short" className="overflow-hidden">
|
||||||
<TabsList className="bg-card">
|
<TabsList className="bg-card">
|
||||||
<TabsTrigger value="short" className="h-10 px-4 shadow-none">
|
<TabsTrigger value="short" className="h-10 px-4 shadow-none">
|
||||||
短效套餐
|
短效套餐
|
||||||
@@ -181,7 +181,10 @@ export default function ResourcesPage() {
|
|||||||
</TabsTrigger>
|
</TabsTrigger>
|
||||||
</TabsList>
|
</TabsList>
|
||||||
|
|
||||||
<TabsContent value="short" className="flex flex-col gap-4">
|
<TabsContent
|
||||||
|
value="short"
|
||||||
|
className="flex flex-col gap-4 overflow-hidden"
|
||||||
|
>
|
||||||
<ResourceList resourceType="short" />
|
<ResourceList resourceType="short" />
|
||||||
</TabsContent>
|
</TabsContent>
|
||||||
<TabsContent value="long" className="flex flex-col gap-4">
|
<TabsContent value="long" className="flex flex-col gap-4">
|
||||||
@@ -417,8 +420,8 @@ function ResourceList({ resourceType }: ResourceListProps) {
|
|||||||
)
|
)
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="space-y-3">
|
<div className="flex flex-col gap-3 overflow-hidden">
|
||||||
<form onSubmit={onFilter} className="bg-card p-4 rounded-lg">
|
<form onSubmit={onFilter} className="bg-card p-4 rounded-lg flex-none">
|
||||||
<div className="flex flex-wrap items-end gap-4">
|
<div className="flex flex-wrap items-end gap-4">
|
||||||
<Controller
|
<Controller
|
||||||
name="user_phone"
|
name="user_phone"
|
||||||
@@ -554,7 +557,13 @@ function ResourceList({ resourceType }: ResourceListProps) {
|
|||||||
</form>
|
</form>
|
||||||
|
|
||||||
<Suspense fallback={<div className="text-center p-4">加载中...</div>}>
|
<Suspense fallback={<div className="text-center p-4">加载中...</div>}>
|
||||||
<DataTable<Resources> {...table} columns={columns} />
|
<DataTable<Resources>
|
||||||
|
{...table}
|
||||||
|
columns={columns}
|
||||||
|
classNames={{
|
||||||
|
root: "flex-auto overflow-hidden",
|
||||||
|
}}
|
||||||
|
/>
|
||||||
</Suspense>
|
</Suspense>
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -45,20 +45,27 @@ function ProductShortCode<T extends { code: string }>(
|
|||||||
const { field, fieldState } = props
|
const { field, fieldState } = props
|
||||||
|
|
||||||
const params = new URLSearchParams(field.value)
|
const params = new URLSearchParams(field.value)
|
||||||
|
const mode = params.get("mode") || "quota"
|
||||||
|
const live = params.get("live") || "0"
|
||||||
|
const expire = params.get("expire") || "0"
|
||||||
|
|
||||||
const setParams = (data: {
|
const setParams = (data: {
|
||||||
mode?: string
|
mode?: string
|
||||||
live?: string
|
live?: string
|
||||||
expire?: string
|
expire?: string
|
||||||
}) => {
|
}) => {
|
||||||
if (data.mode) params.set("mode", data.mode)
|
const newParams = new URLSearchParams()
|
||||||
if (data.live) params.set("live", data.live)
|
newParams.set("mode", data.mode || mode)
|
||||||
if (data.expire) params.set("expire", data.expire)
|
newParams.set("live", data.live || live)
|
||||||
field.onChange(params.toString())
|
newParams.set("expire", data.expire || expire)
|
||||||
|
console.log(newParams.toString())
|
||||||
|
field.onChange(newParams.toString())
|
||||||
}
|
}
|
||||||
|
|
||||||
const onModeChange = (value: string) => {
|
const onModeChange = (value: string) => {
|
||||||
setParams({ mode: value })
|
setParams({ mode: value })
|
||||||
}
|
}
|
||||||
|
|
||||||
const onLiveChange = (e: ChangeEvent<HTMLInputElement>) => {
|
const onLiveChange = (e: ChangeEvent<HTMLInputElement>) => {
|
||||||
let value = e.target.value || "0"
|
let value = e.target.value || "0"
|
||||||
if (value.length > 1 && value[0] === "0") {
|
if (value.length > 1 && value[0] === "0") {
|
||||||
@@ -67,6 +74,7 @@ function ProductShortCode<T extends { code: string }>(
|
|||||||
if (!/^([0-9]+)$/.test(value)) return
|
if (!/^([0-9]+)$/.test(value)) return
|
||||||
setParams({ live: value })
|
setParams({ live: value })
|
||||||
}
|
}
|
||||||
|
|
||||||
const onExpireChange = (e: ChangeEvent<HTMLInputElement>) => {
|
const onExpireChange = (e: ChangeEvent<HTMLInputElement>) => {
|
||||||
let value = e.target.value || "0"
|
let value = e.target.value || "0"
|
||||||
if (value.length > 1 && value[0] === "0") {
|
if (value.length > 1 && value[0] === "0") {
|
||||||
@@ -82,10 +90,7 @@ function ProductShortCode<T extends { code: string }>(
|
|||||||
<FieldGroup>
|
<FieldGroup>
|
||||||
<Field>
|
<Field>
|
||||||
<FieldLabel>套餐类型</FieldLabel>
|
<FieldLabel>套餐类型</FieldLabel>
|
||||||
<Select
|
<Select defaultValue={mode} onValueChange={onModeChange}>
|
||||||
defaultValue={params.get("mode") ?? "quota"}
|
|
||||||
onValueChange={onModeChange}
|
|
||||||
>
|
|
||||||
<SelectTrigger>
|
<SelectTrigger>
|
||||||
<SelectValue placeholder="请选择套餐类型" />
|
<SelectValue placeholder="请选择套餐类型" />
|
||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
@@ -97,20 +102,12 @@ function ProductShortCode<T extends { code: string }>(
|
|||||||
</Field>
|
</Field>
|
||||||
<Field>
|
<Field>
|
||||||
<FieldLabel>有效期(分钟)</FieldLabel>
|
<FieldLabel>有效期(分钟)</FieldLabel>
|
||||||
<Input
|
<Input type="number" value={live} onChange={onLiveChange} />
|
||||||
type="number"
|
|
||||||
value={params.get("live") ?? "0"}
|
|
||||||
onChange={onLiveChange}
|
|
||||||
/>
|
|
||||||
</Field>
|
</Field>
|
||||||
{params.get("mode") === "time" && (
|
{params.get("mode") === "time" && (
|
||||||
<Field>
|
<Field>
|
||||||
<FieldLabel>过期时间(天)</FieldLabel>
|
<FieldLabel>过期时间(天)</FieldLabel>
|
||||||
<Input
|
<Input type="number" value={expire} onChange={onExpireChange} />
|
||||||
type="number"
|
|
||||||
value={params.get("expire") ?? "0"}
|
|
||||||
onChange={onExpireChange}
|
|
||||||
/>
|
|
||||||
</Field>
|
</Field>
|
||||||
)}
|
)}
|
||||||
{fieldState.error && <FieldError errors={[fieldState.error]} />}
|
{fieldState.error && <FieldError errors={[fieldState.error]} />}
|
||||||
@@ -125,18 +122,21 @@ function ProductLongCode<T extends { code: string }>(
|
|||||||
const { field, fieldState } = props
|
const { field, fieldState } = props
|
||||||
|
|
||||||
const params = new URLSearchParams(field.value)
|
const params = new URLSearchParams(field.value)
|
||||||
|
const mode = params.get("mode") || "quota"
|
||||||
|
const live = params.get("live") || "0"
|
||||||
|
const expire = params.get("expire") || "0"
|
||||||
|
|
||||||
const setParams = (data: {
|
const setParams = (data: {
|
||||||
mode?: string
|
mode?: string
|
||||||
live?: string
|
live?: string
|
||||||
expire?: string
|
expire?: string
|
||||||
}) => {
|
}) => {
|
||||||
if (!params.get("mode")) params.set("mode", "quota")
|
const newParams = new URLSearchParams()
|
||||||
if (!params.get("expire")) params.set("expire", "0")
|
newParams.set("mode", data.mode || mode)
|
||||||
|
newParams.set("live", data.live || live)
|
||||||
if (data.mode) params.set("mode", data.mode)
|
newParams.set("expire", data.expire || expire)
|
||||||
if (data.live) params.set("live", data.live)
|
console.log(newParams.toString())
|
||||||
if (data.expire) params.set("expire", data.expire)
|
field.onChange(newParams.toString())
|
||||||
field.onChange(params.toString())
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const onModeChange = (value: string) => {
|
const onModeChange = (value: string) => {
|
||||||
@@ -171,10 +171,7 @@ function ProductLongCode<T extends { code: string }>(
|
|||||||
<FieldGroup>
|
<FieldGroup>
|
||||||
<Field>
|
<Field>
|
||||||
<FieldLabel>套餐类型</FieldLabel>
|
<FieldLabel>套餐类型</FieldLabel>
|
||||||
<Select
|
<Select defaultValue={mode} onValueChange={onModeChange}>
|
||||||
defaultValue={params.get("mode") ?? "quota"}
|
|
||||||
onValueChange={onModeChange}
|
|
||||||
>
|
|
||||||
<SelectTrigger>
|
<SelectTrigger>
|
||||||
<SelectValue placeholder="请选择套餐类型" />
|
<SelectValue placeholder="请选择套餐类型" />
|
||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
@@ -186,20 +183,12 @@ function ProductLongCode<T extends { code: string }>(
|
|||||||
</Field>
|
</Field>
|
||||||
<Field>
|
<Field>
|
||||||
<FieldLabel>有效期(分钟)</FieldLabel>
|
<FieldLabel>有效期(分钟)</FieldLabel>
|
||||||
<Input
|
<Input type="number" value={live} onChange={onLiveChange} />
|
||||||
type="number"
|
|
||||||
value={params.get("live") ?? "0"}
|
|
||||||
onChange={onLiveChange}
|
|
||||||
/>
|
|
||||||
</Field>
|
</Field>
|
||||||
{params.get("mode") === "time" && (
|
{params.get("mode") === "time" && (
|
||||||
<Field>
|
<Field>
|
||||||
<FieldLabel>过期时间(天)</FieldLabel>
|
<FieldLabel>过期时间(天)</FieldLabel>
|
||||||
<Input
|
<Input type="number" value={expire} onChange={onExpireChange} />
|
||||||
type="number"
|
|
||||||
value={params.get("expire") ?? "0"}
|
|
||||||
onChange={onExpireChange}
|
|
||||||
/>
|
|
||||||
</Field>
|
</Field>
|
||||||
)}
|
)}
|
||||||
{fieldState.error && <FieldError errors={[fieldState.error]} />}
|
{fieldState.error && <FieldError errors={[fieldState.error]} />}
|
||||||
|
|||||||
Reference in New Issue
Block a user