From 24b9bb2d08f5555794e1465570c05042ce927c93 Mon Sep 17 00:00:00 2001 From: simonkoson <28867558@qq.com> Date: Thu, 21 May 2026 20:45:48 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=B8=89=E4=B8=AA=E5=BF=85=E4=BF=AE=20b?= =?UTF-8?q?ug=E2=80=94=E2=80=94Dashboard=20=E9=A2=9C=E8=89=B2=E5=88=A4?= =?UTF-8?q?=E5=8F=8D+legend=20=E9=94=99+SideNav=20zhipianren=20=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E7=AE=A1=E7=90=86=E6=BC=8F=E6=98=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/components/Layout/SideNav.jsx | 8 ++++++-- frontend/src/pages/Dashboard/Dashboard.jsx | 19 ++++++++++++------- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/frontend/src/components/Layout/SideNav.jsx b/frontend/src/components/Layout/SideNav.jsx index c21b2d0..5b53d19 100644 --- a/frontend/src/components/Layout/SideNav.jsx +++ b/frontend/src/components/Layout/SideNav.jsx @@ -26,13 +26,17 @@ function SideNav() { ] // 按角色过滤菜单项 + // user.role 值来自后端 /api/auth/me,应为字符串 'zhipianren' / 'zebian' / 'biandao' const visibleItems = allMenuItems.filter(item => { // /dashboard 三角色都可见 if (item.key === '/dashboard') return true // /users 仅 zhipianren - if (item.key === '/users') return user?.role === 'zhipianren' + if (item.key === '/users') return String(user?.role) === 'zhipianren' // /editor-desk 仅 zhipianren + zebian - if (item.key === '/editor-desk') return user?.role === 'zhipianren' || user?.role === 'zebian' + if (item.key === '/editor-desk') { + const role = String(user?.role) + return role === 'zhipianren' || role === 'zebian' + } // 其余三角色都可见(保留后期 Phase 入口) return true }) diff --git a/frontend/src/pages/Dashboard/Dashboard.jsx b/frontend/src/pages/Dashboard/Dashboard.jsx index 27d8346..724f98c 100644 --- a/frontend/src/pages/Dashboard/Dashboard.jsx +++ b/frontend/src/pages/Dashboard/Dashboard.jsx @@ -20,11 +20,16 @@ import './Dashboard.css' * 判色取该期 air_date 所属年份的 yearly_targets 行(不是当前年)。 */ function getShareColor(share, targets, airYear) { - const target = targets.find(t => t.year === airYear) + // 强制转数值,避免后端返回字符串导致数值比较失败 + const n = Number(share) + const target = targets.find(t => Number(t.year) === Number(airYear)) if (!target) return '#999' - if (share > target.stretch_target) return '#cf1322' // 红=优秀 - if (share >= target.base_target) return '#6b8e6b' // 蓝=达标 - return '#d4a017' // 绿=待提升 + if (isNaN(n)) return '#999' + const stretch = Number(target.stretch_target) + const base = Number(target.base_target) + if (n > stretch) return '#cf1322' // 红=超过摸高目标(优秀) + if (n >= base) return '#6b8e6b' // 蓝=未达摸高目标(达标) + return '#d4a017' // 绿=未达基础目标(待提升) } function getBarHeight(share) { @@ -181,9 +186,9 @@ function Dashboard() { })}
- 红=优秀 - 蓝=达标 - 绿=待提升 + 绿=未达基础目标(待提升) + 蓝=未达摸高目标(达标) + 红=超过摸高目标(优秀)