import { DataState } from "@/shared/ui/DataState.jsx"; import { DataTable } from "@/shared/ui/DataTable.jsx"; import { AdminListBody, AdminListPage } from "@/shared/ui/AdminListLayout.jsx"; import { AdminUserIdentity } from "@/shared/ui/AdminUserIdentity.jsx"; import { createOptionsColumnFilter, createTextColumnFilter } from "@/shared/ui/tableFilters.js"; import { formatMillis } from "@/shared/utils/time.js"; import { SevenDayCheckInConfigDrawer } from "@/features/seven-day-checkin/components/SevenDayCheckInConfigDrawer.jsx"; import { SevenDayCheckInConfigSummary } from "@/features/seven-day-checkin/components/SevenDayCheckInConfigSummary.jsx"; import { useSevenDayCheckInPage } from "@/features/seven-day-checkin/hooks/useSevenDayCheckInPage.js"; import styles from "@/features/seven-day-checkin/seven-day-checkin.module.css"; const claimStatusOptions = [ ["pending", "发放中"], ["granted", "已发放"], ["failed", "发放失败"], ]; const dayOptions = Array.from({ length: 7 }, (_, index) => [String(index + 1), `第 ${index + 1} 天`]); const columnsBase = [ { key: "user", label: "用户信息", width: "minmax(260px, 1.15fr)", render: (claim) => , }, { key: "cycle", label: "签到周期", width: "minmax(180px, 0.8fr)", render: (claim) => (
第 {claim.cycleNo || 0} 轮 {claim.checkinDay || "-"}
), }, { key: "dayIndex", label: "签到天数", width: "minmax(120px, 0.55fr)", render: (claim) => `第 ${claim.dayIndex || 0} 天`, }, { key: "reward", label: "奖励资源组", width: "minmax(180px, 0.85fr)", render: (claim, _index, context) => ( ), }, { key: "status", label: "状态", width: "minmax(120px, 0.55fr)", render: (claim) => , }, { key: "time", label: "签到时间", width: "minmax(180px, 0.85fr)", render: (claim) => formatMillis(claim.signedAtMs || claim.createdAtMs), }, { key: "grant", label: "钱包发放", width: "minmax(220px, 1fr)", render: (claim) => (
{claim.walletGrantId || "-"} {claim.walletCommandId || "-"}
), }, { key: "claim", label: "签到记录", width: "minmax(240px, 1fr)", render: (claim) => (
{claim.claimId} {claim.commandId || "-"}
), }, { key: "failure", label: "失败原因", width: "minmax(180px, 0.85fr)", render: (claim) => claim.failureReason || "-", }, ]; export function SevenDayCheckInPage() { const page = useSevenDayCheckInPage(); const total = page.claims.total || 0; const columns = columnsBase.map((column) => { if (column.key === "user") { return { ...column, filter: createTextColumnFilter({ placeholder: "搜索用户 ID、短号、名称", value: page.query, onChange: page.changeQuery, }), }; } if (column.key === "status") { return { ...column, filter: createOptionsColumnFilter({ options: [["", "全部状态"], ...claimStatusOptions], placeholder: "搜索状态", value: page.status, onChange: page.changeStatus, }), }; } if (column.key === "dayIndex") { return { ...column, filter: createOptionsColumnFilter({ options: [["", "全部天数"], ...dayOptions], placeholder: "搜索天数", value: page.dayIndex, onChange: page.changeDayIndex, }), }; } if (column.key === "cycle") { return { ...column, filter: createTextColumnFilter({ placeholder: "YYYY-MM-DD", value: page.checkinDay, onChange: page.changeCheckinDay, }), }; } return column; }); return ( 0 ? { page: page.page, pageSize: page.claims.pageSize || 50, total, onPageChange: page.setPage, } : undefined } rowKey={(claim) => claim.claimId} /> ); } function ClaimUser({ claim }) { const user = claim.user || {}; return ; } function ResourceGroupLabel({ groups, id }) { const group = groups.find((item) => Number(item.groupId) === Number(id)); return (
{group?.name || group?.groupCode || (id ? `#${id}` : "-")} 资源组
); } function ClaimStatus({ status }) { const tone = status === "granted" ? "running" : status === "failed" ? "danger" : "warning"; return ( {claimStatusLabel(status)} ); } function claimStatusLabel(status) { return claimStatusOptions.find(([value]) => value === status)?.[1] || status || "-"; }