From 1c4cbd84e5b81d250f6b6592ace8d3fa7cf7d19e Mon Sep 17 00:00:00 2001 From: simonkoson <28867558@qq.com> Date: Fri, 3 Jul 2026 10:17:52 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E6=8F=90=E5=8F=96=E6=94=B6?= =?UTF-8?q?=E8=A7=86=E9=A2=9C=E8=89=B2=E5=87=BD=E6=95=B0=E5=88=B0=E5=85=AC?= =?UTF-8?q?=E5=85=B1=20utils?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/pages/Dashboard/Dashboard.jsx | 31 +-------------- frontend/src/utils/ratingColors.js | 44 ++++++++++++++++++++++ 2 files changed, 45 insertions(+), 30 deletions(-) create mode 100644 frontend/src/utils/ratingColors.js diff --git a/frontend/src/pages/Dashboard/Dashboard.jsx b/frontend/src/pages/Dashboard/Dashboard.jsx index 2e7bbdf..843cdd7 100644 --- a/frontend/src/pages/Dashboard/Dashboard.jsx +++ b/frontend/src/pages/Dashboard/Dashboard.jsx @@ -14,39 +14,10 @@ import useAuthStore from '../../stores/authStore' import { listEpisodes } from '../../services/episodeService' import { listTargets } from '../../services/yearlyTargetService' import { getCurrentCover, getUpcomingSchedules } from '../../services/dashboardService' +import { getShareColor, getColorLabel } from '../../utils/ratingColors' import ChangeCoverModal from './ChangeCoverModal' import './Dashboard.css' -/** - * 收视份额颜色判定(极易写反,禁止凭直觉): - * audience_share > stretch_target → 🔴 红(优秀) - * base_target ≤ audience_share ≤ stretch_target → 🔵 蓝(达标) - * audience_share < base_target → 🟢 绿(待提升) - * 判色取该期 air_date 所属年份的 yearly_targets 行(不是当前年)。 - */ -function getShareColor(share, targets, airYear) { - const n = Number(share) - const target = (targets || []).find(t => Number(t.year) === Number(airYear)) - if (!target) return '#999' - if (isNaN(n)) return '#999' - const stretch = Number(target.stretch_target) - const base = Number(target.base_target) - if (n > stretch) return '#c0584f' // 红=超过摸高目标(优秀) - if (n >= base) return '#5b8db8' // 蓝=未达摸高目标(达标) - return '#7aa874' // 绿=未达基础目标(待提升) -} - -function getColorLabel(share, targets, airYear) { - const n = Number(share) - const target = (targets || []).find(t => Number(t.year) === Number(airYear)) - if (!target) return '未知' - const stretch = Number(target.stretch_target) - const base = Number(target.base_target) - if (n > stretch) return '优秀' - if (n >= base) return '达标' - return '待提升' -} - function getBarHeight(share) { return Math.round((Number(share) / 1.0) * 160) } diff --git a/frontend/src/utils/ratingColors.js b/frontend/src/utils/ratingColors.js new file mode 100644 index 0000000..1c5378b --- /dev/null +++ b/frontend/src/utils/ratingColors.js @@ -0,0 +1,44 @@ +/** + * 收视份额颜色判定(极易写反,禁止凭直觉): + * audience_share > stretch_target → 🔴 红(优秀) + * base_target ≤ audience_share ≤ stretch_target → 🔵 蓝(达标) + * audience_share < base_target → 🟢 绿(待提升) + * 判色取该期 air_date 所属年份的 yearly_targets 行(不是当前年)。 + */ + +/** + * 根据收视份额和年度目标返回对应的颜色代码 + * @param {number|null} share - 收视份额 + * @param {Array} targets - 年度目标数组 + * @param {number} airYear - 播出年份 + * @returns {string} 颜色代码 + */ +export function getShareColor(share, targets, airYear) { + const n = Number(share) + const target = (targets || []).find(t => Number(t.year) === Number(airYear)) + if (!target) return '#999' + if (isNaN(n)) return '#999' + const stretch = Number(target.stretch_target) + const base = Number(target.base_target) + if (n > stretch) return '#c0584f' // 红=超过摸高目标(优秀) + if (n >= base) return '#5b8db8' // 蓝=未达摸高目标(达标) + return '#7aa874' // 绿=未达基础目标(待提升) +} + +/** + * 根据收视份额和年度目标返回颜色标签 + * @param {number|null} share - 收视份额 + * @param {Array} targets - 年度目标数组 + * @param {number} airYear - 播出年份 + * @returns {string} 颜色标签 + */ +export function getColorLabel(share, targets, airYear) { + const n = Number(share) + const target = (targets || []).find(t => Number(t.year) === Number(airYear)) + if (!target) return '未知' + const stretch = Number(target.stretch_target) + const base = Number(target.base_target) + if (n > stretch) return '优秀' + if (n >= base) return '达标' + return '待提升' +} \ No newline at end of file