Skip to content

菜单扩展

核心接口

  • MenuOperationProvider
java
public interface MenuOperationProvider {

    /**
     * 创建菜单
     * @param vo 创建参数
     */
    void createMenu(CreateMenuVo vo);

    /**
     * 更新菜单
     * @param vo 更新参数
     */
    void updateMenu(UpdateMenuVo vo);

    /**
     * 查询菜单列表
     * @return 菜单列表
     */
    List<MenuDto> queryMenu();

    /**
     * 删除菜单
     * @param menuNo 菜单编号
     */
    void deleteMenu(String menuNo);

}
public interface MenuOperationProvider {

    /**
     * 创建菜单
     * @param vo 创建参数
     */
    void createMenu(CreateMenuVo vo);

    /**
     * 更新菜单
     * @param vo 更新参数
     */
    void updateMenu(UpdateMenuVo vo);

    /**
     * 查询菜单列表
     * @return 菜单列表
     */
    List<MenuDto> queryMenu();

    /**
     * 删除菜单
     * @param menuNo 菜单编号
     */
    void deleteMenu(String menuNo);

}

方法说明

  • void createMenu(CreateMenuVo vo);: 创建菜单
    • 方法入参定义如下:
java
public class CreateMenuVo {
    /**
     * 菜单编号
     */
    private String menuNo;
    /**
     * 菜单名称
     */
    private String menuName;
    /**
     * 前置菜单
     */
    private String preMenuNo;
    /**
     * 父菜单
     */
    private String parentMenuNo;
    /**
     * 菜单路由
     */
    private String menuUrl;
    /**
     * 备注
     */
    private String remark;
    /**
     * 菜单图标
     */
    private String menuIcon;
    /**
     * 菜单类型 0:系统菜单/1:页签/2:按钮
     */
    private String menuType;
}
public class CreateMenuVo {
    /**
     * 菜单编号
     */
    private String menuNo;
    /**
     * 菜单名称
     */
    private String menuName;
    /**
     * 前置菜单
     */
    private String preMenuNo;
    /**
     * 父菜单
     */
    private String parentMenuNo;
    /**
     * 菜单路由
     */
    private String menuUrl;
    /**
     * 备注
     */
    private String remark;
    /**
     * 菜单图标
     */
    private String menuIcon;
    /**
     * 菜单类型 0:系统菜单/1:页签/2:按钮
     */
    private String menuType;
}
  • void updateMenu(UpdateMenuVo vo);: 更新菜单
    • 方法入参定义如下:
java
public class UpdateMenuVo {
    /**
     * 菜单编号
     */
    private String menuNo;
    /**
     * 菜单名称
     */
    private String menuName;
    /**
     * 菜单路由
     */
    private String menuUrl;
    /**
     * 备注
     */
    private String remark;
    /**
     * 菜单图标
     */
    private String menuIcon;
    /**
     * 菜单类型 0:系统菜单/1:页签/2:按钮
     */
    private String menuType;
}
public class UpdateMenuVo {
    /**
     * 菜单编号
     */
    private String menuNo;
    /**
     * 菜单名称
     */
    private String menuName;
    /**
     * 菜单路由
     */
    private String menuUrl;
    /**
     * 备注
     */
    private String remark;
    /**
     * 菜单图标
     */
    private String menuIcon;
    /**
     * 菜单类型 0:系统菜单/1:页签/2:按钮
     */
    private String menuType;
}
  • List<MenuDto> queryMenu();: 查询菜单列表
    • 方法出参定义如下:
java
public class MenuDto {
    /**
     * 菜单编号
     */
    private String menuNo;
    /**
     * 菜单名称
     */
    private String menuName;
    /**
     * 菜单路由
     */
    private String menuUrl;
    /**
     * 子菜单
     */
    private List<MenuDto> children;
}
public class MenuDto {
    /**
     * 菜单编号
     */
    private String menuNo;
    /**
     * 菜单名称
     */
    private String menuName;
    /**
     * 菜单路由
     */
    private String menuUrl;
    /**
     * 子菜单
     */
    private List<MenuDto> children;
}
  • void deleteMenu(String menuNo);: 删除菜单
    • 入参说明:菜单编号

示例

java
public class LcpMenuOperationProvider implements MenuOperationProvider {

    private final List<CreateMenuVo> menuList = new ArrayList<>();
  
    public LcpMenuOperationProvider() {
        System.out.println("======================lcp menu================");
    }
  
    @Override
    public void createMenu(CreateMenuVo vo) {
        // todo: 新增菜单
        this.menuList.add(vo);
    }
  
    @Override
    public void updateMenu(UpdateMenuVo vo) {
        // todo: 修改菜单
        Optional<CreateMenuVo> first = this.menuList.stream().filter(e -> vo.getMenuNo().equals(e.getMenuNo())).findFirst();
        if (!first.isPresent()) {
            return;
        }
        BeanUtil.copyProperties(vo, first.get(), CopyOptions.create().setIgnoreNullValue(true));
    }
  
    @Override
    public List<MenuDto> queryMenu() {
        // todo:查询菜单列表
        return this.menuList.stream().map(e -> BeanUtils.copyProperties(e, MenuDto.class)).collect(Collectors.toList());
    }
  
    @Override
    public void deleteMenu(String menuNo) {
        // todo: 删除菜单
        this.menuList.removeIf(e -> menuNo.equals(e.getMenuNo()));
    }
}
public class LcpMenuOperationProvider implements MenuOperationProvider {

    private final List<CreateMenuVo> menuList = new ArrayList<>();
  
    public LcpMenuOperationProvider() {
        System.out.println("======================lcp menu================");
    }
  
    @Override
    public void createMenu(CreateMenuVo vo) {
        // todo: 新增菜单
        this.menuList.add(vo);
    }
  
    @Override
    public void updateMenu(UpdateMenuVo vo) {
        // todo: 修改菜单
        Optional<CreateMenuVo> first = this.menuList.stream().filter(e -> vo.getMenuNo().equals(e.getMenuNo())).findFirst();
        if (!first.isPresent()) {
            return;
        }
        BeanUtil.copyProperties(vo, first.get(), CopyOptions.create().setIgnoreNullValue(true));
    }
  
    @Override
    public List<MenuDto> queryMenu() {
        // todo:查询菜单列表
        return this.menuList.stream().map(e -> BeanUtils.copyProperties(e, MenuDto.class)).collect(Collectors.toList());
    }
  
    @Override
    public void deleteMenu(String menuNo) {
        // todo: 删除菜单
        this.menuList.removeIf(e -> menuNo.equals(e.getMenuNo()));
    }
}

注册

根据项目实际情况将上述创建的bean添加到spring容器中:

在XxxConfiguration配置类中注册

java
@Configuration
public class XxxConfiguration {
    
    @Bean
    public LcpMenuOperationProvider kocaMenuOperationProvider() {
      return new KocaMenuOperationProvider();
    }
}
@Configuration
public class XxxConfiguration {
    
    @Bean
    public LcpMenuOperationProvider kocaMenuOperationProvider() {
      return new KocaMenuOperationProvider();
    }
}