feat(tasks): 任务页右上角信息面板 —— 说明/总数/轮播倒计时/页码

- TaskDisplay.jsx:右上角加 总数、翻页倒计时(s, 每秒递减翻页时复位)、页码 x/y、接单方式说明。
- task-display.css 加 tasks-head-info / tasks-info-* 样式。

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Pine
2026-08-25 19:55:36 +08:00
parent 953441806d
commit b121eb748b
2 changed files with 35 additions and 1 deletions
+15 -1
View File
@@ -42,12 +42,20 @@ export default function TaskDisplay() {
const pageSize = cols * ROWS; // 2×2=4 或 2×3=6
const pageCount = Math.max(1, Math.ceil(tasks.length / pageSize));
const [countdown, setCountdown] = useState(Math.round(ROTATE_MS / 1000));
useEffect(() => {
if (pageCount <= 1) { setPage(0); return; }
const t = setInterval(() => setPage((p) => (p + 1) % pageCount), ROTATE_MS);
return () => clearInterval(t);
}, [pageCount]);
// 轮播倒计时:每秒递减,翻页时重置(页数或页变更即复位)
useEffect(() => { setCountdown(Math.round(ROTATE_MS / 1000)); }, [page, pageCount]);
useEffect(() => {
const t = setInterval(() => setCountdown((c) => (c > 0 ? c - 1 : 0)), 1000);
return () => clearInterval(t);
}, []);
const visible = useMemo(() => {
if (tasks.length === 0) return [];
const start = page * pageSize;
@@ -62,7 +70,13 @@ export default function TaskDisplay() {
<span className="tasks-head-dot" />
<span className="tasks-head-title">系统任务中心</span>
<span className="tasks-head-sub">扫码即可接单 · 园区企业发标 · 合伙人接单</span>
<span className="tasks-head-count">{tasks.length} 个任务</span>
{/* 右上角信息面板:说明 / 总数 / 轮播倒计时 / 页码 */}
<div className="tasks-head-info">
<div className="tasks-info-item"><span className="tasks-info-label">总数</span><span className="tasks-info-val">{tasks.length}</span></div>
<div className="tasks-info-item"><span className="tasks-info-label">翻页</span><span className="tasks-info-val">{pageCount > 1 ? `${countdown}s` : '—'}</span></div>
<div className="tasks-info-item"><span className="tasks-info-label">页码</span><span className="tasks-info-val">{pageCount > 1 ? `${page + 1}/${pageCount}` : '1/1'}</span></div>
<div className="tasks-info-hint">接单方式:抢单 / 竞标 / 指派 / 推荐</div>
</div>
</div>
{loading && tasks.length === 0 ? (
+20
View File
@@ -28,6 +28,26 @@
.tasks-head-sub { font-size: 13px; color: var(--bd-sub, #7d8fa9); }
.tasks-head-count { margin-left: auto; font-size: 13px; color: var(--bd-blue, #2f6bff); font-weight: 600; }
/* 右上角信息面板(说明 / 总数 / 轮播倒计时 / 页码) */
.tasks-head-info {
margin-left: auto;
display: flex;
align-items: center;
gap: 12px;
}
.tasks-info-item {
display: flex; flex-direction: column; align-items: center; gap: 2px;
min-width: 46px; padding: 6px 10px; border-radius: 10px;
background: rgba(47, 107, 255, 0.08); border: 1px solid rgba(47, 107, 255, 0.14);
}
.tasks-info-label { font-size: 10px; color: var(--bd-sub, #7d8fa9); letter-spacing: 0.4px; }
.tasks-info-val { font-size: 17px; font-weight: 700; color: var(--bd-blue, #2f6bff); line-height: 1; }
.tasks-info-hint {
font-size: 11px; color: var(--bd-sub, #7d8fa9);
padding: 6px 10px; border-radius: 10px; background: rgba(29, 44, 68, 0.05);
white-space: nowrap;
}
.tasks-loading {
color: var(--bd-sub, #7d8fa9); font-size: 15px;
display: flex; align-items: center; justify-content: center; height: 60%;