Files
fquiz/web/src/lib/icon-registry.ts
T
2026-06-28 18:22:24 +08:00

427 lines
20 KiB
TypeScript

/**
* 图标注册表 — 集中管理所有供菜单配置使用的 AntDesign 图标。
*
* 按业务场景分类导出,方便维护和扩展。
* 每个类别至少包含 5-8 个图标,总计 70+ 个图标。
*/
import type { ComponentType } from "react";
// ─── 系统管理(用户、角色、权限、菜单、日志、设置、配置等) ───
import UserOutlined from "@ant-design/icons/UserOutlined";
import TeamOutlined from "@ant-design/icons/TeamOutlined";
import SafetyCertificateOutlined from "@ant-design/icons/SafetyCertificateOutlined";
import MenuOutlined from "@ant-design/icons/MenuOutlined";
import ProfileOutlined from "@ant-design/icons/ProfileOutlined";
import SettingOutlined from "@ant-design/icons/SettingOutlined";
import ControlOutlined from "@ant-design/icons/ControlOutlined";
import KeyOutlined from "@ant-design/icons/KeyOutlined";
import AuditOutlined from "@ant-design/icons/AuditOutlined";
import IdcardOutlined from "@ant-design/icons/IdcardOutlined";
// ─── 业务功能(ATP模型、防雷计算、波形分析、定时任务、报告等) ───
import ThunderboltOutlined from "@ant-design/icons/ThunderboltOutlined";
import ExperimentOutlined from "@ant-design/icons/ExperimentOutlined";
import RadarChartOutlined from "@ant-design/icons/RadarChartOutlined";
import ApartmentOutlined from "@ant-design/icons/ApartmentOutlined";
import DeploymentUnitOutlined from "@ant-design/icons/DeploymentUnitOutlined";
import FundOutlined from "@ant-design/icons/FundOutlined";
import BarChartOutlined from "@ant-design/icons/BarChartOutlined";
import LineChartOutlined from "@ant-design/icons/LineChartOutlined";
import FieldTimeOutlined from "@ant-design/icons/FieldTimeOutlined";
import AlertOutlined from "@ant-design/icons/AlertOutlined";
// ─── 数据/文件(上传、下载、导入、导出、文件、文件夹、表格等) ───
import FileTextOutlined from "@ant-design/icons/FileTextOutlined";
import FolderOpenOutlined from "@ant-design/icons/FolderOpenOutlined";
import DatabaseOutlined from "@ant-design/icons/DatabaseOutlined";
import CloudUploadOutlined from "@ant-design/icons/CloudUploadOutlined";
import CloudDownloadOutlined from "@ant-design/icons/CloudDownloadOutlined";
import ImportOutlined from "@ant-design/icons/ImportOutlined";
import ExportOutlined from "@ant-design/icons/ExportOutlined";
import TableOutlined from "@ant-design/icons/TableOutlined";
import FileAddOutlined from "@ant-design/icons/FileAddOutlined";
import PaperClipOutlined from "@ant-design/icons/PaperClipOutlined";
// ─── 操作(新增、编辑、删除、保存、搜索、刷新、重置等) ───
import PlusOutlined from "@ant-design/icons/PlusOutlined";
import EditOutlined from "@ant-design/icons/EditOutlined";
import DeleteOutlined from "@ant-design/icons/DeleteOutlined";
import SaveOutlined from "@ant-design/icons/SaveOutlined";
import SearchOutlined from "@ant-design/icons/SearchOutlined";
import ReloadOutlined from "@ant-design/icons/ReloadOutlined";
import UndoOutlined from "@ant-design/icons/UndoOutlined";
import CopyOutlined from "@ant-design/icons/CopyOutlined";
import FilterOutlined from "@ant-design/icons/FilterOutlined";
import SortAscendingOutlined from "@ant-design/icons/SortAscendingOutlined";
// ─── 视图/导航(首页、看板、列表、卡片、折叠、展开、返回等) ───
import HomeOutlined from "@ant-design/icons/HomeOutlined";
import DashboardOutlined from "@ant-design/icons/DashboardOutlined";
import AppstoreOutlined from "@ant-design/icons/AppstoreOutlined";
import UnorderedListOutlined from "@ant-design/icons/UnorderedListOutlined";
import AppstoreAddOutlined from "@ant-design/icons/AppstoreAddOutlined";
import UpOutlined from "@ant-design/icons/UpOutlined";
import ExpandOutlined from "@ant-design/icons/ExpandOutlined";
import ArrowLeftOutlined from "@ant-design/icons/ArrowLeftOutlined";
import ArrowRightOutlined from "@ant-design/icons/ArrowRightOutlined";
import MenuFoldOutlined from "@ant-design/icons/MenuFoldOutlined";
// ─── 状态/通知(成功、警告、错误、信息、待办、完成、进度等) ───
import CheckCircleOutlined from "@ant-design/icons/CheckCircleOutlined";
import WarningOutlined from "@ant-design/icons/WarningOutlined";
import CloseCircleOutlined from "@ant-design/icons/CloseCircleOutlined";
import InfoCircleOutlined from "@ant-design/icons/InfoCircleOutlined";
import BellOutlined from "@ant-design/icons/BellOutlined";
import CheckSquareOutlined from "@ant-design/icons/CheckSquareOutlined";
import ClockCircleOutlined from "@ant-design/icons/ClockCircleOutlined";
import ExclamationCircleOutlined from "@ant-design/icons/ExclamationCircleOutlined";
import StopOutlined from "@ant-design/icons/StopOutlined";
import QuestionCircleOutlined from "@ant-design/icons/QuestionCircleOutlined";
// ─── 其他通用(工单、消息、邮件、日历、图表、地图、设置等) ───
import MessageOutlined from "@ant-design/icons/MessageOutlined";
import MailOutlined from "@ant-design/icons/MailOutlined";
import CalendarOutlined from "@ant-design/icons/CalendarOutlined";
import PieChartOutlined from "@ant-design/icons/PieChartOutlined";
import GlobalOutlined from "@ant-design/icons/GlobalOutlined";
import ToolOutlined from "@ant-design/icons/ToolOutlined";
import NodeIndexOutlined from "@ant-design/icons/NodeIndexOutlined";
import ConsoleSqlOutlined from "@ant-design/icons/ConsoleSqlOutlined";
import SyncOutlined from "@ant-design/icons/SyncOutlined";
import StarOutlined from "@ant-design/icons/StarOutlined";
import FlagOutlined from "@ant-design/icons/FlagOutlined";
import EyeOutlined from "@ant-design/icons/EyeOutlined";
import LockOutlined from "@ant-design/icons/LockOutlined";
import LinkOutlined from "@ant-design/icons/LinkOutlined";
import TagOutlined from "@ant-design/icons/TagOutlined";
import PrinterOutlined from "@ant-design/icons/PrinterOutlined";
import ShareAltOutlined from "@ant-design/icons/ShareAltOutlined";
import BranchesOutlined from "@ant-design/icons/BranchesOutlined";
import CodeOutlined from "@ant-design/icons/CodeOutlined";
import CommentOutlined from "@ant-design/icons/CommentOutlined";
import FileExcelOutlined from "@ant-design/icons/FileExcelOutlined";
import AreaChartOutlined from "@ant-design/icons/AreaChartOutlined";
import NumberOutlined from "@ant-design/icons/NumberOutlined";
import DotChartOutlined from "@ant-design/icons/DotChartOutlined";
import FileOutlined from "@ant-design/icons/FileOutlined";
import FolderOutlined from "@ant-design/icons/FolderOutlined";
import FilePdfOutlined from "@ant-design/icons/FilePdfOutlined";
import FileImageOutlined from "@ant-design/icons/FileImageOutlined";
import FileSearchOutlined from "@ant-design/icons/FileSearchOutlined";
import ScissorOutlined from "@ant-design/icons/ScissorOutlined";
import SafetyOutlined from "@ant-design/icons/SafetyOutlined";
import ShopOutlined from "@ant-design/icons/ShopOutlined";
import CrownOutlined from "@ant-design/icons/CrownOutlined";
import ContactsOutlined from "@ant-design/icons/ContactsOutlined";
import BuildOutlined from "@ant-design/icons/BuildOutlined";
import ApiOutlined from "@ant-design/icons/ApiOutlined";
import CloudOutlined from "@ant-design/icons/CloudOutlined";
import ClusterOutlined from "@ant-design/icons/ClusterOutlined";
import NotificationOutlined from "@ant-design/icons/NotificationOutlined";
import SendOutlined from "@ant-design/icons/SendOutlined";
import WechatOutlined from "@ant-design/icons/WechatOutlined";
import CustomerServiceOutlined from "@ant-design/icons/CustomerServiceOutlined";
import DownloadOutlined from "@ant-design/icons/DownloadOutlined";
import UploadOutlined from "@ant-design/icons/UploadOutlined";
import SwapOutlined from "@ant-design/icons/SwapOutlined";
import ShrinkOutlined from "@ant-design/icons/ShrinkOutlined";
import RobotOutlined from "@ant-design/icons/RobotOutlined";
import BulbOutlined from "@ant-design/icons/BulbOutlined";
import FireOutlined from "@ant-design/icons/FireOutlined";
// ─── 导出类型 ───
export type IconEntry = {
name: string;
label: string;
component: ComponentType<{ className?: string; style?: React.CSSProperties }>;
};
export type IconCategory = {
key: string;
label: string;
icons: IconEntry[];
};
/** 图标名称 → 组件映射(扁平化,供 resolveIcon 使用) */
export const ICON_MAP: Record<string, ComponentType<{ className?: string; style?: React.CSSProperties }>> = {
// 系统管理
UserOutlined,
TeamOutlined,
SafetyCertificateOutlined,
MenuOutlined,
ProfileOutlined,
SettingOutlined,
ControlOutlined,
KeyOutlined,
AuditOutlined,
IdcardOutlined,
// 业务功能
ThunderboltOutlined,
ExperimentOutlined,
RadarChartOutlined,
ApartmentOutlined,
DeploymentUnitOutlined,
FundOutlined,
BarChartOutlined,
LineChartOutlined,
FieldTimeOutlined,
AlertOutlined,
// 数据/文件
FileTextOutlined,
FolderOpenOutlined,
DatabaseOutlined,
CloudUploadOutlined,
CloudDownloadOutlined,
ImportOutlined,
ExportOutlined,
TableOutlined,
FileAddOutlined,
PaperClipOutlined,
// 操作
PlusOutlined,
EditOutlined,
DeleteOutlined,
SaveOutlined,
SearchOutlined,
ReloadOutlined,
UndoOutlined,
CopyOutlined,
FilterOutlined,
SortAscendingOutlined,
// 视图/导航
HomeOutlined,
DashboardOutlined,
AppstoreOutlined,
UnorderedListOutlined,
AppstoreAddOutlined,
UpOutlined,
ExpandOutlined,
ArrowLeftOutlined,
ArrowRightOutlined,
MenuFoldOutlined,
// 状态/通知
CheckCircleOutlined,
WarningOutlined,
CloseCircleOutlined,
InfoCircleOutlined,
BellOutlined,
CheckSquareOutlined,
ClockCircleOutlined,
ExclamationCircleOutlined,
StopOutlined,
QuestionCircleOutlined,
// 其他通用
MessageOutlined,
MailOutlined,
CalendarOutlined,
PieChartOutlined,
GlobalOutlined,
ToolOutlined,
NodeIndexOutlined,
ConsoleSqlOutlined,
SyncOutlined,
StarOutlined,
FlagOutlined,
EyeOutlined,
LockOutlined,
LinkOutlined,
TagOutlined,
PrinterOutlined,
ShareAltOutlined,
BranchesOutlined,
CodeOutlined,
CommentOutlined,
// 补充图标
FileExcelOutlined,
AreaChartOutlined,
NumberOutlined,
DotChartOutlined,
FileOutlined,
FolderOutlined,
FilePdfOutlined,
FileImageOutlined,
FileSearchOutlined,
ScissorOutlined,
SafetyOutlined,
ShopOutlined,
CrownOutlined,
ContactsOutlined,
BuildOutlined,
ApiOutlined,
CloudOutlined,
ClusterOutlined,
NotificationOutlined,
SendOutlined,
WechatOutlined,
CustomerServiceOutlined,
DownloadOutlined,
UploadOutlined,
SwapOutlined,
ShrinkOutlined,
RobotOutlined,
BulbOutlined,
FireOutlined,
};
/** 分类图标列表 — 供图标选择器 UI 使用 */
export const ICON_CATEGORIES: IconCategory[] = [
{
key: "system",
label: "系统管理",
icons: [
{ name: "UserOutlined", label: "用户", component: UserOutlined },
{ name: "TeamOutlined", label: "团队/角色", component: TeamOutlined },
{ name: "SafetyCertificateOutlined", label: "权限/安全", component: SafetyCertificateOutlined },
{ name: "MenuOutlined", label: "菜单", component: MenuOutlined },
{ name: "ProfileOutlined", label: "日志/档案", component: ProfileOutlined },
{ name: "SettingOutlined", label: "设置", component: SettingOutlined },
{ name: "ControlOutlined", label: "控制", component: ControlOutlined },
{ name: "KeyOutlined", label: "密钥", component: KeyOutlined },
{ name: "AuditOutlined", label: "审计", component: AuditOutlined },
{ name: "IdcardOutlined", label: "身份", component: IdcardOutlined },
{ name: "SafetyOutlined", label: "安全", component: SafetyOutlined },
{ name: "ShopOutlined", label: "租户/组织", component: ShopOutlined },
{ name: "CrownOutlined", label: "管理/特权", component: CrownOutlined },
{ name: "ContactsOutlined", label: "通讯录", component: ContactsOutlined },
],
},
{
key: "business",
label: "业务功能",
icons: [
{ name: "ThunderboltOutlined", label: "雷电/防雷", component: ThunderboltOutlined },
{ name: "ExperimentOutlined", label: "实验/ATP", component: ExperimentOutlined },
{ name: "RadarChartOutlined", label: "雷达/分析", component: RadarChartOutlined },
{ name: "ApartmentOutlined", label: "架构/模型", component: ApartmentOutlined },
{ name: "DeploymentUnitOutlined", label: "部署单元", component: DeploymentUnitOutlined },
{ name: "FundOutlined", label: "资金/统计", component: FundOutlined },
{ name: "BarChartOutlined", label: "柱状图", component: BarChartOutlined },
{ name: "LineChartOutlined", label: "折线图", component: LineChartOutlined },
{ name: "FieldTimeOutlined", label: "定时任务", component: FieldTimeOutlined },
{ name: "AlertOutlined", label: "告警", component: AlertOutlined },
{ name: "AreaChartOutlined", label: "面积图", component: AreaChartOutlined },
{ name: "NumberOutlined", label: "数值统计", component: NumberOutlined },
{ name: "DotChartOutlined", label: "散点图", component: DotChartOutlined },
],
},
{
key: "data",
label: "数据/文件",
icons: [
{ name: "FileTextOutlined", label: "文档", component: FileTextOutlined },
{ name: "FolderOpenOutlined", label: "文件夹", component: FolderOpenOutlined },
{ name: "DatabaseOutlined", label: "数据库", component: DatabaseOutlined },
{ name: "CloudUploadOutlined", label: "上传", component: CloudUploadOutlined },
{ name: "CloudDownloadOutlined", label: "下载", component: CloudDownloadOutlined },
{ name: "ImportOutlined", label: "导入", component: ImportOutlined },
{ name: "ExportOutlined", label: "导出", component: ExportOutlined },
{ name: "TableOutlined", label: "表格", component: TableOutlined },
{ name: "FileAddOutlined", label: "新建文件", component: FileAddOutlined },
{ name: "PaperClipOutlined", label: "附件", component: PaperClipOutlined },
{ name: "FileExcelOutlined", label: "Excel表格", component: FileExcelOutlined },
{ name: "FileOutlined", label: "通用文件", component: FileOutlined },
{ name: "FolderOutlined", label: "文件夹", component: FolderOutlined },
{ name: "FilePdfOutlined", label: "PDF文档", component: FilePdfOutlined },
{ name: "FileImageOutlined", label: "图片", component: FileImageOutlined },
{ name: "FileSearchOutlined", label: "文件搜索", component: FileSearchOutlined },
{ name: "ScissorOutlined", label: "剪切", component: ScissorOutlined },
],
},
{
key: "action",
label: "操作",
icons: [
{ name: "PlusOutlined", label: "新增", component: PlusOutlined },
{ name: "EditOutlined", label: "编辑", component: EditOutlined },
{ name: "DeleteOutlined", label: "删除", component: DeleteOutlined },
{ name: "SaveOutlined", label: "保存", component: SaveOutlined },
{ name: "SearchOutlined", label: "搜索", component: SearchOutlined },
{ name: "ReloadOutlined", label: "刷新", component: ReloadOutlined },
{ name: "UndoOutlined", label: "重置", component: UndoOutlined },
{ name: "CopyOutlined", label: "复制", component: CopyOutlined },
{ name: "FilterOutlined", label: "筛选", component: FilterOutlined },
{ name: "SortAscendingOutlined", label: "排序", component: SortAscendingOutlined },
],
},
{
key: "nav",
label: "视图/导航",
icons: [
{ name: "HomeOutlined", label: "首页", component: HomeOutlined },
{ name: "DashboardOutlined", label: "看板", component: DashboardOutlined },
{ name: "AppstoreOutlined", label: "应用/菜单", component: AppstoreOutlined },
{ name: "UnorderedListOutlined", label: "列表", component: UnorderedListOutlined },
{ name: "AppstoreAddOutlined", label: "新增应用", component: AppstoreAddOutlined },
{ name: "UpOutlined", label: "向上/收起", component: UpOutlined },
{ name: "ExpandOutlined", label: "展开", component: ExpandOutlined },
{ name: "ArrowLeftOutlined", label: "返回", component: ArrowLeftOutlined },
{ name: "ArrowRightOutlined", label: "前进", component: ArrowRightOutlined },
{ name: "MenuFoldOutlined", label: "菜单折叠", component: MenuFoldOutlined },
],
},
{
key: "status",
label: "状态/通知",
icons: [
{ name: "CheckCircleOutlined", label: "成功", component: CheckCircleOutlined },
{ name: "WarningOutlined", label: "警告", component: WarningOutlined },
{ name: "CloseCircleOutlined", label: "错误", component: CloseCircleOutlined },
{ name: "InfoCircleOutlined", label: "信息", component: InfoCircleOutlined },
{ name: "BellOutlined", label: "通知/待办", component: BellOutlined },
{ name: "CheckSquareOutlined", label: "完成", component: CheckSquareOutlined },
{ name: "ClockCircleOutlined", label: "时钟/待办", component: ClockCircleOutlined },
{ name: "ExclamationCircleOutlined", label: "感叹/注意", component: ExclamationCircleOutlined },
{ name: "StopOutlined", label: "停止/禁止", component: StopOutlined },
{ name: "QuestionCircleOutlined", label: "帮助/疑问", component: QuestionCircleOutlined },
],
},
{
key: "general",
label: "其他通用",
icons: [
{ name: "MessageOutlined", label: "消息", component: MessageOutlined },
{ name: "MailOutlined", label: "邮件", component: MailOutlined },
{ name: "CalendarOutlined", label: "日历", component: CalendarOutlined },
{ name: "PieChartOutlined", label: "饼图/图表", component: PieChartOutlined },
{ name: "GlobalOutlined", label: "地图/全局", component: GlobalOutlined },
{ name: "ToolOutlined", label: "工具", component: ToolOutlined },
{ name: "NodeIndexOutlined", label: "节点索引", component: NodeIndexOutlined },
{ name: "ConsoleSqlOutlined", label: "SQL控制台", component: ConsoleSqlOutlined },
{ name: "SyncOutlined", label: "同步", component: SyncOutlined },
{ name: "StarOutlined", label: "星标/收藏", component: StarOutlined },
{ name: "FlagOutlined", label: "标记", component: FlagOutlined },
{ name: "EyeOutlined", label: "查看/预览", component: EyeOutlined },
{ name: "LockOutlined", label: "锁定/安全", component: LockOutlined },
{ name: "LinkOutlined", label: "链接", component: LinkOutlined },
{ name: "TagOutlined", label: "标签", component: TagOutlined },
{ name: "PrinterOutlined", label: "打印", component: PrinterOutlined },
{ name: "ShareAltOutlined", label: "分享", component: ShareAltOutlined },
{ name: "BranchesOutlined", label: "分支/流程", component: BranchesOutlined },
{ name: "CodeOutlined", label: "代码", component: CodeOutlined },
{ name: "CommentOutlined", label: "评论/备注", component: CommentOutlined },
{ name: "BuildOutlined", label: "构建/部署", component: BuildOutlined },
{ name: "ApiOutlined", label: "API接口", component: ApiOutlined },
{ name: "CloudOutlined", label: "云服务", component: CloudOutlined },
{ name: "ClusterOutlined", label: "集群", component: ClusterOutlined },
{ name: "NotificationOutlined", label: "通知推送", component: NotificationOutlined },
{ name: "SendOutlined", label: "发送", component: SendOutlined },
{ name: "WechatOutlined", label: "微信", component: WechatOutlined },
{ name: "CustomerServiceOutlined", label: "客服", component: CustomerServiceOutlined },
{ name: "DownloadOutlined", label: "下载", component: DownloadOutlined },
{ name: "UploadOutlined", label: "上传", component: UploadOutlined },
{ name: "SwapOutlined", label: "交换/切换", component: SwapOutlined },
{ name: "ShrinkOutlined", label: "收缩", component: ShrinkOutlined },
{ name: "RobotOutlined", label: "机器人/AI", component: RobotOutlined },
{ name: "BulbOutlined", label: "灵感/提示", component: BulbOutlined },
{ name: "FireOutlined", label: "热门/紧急", component: FireOutlined },
],
},
];
/** 根据图标名称获取图标组件 */
export function resolveIcon(iconName: string | null): ComponentType<{ className?: string; style?: React.CSSProperties }> | null {
if (!iconName) return null;
return ICON_MAP[iconName] ?? null;
}