import { Badge, Box, Button, HStack, Table, Tbody, Td, Th, Thead, Tooltip, Tr, VStack, } from "@hope-ui/solid" import { createSignal, For, onMount, createMemo, Show } from "solid-js" import { useFetch, useListFetch, useManageTitle, useRouter, useT, } from "~/hooks" import { handleResp, notify, r } from "~/utils" import { UserPermissions, User, UserMethods, PPageResp, PEmptyResp, } from "~/types" import { DeletePopover } from "../common/DeletePopover" import { Wether } from "~/components" import { getRoleList } from "~/utils/api" const Role = (props: { role: number[]; roleMap: Record }) => { const getBadgeColor = (roleId: number) => { switch (roleId) { case 1: // 访客 return "neutral" case 2: // 管理员 return "success" default: return "info" } } return ( {(role) => ( {props.roleMap[role] ?? role} )} ) } const Permissions = (props: { user: User }) => { const t = useT() const color = (can: boolean) => `$${can ? "success" : "danger"}9` return ( {(item, i) => ( )} ) } const Users = () => { const t = useT() useManageTitle("manage.sidemenu.users") const { to } = useRouter() // 获取用户列表 const [getUsersLoading, getUsers] = useFetch( (): PPageResp => r.get("/admin/user/list"), ) const [users, setUsers] = createSignal([]) const refresh = async () => { const resp = await getUsers() handleResp(resp, (data) => setUsers(data.content)) } const [roleList, setRoleList] = createSignal<{ id: number; name: string }[]>( [], ) const roleMap = createMemo>(() => { const map: Record = {} for (const r of roleList()) map[r.id] = r.name return map }) const loadRolesOnce = async () => { const resp = await getRoleList() handleResp(resp, (data) => setRoleList(data.content)) } onMount(() => { loadRolesOnce() refresh() }) // 操作按钮 const [deleting, deleteUser] = useListFetch( (id: number): PEmptyResp => r.post(`/admin/user/delete?id=${id}`), ) const [cancel_2faId, cancel_2fa] = useListFetch( (id: number): PEmptyResp => r.post(`/admin/user/cancel_2fa?id=${id}`), ) return ( {(title) => } {(user) => ( )}
{t(`users.${title}`)} {t("global.operations")}
{user.username} 0} fallback={...} > { const resp = await deleteUser(user.id) handleResp(resp, () => { notify.success(t("global.delete_success")) refresh() }) }} />
) } export default Users