Commit 094e1b62 by fengshuonan

整理菜单

parent 9819de2b
...@@ -21,7 +21,6 @@ import cn.stylefeng.guns.core.common.annotion.Permission; ...@@ -21,7 +21,6 @@ import cn.stylefeng.guns.core.common.annotion.Permission;
import cn.stylefeng.guns.core.common.constant.Const; import cn.stylefeng.guns.core.common.constant.Const;
import cn.stylefeng.guns.core.common.constant.dictmap.MenuDict; import cn.stylefeng.guns.core.common.constant.dictmap.MenuDict;
import cn.stylefeng.guns.core.common.constant.factory.ConstantFactory; import cn.stylefeng.guns.core.common.constant.factory.ConstantFactory;
import cn.stylefeng.guns.core.common.constant.state.MenuStatus;
import cn.stylefeng.guns.core.common.exception.BizExceptionEnum; import cn.stylefeng.guns.core.common.exception.BizExceptionEnum;
import cn.stylefeng.guns.core.common.node.ZTreeNode; import cn.stylefeng.guns.core.common.node.ZTreeNode;
import cn.stylefeng.guns.core.log.LogObjectHolder; import cn.stylefeng.guns.core.log.LogObjectHolder;
...@@ -33,10 +32,8 @@ import cn.stylefeng.roses.core.base.controller.BaseController; ...@@ -33,10 +32,8 @@ import cn.stylefeng.roses.core.base.controller.BaseController;
import cn.stylefeng.roses.core.reqres.response.ResponseData; import cn.stylefeng.roses.core.reqres.response.ResponseData;
import cn.stylefeng.roses.core.util.ToolUtil; import cn.stylefeng.roses.core.util.ToolUtil;
import cn.stylefeng.roses.kernel.model.exception.ServiceException; import cn.stylefeng.roses.kernel.model.exception.ServiceException;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
...@@ -62,6 +59,9 @@ public class MenuController extends BaseController { ...@@ -62,6 +59,9 @@ public class MenuController extends BaseController {
/** /**
* 跳转到菜单列表列表页面 * 跳转到菜单列表列表页面
*
* @author fengshuonan
* @Date 2018/12/23 5:53 PM
*/ */
@RequestMapping("") @RequestMapping("")
public String index() { public String index() {
...@@ -70,6 +70,9 @@ public class MenuController extends BaseController { ...@@ -70,6 +70,9 @@ public class MenuController extends BaseController {
/** /**
* 跳转到菜单列表列表页面 * 跳转到菜单列表列表页面
*
* @author fengshuonan
* @Date 2018/12/23 5:53 PM
*/ */
@RequestMapping(value = "/menu_add") @RequestMapping(value = "/menu_add")
public String menuAdd() { public String menuAdd() {
...@@ -78,37 +81,29 @@ public class MenuController extends BaseController { ...@@ -78,37 +81,29 @@ public class MenuController extends BaseController {
/** /**
* 跳转到菜单详情列表页面 * 跳转到菜单详情列表页面
*
* @author fengshuonan
* @Date 2018/12/23 5:53 PM
*/ */
@Permission(Const.ADMIN_NAME) @Permission(Const.ADMIN_NAME)
@RequestMapping(value = "/menu_edit") @RequestMapping(value = "/menu_edit")
public String menuEdit(@RequestParam Long menuId, Model model) { public String menuEdit(@RequestParam Long menuId) {
if (ToolUtil.isEmpty(menuId)) { if (ToolUtil.isEmpty(menuId)) {
throw new ServiceException(BizExceptionEnum.REQUEST_NULL); throw new ServiceException(BizExceptionEnum.REQUEST_NULL);
} }
Menu menu = this.menuService.selectById(menuId);
//获取父级菜单的id //获取菜单当前信息,记录日志用
Menu temp = new Menu(); Menu menu = this.menuService.selectById(menuId);
temp.setCode(menu.getPcode());
Menu pMenu = this.menuService.selectOne(new EntityWrapper<>(temp));
//如果父级是顶级菜单
if (pMenu == null) {
menu.setPcode("0");
} else {
//设置父级菜单的code为父级菜单的id
menu.setPcode(String.valueOf(pMenu.getMenuId()));
}
Map<String, Object> menuMap = BeanUtil.beanToMap(menu);
menuMap.put("pcodeName", ConstantFactory.me().getMenuNameByCode(temp.getCode()));
model.addAttribute("menu", menuMap);
LogObjectHolder.me().set(menu); LogObjectHolder.me().set(menu);
return PREFIX + "menu_edit.html"; return PREFIX + "menu_edit.html";
} }
/** /**
* 修该菜单 * 修该菜单
*
* @author fengshuonan
* @Date 2018/12/23 5:53 PM
*/ */
@Permission(Const.ADMIN_NAME) @Permission(Const.ADMIN_NAME)
@RequestMapping(value = "/edit") @RequestMapping(value = "/edit")
...@@ -117,48 +112,48 @@ public class MenuController extends BaseController { ...@@ -117,48 +112,48 @@ public class MenuController extends BaseController {
public ResponseData edit(MenuDto menu) { public ResponseData edit(MenuDto menu) {
//设置父级菜单编号 //设置父级菜单编号
Menu resultMenu = menuSetPcode(menu); Menu resultMenu = this.menuService.menuSetPcode(menu);
this.menuService.updateById(resultMenu); this.menuService.updateById(resultMenu);
return SUCCESS_TIP; return SUCCESS_TIP;
} }
/** /**
* 获取菜单列表 * 获取菜单列表
*
* @author fengshuonan
* @Date 2018/12/23 5:53 PM
*/ */
@Permission(Const.ADMIN_NAME) @Permission(Const.ADMIN_NAME)
@RequestMapping(value = "/list") @RequestMapping(value = "/list")
@ResponseBody @ResponseBody
public Object list(@RequestParam(required = false) String menuName, @RequestParam(required = false) String level) { public Object list(@RequestParam(required = false) String menuName,
@RequestParam(required = false) String level) {
List<Map<String, Object>> menus = this.menuService.selectMenus(menuName, level); List<Map<String, Object>> menus = this.menuService.selectMenus(menuName, level);
return super.warpObject(new MenuWarpper(menus)); return super.warpObject(new MenuWarpper(menus));
} }
/** /**
* 新增菜单 * 新增菜单
*
* @author fengshuonan
* @Date 2018/12/23 5:53 PM
*/ */
@Permission(Const.ADMIN_NAME) @Permission(Const.ADMIN_NAME)
@RequestMapping(value = "/add") @RequestMapping(value = "/add")
@BussinessLog(value = "菜单新增", key = "name", dict = MenuDict.class) @BussinessLog(value = "菜单新增", key = "name", dict = MenuDict.class)
@ResponseBody @ResponseBody
public ResponseData add(MenuDto menu) { public ResponseData add(MenuDto menu) {
this.menuService.addMenu(menu);
//判断是否存在该编号
String existedMenuName = ConstantFactory.me().getMenuNameByCode(menu.getCode());
if (ToolUtil.isNotEmpty(existedMenuName)) {
throw new ServiceException(BizExceptionEnum.EXISTED_THE_MENU);
}
//设置父级菜单编号
Menu resultMenu = menuSetPcode(menu);
resultMenu.setStatus(MenuStatus.ENABLE.getCode());
this.menuService.insert(resultMenu);
return SUCCESS_TIP; return SUCCESS_TIP;
} }
/** /**
* 删除菜单 * 删除菜单
*
* @author fengshuonan
* @Date 2018/12/23 5:53 PM
*/ */
@Permission(Const.ADMIN_NAME) @Permission(Const.ADMIN_NAME)
@RequestMapping(value = "/remove") @RequestMapping(value = "/remove")
...@@ -173,11 +168,15 @@ public class MenuController extends BaseController { ...@@ -173,11 +168,15 @@ public class MenuController extends BaseController {
LogObjectHolder.me().set(ConstantFactory.me().getMenuName(menuId)); LogObjectHolder.me().set(ConstantFactory.me().getMenuName(menuId));
this.menuService.delMenuContainSubMenus(menuId); this.menuService.delMenuContainSubMenus(menuId);
return SUCCESS_TIP; return SUCCESS_TIP;
} }
/** /**
* 查看菜单 * 查看菜单
*
* @author fengshuonan
* @Date 2018/12/23 5:53 PM
*/ */
@RequestMapping(value = "/view/{menuId}") @RequestMapping(value = "/view/{menuId}")
@ResponseBody @ResponseBody
...@@ -191,6 +190,9 @@ public class MenuController extends BaseController { ...@@ -191,6 +190,9 @@ public class MenuController extends BaseController {
/** /**
* 获取菜单信息 * 获取菜单信息
*
* @author fengshuonan
* @Date 2018/12/23 5:53 PM
*/ */
@RequestMapping(value = "/getMenuInfo") @RequestMapping(value = "/getMenuInfo")
@ResponseBody @ResponseBody
...@@ -200,8 +202,11 @@ public class MenuController extends BaseController { ...@@ -200,8 +202,11 @@ public class MenuController extends BaseController {
} }
Menu menu = this.menuService.selectById(menuId); Menu menu = this.menuService.selectById(menuId);
MenuDto menuDto = new MenuDto(); MenuDto menuDto = new MenuDto();
BeanUtil.copyProperties(menu, menuDto); BeanUtil.copyProperties(menu, menuDto);
//设置pid和父级名称
menuDto.setPid(ConstantFactory.me().getMenuIdByCode(menuDto.getPcode())); menuDto.setPid(ConstantFactory.me().getMenuIdByCode(menuDto.getPcode()));
menuDto.setPcodeName(ConstantFactory.me().getMenuNameByCode(menuDto.getPcode())); menuDto.setPcodeName(ConstantFactory.me().getMenuNameByCode(menuDto.getPcode()));
...@@ -210,6 +215,9 @@ public class MenuController extends BaseController { ...@@ -210,6 +215,9 @@ public class MenuController extends BaseController {
/** /**
* 获取菜单列表(首页用) * 获取菜单列表(首页用)
*
* @author fengshuonan
* @Date 2018/12/23 5:54 PM
*/ */
@RequestMapping(value = "/menuTreeList") @RequestMapping(value = "/menuTreeList")
@ResponseBody @ResponseBody
...@@ -219,6 +227,9 @@ public class MenuController extends BaseController { ...@@ -219,6 +227,9 @@ public class MenuController extends BaseController {
/** /**
* 获取菜单列表(选择父级菜单用) * 获取菜单列表(选择父级菜单用)
*
* @author fengshuonan
* @Date 2018/12/23 5:54 PM
*/ */
@RequestMapping(value = "/selectMenuTreeList") @RequestMapping(value = "/selectMenuTreeList")
@ResponseBody @ResponseBody
...@@ -229,7 +240,10 @@ public class MenuController extends BaseController { ...@@ -229,7 +240,10 @@ public class MenuController extends BaseController {
} }
/** /**
* 获取角色列表 * 获取角色的菜单列表
*
* @author fengshuonan
* @Date 2018/12/23 5:54 PM
*/ */
@RequestMapping(value = "/menuTreeListByRoleId/{roleId}") @RequestMapping(value = "/menuTreeListByRoleId/{roleId}")
@ResponseBody @ResponseBody
...@@ -242,34 +256,4 @@ public class MenuController extends BaseController { ...@@ -242,34 +256,4 @@ public class MenuController extends BaseController {
} }
} }
/**
* 根据请求的父级菜单编号设置pcode和层级
*/
private Menu menuSetPcode(MenuDto menuParam) {
Menu resultMenu = new Menu();
BeanUtil.copyProperties(menuParam, resultMenu);
if (ToolUtil.isEmpty(menuParam.getPid()) || menuParam.getPid().equals(0L)) {
resultMenu.setPcode("0");
resultMenu.setPcodes("[0],");
resultMenu.setLevels(1);
} else {
Long pid = menuParam.getPid();
Menu pMenu = menuService.selectById(pid);
Integer pLevels = pMenu.getLevels();
resultMenu.setPcode(pMenu.getCode());
//如果编号和父编号一致会导致无限递归
if (menuParam.getCode().equals(menuParam.getPcode())) {
throw new ServiceException(BizExceptionEnum.MENU_PCODE_COINCIDENCE);
}
resultMenu.setLevels(pLevels + 1);
resultMenu.setPcodes(pMenu.getPcodes() + "[" + pMenu.getCode() + "],");
}
return resultMenu;
}
} }
package cn.stylefeng.guns.modular.system.service; package cn.stylefeng.guns.modular.system.service;
import cn.hutool.core.bean.BeanUtil;
import cn.stylefeng.guns.core.common.constant.factory.ConstantFactory;
import cn.stylefeng.guns.core.common.constant.state.MenuStatus;
import cn.stylefeng.guns.core.common.exception.BizExceptionEnum;
import cn.stylefeng.guns.core.common.node.MenuNode; import cn.stylefeng.guns.core.common.node.MenuNode;
import cn.stylefeng.guns.core.common.node.ZTreeNode; import cn.stylefeng.guns.core.common.node.ZTreeNode;
import cn.stylefeng.guns.modular.system.entity.Menu; import cn.stylefeng.guns.modular.system.entity.Menu;
import cn.stylefeng.guns.modular.system.mapper.MenuMapper; import cn.stylefeng.guns.modular.system.mapper.MenuMapper;
import cn.stylefeng.guns.modular.system.model.MenuDto;
import cn.stylefeng.roses.core.util.ToolUtil;
import cn.stylefeng.roses.kernel.model.exception.RequestEmptyException;
import cn.stylefeng.roses.kernel.model.exception.ServiceException;
import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper; import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.service.impl.ServiceImpl; import com.baomidou.mybatisplus.service.impl.ServiceImpl;
...@@ -29,6 +37,33 @@ public class MenuService extends ServiceImpl<MenuMapper, Menu> { ...@@ -29,6 +37,33 @@ public class MenuService extends ServiceImpl<MenuMapper, Menu> {
private MenuMapper menuMapper; private MenuMapper menuMapper;
/** /**
* 添加菜单
*
* @author fengshuonan
* @Date 2018/12/23 5:59 PM
*/
@Transactional
public void addMenu(MenuDto menuDto) {
if (ToolUtil.isOneEmpty(menuDto, menuDto.getCode(), menuDto.getName(), menuDto.getPid(), menuDto.getMenuFlag(), menuDto.getUrl())) {
throw new RequestEmptyException();
}
//判断是否已经存在该编号
String existedMenuName = ConstantFactory.me().getMenuNameByCode(menuDto.getCode());
if (ToolUtil.isNotEmpty(existedMenuName)) {
throw new ServiceException(BizExceptionEnum.EXISTED_THE_MENU);
}
//组装属性,设置父级菜单编号
Menu resultMenu = this.menuSetPcode(menuDto);
resultMenu.setStatus(MenuStatus.ENABLE.getCode());
this.insert(resultMenu);
}
/**
* 删除菜单 * 删除菜单
* *
* @author stylefeng * @author stylefeng
...@@ -152,4 +187,37 @@ public class MenuService extends ServiceImpl<MenuMapper, Menu> { ...@@ -152,4 +187,37 @@ public class MenuService extends ServiceImpl<MenuMapper, Menu> {
return this.baseMapper.selectOne(menu); return this.baseMapper.selectOne(menu);
} }
/**
* 根据请求的父级菜单编号设置pcode和层级
*
* @author fengshuonan
* @Date 2018/12/23 5:54 PM
*/
public Menu menuSetPcode(MenuDto menuParam) {
Menu resultMenu = new Menu();
BeanUtil.copyProperties(menuParam, resultMenu);
if (ToolUtil.isEmpty(menuParam.getPid()) || menuParam.getPid().equals(0L)) {
resultMenu.setPcode("0");
resultMenu.setPcodes("[0],");
resultMenu.setLevels(1);
} else {
Long pid = menuParam.getPid();
Menu pMenu = this.selectById(pid);
Integer pLevels = pMenu.getLevels();
resultMenu.setPcode(pMenu.getCode());
//如果编号和父编号一致会导致无限递归
if (menuParam.getCode().equals(menuParam.getPcode())) {
throw new ServiceException(BizExceptionEnum.MENU_PCODE_COINCIDENCE);
}
resultMenu.setLevels(pLevels + 1);
resultMenu.setPcodes(pMenu.getPcodes() + "[" + pMenu.getCode() + "],");
}
return resultMenu;
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment