该列的任务(键 0 = 没有看板归属的兜底列) * @param array $boards 看板清单(顺序即列顺序) * @param array $people 名册(选负责人 / 共享给别人) */ $canWrite = \App\Auth::canWrite(); $boards = $boards ?? []; $cols = $cols ?? []; $categories = $categories ?? []; /* 列清单:先按 boards 的顺序,最后补上兜底列(键 0,且只在真有任务时才画)。 ⚠️ 兜底列的标题不能叫「未分类」——「分类」在任务模块里是另一回事(task_categories), 叫「未分类」会让人以为是按分类分的列。这里它表示"还没归到任何看板",叫「其他」。 */ $colList = []; foreach ($boards as $b) { $bid = (int)$b['id']; /* 🔴 v24 第 26 批 用户第 3 条:列头带上**看板色**。 用户要的是"一眼看出属于哪个看板" —— 列头本身就是一个看板, 给它一个色点,比只在卡片上标色更直观(卡片散落各处,列头是它们的归属地)。 */ $colList[] = [ 'id' => $bid, 'name' => (string)$b['name'], 'color' => \App\Task::boardColor($b['color'] ?? null, (string)$b['name']), 'rows' => $cols[$bid] ?? [], ]; } if (!empty($cols[0])) { $colList[] = ['id' => 0, 'name' => '其他', 'color' => '', 'rows' => $cols[0]]; } // 一个看板都没有(也不该发生:ensureDefaultBoard 保证至少一个)→ 给一句人话 if (!$colList) { $colList[] = ['id' => 0, 'name' => '任务', 'color' => '', 'rows' => $cols[0] ?? []]; } $firstColId = (int)($colList[0]['id'] ?? 0); $lastColIdx = count($colList) - 1; ?>

任务

项在做 1 ? ',' . count($boards) . ' 个看板' : '' ?>
只读账号
$sv): ?>
$col): $cid = (int)$col['id']; ?>
'doing', 'doing' => 'done', 'done' => 'todo'][$stNow] ?? 'doing'; ?>
0): ?> 💬 0): ?> 📎
0): ?>
/
(int)$t['assignee_id'], 'name' => (string)$t['assignee_name'], 'my_nickname' => (string)($t['assignee_nick'] ?? ''), 'avatar' => $t['avatar'] ?? null, 'avatar_color' => $t['avatar_color'] ?? null, ]) ?> 0): ?>

这一列是空的