去掉软件标签的描边;修「全部问题」列表分类标签渲染成空

两个问题:

一、两个标签中间那道「线」
  不是 CSS 分隔符 —— 是 .badge.sw(软件徽章)带 border:1px solid var(--swc-line),
  而 .badge.cat / .badge.st 都没有边框。并排显示时那道描边看起来
  就像凭空插了一条分隔线。去掉边框,三个标签统一为无边框胶囊。

二、反馈类型(Bug / 功能建议)在后台「全部问题」列表里不显示
  🔴 根因:fb_category_label() 参数是**数字 id**,内部会 (int) 化。
     而全部问题列表传的是 $t["category"](老 slug 字段,值为 bug),
     (int)bug === 0 → 函数返回空串 → 渲染出一个**空的** badge:
     标签框在、里面什么都没有,看起来就像「类型没了」。
  修法:
    - 新增 fb_category_label_by_slug($softwareId, $slug) 给老数据兜底
      (slug 在不同软件下可能重名,必须带 software_id)
    - 全部问题列表改用 category_id 优先、slug 兜底
    - 前台列表同样处理,并且**取不到名字就不渲染这个标签**,
      绝不再输出空胶囊
    - 在 fb_category_label() 的注释里写明「必须传数字 id」,
      避免下次再踩

验证:
  函数对照跑通:#4 category_id=6 → Bug;#5 category_id=7 → 功能建议;
  旧写法 fb_category_label("bug") → (空),确认这就是根因。
  浏览器实测详情页三个标签 border-top-width 全部 0px / style none,
  圆角都是 999px,描边已消除。
  前台列表两个条目分类标签分别渲染出 Bug / 功能建议,不再是空。
  7 个路由全 200。
This commit is contained in:
2026-11-03 20:50:00 +08:00
parent dcf510ef28
commit 974dd52367
5 changed files with 48 additions and 5 deletions
+23 -1
View File
@@ -486,7 +486,11 @@ function fb_category_by_slug($softwareId, $slug) {
return $r ? $r : null;
}
/** 分类显示名:只给 id 就能拿到名字(列表渲染用) */
/** 分类显示名:只给 id 就能拿到名字(列表渲染用)
*
* ⚠️ 参数必须是**数字 id**。传字符串 slug(如 'bug')会被 (int) 成 0 而返回空串,
* 调用方如果不判空就会渲染出一个空标签 —— 这个坑踩过(见 admin.php 全部问题列表)。
* 需要按 slug 取名字请用 fb_category_label_by_slug()。 */
function fb_category_label($id) {
if (!$id) { return ''; }
static $cache = [];
@@ -498,6 +502,24 @@ function fb_category_label($id) {
return $cache[$id];
}
/**
* 按「软件 + slug」取分类显示名 —— 给只存了老 slug 字段的历史数据兜底。
* slug 在不同软件下可能重名,所以必须带上 software_id 才能定位。
*/
function fb_category_label_by_slug($softwareId, $slug) {
$slug = trim((string)$slug);
if ($slug === '') { return ''; }
if ((int)$softwareId > 0) {
$c = fb_category_by_slug((int)$softwareId, $slug);
if ($c) { return (string)$c['name']; }
}
// 实在定不到软件(老数据 software_id 为空)时,按 slug 全局找一个
$st = fb_db()->prepare('SELECT name FROM categories WHERE slug = ? LIMIT 1');
$st->execute([$slug]);
$nm = $st->fetchColumn();
return $nm !== false ? (string)$nm : '';
}
/** 全部状态(按排序) */
function fb_statuses($onlyEnabled = true) {
$sql = 'SELECT * FROM statuses';