'use client' import { ColumnDef } from '@tanstack/react-table' import { Button } from '@/components/ui/button' import { Edit, Trash2, MoreHorizontal } from 'lucide-react' import { formatDate } from '@/lib/format' import { Checkbox } from '@/components/ui/checkbox' import { DataTableColumnHeader } from '@/components/data-table/column-header' import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from '@/components/ui/dropdown-menu' import type { DeptAdmin } from '@/server/routers/dept-admin' // 操作回调类型 export type DeptAdminActions = { onEdit: (id: number) => void onDelete: (id: number) => void } // 列定义选项类型 export type DeptAdminColumnsOptions = { depts?: Array<{ code: string; name: string; fullName: string }> } // 创建院系管理员表格列定义 export const createDeptAdminColumns = ( actions: DeptAdminActions, options: DeptAdminColumnsOptions = {} ): ColumnDef[] => [ { id: "select", header: ({ table }) => ( table.toggleAllPageRowsSelected(!!value) } aria-label="Select all" /> ), cell: ({ row }) => ( row.toggleSelected(!!value)} aria-label="Select row" /> ), size: 32, enableSorting: false, enableHiding: false, }, { id: 'id', accessorKey: 'id', header: ({ column }) => ( ), cell: ({ row }) =>
{row.original.id}
, meta: { label: 'ID', }, }, { id: 'uid', accessorKey: 'uid', header: ({ column }) => ( ), cell: ({ row }) =>
{row.original.uid}
, enableColumnFilter: true, meta: { label: '用户ID', filter: { placeholder: '请输入用户ID', variant: 'text', } }, }, { id: 'userName', accessorKey: 'user.name', header: ({ column }) => ( ), cell: ({ row }) =>
{row.original.user?.name || '-'}
, enableColumnFilter: true, meta: { label: '姓名', filter: { placeholder: '请输入姓名', variant: 'text', } }, }, { id: 'deptCode', accessorKey: 'deptCode', header: ({ column }) => ( ), cell: ({ row }) => (
{row.original.dept?.name || '-'}
{row.original.deptCode}
), enableColumnFilter: true, meta: { label: '院系', filter: { variant: 'multiSelect', options: options.depts?.map(dept => ({ id: dept.code, name: dept.fullName, })) || [], } }, }, { id: 'adminEmail', accessorKey: 'adminEmail', header: ({ column }) => ( ), cell: ({ row }) =>
{row.original.adminEmail || '-'}
, enableColumnFilter: true, meta: { label: '邮箱', filter: { placeholder: '请输入邮箱', variant: 'text', } }, }, { id: 'adminLinePhone', accessorKey: 'adminLinePhone', header: ({ column }) => ( ), cell: ({ row }) =>
{row.original.adminLinePhone || '-'}
, enableColumnFilter: true, meta: { label: '座机', filter: { placeholder: '请输入座机', variant: 'text', } }, }, { id: 'adminMobilePhone', accessorKey: 'adminMobilePhone', header: ({ column }) => ( ), cell: ({ row }) =>
{row.original.adminMobilePhone || '-'}
, enableColumnFilter: true, meta: { label: '手机', filter: { placeholder: '请输入手机', variant: 'text', } }, }, { id: 'note', accessorKey: 'note', header: ({ column }) => ( ), cell: ({ row }) => (
{row.original.note || '-'}
), enableSorting: false, meta: { label: '备注', }, }, { id: 'createdAt', accessorKey: 'createdAt', header: ({ column }) => ( ), cell: ({ row }) => { return
{formatDate(row.original.createdAt) || '-'}
}, meta: { label: '创建时间', } }, { id: 'updatedAt', accessorKey: 'updatedAt', header: ({ column }) => ( ), cell: ({ row }) => { return
{formatDate(row.original.updatedAt) || '-'}
}, meta: { label: '更新时间', } }, { id: 'actions', cell: ({ row }) => { const deptAdmin = row.original return ( actions.onEdit(deptAdmin.id)}> 编辑 actions.onDelete(deptAdmin.id)} > 删除 ) }, size: 32, enableSorting: false, enableHiding: false, }, ]