import PasswordOutlined from "@mui/icons-material/PasswordOutlined"; import PersonAddAltOutlined from "@mui/icons-material/PersonAddAltOutlined"; import OpenInNewOutlined from "@mui/icons-material/OpenInNewOutlined"; import AdminPanelSettingsOutlined from "@mui/icons-material/AdminPanelSettingsOutlined"; import { ExternalAdminPermissionDrawer } from "@/features/external-admin-users/components/ExternalAdminPermissionDrawer.jsx"; import { ExternalAdminUserFormDialog } from "@/features/external-admin-users/components/ExternalAdminUserFormDialog.jsx"; import { ExternalAdminUserPasswordDialog } from "@/features/external-admin-users/components/ExternalAdminUserPasswordDialog.jsx"; import styles from "@/features/external-admin-users/external-admin-users.module.css"; import { useExternalAdminUsersPage } from "@/features/external-admin-users/hooks/useExternalAdminUsersPage.js"; import { AdminActionIconButton, AdminFilterResetButton, AdminFilterSelect, AdminListBody, AdminListPage, AdminListToolbar, AdminRowActions, AdminSearchBox, } from "@/shared/ui/AdminListLayout.jsx"; import { AdminSwitch } from "@/shared/ui/AdminSwitch.jsx"; import { AdminUserIdentity } from "@/shared/ui/AdminUserIdentity.jsx"; import { DataState } from "@/shared/ui/DataState.jsx"; import { DataTable } from "@/shared/ui/DataTable.jsx"; import { formatMillis } from "@/shared/utils/time.js"; const statusOptions = [ ["", "全部状态"], ["active", "启用"], ["disabled", "停用"], ]; const columns = [ { key: "linkedUser", label: "绑定 App 用户", render: (item) => ( ), width: "minmax(250px, 1.2fr)", }, { key: "username", label: "外管账号", render: (item) => (
{item.username || "-"} ID {item.id || "-"}
), width: "minmax(190px, 0.95fr)", }, { key: "status", label: "状态", render: (item, _index, context) => { const page = context?.page; // 外管状态、密码和权限都是账号级敏感写操作;同页串行化可避免多个请求互相覆盖全局 loading 状态。 const accountActionInFlight = Boolean(page?.loadingAction); return ( page.toggleStatus(item)} /> ); }, width: "minmax(120px, 0.65fr)", }, { key: "permissions", label: "外管权限", render: (item) => `${item.permissions?.length || 0} 项`, width: "minmax(120px, 0.65fr)", }, { key: "createdByAdminId", label: "创建人", render: (item) => item.createdByAdminId || "-", width: "minmax(130px, 0.7fr)", }, { key: "lastLoginAtMs", label: "最近登录", render: (item) => formatMillis(item.lastLoginAtMs), width: "minmax(170px, 0.85fr)", }, { key: "createdAtMs", label: "创建时间", render: (item) => formatMillis(item.createdAtMs), width: "minmax(170px, 0.85fr)", }, { key: "actions", label: "操作", render: (item, _index, context) => { const page = context?.page; return ( page.openPermissions(item)} > page.openPassword(item)} > ); }, resizable: false, width: "132px", }, ]; export function ExternalAdminUsersPage() { const page = useExternalAdminUsersPage(); const items = page.data.items || []; const total = Number(page.data.total || 0); return ( {page.abilities.canCreate ? ( ) : null} } filters={ <> } /> 0 ? { onPageChange: page.setPage, page: page.page, pageSize: page.data.pageSize || page.pageSize, total, } : undefined } rowKey={(item) => item.id || `${item.appCode}-${item.username}`} /> ); }