客户查询添加操作功能

This commit is contained in:
Eamon
2026-04-09 17:08:59 +08:00
parent cc7e26561d
commit 790180a847
24 changed files with 2261 additions and 108 deletions

View File

@@ -17,7 +17,7 @@ import {
} from "@/components/ui/dialog"
import { Field, FieldError, FieldLabel } from "@/components/ui/field"
import { Input } from "@/components/ui/input"
import type { Cust } from "@/models/cust"
import type { User } from "@/models/user"
const Schema = z.object({
deduction: z
@@ -32,7 +32,7 @@ type FormValues = z.infer<typeof Schema>
interface UpdateDeductionDialogProps {
open: boolean
onOpenChange: (open: boolean) => void
currentUser: Cust | null
currentUser: User | null
onSuccess: () => void
}

View File

@@ -17,7 +17,7 @@ import {
} from "@/components/ui/dialog"
import { Field, FieldError, FieldLabel } from "@/components/ui/field"
import { Input } from "@/components/ui/input"
import type { Cust } from "@/models/cust"
import type { User } from "@/models/user"
const Schema = z.object({
deposit: z
@@ -32,7 +32,7 @@ type FormValues = z.infer<typeof Schema>
interface UpdateDepositDialogProps {
open: boolean
onOpenChange: (open: boolean) => void
currentUser: Cust | null
currentUser: User | null
onSuccess: () => void
}

View File

@@ -2,6 +2,7 @@
import { zodResolver } from "@hookform/resolvers/zod"
import { format } from "date-fns"
import { useRouter } from "next/navigation"
import { Suspense, useCallback, useState } from "react"
import { Controller, useForm } from "react-hook-form"
import { z } from "zod"
@@ -25,12 +26,17 @@ import {
SelectValue,
} from "@/components/ui/select"
import {
ScopeBatchReadOfUser,
ScopeBillReadOfUser,
ScopeChannelReadOfUser,
ScopeResourceRead,
ScopeTradeReadOfUser,
ScopeUserWrite,
ScopeUserWriteBalance,
ScopeUserWriteBalanceDec,
ScopeUserWriteBalanceInc,
} from "@/lib/scopes"
import type { Cust } from "@/models/cust"
import type { User } from "@/models/user"
import { AddUserDialog } from "./create"
import { DeductionDialog } from "./deduction"
import { DepositDialog } from "./deposit"
@@ -75,12 +81,12 @@ export default function UserPage() {
const [filters, setFilters] = useState<FilterValues>({})
const [isAddDialogOpen, setIsAddDialogOpen] = useState(false)
const [isEditDialogOpen, setIsEditDialogOpen] = useState(false)
const [currentEditUser, setCurrentEditUser] = useState<Cust | null>(null)
const [currentEditUser, setCurrentEditUser] = useState<User | null>(null)
const [depositDialog, setDepositDialog] = useState(false)
const [deposit, setDeposit] = useState<Cust | null>(null)
const [deposit, setDeposit] = useState<User | null>(null)
const router = useRouter()
const [deductionDialog, setDeductionDialog] = useState(false)
const [deduction, setDeduction] = useState<Cust | null>(null)
const [deduction, setDeduction] = useState<User | null>(null)
const { control, handleSubmit, reset } = useForm<FormValues>({
resolver: zodResolver(filterSchema),
defaultValues: {
@@ -98,7 +104,7 @@ export default function UserPage() {
[filters],
)
const table = useDataTable<Cust>(fetchUsers)
const table = useDataTable<User>(fetchUsers)
const onFilter = handleSubmit(data => {
const result: FilterValues = {}
@@ -244,7 +250,7 @@ export default function UserPage() {
</form>
<Suspense>
<DataTable<Cust>
<DataTable<User>
{...table}
columns={[
{ header: "账号", accessorKey: "username" },
@@ -355,7 +361,7 @@ export default function UserPage() {
header: "操作",
cell: ({ row }) => {
return (
<div className="flex gap-2">
<div className="flex flex-wrap gap-2 w-75">
<Auth scope={ScopeUserWriteBalanceInc}>
<Button
size="sm"
@@ -389,6 +395,62 @@ export default function UserPage() {
</Button>
</Auth>
<Auth scope={ScopeTradeReadOfUser}>
<Button
size="sm"
onClick={() => {
router.push(`/client/trade?userId=${row.original.id}`)
}}
>
</Button>
</Auth>
<Auth scope={ScopeBillReadOfUser}>
<Button
size="sm"
onClick={() => {
router.push(
`/client/billing?userId=${row.original.id}`,
)
}}
>
</Button>
</Auth>
<Auth scope={ScopeResourceRead}>
<Button
size="sm"
onClick={() => {
router.push(
`/client/resources?userId=${row.original.id}`,
)
}}
>
</Button>
</Auth>
<Auth scope={ScopeBatchReadOfUser}>
<Button
size="sm"
onClick={() => {
router.push(`/client/batch?userId=${row.original.id}`)
}}
>
</Button>
</Auth>
<Auth scope={ScopeChannelReadOfUser}>
<Button
size="sm"
onClick={() => {
router.push(
`/client/channel?userId=${row.original.id}`,
)
}}
>
IP管理
</Button>
</Auth>
</div>
)
},

View File

@@ -30,7 +30,7 @@ import {
SelectValue,
} from "@/components/ui/select"
import type { Admin } from "@/models/admin"
import type { Cust } from "@/models/cust"
import type { User } from "@/models/user"
import type { ProductDiscount } from "@/models/product_discount"
// 表单验证规则
@@ -69,7 +69,7 @@ export type EditUserFormValues = z.infer<typeof editUserSchema>
interface EditUserDialogProps {
open: boolean
onOpenChange: (open: boolean) => void
currentUser: Cust | null
currentUser: User | null
onSuccess: () => void
}