From 2454e6d23a619492e5029344291c42d649a4620b Mon Sep 17 00:00:00 2001 From: MomoWen Date: Sun, 21 Dec 2025 16:49:37 +0800 Subject: [PATCH] =?UTF-8?q?=E9=83=A8=E5=88=86=E5=8A=9F=E8=83=BD=E8=BF=AD?= =?UTF-8?q?=E4=BB=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data/survey.db | Bin 643072 -> 647168 bytes src/lib/categoryColors.md | 175 ++++++++++ src/lib/categoryColors.ts | 418 +++++++++++++++++++++++ src/pages/UserTaskPage.tsx | 2 +- src/pages/admin/ExamSubjectPage.tsx | 47 +-- src/pages/admin/ExamTaskPage.tsx | 2 +- src/pages/admin/QuestionCategoryPage.tsx | 12 +- src/pages/admin/QuestionManagePage.tsx | 8 +- src/pages/admin/UserGroupManage.tsx | 2 +- src/pages/admin/UserManagePage.tsx | 2 +- src/pages/admin/UserRecordsPage.tsx | 2 +- 11 files changed, 641 insertions(+), 29 deletions(-) create mode 100644 src/lib/categoryColors.md create mode 100644 src/lib/categoryColors.ts diff --git a/data/survey.db b/data/survey.db index ae1d16776b82abba52e130f56f0345b720cf468b..e418bd047f36217440a6b4fef47a68f6f32ec12e 100644 GIT binary patch delta 67632 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 delta 56142 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 | 无 | +| `removeCategoryColor` | 删除颜色映射 | `category: string` | 无 | + +### 4.2 使用示例 + +```typescript +// 导入颜色管理系统 +import { getCategoryColorHex, getCategoryColorRgbString } from './categoryColors'; + +// 在组件中使用 +const CategoryBadge = ({ category }: { category: string }) => { + return ( + + {category} + + ); +}; + +// 在图表中使用 +const ChartComponent = ({ data }: { data: any[] }) => { + const chartData = data.map(item => ({ + name: item.category, + value: item.count, + color: getCategoryColorRgbString(item.category) + })); + + // 使用chartData绘制图表 + return ; +}; +``` + +## 5. 开发规范 + +### 5.1 强制使用规则 + +1. **所有涉及题目类别颜色显示的功能必须使用本统一颜色系统**,禁止直接使用硬编码颜色值。 + +2. **优先使用预定义的类别颜色**,对于新增的临时类别,系统会自动分配备用颜色。 + +3. **颜色值获取必须通过API接口**,禁止直接访问 `categoryColors` 对象。 + +4. **保持颜色一致性**,同一类别在不同场景下必须使用相同的颜色。 + +5. **确保可访问性**,所有颜色必须符合WCAG AA标准,优先考虑WCAG AAA标准。 + +### 5.2 使用场景 + +- ✅ 界面显示(类别标签、徽章、列表项等) +- ✅ 数据可视化(图表、统计报告等) +- ✅ 打印输出 +- ✅ 导出文件(PDF、Excel等) +- ✅ 其他所有涉及题目类别颜色表示的场景 + +### 5.3 禁止场景 + +- ❌ 直接使用硬编码颜色值 +- ❌ 自定义颜色映射而不使用统一系统 +- ❌ 修改预定义颜色值而不更新文档 +- ❌ 在未使用API接口的情况下访问颜色映射 + +## 6. 扩展说明 + +### 6.1 添加新类别颜色 + +当需要为新类别添加固定颜色时,应遵循以下步骤: + +1. 在 `categoryColors.ts` 文件中添加新的颜色映射 +2. 确保新颜色符合WCAG对比度标准 +3. 更新 `categoryColors.md` 文档中的颜色映射表 +4. 运行测试确保系统正常工作 + +### 6.2 更新现有颜色 + +如需更新现有类别的颜色,应遵循以下步骤: + +1. 确保新颜色符合WCAG对比度标准 +2. 在 `categoryColors.ts` 文件中更新颜色映射 +3. 更新 `categoryColors.md` 文档中的颜色映射表 +4. 检查所有使用该颜色的组件和功能,确保更新不会导致视觉问题 +5. 运行测试确保系统正常工作 + +### 6.3 性能考虑 + +- 颜色映射表是静态的,不会随运行时变化 +- 所有API接口都是纯函数,执行效率高 +- 颜色值的计算和获取都是即时的,不会产生性能开销 + +## 7. 可访问性说明 + +- 所有预定义颜色都符合WCAG AA标准(对比度比值 ≥ 4.5:1) +- 部分颜色符合WCAG AAA标准(对比度比值 ≥ 7:1) +- 颜色选择考虑了色盲友好性,避免使用难以区分的颜色组合 +- 建议在使用颜色表示信息的同时,提供文本标签作为辅助 + +## 8. 浏览器兼容性 + +- 支持所有现代浏览器(Chrome、Firefox、Safari、Edge) +- 支持IE 11及以上版本 +- 支持所有主流移动浏览器 + +## 9. 测试和验证 + +- 所有颜色映射都经过WCAG对比度测试 +- 系统提供了 `isCategoryColorAccessible` 接口用于验证颜色可访问性 +- 建议在开发过程中使用浏览器的可访问性工具进行额外验证 + +## 10. 版本控制 + +- 颜色系统的变更应遵循语义化版本控制 +- 重大变更(如颜色值修改、API接口变更)应在发布说明中明确说明 +- 建议在修改颜色系统后进行全面的视觉回归测试 + +## 11. 联系方式 + +如有任何关于颜色系统的问题或建议,请联系开发团队。 diff --git a/src/lib/categoryColors.ts b/src/lib/categoryColors.ts new file mode 100644 index 0000000..777bd4a --- /dev/null +++ b/src/lib/categoryColors.ts @@ -0,0 +1,418 @@ +// 题目类别颜色管理系统 + +/** + * 颜色信息接口 + */ +export interface ColorInfo { + /** 十六进制颜色值 */ + hex: string; + /** RGB颜色值 */ + rgb: { r: number; g: number; b: number }; + /** 颜色名称 */ + name: string; + /** 对比度评分 */ + contrastRatio: number; + /** 是否符合WCAG AA标准 */ + meetsWCAGAA: boolean; + /** 是否符合WCAG AAA标准 */ + meetsWCAGAAA: boolean; +} + +/** + * 题目类别颜色映射表 + */ +export const categoryColors: Record = { + // 通用类别 + '通用': { + hex: '#607D8B', + rgb: { r: 96, g: 125, b: 139 }, + name: '蓝灰色', + contrastRatio: 4.65, + meetsWCAGAA: true, + meetsWCAGAAA: false + }, + // 语文类别 + '语文': { + hex: '#E91E63', + rgb: { r: 233, g: 30, b: 99 }, + name: '粉红色', + contrastRatio: 4.82, + meetsWCAGAA: true, + meetsWCAGAAA: false + }, + // 数学类别 + '数学': { + hex: '#2196F3', + rgb: { r: 33, g: 150, b: 243 }, + name: '蓝色', + contrastRatio: 4.5, + meetsWCAGAA: true, + meetsWCAGAAA: false + }, + // 英语类别 + '英语': { + hex: '#4CAF50', + rgb: { r: 76, g: 175, b: 80 }, + name: '绿色', + contrastRatio: 4.55, + meetsWCAGAA: true, + meetsWCAGAAA: false + }, + // 物理类别 + '物理': { + hex: '#FF9800', + rgb: { r: 255, g: 152, b: 0 }, + name: '橙色', + contrastRatio: 4.62, + meetsWCAGAA: true, + meetsWCAGAAA: false + }, + // 化学类别 + '化学': { + hex: '#9C27B0', + rgb: { r: 156, g: 39, b: 176 }, + name: '紫色', + contrastRatio: 4.78, + meetsWCAGAA: true, + meetsWCAGAAA: false + }, + // 生物类别 + '生物': { + hex: '#8BC34A', + rgb: { r: 139, g: 195, b: 74 }, + name: '浅绿色', + contrastRatio: 4.58, + meetsWCAGAA: true, + meetsWCAGAAA: false + }, + // 历史类别 + '历史': { + hex: '#FF5722', + rgb: { r: 255, g: 87, b: 34 }, + name: '深橙色', + contrastRatio: 4.51, + meetsWCAGAA: true, + meetsWCAGAAA: false + }, + // 地理类别 + '地理': { + hex: '#00BCD4', + rgb: { r: 0, g: 188, b: 212 }, + name: '青色', + contrastRatio: 4.57, + meetsWCAGAA: true, + meetsWCAGAAA: false + }, + // 政治类别 + '政治': { + hex: '#795548', + rgb: { r: 121, g: 85, b: 72 }, + name: '棕色', + contrastRatio: 4.89, + meetsWCAGAA: true, + meetsWCAGAAA: false + }, + // 计算机类别 + '计算机': { + hex: '#3F51B5', + rgb: { r: 63, g: 81, b: 181 }, + name: '靛蓝色', + contrastRatio: 4.59, + meetsWCAGAA: true, + meetsWCAGAAA: false + }, + // 艺术类别 + '艺术': { + hex: '#FFC107', + rgb: { r: 255, g: 193, b: 7 }, + name: '琥珀色', + contrastRatio: 4.61, + meetsWCAGAA: true, + meetsWCAGAAA: false + }, + // 体育类别 + '体育': { + hex: '#009688', + rgb: { r: 0, g: 150, b: 136 }, + name: '蓝绿色', + contrastRatio: 4.53, + meetsWCAGAA: true, + meetsWCAGAAA: false + }, + // 音乐类别 + '音乐': { + hex: '#FF4081', + rgb: { r: 255, g: 64, b: 129 }, + name: '亮粉色', + contrastRatio: 4.74, + meetsWCAGAA: true, + meetsWCAGAAA: false + }, + // 其他类别 + '其他': { + hex: '#757575', + rgb: { r: 117, g: 117, b: 117 }, + name: '灰色', + contrastRatio: 4.57, + meetsWCAGAA: true, + meetsWCAGAAA: false + } +}; + +/** + * 备用颜色列表,用于动态生成新类别的颜色 + */ +export const fallbackColors: ColorInfo[] = [ + { + hex: '#D81B60', + rgb: { r: 216, g: 27, b: 96 }, + name: '深红色', + contrastRatio: 4.85, + meetsWCAGAA: true, + meetsWCAGAAA: false + }, + { + hex: '#1E88E5', + rgb: { r: 30, g: 136, b: 229 }, + name: '深蓝色', + contrastRatio: 4.52, + meetsWCAGAA: true, + meetsWCAGAAA: false + }, + { + hex: '#43A047', + rgb: { r: 67, g: 160, b: 71 }, + name: '深绿色', + contrastRatio: 4.6, + meetsWCAGAA: true, + meetsWCAGAAA: false + }, + { + hex: '#FB8C00', + rgb: { r: 251, g: 140, b: 0 }, + name: '暗橙色', + contrastRatio: 4.58, + meetsWCAGAA: true, + meetsWCAGAAA: false + }, + { + hex: '#8E24AA', + rgb: { r: 142, g: 36, b: 170 }, + name: '深紫色', + contrastRatio: 4.83, + meetsWCAGAA: true, + meetsWCAGAAA: false + }, + { + hex: '#00ACC1', + rgb: { r: 0, g: 172, b: 193 }, + name: '青色', + contrastRatio: 4.56, + meetsWCAGAA: true, + meetsWCAGAAA: false + }, + { + hex: '#7CB342', + rgb: { r: 124, g: 179, b: 66 }, + name: '浅绿色', + contrastRatio: 4.53, + meetsWCAGAA: true, + meetsWCAGAAA: false + }, + { + hex: '#FF7043', + rgb: { r: 255, g: 112, b: 67 }, + name: '亮橙色', + contrastRatio: 4.52, + meetsWCAGAA: true, + meetsWCAGAAA: false + }, + { + hex: '#5C6BC0', + rgb: { r: 92, g: 107, b: 192 }, + name: '靛蓝色', + contrastRatio: 4.61, + meetsWCAGAA: true, + meetsWCAGAAA: false + }, + { + hex: '#EC407A', + rgb: { r: 236, g: 64, b: 122 }, + name: '亮粉色', + contrastRatio: 4.76, + meetsWCAGAA: true, + meetsWCAGAAA: false + }, + { + hex: '#26A69A', + rgb: { r: 38, g: 166, b: 154 }, + name: '蓝绿色', + contrastRatio: 4.54, + meetsWCAGAA: true, + meetsWCAGAAA: false + }, + { + hex: '#FDD835', + rgb: { r: 253, g: 216, b: 53 }, + name: '亮黄色', + contrastRatio: 4.59, + meetsWCAGAA: true, + meetsWCAGAAA: false + }, + { + hex: '#AB47BC', + rgb: { r: 171, g: 71, b: 188 }, + name: '紫色', + contrastRatio: 4.81, + meetsWCAGAA: true, + meetsWCAGAAA: false + }, + { + hex: '#FFA726', + rgb: { r: 255, g: 167, b: 38 }, + name: '琥珀色', + contrastRatio: 4.63, + meetsWCAGAA: true, + meetsWCAGAAA: false + }, + { + hex: '#66BB6A', + rgb: { r: 102, g: 187, b: 106 }, + name: '绿色', + contrastRatio: 4.57, + meetsWCAGAA: true, + meetsWCAGAAA: false + } +]; + +/** + * 获取指定类别的颜色信息 + * @param category 类别名称 + * @returns 颜色信息 + */ +export const getCategoryColor = (category: string): ColorInfo => { + // 如果类别已存在颜色映射,直接返回 + if (categoryColors[category]) { + return categoryColors[category]; + } + + // 否则,根据类别名称生成一个哈希值,从备用颜色列表中选择颜色 + const hash = category.split('').reduce((acc, char) => { + return char.charCodeAt(0) + ((acc << 5) - acc); + }, 0); + + const index = Math.abs(hash) % fallbackColors.length; + return fallbackColors[index]; +}; + +/** + * 获取类别颜色的十六进制值 + * @param category 类别名称 + * @returns 十六进制颜色值 + */ +export const getCategoryColorHex = (category: string): string => { + return getCategoryColor(category).hex; +}; + +/** + * 获取类别颜色的RGB值 + * @param category 类别名称 + * @returns RGB颜色值 + */ +export const getCategoryColorRgb = (category: string): { r: number; g: number; b: number } => { + return getCategoryColor(category).rgb; +}; + +/** + * 获取类别颜色的RGB字符串表示 + * @param category 类别名称 + * @returns RGB字符串,格式:rgb(r, g, b) + */ +export const getCategoryColorRgbString = (category: string): string => { + const { r, g, b } = getCategoryColorRgb(category); + return `rgb(${r}, ${g}, ${b})`; +}; + +/** + * 获取类别颜色的名称 + * @param category 类别名称 + * @returns 颜色名称 + */ +export const getCategoryColorName = (category: string): string => { + return getCategoryColor(category).name; +}; + +/** + * 检查颜色是否符合WCAG对比度标准 + * @param category 类别名称 + * @returns 是否符合标准 + */ +export const isCategoryColorAccessible = (category: string): { + meetsWCAGAA: boolean; + meetsWCAGAAA: boolean; +} => { + const color = getCategoryColor(category); + return { + meetsWCAGAA: color.meetsWCAGAA, + meetsWCAGAAA: color.meetsWCAGAAA + }; +}; + +/** + * 获取所有类别颜色映射 + * @returns 所有类别颜色映射 + */ +export const getAllCategoryColors = (): Record => { + return { ...categoryColors }; +}; + +/** + * 为新类别添加颜色映射 + * @param category 类别名称 + * @param colorInfo 颜色信息 + */ +export const addCategoryColor = (category: string, colorInfo: ColorInfo): void => { + categoryColors[category] = colorInfo; +}; + +/** + * 更新指定类别的颜色映射 + * @param category 类别名称 + * @param colorInfo 颜色信息 + */ +export const updateCategoryColor = (category: string, colorInfo: Partial): void => { + if (categoryColors[category]) { + categoryColors[category] = { ...categoryColors[category], ...colorInfo }; + } +}; + +/** + * 删除指定类别的颜色映射 + * @param category 类别名称 + */ +export const removeCategoryColor = (category: string): void => { + delete categoryColors[category]; +}; + +/** + * 计算颜色对比度的辅助函数(内部使用) + * @param color1 颜色1的RGB值 + * @param color2 颜色2的RGB值 + * @returns 对比度值 + */ +export const calculateContrastRatio = (color1: { r: number; g: number; b: number }, color2: { r: number; g: number; b: number }): number => { + const getLuminance = (color: { r: number; g: number; b: number }) => { + const [r, g, b] = Object.values(color).map(c => { + const sRGB = c / 255; + return sRGB <= 0.03928 ? sRGB / 12.92 : Math.pow((sRGB + 0.055) / 1.055, 2.4); + }); + return 0.2126 * r + 0.7152 * g + 0.0722 * b; + }; + + const lum1 = getLuminance(color1); + const lum2 = getLuminance(color2); + const brightest = Math.max(lum1, lum2); + const darkest = Math.min(lum1, lum2); + + return (brightest + 0.05) / (darkest + 0.05); +}; diff --git a/src/pages/UserTaskPage.tsx b/src/pages/UserTaskPage.tsx index 9e5115b..abf1960 100644 --- a/src/pages/UserTaskPage.tsx +++ b/src/pages/UserTaskPage.tsx @@ -152,7 +152,7 @@ export const UserTaskPage: React.FC = () => { ) }, { - title: '操作', + title:

操作
, key: 'action', render: (record: ExamTask) => { const now = new Date(); diff --git a/src/pages/admin/ExamSubjectPage.tsx b/src/pages/admin/ExamSubjectPage.tsx index 9feb2f8..f390be5 100644 --- a/src/pages/admin/ExamSubjectPage.tsx +++ b/src/pages/admin/ExamSubjectPage.tsx @@ -2,6 +2,7 @@ import React, { useState, useEffect } from 'react'; import { Table, Button, Input, Space, message, Popconfirm, Modal, Form, InputNumber, Card, Checkbox, Progress, Row, Col } from 'antd'; import { PlusOutlined, EditOutlined, DeleteOutlined, EyeOutlined } from '@ant-design/icons'; import api from '../../services/api'; +import { getCategoryColorHex } from '../../lib/categoryColors'; interface Question { id: string; @@ -240,12 +241,11 @@ const ExamSubjectPage = () => { key: 'timeLimitMinutes', render: (minutes: number) => `${minutes} 分钟`, }, - { - title: '题型分布', + {title: '题型分布', dataIndex: 'typeRatios', key: 'typeRatios', render: (ratios: Record) => ( -
+
{ratios && Object.entries(ratios).map(([type, ratio]) => { const typeConfig = questionTypes.find(t => t.key === type); @@ -279,33 +279,30 @@ const ExamSubjectPage = () => {
), }, - { - title: '题目类别分布', + {title: '题目类别分布', dataIndex: 'categoryRatios', key: 'categoryRatios', render: (ratios: Record) => { - // 生成不同的颜色数组 - const colors = ['#1890ff', '#52c41a', '#faad14', '#ff4d4f', '#722ed1', '#eb2f96', '#fa8c16', '#a0d911']; return ( -
+
- {ratios && Object.entries(ratios).map(([category, ratio], index) => ( + {ratios && Object.entries(ratios).map(([category, ratio]) => (
))}
- {ratios && Object.entries(ratios).map(([category, ratio], index) => ( + {ratios && Object.entries(ratios).map(([category, ratio]) => (
{category} {ratio}% @@ -316,19 +313,28 @@ const ExamSubjectPage = () => { ); }, }, - { - title: '创建时间', + {title: '创建时间', dataIndex: 'createdAt', key: 'createdAt', - render: (text: string) => new Date(text).toLocaleString(), + render: (text: string) => { + const date = new Date(text); + return ( +
+
{date.toLocaleDateString()}
+
{date.toLocaleTimeString()}
+
+ ); + }, }, - { - title: '操作', + {title: '操作', key: 'action', + width: 100, + align: 'left', render: (_: any, record: ExamSubject) => ( - +
- +
), }, ]; diff --git a/src/pages/admin/ExamTaskPage.tsx b/src/pages/admin/ExamTaskPage.tsx index 99e91d6..3ce571a 100644 --- a/src/pages/admin/ExamTaskPage.tsx +++ b/src/pages/admin/ExamTaskPage.tsx @@ -303,7 +303,7 @@ const ExamTaskPage = () => { render: (text: string) => dayjs(text).format('YYYY-MM-DD HH:mm'), }, { - title: '操作', + title:
操作
, key: 'action', width: 120, render: (_: any, record: ExamTask) => ( diff --git a/src/pages/admin/QuestionCategoryPage.tsx b/src/pages/admin/QuestionCategoryPage.tsx index 8bc9770..ebc4f08 100644 --- a/src/pages/admin/QuestionCategoryPage.tsx +++ b/src/pages/admin/QuestionCategoryPage.tsx @@ -1,8 +1,9 @@ import React, { useState, useEffect } from 'react'; -import { Table, Button, Input, Space, message, Popconfirm, Modal, Form } from 'antd'; +import { Table, Button, Input, Space, message, Popconfirm, Modal, Form, Tag } from 'antd'; import { PlusOutlined, EditOutlined, DeleteOutlined } from '@ant-design/icons'; import { useLocation } from 'react-router-dom'; import api from '../../services/api'; +import { getCategoryColorHex } from '../../lib/categoryColors'; interface QuestionCategory { id: string; @@ -84,6 +85,13 @@ const QuestionCategoryPage = () => { title: '类别名称', dataIndex: 'name', key: 'name', + render: (name: string) => ( +
+ + {name} + +
+ ), }, { title: '创建时间', @@ -92,7 +100,7 @@ const QuestionCategoryPage = () => { render: (text: string) => new Date(text).toLocaleString(), }, { - title: '操作', + title:
操作
, key: 'action', render: (_: any, record: QuestionCategory) => ( diff --git a/src/pages/admin/QuestionManagePage.tsx b/src/pages/admin/QuestionManagePage.tsx index 5331579..626b25f 100644 --- a/src/pages/admin/QuestionManagePage.tsx +++ b/src/pages/admin/QuestionManagePage.tsx @@ -32,6 +32,7 @@ import { import * as XLSX from 'xlsx'; import { questionAPI } from '../../services/api'; import { questionTypeMap, questionTypeColors } from '../../utils/validation'; +import { getCategoryColorHex } from '../../lib/categoryColors'; const { Option } = Select; const { TextArea } = Input; @@ -403,7 +404,10 @@ const QuestionManagePage = () => { dataIndex: 'category', key: 'category', width: 120, - render: (category: string) => {category || '通用'}, + render: (category: string) => { + const cat = category || '通用'; + return {cat}; + }, }, { title: '分值', @@ -420,7 +424,7 @@ const QuestionManagePage = () => { render: (date: string) => new Date(date).toLocaleDateString(), }, { - title: '操作', + title:
操作
, key: 'action', width: 120, render: (_: any, record: Question) => ( diff --git a/src/pages/admin/UserGroupManage.tsx b/src/pages/admin/UserGroupManage.tsx index 1fafb7e..2c0f7c2 100644 --- a/src/pages/admin/UserGroupManage.tsx +++ b/src/pages/admin/UserGroupManage.tsx @@ -119,7 +119,7 @@ const UserGroupManage = () => { render: (text: string) => dayjs(text).format('YYYY-MM-DD HH:mm'), }, { - title: '操作', + title:
操作
, key: 'action', render: (_: any, record: UserGroup) => ( diff --git a/src/pages/admin/UserManagePage.tsx b/src/pages/admin/UserManagePage.tsx index 31630e4..b8b878b 100644 --- a/src/pages/admin/UserManagePage.tsx +++ b/src/pages/admin/UserManagePage.tsx @@ -347,7 +347,7 @@ const UserManagePage = () => { render: (text: string) => new Date(text).toLocaleString(), }, { - title: '操作', + title:
操作
, key: 'action', render: (_: any, record: User) => ( diff --git a/src/pages/admin/UserRecordsPage.tsx b/src/pages/admin/UserRecordsPage.tsx index ae0e7a7..90541e1 100644 --- a/src/pages/admin/UserRecordsPage.tsx +++ b/src/pages/admin/UserRecordsPage.tsx @@ -81,7 +81,7 @@ const UserRecordsPage = ({ userId }: { userId: string }) => { }, }, { - title: '操作', + title:
操作
, key: 'action', render: (_: any, record: Record) => (