菜单徽标
1. 概述
菜单徽标功能允许开发者在系统菜单上显示徽标(如数字、红点等),用于提醒用户某些状态或数量信息。例如,显示未读消息数量、待处理任务数量等。 
2. 核心组件
2.1 MenuBadgeConfig
该模型定义了菜单徽标的配置信息:
menuCode: 菜单唯一编码(对应前端路由path)badge: 徽标文本(可选)badgeType: 徽标类型(可选,支持 dot|normal)badgeVariants: 徽标颜色样式(可选)
2.2 BadgeDataProvider
所有徽标数据提供器都需要实现该接口,其中必须实现getBadgeConfigs方法,用于返回该提供器管理的徽标配置列表。
2.3 BadgeConfigAggregator
系统全局的徽标配置聚合器,负责收集和管理所有徽标数据提供器,并提供获取所有徽标配置的方法getAllBadgeConfigs。
3. 使用方法
3.1 创建自定义徽标数据提供器
要创建一个自定义徽标数据提供器,需要:
- 创建一个实现
BadgeDataProvider接口的类 - 添加
@Component注解使该类成为Spring组件 - 实现
getBadgeConfigs方法,返回MenuBadgeConfig列表
示例:
import com.mldong.badge.BadgeDataProvider;
import com.mldong.badge.MenuBadgeConfig;
import org.springframework.stereotype.Component;
import java.util.Arrays;
import java.util.List;
@Component
public class TestBadge implements BadgeDataProvider {
@Override
public List<MenuBadgeConfig> getBadgeConfigs() {
return Arrays.asList(new MenuBadgeConfig(
"/sys/timer/index",
"new",
"dot",
"#FD4E4E"
));
}
}
3.2 徽标类型说明
badgeType="dot": 显示为小圆点徽标badgeType="normal": 显示为普通文本徽标
3.3 颜色样式
badgeVariants可以是颜色值,如 "#FD4E4E"、"red" 等
3.4 在服务中实现动态徽标
如果需要根据业务逻辑动态生成徽标,可以在服务类中实现,下面是获取待办任务数量,并返回一个 MenuBadgeConfig 对象。
@Service
@RequiredArgsConstructor
public class ProcessTaskServiceImpl extends ServiceImpl<ProcessTaskMapper, ProcessTask>
implements ProcessTaskService, BadgeDataProvider {
// ... 其他代码
@Override
public List<MenuBadgeConfig> getBadgeConfigs() {
// 查询当前用户的待办任务数量
Long userId = LoginUserHolder.getUserId();
Integer count = baseMapper.selectTodoCount(ProcessTaskStateEnum.DOING.getCode(), userId);
List<MenuBadgeConfig> badgeConfigs = new ArrayList<>();
// 如果有待办任务,则添加徽标配置
if (count != null && count > 0) {
MenuBadgeConfig config = new MenuBadgeConfig();
config.setMenuCode("/wf/process-task/todo");
config.setBadge(String.valueOf(count));
config.setBadgeType("normal");
config.setBadgeVariants("destructive"); // 使用红色标识紧急/重要任务
badgeConfigs.add(config);
}
if(CollectionUtil.isNotEmpty(badgeConfigs)){
// 子项存在,则父项也需要,工作流程
MenuBadgeConfig config = new MenuBadgeConfig();
config.setMenuCode("/wf/manager");
config.setBadge("");
config.setBadgeType("dot");
config.setBadgeVariants("destructive"); // 使用红色标识紧急/重要任务
badgeConfigs.add(config);
}
return badgeConfigs;
}
}
4. 获取徽标配置
前端可以通过调用相应接口获取所有徽标配置,系统会通过 BadgeConfigAggregator 的 getAllBadgeConfigs 方法聚合所有提供器的数据。
5. 自动加载机制
系统会自动通过Spring的依赖注入机制收集所有实现了BadgeDataProvider 接口的Bean,并在 BadgeConfigAggregator 中进行聚合。
6. 最佳实践
- 合理使用: 徽标应仅用于重要提醒,避免过多使用导致用户忽略
- 性能考虑: 在
getBadgeConfigs方法中避免执行耗时操作,可考虑使用缓存 - menuCode 对应: 确保
menuCode与前端路由路径一致,以便正确显示徽标 - 类型选择: 根据实际需求选择合适的徽标类型(数字 or 红点)
7. 示例应用场景
- 显示待处理任务数量
- 显示未读消息数
- 显示系统警告或新功能提示
- 显示用户申请或审核状态
