mirror of https://github.com/halo-dev/halo
Support menu team.
parent
0f5c836e63
commit
46b10fb342
|
@ -10,6 +10,7 @@ import run.halo.app.model.entity.Menu;
|
|||
* Menu output dto.
|
||||
*
|
||||
* @author johnniang
|
||||
* @author ryanwang
|
||||
* @date 4/3/19
|
||||
*/
|
||||
@Data
|
||||
|
@ -30,4 +31,6 @@ public class MenuDTO implements OutputConverter<MenuDTO, Menu> {
|
|||
private String icon;
|
||||
|
||||
private Integer parentId;
|
||||
|
||||
private String team;
|
||||
}
|
||||
|
|
|
@ -60,6 +60,12 @@ public class Menu extends BaseEntity {
|
|||
@Column(name = "parent_id", columnDefinition = "int default 0")
|
||||
private Integer parentId;
|
||||
|
||||
/**
|
||||
* Menu team name.
|
||||
*/
|
||||
@Column(name = "team", columnDefinition = "varchar(255) default ''")
|
||||
private String team;
|
||||
|
||||
@Override
|
||||
public void prePersist() {
|
||||
super.prePersist();
|
||||
|
@ -81,5 +87,9 @@ public class Menu extends BaseEntity {
|
|||
if (parentId == null) {
|
||||
parentId = 0;
|
||||
}
|
||||
|
||||
if(team == null){
|
||||
team = "";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -43,6 +43,13 @@ public class MenuTagDirective implements TemplateDirectiveModel {
|
|||
case "tree":
|
||||
env.setVariable("menus", builder.build().wrap(menuService.listAsTree(Sort.by(DESC, "priority"))));
|
||||
break;
|
||||
case "listTeams":
|
||||
env.setVariable("teams", builder.build().wrap(menuService.listTeamVos(Sort.by(DESC, "priority"))));
|
||||
break;
|
||||
case "listByTeam":
|
||||
String team = params.get("team").toString();
|
||||
env.setVariable("menus", builder.build().wrap(menuService.listByTeam(team, Sort.by(DESC, "priority"))));
|
||||
break;
|
||||
case "count":
|
||||
env.setVariable("count", builder.build().wrap(menuService.count()));
|
||||
break;
|
||||
|
|
|
@ -13,6 +13,7 @@ import javax.validation.constraints.Size;
|
|||
* Menu param.
|
||||
*
|
||||
* @author johnniang
|
||||
* @author ryanwang
|
||||
* @date 4/3/19
|
||||
*/
|
||||
@Data
|
||||
|
@ -37,4 +38,7 @@ public class MenuParam implements InputConverter<Menu> {
|
|||
private String icon;
|
||||
|
||||
private Integer parentId;
|
||||
|
||||
@Size(max = 255, message = "菜单分组的字符长度不能超过 {max}")
|
||||
private String team;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,22 @@
|
|||
package run.halo.app.model.vo;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.ToString;
|
||||
import run.halo.app.model.dto.MenuDTO;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Menu team vo.
|
||||
*
|
||||
* @author ryanwang
|
||||
* @date : 2019/8/28
|
||||
*/
|
||||
@Data
|
||||
@ToString
|
||||
public class MenuTeamVO {
|
||||
|
||||
private String team;
|
||||
|
||||
private List<MenuDTO> menus;
|
||||
}
|
|
@ -1,5 +1,6 @@
|
|||
package run.halo.app.repository;
|
||||
|
||||
import org.springframework.data.domain.Sort;
|
||||
import org.springframework.lang.NonNull;
|
||||
import run.halo.app.model.entity.Menu;
|
||||
import run.halo.app.repository.base.BaseRepository;
|
||||
|
@ -10,6 +11,8 @@ import java.util.List;
|
|||
* Menu repository.
|
||||
*
|
||||
* @author johnniang
|
||||
* @author ryanwang
|
||||
* @date 2019-8-28
|
||||
*/
|
||||
public interface MenuRepository extends BaseRepository<Menu, Integer> {
|
||||
|
||||
|
@ -18,4 +21,6 @@ public interface MenuRepository extends BaseRepository<Menu, Integer> {
|
|||
boolean existsByIdNotAndName(@NonNull Integer id, @NonNull String name);
|
||||
|
||||
List<Menu> findByParentId(@NonNull Integer id);
|
||||
|
||||
List<Menu> findByTeam(String team, Sort sort);
|
||||
}
|
||||
|
|
|
@ -5,6 +5,7 @@ import org.springframework.lang.NonNull;
|
|||
import run.halo.app.model.dto.MenuDTO;
|
||||
import run.halo.app.model.entity.Menu;
|
||||
import run.halo.app.model.params.MenuParam;
|
||||
import run.halo.app.model.vo.MenuTeamVO;
|
||||
import run.halo.app.model.vo.MenuVO;
|
||||
import run.halo.app.service.base.CrudService;
|
||||
|
||||
|
@ -28,6 +29,24 @@ public interface MenuService extends CrudService<Menu, Integer> {
|
|||
@NonNull
|
||||
List<MenuDTO> listDtos(@NonNull Sort sort);
|
||||
|
||||
/**
|
||||
* Lists menu team vos.
|
||||
*
|
||||
* @param sort must not be null
|
||||
* @return a list of menu team vo
|
||||
*/
|
||||
@NonNull
|
||||
List<MenuTeamVO> listTeamVos(@NonNull Sort sort);
|
||||
|
||||
/**
|
||||
* List menus by team.
|
||||
*
|
||||
* @param team team
|
||||
* @param sort sort
|
||||
* @return list of menus
|
||||
*/
|
||||
List<MenuDTO> listByTeam(@NonNull String team, Sort sort);
|
||||
|
||||
/**
|
||||
* Creates a menu.
|
||||
*
|
||||
|
|
|
@ -9,15 +9,14 @@ import run.halo.app.exception.AlreadyExistsException;
|
|||
import run.halo.app.model.dto.MenuDTO;
|
||||
import run.halo.app.model.entity.Menu;
|
||||
import run.halo.app.model.params.MenuParam;
|
||||
import run.halo.app.model.vo.MenuTeamVO;
|
||||
import run.halo.app.model.vo.MenuVO;
|
||||
import run.halo.app.repository.MenuRepository;
|
||||
import run.halo.app.service.MenuService;
|
||||
import run.halo.app.service.base.AbstractCrudService;
|
||||
import run.halo.app.utils.ServiceUtils;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
|
@ -43,6 +42,41 @@ public class MenuServiceImpl extends AbstractCrudService<Menu, Integer> implemen
|
|||
return convertTo(listAll(sort));
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<MenuTeamVO> listTeamVos(Sort sort) {
|
||||
Assert.notNull(sort, "Sort info must not be null");
|
||||
|
||||
// List all menus
|
||||
List<MenuDTO> menus = listDtos(sort);
|
||||
|
||||
// Get teams
|
||||
Set<String> teams = ServiceUtils.fetchProperty(menus, MenuDTO::getTeam);
|
||||
|
||||
// Convert to team menu list map (Key: team, value: menu list)
|
||||
Map<String, List<MenuDTO>> teamMenuListMap = ServiceUtils.convertToListMap(teams, menus, MenuDTO::getTeam);
|
||||
|
||||
List<MenuTeamVO> result = new LinkedList<>();
|
||||
|
||||
// Wrap menu team vo list
|
||||
teamMenuListMap.forEach((team, menuList) -> {
|
||||
// Build menu team vo
|
||||
MenuTeamVO menuTeamVO = new MenuTeamVO();
|
||||
menuTeamVO.setTeam(team);
|
||||
menuTeamVO.setMenus(menuList);
|
||||
|
||||
// Add it to result
|
||||
result.add(menuTeamVO);
|
||||
});
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<MenuDTO> listByTeam(String team, Sort sort) {
|
||||
List<Menu> menus = menuRepository.findByTeam(team, sort);
|
||||
return menus.stream().map(menu -> (MenuDTO) new MenuDTO().convertFrom(menu)).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Menu createBy(MenuParam menuParam) {
|
||||
Assert.notNull(menuParam, "Menu param must not be null");
|
||||
|
|
Loading…
Reference in New Issue