diff --git a/admin.php b/admin.php index 1527b06..b01f961 100644 --- a/admin.php +++ b/admin.php @@ -766,7 +766,17 @@ fb_layout_head('管理后台', ['robots' => 'noindex,nofollow']);
- + 。 + * 用户 2026-11-03 看到的就是「反馈类型没了」。 + * 优先 category_id,没有才回退 slug(老数据兼容)。 */ + $aCat = !empty($t['category_id']) + ? fb_category_label((int)$t['category_id']) + : fb_category_label_by_slug((int)$t['software_id'], (string)$t['category']); + ?> + 未公开
diff --git a/assets/style.css b/assets/style.css index c61a55e..9a766b0 100644 --- a/assets/style.css +++ b/assets/style.css @@ -599,7 +599,10 @@ main.wrap{padding-top:24px; padding-bottom:40px; min-height:60vh} .badge.sw{ display:inline-flex; align-items:center; gap:5px; background:var(--swc-soft, #eef2f8); color:var(--swc, #2b4a74); - border:1px solid var(--swc-line, #cfdcee); font-weight:600; + /* ⚠️ 不要加 border —— 用户 2026-11-03 指出「两个标签中间加个线干嘛」。 + * 分类/状态标签都没有边框,只有软件标签有,并排显示时那道描边 + * 看起来就像凭空插了一条分隔线。统一成无边框的胶囊。 */ + font-weight:600; padding:1px 9px 1px 6px; } .badge.sw .badge-sw-ic{ diff --git a/index.php b/index.php index cd15cab..0f511da 100644 --- a/index.php +++ b/index.php @@ -166,7 +166,15 @@ if (!$sw): #
- + +

diff --git a/lib/bootstrap.php b/lib/bootstrap.php index 8e0f27d..8a03a64 100644 --- a/lib/bootstrap.php +++ b/lib/bootstrap.php @@ -8,7 +8,7 @@ if (!defined('FB_ROOT')) { define('FB_ROOT', dirname(__DIR__)); // 静态资源版本号:改 assets/ 下的 css/js 后把这个数字 +1, // 让浏览器与 CDN 缓存失效。全站只此一处,别再往页面里写死数字。 - if (!defined('FB_ASSET_V')) { define('FB_ASSET_V', 37); } + if (!defined('FB_ASSET_V')) { define('FB_ASSET_V', 38); } } /* ------------------------------------------------------------------ diff --git a/lib/util.php b/lib/util.php index cacbdfa..bb47338 100644 --- a/lib/util.php +++ b/lib/util.php @@ -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';