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 ? (
} variant="primary" onClick={page.openCreate}>
增加机器人房间
) : 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")}秒`;
}