import Add from "@mui/icons-material/Add"; import { AdminSwitch } from "@/shared/ui/AdminSwitch.jsx"; import TextField from "@mui/material/TextField"; import { formatMillis } from "@/shared/utils/time.js"; import { DataState } from "@/shared/ui/DataState.jsx"; import { bdStatusFilters } from "@/features/host-org/constants.js"; import { HostOrgActionModal } from "@/features/host-org/components/HostOrgActionModal.jsx"; import { HostOrgPerson, hostOrgRegionName } from "@/features/host-org/components/HostOrgIdentity.jsx"; import { HostOrgSortHeader } from "@/features/host-org/components/HostOrgSortHeader.jsx"; import { SalaryWalletAdjustButton, SalaryWalletCell } from "@/features/host-org/components/SalaryWalletControls.jsx"; import { HostOrgTable } from "@/features/host-org/components/HostOrgTable.jsx"; import { HostOrgToolbar } from "@/features/host-org/components/HostOrgToolbar.jsx"; import { useHostBdsPage } from "@/features/host-org/hooks/useHostBdsPage.js"; import { AdminRowActions } from "@/shared/ui/AdminListLayout.jsx"; import { createOptionsColumnFilter, createTextColumnFilter } from "@/shared/ui/tableFilters.js"; import styles from "@/features/host-org/host-org.module.css"; const bdColumns = [ { key: "user", label: "用户", render: (item) => , width: "minmax(220px, 1.25fr)", }, { key: "role", label: "角色", width: "minmax(100px, 0.65fr)" }, { key: "salaryWallet", label: "工资钱包", sortable: true, sortField: "salary_wallet", render: (item) => ( ), width: "minmax(140px, 0.85fr)", }, { key: "parentLeaderUserId", label: "上级 Leader", render: (item) => , width: "minmax(220px, 1.25fr)", }, { key: "regionId", label: "区域", render: (item, _index, context) => hostOrgRegionName(item, context?.regionOptions), width: "minmax(130px, 0.75fr)", }, { key: "status", label: "状态", render: (item, _index, context) => , width: "minmax(90px, 0.7fr)", }, { key: "createdByUserId", label: "创建人", render: (item) => , width: "minmax(180px, 1fr)", }, { key: "createdAtMs", label: "创建时间", render: (item) => formatMillis(item.createdAtMs), width: "minmax(170px, 1fr)", }, { key: "updatedAtMs", label: "更新时间", render: (item) => formatMillis(item.updatedAtMs), width: "minmax(170px, 1fr)", }, ]; export function HostBdsPage() { const page = useHostBdsPage({ profileType: "bd" }); const createDisabled = !page.abilities.canCreate; const items = page.data.items || []; const total = page.data.total || 0; const toolbarActions = [ page.abilities.canCreate ? { icon: , label: "创建 BD", onClick: page.openBDForm, variant: "primary" } : null, ].filter(Boolean); const columns = [ ...bdColumns, page.abilities.canSalaryAdjust ? { key: "actions", label: "操作", render: (item, _index, context) => , width: "minmax(80px, 0.45fr)", } : null, ] .filter(Boolean) .map((column) => { if (column.key === "user") { return { ...column, filter: createTextColumnFilter({ placeholder: "搜索用户 ID、展示 ID、用户名", value: page.query, onChange: page.changeQuery, }), }; } if (column.key === "parentLeaderUserId") { return { ...column, filter: createTextColumnFilter({ placeholder: "搜索 Leader 用户 ID", value: page.parentLeaderUserId, onChange: page.changeParentLeaderUserId, }), }; } if (column.key === "status") { return { ...column, filter: createOptionsColumnFilter({ options: bdStatusFilters, placeholder: "搜索状态", value: page.status, onChange: page.changeStatus, }), }; } if (column.sortable) { return { ...column, header: ( ), }; } return column; }); return (
0 ? { page: page.page, pageSize: page.data.pageSize || 50, total, onPageChange: page.setPage, } : undefined } rowKey={(item) => `bd-${item.userId}`} />
page.setBDForm({ ...page.bdForm, targetUserId: event.target.value })} /> page.setBDForm({ ...page.bdForm, parentLeaderUserId: event.target.value })} /> page.setBDForm({ ...page.bdForm, reason: event.target.value })} />
); } function BDUser({ item }) { return ( ); } function ParentLeader({ item }) { if (!item.parentLeaderUserId) { return "-"; } return ( ); } function BDStatusSwitch({ item, page }) { return ( page.toggleBD(item, event.target.checked)} /> ); } function Creator({ item }) { if (!item.createdByUserId && !item.createdByDisplayUserId && !item.createdByUsername) { return "-"; } return ( ); } function BDActions({ item, page }) { return ( ); } function bdUserLabel(item) { return item.displayUserId || item.username || item.userId; }