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.
|
* Menu output dto.
|
||||||
*
|
*
|
||||||
* @author johnniang
|
* @author johnniang
|
||||||
|
* @author ryanwang
|
||||||
* @date 4/3/19
|
* @date 4/3/19
|
||||||
*/
|
*/
|
||||||
@Data
|
@Data
|
||||||
|
@ -30,4 +31,6 @@ public class MenuDTO implements OutputConverter<MenuDTO, Menu> {
|
||||||
private String icon;
|
private String icon;
|
||||||
|
|
||||||
private Integer parentId;
|
private Integer parentId;
|
||||||
|
|
||||||
|
private String team;
|
||||||
}
|
}
|
||||||
|
|
|
@ -60,6 +60,12 @@ public class Menu extends BaseEntity {
|
||||||
@Column(name = "parent_id", columnDefinition = "int default 0")
|
@Column(name = "parent_id", columnDefinition = "int default 0")
|
||||||
private Integer parentId;
|
private Integer parentId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Menu team name.
|
||||||
|
*/
|
||||||
|
@Column(name = "team", columnDefinition = "varchar(255) default ''")
|
||||||
|
private String team;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void prePersist() {
|
public void prePersist() {
|
||||||
super.prePersist();
|
super.prePersist();
|
||||||
|
@ -81,5 +87,9 @@ public class Menu extends BaseEntity {
|
||||||
if (parentId == null) {
|
if (parentId == null) {
|
||||||
parentId = 0;
|
parentId = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(team == null){
|
||||||
|
team = "";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,6 +43,13 @@ public class MenuTagDirective implements TemplateDirectiveModel {
|
||||||
case "tree":
|
case "tree":
|
||||||
env.setVariable("menus", builder.build().wrap(menuService.listAsTree(Sort.by(DESC, "priority"))));
|
env.setVariable("menus", builder.build().wrap(menuService.listAsTree(Sort.by(DESC, "priority"))));
|
||||||
break;
|
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":
|
case "count":
|
||||||
env.setVariable("count", builder.build().wrap(menuService.count()));
|
env.setVariable("count", builder.build().wrap(menuService.count()));
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -13,6 +13,7 @@ import javax.validation.constraints.Size;
|
||||||
* Menu param.
|
* Menu param.
|
||||||
*
|
*
|
||||||
* @author johnniang
|
* @author johnniang
|
||||||
|
* @author ryanwang
|
||||||
* @date 4/3/19
|
* @date 4/3/19
|
||||||
*/
|
*/
|
||||||
@Data
|
@Data
|
||||||
|
@ -37,4 +38,7 @@ public class MenuParam implements InputConverter<Menu> {
|
||||||
private String icon;
|
private String icon;
|
||||||
|
|
||||||
private Integer parentId;
|
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;
|
package run.halo.app.repository;
|
||||||
|
|
||||||
|
import org.springframework.data.domain.Sort;
|
||||||
import org.springframework.lang.NonNull;
|
import org.springframework.lang.NonNull;
|
||||||
import run.halo.app.model.entity.Menu;
|
import run.halo.app.model.entity.Menu;
|
||||||
import run.halo.app.repository.base.BaseRepository;
|
import run.halo.app.repository.base.BaseRepository;
|
||||||
|
@ -10,6 +11,8 @@ import java.util.List;
|
||||||
* Menu repository.
|
* Menu repository.
|
||||||
*
|
*
|
||||||
* @author johnniang
|
* @author johnniang
|
||||||
|
* @author ryanwang
|
||||||
|
* @date 2019-8-28
|
||||||
*/
|
*/
|
||||||
public interface MenuRepository extends BaseRepository<Menu, Integer> {
|
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);
|
boolean existsByIdNotAndName(@NonNull Integer id, @NonNull String name);
|
||||||
|
|
||||||
List<Menu> findByParentId(@NonNull Integer id);
|
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.dto.MenuDTO;
|
||||||
import run.halo.app.model.entity.Menu;
|
import run.halo.app.model.entity.Menu;
|
||||||
import run.halo.app.model.params.MenuParam;
|
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.model.vo.MenuVO;
|
||||||
import run.halo.app.service.base.CrudService;
|
import run.halo.app.service.base.CrudService;
|
||||||
|
|
||||||
|
@ -28,6 +29,24 @@ public interface MenuService extends CrudService<Menu, Integer> {
|
||||||
@NonNull
|
@NonNull
|
||||||
List<MenuDTO> listDtos(@NonNull Sort sort);
|
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.
|
* 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.dto.MenuDTO;
|
||||||
import run.halo.app.model.entity.Menu;
|
import run.halo.app.model.entity.Menu;
|
||||||
import run.halo.app.model.params.MenuParam;
|
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.model.vo.MenuVO;
|
||||||
import run.halo.app.repository.MenuRepository;
|
import run.halo.app.repository.MenuRepository;
|
||||||
import run.halo.app.service.MenuService;
|
import run.halo.app.service.MenuService;
|
||||||
import run.halo.app.service.base.AbstractCrudService;
|
import run.halo.app.service.base.AbstractCrudService;
|
||||||
import run.halo.app.utils.ServiceUtils;
|
import run.halo.app.utils.ServiceUtils;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.*;
|
||||||
import java.util.LinkedList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -43,6 +42,41 @@ public class MenuServiceImpl extends AbstractCrudService<Menu, Integer> implemen
|
||||||
return convertTo(listAll(sort));
|
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
|
@Override
|
||||||
public Menu createBy(MenuParam menuParam) {
|
public Menu createBy(MenuParam menuParam) {
|
||||||
Assert.notNull(menuParam, "Menu param must not be null");
|
Assert.notNull(menuParam, "Menu param must not be null");
|
||||||
|
|
Loading…
Reference in New Issue