Commit c09a7648 by fengshuonan

增加菜单的分类

parent 8bbd7d33
...@@ -70,6 +70,11 @@ public class MenuNode implements Comparable, Serializable { ...@@ -70,6 +70,11 @@ public class MenuNode implements Comparable, Serializable {
private String icon; private String icon;
/** /**
* 系统类型
*/
private String systemType;
/**
* 子节点的集合 * 子节点的集合
*/ */
private List<MenuNode> children; private List<MenuNode> children;
......
...@@ -19,6 +19,7 @@ import lombok.Data; ...@@ -19,6 +19,7 @@ import lombok.Data;
import java.io.Serializable; import java.io.Serializable;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* 自定义Authentication对象,使得Subject除了携带用户的登录名外还可以携带更多信息 * 自定义Authentication对象,使得Subject除了携带用户的登录名外还可以携带更多信息
...@@ -76,4 +77,9 @@ public class ShiroUser implements Serializable { ...@@ -76,4 +77,9 @@ public class ShiroUser implements Serializable {
*/ */
private List<String> roleNames; private List<String> roleNames;
/**
* 系统标识集合
*/
private List<Map<String, Object>> systemTypes;
} }
...@@ -24,7 +24,7 @@ import cn.stylefeng.guns.sys.core.shiro.service.UserAuthService; ...@@ -24,7 +24,7 @@ import cn.stylefeng.guns.sys.core.shiro.service.UserAuthService;
import cn.stylefeng.guns.sys.modular.system.entity.User; import cn.stylefeng.guns.sys.modular.system.entity.User;
import cn.stylefeng.guns.sys.modular.system.mapper.MenuMapper; import cn.stylefeng.guns.sys.modular.system.mapper.MenuMapper;
import cn.stylefeng.guns.sys.modular.system.mapper.UserMapper; import cn.stylefeng.guns.sys.modular.system.mapper.UserMapper;
import cn.stylefeng.guns.sys.modular.system.service.UserService; import cn.stylefeng.guns.sys.modular.system.service.DictService;
import cn.stylefeng.roses.core.util.SpringContextHolder; import cn.stylefeng.roses.core.util.SpringContextHolder;
import org.apache.shiro.authc.CredentialsException; import org.apache.shiro.authc.CredentialsException;
import org.apache.shiro.authc.LockedAccountException; import org.apache.shiro.authc.LockedAccountException;
...@@ -38,6 +38,7 @@ import org.springframework.transaction.annotation.Transactional; ...@@ -38,6 +38,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map;
@Service @Service
@DependsOn("springContextHolder") @DependsOn("springContextHolder")
...@@ -51,7 +52,7 @@ public class UserAuthServiceServiceImpl implements UserAuthService { ...@@ -51,7 +52,7 @@ public class UserAuthServiceServiceImpl implements UserAuthService {
private MenuMapper menuMapper; private MenuMapper menuMapper;
@Autowired @Autowired
private UserService userService; private DictService dictService;
public static UserAuthService me() { public static UserAuthService me() {
return SpringContextHolder.getBean(UserAuthService.class); return SpringContextHolder.getBean(UserAuthService.class);
...@@ -91,6 +92,13 @@ public class UserAuthServiceServiceImpl implements UserAuthService { ...@@ -91,6 +92,13 @@ public class UserAuthServiceServiceImpl implements UserAuthService {
shiroUser.setRoleList(roleList); shiroUser.setRoleList(roleList);
shiroUser.setRoleNames(roleNameList); shiroUser.setRoleNames(roleNameList);
//根据角色获取系统的类型
List<String> systemTypes = this.menuMapper.getMenusTypesByRoleIds(roleList);
//通过字典编码
List<Map<String, Object>> dictsByCodes = dictService.getDictsByCodes(systemTypes);
shiroUser.setSystemTypes(dictsByCodes);
return shiroUser; return shiroUser;
} }
......
...@@ -185,6 +185,19 @@ public class DictController extends BaseController { ...@@ -185,6 +185,19 @@ public class DictController extends BaseController {
} }
/** /**
* 获取某个字典类型下的所有字典
*
* @author stylefeng
* @Date 2019-03-13
*/
@ResponseBody
@RequestMapping("/listDictsByCode")
public ResponseData listDictsByCode(@RequestParam("dictTypeCode") String dictTypeCode) {
List<Dict> dicts = this.dictService.listDictsByCode(dictTypeCode);
return new SuccessResponseData(dicts);
}
/**
* 获取某个类型下字典树的列表,ztree格式 * 获取某个类型下字典树的列表,ztree格式
* *
* @author fengshuonan * @author fengshuonan
......
...@@ -15,7 +15,6 @@ ...@@ -15,7 +15,6 @@
*/ */
package cn.stylefeng.guns.sys.modular.system.controller; package cn.stylefeng.guns.sys.modular.system.controller;
import cn.stylefeng.guns.base.pojo.node.MenuNode;
import cn.stylefeng.guns.base.shiro.ShiroUser; import cn.stylefeng.guns.base.shiro.ShiroUser;
import cn.stylefeng.guns.sys.core.exception.InvalidKaptchaException; import cn.stylefeng.guns.sys.core.exception.InvalidKaptchaException;
import cn.stylefeng.guns.sys.core.log.LogManager; import cn.stylefeng.guns.sys.core.log.LogManager;
...@@ -35,6 +34,7 @@ import org.springframework.web.bind.annotation.RequestMapping; ...@@ -35,6 +34,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestMethod;
import java.util.List; import java.util.List;
import java.util.Map;
import static cn.stylefeng.roses.core.util.HttpContext.getIp; import static cn.stylefeng.roses.core.util.HttpContext.getIp;
...@@ -69,7 +69,7 @@ public class LoginController extends BaseController { ...@@ -69,7 +69,7 @@ public class LoginController extends BaseController {
return "/login.html"; return "/login.html";
} }
List<MenuNode> menus = userService.getUserMenuNodes(roleList); List<Map<String, Object>> menus = userService.getUserMenuNodes(roleList);
model.addAttribute("menus", menus); model.addAttribute("menus", menus);
return "/index.html"; return "/index.html";
......
package cn.stylefeng.guns.sys.modular.system.entity; package cn.stylefeng.guns.sys.modular.system.entity;
import com.baomidou.mybatisplus.annotation.*; import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date; import java.util.Date;
...@@ -14,6 +15,7 @@ import java.util.Date; ...@@ -14,6 +15,7 @@ import java.util.Date;
* @since 2019-04-01 * @since 2019-04-01
*/ */
@TableName("sys_menu") @TableName("sys_menu")
@Data
public class Menu implements Serializable { public class Menu implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
...@@ -103,6 +105,12 @@ public class Menu implements Serializable { ...@@ -103,6 +105,12 @@ public class Menu implements Serializable {
private String openFlag; private String openFlag;
/** /**
* 系统分类(字典)
*/
@TableField("system_type")
private String systemType;
/**
* 创建时间 * 创建时间
*/ */
@TableField(value = "create_time", fill = FieldFill.INSERT) @TableField(value = "create_time", fill = FieldFill.INSERT)
...@@ -126,172 +134,4 @@ public class Menu implements Serializable { ...@@ -126,172 +134,4 @@ public class Menu implements Serializable {
@TableField(value = "update_user", fill = FieldFill.UPDATE) @TableField(value = "update_user", fill = FieldFill.UPDATE)
private Long updateUser; private Long updateUser;
public Long getMenuId() {
return menuId;
}
public void setMenuId(Long menuId) {
this.menuId = menuId;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getPcode() {
return pcode;
}
public void setPcode(String pcode) {
this.pcode = pcode;
}
public String getPcodes() {
return pcodes;
}
public void setPcodes(String pcodes) {
this.pcodes = pcodes;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getIcon() {
return icon;
}
public void setIcon(String icon) {
this.icon = icon;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public Integer getSort() {
return sort;
}
public void setSort(Integer sort) {
this.sort = sort;
}
public Integer getLevels() {
return levels;
}
public void setLevels(Integer levels) {
this.levels = levels;
}
public String getMenuFlag() {
return menuFlag;
}
public void setMenuFlag(String menuFlag) {
this.menuFlag = menuFlag;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getNewPageFlag() {
return newPageFlag;
}
public void setNewPageFlag(String newPageFlag) {
this.newPageFlag = newPageFlag;
}
public String getOpenFlag() {
return openFlag;
}
public void setOpenFlag(String openFlag) {
this.openFlag = openFlag;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public Date getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
public Long getCreateUser() {
return createUser;
}
public void setCreateUser(Long createUser) {
this.createUser = createUser;
}
public Long getUpdateUser() {
return updateUser;
}
public void setUpdateUser(Long updateUser) {
this.updateUser = updateUser;
}
@Override
public String toString() {
return "Menu{" +
"menuId=" + menuId +
", code=" + code +
", pcode=" + pcode +
", pcodes=" + pcodes +
", name=" + name +
", icon=" + icon +
", url=" + url +
", sort=" + sort +
", levels=" + levels +
", menuFlag=" + menuFlag +
", description=" + description +
", status=" + status +
", newPageFlag=" + newPageFlag +
", openFlag=" + openFlag +
", createTime=" + createTime +
", updateTime=" + updateTime +
", createUser=" + createUser +
", updateUser=" + updateUser +
"}";
}
} }
...@@ -80,6 +80,15 @@ public interface MenuMapper extends BaseMapper<Menu> { ...@@ -80,6 +80,15 @@ public interface MenuMapper extends BaseMapper<Menu> {
List<MenuNode> getMenusByRoleIds(List<Long> roleIds); List<MenuNode> getMenusByRoleIds(List<Long> roleIds);
/** /**
* 根据角色获取菜单的类型列表
*
* @param roleIds
* @return
* @date 2019年07月11日16:26:27
*/
List<String> getMenusTypesByRoleIds(List<Long> roleIds);
/**
* 查询菜单树形列表 * 查询菜单树形列表
* *
* @author fengshuonan * @author fengshuonan
......
...@@ -4,24 +4,24 @@ ...@@ -4,24 +4,24 @@
<!-- 通用查询映射结果 --> <!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="cn.stylefeng.guns.sys.modular.system.entity.Menu"> <resultMap id="BaseResultMap" type="cn.stylefeng.guns.sys.modular.system.entity.Menu">
<id column="menu_id" property="menuId" /> <id column="menu_id" property="menuId"/>
<result column="code" property="code" /> <result column="code" property="code"/>
<result column="pcode" property="pcode" /> <result column="pcode" property="pcode"/>
<result column="pcodes" property="pcodes" /> <result column="pcodes" property="pcodes"/>
<result column="name" property="name" /> <result column="name" property="name"/>
<result column="icon" property="icon" /> <result column="icon" property="icon"/>
<result column="url" property="url" /> <result column="url" property="url"/>
<result column="sort" property="sort" /> <result column="sort" property="sort"/>
<result column="levels" property="levels" /> <result column="levels" property="levels"/>
<result column="menu_flag" property="menuFlag" /> <result column="menu_flag" property="menuFlag"/>
<result column="description" property="description" /> <result column="description" property="description"/>
<result column="status" property="status" /> <result column="status" property="status"/>
<result column="new_page_flag" property="newPageFlag" /> <result column="new_page_flag" property="newPageFlag"/>
<result column="open_flag" property="openFlag" /> <result column="open_flag" property="openFlag"/>
<result column="create_time" property="createTime" /> <result column="create_time" property="createTime"/>
<result column="update_time" property="updateTime" /> <result column="update_time" property="updateTime"/>
<result column="create_user" property="createUser" /> <result column="create_user" property="createUser"/>
<result column="update_user" property="updateUser" /> <result column="update_user" property="updateUser"/>
</resultMap> </resultMap>
<!-- 通用查询结果列 --> <!-- 通用查询结果列 -->
...@@ -251,6 +251,7 @@ ...@@ -251,6 +251,7 @@
m1.url as url, m1.url as url,
m1.levels as levels, m1.levels as levels,
m1.menu_flag as ismenu, m1.menu_flag as ismenu,
m1.system_type as systemType,
m1.sort as num m1.sort as num
FROM FROM
sys_menu m1 sys_menu m1
...@@ -321,4 +322,14 @@ ...@@ -321,4 +322,14 @@
</if> </if>
</select> </select>
<select id="getMenusTypesByRoleIds" resultType="java.lang.String">
select DISTINCT system_type from
sys_relation rel
inner join sys_menu m on rel.menu_id = m.menu_id
where rel.role_id in
<foreach collection="list" index="index" item="i" open="(" separator="," close=")">
#{i}
</foreach>
</select>
</mapper> </mapper>
...@@ -65,5 +65,9 @@ public class MenuDto implements Serializable { ...@@ -65,5 +65,9 @@ public class MenuDto implements Serializable {
* 备注 * 备注
*/ */
private String description; private String description;
/**
* 系统分类(字典)
*/
private String systemType;
} }
...@@ -6,6 +6,7 @@ import cn.stylefeng.guns.base.pojo.page.LayuiPageFactory; ...@@ -6,6 +6,7 @@ import cn.stylefeng.guns.base.pojo.page.LayuiPageFactory;
import cn.stylefeng.guns.base.pojo.page.LayuiPageInfo; import cn.stylefeng.guns.base.pojo.page.LayuiPageInfo;
import cn.stylefeng.guns.sys.core.exception.enums.BizExceptionEnum; import cn.stylefeng.guns.sys.core.exception.enums.BizExceptionEnum;
import cn.stylefeng.guns.sys.modular.system.entity.Dict; import cn.stylefeng.guns.sys.modular.system.entity.Dict;
import cn.stylefeng.guns.sys.modular.system.entity.DictType;
import cn.stylefeng.guns.sys.modular.system.mapper.DictMapper; import cn.stylefeng.guns.sys.modular.system.mapper.DictMapper;
import cn.stylefeng.guns.sys.modular.system.model.params.DictParam; import cn.stylefeng.guns.sys.modular.system.model.params.DictParam;
import cn.stylefeng.guns.sys.modular.system.model.result.DictResult; import cn.stylefeng.guns.sys.modular.system.model.result.DictResult;
...@@ -15,11 +16,13 @@ import cn.stylefeng.roses.kernel.model.exception.ServiceException; ...@@ -15,11 +16,13 @@ import cn.stylefeng.roses.kernel.model.exception.ServiceException;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.io.Serializable; import java.io.Serializable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* <p> * <p>
...@@ -32,6 +35,9 @@ import java.util.List; ...@@ -32,6 +35,9 @@ import java.util.List;
@Service @Service
public class DictService extends ServiceImpl<DictMapper, Dict> { public class DictService extends ServiceImpl<DictMapper, Dict> {
@Autowired
private DictTypeService dictTypeService;
/** /**
* 新增 * 新增
* *
...@@ -247,6 +253,35 @@ public class DictService extends ServiceImpl<DictMapper, Dict> { ...@@ -247,6 +253,35 @@ public class DictService extends ServiceImpl<DictMapper, Dict> {
} }
/**
* 查询字典列表,通过字典类型code
*
* @author fengshuonan
* @Date 2019-06-20 15:14
*/
public List<Dict> listDictsByCode(String dictTypeCode) {
QueryWrapper<DictType> wrapper = new QueryWrapper<>();
wrapper.eq("code", dictTypeCode);
DictType one = this.dictTypeService.getOne(wrapper);
return listDicts(one.getDictTypeId());
}
/**
* 查询字典列表,通过字典类型code
*
* @author fengshuonan
* @Date 2019-06-20 15:14
*/
public List<Map<String, Object>> getDictsByCodes(List<String> dictCodes) {
QueryWrapper<Dict> wrapper = new QueryWrapper<>();
wrapper.in("code", dictCodes).orderByAsc("sort");
return this.listMaps(wrapper);
}
private Serializable getKey(DictParam param) { private Serializable getKey(DictParam param) {
return param.getDictId(); return param.getDictId();
} }
...@@ -294,4 +329,5 @@ public class DictService extends ServiceImpl<DictMapper, Dict> { ...@@ -294,4 +329,5 @@ public class DictService extends ServiceImpl<DictMapper, Dict> {
} }
} }
} }
} }
...@@ -49,7 +49,7 @@ public class MenuService extends ServiceImpl<MenuMapper, Menu> { ...@@ -49,7 +49,7 @@ public class MenuService extends ServiceImpl<MenuMapper, Menu> {
@Transactional @Transactional
public void addMenu(MenuDto menuDto) { public void addMenu(MenuDto menuDto) {
if (ToolUtil.isOneEmpty(menuDto, menuDto.getCode(), menuDto.getName(), menuDto.getPid(), menuDto.getMenuFlag(), menuDto.getUrl())) { if (ToolUtil.isOneEmpty(menuDto, menuDto.getCode(), menuDto.getName(), menuDto.getPid(), menuDto.getMenuFlag(), menuDto.getUrl(), menuDto.getSystemType())) {
throw new RequestEmptyException(); throw new RequestEmptyException();
} }
...@@ -128,6 +128,9 @@ public class MenuService extends ServiceImpl<MenuMapper, Menu> { ...@@ -128,6 +128,9 @@ public class MenuService extends ServiceImpl<MenuMapper, Menu> {
int level = StrUtil.count(menuPcodes, "["); int level = StrUtil.count(menuPcodes, "[");
menu.setLevels(level); menu.setLevels(level);
//更新systemType
menu.setSystemType(newMenu.getSystemType());
this.updateById(menu); this.updateById(menu);
} }
......
...@@ -198,12 +198,39 @@ public class UserService extends ServiceImpl<UserMapper, User> { ...@@ -198,12 +198,39 @@ public class UserService extends ServiceImpl<UserMapper, User> {
* @author fengshuonan * @author fengshuonan
* @Date 2018/12/24 22:46 * @Date 2018/12/24 22:46
*/ */
public List<MenuNode> getUserMenuNodes(List<Long> roleList) { public List<Map<String, Object>> getUserMenuNodes(List<Long> roleList) {
if (roleList == null || roleList.size() == 0) { if (roleList == null || roleList.size() == 0) {
return new ArrayList<>(); return new ArrayList<>();
} else { } else {
List<MenuNode> menus = menuService.getMenusByRoleIds(roleList); List<MenuNode> menus = menuService.getMenusByRoleIds(roleList);
return MenuNode.buildTitle(menus);
//定义不同系统分类的菜单集合
ArrayList<Map<String, Object>> lists = new ArrayList<>();
//根据当前用户包含的系统类型,分类出不同的菜单
List<Map<String, Object>> systemTypes = ShiroKit.getUserNotNull().getSystemTypes();
for (Map<String, Object> systemType : systemTypes) {
//当前遍历系统分类code
String systemCode = (String) systemType.get("code");
//获取当前系统分类下菜单集合
ArrayList<MenuNode> originSystemTypeMenus = new ArrayList<>();
for (MenuNode menu : menus) {
if (menu.getSystemType().equals(systemCode)) {
originSystemTypeMenus.add(menu);
}
}
//拼接存放key为系统分类编码,value为该分类下菜单集合的map
HashMap<String, Object> map = new HashMap<>();
List<MenuNode> treeSystemTypeMenus = MenuNode.buildTitle(originSystemTypeMenus);
map.put("systemType", systemCode);
map.put("menus", treeSystemTypeMenus);
lists.add(map);
}
return lists;
} }
} }
......
...@@ -64,10 +64,27 @@ layui.use(['layer', 'form', 'admin', 'laydate', 'ax', 'iconPicker'], function () ...@@ -64,10 +64,27 @@ layui.use(['layer', 'form', 'admin', 'laydate', 'ax', 'iconPicker'], function ()
type: 'fontClass', type: 'fontClass',
search: true, search: true,
page: true, page: true,
limit: 48, limit: 12,
click: function (data) { click: function (data) {
} }
}); });
iconPicker.checkIcon('iconPicker', 'layui-icon-star-fill'); iconPicker.checkIcon('iconPicker', 'layui-icon-star-fill');
//初始化字典详细列表
$("#dictDetails").html('');
var ajax = new $ax(Feng.ctxPath + "/dict/listDictsByCode", function (data) {
for (var i = 0; i < data.data.length; i++) {
var name = data.data[i].name;
var code = data.data[i].code;
$("#dictDetails").append('<input type="radio" name="systemType" value="' + code + '" title="' + name + '">');
}
form.render();
}, function (data) {
});
ajax.set("dictTypeCode", "SYSTEM_TYPE");
ajax.start();
}); });
\ No newline at end of file
...@@ -17,6 +17,19 @@ layui.use(['layer', 'form', 'admin', 'laydate', 'ax', 'iconPicker'], function () ...@@ -17,6 +17,19 @@ layui.use(['layer', 'form', 'admin', 'laydate', 'ax', 'iconPicker'], function ()
var layer = layui.layer; var layer = layui.layer;
var iconPicker = layui.iconPicker; var iconPicker = layui.iconPicker;
//初始化字典详细列表
$("#dictDetails").html('');
var ajax = new $ax(Feng.ctxPath + "/dict/listDictsByCode", function (data) {
for (var i = 0; i < data.data.length; i++) {
var name = data.data[i].name;
var code = data.data[i].code;
$("#dictDetails").append('<input type="radio" name="systemType" value="' + code + '" title="' + name + '">');
}
}, function (data) {
});
ajax.set("dictTypeCode", "SYSTEM_TYPE");
ajax.start();
//获取菜单信息 //获取菜单信息
var ajax = new $ax(Feng.ctxPath + "/menu/getMenuInfo?menuId=" + Feng.getUrlParam("menuId")); var ajax = new $ax(Feng.ctxPath + "/menu/getMenuInfo?menuId=" + Feng.getUrlParam("menuId"));
var result = ajax.start(); var result = ajax.start();
......
...@@ -12,6 +12,18 @@ ...@@ -12,6 +12,18 @@
<li class="layui-nav-item" lay-unselect> <li class="layui-nav-item" lay-unselect>
<a ew-event="refresh" title="刷新"><i class="layui-icon layui-icon-refresh-3"></i></a> <a ew-event="refresh" title="刷新"><i class="layui-icon layui-icon-refresh-3"></i></a>
</li> </li>
@var types = shiro.getUser().systemTypes;
@if(tool.isNotEmpty(types)){
@for(type in types) {
@if(typeLP.index == 1){
<li class="layui-nav-item layui-hide-xs layui-this" lay-unselect><a nav-bind="${type.code}">${type.name}</a></li>
@}else{
<li class="layui-nav-item layui-hide-xs" lay-unselect><a nav-bind="${type.code}">${type.name}</a></li>
@}
@}
@}
@if(constants.getDefaultAdvert()){ @if(constants.getDefaultAdvert()){
<li class="layui-nav-item" lay-unselect> <li class="layui-nav-item" lay-unselect>
<a href="https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=p4kqz45e" target="_blank">阿里云5折优惠券,点我领取</a> <a href="https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=p4kqz45e" target="_blank">阿里云5折优惠券,点我领取</a>
...@@ -23,6 +35,7 @@ ...@@ -23,6 +35,7 @@
<a style="color: #fe7300;" href="https://gitee.com/stylefeng/guns" target="_blank">请star支持一下Guns</a> <a style="color: #fe7300;" href="https://gitee.com/stylefeng/guns" target="_blank">请star支持一下Guns</a>
</li> </li>
@} @}
</ul> </ul>
<ul class="layui-nav layui-layout-right"> <ul class="layui-nav layui-layout-right">
<li class="layui-nav-item" lay-unselect> <li class="layui-nav-item" lay-unselect>
......
@/* 侧边栏 */ @/* 侧边栏 */
<div class="layui-side"> <div class="layui-side">
<div class="layui-side-scroll"> <div class="layui-side-scroll">
<ul class="layui-nav layui-nav-tree" lay-filter="admin-side-nav" style="margin-top: 15px;">
@for(menu in menus) { @for(item in menus){
@if(tool.isEmpty(menu.children)){ <ul class="layui-nav layui-nav-tree" nav-id="${item.systemType}" lay-filter="admin-side-nav" style="margin-top: 15px;">
<li class="layui-nav-item"> @for(menu in item.menus) {
<a lay-href="${menu.url}"><i class="layui-icon ${menu.icon}"></i>&emsp;<cite>${menu.name}</cite></a> @if(tool.isEmpty(menu.children)){
</li> <li class="layui-nav-item">
@}else{ <a lay-href="${menu.url}"><i class="layui-icon ${menu.icon}"></i>&emsp;<cite>${menu.name}</cite></a>
<li class="layui-nav-item"> </li>
<a><i class="layui-icon ${menu.icon}"></i>&emsp;<cite>${menu.name}</cite></a> @}else{
<dl class="layui-nav-child"> <li class="layui-nav-item">
@for(subMenu in menu.children){ <a><i class="layui-icon ${menu.icon}"></i>&emsp;<cite>${menu.name}</cite></a>
@if(tool.isEmpty(subMenu.children)){ <dl class="layui-nav-child">
<dd><a lay-href="${subMenu.url}">${subMenu.name}</a></dd> @for(subMenu in menu.children){
@}else{ @if(tool.isEmpty(subMenu.children)){
<dd> <dd><a lay-href="${subMenu.url}">${subMenu.name}</a></dd>
<a>${subMenu.name}</a> @}else{
<dl class="layui-nav-child"> <dd>
@for(subSubMenu in subMenu.children){ <a>${subMenu.name}</a>
@if(tool.isEmpty(subSubMenu.children)){ <dl class="layui-nav-child">
<dd><a lay-href="${subSubMenu.url}">${subSubMenu.name}</a></dd> @for(subSubMenu in subMenu.children){
@}else{ @if(tool.isEmpty(subSubMenu.children)){
<dd> <dd><a lay-href="${subSubMenu.url}">${subSubMenu.name}</a></dd>
<a>${subSubMenu.name}</a> @}else{
<dl class="layui-nav-child"> <dd>
@for(subSubSubMenu in subSubMenu.children){ <a>${subSubMenu.name}</a>
<dd><a lay-href="${subSubSubMenu.url}">${subSubSubMenu.name}</a></dd> <dl class="layui-nav-child">
@for(subSubSubMenu in subSubMenu.children){
<dd><a lay-href="${subSubSubMenu.url}">${subSubSubMenu.name}</a></dd>
@}
</dl>
</dd>
@} @}
</dl>
</dd>
@} @}
</dl>
</dd>
@} @}
</dl>
</dd>
@} @}
</dl>
</li>
@} @}
</dl>
</li>
@} @}
</ul>
@} @}
</ul>
</div> </div>
</div> </div>
\ No newline at end of file
...@@ -41,6 +41,12 @@ ...@@ -41,6 +41,12 @@
</div> </div>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">系统分类<span style="color: red;">*</span></label>
<div class="layui-input-block" id="dictDetails">
<input type="radio" name="systemType" value="" title="无" disabled="disabled">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">排序</label> <label class="layui-form-label">排序</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input name="sort" placeholder="请输入排序" type="text" class="layui-input"/> <input name="sort" placeholder="请输入排序" type="text" class="layui-input"/>
......
...@@ -41,6 +41,12 @@ ...@@ -41,6 +41,12 @@
</div> </div>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">系统分类<span style="color: red;">*</span></label>
<div class="layui-input-block" id="dictDetails">
<input type="radio" name="systemType" value="" title="无" disabled="disabled">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">排序</label> <label class="layui-form-label">排序</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input name="sort" placeholder="请输入排序" type="text" class="layui-input"/> <input name="sort" placeholder="请输入排序" type="text" class="layui-input"/>
......
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