Use when 开发者需要在后台项目 `apps/eams-frontend` 中显示图标,尤其是要在 Vue 页面、配置驱动菜单、组合式函数、或兼容旧 `IconXxx` 写法之间选择合适方案时使用。适用于 `ReIcon`、`IconifyIconOffline`、`IconifyIconOnline`、`useRenderIcon`、离线图标扩展和 iconify 接入排错。
后台项目已经有一套可用的 iconify 集成,不要重复发明入口,也不要在业务页面里绕开 ReIcon 体系直接各写各的。
现有能力以 apps/eams-frontend/src/components/ReIcon 为单一出口,覆盖这几类场景:
IconMenuep/menuri:home-4-lineuseRenderIcon 返回可渲染组件开始接入前,优先回读这些文件,而不是凭印象写:
apps/eams-frontend/src/components/ReIcon/src/hooks.ts按下面的顺序选,不要混用得没有边界。
IconMenu、IconSearch 这类旧别名时:先保持兼容,不要为了“统一风格”强行批量重写。IconifyIconOffline,图标名优先写成 ep/menu 这类离线字符串。IconifyIconOnline,图标名写成 ri:home-4-line 这类 iconify 在线格式。useRenderIcon。~icons/... 组件,且图标只在当前文件使用:可以直接把组件传给 useRenderIcon,或直接在模板里渲染该组件。ReIcon 目前暴露这些项目内标准入口:
IconifyIconOfflineIconifyIconOnlineuseRenderIconpickIconRendererresolveOfflineIconregisterOfflineIcons其中真正给业务开发者常用的,通常只有前三个。
<template>
<IconifyIconOffline icon="ep/menu" width="18" height="18" />
</template>
适用:
说明:
ep/menu 这种斜杠写法offlineIcon.ts 内部会归一化 : 和 /,但新代码优先跟随仓库现有写法<template>
<IconifyIconOnline icon="ri:home-4-line" width="18" height="18" />
</template>
适用:
约束:
useRenderIconimport { useRenderIcon } from "@/components/ReIcon";
const menuIcon = useRenderIcon("ep/menu", {
width: "18px",
height: "18px",
});
适用:
Component 类型返回值的组合式函数useRenderIcon 的分流规则已经写在 apps/eams-frontend/src/components/ReIcon/src/hooks.ts:
: 且未命中离线映射的字符串:走在线组件渲染器: 的字符串:按离线字符串处理apps/eams-frontend/src/components/mynav/EamsNav.vue 已经内部调用 useRenderIcon,所以菜单项可以直接写:
const navMenus = [
{
id: "system",
text: "系统管理",
icon: "ep/setting",
children: [
{ id: "users", text: "用户管理", path: "users", icon: "IconUser" },
{ id: "roles", text: "角色权限", path: "roles", icon: "ri:shield-user-line" },
],
},
];
这三种值都已经被当前后台项目支持:
IconUserep/settingri:shield-user-lineuseRenderIcon 的离线路径扩充步骤:
~icons/<collection>/<name> 导入图标组件。offlineIcons 中,键名使用仓库约定的字符串,如 ep/menu。IconXxx 写法时,才补 aliasIcons。IconXxx 别名;旧别名主要是兼容层,不是新代码首选接口。@/components/ReIcon 暴露的入口。/sample/reicon 对照现有示例确认表现一致。完整示例页位于:
这个示例页已经覆盖:
useRenderIcon hookmynav 配置驱动接入如果你新增了一种后台图标用法,优先补到这个示例页里,而不是只在某个业务页偷偷生效。
ReIcon 体系除非你在做底层基础设施,否则不要在业务代码里直接重新封装 @iconify/vue,也不要重新发明另一套 renderIcon 工具。后台项目已经有统一出口。
IconMenu 这类旧别名要保留,但新代码优先写 ep/menu、ri:... 或 useRenderIcon(...)。
历史上已经出现过为了接入 iconify 而覆盖式重写入口文件,顺手删掉原注释和说明文案的问题。接入 iconify 时优先做最小补丁,保留现有注释、说明文字和组件语义。
/sample/reicon 历史上出现过 .icon-title 这类宽泛类名命中外部样式,导致标题前出现多余 ::before 图标。示例页优先使用局部、语义明确的类名,例如 .item-title、.item-text,并保持 scss。
完成 iconify 相关改动后,至少自查这些点:
IconXxx 页面是否没有被你意外改坏offlineIcon.ts/sample/reicon 示例是否仍覆盖并展示正确这个技能只服务于后台项目 apps/eams-frontend。
不要把这里的 ReIcon 用法直接套到:
apps/eams-frontteaapps/eams-frontstu这些项目没有承诺与后台项目共享同一套 iconify 接入面。