栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

LAYUIMINI笔记

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

LAYUIMINI笔记

一.用layui及mini做一个初步的导航栏加菜单栏框架。

       layuimini目前是开源的前端框架。目前有两种思路。第一种是用接口,让layuimini读取接口中的菜单栏初始化,一种是用model映射。

        我用的模板引擎是thymeleaf。

1.(制作页面第一种方法)用model映射做导航栏和菜单栏

        这种适合有js基础的人,因为很多东西都要参考layuimini的基础重做js,否则无法将导航栏,菜单栏,菜单历史导航同步。先看数据库设计:

DROp TABLE IF EXISTS `sys_menu`;
CREATE TABLE `sys_menu`  (
  `pk_menu_id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `menu_title` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '标题',
  `menu_href` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '链接',
  `parent_id` bigint(0) NOT NULL COMMENT '父级菜单ID',
  `icon` varchar(10000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '图标',
  `authority` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '权限标识符',
  `sort` smallint(0) NULL DEFAULT NULL COMMENT '排序值',
  `type` tinyint(0) NOT NULL COMMENT '类型[1:目录, 2:菜单, 3:按钮]',
  `status` bit(1) NULL DEFAULT NULL COMMENT '是否显示',
  `remark` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
  `target` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '页面跳转方式',
  `create_by` bigint(0) NULL DEFAULT NULL COMMENT '创建人',
  `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
  `update_by` bigint(0) NULL DEFAULT NULL COMMENT '更新人',
  `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',
  PRIMARY KEY (`pk_menu_id`) USING BTREE,
  UNIQUE INDEX `idx_menu_title`(`menu_title`) USING BTREE,
  INDEX `idx_menu_pid`(`parent_id`) USING BTREE,
  INDEX `idx_menu_sort`(`sort`) USING BTREE,
  INDEX `idx_menu_href`(`menu_href`) USING BTREE,
  INDEX `idx_menu_authority`(`authority`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 88 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;

SET FOREIGN_KEY_CHECKS = 1;

        可用Mybatisplus,然后自己写个递归将菜单栏做成树形json数据结构,返回到前端进行接收。

 
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
    

 
        select * from sys_menu where parent_id=${id}
    

JAVA代码部分:

DAO层

import com.baomidou.mybatisplus.core.mapper.baseMapper;
import com.coolbusiness.coolbusiness.system.entity.Menu;
import com.coolbusiness.coolbusiness.system.entity.sysMenu;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;

@Mapper
@Repository
public interface MenuDao extends baseMapper {

    
    public List ListParent();

    
    public List ListChildren(@Param("id") Integer id);
}

service层:

import com.coolbusiness.coolbusiness.Constants.Constant;
import com.coolbusiness.coolbusiness.system.dao.MenuDao;
import com.coolbusiness.coolbusiness.system.entity.Menu;
import com.coolbusiness.coolbusiness.system.entity.sysMenu;
import com.coolbusiness.coolbusiness.system.service.MenuService;
import com.coolbusiness.coolbusiness.system.utils.TreeUtil;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;


@Transactional
@Service("MenuService")
public class MenuServiceImpl implements MenuService {

    @Resource
    private MenuDao menuDao;

    @Override
    public List ListAll() {
        List menuList =  menuDao.ListParent();
        //获取子节点childrenList
        for (Menu menu : menuList){
            getChildrenList(menu);
        }
        return menuList;
    }

    public void getChildrenList(Menu menu){
        List children = menuDao.ListChildren(menu.getPkMenuId());
        menu.setChildren(children);
        if(children.size()>0 && children!=null )
        for (Menu menuChild : children){
            getChildrenList(menuChild);
        }
    }
}

controller层:

import com.coolbusiness.coolbusiness.DIYException.BadRequestException;
import com.coolbusiness.coolbusiness.system.entity.Menu;
import com.coolbusiness.coolbusiness.system.service.MenuService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.List;
import java.util.Map;

@Controller
@RequestMapping("/login")
public class indexController {

    @Autowired
    private MenuService menuService;

    @GetMapping("/index")
    public String indexHTML(Model model){
        List menuList = menuService.ListAll();
        if(menuList!=null && menuList.size()>0 ){
            model.addAttribute("menuList", menuList);
        }else{
            throw new BadRequestException("--->你的菜单内容为空,请检查!");
        }
        return "index";
    }
}

前端页面直接在页面中用标签进行接收即可,代码如下:

index.html:






    
    layuimini-iframe版 v2 - 基于Layui的后台管理系统前端模板
    
    
    
    
    
    
    
    
    
    

    
    
    
    

    
    
    




    
        
        	
        

        
            
                
            

            
            
  • 选择模块
  • admin
    基本资料
    修改密码

    退出登录
    • 关 闭 当 前
      关 闭 其 他
      关 闭 全 部
  • js部分:

     layui.use(['jquery', 'layer'], function () {
            var $ = layui.jquery,
                layer = layui.layer;
    
            
                $('body').on('click', '[data-menu]', function () {
                    var loading = layer.load(0, {shade: false, time: 2 * 1000});
                    var menuId = $(this).attr('data-menu');
                    // header
                    $(".layuimini-header-menu .layui-nav-item.layui-this").removeClass('layui-this');
                    $(this).addClass('layui-this');
                    // left
                    $(".layuimini-menu-left .layui-nav.layui-nav-tree").addClass('layui-hide');
                    $(".layuimini-menu-left .layui-nav.layui-nav-tree.layui-hide").removeClass('layui-this');
                    $("#" + menuId).removeClass('layui-hide');
                    $("#" + menuId).addClass('layui-this');
                    layer.close(loading);
                });
    
                
                $('body').on('click', '.layuimini-site-mobile', function () {
                    var loading = layer.load(0, {shade: false, time: 1 * 10});
                    var isShow = $('.layuimini-tool [data-side-fold]').attr('data-side-fold');
                    if (isShow == 1) { // 缩放
                        $('.layuimini-tool [data-side-fold]').attr('data-side-fold', 0);
                        $('.layuimini-tool [data-side-fold]').attr('class', 'fa fa-indent');
                        $('.layui-layout-body').removeClass('layuimini-all');
                        $('.layui-layout-body').addClass('layuimini-mini');
                    } else { // 正常
                        $('.layuimini-tool [data-side-fold]').attr('data-side-fold', 1);
                        $('.layuimini-tool [data-side-fold]').attr('class', 'fa fa-outdent');
                        $('.layui-layout-body').removeClass('layuimini-mini');
                        $('.layui-layout-body').addClass('layuimini-all');
                        layer.close(window.openTips);
                    }
                    element.init();
                    layer.close(loading);
                });
                
                $('body').on('click', '[data-side-fold]', function () {
                    var loading = layer.load(0, {shade: false, time: 1 * 10});
                    var isShow = $('.layuimini-tool [data-side-fold]').attr('data-side-fold');
                    if (isShow == 1) { // 缩放
                        $('.layuimini-tool [data-side-fold]').attr('data-side-fold', 0);
                        $('.layuimini-tool [data-side-fold]').attr('class', 'fa fa-indent');
                        $('.layui-layout-body').removeClass('layuimini-all');
                        $('.layui-layout-body').addClass('layuimini-mini');
                        // $(".menu-li").each(function (idx,el) {
                        //     $(el).addClass("hidden-sub-menu");
                        // });
    
                    } else { // 正常
                        $('.layuimini-tool [data-side-fold]').attr('data-side-fold', 1);
                        $('.layuimini-tool [data-side-fold]').attr('class', 'fa fa-outdent');
                        $('.layui-layout-body').removeClass('layuimini-mini');
                        $('.layui-layout-body').addClass('layuimini-all');
                        // $(".menu-li").each(function (idx,el) {
                        //     $(el).removeClass("hidden-sub-menu");
                        // });
                        layer.close(window.openTips);
                    }
                    element.init();
                    layer.close(loading);
                });
    
                
                $('body').on('click', '.layuimini-header-menu.layuimini-mobile-show dd', function () {
                    var loading = layer.load(0, {shade: false, time: 2 * 1000});
                    var check = $('.layuimini-tool [data-side-fold]').attr('data-side-fold');
                    if(check === "1"){
                        $('.layuimini-site-mobile').trigger("click");
                        element.init();
                    }
                    layer.close(loading);
                });
        });
    
    
    

    然后就会形成大家看到页面效果:

     

     

    2.LAYUImini制作导航栏和菜单栏(LAYUIMINI文档是有案例可以参考的)

            官方写菜单接口的案例,亲测是可用的:点击这里查看即可

            本着简单就可的原则,我是不希望所有的东西都要自己写js,真的很累,直接在后端传所有数据到前端即可。我在测试官方文档给我的案例后,改改代码就可以用了,看这里

     框框中的方法如下,你直接黏贴使用即可。

     function getProjectUrl() { 
                var layuiDir = layui.cache.dir;
                if (!layuiDir) {
                    var js = document.scripts, last = js.length - 1, src;
                    for (var i = last; i > 0; i--) {
                        if (js[i].readyState === 'interactive') {
                            src = js[i].src;
                            break;
                        }
                    }
                    var jsPath = src || js[last].src;
                    layuiDir = jsPath.substring(0, jsPath.lastIndexOf('/') + 1);
                }
                return layuiDir.substring(0, layuiDir.indexOf('assets'));
            }

    然后就会得到一下的结果:

     

     

    转载请注明:文章转载自 www.mshxw.com
    本文地址:https://www.mshxw.com/it/434598.html
    我们一直用心在做
    关于我们 文章归档 网站地图 联系我们

    版权所有 (c)2021-2022 MSHXW.COM

    ICP备案号:晋ICP备2021003244-6号