import { useState } from "react";
import { createFileRoute } from "@tanstack/react-router";
import { RotateCcw, Search } from "lucide-react";
import { Button } from "@/components/ui/button";
import { Input } from "@/components/ui/input";
import { Badge } from "@/components/ui/badge";
import {
Select,
SelectContent,
SelectItem,
SelectTrigger,
SelectValue,
} from "@/components/ui/select";
import { DataTable } from "@/components/data-table";
import { Pagination } from "@/components/pagination";
import { useFetchList } from "./-hooks/useFetchList";
import { useUserStatusActions } from "@/hooks/use-user-status-actions";
import { UserActionConfirmDialog } from "./-components/UserActionConfirmDialog";
import { ResetUserPasswordDialog } from "@/components/reset-user-password-dialog";
import { useUserStore } from "@/stores/user";
import { DateRangePicker } from "@/components/date-range-picker";
export const Route = createFileRoute("/admin/org-account/")({
component: RouteComponent,
});
const initialFilters = {
orgNameLike: "",
usernameLike: "",
realNameLike: "",
phoneLike: "",
enabled: "",
status: "",
createTimeStart: "",
createTimeEnd: "",
};
export function useColumns({
handleEnable,
handleDisable,
handleCancelUser,
handleResetPassword,
}: any) {
const currentUserId = useUserStore((state: any) => state.user?.id);
return [
{
accessorKey: "orgName",
header: "机构名称",
cell: ({ row }: any) => (
{row.getValue("orgName")}
{row.original.administrator && (
管理员
)}
),
},
{
accessorKey: "username",
header: "账号",
cell: ({ row }: any) => {row.getValue("username")}
,
},
{
accessorKey: "realName",
header: "姓名",
cell: ({ row }: any) => (
{row.getValue("realName") || row.original.nickname || "-"}
),
},
{
accessorKey: "phone",
header: "手机号",
cell: ({ row }: any) => {row.getValue("phone") || "-"}
,
},
{
accessorKey: "userType",
header: "用户类型",
cell: ({ row }: any) => (
{row.getValue("userType") === 2 ? "个人用户" : "企业用户"}
),
},
{
accessorKey: "enabled",
header: "启用状态",
cell: ({ row }: any) =>
row.getValue("enabled") ? (
启用
) : (
禁用
),
},
{
accessorKey: "status",
header: "状态",
cell: ({ row }: any) => {
const status = Number(row.getValue("status"));
return (
{status === 1 ? (
待激活
) : status === 2 ? (
已激活
) : (
已注销
)}
);
},
},
{
accessorKey: "createTime",
header: "创建时间",
cell: ({ row }: any) => {row.getValue("createTime")}
,
},
{
id: "actions",
enableHiding: false,
header: "操作",
cell: ({ row }: any) => {
const record = row.original;
// 已注销或当前登录人自己,不展示操作
if (Number(record.status) === 3 || record.userId === currentUserId) {
return null;
}
return (
{record.enabled ? (
) : (
)}
);
},
},
];
}
function RouteComponent() {
const [currentEntity, setCurrentEntity] = useState(null);
// 启用(直接操作)
const { enable } = useUserStatusActions({
onSuccess: () => query?.refetch(),
});
const handleEnable = (record: any) => {
enable(record.userId);
};
// 禁用/注销(二次确认)
const [confirmAction, setConfirmAction] = useState<
"disable" | "adminCancel"
>("disable");
const [openConfirmDialog, setOpenConfirmDialog] = useState(false);
const handleDisable = (record: any) => {
setCurrentEntity(record);
setConfirmAction("disable");
setOpenConfirmDialog(true);
};
const handleCancelUser = (record: any) => {
setCurrentEntity(record);
setConfirmAction("adminCancel");
setOpenConfirmDialog(true);
};
// 重置密码
const [openResetPasswordDialog, setOpenResetPasswordDialog] =
useState(false);
const handleResetPassword = (record: any) => {
setCurrentEntity(record);
setOpenResetPasswordDialog(true);
};
const { table, query, search } = useFetchList(() =>
useColumns({
handleEnable,
handleDisable,
handleCancelUser,
handleResetPassword,
}),
);
// 筛选条件(点击查询后生效)
const [filters, setFilters] = useState(initialFilters);
const setFilter = (key: string, value: string) => {
setFilters((prev: any) => ({ ...prev, [key]: value }));
};
const handleSearch = () => {
search({
...filters,
createTimeStart: filters.createTimeStart
? `${filters.createTimeStart} 00:00:00`
: "",
createTimeEnd: filters.createTimeEnd
? `${filters.createTimeEnd} 23:59:59`
: "",
});
};
const handleReset = () => {
setFilters(initialFilters);
search({});
};
return (
<>
机构账号
查看各机构下的账号信息,启用/禁用/注销账号
>
);
}