import AddOutlined from "@mui/icons-material/AddOutlined"; import BedroomParentOutlined from "@mui/icons-material/BedroomParentOutlined"; import Autocomplete from "@mui/material/Autocomplete"; import TextField from "@mui/material/TextField"; import Tooltip from "@mui/material/Tooltip"; import { Button } from "@/shared/ui/Button.jsx"; import { AdminFormDialog } from "@/shared/ui/AdminFormDialog.jsx"; import { AdminUserIdentity } from "@/shared/ui/AdminUserIdentity.jsx"; import { DataState } from "@/shared/ui/DataState.jsx"; import { DataTable } from "@/shared/ui/DataTable.jsx"; import { AdminSwitch } from "@/shared/ui/AdminSwitch.jsx"; import { AdminFilterResetButton } from "@/shared/ui/AdminListLayout.jsx"; import { createOptionsColumnFilter } from "@/shared/ui/tableFilters.js"; import { formatMillis } from "@/shared/utils/time.js"; import { giftId, giftOptionLabel, robotOptionLabel, useRobotRoomsPage, } from "@/features/rooms/hooks/useRobotRoomsPage.js"; import styles from "@/features/rooms/rooms.module.css"; const statusOptions = [ { label: "运行中", value: "active" }, { label: "已停止", value: "stopped" }, { label: "全部状态", value: "all" }, ]; const columns = [ { key: "room", label: "房间信息", width: "minmax(280px, 1.4fr)", render: (room) => , }, { key: "owner", label: "房主机器人", width: "minmax(220px, 1fr)", render: (room) => , }, { key: "robots", label: "进房机器人", width: "minmax(120px, 0.5fr)", render: (room) => Number(room.robotUserIds?.length || room.robots?.length || 0).toLocaleString("zh-CN"), }, { key: "normalRule", label: "普通礼物", width: "minmax(190px, 0.8fr)", render: (room) => ( ), }, { key: "luckyRule", label: "幸运礼物", width: "minmax(220px, 0.9fr)", render: (room) => ( ), }, { key: "createdAt", label: "创建时间", width: "minmax(170px, 0.8fr)", render: (room) => formatMillis(room.createdAtMs), }, ]; export function RoomRobotPage() { const page = useRobotRoomsPage(); const items = page.data.items || []; const total = page.data.total || 0; const tableColumns = [ ...columns.map((column) => column.key === "createdAt" ? { ...column, filter: createOptionsColumnFilter({ options: statusOptions, placeholder: "房间状态", value: page.status, onChange: page.changeStatus, }), } : column, ), { key: "status", label: "状态", width: "minmax(112px, 0.5fr)", render: (room) => , }, ]; return (
{page.abilities.canRobotCreate ? (
) : null}
room.roomId} pagination={ total > 0 ? { page: page.page, pageSize: page.data.pageSize || 50, total, onPageChange: page.setPage, } : undefined } />
option.userId === value.userId} loading={page.availableRobotsLoading} noOptionsText="当前无数据" options={page.availableRobots} renderInput={(params) => ( )} renderOption={(props, option) => (
  • )} size="small" value={page.selectedOwnerRobot} onChange={(_, option) => page.selectOwnerRobot(option)} /> option.userId === value.userId} loading={page.availableRobotsLoading} noOptionsText="当前无数据" options={page.availableRobots} renderInput={(params) => ( )} renderOption={(props, option) => (
  • )} size="small" value={page.selectedCandidateRobots} onChange={(_, options) => page.selectCandidateRobots(options)} />
    page.setForm({ ...page.form, minRobotCount: event.target.value })} /> page.setForm({ ...page.form, maxRobotCount: event.target.value })} />
    giftId(option) === giftId(value)} loading={page.giftOptionsLoading} noOptionsText="当前无数据" options={page.giftOptions} renderInput={(params) => ( )} size="small" value={page.selectedGiftOptions} onChange={(_, options) => page.selectGiftIds("giftIds", options)} /> page.setForm({ ...page.form, normalGiftIntervalMs: event.target.value })} /> giftId(option) === giftId(value)} loading={page.giftOptionsLoading} noOptionsText="当前无数据" options={page.giftOptions} renderInput={(params) => ( )} size="small" value={page.selectedLuckyGiftOptions} onChange={(_, options) => page.selectGiftIds("luckyGiftIds", options)} />
    page.setForm({ ...page.form, luckyComboMin: event.target.value })} /> page.setForm({ ...page.form, luckyComboMax: event.target.value })} /> page.setForm({ ...page.form, luckyPauseMinMs: event.target.value })} /> page.setForm({ ...page.form, luckyPauseMaxMs: event.target.value })} />
    ); } function RobotRoomIdentity({ room }) { return (
    {room.coverUrl ? : }
    {room.title || "-"}
    长ID {room.roomId || "-"}
    短ID {room.roomShortId || "-"}
    ); } function RobotIdentity({ user = {}, fallbackId = "" }) { return ; } function RobotRoomStatus({ page, room }) { const checked = room.status === "active"; return (
    page.setRoomStatus(room)} />
    ); } function RuleStack({ rows }) { return (
    {rows.map((row) => ( {row} ))}
    ); } function formatSeconds(ms) { const seconds = Math.round(Number(ms || 0) / 1000); return `${seconds.toLocaleString("zh-CN")}秒`; }