修改客户认领和客户管理页面的查询和操作功能并且包含按钮权限 & 产品管理添加启动/禁用和最低价格字段

This commit is contained in:
Eamon
2026-04-07 17:29:42 +08:00
parent f6ae0a9463
commit ff645aaaca
14 changed files with 442 additions and 237 deletions

View File

@@ -6,6 +6,7 @@ import { Suspense, useCallback, useState } from "react"
import { Controller, useForm } from "react-hook-form"
import { z } from "zod"
import { getPageCusts } from "@/actions/cust"
import { Auth } from "@/components/auth"
import { DataTable, useDataTable } from "@/components/data-table"
import { Badge } from "@/components/ui/badge"
import { Button } from "@/components/ui/button"
@@ -23,9 +24,16 @@ import {
SelectTrigger,
SelectValue,
} from "@/components/ui/select"
import {
ScopeUserWrite,
ScopeUserWriteBalance,
ScopeUserWriteBalanceDec,
ScopeUserWriteBalanceInc,
} from "@/lib/scopes"
import type { Cust } from "@/models/cust"
import { BalanceDialog } from "./balanceDialog"
import { AddUserDialog } from "./create"
import { DeductionDialog } from "./deduction"
import { DepositDialog } from "./deposit"
import { UpdateDialog } from "./update"
type FilterValues = {
@@ -68,8 +76,11 @@ export default function UserPage() {
const [isAddDialogOpen, setIsAddDialogOpen] = useState(false)
const [isEditDialogOpen, setIsEditDialogOpen] = useState(false)
const [currentEditUser, setCurrentEditUser] = useState<Cust | null>(null)
const [balanceDialog, setBalanceDialog] = useState(false)
const [balance, setBalance] = useState<Cust | null>(null)
const [depositDialog, setDepositDialog] = useState(false)
const [deposit, setDeposit] = useState<Cust | null>(null)
const [deductionDialog, setDeductionDialog] = useState(false)
const [deduction, setDeduction] = useState<Cust | null>(null)
const { control, handleSubmit, reset } = useForm<FormValues>({
resolver: zodResolver(filterSchema),
defaultValues: {
@@ -224,9 +235,11 @@ export default function UserPage() {
>
</Button>
<Button type="button" onClick={() => setIsAddDialogOpen(true)}>
</Button>
<Auth scope={ScopeUserWrite}>
<Button type="button" onClick={() => setIsAddDialogOpen(true)}>
</Button>
</Auth>
</FieldGroup>
</form>
@@ -289,7 +302,7 @@ export default function UserPage() {
accessorKey: "id_no",
cell: ({ row }) => {
const idNo = row.original.id_no
return idNo ? `${idNo.slice(0, 6)}****${idNo.slice(-4)}` : "-"
return idNo ? `${idNo.slice(0, 6)}****${idNo.slice(-4)}` : ""
},
},
{
@@ -323,12 +336,12 @@ export default function UserPage() {
new Date(row.original.last_login),
"yyyy-MM-dd HH:mm",
)
: "-",
: "",
},
{
header: "最后登录IP",
accessorKey: "last_login_ip",
cell: ({ row }) => row.original.last_login_ip || "-",
cell: ({ row }) => row.original.last_login_ip || "",
},
{
header: "创建时间",
@@ -343,25 +356,39 @@ export default function UserPage() {
cell: ({ row }) => {
return (
<div className="flex gap-2">
<Button
size="sm"
variant="outline"
onClick={() => {
setBalance(row.original)
setBalanceDialog(true)
}}
>
</Button>
<Button
size="sm"
onClick={() => {
setCurrentEditUser(row.original)
setIsEditDialogOpen(true)
}}
>
</Button>
<Auth scope={ScopeUserWriteBalanceInc}>
<Button
size="sm"
onClick={() => {
setDeposit(row.original)
setDepositDialog(true)
}}
>
</Button>
</Auth>
<Auth scope={ScopeUserWriteBalanceDec}>
<Button
size="sm"
onClick={() => {
setDeduction(row.original)
setDeductionDialog(true)
}}
>
</Button>
</Auth>
<Auth scope={ScopeUserWriteBalance}>
<Button
size="sm"
onClick={() => {
setCurrentEditUser(row.original)
setIsEditDialogOpen(true)
}}
>
</Button>
</Auth>
</div>
)
},
@@ -383,10 +410,16 @@ export default function UserPage() {
onSuccess={refreshTable}
/>
<BalanceDialog
open={balanceDialog}
onOpenChange={setBalanceDialog}
currentUser={balance}
<DepositDialog
open={depositDialog}
onOpenChange={setDepositDialog}
currentUser={deposit}
onSuccess={refreshTable}
/>
<DeductionDialog
open={deductionDialog}
onOpenChange={setDeductionDialog}
currentUser={deduction}
onSuccess={refreshTable}
/>
</div>