提交 d2f29bcd 编写于 作者: lakernote's avatar lakernote

(新增)[前端](改用更简单的adminui)

上级 0b1f0783
......@@ -4,7 +4,7 @@
easy,easy,easy,打造一个简单、轻量级的后台管理系统脚手架。
#### 软件架构
软件架构说明
前端:https://gitee.com/zhongshaofa/layuimini
#### 安装教程
......
......@@ -125,6 +125,16 @@
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<!-- 模板引擎freemarker -->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
</dependencies>
<build>
......
package com.laker.admin.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
// @Override
// public void addCorsMappings(CorsRegistry registry) {
// registry.addMapping("/**")
// .allowedOrigins("*")
// .allowCredentials(true)
// .allowedMethods("*")
// .maxAge(3600);
// }
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowCredentials(true)
.allowedMethods("*")
.maxAge(3600);
}
/**
* 注册sa-token的拦截器,打开注解式鉴权功能 (如果您不需要此功能,可以删除此类)
......
package com.laker.admin.framework;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
/**
* @author longli
*/
@ApiModel
public class PageResponse<T> extends Response<T> {
@ApiModelProperty(notes = "数量")
private Long count;
public PageResponse(String code, String msg, T data, Long count) {
super(code, msg, data);
this.count = count;
}
public static <T> PageResponse<T> ok(T data, Long count) {
return new PageResponse<>("0", "", data, count);
}
public Long getCount() {
return count;
}
public void setCount(Long count) {
this.count = count;
}
}
package com.laker.admin.framework;
import cn.hutool.core.util.StrUtil;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
......@@ -24,10 +25,14 @@ public class Response<T> {
@ApiModelProperty(notes = "请求id")
private final String requestId;
@ApiModelProperty(notes = "请求id")
private final Boolean success;
public Response(String code, String msg, T data) {
this.code = code;
this.msg = msg;
this.data = data;
this.success = StrUtil.equals("0", code);
this.requestId = MDC.get("requestId");
}
......
package com.laker.admin.module.sys.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.laker.admin.module.sys.entity.SysMenu;
import com.laker.admin.module.sys.service.ISysMenuService;
import org.springframework.web.bind.annotation.RestController;
import com.laker.admin.framework.Response;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
* <p>
* 系统菜单表 前端控制器
* </p>
*
* @author laker
* @since 2021-08-04
*/
@RestController
@RequestMapping("/module.sys/sys-menu")
public class SysMenuController {
@Autowired
ISysMenuService sysMenuService;
@GetMapping
@ApiOperation(value = "系统菜单表分页查询")
public Response pageAll(@RequestParam(required = false, defaultValue = "1") long current,
@RequestParam(required = false, defaultValue = "10") long size) {
Page roadPage = new Page<>(current, size);
LambdaQueryWrapper<SysMenu> queryWrapper = new QueryWrapper().lambda();
Page pageList = sysMenuService.page(roadPage, queryWrapper);
return Response.ok(pageList);
}
@PostMapping
@ApiOperation(value = "新增或者更新系统菜单表")
public Response saveOrUpdate(SysMenu param) {
return Response.ok(sysMenuService.saveOrUpdate(param));
}
@GetMapping("/{id}")
@ApiOperation(value = "根据id查询系统菜单表")
public Response get(@PathVariable Long id) {
return Response.ok(sysMenuService.getById(id));
}
@DeleteMapping("/{id}")
@ApiOperation(value = "根据id删除系统菜单表")
public Response delete(@PathVariable Long id) {
return Response.ok(sysMenuService.removeById(id));
}
}
\ No newline at end of file
package com.laker.admin.module.sys.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.laker.admin.framework.PageResponse;
import com.laker.admin.framework.Response;
import com.laker.admin.module.sys.entity.SysUser;
import com.laker.admin.module.sys.service.ISysUserService;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.time.LocalDateTime;
/**
* <p>
* 前端控制器
* </p>
*
* @author laker
* @since 2021-08-05
*/
@RestController
@RequestMapping("/sys/user")
public class SysUserController {
@Autowired
ISysUserService sysUserService;
@GetMapping
@ApiOperation(value = "分页查询")
public PageResponse pageAll(@RequestParam(required = false, defaultValue = "1") long current,
@RequestParam(required = false, defaultValue = "10") long size) {
Page roadPage = new Page<>(current, size);
LambdaQueryWrapper<SysUser> queryWrapper = new QueryWrapper().lambda();
Page pageList = sysUserService.page(roadPage, queryWrapper);
return PageResponse.ok(pageList.getRecords(), pageList.getTotal());
}
@PostMapping
@ApiOperation(value = "新增或者更新")
public Response saveOrUpdate(@RequestBody SysUser param) {
if (param.getUserId() == null) {
param.setCreateTime(LocalDateTime.now());
}
return Response.ok(sysUserService.saveOrUpdate(param));
}
@GetMapping("/{id}")
@ApiOperation(value = "根据id查询")
public Response get(@PathVariable Long id) {
return Response.ok(sysUserService.getById(id));
}
@DeleteMapping("/{id}")
@ApiOperation(value = "根据id删除")
public Response delete(@PathVariable Long id) {
return Response.ok(sysUserService.removeById(id));
}
}
\ No newline at end of file
package com.laker.admin.module.sys.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* <p>
* 系统菜单表
* </p>
*
* @author laker
* @since 2021-08-04
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class SysMenu implements Serializable {
private static final long serialVersionUID = 1L;
/**
* ID
*/
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 父ID
*/
private Long pid;
/**
* 名称
*/
private String title;
/**
* 菜单图标
*/
private String icon;
/**
* 链接
*/
private String href;
/**
* 链接打开方式
*/
private String target;
/**
* 菜单排序
*/
private Integer sort;
/**
* 状态(0:禁用,1:启用)
*/
private Boolean status;
/**
* 备注信息
*/
private String remark;
/**
* 创建时间
*/
private LocalDateTime createAt;
/**
* 更新时间
*/
private LocalDateTime updateAt;
/**
* 删除时间
*/
private LocalDateTime deleteAt;
}
package com.laker.admin.module.sys.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* <p>
*
* </p>
*
* @author laker
* @since 2021-08-05
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class SysUser implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "user_id", type = IdType.AUTO)
private Long userId;
private String userName;
private String password;
private String nickName;
private Integer sex;
private String phone;
private Integer enable;
private String email;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime createTime;
}
package com.laker.admin.module.sys.mapper;
import com.laker.admin.module.sys.entity.SysMenu;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Select;
import java.util.List;
/**
* <p>
* 系统菜单表 Mapper 接口
* </p>
*
* @author laker
* @since 2021-08-04
*/
public interface SysMenuMapper extends BaseMapper<SysMenu> {
@Select("select * from sys_menu where status = #{status} order by sort")
List<SysMenu> findAllByStatusOrderBySort(Boolean status);
}
package com.laker.admin.module.sys.mapper;
import com.laker.admin.module.sys.entity.SysUser;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* Mapper 接口
* </p>
*
* @author laker
* @since 2021-08-05
*/
public interface SysUserMapper extends BaseMapper<SysUser> {
}
package com.laker.admin.module.sys.pojo;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
import java.util.List;
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class MenuVo {
private Long id;
private Long pid;
private String title;
private String icon;
private String href;
private String target;
private List<MenuVo> child;
}
\ No newline at end of file
package com.laker.admin.module.sys.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.laker.admin.module.sys.entity.SysMenu;
import java.util.Map;
/**
* <p>
* 系统菜单表 服务类
* </p>
*
* @author laker
* @since 2021-08-04
*/
public interface ISysMenuService extends IService<SysMenu> {
Map<String, Object> menu();
}
package com.laker.admin.module.sys.service;
import com.laker.admin.module.sys.entity.SysUser;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 服务类
* </p>
*
* @author laker
* @since 2021-08-05
*/
public interface ISysUserService extends IService<SysUser> {
}
package com.laker.admin.module.sys.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.laker.admin.module.sys.entity.SysMenu;
import com.laker.admin.module.sys.mapper.SysMenuMapper;
import com.laker.admin.module.sys.pojo.MenuVo;
import com.laker.admin.module.sys.service.ISysMenuService;
import com.laker.admin.utils.TreeUtil;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* <p>
* 系统菜单表 服务实现类
* </p>
*
* @author laker
* @since 2021-08-04
*/
@Service
public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> implements ISysMenuService {
@Resource
private SysMenuMapper sysMenuMapper;
@Override
public Map<String, Object> menu() {
Map<String, Object> map = new HashMap<>(16);
Map<String, Object> home = new HashMap<>(16);
Map<String, Object> logo = new HashMap<>(16);
List<SysMenu> menuList = sysMenuMapper.findAllByStatusOrderBySort(true);
List<MenuVo> menuInfo = new ArrayList<>();
for (SysMenu e : menuList) {
MenuVo menuVO = new MenuVo();
menuVO.setId(e.getId());
menuVO.setPid(e.getPid());
menuVO.setHref(e.getHref());
menuVO.setTitle(e.getTitle());
menuVO.setIcon(e.getIcon());
menuVO.setTarget(e.getTarget());
menuInfo.add(menuVO);
}
// 1.定义首页名称以及显示的页面
home.put("title", "首页");
//控制器路由,自行定义
home.put("href", "page/welcome-1.html?t=1");
// 2.定义logo的信息
logo.put("title", "Easy-Admin后台管理系统");
//静态资源文件路径,可使用默认的logo.png
logo.put("image", "images/logo.png");
logo.put("href", "");
map.put("homeInfo", home);
map.put("logoInfo", logo);
// 3.定义菜单,可根据人员权限定义
map.put("menuInfo", TreeUtil.toTree(menuInfo, 0L));
return map;
}
}
package com.laker.admin.module.sys.service.impl;
import com.laker.admin.module.sys.entity.SysUser;
import com.laker.admin.module.sys.mapper.SysUserMapper;
import com.laker.admin.module.sys.service.ISysUserService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* <p>
* 服务实现类
* </p>
*
* @author laker
* @since 2021-08-05
*/
@Service
public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> implements ISysUserService {
}
package com.laker.admin.utils;
import com.laker.admin.module.sys.pojo.MenuVo;
import java.util.ArrayList;
import java.util.List;
public class TreeUtil {
public static List<MenuVo> toTree(List<MenuVo> treeList, Long pid) {
List<MenuVo> retList = new ArrayList<MenuVo>();
for (MenuVo parent : treeList) {
if (pid.equals(parent.getPid())) {
retList.add(findChildren(parent, treeList));
}
}
return retList;
}
private static MenuVo findChildren(MenuVo parent, List<MenuVo> treeList) {
for (MenuVo child : treeList) {
if (parent.getId().equals(child.getPid())) {
if (parent.getChild() == null) {
parent.setChild(new ArrayList<>());
}
parent.getChild().add(findChildren(child, treeList));
}
}
return parent;
}
}
\ No newline at end of file
......@@ -56,6 +56,6 @@ javamelody:
enabled: false
video:
url: http://1.1.1.1
laker:
admin:
name: 大肥龙
port: 111
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.laker.admin.module.sys.mapper.SysMenuMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.laker.admin.module.sys.entity.SysMenu">
<id column="id" property="id" />
<result column="pid" property="pid" />
<result column="title" property="title" />
<result column="icon" property="icon" />
<result column="href" property="href" />
<result column="target" property="target" />
<result column="sort" property="sort" />
<result column="status" property="status" />
<result column="remark" property="remark" />
<result column="create_at" property="createAt" />
<result column="update_at" property="updateAt" />
<result column="delete_at" property="deleteAt" />
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
id, pid, title, icon, href, target, sort, status, remark, create_at, update_at, delete_at
</sql>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.laker.admin.module.sys.mapper.SysUserMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.laker.admin.module.sys.entity.SysUser">
<id column="user_id" property="userId" />
<result column="user_name" property="userName" />
<result column="password" property="password" />
<result column="sex" property="sex" />
<result column="phone" property="phone" />
<result column="enable" property="enable" />
<result column="mail" property="mail" />
<result column="create_time" property="createTime" />
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
user_id, user_name, password, sex, phone, enable, mail, create_time
</sql>
</mapper>
......@@ -4,9 +4,9 @@ import org.springframework.web.bind.annotation.RequestMapping;
import ${package.Entity}.${entity};
import ${package.Service}.${table.serviceName};
<#if restControllerStyle>
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RestController;
<#else>
import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Controller;
</#if>
import com.laker.admin.framework.Response;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
......@@ -16,7 +16,7 @@ import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
<#if superControllerClassPackage??>
import ${superControllerClassPackage};
import ${superControllerClassPackage};
</#if>
/**
......@@ -28,44 +28,44 @@ import ${superControllerClassPackage};
* @since ${date}
*/
<#if restControllerStyle>
@RestController
@RestController
<#else>
@Controller
@Controller
</#if>
@RequestMapping("<#if package.ModuleName?? && package.ModuleName != "">/${package.ModuleName}</#if>/<#if controllerMappingHyphenStyle??>${controllerMappingHyphen}<#else>${table.entityPath}</#if>")
<#if superControllerClass??>
public class ${table.controllerName} extends ${superControllerClass} {
public class ${table.controllerName} extends ${superControllerClass} {
<#else>
public class ${table.controllerName} {
public class ${table.controllerName} {
</#if>
@Autowired
${table.serviceName} ${table.serviceName?substring(1)?uncap_first};
@Autowired
${table.serviceName} ${table.serviceName?substring(1)?uncap_first};
@GetMapping
@ApiOperation(value = "${table.comment!}分页查询")
public Response pageAll(@RequestParam(required = false, defaultValue = "1") long current,
@RequestParam(required = false, defaultValue = "10") long size) {
Page roadPage = new Page<>(current, size);
LambdaQueryWrapper<${table.entityName}> queryWrapper = new QueryWrapper().lambda();
Page pageList = ${table.serviceName?substring(1)?uncap_first}.page(roadPage, queryWrapper);
return Response.ok(pageList);
}
@GetMapping
@ApiOperation(value = "${table.comment!}分页查询")
public Response pageAll(@RequestParam(required = false, defaultValue = "1") long current,
@RequestParam(required = false, defaultValue = "10") long size) {
Page roadPage = new Page<>(current, size);
LambdaQueryWrapper<${table.entityName}> queryWrapper = new QueryWrapper().lambda();
Page pageList = ${table.serviceName?substring(1)?uncap_first}.page(roadPage, queryWrapper);
return Response.ok(pageList);
}
@PostMapping
@ApiOperation(value = "新增或者更新${table.comment!}")
public Response saveOrUpdate(${table.entityName} param) {
return Response.ok(${table.serviceName?substring(1)?uncap_first}.saveOrUpdate(param));
}
@PostMapping
@ApiOperation(value = "新增或者更新${table.comment!}")
public Response saveOrUpdate(@RequestBody ${table.entityName} param) {
return Response.ok(${table.serviceName?substring(1)?uncap_first}.saveOrUpdate(param));
}
@GetMapping("/{id}")
@ApiOperation(value = "根据id查询${table.comment!}")
public Response get(@PathVariable Long id) {
return Response.ok(${table.serviceName?substring(1)?uncap_first}.getById(id));
}
@GetMapping("/{id}")
@ApiOperation(value = "根据id查询${table.comment!}")
public Response get(@PathVariable Long id) {
return Response.ok(${table.serviceName?substring(1)?uncap_first}.getById(id));
}
@DeleteMapping("/{id}")
@ApiOperation(value = "根据id删除${table.comment!}")
public Response delete(@PathVariable Long id) {
return Response.ok(${table.serviceName?substring(1)?uncap_first}.removeById(id));
}
@DeleteMapping("/{id}")
@ApiOperation(value = "根据id删除${table.comment!}")
public Response delete(@PathVariable Long id) {
return Response.ok(${table.serviceName?substring(1)?uncap_first}.removeById(id));
}
}
\ No newline at end of file
......@@ -17,10 +17,10 @@ import java.util.Scanner;
// 演示例子,执行 main 方法控制台输入模块表名回车自动生成对应项目目录中
public class CodeGenerator {
// 父包名。如果为空,将下面子包名必须写全部, 否则就只需写子包名
private static final String PARENT_PACKAGE = "com.laker.map";
private static final String PARENT_PACKAGE = "com.laker.admin";
// 生成文件的输出目录 System.getProperty("user.dir") + OUT_FILE_PATH + "/src/main/java"
// 如果是多moudle,则为:/moudle,不是多moudle,则为:空串
private static final String OUT_FILE_PATH = "/map";
private static final String OUT_FILE_PATH = "";
public static final String MYSQL_URL = "localhost:3306/laker";
public static final String MYSQL_PWD = "123456";
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册