submit project

master
huihui 3 years ago
parent 3f43b299ad
commit 650eece3c4

42
.gitignore vendored

@ -0,0 +1,42 @@
# Compiled class file
*.class
# Log file
*.log
# BlueJ files
*.ctxt
# temp file
*.cache
*.diff
*.tmp
#IDEA
.idea/
.idea
*.ipr
*.iml
*.iws
.classpath
.project
.settings/
# Mobile Tools for Java (J2ME)
.mtj.tmp/
# Package Files #
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar
target/
.target
README.md
README.en.md
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*

@ -0,0 +1,185 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.yx</groupId>
<artifactId>LibraryProject</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>LibraryProject Maven Webapp</name>
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<spring.version>5.1.3.RELEASE</spring.version>
<slf4j.version>1.6.6</slf4j.version>
<log4j.version>1.2.12</log4j.version>
<mysql.version>5.1.6</mysql.version>
<mybatis.version>3.4.5</mybatis.version>
</properties>
<dependencies>
<!-- spring -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.6.8</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!--fastjson-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.54</version>
</dependency>
<!-- log start -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j.version}</version>
</dependency>
<!-- log end -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.0</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.4</version>
</dependency>
<!--druid连接池-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.16</version>
</dependency>
<!--分页-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.10</version>
</dependency>
<!--mybatis逆向工程依赖-->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.7</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.2</version>
<configuration>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
</plugin>
</plugins>
</build>
</project>

@ -0,0 +1,28 @@
package com.yx.codeutil;
import java.io.IOException;
import java.io.OutputStream;
public interface IVerifyCodeGen {
/**
* codeos
*
* @param width
* @param height
* @param os
* @return
* @throws IOException
*/
String generate(int width, int height, OutputStream os) throws IOException;
/**
*
*
* @param width
* @param height
* @return
* @throws IOException
*/
VerifyCode generate(int width, int height) throws IOException;
}

@ -0,0 +1,50 @@
package com.yx.codeutil;
import java.awt.*;
import java.util.Random;
public class RandomUtils extends org.apache.commons.lang3.RandomUtils {
private static final char[] CODE_SEQ = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J',
'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
'X', 'Y', 'Z', '2', '3', '4', '5', '6', '7', '8', '9' };
private static final char[] NUMBER_ARRAY = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
private static Random random = new Random();
public static String randomString(int length) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < length; i++) {
sb.append(String.valueOf(CODE_SEQ[random.nextInt(CODE_SEQ.length)]));
}
return sb.toString();
}
public static String randomNumberString(int length) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < length; i++) {
sb.append(String.valueOf(NUMBER_ARRAY[random.nextInt(NUMBER_ARRAY.length)]));
}
return sb.toString();
}
public static Color randomColor(int fc, int bc) {
int f = fc;
int b = bc;
Random random = new Random();
if (f > 255) {
f = 255;
}
if (b > 255) {
b = 255;
}
return new Color(f + random.nextInt(b - f), f + random.nextInt(b - f), f + random.nextInt(b - f));
}
public static int nextInt(int bound) {
return random.nextInt(bound);
}
}

@ -0,0 +1,117 @@
package com.yx.codeutil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Random;
/**
*
*/
public class SimpleCharVerifyCodeGenImpl implements IVerifyCodeGen {
private static final Logger logger = LoggerFactory.getLogger(SimpleCharVerifyCodeGenImpl.class);
private static final String[] FONT_TYPES = { "\u5b8b\u4f53", "\u65b0\u5b8b\u4f53", "\u9ed1\u4f53", "\u6977\u4f53", "\u96b6\u4e66" };
private static final int VALICATE_CODE_LENGTH = 4;
/**
* 线
*
* @param graphics
* @param width
* @param height
*/
private static void fillBackground(Graphics graphics, int width, int height) {
// 填充背景
graphics.setColor(Color.WHITE);
//设置矩形坐标x y 为0
graphics.fillRect(0, 0, width, height);
// 加入干扰线条
for (int i = 0; i < 8; i++) {
//设置随机颜色算法参数
graphics.setColor(RandomUtils.randomColor(40, 150));
Random random = new Random();
int x = random.nextInt(width);
int y = random.nextInt(height);
int x1 = random.nextInt(width);
int y1 = random.nextInt(height);
graphics.drawLine(x, y, x1, y1);
}
}
/**
*
*
* @param width
* @param height
* @param os
* @return
* @throws IOException
*/
@Override
public String generate(int width, int height, OutputStream os) throws IOException {
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics graphics = image.getGraphics();
fillBackground(graphics, width, height);
String randomStr = RandomUtils.randomString(VALICATE_CODE_LENGTH);
createCharacter(graphics, randomStr);
graphics.dispose();
//设置JPEG格式
ImageIO.write(image, "JPEG", os);
return randomStr;
}
/**
*
*
* @param width
* @param height
* @return
*/
@Override
public VerifyCode generate(int width, int height) {
VerifyCode verifyCode = null;
try (
//将流的初始化放到这里就不需要手动关闭流
ByteArrayOutputStream baos = new ByteArrayOutputStream();
) {
String code = generate(width, height, baos);
verifyCode = new VerifyCode();
verifyCode.setCode(code);
verifyCode.setImgBytes(baos.toByteArray());
} catch (IOException e) {
logger.error(e.getMessage(), e);
verifyCode = null;
}
return verifyCode;
}
/**
*
*
* @param g
* @param randomStr
*/
private void createCharacter(Graphics g, String randomStr) {
char[] charArray = randomStr.toCharArray();
for (int i = 0; i < charArray.length; i++) {
//设置RGB颜色算法参数
g.setColor(new Color(50 + RandomUtils.nextInt(100),
50 + RandomUtils.nextInt(100), 50 + RandomUtils.nextInt(100)));
//设置字体大小,类型
g.setFont(new Font(FONT_TYPES[RandomUtils.nextInt(FONT_TYPES.length)], Font.BOLD, 26));
//设置x y 坐标
g.drawString(String.valueOf(charArray[i]), 15 * i + 5, 19 + RandomUtils.nextInt(8));
}
}
}

@ -0,0 +1,38 @@
package com.yx.codeutil;
public class VerifyCode {
private String code;
private byte[] imgBytes;
private long expireTime;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public byte[] getImgBytes() {
return imgBytes;
}
public void setImgBytes(byte[] imgBytes) {
this.imgBytes = imgBytes;
}
public long getExpireTime() {
return expireTime;
}
public void setExpireTime(long expireTime) {
this.expireTime = expireTime;
}
}

@ -0,0 +1,93 @@
package com.yx.controller;
import com.github.pagehelper.PageInfo;
import com.yx.po.Admin;
import com.yx.service.AdminService;
import com.yx.utils.DataInfo;
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 org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.Arrays;
import java.util.List;
@Controller
public class AdminController {
@Autowired
private AdminService adminService;
@GetMapping("/adminIndex")
public String adminIndex(){
return "admin/adminIndex";
}
@RequestMapping("/adminAll")
@ResponseBody
public DataInfo queryAdminAll(Admin admin, @RequestParam(defaultValue = "1") Integer pageNum, @RequestParam(defaultValue = "15") Integer limit){
PageInfo<Admin> pageInfo = adminService.queryAdminAll(admin,pageNum,limit);
return DataInfo.ok("成功",pageInfo.getTotal(),pageInfo.getList());
}
/**
*
* @return
*/
@GetMapping("/adminAdd")
public String adminAdd(){
return "admin/adminAdd";
}
/**
*
* @param admin
* @return
*/
@RequestMapping("/addAdminSubmit")
@ResponseBody
public DataInfo addBookSubmit(Admin admin){
adminService.addAdminSubmit(admin);
return DataInfo.ok();
}
/**
* id
*/
@GetMapping("/queryAdminById")
public String queryAdminById(Integer id, Model model){
model.addAttribute("id",id);
return "admin/updateAdmin";
}
/**
*
*/
@RequestMapping("/updatePwdSubmit")
@ResponseBody
public DataInfo updatePwdSubmit(Integer id,String oldPwd,String newPwd){
Admin admin = adminService.queryAdminById(id);//根据id查询对象
if (!oldPwd.equals(admin.getPassword())){
return DataInfo.fail("输入的旧密码错误");
}else{
admin.setPassword(newPwd);
adminService.updateAdminSubmit(admin);//数据库修改
return DataInfo.ok();
}
}
/**
*
*/
@RequestMapping("/deleteAdminByIds")
@ResponseBody
public DataInfo deleteAdminByIds(String ids){
List<String> list = Arrays.asList(ids.split(","));
adminService.deleteAdminByIds(list);
return DataInfo.ok();
}
}

@ -0,0 +1,54 @@
package com.yx.controller;
import com.github.pagehelper.PageInfo;
import com.yx.po.Admin;
import com.yx.po.Notice;
import com.yx.service.AdminService;
import com.yx.service.NoticeService;
import com.yx.service.ReaderInfoService;
import com.yx.utils.DataInfo;
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 org.springframework.web.bind.annotation.ResponseBody;
import java.util.List;
@Controller
public class BaseController {
@Autowired
private NoticeService noticeService;
/**
*
* @return
*/
@GetMapping("/index")
public String index(){
return "index";
}
/**
*
* @return
*/
@GetMapping("/welcome")
public String welcome(Model model){
//提供公告信息
PageInfo<Notice> pageInfo = noticeService.queryAllNotice(null,1,5);
if (pageInfo!=null){
List<Notice> noticeList = pageInfo.getList();
model.addAttribute("noticeList",noticeList);
}
return "welcome";
}
@GetMapping("/updatePassword")
public String updatePwd(){
return "pwdUpdate/updatePwd";
}
}

@ -0,0 +1,106 @@
package com.yx.controller;
import com.github.pagehelper.PageInfo;
import com.yx.po.BookInfo;
import com.yx.po.TypeInfo;
import com.yx.service.BookInfoService;
import com.yx.service.TypeInfoService;
import com.yx.utils.DataInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import java.util.Arrays;
import java.util.List;
@Controller
public class BookInfoController {
@Autowired
private BookInfoService bookInfoService;
@Autowired
private TypeInfoService typeInfoService;
/**
*
* @return
*/
@GetMapping("/bookIndex")
public String bookIndex(){
return "book/bookIndex";
}
/**
* bookjson
* @param bookInfo
* @param pageNum
* @param limit
* @return
*/
@RequestMapping("/bookAll")
@ResponseBody //@ResponseBody将java对象转为json格式的数据表示该方法的返回结果直接写入 HTTP response body 中一般在异步ajax获取数据时使用
public DataInfo bookAll(BookInfo bookInfo, @RequestParam(defaultValue = "1") Integer pageNum, @RequestParam(defaultValue = "15") Integer limit){
PageInfo<BookInfo> pageInfo = bookInfoService.queryBookInfoAll(bookInfo,pageNum,limit);
return DataInfo.ok("成功",pageInfo.getTotal(),pageInfo.getList());//总条数getTotal数据封装成list,以便加载分页显示,由于加了ResponseBody,就会返回一个字符串
}
/**
*
*/
@GetMapping("/bookAdd")
public String bookAdd(){
return "book/bookAdd";
}
/**
*
*/
@RequestMapping("/addBookSubmit")
@ResponseBody
public DataInfo addBookSubmit(BookInfo info){
bookInfoService.addBookSubmit(info);
return DataInfo.ok();
}
/**
* id()
*/
@GetMapping("/queryBookInfoById")
public String queryTypeInfoById(Integer id, Model model){
BookInfo bookInfo= bookInfoService.queryBookInfoById(id);
model.addAttribute("info",bookInfo);
return "book/updateBook";
}
/**
*
*/
@RequestMapping("/updateBookSubmit")
@ResponseBody
public DataInfo updateBookSubmit(@RequestBody BookInfo info){
bookInfoService.updateBookSubmit(info);
return DataInfo.ok();
}
/**
*
*/
@RequestMapping("/deleteBook")
@ResponseBody
public DataInfo deleteBook(String ids){
List<String> list= Arrays.asList(ids.split(","));
bookInfoService.deleteBookByIds(list);
return DataInfo.ok();
}
@RequestMapping("/findAllList")
@ResponseBody
public List<TypeInfo> findAll(){
PageInfo<TypeInfo> pageInfo = typeInfoService.queryTypeInfoAll(null,1,100);
List<TypeInfo> lists = pageInfo.getList();
return lists;
}
}

@ -0,0 +1,192 @@
package com.yx.controller;
import com.github.pagehelper.PageInfo;
import com.yx.po.BookInfo;
import com.yx.po.LendList;
import com.yx.po.ReaderInfo;
import com.yx.service.BookInfoService;
import com.yx.service.LendListService;
import com.yx.service.ReaderInfoService;
import com.yx.utils.DataInfo;
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 org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
@Controller
public class LendListController {
@Autowired
private LendListService lendListService;
@Autowired
private ReaderInfoService readerService;
@Autowired
private BookInfoService bookInfoService;
@GetMapping("/lendListIndex")
public String lendListIndex(){
return "lend/lendListIndex";
}
/**
*
* 1 request
* 2
* 3
*/
@ResponseBody
@RequestMapping("/lendListAll")
public DataInfo lendListAll(Integer type, String readerNumber, String name, Integer status,
@RequestParam(defaultValue = "1")Integer page,@RequestParam(defaultValue = "15")Integer limit){
LendList info=new LendList();
info.setBackType(type);
//创建读者对象
ReaderInfo reader=new ReaderInfo();
reader.setReaderNumber(readerNumber);
//把以上对象交给info
info.setReaderInfo(reader);
//图书对象
BookInfo book=new BookInfo();
book.setName(name);
book.setStatus(status);
info.setBookInfo(book);
//分页查询所有的记录信息
PageInfo pageInfo=lendListService.queryLendListAll(info,page,limit);
return DataInfo.ok("ok",pageInfo.getTotal(),pageInfo.getList());
}
/**
*
*/
@GetMapping("/addLendList")
public String addLendList(){
return "lend/addLendList";
}
/**
*
* 1
* 2
* 3
* cardnumber:
* ids id
*/
@ResponseBody
@RequestMapping("/addLend")
public DataInfo addLend(String readerNumber,String ids){
//获取图书id的集合
List<String> list= Arrays.asList(ids.split(","));
//判断卡号是否存在
ReaderInfo reader=new ReaderInfo();
reader.setReaderNumber(readerNumber);
PageInfo<ReaderInfo> pageInfo=readerService.queryAllReaderInfo(reader,1,1);
if(pageInfo.getList().size()==0){
return DataInfo.fail("卡号信息不存在");
}else{
ReaderInfo readerCard2=pageInfo.getList().get(0);
//可借书
for(String bid:list) {
LendList lendList = new LendList();
lendList.setReaderId(readerCard2.getId());//读者id
lendList.setBookId(Integer.valueOf(bid));//书的id
lendList.setLendDate(new Date());
lendListService.addLendListSubmit(lendList);
//更变书的状态
BookInfo info = bookInfoService.queryBookInfoById(Integer.valueOf(bid));
//设置书的状态
info.setStatus(1);
bookInfoService.updateBookSubmit(info);
}
}
return DataInfo.ok();
}
/**
*
*/
@ResponseBody
@RequestMapping("/deleteLendListByIds")
public DataInfo deleteLendListByIds(String ids, String bookIds){
List list=Arrays.asList(ids.split(","));//借阅记录的id
List blist=Arrays.asList(bookIds.split(","));//图书信息的id
lendListService.deleteLendListById(list,blist);
return DataInfo.ok();
}
/**
*
*/
@ResponseBody
@RequestMapping("/backLendListByIds")
public DataInfo backLendListByIds(String ids,String bookIds){
List list=Arrays.asList(ids.split(","));//借阅记录的id
List blist=Arrays.asList(bookIds.split(","));//图书信息的id
lendListService.updateLendListSubmit(list,blist);
return DataInfo.ok();
}
/**
*
*/
@GetMapping("/excBackBook")
public String excBackBook(HttpServletRequest request, Model model){
//获取借阅记录id
String id=request.getParameter("id");
String bId=request.getParameter("bookId");
model.addAttribute("id",id);
model.addAttribute("bid",bId);
return "lend/excBackBook";
}
/**
*
*/
@ResponseBody
@RequestMapping("/updateLendInfoSubmit")
public DataInfo updateLendInfoSubmit(LendList lendList){
lendListService.backBook(lendList);
return DataInfo.ok();
}
/**
* 线
*/
@RequestMapping("/queryLookBookList")
public String queryLookBookList(String flag,Integer id,Model model){
List<LendList> list=null;
if(flag.equals("book")){
list=lendListService.queryLookBookList(null,id);
}else{
list=lendListService.queryLookBookList(id,null);
}
model.addAttribute("info",list);
return "lend/lookBookList";
}
@RequestMapping("/queryLookBookList2")
public String queryLookBookList(HttpServletRequest request,Model model){
ReaderInfo readerInfo = (ReaderInfo) request.getSession().getAttribute("user");
List<LendList> list = list=lendListService.queryLookBookList(readerInfo.getId(),null);
model.addAttribute("info",list);
return "lend/lookBookList";
}
}

@ -0,0 +1,119 @@
package com.yx.controller;
import com.yx.codeutil.IVerifyCodeGen;
import com.yx.codeutil.SimpleCharVerifyCodeGenImpl;
import com.yx.codeutil.VerifyCode;
import com.yx.po.Admin;
import com.yx.po.ReaderInfo;
import com.yx.service.AdminService;
import com.yx.service.ReaderInfoService;
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 javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
@Controller
public class LoginController {
@Autowired
private AdminService adminService;
@Autowired
private ReaderInfoService readerService;
/**
*
*/
@GetMapping("/login")
public String login(){
return "login";
}
/**
*
* @param request
* @param response
*/
@RequestMapping("/verifyCode")
public void verifyCode(HttpServletRequest request, HttpServletResponse response) {
IVerifyCodeGen iVerifyCodeGen = new SimpleCharVerifyCodeGenImpl();
try {
//设置长宽
VerifyCode verifyCode = iVerifyCodeGen.generate(80, 28);
String code = verifyCode.getCode();
//将VerifyCode绑定session
request.getSession().setAttribute("VerifyCode", code);
//System.out.println("attribute: " + code);
//设置响应头
response.setHeader("Pragma", "no-cache");
//设置响应头
response.setHeader("Cache-Control", "no-cache");
//在代理服务器端防止缓冲
response.setDateHeader("Expires", 0);
//设置响应内容类型
response.setContentType("image/jpeg");
response.getOutputStream().write(verifyCode.getImgBytes());
response.getOutputStream().flush();
} catch (IOException e) {
System.out.println("异常处理");
}
}
/**
*
*/
@RequestMapping("/loginIn")
public String loginIn(HttpServletRequest request, Model model){
//获取用户名与密码
String username = request.getParameter("username");
String password = request.getParameter("password");
String code=request.getParameter("captcha");
String type=request.getParameter("type");
//判断验证码是否正确验证码已经放入session
HttpSession session = request.getSession();
String realCode = (String)session.getAttribute("VerifyCode");
System.out.println("验证码为 ============= "+realCode);
//!realCode.toLowerCase().equals(code.toLowerCase())
if (false){
model.addAttribute("msg","验证码不正确");
return "login";
}else{
//验证码正确则判断用户名和密码
if(type.equals("1")){//管理员信息
//用户名和密码是否正确
Admin admin=adminService.queryUserByNameAndPassword(username,password);
if(admin==null){//该用户不存在
model.addAttribute("msg","用户名或密码错误");
return "login";
}
session.setAttribute("user",admin);
session.setAttribute("type","admin");
}else{//来自读者信息表
ReaderInfo readerInfo=readerService.queryUserInfoByNameAndPassword(username,password);
if(readerInfo==null){
model.addAttribute("msg","用户名或密码错误");
return "login";
}
session.setAttribute("user",readerInfo);
session.setAttribute("type","reader");
}
return "index";
}
}
/**
* 退
*/
@GetMapping("loginOut")
public String loginOut(HttpServletRequest request){
HttpSession session = request.getSession();
session.invalidate();//注销
return "/login";
}
}

@ -0,0 +1,88 @@
package com.yx.controller;
import com.github.pagehelper.PageInfo;
import com.yx.po.Notice;
import com.yx.service.NoticeService;
import com.yx.utils.DataInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import javax.xml.crypto.Data;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
@Controller
public class NoticeController {
@Autowired
private NoticeService noticeService;
/**
*
*/
@GetMapping("/noticeIndexOfBack")
public String noticeIndexOfBack(){
return "notice/noticeIndexOfBack";
}
/**
*
*/
@GetMapping("/noticeIndexOfReader")
public String noticeIndexOfReader(){
return "notice/noticeIndexOfReader";
}
/**
*
*/
@RequestMapping("/noticeAll")
@ResponseBody
public DataInfo noticeAll(Notice notice,@RequestParam(defaultValue = "1") Integer pageNum, @RequestParam(defaultValue = "15")Integer limit){
PageInfo<Notice> pageInfo = noticeService.queryAllNotice(notice, pageNum, limit);
return DataInfo.ok("成功",pageInfo.getTotal(),pageInfo.getList());
}
/**
*
*/
@GetMapping("/noticeAdd")
public String noticeAdd(){
return "notice/noticeAdd";
}
/**
*
*/
@RequestMapping("/addNoticeSubmit")
@ResponseBody
public DataInfo addNoticeSubmit(Notice notice){
//主题和内容可以页面获取,作者和时间在后台自动获取
notice.setAuthor("admin");//这里先暂且写admin
notice.setCreateDate(new Date());
noticeService.addNotice(notice);
return DataInfo.ok();
}
/**
*
*/
@GetMapping("/queryNoticeById")
public String queryNoticeById(Integer id, Model model){
Notice notice = noticeService.queryNoticeById(id);
model.addAttribute("info",notice);
return "notice/updateNotice";
}
/**
*
*/
@RequestMapping("/deleteNoticeByIds")
@ResponseBody
public DataInfo deleteNoticeByIds(String ids){
List<String> list = Arrays.asList(ids.split(","));
noticeService.deleteNoticeByIds(list);
return DataInfo.ok();
}
}

@ -0,0 +1,128 @@
package com.yx.controller;
import com.github.pagehelper.PageInfo;
import com.yx.po.Admin;
import com.yx.po.BookInfo;
import com.yx.po.ReaderInfo;
import com.yx.po.TypeInfo;
import com.yx.service.AdminService;
import com.yx.service.ReaderInfoService;
import com.yx.utils.DataInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.Arrays;
import java.util.List;
@Controller
public class ReaderInfoController {
@Autowired
private ReaderInfoService readerInfoService;
@Autowired
private AdminService adminService;
/**
*
*/
@GetMapping("/readerIndex")
public String readerIndex(){
return "reader/readerIndex";
}
/**
*
*/
@RequestMapping("/readerAll")
@ResponseBody
public DataInfo queryReaderAll(ReaderInfo readerInfo, @RequestParam(defaultValue = "1") Integer pageNum, @RequestParam(defaultValue = "15") Integer limit){
PageInfo<ReaderInfo> pageInfo = readerInfoService.queryAllReaderInfo(readerInfo,pageNum,limit);
return DataInfo.ok("成功",pageInfo.getTotal(),pageInfo.getList());
}
/**
*
*/
@RequestMapping("/readerAdd")
public String readerAdd(){
return "reader/readerAdd";
}
/**
*
*/
@RequestMapping("/addReaderSubmit")
@ResponseBody
public DataInfo addReaderSubmit(@RequestBody ReaderInfo readerInfo){
readerInfo.setPassword("123456");//设置默认密码
readerInfoService.addReaderInfoSubmit(readerInfo);
return DataInfo.ok();
}
/**
* id
*/
@GetMapping("/queryReaderInfoById")
public String queryReaderInfoById(Integer id, Model model){
ReaderInfo readerInfo = readerInfoService.queryReaderInfoById(id);
model.addAttribute("info",readerInfo);
return "reader/updateReader";
}
/**
*
*/
@RequestMapping("/updateReaderSubmit")
@ResponseBody
public DataInfo updateReaderSubmit(@RequestBody ReaderInfo readerInfo){
readerInfoService.updateReaderInfoSubmit(readerInfo);
return DataInfo.ok();
}
/**
*
*/
@RequestMapping("/deleteReader")
@ResponseBody
public DataInfo deleteReader(String ids){
List<String> list= Arrays.asList(ids.split(","));
readerInfoService.deleteReaderInfoByIds(list);
return DataInfo.ok();
}
/**
*
*/
@RequestMapping("/updatePwdSubmit2")
@ResponseBody
public DataInfo updatePwdSubmit(HttpServletRequest request, String oldPwd, String newPwd){
HttpSession session = request.getSession();
if(session.getAttribute("type")=="admin"){
//管理员
Admin admin = (Admin)session.getAttribute("user");
Admin admin1 = (Admin)adminService.queryAdminById(admin.getId());
if (!oldPwd.equals(admin1.getPassword())){
return DataInfo.fail("输入的旧密码错误");
}else{
admin1.setPassword(newPwd);
adminService.updateAdminSubmit(admin1);//数据库修改
}
}else{
//读者
ReaderInfo readerInfo = (ReaderInfo) session.getAttribute("user");
ReaderInfo readerInfo1 = readerInfoService.queryReaderInfoById(readerInfo.getId());//根据id查询对象
if (!oldPwd.equals(readerInfo1.getPassword())){
return DataInfo.fail("输入的旧密码错误");
}else{
readerInfo1.setPassword(newPwd);
readerInfoService.updateReaderInfoSubmit(readerInfo1);//数据库修改
}
}
return DataInfo.ok();
}
}

@ -0,0 +1,30 @@
package com.yx.controller;
import com.yx.po.BookInfo;
import com.yx.po.TypeInfo;
import com.yx.service.BookInfoService;
import com.yx.service.TypeInfoService;
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 java.util.List;
@Controller
public class StatisticsController {
@Autowired
private BookInfoService bookInfoService;
@Autowired
private TypeInfoService typeInfoService;
@GetMapping("statisticIndex")
public String statistics(Model model){
//根据图书类型查询图书数量
List<BookInfo> list = bookInfoService.getBookCountByType();
model.addAttribute("list",list);
return "count/statisticIndex";
}
}

@ -0,0 +1,89 @@
package com.yx.controller;
import com.github.pagehelper.PageInfo;
import com.yx.po.TypeInfo;
import com.yx.service.TypeInfoService;
import com.yx.utils.DataInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import java.util.Arrays;
import java.util.List;
@Controller //声明后端控制器
public class TypeInfoController {
@Autowired
private TypeInfoService typeInfoService;
/**
*
* @return
*/
@GetMapping("/typeIndex")
public String typeIndex(){
return "type/typeIndex";
}
/**
* type
*/
@RequestMapping("/typeAll")
@ResponseBody //@ResponseBody将java对象转为json格式的数据表示该方法的返回结果直接写入 HTTP response body 中一般在异步ajax获取数据时使用
public DataInfo typeAll(String name, @RequestParam(defaultValue = "1") Integer pageNum, @RequestParam(defaultValue = "15") Integer limit){
PageInfo<TypeInfo> pageInfo = typeInfoService.queryTypeInfoAll(name,pageNum,limit);
return DataInfo.ok("成功",pageInfo.getTotal(),pageInfo.getList());//总条数getTotal数据封装成list,以便加载分页显示,由于加了ResponseBody,就会返回一个字符串
}
/**
*
*/
@GetMapping("/typeAdd")
public String typeAdd(){
return "type/typeAdd";
}
/**
*
*/
@PostMapping("/addTypeSubmit")
@ResponseBody
public DataInfo addTypeSubmit(TypeInfo info){
typeInfoService.addTypeSubmit(info);
return DataInfo.ok();
}
/**
* id()
*/
@GetMapping("/queryTypeInfoById")
public String queryTypeInfoById(Integer id, Model model){
TypeInfo info= typeInfoService.queryTypeInfoById(id);
model.addAttribute("info",info);
return "type/updateType";
}
/**
*
*/
@RequestMapping("/updateTypeSubmit")
@ResponseBody
public DataInfo updateTypeSubmit(@RequestBody TypeInfo info){
typeInfoService.updateTypeSubmit(info);
return DataInfo.ok();
}
/**
*
*/
@RequestMapping("/deleteType")
@ResponseBody
public DataInfo deleteType(String ids){
List<String> list= Arrays.asList(ids.split(","));
typeInfoService.deleteTypeByIds(list);
return DataInfo.ok();
}
}

@ -0,0 +1,66 @@
package com.yx.dao;
import com.yx.po.Admin;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface AdminMapper {
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table admin
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
int deleteByPrimaryKey(Integer id);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table admin
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
int insert(Admin record);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table admin
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
int insertSelective(Admin record);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table admin
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
Admin selectByPrimaryKey(Integer id);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table admin
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
int updateByPrimaryKeySelective(Admin record);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table admin
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
int updateByPrimaryKey(Admin record);
/**
*
*/
List<Admin> queryAdminInfoAll(Admin admin);
/**
*
*/
Admin queryUserByNameAndPassword(@Param("username") String username,@Param("password") String password);
}

@ -0,0 +1,66 @@
package com.yx.dao;
import com.yx.po.BookInfo;
import java.awt.print.Book;
import java.util.List;
public interface BookInfoMapper {
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table book_info
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
int deleteByPrimaryKey(Integer id);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table book_info
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
int insert(BookInfo record);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table book_info
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
int insertSelective(BookInfo record);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table book_info
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
BookInfo selectByPrimaryKey(Integer id);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table book_info
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
int updateByPrimaryKeySelective(BookInfo record);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table book_info
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
int updateByPrimaryKey(BookInfo record);
/**
*
*/
List<BookInfo> queryBookInfoAll(BookInfo bookInfo);
/**
*
*/
List<BookInfo> getBookCountByType();
}

@ -0,0 +1,73 @@
package com.yx.dao;
import com.yx.po.LendList;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface LendListMapper {
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table lend_list
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
void deleteByPrimaryKey(Integer id);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table lend_list
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
void insert(LendList record);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table lend_list
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
void insertSelective(LendList record);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table lend_list
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
LendList selectByPrimaryKey(Integer id);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table lend_list
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
void updateByPrimaryKeySelective(LendList record);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table lend_list
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
void updateByPrimaryKey(LendList record);
/**
*
*/
List<LendList> queryLendListAll(LendList lendList);
/**
* 线
*/
List<LendList> queryLookBookList(@Param("rid") Integer rid, @Param("bid") Integer bid);
/**
* ()
*/
void updateLendListSubmit(LendList lendList);
}

@ -0,0 +1,62 @@
package com.yx.dao;
import com.yx.po.Notice;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface NoticeMapper {
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table notice
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
int deleteByPrimaryKey(Integer id);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table notice
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
int insert(Notice record);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table notice
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
int insertSelective(Notice record);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table notice
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
Notice selectByPrimaryKey(Integer id);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table notice
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
int updateByPrimaryKeySelective(Notice record);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table notice
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
int updateByPrimaryKey(Notice record);
/**
*
*/
List<Notice> queryNoticeAll(Notice notice);
}

@ -0,0 +1,66 @@
package com.yx.dao;
import com.yx.po.ReaderInfo;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface ReaderInfoMapper {
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table reader_info
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
int deleteByPrimaryKey(Integer id);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table reader_info
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
int insert(ReaderInfo record);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table reader_info
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
int insertSelective(ReaderInfo record);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table reader_info
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
ReaderInfo selectByPrimaryKey(Integer id);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table reader_info
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
int updateByPrimaryKeySelective(ReaderInfo record);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table reader_info
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
int updateByPrimaryKey(ReaderInfo record);
/**
*
*/
List<ReaderInfo> queryAllReaderInfo(ReaderInfo readerInfo);
/**
*
*/
ReaderInfo queryUserInfoByNameAndPassword(@Param("username") String username, @Param("password") String password);
}

@ -0,0 +1,35 @@
package com.yx.dao;
import com.yx.po.TypeInfo;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface TypeInfoMapper {
/**
*
*/
List<TypeInfo> queryTypeInfoAll(@Param(value = "name") String name);
/**
*
*/
void addTypeSubmit(TypeInfo info);
/**
* id
*/
TypeInfo queryTypeInfoById(Integer id);
/**
*
*/
void updateTypeSubmit(TypeInfo info);
/**
* ids
*/
void deleteTypeByIds(List<Integer> id);
//List<TypeInfo> queryTypeName();
}

@ -0,0 +1,35 @@
package com.yx.interceptor;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class LoginInterceptor implements HandlerInterceptor {
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("执行后,返回前执行....");
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
//在处理过程中进行拦截
}
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//已经登录了就放行 否则进行拦截
HttpSession session=request.getSession();
if(session.getAttribute("user")!=null){
return true;//放行
}else{
//没有登录 跳转到登录页面进行登录操作
response.sendRedirect(request.getContextPath()+"/login");
return false;
}
}
}

@ -0,0 +1,141 @@
package com.yx.po;
import java.io.Serializable;
public class Admin implements Serializable {
/**
* This field was generated by MyBatis Generator.
* This field corresponds to the database column admin.id
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
private Integer id;
/**
* This field was generated by MyBatis Generator.
* This field corresponds to the database column admin.username
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
private String username;
/**
* This field was generated by MyBatis Generator.
* This field corresponds to the database column admin.password
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
private String password;
/**
* This field was generated by MyBatis Generator.
* This field corresponds to the database column admin.admin_type
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
private Integer adminType;
/**
* This field was generated by MyBatis Generator.
* This field corresponds to the database table admin
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
private static final long serialVersionUID = 1L;
/**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column admin.id
*
* @return the value of admin.id
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public Integer getId() {
return id;
}
/**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column admin.id
*
* @param id the value for admin.id
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public void setId(Integer id) {
this.id = id;
}
/**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column admin.username
*
* @return the value of admin.username
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public String getUsername() {
return username;
}
/**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column admin.username
*
* @param username the value for admin.username
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public void setUsername(String username) {
this.username = username == null ? null : username.trim();
}
/**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column admin.password
*
* @return the value of admin.password
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public String getPassword() {
return password;
}
/**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column admin.password
*
* @param password the value for admin.password
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public void setPassword(String password) {
this.password = password == null ? null : password.trim();
}
/**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column admin.admin_type
*
* @return the value of admin.admin_type
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public Integer getAdminType() {
return adminType;
}
/**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column admin.admin_type
*
* @param adminType the value for admin.admin_type
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public void setAdminType(Integer adminType) {
this.adminType = adminType;
}
}

@ -0,0 +1,386 @@
package com.yx.po;
import java.io.Serializable;
import java.util.Date;
public class BookInfo implements Serializable {
/**
* This field was generated by MyBatis Generator.
* This field corresponds to the database column book_info.id
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
private Integer id;
/**
* This field was generated by MyBatis Generator.
* This field corresponds to the database column book_info.name
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
private String name;
/**
* This field was generated by MyBatis Generator.
* This field corresponds to the database column book_info.author
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
private String author;
/**
* This field was generated by MyBatis Generator.
* This field corresponds to the database column book_info.publish
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
private String publish;
/**
* This field was generated by MyBatis Generator.
* This field corresponds to the database column book_info.ISBN
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
private String isbn;
/**
* This field was generated by MyBatis Generator.
* This field corresponds to the database column book_info.introduction
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
private String introduction;
/**
* This field was generated by MyBatis Generator.
* This field corresponds to the database column book_info.language
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
private String language;
/**
* This field was generated by MyBatis Generator.
* This field corresponds to the database column book_info.price
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
private Double price;
/**
* This field was generated by MyBatis Generator.
* This field corresponds to the database column book_info.publish_date
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
private Date publishDate;
/**
* This field was generated by MyBatis Generator.
* This field corresponds to the database column book_info.type_id
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
private Integer typeId;
/**
* This field was generated by MyBatis Generator.
* This field corresponds to the database column book_info.status
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
private Integer status;
/**
* This field was generated by MyBatis Generator.
* This field corresponds to the database table book_info
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
private TypeInfo typeInfo;//图书类型,在图书馆里中显示什么类型的书
private Integer counts;
public Integer getCounts() {
return counts;
}
public void setCounts(Integer counts) {
this.counts = counts;
}
public TypeInfo getTypeInfo() {
return typeInfo;
}
public void setTypeInfo(TypeInfo typeInfo) {
this.typeInfo = typeInfo;
}
private static final long serialVersionUID = 1L;
/**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column book_info.id
*
* @return the value of book_info.id
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public Integer getId() {
return id;
}
/**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column book_info.id
*
* @param id the value for book_info.id
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public void setId(Integer id) {
this.id = id;
}
/**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column book_info.name
*
* @return the value of book_info.name
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public String getName() {
return name;
}
/**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column book_info.name
*
* @param name the value for book_info.name
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public void setName(String name) {
this.name = name == null ? null : name.trim();
}
/**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column book_info.author
*
* @return the value of book_info.author
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public String getAuthor() {
return author;
}
/**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column book_info.author
*
* @param author the value for book_info.author
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public void setAuthor(String author) {
this.author = author == null ? null : author.trim();
}
/**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column book_info.publish
*
* @return the value of book_info.publish
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public String getPublish() {
return publish;
}
/**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column book_info.publish
*
* @param publish the value for book_info.publish
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public void setPublish(String publish) {
this.publish = publish == null ? null : publish.trim();
}
/**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column book_info.ISBN
*
* @return the value of book_info.ISBN
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public String getIsbn() {
return isbn;
}
/**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column book_info.ISBN
*
* @param isbn the value for book_info.ISBN
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public void setIsbn(String isbn) {
this.isbn = isbn == null ? null : isbn.trim();
}
/**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column book_info.introduction
*
* @return the value of book_info.introduction
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public String getIntroduction() {
return introduction;
}
/**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column book_info.introduction
*
* @param introduction the value for book_info.introduction
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public void setIntroduction(String introduction) {
this.introduction = introduction == null ? null : introduction.trim();
}
/**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column book_info.language
*
* @return the value of book_info.language
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public String getLanguage() {
return language;
}
/**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column book_info.language
*
* @param language the value for book_info.language
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public void setLanguage(String language) {
this.language = language == null ? null : language.trim();
}
/**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column book_info.price
*
* @return the value of book_info.price
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public Double getPrice() {
return price;
}
/**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column book_info.price
*
* @param price the value for book_info.price
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public void setPrice(Double price) {
this.price = price;
}
/**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column book_info.publish_date
*
* @return the value of book_info.publish_date
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public Date getPublishDate() {
return publishDate;
}
/**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column book_info.publish_date
*
* @param publishDate the value for book_info.publish_date
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public void setPublishDate(Date publishDate) {
this.publishDate = publishDate;
}
/**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column book_info.type_id
*
* @return the value of book_info.type_id
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public Integer getTypeId() {
return typeId;
}
/**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column book_info.type_id
*
* @param typeId the value for book_info.type_id
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public void setTypeId(Integer typeId) {
this.typeId = typeId;
}
/**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column book_info.status
*
* @return the value of book_info.status
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public Integer getStatus() {
return status;
}
/**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column book_info.status
*
* @param status the value for book_info.status
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public void setStatus(Integer status) {
this.status = status;
}
}

@ -0,0 +1,249 @@
package com.yx.po;
import com.alibaba.fastjson.annotation.JSONField;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.util.Date;
public class LendList implements Serializable {
/**
* This field was generated by MyBatis Generator.
* This field corresponds to the database column lend_list.id
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
private Integer id;
/**
* This field was generated by MyBatis Generator.
* This field corresponds to the database column lend_list.book_id
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
private Integer bookId;
/**
* This field was generated by MyBatis Generator.
* This field corresponds to the database column lend_list.reader_id
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
private Integer readerId;
/**
* This field was generated by MyBatis Generator.
* This field corresponds to the database column lend_list.lend_date
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")//接收页面输入的时间,将其格式化
@JSONField(format = "yyyy-MM-dd HH:mm:ss")//后端传的日期格式化
private Date lendDate;
/**
* This field was generated by MyBatis Generator.
* This field corresponds to the database column lend_list.back_date
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
private Date backDate;
/**
* This field was generated by MyBatis Generator.
* This field corresponds to the database column lend_list.back_type
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
private Integer backType;
/**
* This field was generated by MyBatis Generator.
* This field corresponds to the database column lend_list.exceptRemarks
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
private String exceptRemarks;
private BookInfo bookInfo;
private ReaderInfo readerInfo;
/**
* This field was generated by MyBatis Generator.
* This field corresponds to the database table lend_list
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
private static final long serialVersionUID = 1L;
/**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column lend_list.id
*
* @return the value of lend_list.id
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public Integer getId() {
return id;
}
/**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column lend_list.id
*
* @param id the value for lend_list.id
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public void setId(Integer id) {
this.id = id;
}
/**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column lend_list.book_id
*
* @return the value of lend_list.book_id
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public Integer getBookId() {
return bookId;
}
/**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column lend_list.book_id
*
* @param bookId the value for lend_list.book_id
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public void setBookId(Integer bookId) {
this.bookId = bookId;
}
/**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column lend_list.reader_id
*
* @return the value of lend_list.reader_id
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public Integer getReaderId() {
return readerId;
}
/**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column lend_list.reader_id
*
* @param readerId the value for lend_list.reader_id
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public void setReaderId(Integer readerId) {
this.readerId = readerId;
}
/**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column lend_list.lend_date
*
* @return the value of lend_list.lend_date
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public Date getLendDate() {
return lendDate;
}
/**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column lend_list.lend_date
*
* @param lendDate the value for lend_list.lend_date
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public void setLendDate(Date lendDate) {
this.lendDate = lendDate;
}
/**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column lend_list.back_date
*
* @return the value of lend_list.back_date
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public Date getBackDate() {
return backDate;
}
/**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column lend_list.back_date
*
* @param backDate the value for lend_list.back_date
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public void setBackDate(Date backDate) {
this.backDate = backDate;
}
/**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column lend_list.back_type
*
* @return the value of lend_list.back_type
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public Integer getBackType() {
return backType;
}
/**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column lend_list.back_type
*
* @param backType the value for lend_list.back_type
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public void setBackType(Integer backType) {
this.backType = backType;
}
public String getExceptRemarks() {
return exceptRemarks;
}
public void setExceptRemarks(String exceptRemarks) {
this.exceptRemarks = exceptRemarks;
}
public BookInfo getBookInfo() {
return bookInfo;
}
public void setBookInfo(BookInfo bookInfo) {
this.bookInfo = bookInfo;
}
public ReaderInfo getReaderInfo() {
return readerInfo;
}
public void setReaderInfo(ReaderInfo readerInfo) {
this.readerInfo = readerInfo;
}
}

@ -0,0 +1,179 @@
package com.yx.po;
import com.alibaba.fastjson.annotation.JSONField;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.util.Date;
public class Notice implements Serializable {
/**
* This field was generated by MyBatis Generator.
* This field corresponds to the database column notice.id
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
private Integer id;
/**
* This field was generated by MyBatis Generator.
* This field corresponds to the database column notice.topic
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
private String topic;
/**
* This field was generated by MyBatis Generator.
* This field corresponds to the database column notice.content
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
private String content;
/**
* This field was generated by MyBatis Generator.
* This field corresponds to the database column notice.author
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
private String author;
/**
* This field was generated by MyBatis Generator.
* This field corresponds to the database column notice.create_date
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")//接收页面传来的时间格式
@JSONField(format="yyyy-MM-dd HH:mm:ss")//对返回的时间对象用fastjson格式化时间
private Date createDate;
/**
* This field was generated by MyBatis Generator.
* This field corresponds to the database table notice
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
private static final long serialVersionUID = 1L;
/**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column notice.id
*
* @return the value of notice.id
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public Integer getId() {
return id;
}
/**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column notice.id
*
* @param id the value for notice.id
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public void setId(Integer id) {
this.id = id;
}
/**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column notice.topic
*
* @return the value of notice.topic
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public String getTopic() {
return topic;
}
/**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column notice.topic
*
* @param topic the value for notice.topic
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public void setTopic(String topic) {
this.topic = topic == null ? null : topic.trim();
}
/**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column notice.content
*
* @return the value of notice.content
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public String getContent() {
return content;
}
/**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column notice.content
*
* @param content the value for notice.content
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public void setContent(String content) {
this.content = content == null ? null : content.trim();
}
/**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column notice.author
*
* @return the value of notice.author
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public String getAuthor() {
return author;
}
/**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column notice.author
*
* @param author the value for notice.author
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public void setAuthor(String author) {
this.author = author == null ? null : author.trim();
}
/**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column notice.create_date
*
* @return the value of notice.create_date
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public Date getCreateDate() {
return createDate;
}
/**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column notice.create_date
*
* @param createDate the value for notice.create_date
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public void setCreateDate(Date createDate) {
this.createDate = createDate;
}
}

@ -0,0 +1,373 @@
package com.yx.po;
import java.io.Serializable;
import java.util.Date;
public class ReaderInfo implements Serializable {
/**
* This field was generated by MyBatis Generator.
* This field corresponds to the database column reader_info.id
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
private Integer id;
/**
* This field was generated by MyBatis Generator.
* This field corresponds to the database column reader_info.username
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
private String username;
/**
* This field was generated by MyBatis Generator.
* This field corresponds to the database column reader_info.password
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
private String password;
/**
* This field was generated by MyBatis Generator.
* This field corresponds to the database column reader_info.number
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
/**
* This field was generated by MyBatis Generator.
* This field corresponds to the database column reader_info.real_name
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
private String realName;
/**
* This field was generated by MyBatis Generator.
* This field corresponds to the database column reader_info.sex
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
private String sex;
/**
* This field was generated by MyBatis Generator.
* This field corresponds to the database column reader_info.birthday
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
private Date birthday;
/**
* This field was generated by MyBatis Generator.
* This field corresponds to the database column reader_info.address
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
private String address;
/**
* This field was generated by MyBatis Generator.
* This field corresponds to the database column reader_info.tel
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
private String tel;
/**
* This field was generated by MyBatis Generator.
* This field corresponds to the database column reader_info.email
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
private String email;
/**
* This field was generated by MyBatis Generator.
* This field corresponds to the database column reader_info.register_date
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
private Date registerDate;
/**
* This field was generated by MyBatis Generator.
* This field corresponds to the database column reader_info.reader_number
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
private String readerNumber;
/**
* This field was generated by MyBatis Generator.
* This field corresponds to the database table reader_info
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
private static final long serialVersionUID = 1L;
/**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column reader_info.id
*
* @return the value of reader_info.id
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public Integer getId() {
return id;
}
/**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column reader_info.id
*
* @param id the value for reader_info.id
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public void setId(Integer id) {
this.id = id;
}
/**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column reader_info.username
*
* @return the value of reader_info.username
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public String getUsername() {
return username;
}
/**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column reader_info.username
*
* @param username the value for reader_info.username
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public void setUsername(String username) {
this.username = username == null ? null : username.trim();
}
/**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column reader_info.password
*
* @return the value of reader_info.password
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public String getPassword() {
return password;
}
/**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column reader_info.password
*
* @param password the value for reader_info.password
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public void setPassword(String password) {
this.password = password == null ? null : password.trim();
}
/**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column reader_info.real_name
*
* @return the value of reader_info.real_name
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public String getRealName() {
return realName;
}
/**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column reader_info.real_name
*
* @param realName the value for reader_info.real_name
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public void setRealName(String realName) {
this.realName = realName == null ? null : realName.trim();
}
/**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column reader_info.sex
*
* @return the value of reader_info.sex
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public String getSex() {
return sex;
}
/**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column reader_info.sex
*
* @param sex the value for reader_info.sex
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public void setSex(String sex) {
this.sex = sex == null ? null : sex.trim();
}
/**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column reader_info.birthday
*
* @return the value of reader_info.birthday
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public Date getBirthday() {
return birthday;
}
/**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column reader_info.birthday
*
* @param birthday the value for reader_info.birthday
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
/**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column reader_info.address
*
* @return the value of reader_info.address
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public String getAddress() {
return address;
}
/**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column reader_info.address
*
* @param address the value for reader_info.address
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public void setAddress(String address) {
this.address = address == null ? null : address.trim();
}
/**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column reader_info.tel
*
* @return the value of reader_info.tel
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public String getTel() {
return tel;
}
/**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column reader_info.tel
*
* @param tel the value for reader_info.tel
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public void setTel(String tel) {
this.tel = tel == null ? null : tel.trim();
}
/**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column reader_info.email
*
* @return the value of reader_info.email
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public String getEmail() {
return email;
}
/**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column reader_info.email
*
* @param email the value for reader_info.email
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public void setEmail(String email) {
this.email = email == null ? null : email.trim();
}
/**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column reader_info.register_date
*
* @return the value of reader_info.register_date
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public Date getRegisterDate() {
return registerDate;
}
/**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column reader_info.register_date
*
* @param registerDate the value for reader_info.register_date
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public void setRegisterDate(Date registerDate) {
this.registerDate = registerDate;
}
/**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column reader_info.reader_number
*
* @return the value of reader_info.reader_number
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public String getReaderNumber() {
return readerNumber;
}
/**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column reader_info.reader_number
*
* @param readerNumber the value for reader_info.reader_number
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public void setReaderNumber(String readerNumber) {
this.readerNumber = readerNumber == null ? null : readerNumber.trim();
}
}

@ -0,0 +1,103 @@
package com.yx.po;
import java.io.Serializable;
public class TypeInfo implements Serializable {
/**
* This field was generated by MyBatis Generator.
* This field corresponds to the database column type_info.id
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
private Integer id;
/**
* This field was generated by MyBatis Generator.
* This field corresponds to the database column type_info.name
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
private String name;
public String getRemarks() {
return remarks;
}
public void setRemarks(String remarks) {
this.remarks = remarks;
}
/**
* This field was generated by MyBatis Generator.
* This field corresponds to the database column type_info.reamrks
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
private String remarks;
/**
* This field was generated by MyBatis Generator.
* This field corresponds to the database table type_info
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
private static final long serialVersionUID = 1L;
/**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column type_info.id
*
* @return the value of type_info.id
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public Integer getId() {
return id;
}
/**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column type_info.id
*
* @param id the value for type_info.id
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public void setId(Integer id) {
this.id = id;
}
/**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column type_info.name
*
* @return the value of type_info.name
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public String getName() {
return name;
}
/**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column type_info.name
*
* @param name the value for type_info.name
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
public void setName(String name) {
this.name = name == null ? null : name.trim();
}
/**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column type_info.reamrks
*
* @return the value of type_info.reamrks
*
* @mbggenerated Tue Mar 30 16:30:04 CST 2021
*/
}

@ -0,0 +1,39 @@
package com.yx.service;
import com.github.pagehelper.PageInfo;
import com.yx.po.Admin;
import java.util.List;
public interface AdminService {
/**
*
*/
PageInfo<Admin> queryAdminAll(Admin admin,Integer pageNum,Integer limit);
/**
*
*/
void addAdminSubmit(Admin admin);
/**
* id
*/
Admin queryAdminById(Integer id);
/**
*
*/
void updateAdminSubmit(Admin admin);
/**
*
*/
void deleteAdminByIds(List<String> ids);
/**
*
*/
Admin queryUserByNameAndPassword(String username,String password);
}

@ -0,0 +1,38 @@
package com.yx.service;
import com.github.pagehelper.PageInfo;
import com.yx.po.BookInfo;
import java.util.List;
public interface BookInfoService {
/**
*
*/
PageInfo<BookInfo> queryBookInfoAll(BookInfo bookInfo,Integer pageNum,Integer limit);
/**
*
*/
void addBookSubmit(BookInfo bookInfo);
/**
* id
*/
BookInfo queryBookInfoById(Integer id);
/**
*
*/
void updateBookSubmit(BookInfo info);
/**
* ids
*/
void deleteBookByIds(List<String> ids);
/**
*
*/
List<BookInfo> getBookCountByType();
}

@ -0,0 +1,36 @@
package com.yx.service;
import com.github.pagehelper.PageInfo;
import com.yx.po.LendList;
import java.util.List;
public interface LendListService {
//分页查询
PageInfo<LendList> queryLendListAll(LendList lendList, int page, int limit);
//添加借阅记录
void addLendListSubmit(LendList lendList);
/**
*
*/
void deleteLendListById(List<String> ids, List<String> bookIds);
/**
*
*/
void updateLendListSubmit(List<String> ids, List<String> bookIds);
/**
*
*/
void backBook(LendList lendList);
/**
* 线
*/
List<LendList> queryLookBookList(Integer rid, Integer bid);
}

@ -0,0 +1,31 @@
package com.yx.service;
import com.github.pagehelper.PageInfo;
import com.yx.po.Notice;
import java.util.List;
public interface NoticeService {
/**
*
*/
PageInfo<Notice> queryAllNotice(Notice notice,Integer pageNum,Integer limit);
/**
*
*/
void addNotice(Notice notice);
/**
* 便
*
*/
Notice queryNoticeById(Integer id);
/**
*
* @param ids
*/
void deleteNoticeByIds(List<String> ids);
}

@ -0,0 +1,39 @@
package com.yx.service;
import com.github.pagehelper.PageInfo;
import com.yx.po.ReaderInfo;
import java.util.List;
public interface ReaderInfoService {
/**
*
*/
PageInfo<ReaderInfo> queryAllReaderInfo(ReaderInfo readerInfo,Integer pageNum,Integer limit);
/**
*
*/
void addReaderInfoSubmit(ReaderInfo readerInfo);
/**
*
*/
ReaderInfo queryReaderInfoById(Integer id);
/**
*
*/
void updateReaderInfoSubmit(ReaderInfo readerInfo);
/**
*
*/
void deleteReaderInfoByIds(List<String> ids);
/**
*
*/
ReaderInfo queryUserInfoByNameAndPassword(String username,String password);
}

@ -0,0 +1,34 @@
package com.yx.service;
import com.github.pagehelper.PageInfo;
import com.yx.po.TypeInfo;
import java.util.List;
public interface TypeInfoService {
/**
*
*/
PageInfo<TypeInfo> queryTypeInfoAll(String name, Integer pageNum, Integer limit);
/**
*
*/
void addTypeSubmit(TypeInfo info);
/**
* id
*/
TypeInfo queryTypeInfoById(Integer id);
/**
*
*/
void updateTypeSubmit(TypeInfo info);
/**
* ids
*/
void deleteTypeByIds(List<String> id);
}

@ -0,0 +1,52 @@
package com.yx.service.impl;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.yx.dao.AdminMapper;
import com.yx.po.Admin;
import com.yx.service.AdminService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service("adminService")
public class AdminServiceImpl implements AdminService {
@Autowired
private AdminMapper adminMapper;
@Override
public PageInfo<Admin> queryAdminAll(Admin admin, Integer pageNum, Integer limit) {
PageHelper.startPage(pageNum,limit);
List<Admin> adminList = adminMapper.queryAdminInfoAll(admin);
return new PageInfo<>(adminList) ;
}
@Override
public void addAdminSubmit(Admin admin) {
adminMapper.insert(admin);
}
@Override
public Admin queryAdminById(Integer id) {
return adminMapper.selectByPrimaryKey(id);
}
@Override
public void updateAdminSubmit(Admin admin) {
adminMapper.updateByPrimaryKey(admin);
}
@Override
public void deleteAdminByIds(List<String> ids) {
for (String id : ids){
adminMapper.deleteByPrimaryKey(Integer.parseInt(id));
}
}
@Override
public Admin queryUserByNameAndPassword(String username, String password) {
return adminMapper.queryUserByNameAndPassword(username,password);
}
}

@ -0,0 +1,52 @@
package com.yx.service.impl;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.yx.dao.BookInfoMapper;
import com.yx.po.BookInfo;
import com.yx.service.BookInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service("bookInfoService")
public class BookInfoServiceImpl implements BookInfoService {
@Autowired
private BookInfoMapper bookInfoMapper;
@Override
public PageInfo<BookInfo> queryBookInfoAll(BookInfo bookInfo, Integer pageNum, Integer limit) {
PageHelper.startPage(pageNum,limit);
List<BookInfo> bookInfoList = bookInfoMapper.queryBookInfoAll(bookInfo);
return new PageInfo<>(bookInfoList);
}
@Override
public void addBookSubmit(BookInfo bookInfo) {
bookInfoMapper.insert(bookInfo);
}
@Override
public BookInfo queryBookInfoById(Integer id) {
return bookInfoMapper.selectByPrimaryKey(id);
}
@Override
public void updateBookSubmit(BookInfo info) {
bookInfoMapper.updateByPrimaryKeySelective(info);
}
@Override
public void deleteBookByIds(List<String> ids) {
for (String id : ids){
bookInfoMapper.deleteByPrimaryKey(Integer.parseInt(id));
}
}
@Override
public List<BookInfo> getBookCountByType() {
return bookInfoMapper.getBookCountByType();
}
}

@ -0,0 +1,100 @@
package com.yx.service.impl;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.yx.dao.BookInfoMapper;
import com.yx.dao.LendListMapper;
import com.yx.po.BookInfo;
import com.yx.po.LendList;
import com.yx.service.LendListService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
@Service("lendListService")
public class LendListServiceImpl implements LendListService {
@Autowired
private LendListMapper lendListMapper;
@Autowired
private BookInfoMapper bookInfoMapper;
@Override
public PageInfo<LendList> queryLendListAll(LendList lendList, int page, int limit) {
PageHelper.startPage(page,limit);
List<LendList> list=lendListMapper.queryLendListAll(lendList);
PageInfo pageInfo=new PageInfo(list);
return pageInfo;
}
@Override
public void addLendListSubmit(LendList lendList) {
lendListMapper.insert(lendList);
}
@Override
public void deleteLendListById(List<String> ids, List<String> bookIds) {
//删除借阅记录
for(String id:ids){
lendListMapper.deleteByPrimaryKey(Integer.parseInt(id));
}
//更改图书标识,更新状态为未借出
for(String bid:bookIds){
//根据id查询图书记录信息
BookInfo bookInfo=bookInfoMapper.selectByPrimaryKey(Integer.parseInt(bid));
bookInfo.setStatus(0);//该为未借出
bookInfoMapper.updateByPrimaryKey(bookInfo);
}
}
@Override
public void updateLendListSubmit(List<String> ids, List<String> bookIds) {
for(String id:ids){
//根据id查询借阅记录信息
LendList lendList=new LendList();
lendList.setId(Integer.parseInt(id));
lendList.setBackDate(new Date());
lendList.setBackType(0);//正常还书
lendListMapper.updateLendListSubmit(lendList);//如果用updatePrimarykey会默认很多赋值为空
}
//修改书的状态
//更改图书标识,更新状态为未借出
for(String bid:bookIds){
//根据id查询图书记录信息
BookInfo bookInfo=bookInfoMapper.selectByPrimaryKey(Integer.parseInt(bid));
bookInfo.setStatus(0);//该为未借出
bookInfoMapper.updateByPrimaryKey(bookInfo);
}
}
@Override
public void backBook(LendList lendList) {
LendList lend=new LendList();
lend.setId(lendList.getId());
lend.setBackType(lendList.getBackType());
lend.setBackDate(new Date());
lend.setExceptRemarks(lendList.getExceptRemarks());
lend.setBookId(lendList.getBookId());
lendListMapper.updateLendListSubmit(lend);
//判断异常还书 如果是延期或者正常还书,需要更改书的状态
if(lend.getBackType()==0 || lend.getBackType()==1){
BookInfo bookInfo=bookInfoMapper.selectByPrimaryKey(lend.getBookId());
bookInfo.setStatus(0);//该为未借出
bookInfoMapper.updateByPrimaryKey(bookInfo);
}
}
@Override
public List<LendList> queryLookBookList(Integer rid, Integer bid) {
return lendListMapper.queryLookBookList(rid, bid);
}
}

@ -0,0 +1,42 @@
package com.yx.service.impl;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.yx.dao.NoticeMapper;
import com.yx.po.Notice;
import com.yx.service.NoticeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service("noticeService")
public class NoticeServiceImpl implements NoticeService {
@Autowired
private NoticeMapper noticeMapper;
@Override
public PageInfo<Notice> queryAllNotice(Notice notice, Integer pageNum, Integer limit) {
PageHelper.startPage(pageNum,limit);//业务层实现分页
List<Notice> noticeList = noticeMapper.queryNoticeAll(notice);
return new PageInfo<>(noticeList);
}
@Override
public void addNotice(Notice notice) {
noticeMapper.insert(notice);
}
@Override
public Notice queryNoticeById(Integer id) {
return noticeMapper.selectByPrimaryKey(id);
}
@Override
public void deleteNoticeByIds(List<String> ids) {
for (String id : ids){
noticeMapper.deleteByPrimaryKey(Integer.parseInt(id));
}
}
}

@ -0,0 +1,52 @@
package com.yx.service.impl;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.yx.dao.ReaderInfoMapper;
import com.yx.po.ReaderInfo;
import com.yx.service.ReaderInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service("readerInfoService")
public class ReaderInfoServiceImpl implements ReaderInfoService {
@Autowired
private ReaderInfoMapper readerInfoMapper;
@Override
public PageInfo<ReaderInfo> queryAllReaderInfo(ReaderInfo readerInfo, Integer pageNum, Integer limit) {
PageHelper.startPage(pageNum,limit);
List<ReaderInfo> readerInfoList = readerInfoMapper.queryAllReaderInfo(readerInfo);
return new PageInfo<>(readerInfoList);
}
@Override
public void addReaderInfoSubmit(ReaderInfo readerInfo) {
readerInfoMapper.insert(readerInfo);
}
@Override
public ReaderInfo queryReaderInfoById(Integer id) {
return readerInfoMapper.selectByPrimaryKey(id);
}
@Override
public void updateReaderInfoSubmit(ReaderInfo readerInfo) {
readerInfoMapper.updateByPrimaryKey(readerInfo);
}
@Override
public void deleteReaderInfoByIds(List<String> ids) {
for (String id : ids){
readerInfoMapper.deleteByPrimaryKey(Integer.parseInt(id));
}
}
@Override
public ReaderInfo queryUserInfoByNameAndPassword(String username, String password) {
return readerInfoMapper.queryUserInfoByNameAndPassword(username, password);
}
}

@ -0,0 +1,52 @@
package com.yx.service.impl;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.yx.dao.TypeInfoMapper;
import com.yx.po.TypeInfo;
import com.yx.service.TypeInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
@Service("typeInfoService")
public class TypeInfoServiceImpl implements TypeInfoService {
@Autowired
private TypeInfoMapper typeInfoMapper;
@Override
public PageInfo<TypeInfo> queryTypeInfoAll(String name,Integer pageNum,Integer limit) {
PageHelper.startPage(pageNum,limit);
List<TypeInfo> typeInfoList = typeInfoMapper.queryTypeInfoAll(name);
return new PageInfo<>(typeInfoList);
}
@Override
public void addTypeSubmit(TypeInfo info) {
typeInfoMapper.addTypeSubmit(info);
}
@Override
public TypeInfo queryTypeInfoById(Integer id) {
return typeInfoMapper.queryTypeInfoById(id);
}
@Override
public void updateTypeSubmit(TypeInfo info) {
typeInfoMapper.updateTypeSubmit(info);
}
@Override
public void deleteTypeByIds(List<String> id) {
List<Integer> list=new ArrayList<>();
for(String cid:id){
int id2= Integer.valueOf(cid);
list.add(id2);
}
typeInfoMapper.deleteTypeByIds(list);
}
}

@ -0,0 +1,18 @@
package com.yx.utils;
public class Constants {
public final static int OK_CODE = 0; //0表示Ok
public final static int FAIL_CODE = 400;
public final static String OK_MSG = "请求成功";
public final static String FAIL_MSG = "请求失败";
public final static int STATUS_0 = 0;//可用状态
public final static int STATUS_1 = 1;//禁用状态
public final static String CACHE_NAME = "KACache";
}

@ -0,0 +1,88 @@
package com.yx.utils;
import java.io.Serializable;
/**
*
*/
public class DataInfo implements Serializable {
private static final long serialVersionUID = 1L;
private Integer code;
private String msg;
private Object data; //json数据
private Long count; // 分页信息:总条数
public DataInfo() {
}
public DataInfo(Integer code, String msg, Object data) {
this.code = code;
this.msg = msg;
this.data = data;
}
public DataInfo(Integer code, String msg, Object data, Long count) {
this.code = code;
this.msg = msg;
this.data = data;
this.count = count;
}
public Integer getCode() {
return code;
}
public static DataInfo ok() {
return new DataInfo(Constants.OK_CODE, Constants.OK_MSG, null);
}
public static DataInfo ok(Object data) {
return new DataInfo(Constants.OK_CODE, Constants.OK_MSG, data);
}
public static DataInfo ok(String msg, long count, Object data) {
return new DataInfo(Constants.OK_CODE, Constants.OK_MSG, data,count);
}
public static DataInfo ok(String msg, Object data) {
return new DataInfo(Constants.OK_CODE, msg, data);
}
public static DataInfo fail(String msg) {
return new DataInfo(Constants.FAIL_CODE, msg, null);
}
public static DataInfo fail(int errorCode, String msg) {
return new DataInfo(errorCode, msg, null);
}
public void setCode(Integer code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
public Long getCount() {
return count;
}
public void setCount(Long count) {
this.count = count;
}
}

@ -0,0 +1,137 @@
<?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.yx.dao.AdminMapper">
<resultMap id="BaseResultMap" type="com.yx.po.Admin">
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Tue Mar 30 16:30:04 CST 2021.
-->
<id column="id" jdbcType="INTEGER" property="id" />
<result column="username" jdbcType="VARCHAR" property="username" />
<result column="password" jdbcType="VARCHAR" property="password" />
<result column="adminType" jdbcType="INTEGER" property="adminType" />
</resultMap>
<sql id="Base_Column_List">
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Tue Mar 30 16:30:04 CST 2021.
-->
id, username, password, adminType
</sql>
<select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Tue Mar 30 16:30:04 CST 2021.
-->
select
<include refid="Base_Column_List" />
from admin
where id = #{id,jdbcType=INTEGER}
</select>
<delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Tue Mar 30 16:30:04 CST 2021.
-->
delete from admin
where id = #{id,jdbcType=INTEGER}
</delete>
<insert id="insert" parameterType="com.yx.po.Admin">
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Tue Mar 30 16:30:04 CST 2021.
-->
insert into admin (id, username, password,
adminType)
values (#{id,jdbcType=INTEGER}, #{username,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR},
#{adminType,jdbcType=INTEGER})
</insert>
<insert id="insertSelective" parameterType="com.yx.po.Admin">
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Tue Mar 30 16:30:04 CST 2021.
-->
insert into admin
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null">
id,
</if>
<if test="username != null">
username,
</if>
<if test="password != null">
password,
</if>
<if test="adminType != null">
adminType,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null">
#{id,jdbcType=INTEGER},
</if>
<if test="username != null">
#{username,jdbcType=VARCHAR},
</if>
<if test="password != null">
#{password,jdbcType=VARCHAR},
</if>
<if test="adminType != null">
#{adminType,jdbcType=INTEGER},
</if>
</trim>
</insert>
<update id="updateByPrimaryKeySelective" parameterType="com.yx.po.Admin">
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Tue Mar 30 16:30:04 CST 2021.
-->
update admin
<set>
<if test="username != null">
username = #{username,jdbcType=VARCHAR},
</if>
<if test="password != null">
password = #{password,jdbcType=VARCHAR},
</if>
<if test="adminType != null">
adminType = #{adminType,jdbcType=INTEGER},
</if>
</set>
where id = #{id,jdbcType=INTEGER}
</update>
<update id="updateByPrimaryKey" parameterType="com.yx.po.Admin">
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Tue Mar 30 16:30:04 CST 2021.
-->
update admin
set username = #{username,jdbcType=VARCHAR},
password = #{password,jdbcType=VARCHAR},
adminType = #{adminType,jdbcType=INTEGER}
where id = #{id,jdbcType=INTEGER}
</update>
<select id="queryAdminInfoAll" parameterType="com.yx.po.Admin" resultType="com.yx.po.Admin">
SELECT * from admin
<where>
<if test="username!=null">
and username like '%${username}%'
</if>
<if test="adminType!=null">
and adminType like '%${adminType}%'
</if>
</where>
</select>
<select id="queryUserByNameAndPassword" resultType="com.yx.po.Admin">
select * from admin where username=#{username} and password=#{password}
</select>
</mapper>

@ -0,0 +1,238 @@
<?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.yx.dao.BookInfoMapper">
<resultMap id="BaseResultMap" type="com.yx.po.BookInfo">
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Tue Mar 30 16:30:04 CST 2021.
-->
<id column="id" jdbcType="INTEGER" property="id" />
<result column="name" jdbcType="VARCHAR" property="name" />
<result column="author" jdbcType="VARCHAR" property="author" />
<result column="publish" jdbcType="VARCHAR" property="publish" />
<result column="isbn" jdbcType="VARCHAR" property="isbn" />
<result column="introduction" jdbcType="VARCHAR" property="introduction" />
<result column="language" jdbcType="VARCHAR" property="language" />
<result column="price" jdbcType="DOUBLE" property="price" />
<result column="publish_date" jdbcType="DATE" property="publishDate" />
<result column="type_id" jdbcType="INTEGER" property="typeId" />
<result column="status" jdbcType="INTEGER" property="status" />
</resultMap>
<sql id="Base_Column_List">
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Tue Mar 30 16:30:04 CST 2021.
-->
id, name, author, publish, isbn, introduction, language, price, publish_date, type_id,
status
</sql>
<select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Tue Mar 30 16:30:04 CST 2021.
-->
select
<include refid="Base_Column_List" />
from book_info
where id = #{id,jdbcType=INTEGER}
</select>
<delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Tue Mar 30 16:30:04 CST 2021.
-->
delete from book_info
where id = #{id,jdbcType=INTEGER}
</delete>
<insert id="insert" parameterType="com.yx.po.BookInfo">
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Tue Mar 30 16:30:04 CST 2021.
-->
insert into book_info (id, name, author,
publish, isbn, introduction,
language, price, publish_date,
type_id, status)
values (#{id,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR}, #{author,jdbcType=VARCHAR},
#{publish,jdbcType=VARCHAR}, #{isbn,jdbcType=VARCHAR}, #{introduction,jdbcType=VARCHAR},
#{language,jdbcType=VARCHAR}, #{price,jdbcType=DOUBLE}, #{publishDate,jdbcType=DATE},
#{typeId,jdbcType=INTEGER}, #{status,jdbcType=INTEGER})
</insert>
<insert id="insertSelective" parameterType="com.yx.po.BookInfo">
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Tue Mar 30 16:30:04 CST 2021.
-->
insert into book_info
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null">
id,
</if>
<if test="name != null">
name,
</if>
<if test="author != null">
author,
</if>
<if test="publish != null">
publish,
</if>
<if test="isbn != null">
isbn,
</if>
<if test="introduction != null">
introduction,
</if>
<if test="language != null">
language,
</if>
<if test="price != null">
price,
</if>
<if test="publishDate != null">
publish_date,
</if>
<if test="typeId != null">
type_id,
</if>
<if test="status != null">
status,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null">
#{id,jdbcType=INTEGER},
</if>
<if test="name != null">
#{name,jdbcType=VARCHAR},
</if>
<if test="author != null">
#{author,jdbcType=VARCHAR},
</if>
<if test="publish != null">
#{publish,jdbcType=VARCHAR},
</if>
<if test="isbn != null">
#{isbn,jdbcType=VARCHAR},
</if>
<if test="introduction != null">
#{introduction,jdbcType=VARCHAR},
</if>
<if test="language != null">
#{language,jdbcType=VARCHAR},
</if>
<if test="price != null">
#{price,jdbcType=DOUBLE},
</if>
<if test="publishDate != null">
#{publishDate,jdbcType=DATE},
</if>
<if test="typeId != null">
#{typeId,jdbcType=INTEGER},
</if>
<if test="status != null">
#{status,jdbcType=INTEGER},
</if>
</trim>
</insert>
<update id="updateByPrimaryKeySelective" parameterType="com.yx.po.BookInfo">
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Tue Mar 30 16:30:04 CST 2021.
-->
update book_info
<set>
<if test="name != null">
name = #{name,jdbcType=VARCHAR},
</if>
<if test="author != null">
author = #{author,jdbcType=VARCHAR},
</if>
<if test="publish != null">
publish = #{publish,jdbcType=VARCHAR},
</if>
<if test="isbn != null">
isbn = #{isbn,jdbcType=VARCHAR},
</if>
<if test="introduction != null">
introduction = #{introduction,jdbcType=VARCHAR},
</if>
<if test="language != null">
language = #{language,jdbcType=VARCHAR},
</if>
<if test="price != null">
price = #{price,jdbcType=DOUBLE},
</if>
<if test="publishDate != null">
publish_date = #{publishDate,jdbcType=DATE},
</if>
<if test="typeId != null">
type_id = #{typeId,jdbcType=INTEGER},
</if>
<if test="status != null">
status = #{status,jdbcType=INTEGER},
</if>
</set>
where id = #{id,jdbcType=INTEGER}
</update>
<update id="updateByPrimaryKey" parameterType="com.yx.po.BookInfo">
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Tue Mar 30 16:30:04 CST 2021.
-->
update book_info
set name = #{name,jdbcType=VARCHAR},
author = #{author,jdbcType=VARCHAR},
publish = #{publish,jdbcType=VARCHAR},
isbn = #{isbn,jdbcType=VARCHAR},
introduction = #{introduction,jdbcType=VARCHAR},
language = #{language,jdbcType=VARCHAR},
price = #{price,jdbcType=DOUBLE},
publish_date = #{publishDate,jdbcType=DATE},
type_id = #{typeId,jdbcType=INTEGER},
status = #{status,jdbcType=INTEGER}
where id = #{id,jdbcType=INTEGER}
</update>
<resultMap id="queryBookAllMap" type="com.yx.po.BookInfo" extends="BaseResultMap">
<association property="typeInfo" javaType="com.yx.po.TypeInfo">
<id column="id" property="id"></id>
<result column="type_name" property="name"></result>
</association>
</resultMap>
<select id="queryBookInfoAll" parameterType="com.yx.po.BookInfo" resultMap="queryBookAllMap">
select book_info.*,type_info.name as type_name
from book_info,type_info
where type_info.id = book_info.type_id
<if test="name!=null">
and book_info.name like '%${name}%'
</if>
<if test="isbn!=null">
and book_info.isbn like '%${isbn}%'
</if>
<if test="typeId!=null">
and book_info.type_id like '%${typeId}%'
</if>
</select>
<!--根据图书类型获取图书对应数量信息-->
<select id="getBookCountByType" resultType="com.yx.po.BookInfo">
SELECT
count( book.id ) AS counts,
type.NAME
FROM
book_info book
LEFT JOIN type_info type ON type.id = book.type_id
GROUP BY
book.type_id
</select>
</mapper>

@ -0,0 +1,250 @@
<?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.yx.dao.LendListMapper">
<resultMap id="BaseResultMap" type="com.yx.po.LendList">
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Tue Mar 30 16:30:04 CST 2021.
-->
<id column="id" jdbcType="INTEGER" property="id" />
<result column="bookId" jdbcType="INTEGER" property="bookId" />
<result column="readerId" jdbcType="INTEGER" property="readerId" />
<result column="lendDate" jdbcType="TIMESTAMP" property="lendDate" />
<result column="backDate" jdbcType="TIMESTAMP" property="backDate" />
<result column="backType" jdbcType="INTEGER" property="backType" />
<result column="exceptRemarks" jdbcType="VARCHAR" property="exceptRemarks" />
</resultMap>
<sql id="Base_Column_List">
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Tue Mar 30 16:30:04 CST 2021.
-->
id, bookId, readerId, lendDate, backDate, backType, exceptRemarks
</sql>
<select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Tue Mar 30 16:30:04 CST 2021.
-->
select
<include refid="Base_Column_List" />
from lend_list
where id = #{id,jdbcType=INTEGER}
</select>
<delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Tue Mar 30 16:30:04 CST 2021.
-->
delete from lend_list
where id = #{id,jdbcType=INTEGER}
</delete>
<insert id="insert" parameterType="com.yx.po.LendList">
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Tue Mar 30 16:30:04 CST 2021.
-->
insert into lend_list (id, bookId, readerId,
lendDate, backDate, backType,
exceptRemarks)
values (#{id,jdbcType=INTEGER}, #{bookId,jdbcType=INTEGER}, #{readerId,jdbcType=INTEGER},
#{lendDate,jdbcType=TIMESTAMP}, #{backDate,jdbcType=TIMESTAMP}, #{backType,jdbcType=INTEGER},
#{exceptRemarks,jdbcType=VARCHAR})
</insert>
<insert id="insertSelective" parameterType="com.yx.po.LendList">
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Tue Mar 30 16:30:04 CST 2021.
-->
insert into lend_list
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null">
id,
</if>
<if test="bookId != null">
bookId,
</if>
<if test="readerId != null">
readerId,
</if>
<if test="lendDate != null">
lendDate,
</if>
<if test="backDate != null">
backDate,
</if>
<if test="backType != null">
backType,
</if>
<if test="exceptRemarks != null">
exceptRemarks,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null">
#{id,jdbcType=INTEGER},
</if>
<if test="bookId != null">
#{bookId,jdbcType=INTEGER},
</if>
<if test="readerId != null">
#{readerId,jdbcType=INTEGER},
</if>
<if test="lendDate != null">
#{lendDate,jdbcType=TIMESTAMP},
</if>
<if test="backDate != null">
#{backDate,jdbcType=TIMESTAMP},
</if>
<if test="backType != null">
#{backType,jdbcType=INTEGER},
</if>
<if test="exceptRemarks != null">
#{exceptRemarks,jdbcType=VARCHAR},
</if>
</trim>
</insert>
<update id="updateByPrimaryKeySelective" parameterType="com.yx.po.LendList">
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Tue Mar 30 16:30:04 CST 2021.
-->
update lend_list
<set>
<if test="bookId != null">
bookId = #{bookId,jdbcType=INTEGER},
</if>
<if test="readerId != null">
readerId = #{readerId,jdbcType=INTEGER},
</if>
<if test="lendDate != null">
lendDate = #{lendDate,jdbcType=TIMESTAMP},
</if>
<if test="backDate != null">
backDate = #{backDate,jdbcType=TIMESTAMP},
</if>
<if test="backType != null">
backType = #{backType,jdbcType=INTEGER},
</if>
<if test="exceptRemarks != null">
exceptRemarks = #{exceptRemarks,jdbcType=VARCHAR},
</if>
</set>
where id = #{id,jdbcType=INTEGER}
</update>
<update id="updateByPrimaryKey" parameterType="com.yx.po.LendList">
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Tue Mar 30 16:30:04 CST 2021.
-->
update lend_list
set bookId = #{bookId,jdbcType=INTEGER},
readerId = #{readerId,jdbcType=INTEGER},
lendDate = #{lendDate,jdbcType=TIMESTAMP},
backDate = #{backDate,jdbcType=TIMESTAMP},
backType = #{backType,jdbcType=INTEGER},
exceptRemarks = #{exceptRemarks,jdbcType=VARCHAR}
where id = #{id,jdbcType=INTEGER}
</update>
<!--高级查询映射文件-->
<resultMap id="queryLendListAllMap" type="com.yx.po.LendList" extends="BaseResultMap">
<!--图书信息,需要得到图书名-->
<association property="bookInfo" javaType="com.yx.po.BookInfo">
<id property="id" column="id"></id>
<result property="name" column="bookName"></result>
</association>
<!--读者信息,需要得到读者卡号和真实姓名-->
<association property="readerInfo" javaType="com.yx.po.ReaderInfo">
<id property="id" column="id"></id>
<result property="realName" column="realName"></result>
<result property="readerNumber" column="readerNumber"></result>
</association>
</resultMap>
<!--查询所有记录-->
<select id="queryLendListAll" parameterType="com.yx.po.LendList" resultMap="queryLendListAllMap">
SELECT lend.*,
book.name as bookName,
reader.realName as realName,
reader.readerNumber
from lend_list lend LEFT JOIN book_info book on book.id=lend.bookId
LEFT JOIN reader_info reader on reader.id=lend.readerId
<!--带条件的高级查询-->
<where>
<if test="bookInfo!=null">
<!--根据图书名称查询-->
<if test="bookInfo.name!=null and bookInfo.name!=''">
and book.name like '%${bookInfo.name}%'
</if>
<!--还需判断返还时间是否为空
如果书已经被借走状态为1还没有还则返回时间=null
如果书已经归还状态为0则返回时间非空即还书时间
-->
<if test="bookInfo.status!=null and bookInfo.status==1">
and book.status=1 and backDate is null
</if>
<if test="bookInfo.status!=null and bookInfo.status==0">
and book.status=0 and backDate is not null
</if>
</if>
<!--根据借阅卡查询-->
<if test="readerInfo!=null">
<if test="readerInfo.readerNumber!=null and readerInfo.readerNumber!=''">
and readerNumber like '%${readerInfo.readerNumber}%'
</if>
</if>
<!--根据归还类型查询-->
<if test="backType!=null">
and backType=#{backType}
</if>
</where>
order by lend.lendDate desc
</select>
<!--还书-->
<update id="updateLendListSubmit" parameterType="com.yx.po.LendList">
update lend_list
<set>
backDate=#{backDate},
<if test="backType!=null">
backType=#{backType},
</if>
<if test="exceptRemarks!=null and exceptRemarks!=''">
exceptRemarks=#{exceptRemarks}
</if>
</set>
where id=#{id}
</update>
<!--查询时间线-->
<select id="queryLookBookList" resultMap="queryLendListAllMap">
SELECT
lend.*,
reader.readerNumber,
bookInfo.name AS bookName,
reader.realName AS realName
FROM
lend_list lend
LEFT JOIN reader_info reader ON reader.id = lend.readerId
LEFT JOIN book_info bookInfo ON bookInfo.id = lend.bookId
<where>
<if test="bid!=null">and bookInfo.id=#{bid} </if>
<if test="rid!=null">and reader.id=#{rid} </if>
</where>
order by lend.id desc
</select>
</mapper>

@ -0,0 +1,144 @@
<?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.yx.dao.NoticeMapper">
<resultMap id="BaseResultMap" type="com.yx.po.Notice">
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Tue Mar 30 16:30:04 CST 2021.
-->
<id column="id" jdbcType="INTEGER" property="id" />
<result column="topic" jdbcType="VARCHAR" property="topic" />
<result column="content" jdbcType="VARCHAR" property="content" />
<result column="author" jdbcType="VARCHAR" property="author" />
<result column="createDate" jdbcType="TIMESTAMP" property="createDate" />
</resultMap>
<sql id="Base_Column_List">
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Tue Mar 30 16:30:04 CST 2021.
-->
id, topic, content, author, createDate
</sql>
<select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Tue Mar 30 16:30:04 CST 2021.
-->
select
<include refid="Base_Column_List" />
from notice
where id = #{id,jdbcType=INTEGER}
</select>
<delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Tue Mar 30 16:30:04 CST 2021.
-->
delete from notice
where id = #{id,jdbcType=INTEGER}
</delete>
<insert id="insert" parameterType="com.yx.po.Notice">
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Tue Mar 30 16:30:04 CST 2021.
-->
insert into notice (id, topic, content,
author, createDate)
values (#{id,jdbcType=INTEGER}, #{topic,jdbcType=VARCHAR}, #{content,jdbcType=VARCHAR},
#{author,jdbcType=VARCHAR}, #{createDate,jdbcType=TIMESTAMP})
</insert>
<insert id="insertSelective" parameterType="com.yx.po.Notice">
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Tue Mar 30 16:30:04 CST 2021.
-->
insert into notice
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null">
id,
</if>
<if test="topic != null">
topic,
</if>
<if test="content != null">
content,
</if>
<if test="author != null">
author,
</if>
<if test="createDate != null">
createDate,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null">
#{id,jdbcType=INTEGER},
</if>
<if test="topic != null">
#{topic,jdbcType=VARCHAR},
</if>
<if test="content != null">
#{content,jdbcType=VARCHAR},
</if>
<if test="author != null">
#{author,jdbcType=VARCHAR},
</if>
<if test="createDate != null">
#{createDate,jdbcType=TIMESTAMP},
</if>
</trim>
</insert>
<update id="updateByPrimaryKeySelective" parameterType="com.yx.po.Notice">
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Tue Mar 30 16:30:04 CST 2021.
-->
update notice
<set>
<if test="topic != null">
topic = #{topic,jdbcType=VARCHAR},
</if>
<if test="content != null">
content = #{content,jdbcType=VARCHAR},
</if>
<if test="author != null">
author = #{author,jdbcType=VARCHAR},
</if>
<if test="createDate != null">
createDate = #{createDate,jdbcType=TIMESTAMP},
</if>
</set>
where id = #{id,jdbcType=INTEGER}
</update>
<update id="updateByPrimaryKey" parameterType="com.yx.po.Notice">
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Tue Mar 30 16:30:04 CST 2021.
-->
update notice
set topic = #{topic,jdbcType=VARCHAR},
content = #{content,jdbcType=VARCHAR},
author = #{author,jdbcType=VARCHAR},
createDate = #{createDate,jdbcType=TIMESTAMP}
where id = #{id,jdbcType=INTEGER}
</update>
<select id="queryNoticeAll" parameterType="com.yx.po.Notice" resultType="com.yx.po.Notice">
select * from notice
<where>
<if test="topic!=null and topic!=''">
and topic like '%${topic}%'
</if>
</where>
order by createDate desc
</select>
</mapper>

@ -0,0 +1,227 @@
<?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.yx.dao.ReaderInfoMapper">
<resultMap id="BaseResultMap" type="com.yx.po.ReaderInfo">
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Tue Mar 30 16:30:04 CST 2021.
-->
<id column="id" jdbcType="INTEGER" property="id" />
<result column="username" jdbcType="VARCHAR" property="username" />
<result column="password" jdbcType="VARCHAR" property="password" />
<result column="realName" jdbcType="VARCHAR" property="realName" />
<result column="sex" jdbcType="VARCHAR" property="sex" />
<result column="birthday" jdbcType="DATE" property="birthday" />
<result column="address" jdbcType="VARCHAR" property="address" />
<result column="tel" jdbcType="VARCHAR" property="tel" />
<result column="email" jdbcType="VARCHAR" property="email" />
<result column="registerDate" jdbcType="TIMESTAMP" property="registerDate" />
<result column="readerNumber" jdbcType="VARCHAR" property="readerNumber" />
</resultMap>
<sql id="Base_Column_List">
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Tue Mar 30 16:30:04 CST 2021.
-->
id, username, password, realName, sex, birthday, address, tel, email, registerDate,
readerNumber
</sql>
<select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Tue Mar 30 16:30:04 CST 2021.
-->
select
<include refid="Base_Column_List" />
from reader_info
where id = #{id,jdbcType=INTEGER}
</select>
<delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Tue Mar 30 16:30:04 CST 2021.
-->
delete from reader_info
where id = #{id,jdbcType=INTEGER}
</delete>
<insert id="insert" parameterType="com.yx.po.ReaderInfo">
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Tue Mar 30 16:30:04 CST 2021.
-->
insert into reader_info (id, username, password, realName, sex,
birthday, address, tel,
email, registerDate, readerNumber
)
values (#{id,jdbcType=INTEGER}, #{username,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR},
#{realName,jdbcType=VARCHAR}, #{sex,jdbcType=VARCHAR},
#{birthday,jdbcType=DATE}, #{address,jdbcType=VARCHAR}, #{tel,jdbcType=VARCHAR},
#{email,jdbcType=VARCHAR}, #{registerDate,jdbcType=TIMESTAMP}, #{readerNumber,jdbcType=VARCHAR}
)
</insert>
<insert id="insertSelective" parameterType="com.yx.po.ReaderInfo">
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Tue Mar 30 16:30:04 CST 2021.
-->
insert into reader_info
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null">
id,
</if>
<if test="username != null">
username,
</if>
<if test="password != null">
password,
</if>
<if test="realName != null">
realName,
</if>
<if test="sex != null">
sex,
</if>
<if test="birthday != null">
birthday,
</if>
<if test="address != null">
address,
</if>
<if test="tel != null">
tel,
</if>
<if test="email != null">
email,
</if>
<if test="registerDate != null">
registerDate,
</if>
<if test="readerNumber != null">
readerNumber,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null">
#{id,jdbcType=INTEGER},
</if>
<if test="username != null">
#{username,jdbcType=VARCHAR},
</if>
<if test="password != null">
#{password,jdbcType=VARCHAR},
</if>
<if test="realName != null">
#{realName,jdbcType=VARCHAR},
</if>
<if test="sex != null">
#{sex,jdbcType=VARCHAR},
</if>
<if test="birthday != null">
#{birthday,jdbcType=DATE},
</if>
<if test="address != null">
#{address,jdbcType=VARCHAR},
</if>
<if test="tel != null">
#{tel,jdbcType=VARCHAR},
</if>
<if test="email != null">
#{email,jdbcType=VARCHAR},
</if>
<if test="registerDate != null">
#{registerDate,jdbcType=TIMESTAMP},
</if>
<if test="readerNumber != null">
#{readerNumber,jdbcType=VARCHAR},
</if>
</trim>
</insert>
<update id="updateByPrimaryKeySelective" parameterType="com.yx.po.ReaderInfo">
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Tue Mar 30 16:30:04 CST 2021.
-->
update reader_info
<set>
<if test="username != null">
username = #{username,jdbcType=VARCHAR},
</if>
<if test="password != null">
password = #{password,jdbcType=VARCHAR},
</if>
<if test="realName != null">
realName = #{realName,jdbcType=VARCHAR},
</if>
<if test="sex != null">
sex = #{sex,jdbcType=VARCHAR},
</if>
<if test="birthday != null">
birthday = #{birthday,jdbcType=DATE},
</if>
<if test="address != null">
address = #{address,jdbcType=VARCHAR},
</if>
<if test="tel != null">
tel = #{tel,jdbcType=VARCHAR},
</if>
<if test="email != null">
email = #{email,jdbcType=VARCHAR},
</if>
<if test="registerDate != null">
registerDate = #{registerDate,jdbcType=TIMESTAMP},
</if>
<if test="readerNumber != null">
readerNumber = #{readerNumber,jdbcType=VARCHAR},
</if>
</set>
where id = #{id,jdbcType=INTEGER}
</update>
<update id="updateByPrimaryKey" parameterType="com.yx.po.ReaderInfo">
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Tue Mar 30 16:30:04 CST 2021.
-->
update reader_info
set username = #{username,jdbcType=VARCHAR},
password = #{password,jdbcType=VARCHAR},
realName = #{realName,jdbcType=VARCHAR},
sex = #{sex,jdbcType=VARCHAR},
birthday = #{birthday,jdbcType=DATE},
address = #{address,jdbcType=VARCHAR},
tel = #{tel,jdbcType=VARCHAR},
email = #{email,jdbcType=VARCHAR},
registerDate = #{registerDate,jdbcType=TIMESTAMP},
readerNumber = #{readerNumber,jdbcType=VARCHAR}
where id = #{id,jdbcType=INTEGER}
</update>
<select id="queryAllReaderInfo" resultType="com.yx.po.ReaderInfo" parameterType="com.yx.po.ReaderInfo">
select * from reader_info
<where>
<!--读者图书卡号-->
<if test="readerNumber!=null">
and readerNumber like '%${readerNumber}%'
</if>
<!--用户名-->
<if test="username!=null">
and username like '%${username}%'
</if>
<!--电话号-->
<if test="tel!=null">
and tel like '%${tel}%'
</if>
</where>
</select>
<select id="queryUserInfoByNameAndPassword" resultType="com.yx.po.ReaderInfo">
select * from reader_info where username=#{username} and password=#{password}
</select>
</mapper>

@ -0,0 +1,40 @@
<?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.yx.dao.TypeInfoMapper" >
<!--查询全部类型信息-->
<select id="queryTypeInfoAll" resultType="com.yx.po.TypeInfo">
select * from type_info
<where>
<if test="name!=null">
and name like '%${name}%'
</if>
</where>
</select>
<!--类型的添加-->
<insert id="addTypeSubmit">
insert into type_info (name,remarks)values(#{name},#{remarks})
</insert>
<!--根据id查询类型信息-->
<select id="queryTypeInfoById" resultType="com.yx.po.TypeInfo">
select * from type_info where id=#{id}
</select>
<!--修改图书类型-->
<update id="updateTypeSubmit">
update type_info set name=#{name},remarks=#{remarks} where id=#{id}
</update>
<!--删除类型-->
<delete id="deleteTypeByIds" parameterType="List">
delete from type_info where id in
<foreach collection="list" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</delete>
<select id="queryTypeName" resultType="com.yx.po.TypeInfo">
select type.name
from type_info type
</select>
</mapper>

@ -0,0 +1,4 @@
jdbc.driver = com.mysql.jdbc.Driver
jdbc.url = jdbc:mysql://localhost:3306/library?useUnicode=true&characterEncoding=utf-8
jdbc.username = root
jdbc.password = wq123456

@ -0,0 +1,62 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<classPathEntry location="D:\Maven\apache-maven-3.6.0\mvn\repository\mysql\mysql-connector-java\5.1.6\mysql-connector-java-5.1.6.jar" />
<context id="msqlTables" targetRuntime="MyBatis3">
<plugin type="org.mybatis.generator.plugins.SerializablePlugin"></plugin>
<jdbcConnection connectionURL="jdbc:mysql://localhost:3306/library?useUnicode=true&amp;characterEncoding=utf-8"
driverClass="com.mysql.jdbc.Driver" password="root" userId="root" >
<property name="nullCatalogMeansCurrent" value="true"/>
</jdbcConnection>
<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- 生成实体类和数据库表一一对应 -->
<javaModelGenerator targetPackage="com.yx.po" targetProject="D:\IDEAProject\libraryProject\src\main\java">
<property name="enableSubPackages" value="true"/>
<!-- 从数据库返回的值被清理前后的空格 -->
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!--映射xml文件及dao接口-->
<sqlMapGenerator targetPackage="com.yx.dao" targetProject="D:\IDEAProject\libraryProject\src\main\resources">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<javaClientGenerator type="XMLMAPPER" targetPackage="com.yx.dao" targetProject="D:\IDEAProject\libraryProject\src\main\java">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
<!--数据库表-->
<table tableName="admin" domainObjectName="Admin"
enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false"
enableSelectByExample="false" selectByExampleQueryId="false" >
<property name="useActualColumnNames" value="false"/>
</table>
<table tableName="book_info" domainObjectName="BookInfo"
enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false"
enableSelectByExample="false" selectByExampleQueryId="false" >
<property name="useActualColumnNames" value="false"/>
</table>
<table tableName="lend_list" domainObjectName="LendList"
enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false"
enableSelectByExample="false" selectByExampleQueryId="false" >
<property name="useActualColumnNames" value="false"/>
</table>
<table tableName="notice" domainObjectName="Notice"
enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false"
enableSelectByExample="false" selectByExampleQueryId="false" >
<property name="useActualColumnNames" value="false"/>
</table>
<table tableName="reader_info" domainObjectName="ReaderInfo"
enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false"
enableSelectByExample="false" selectByExampleQueryId="false" >
<property name="useActualColumnNames" value="false"/>
</table>
<table tableName="type_info" domainObjectName="TypeInfo"
enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false"
enableSelectByExample="false" selectByExampleQueryId="false" >
<property name="useActualColumnNames" value="false"/>
</table>
</context>
</generatorConfiguration>

@ -0,0 +1,61 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!--Spring接管MyBatis内容-->
<!--DataSource Druid连接池-->
<context:property-placeholder location="classpath:db.properties"/>
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
<!--基本配置-->
<property name="driverClassName" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<!--SqlSessionFactory 要DataSource支持-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!--注入连接池-->
<property name="dataSource" ref="dataSource"/>
<!--使得实体类中用类名作为别名-->
<property name="typeAliasesPackage" value="com.yx.po"></property>
<!--分页-->
<property name="plugins">
<array>
<bean class="com.github.pagehelper.PageInterceptor">
<property name="properties">
<props>
<!--页号在合理值 0 - max-->
<prop key="reasonable">true</prop>
</props>
</property>
</bean>
</array>
</property>
</bean>
<!--Dao 需要 MapperScannerConfigurer支持-->
<bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.yx.dao"/>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>
<!--告知spring注解位置保证注解有效性下面注解扫描表示Controller不扫给service和dao扫描-->
<context:component-scan base-package="com.yx">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"></context:exclude-filter>
</context:component-scan>
<!--引入一个事务管理器-->
<bean id="tx" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!--@Transactional 告诉spring定制事务是基于DataSourceTransactionManager-->
<tx:annotation-driven transaction-manager="tx"></tx:annotation-driven>
</beans>

@ -0,0 +1,56 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!--开启注解扫描只扫描Controller注解-->
<context:component-scan base-package="com.yx.controller"></context:component-scan>
<!--注册注解驱动开启SpringMVC注解的支持-->
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
<!--声明类型转换若返回的是json就需要加这个进行转换-->
<property name="supportedMediaTypes">
<list>
<value>application/json</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
<!--配置的视图解析器对象-->
<bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/"/>
<property name="suffix" value=".jsp"/>
</bean>
<!--配置拦截器-->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<mvc:exclude-mapping path="/login"/>
<mvc:exclude-mapping path="/loginIn"/>
<mvc:exclude-mapping path="/verifyCode"/>
<bean class="com.yx.interceptor.LoginInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
<!--过滤静态资源-->
<mvc:default-servlet-handler></mvc:default-servlet-handler>
<mvc:resources mapping="/images/**" location="/images/"></mvc:resources>
<mvc:resources mapping="/css/**" location="/css/"></mvc:resources>
<mvc:resources mapping="/js/**" location="/js/"></mvc:resources>
<mvc:resources mapping="/lib/**" location="/lib/"></mvc:resources>
<mvc:resources mapping="/api/**" location="/api/"></mvc:resources>
</beans>

@ -0,0 +1,86 @@
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<html>
<head>
<meta charset="utf-8">
<title>管理员添加</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link rel="stylesheet" href="${pageContext.request.contextPath}/lib/layui-v2.5.5/css/layui.css" media="all">
<link rel="stylesheet" href="${pageContext.request.contextPath}/css/public.css" media="all">
<style>
body {
background-color: #ffffff;
}
</style>
</head>
<body>
<div class="layui-form layuimini-form">
<div class="layui-form-item">
<label class="layui-form-label required">用户名</label>
<div class="layui-input-block">
<input type="text" name="username" lay-verify="required" lay-reqtext="用户名不能为空" autocomplete="off" placeholder="请输入用户名" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label required">密码</label>
<div class="layui-input-block">
<input type="password" name="password" lay-verify="required" lay-reqtext="密码不能为空" placeholder="请输入密码" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label required">管理员类型</label>
<div class="layui-input-block">
<select class="layui-input" name="adminType" id="adminType">
<option value=""></option>
<option value="0">普通管理员</option>
<option value="1">高级管理员</option>
</select>
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn layui-btn-normal" lay-submit lay-filter="saveBtn">确认保存</button>
</div>
</div>
</div>
<script src="${pageContext.request.contextPath}/lib/layui-v2.5.5/layui.js" charset="utf-8"></script>
<script>
layui.use(['form'], function () {
var form = layui.form,
layer = layui.layer,
$ = layui.$;
//监听提交
form.on('submit(saveBtn)', function (data) {
var datas=data.field;//form单中的数据信息
//向后台发送数据提交添加
$.ajax({
url:"addAdminSubmit",
type:"POST",
data:datas,
success:function(result){
if(result.code==0){//如果成功
layer.msg('添加成功',{
icon:6,
time:500
},function(){
parent.window.location.reload();
var iframeIndex = parent.layer.getFrameIndex(window.name);
parent.layer.close(iframeIndex);
})
}else{
layer.msg("类型添加失败");
}
}
})
return false;
});
});
</script>
</body>
</html>

@ -0,0 +1,230 @@
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>管理员管理</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link rel="stylesheet" href="${pageContext.request.contextPath}/lib/layui-v2.5.5/css/layui.css" media="all">
<link rel="stylesheet" href="${pageContext.request.contextPath}/css/public.css" media="all">
<script src="${pageContext.request.contextPath}/lib/layui-v2.5.5/layui.js" charset="utf-8"></script>
</head>
<body>
<div class="layuimini-container">
<div class="layuimini-main">
<div class="demoTable">
<div class="layui-form-item layui-form">
用户名:
<div class="layui-inline">
<input class="layui-input" name="username" id="username" autocomplete="off">
</div>
管理员类型:
<div class="layui-inline">
<select id="adminType" name="adminType" class="layui-input">
<option value="">请选择</option>
<option value="0">普通管理员</option>
<option value="1">高级管理员</option>
</select>
</div>
<button class="layui-btn" data-type="reload">搜索</button>
</div>
</div>
<script type="text/html" id="toolbarDemo">
<div class="layui-btn-container">
<button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn" lay-event="add"> 添加 </button>
<button class="layui-btn layui-btn-sm layui-btn-danger data-delete-btn" lay-event="delete"> 删除 </button>
</div>
</script>
<!--表单,查询出的数据在这里显示-->
<table class="layui-hide" id="currentTableId" lay-filter="currentTableFilter"></table>
<script type="text/html" id="currentTableBar">
<a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="edit">修改密码</a>
<a class="layui-btn layui-btn-xs layui-btn-danger data-count-delete" lay-event="delete">删除</a>
</script>
</div>
</div>
<script>
layui.use(['form', 'table'], function () {
var $ = layui.jquery,
form = layui.form,
table = layui.table;
table.render({
elem: '#currentTableId',
url: '${pageContext.request.contextPath}/adminAll',//查询全部数据
toolbar: '#toolbarDemo',
defaultToolbar: ['filter', 'exports', 'print', {
title: '提示',
layEvent: 'LAYTABLE_TIPS',
icon: 'layui-icon-tips'
}],
cols: [[
{type: "checkbox", width: 50},
//{field: 'id', width: 100, title: 'ID', sort: true},
{field: 'username', width: 150, title: '用户名'},
{field: 'adminType', width: 200, title: '管理员类型',templet:function (res) {
if (res.adminType == '0'){
return '<span class="layui-btn layui-btn-normal layui-btn-xs">普通管理员</span>';
}else{
return '<span class="layui-btn layui-btn-normal layui-btn-xs" style="background-color: orangered;">高级管理员</span>';
}
}},
{title: '操作', minWidth: 150, toolbar: '#currentTableBar', align: "center"}
]],
limits: [10, 15, 20, 25, 50, 100],
limit: 15, <!--默认显示15条-->
page: true,
skin: 'line',
id:'testReload'
});
var $ = layui.$, active = {
reload: function(){
var username = $('#username').val();
var adminType = $('#adminType').val();
console.log(name)
//执行重载
table.reload('testReload', {
page: {
curr: 1 //重新从第 1 页开始
}
,where: {
username: username,
adminType:adminType
}
}, 'data');
}
};
$('.demoTable .layui-btn').on('click', function(){
var type = $(this).data('type');
active[type] ? active[type].call(this) : '';
});
/**
* tool操作栏监听事件
*/
table.on('tool(currentTableFilter)', function (obj) {
var data=obj.data;
if (obj.event === 'edit') { // 监听修改操作
var index = layer.open({
title: '修改管理员信息',
type: 2,
shade: 0.2,
maxmin:true,
shadeClose: true,
area: ['60%', '60%'],
content: '${pageContext.request.contextPath}/queryAdminById?id='+data.id,
});
$(window).on("resize", function () {
layer.full(index);
});
} else if (obj.event === 'delete') { // 监听删除操作
layer.confirm('确定是否删除', function (index) {
//调用删除功能
deleteInfoByIds(data.id,index);
layer.close(index);
});
}
});
//监听表格复选框选择
table.on('checkbox(currentTableFilter)', function (obj) {
console.log(obj)
});
/**
* 获取选中记录的id信息
*/
function getCheackId(data){
var arr=new Array();
for(var i=0;i<data.length;i++){
arr.push(data[i].id);
}
//拼接id,变成一个字符串
return arr.join(",");
};
/**
* 提交删除功能
*/
function deleteInfoByIds(ids ,index){
//向后台发送请求
$.ajax({
url: "deleteAdminByIds",
type: "POST",
data: {ids: ids},
success: function (result) {
if (result.code == 0) {//如果成功
layer.msg('删除成功', {
icon: 6,
time: 500
}, function () {
parent.window.location.reload();
var iframeIndex = parent.layer.getFrameIndex(window.name);
parent.layer.close(iframeIndex);
});
} else {
layer.msg("删除失败");
}
}
})
};
/**
* toolbar栏监听事件
*/
table.on('toolbar(currentTableFilter)', function (obj) {
if (obj.event === 'add') { // 监听添加操作
var index = layer.open({
title: '添加管理员',
type: 2,
shade: 0.2,
maxmin:true,
shadeClose: true,
area: ['60%', '60%'],
content: '${pageContext.request.contextPath}/adminAdd',
});
$(window).on("resize", function () {
layer.full(index);
});
} else if (obj.event === 'delete') {
/*
1、提示内容必须删除大于0条
2、获取要删除记录的id信息
3、提交删除功能 ajax
*/
//获取选中的记录信息
var checkStatus=table.checkStatus(obj.config.id);
var data=checkStatus.data;
if(data.length==0){//如果没有选中信息
layer.msg("请选择要删除的记录信息");
}else{
//获取记录信息的id集合,拼接的ids
var ids=getCheackId(data);
layer.confirm('确定是否删除', function (index) {
//调用删除功能
deleteInfoByIds(ids,index);
layer.close(index);
});
}
}
});
});
</script>
</body>
</html>

@ -0,0 +1,92 @@
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<html>
<head>
<meta charset="utf-8">
<title>修改密码</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link rel="stylesheet" href="${pageContext.request.contextPath}/lib/layui-v2.5.5/css/layui.css" media="all">
<link rel="stylesheet" href="${pageContext.request.contextPath}/css/public.css" media="all">
<style>
body {
background-color: #ffffff;
}
</style>
</head>
<body>
<div class="layui-form layuimini-form">
<input type="hidden" name="id" value="${id}">
<div class="layui-form-item">
<label class="layui-form-label required">旧密码</label>
<div class="layui-input-block">
<input type="password" name="oldPwd" lay-verify="required" lay-reqtext="旧密码不能为空" class="layui-input">
</div>
</div>
<div class="layui-form-item layui-form-text">
<label class="layui-form-label required">新密码</label>
<div class="layui-input-block">
<input type="password" name="newPwd" lay-verify="required" lay-reqtext="新密码不能为空" class="layui-input">
</div>
</div>
<div class="layui-form-item layui-form-text">
<label class="layui-form-label required">确认新密码</label>
<div class="layui-input-block">
<input type="password" name="newPwdAgain" lay-verify="required" lay-reqtext="新密码不能为空" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn layui-btn-normal" lay-submit lay-filter="saveBtn">确认修改</button>
</div>
</div>
</div>
<script src="${pageContext.request.contextPath}/lib/layui-v2.5.5/layui.js" charset="utf-8"></script>
<script>
layui.use(['form'], function () {
var form = layui.form,
layer = layui.layer,
$ = layui.$;
//监听提交
form.on('submit(saveBtn)', function (data) {
var datas=data.field;//form单中的数据信息
if (datas.newPwd != datas.newPwdAgain){
layer.msg("两次输入的新密码不一致,请重新输入")
}else{
//向后台发送数据提交添加
$.ajax({
url:"updatePwdSubmit",
type:"POST",
data: {
id:datas.id,
oldPwd:datas.oldPwd,
newPwd:datas.newPwd
},
success:function(result){
if(result.code==0){//如果成功
layer.msg("修改成功",{
icon:6,
time:500
},function(){
parent.window.location.reload();
var iframeIndex = parent.layer.getFrameIndex(window.name);
parent.layer.close(iframeIndex);
})
}else{
layer.msg(result.msg);
}
}
})
}
return false;
});
});
</script>
</body>
</html>

@ -0,0 +1,150 @@
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<html>
<head>
<meta charset="utf-8">
<title>添加图书</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link rel="stylesheet" href="${pageContext.request.contextPath}/lib/layui-v2.5.5/css/layui.css" media="all">
<link rel="stylesheet" href="${pageContext.request.contextPath}/css/public.css" media="all">
<style>
body {
background-color: #ffffff;
}
</style>
</head>
<body>
<div class="layui-form layuimini-form">
<div class="layui-form-item">
<label class="layui-form-label required">图书名称</label>
<div class="layui-input-block">
<input type="text" name="name" lay-verify="required" lay-reqtext="图书名称不能为空" placeholder="请输入图书名称" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label required">图书编号</label>
<div class="layui-input-block">
<input type="text" name="isbn" lay-verify="required" lay-reqtext="图书编号不能为空" placeholder="请输入图书编号" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label required">图书类别</label>
<div class="layui-input-block">
<select name="typeId" id="typeId" lay-verify="required">
<option value="">请选择</option>
</select>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label required">图书作者</label>
<div class="layui-input-block">
<input type="text" name="author" lay-verify="required" class="layui-input" autocomplete="off">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label required">图书出版社</label>
<div class="layui-input-block">
<input type="text" name="publish" lay-verify="required" class="layui-input" autocomplete="off">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label required">图书语言</label>
<div class="layui-input-block">
<input type="text" name="language" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label required">图书价格</label>
<div class="layui-input-block">
<input type="number" name="price" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">出版日期</label>
<div class="layui-input-block">
<input type="text" name="pubDate" id="date" lay-verify="date" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item layui-form-text">
<label class="layui-form-label">图书介绍</label>
<div class="layui-input-block">
<textarea name="introduction" class="layui-textarea" placeholder="请输入介绍信息"></textarea>
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn layui-btn-normal" lay-submit lay-filter="saveBtn">确认保存</button>
</div>
</div>
</div>
<script src="${pageContext.request.contextPath}/lib/layui-v2.5.5/layui.js" charset="utf-8"></script>
<script>
layui.use(['form','laydate'], function () {
var form = layui.form,
layer = layui.layer,
laydate=layui.laydate,
$ = layui.$;
//日期
laydate.render({
elem: '#date',
trigger:'click'
});
//动态获取图书类型的数据
$.get("findAllList",{},function (data) {
var list=data;
var select=document.getElementById("typeId");
if(list!=null|| list.size()>0){
for(var c in list){
var option=document.createElement("option");
option.setAttribute("value",list[c].id);
option.innerText=list[c].name;
select.appendChild(option);
}
}
form.render('select');
},"json")
//监听提交
form.on('submit(saveBtn)', function (data) {
var datas=data.field;//form单中的数据信息
//向后台发送数据提交添加
$.ajax({
url:"addBookSubmit",
type:"POST",
data:datas,
success:function(result){
if(result.code==0){//如果成功
layer.msg('添加成功',{
icon:6,
time:500
},function(){
parent.window.location.reload();
var iframeIndex = parent.layer.getFrameIndex(window.name);
parent.layer.close(iframeIndex);
})
}else{
layer.msg("添加失败");
}
}
})
return false;
});
});
</script>
</body>
</html>

@ -0,0 +1,251 @@
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<%--<%
String path=request.getContextPath();
String basePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>--%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>图书管理</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link rel="stylesheet" href="${pageContext.request.contextPath}/lib/layui-v2.5.5/css/layui.css" media="all">
<link rel="stylesheet" href="${pageContext.request.contextPath}/css/public.css" media="all">
<script src="${pageContext.request.contextPath}/lib/layui-v2.5.5/layui.js" charset="utf-8"></script>
</head>
<body>
<div class="layuimini-container">
<div class="layuimini-main">
<div class="demoTable">
<div class="layui-form-item layui-form ">
图书编号:
<div class="layui-inline">
<input class="layui-input" name="isbn" id="isbn" autocomplete="off">
</div>
书名:
<div class="layui-inline">
<input class="layui-input" name="name" id="name" autocomplete="off">
</div>
图书分类:
<div class="layui-inline">
<select id="typeId" name="typeId" lay-verify="required">
<option value="">请选择</option>
</select>
</div>
<button class="layui-btn" data-type="reload">搜索</button>
</div>
</div>
<script type="text/html" id="toolbarDemo">
<div class="layui-btn-container">
<button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn" lay-event="add"> 添加 </button>
<button class="layui-btn layui-btn-sm layui-btn-danger data-delete-btn" lay-event="delete"> 删除 </button>
</div>
</script>
<!--表单,查询出的数据在这里显示-->
<table class="layui-hide" id="currentTableId" lay-filter="currentTableFilter"></table>
<script type="text/html" id="currentTableBar">
<a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="update">修改</a>
<a class="layui-btn layui-btn-xs layui-btn-danger data-count-delete" lay-event="delete">删除</a>
</script>
</div>
</div>
<script>
layui.use(['form', 'table'], function () {
var $ = layui.jquery,
form = layui.form,
table = layui.table;
//动态获取图书类型的数据,即下拉菜单,跳出图书类型
$.get("findAllList",{},function (data) {
var list=data;
var select=document.getElementById("typeId");
if(list!=null|| list.size()>0){
for(var obj in list){
var option=document.createElement("option");
option.setAttribute("value",list[obj].id);
option.innerText=list[obj].name;
select.appendChild(option);
}
}
form.render('select');
},"json")
table.render({
elem: '#currentTableId',
url: '${pageContext.request.contextPath}/bookAll',//查询类型数据
toolbar: '#toolbarDemo',
defaultToolbar: ['filter', 'exports', 'print', {
title: '提示',
layEvent: 'LAYTABLE_TIPS',
icon: 'layui-icon-tips'
}],
cols: [[
{type: "checkbox", width: 50},
//{field: 'id', width: 100, title: 'ID', sort: true},
{field: 'isbn', width: 100, title: '图书编号'},
{field: 'name', width: 100, title: '图书名称'},
{templet:'<div>{{d.typeInfo.name}}</div>',width:100,title:'图书类型'},
{field: 'author', width: 80, title: '作者'},
{field: 'price', width: 80, title: '价格'},
{field: 'language', width: 80, title: '语言'},
{title: '操作', minWidth: 150, toolbar: '#currentTableBar', align: "center"}
]],
limits: [10, 15, 20, 25, 50, 100],
limit: 15, <!--默认显示15条-->
page: true,
skin: 'line',
id:'testReload'
});
var $ = layui.$, active = {
reload: function(){
var name = $('#name').val();
var isbn = $('#isbn').val();
var typeId = $('#typeId').val();
console.log(name)
//执行重载
table.reload('testReload', {
page: {
curr: 1 //重新从第 1 页开始
}
,where: {
name: name,
isbn:isbn,
typeId:typeId
}
}, 'data');
}
};
$('.demoTable .layui-btn').on('click', function(){
var type = $(this).data('type');
active[type] ? active[type].call(this) : '';
});
/**
* tool操作栏监听事件
*/
table.on('tool(currentTableFilter)', function (obj) {
var data=obj.data;
if (obj.event === 'update') { // 监听修改操作
var index = layer.open({
title: '修改图书信息',
type: 2,
shade: 0.2,
maxmin:true,
shadeClose: true,
area: ['100%', '100%'],
content: '${pageContext.request.contextPath}/queryBookInfoById?id='+data.id,
});
$(window).on("resize", function () {
layer.full(index);
});
} else if (obj.event === 'delete') { // 监听删除操作
layer.confirm('确定是否删除', function (index) {
//调用删除功能
deleteInfoByIds(data.id,index);
layer.close(index);
});
}
});
//监听表格复选框选择
table.on('checkbox(currentTableFilter)', function (obj) {
console.log(obj)
});
/**
* 获取选中记录的id信息
*/
function getCheackId(data){
var arr=new Array();
for(var i=0;i<data.length;i++){
arr.push(data[i].id);
}
//拼接id,变成一个字符串
return arr.join(",");
};
/**
* 提交删除功能
*/
function deleteInfoByIds(ids ,index){
//向后台发送请求
$.ajax({
url: "deleteBook",
type: "POST",
data: {ids: ids},
success: function (result) {
if (result.code == 0) {//如果成功
layer.msg('删除成功', {
icon: 6,
time: 500
}, function () {
parent.window.location.reload();
var iframeIndex = parent.layer.getFrameIndex(window.name);
parent.layer.close(iframeIndex);
});
} else {
layer.msg("删除失败");
}
}
})
};
/**
* toolbar栏监听事件
*/
table.on('toolbar(currentTableFilter)', function (obj) {
if (obj.event === 'add') { // 监听添加操作
var index = layer.open({
title: '添加图书',
type: 2,
shade: 0.2,
maxmin:true,
shadeClose: true,
area: ['100%', '100%'],
content: '${pageContext.request.contextPath}/bookAdd',
});
$(window).on("resize", function () {
layer.full(index);
});
} else if (obj.event === 'delete') {
/*
1、提示内容必须删除大于0条
2、获取要删除记录的id信息
3、提交删除功能 ajax
*/
//获取选中的记录信息
var checkStatus=table.checkStatus(obj.config.id);
var data=checkStatus.data;
if(data.length==0){//如果没有选中信息
layer.msg("请选择要删除的记录信息");
}else{
//获取记录信息的id集合,拼接的ids
var ids=getCheackId(data);
layer.confirm('确定是否删除', function (index) {
//调用删除功能
deleteInfoByIds(ids,index);
layer.close(index);
});
}
}
});
});
</script>
</body>
</html>

@ -0,0 +1,164 @@
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ page isELIgnored="false" %>
<html>
<head>
<meta charset="utf-8">
<title>修改图书</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link rel="stylesheet" href="${pageContext.request.contextPath}/lib/layui-v2.5.5/css/layui.css" media="all">
<link rel="stylesheet" href="${pageContext.request.contextPath}/css/public.css" media="all">
<style>
body {
background-color: #ffffff;
}
</style>
</head>
<body>
<div class="layui-form layuimini-form">
<input type="hidden" name="id" value="${info.id}">
<div class="layui-form-item">
<label class="layui-form-label required">图书名称</label>
<div class="layui-input-block">
<input type="text" name="name" lay-verify="required" value="${info.name}" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label required">图书编号</label>
<div class="layui-input-block">
<input type="text" name="isbn" lay-verify="required"value="${info.isbn}" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label required">图书类别</label>
<div class="layui-input-block">
<select name="typeId" id="typeId" lay-verify="required">
<option value="${info.typeId}">请选择</option>
</select>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label required">图书作者</label>
<div class="layui-input-block">
<input type="text" name="author" lay-verify="required" value="${info.author}" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label required">图书出版社</label>
<div class="layui-input-block">
<input type="text" name="publish" lay-verify="required" value="${info.publish}" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label required">图书语言</label>
<div class="layui-input-block">
<input type="text" name="language" value="${info.language}" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label required">图书价格</label>
<div class="layui-input-block">
<input type="number" name="price" value="${info.price}" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">出版日期</label>
<div class="layui-input-block">
<input type="text" name="publishDate" id="date"
value="<fmt:formatDate value="${info.publishDate}" pattern="yyyy-MM-dd"/>"
lay-verify="date" autocomplete="off" class="layui-input"/>
</div>
</div>
<div class="layui-form-item layui-form-text">
<label class="layui-form-label">图书介绍</label>
<div class="layui-input-block">
<textarea name="introduction" class="layui-textarea" placeholder="请输入介绍信息">${info.introduction}</textarea>
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn layui-btn-normal" lay-submit lay-filter="saveBtn">确认修改</button>
</div>
</div>
</div>
<script src="${pageContext.request.contextPath}/lib/layui-v2.5.5/layui.js" charset="utf-8"></script>
<script>
layui.use(['form','laydate'], function () {
var form = layui.form,
layer = layui.layer,
laydate=layui.laydate,
$ = layui.$;
//日期
laydate.render({
elem: '#date',
trigger:'click'
});
//动态获取图书类型的数据
$.get("findAllList",{},function (data) {
//获取图书类型的值
var typeId=$('#typeId')[0].value;
var list=data;
var select=document.getElementById("typeId");
if(list!=null|| list.size()>0){
for(var c in list){
var option=document.createElement("option");
option.setAttribute("value",list[c].id);
option.innerText=list[c].name;
select.appendChild(option);
//如果类型和循环到的类型iD一致选中
if (list[c].id==typeId){
option.setAttribute("selected","selected");
layui.form.render('select');
}
}
}
form.render('select');
},"json")
//监听提交
form.on('submit(saveBtn)', function (data) {
var datas=data.field;//form单中的数据信息
//向后台发送数据提交添加
$.ajax({
url:"updateBookSubmit",
type:"POST",
// data:datas,
contentType:'application/json',
data:JSON.stringify(datas),
success:function(result){
if(result.code==0){//如果成功
layer.msg('修改成功',{
icon:6,
time:500
},function(){
parent.window.location.reload();
var iframeIndex = parent.layer.getFrameIndex(window.name);
parent.layer.close(iframeIndex);
})
}else{
layer.msg("修改失败");
}
}
})
return false;
});
});
</script>
</body>
</html>

@ -0,0 +1,68 @@
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<title>统计数据</title>
</head>
<body>
<div class="layuimini-container">
<div class="layuimini-min">
<div class="layui-col-md12">
<div class="layui-card">
<div class="layui-card-body">
<div id="main" style="width: 100%;min-height:500px"></div>
</div>
</div>
</div>
</div>
</div>
<script src="${pageContext.request.contextPath}/lib/layui-v2.5.5/layui.js" charset="utf-8"></script>
<script src="${pageContext.request.contextPath}/js/lay-config.js?v=1.0.4" charset="utf-8"></script>
<script>
layui.use(['layer', 'miniTab','echarts'], function () {
var $ = layui.jquery,
layer = layui.layer,
miniTab = layui.miniTab,
echarts = layui.echarts;
layui.use(['echarts'], function () {
var echarts = layui.echarts,
$ = layui.jquery;
console.log(echarts);
// 基于准备好的dom初始化echarts实例
var myChart = echarts.init(document.getElementById('main'));
//var myChart2 = echarts.init(document.getElementById('main2'));
// 指定图表的配置项和数据
var option = {
series : [
{
name: '访问来源',
type: 'pie',
radius: '55%',
data:[
<c:forEach items="${list}" var="type">
{value:${type.counts}, name:'${type.name}'},
</c:forEach>
,0
],
roseType: 'angle',
itemStyle: {
normal: {
shadowBlur: 200,
shadowColor: 'rgba(0, 0, 0, 0.5)'
}
}
}
]
};
// 使用刚指定的配置项和数据显示图表
myChart.setOption(option);
});
});
</script>
</body>
</html>

@ -0,0 +1,173 @@
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%--<%
String path=request.getContextPath();
String basePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>--%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>图书管理系统</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta http-equiv="Access-Control-Allow-Origin" content="*">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="format-detection" content="telephone=no">
<link rel="icon" href="${pageContext.request.contextPath}/images/favicon.ico">
<link rel="stylesheet" href="${pageContext.request.contextPath}/lib/layui-v2.5.5/css/layui.css" media="all">
<link rel="stylesheet" href="${pageContext.request.contextPath}/css/layuimini.css?v=2.0.4" media="all">
<link rel="stylesheet" href="${pageContext.request.contextPath}/css/themes/default.css" media="all">
<link rel="stylesheet" href="${pageContext.request.contextPath}/lib/font-awesome-4.7.0/css/font-awesome.min.css" media="all">
<!--[if lt IE 9]>
<script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
<script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
<![endif]-->
<style id="layuimini-bg-color">
</style>
</head>
<body class="layui-layout-body layuimini-all">
<div class="layui-layout layui-layout-admin">
<div class="layui-header header">
<div class="layui-logo layuimini-logo"></div>
<div class="layuimini-header-content" >
<a>
<div class="layuimini-tool"><i title="展开" class="fa fa-outdent" data-side-fold="1"></i></div>
</a>
<!--电脑端头部菜单-->
<ul class="layui-nav layui-layout-left layuimini-header-menu layuimini-menu-header-pc layuimini-pc-show">
</ul>
<!--手机端头部菜单-->
<ul class="layui-nav layui-layout-left layuimini-header-menu layuimini-mobile-show">
<li class="layui-nav-item">
<a href="javascript:;"><i class="fa fa-list-ul"></i> 选择模块</a>
<dl class="layui-nav-child layuimini-menu-header-mobile">
</dl>
</li>
</ul>
<ul class="layui-nav layui-layout-right ">
<li class="layui-nav-item" lay-unselect>
<a href="javascript:;" data-refresh="刷新"><i class="fa fa-refresh"></i></a>
</li>
<li class="layui-nav-item" lay-unselect>
<a href="javascript:;" data-clear="清理" class="layuimini-clear"><i class="fa fa-trash-o"></i></a>
</li>
<li class="layui-nav-item mobile layui-hide-xs" lay-unselect>
<a href="javascript:;" data-check-screen="full"><i class="fa fa-arrows-alt"></i></a>
</li>
<li class="layui-nav-item layuimini-setting">
<a href="javascript:;"><span style="color: #BBBBBB">${sessionScope.user.username}</span></a>
<dl class="layui-nav-child">
<dd>
<a href="#" layuimini-content-href="${pageContext.request.contextPath}/updatePassword" data-title="修改密码" data-icon="fa fa-gears">修改密码</a>
</dd>
<dd>
<hr>
</dd>
<dd>
<a href="#" class="loginOut">退出登录</a>
</dd>
</dl>
</li>
</ul>
</div>
</div>
<!--无限极左侧菜单(功能管理)-->
<div class="layui-side layui-bg-black layuimini-menu-left">
</div>
<!--初始化加载层-->
<div class="layuimini-loader">
<div class="layuimini-loader-inner"></div>
</div>
<!--手机端遮罩层-->
<div class="layuimini-make"></div>
<!-- 移动导航 -->
<div class="layuimini-site-mobile"><i class="layui-icon"></i></div>
<div class="layui-body">
<div class="layuimini-tab layui-tab-rollTool layui-tab" lay-filter="layuiminiTab" lay-allowclose="true">
<ul class="layui-tab-title">
<li class="layui-this" id="layuiminiHomeTabId" lay-id=""></li>
</ul>
<div class="layui-tab-control">
<li class="layuimini-tab-roll-left layui-icon layui-icon-left"></li>
<li class="layuimini-tab-roll-right layui-icon layui-icon-right"></li>
<li class="layui-tab-tool layui-icon layui-icon-down">
<ul class="layui-nav close-box">
<li class="layui-nav-item">
<a href="javascript:;"><span class="layui-nav-more"></span></a>
<dl class="layui-nav-child">
<dd><a href="javascript:;" layuimini-tab-close="current">关 闭 当 前</a></dd>
<dd><a href="javascript:;" layuimini-tab-close="other">关 闭 其 他</a></dd>
<dd><a href="javascript:;" layuimini-tab-close="all">关 闭 全 部</a></dd>
</dl>
</li>
</ul>
</li>
</div>
<div class="layui-tab-content">
<div id="layuiminiHomeTabIframe" class="layui-tab-item layui-show"></div>
</div>
</div>
</div>
</div>
<script src="${pageContext.request.contextPath}/lib/layui-v2.5.5/layui.js" charset="utf-8"></script>
<script src="${pageContext.request.contextPath}/js/lay-config.js?v=2.0.0" charset="utf-8"></script>
<script>
layui.use(['jquery', 'layer', 'miniAdmin','miniTongji'], function () {
var $ = layui.jquery,
layer = layui.layer,
miniAdmin = layui.miniAdmin,
miniTongji = layui.miniTongji;
var options = {
<c:choose>
<c:when test="${sessionScope.type.equals('reader')}">
iniUrl: "${pageContext.request.contextPath}/api/init2.json", // 初始化接口,读者
</c:when>
<c:otherwise>
iniUrl: "${pageContext.request.contextPath}/api/init.json", // 初始化接口,管理
</c:otherwise>
</c:choose>
clearUrl: "${pageContext.request.contextPath}/api/clear.json", // 缓存清理接口
urlHashLocation: true, // 是否打开hash定位
bgColorDefault: false, // 主题默认配置
menuChildOpen: true, // 是否默认展开菜单
loadingTime: 0, // 初始化加载时间
pageAnim: true, // iframe窗口动画
maxTabNum: 20, // 最大的tab打开数量
};
miniAdmin.render(options);
$('.loginOut').on("click", function () {
layer.msg('退出登录成功', {
icon: 6,
time: 500
},function () {
window.location = '${pageContext.request.contextPath}/loginOut';
});
});
});
</script>
</body>
</html>

@ -0,0 +1,151 @@
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<html>
<head>
<meta charset="utf-8">
<title>借书</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link rel="stylesheet" href="${pageContext.request.contextPath}/lib/layui-v2.5.5/css/layui.css" media="all">
<link rel="stylesheet" href="${pageContext.request.contextPath}/css/public.css" media="all">
<style>
body {
background-color: #ffffff;
}
</style>
</head>
<body>
<div class="layui-form layuimini-form">
<!---高级查询图书-->
<div class="layui-form-item">
<label class="layui-form-label required">图书名称</label>
<div class="layui-input-block">
<input class="layui-input" name="name" id="name" autocomplete="off" data-type="reload">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label required">图书列表</label>
<div class="layui-input-block">
<table class="layui-hide" id="currentTableId" lay-filter="currentTableFilter"></table>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label required">借书卡号</label>
<div class="layui-input-block">
<input type="text" name="readerNumber" lay-verify="required" lay-reqtext="借书卡不能为空" placeholder="请输入借书卡" value="" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn layui-btn-normal" lay-submit lay-filter="saveBtn">确认借书</button>
</div>
</div>
</div>
<script src="${pageContext.request.contextPath}/lib/layui-v2.5.5/layui.js" charset="utf-8"></script>
<script>
layui.use(['form', 'table'], function(){
// var table = layui.table;
var $ = layui.jquery,
form = layui.form,
table = layui.table;
//方法级渲染
table.render({
elem: '#currentTableId'
,url: '${pageContext.request.contextPath}/bookAll'
,cols: [[
{type: "checkbox", width: 50},
//{field: 'id', width: 100, title: 'ID', sort: true},
{field: 'isbn', width: 150, title: '图书编号'},
//获取对象中的属性 对象
{templet:'<div>{{d.typeInfo.name}}</div>', width: 80, title: '图书类型'},
{field: 'name', width: 80, title: '图书名称'},
{field: 'author', width: 80, title: '作者'},
{field: 'price', width: 80, title: '价格'},
{field: 'language', width: 80, title: '语言'},
]]
,id: 'testReload'
,height: 310,
page:false
});
var $ = layui.$, active = {
reload: function(){
var name = $('#name').val()
//执行重载
table.reload('testReload', {
page: {
curr: 1 //重新从第 1 页开始
}
,where: {
name:name
}
}, 'data');
}
};
$('input[name=name]').change(function() {
var type = $(this).data('type');
active[type] ? active[type].call(this) : '';
});
/**
* 获取选中记录的id信息
*/
function getCheackId(data){
var arr=new Array();
for(var i=0;i<data.length;i++){
arr.push(data[i].id);
}
//拼接id
return arr.join(",");
};
/**
* form添加操作
*/
//监听提交
form.on('submit(saveBtn)', function (data) {
var datas=data.field;//form单中的数据信息
var selectData = layui.table.checkStatus('testReload').data;
var ids=getCheackId(selectData);
var readerNumber=datas.readerNumber;
var value={readerNumber:readerNumber,ids:ids};
lendBook(value);
});
/**
* 提交删除功能
*/
function lendBook(datas){
//向后台发送请求
$.ajax({
url: "addLend",
type: "POST",
data: datas,
success: function (result) {
if (result.code == 0) {//如果成功
layer.msg('借书成功',{
icon:6,
time:500
},function(){
parent.window.location.reload();
var iframeIndex = parent.layer.getFrameIndex(window.name);
parent.layer.close(iframeIndex);
})
} else {
layer.msg(result.msg);
}
}
})
};
});
</script>
</body>
</html>

@ -0,0 +1,88 @@
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<%@ page isELIgnored="false" %>
<html>
<head>
<meta charset="utf-8">
<title>异常还书</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link rel="stylesheet" href="${pageContext.request.contextPath}/lib/layui-v2.5.5/css/layui.css" media="all">
<link rel="stylesheet" href="${pageContext.request.contextPath}/css/public.css" media="all">
<style>
body {
background-color: #ffffff;
}
</style>
</head>
<body>
<div class="layui-form layuimini-form">
<input type="hidden" name="id" value="${id}"/>
<input type="hidden" name="bookId" value="${bid}"/>
<div class="layui-form-item">
<label class="layui-form-label required">异常类型</label>
<div class="layui-input-block">
<select name="backType" id="backType" lay-verify="required">
<option value="">请选择</option>
<%-- <option value="0">正常还书</option>--%>
<option value="1">延迟还书</option>
<option value="2">破损还书</option>
<option value="3">丢失</option>
</select>
</div>
</div>
<div class="layui-form-item layui-form-text">
<label class="layui-form-label">异常备注</label>
<div class="layui-input-block">
<textarea name="remarks" class="layui-textarea" > </textarea>
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn layui-btn-normal" lay-submit lay-filter="saveBtn">确认还书</button>
</div>
</div>
</div>
<script src="${pageContext.request.contextPath}/lib/layui-v2.5.5/layui.js" charset="utf-8"></script>
<script>
layui.use(['form'], function () {
var form = layui.form,
layer = layui.layer,
$ = layui.$;
//监听提交
form.on('submit(saveBtn)', function (data) {
var datas=data.field;//form单中的数据信息
//向后台发送数据提交添加
$.ajax({
url:"updateLendInfoSubmit",
type:"POST",
data:datas,
// contentType:"application/json",
// data:JSON.stringify(datas),
success:function(result){
if(result.code==0){//如果成功
layer.msg('还书成功',{
icon:6,
time:500
},function(){
parent.window.location.reload();
var iframeIndex = parent.layer.getFrameIndex(window.name);
parent.layer.close(iframeIndex);
})
}else{
layer.msg("还书失败");
}
}
})
return false;
});
});
</script>
</body>
</html>

@ -0,0 +1,353 @@
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>借阅管理</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link rel="stylesheet" href="${pageContext.request.contextPath}/lib/layui-v2.5.5/css/layui.css" media="all">
<link rel="stylesheet" href="${pageContext.request.contextPath}/css/public.css" media="all">
</head>
<body>
<div class="layuimini-container">
<div class="layuimini-main">
<div class="layuimini-main">
<div class="demoTable">
<div class="layui-form-item layui-form ">
借书卡
<div class="layui-inline">
<input class="layui-input" name="readerNumber" id="readerNumber" autocomplete="off">
</div>
图书名称
<div class="layui-inline">
<input class="layui-input" name="name" id="name" autocomplete="off">
</div>
归还类型
<div class="layui-inline">
<select class="layui-input" name="type" id="type">
<option value=""></option>
<option value="0">正常还书</option>
<option value="1">延迟还书</option>
<option value="2">破损还书</option>
<option value="3">丢失</option>
</select>
</div>
图书类型
<div class="layui-inline">
<select class="layui-input" name="status" id="status">
<option value=""></option>
<option value="0">未借出</option>
<option value="1">在借中</option>
</select>
</div>
<button class="layui-btn" data-type="reload">搜索</button>
</div>
</div>
</div>
<script type="text/html" id="toolbarDemo">
<div class="layui-btn-container">
<button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn" lay-event="add"> 借书 </button>
<button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn" lay-event="back"> 还书 </button>
<button class="layui-btn layui-btn-sm layui-btn-danger data-delete-btn" lay-event="delete"> 删除 </button>
</div>
</script>
<table class="layui-hide" id="currentTableId" lay-filter="currentTableFilter"></table>
<script type="text/html" id="currentTableBar">
{{# if(d.backDate==null){ }}
<a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="edit">异常还书</a>
<a class="layui-btn layui-btn-xs layui-btn-danger data-count-delete" lay-event="delete">删除</a>
{{# }else{ }}
<a class="layui-btn layui-btn-xs layui-btn-danger data-count-delete" lay-event="delete">删除</a>
{{# } }}
</script>
</div>
</div>
<script src="${pageContext.request.contextPath}/lib/layui-v2.5.5/layui.js" charset="utf-8"></script>
<script>
layui.use(['form', 'table'], function () {
var $ = layui.jquery,
form = layui.form,
table = layui.table;
table.render({
elem: '#currentTableId',
url: '${pageContext.request.contextPath}/lendListAll',//查询借阅图书记录
toolbar: '#toolbarDemo',
defaultToolbar: ['filter', 'exports', 'print', {
title: '提示',
layEvent: 'LAYTABLE_TIPS',
icon: 'layui-icon-tips'
}],
cols: [[
{type: "checkbox", width: 50},
//{field: 'id', width: 100, title: 'ID', sort: true},
{templet: '<div><a href="javascript:void(0)" style="color:#00b7ee" lay-event="bookInfoEvent">{{d.bookInfo.name}}</a></div>',
width: 100, title: '图书名称'},
{templet: '<div>{{d.readerInfo.readerNumber}}</div>', width: 120, title: '借书卡'},
{templet: '<div><a href="javascript:void(0)" style="color:#00b7ee" lay-event="readerInfoEvent">{{d.readerInfo.realName}}</a></div>',
width: 100, title: '借阅人'},
// {templet: '<div>{{d.reader.name}}</div>', width: 80, title: '借阅人'},
{templet:"<div>{{layui.util.toDateString(d.lendDate,'yyyy-MM-dd HH:mm:ss')}}</div>", width: 160, title: '借阅时间'},
{field: 'backDate', width: 160, title: '还书时间'},
{title:"还书类型",minWidth: 120,templet:function(res){
if(res.backType=='0'){
return '<span class="layui-badge layui-bg-green">正常还书</span>'
}else if(res.backType=='1'){
return '<span class="layui-badge layui-bg-gray">延迟还书</span>'
}else if(res.backType=='2') {
return '<span class="layui-badge layui-bg-yellow">破损还书</span>'
}else if(res.backType=='3'){
return '<span class="layui-badge layui-bg-green">丢失图书</span>'
}else{
return '<span class="layui-badge layui-bg-red">在借中</span>'
}
}},
{title: '操作', minWidth: 150, toolbar: '#currentTableBar', align: "center"}
]],
limits: [10, 15, 20, 25, 50, 100],
limit: 15,
page: true,
skin: 'line',
id:'testReload'
});
var $ = layui.$, active = {
reload: function(){
var name = $('#name').val();
var readerNumber = $('#readerNumber').val();
var backType = $('#backType').val();
var status = $('#status').val();
//执行重载
table.reload('testReload', {
page: {
curr: 1 //重新从第 1 页开始
}
,where: {
name: name,
readerNumber:readerNumber,
backType:backType,
status:status
}
}, 'data');
}
};
$('.demoTable .layui-btn').on('click', function(){
var type = $(this).data('type');
active[type] ? active[type].call(this) : '';
});
/**
* tool操作栏监听事件
*/
table.on('tool(currentTableFilter)', function (obj) {
var data=obj.data;
if (obj.event === 'edit') { // 监听添加操作
var index = layer.open({
title: '异常还书',
type: 2,
shade: 0.2,
maxmin:true,
shadeClose: true,
area: ['100%', '100%'],
content: '${pageContext.request.contextPath}/excBackBook?id='+data.id+"&bookId="+data.bookId,
});
$(window).on("resize", function () {
layer.full(index);
});
} else if (obj.event === 'delete') { // 监听删除操作
layer.confirm('确定是否删除', function (index) {
//调用删除功能
//获取记录信息的id集合
deleteInfoByIds(data.id,data.bookId,index);
layer.close(index);
});
}else if( obj.event === 'bookInfoEvent') {//书的借阅线
//获取书的id
var bid=data.bookId;
queryLookBookList("book",bid);
}else{//读者借阅线
//获取读者的id
var rid=data.readerId;
queryLookBookList("user",rid);
}
});
/**
* 借阅线打开内容
*/
function queryLookBookList(flag,id){
var index = layer.open({
title: '借阅时间线',
type: 2,
shade: 0.2,
maxmin:true,
shadeClose: true,
area: ['60%', '60%'],
content: '${pageContext.request.contextPath}/queryLookBookList?id='+id+"&flag="+flag,
});
$(window).on("resize", function () {
layer.full(index);
});
}
//监听表格复选框选择
table.on('checkbox(currentTableFilter)', function (obj) {
console.log(obj)
});
/**
* 获取选中记录的id信息
*/
function getCheackId(data){
var arr=new Array();
for(var i=0;i<data.length;i++){
arr.push(data[i].id);
}
//拼接id
return arr.join(",");
};
/**
* 获取选中记录的中图书id集合*/
function getCheackBookId(data){
var arr=new Array();
for(var i=0;i<data.length;i++){
arr.push(data[i].bookId);
}
//拼接id
return arr.join(",");
};
/**
* 提交删除功能
*/
function deleteInfoByIds(ids ,bookIds,index){
//向后台发送请求
$.ajax({
url: "deleteLendListByIds",
type: "POST",
data: {ids: ids,bookIds:bookIds},
success: function (result) {
if (result.code == 0) {//如果成功
layer.msg('删除成功', {
icon: 6,
time: 500
}, function () {
parent.window.location.reload();
var iframeIndex = parent.layer.getFrameIndex(window.name);
parent.layer.close(iframeIndex);
});
} else {
layer.msg("删除失败");
}
}
})
};
/**
* 提交还书功能
*/
function backBooksByIds(ids ,bookIds,index){
//向后台发送请求
$.ajax({
url: "backLendListByIds",
type: "POST",
data: {ids: ids,bookIds:bookIds},
success: function (result) {
if (result.code == 0) {//如果成功
layer.msg('还书成功', {
icon: 6,
time: 500
}, function () {
parent.window.location.reload();
var iframeIndex = parent.layer.getFrameIndex(window.name);
parent.layer.close(iframeIndex);
});
} else {
layer.msg("还书失败");
}
}
})
};
/**
* toolbar监听事件
*/
table.on('toolbar(currentTableFilter)', function (obj) {
if (obj.event === 'add') { // 监听添加操作
var index = layer.open({
title: '借书管理',
type: 2,
shade: 0.2,
maxmin:true,
shadeClose: true,
area: ['100%', '100%'],
content: '${pageContext.request.contextPath}/addLendList',
});
$(window).on("resize", function () {
layer.full(index);
});
}else if (obj.event === 'back'){//还书操作
//获取选中的记录信息
//获取选中的记录信息
var checkStatus=table.checkStatus(obj.config.id);
//debugger;
var data=checkStatus.data;
if(data.length==0){//如果没有选中信息
layer.msg("请选择要借阅还书的记录信息");
}else{
//获取记录信息的id集合
var ids=getCheackId(data);//借阅记录的id集合
var bookIds=getCheackBookId(data);//图书的id集合
layer.confirm('确定还书么', function (index) {
//调用还书功能
backBooksByIds(ids,bookIds,index);
layer.close(index);
});
}
} else if (obj.event === 'delete') {
/*
1、提示内容必须删除大于0条
2、获取要删除记录的id信息
3、提交删除功能 ajax
*/
//获取选中的记录信息
var checkStatus=table.checkStatus(obj.config.id);
var data=checkStatus.data;
if(data.length==0){//如果没有选中信息
layer.msg("请选择要删除的记录信息");
}else{
//获取记录信息的id集合
var ids=getCheackId(data);//借阅记录的id集合
var bookIds=getCheackBookId(data);//图书的id集合
layer.confirm('确定是否删除', function (index) {
//调用删除功能
deleteInfoByIds(ids,bookIds,index);
layer.close(index);
});
}
}
});
});
</script>
</body>
</html>

@ -0,0 +1,42 @@
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<%@ page isELIgnored="false" %>
<html>
<head>
<meta charset="utf-8">
<title>时间线查询</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link rel="stylesheet" href="${pageContext.request.contextPath}/lib/layui-v2.5.5/css/layui.css" media="all">
<link rel="stylesheet" href="${pageContext.request.contextPath}/css/public.css" media="all">
</head>
<body>
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 30px;">
<legend>借书时间线</legend>
</fieldset>
<ul class="layui-timeline">
<c:forEach var="lend" items="${info}" varStatus="status">
<li class="layui-timeline-item">
<div class="layui-timeline-content layui-text">
<div class="layui-timeline-title">
<fmt:formatDate value="${lend.lendDate}" pattern="yyyy年MM月dd日HH点mm分ss秒" /> <br/>
<span style="color: red"> ${lend.readerInfo.realName}</span> 借走 <span style="color: crimson"><<${lend.bookInfo.name}>></span><br/>
<c:if test="${lend.backDate == null}">
未归还
</c:if>
<c:if test="${lend.backDate != null}">
<fmt:formatDate value="${lend.backDate}" pattern="yyyy年MM月dd日HH点mm分ss秒" /> <span style="color: green">归还</span>,
</c:if>
</div>
</div>
</li>
</c:forEach>
</ul>
<script src="${pageContext.request.contextPath}/lib/layui-v2.5.5/layui.js" charset="utf-8"></script>
</body>
</html>

@ -0,0 +1,133 @@
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>图书管理系统</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta http-equiv="Access-Control-Allow-Origin" content="*">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="format-detection" content="telephone=no">
<script type="text/javascript" src="${pageContext.request.contextPath}/lib/jquery-3.4.1/jquery-3.4.1.min.js"></script>
<link rel="stylesheet" href="${pageContext.request.contextPath}/lib/layui-v2.5.5/css/layui.css" media="all">
<link rel="stylesheet" href="${pageContext.request.contextPath}/css/public.css" media="all">
<style>
html, body {width: 100%;height: 100%;overflow: hidden}
body {background: url("${pageContext.request.contextPath}/images/loginbg.png") no-repeat center;}
body:after {content:'';background-repeat:no-repeat;background-size:cover;-webkit-filter:blur(3px);-moz-filter:blur(3px);-o-filter:blur(3px);-ms-filter:blur(3px);filter:blur(3px);position:absolute;top:0;left:0;right:0;bottom:0;z-index:-1;}
.layui-container {width: 100%;height: 100%;overflow: hidden}
.admin-login-background {width:450px;height:300px;position:absolute;left:65%;top:45%;margin-top:-120px;margin-left:-50px;opacity:0.9;}
.logo-title {text-align:center;letter-spacing:2px;padding:14px 0;}
.logo-title h1 {color:#1E9FFF;font-size:25px;font-weight:bold;}
.login-form {background-color:#fff;border:1px solid #fff;border-radius:3px;padding:14px 20px;box-shadow:0 0 8px #eeeeee;}
.login-form .layui-form-item {position:relative;}
.login-form .layui-form-item label {position:absolute;left:1px;top:1px;width:38px;line-height:36px;text-align:center;color:#d2d2d2;}
.login-form .layui-form-item input {padding-left:36px;}
.captcha-img img {height:34px;border:1px solid #e6e6e6;height:36px;width:100%;}
</style>
</head>
<body>
<div class="layui-container">
<div class="admin-login-background">
<div class="layui-form login-form">
<form class="layui-form" action="${pageContext.request.contextPath}/loginIn" method="post">
<div class="layui-form-item logo-title">
<h1>图书管理系统</h1>
<div style="color: red;text-align: center;">${msg}</div>
</div>
<div class="layui-form-item">
<label class="layui-icon layui-icon-username"></label>
<input type="text" name="username" lay-verify="required" placeholder="用户名" autocomplete="off" class="layui-input" >
</div>
<div class="layui-form-item">
<label class="layui-icon layui-icon-password"></label>
<input type="password" name="password" lay-verify="required" placeholder="密码" autocomplete="off" class="layui-input" >
</div>
<div class="layui-form-item">
<label class="layui-icon layui-icon-username"></label>
<select name="type" lay-verify="required">
<option value="">请选择用户类型</option>
<option value="1">管理员</option>
<option value="2">读者</option>
</select>
</div>
<div class="layui-form-item">
<div class="layui-input-inline">
<input type="text" name="captcha" style="width: 200px;" lay-verify="required" placeholder="验证码" autocomplete="off" class="layui-input">
</div>
<div class="layui-input-inline">
<div class="field">
<a href="javascript:void(0)" onclick="getCode()"><img id="code" ></a>
</div>
</div>
</div>
<div class="layui-form-item">
<button class="layui-btn layui-btn layui-btn-normal layui-btn-fluid" lay-submit="" lay-filter="login">登录</button>
</div>
</form>
</div>
</div>
</div>
<script src="${pageContext.request.contextPath}/lib/layui-v2.5.5/layui.js" charset="utf-8"></script>
<script type="text/javascript">
getCode();
/**
* 获取验证码
*/
function getCode(){
document.getElementById("code").src=timestamp("verifyCode");
}
/**
* 实现刷新更滑验证码
*/
function timestamp(url){
var gettime=new Date().getTime();
if(url.indexOf("?")>-1){
url=url+"&timestamp="+gettime;
}else{
url=url+"?timestamp="+gettime;
}
return url;
}
layui.use(['form'], function () {
var form = layui.form,
layer = layui.layer;
form.on('submit(login)', function (data) {
data = data.field;
if (data.username == '') {
layer.msg('用户名不能为空');
return false;
}
if (data.password == '') {
layer.msg('密码不能为空');
return false;
}
/*if (data.captcha == '') {
layer.msg('验证码不能为空');
return false;
}*/
if (data.type == '') {
layer.msg('类型不能为空');
return false;
}
});
});
</script>
</body>
</html>

@ -0,0 +1,80 @@
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<%--<%
String path=request.getContextPath();
String basePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>--%>
<html>
<head>
<meta charset="utf-8">
<title>发布公告</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link rel="stylesheet" href="${pageContext.request.contextPath}/lib/layui-v2.5.5/css/layui.css" media="all">
<link rel="stylesheet" href="${pageContext.request.contextPath}/css/public.css" media="all">
<style>
body {
background-color: #ffffff;
}
</style>
</head>
<body>
<div class="layui-form layuimini-form">
<div class="layui-form-item">
<label class="layui-form-label required">公告主题</label>
<div class="layui-input-block">
<input type="text" name="topic" lay-verify="required" lay-reqtext="公告主题不能为空" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item layui-form-text">
<label class="layui-form-label required">公告内容</label>
<div class="layui-input-block">
<textarea name="content" lay-verify="required" lay-reqtext="公告内容不能为空" autocomplete="off" class="layui-textarea"></textarea>
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn layui-btn-normal" lay-submit lay-filter="saveBtn">确认保存</button>
</div>
</div>
</div>
<script src="${pageContext.request.contextPath}/lib/layui-v2.5.5/layui.js" charset="utf-8"></script>
<script>
layui.use(['form'], function () {
var form = layui.form,
layer = layui.layer,
$ = layui.$;
//监听提交
form.on('submit(saveBtn)', function (data) {
var datas=data.field;//form单中的数据信息
//向后台发送数据提交添加
$.ajax({
url:"addNoticeSubmit",
type:"POST",
data:datas,
success:function(result){
if(result.code==0){//如果成功
layer.msg('添加成功',{
icon:6,
time:500
},function(){
parent.window.location.reload();
var iframeIndex = parent.layer.getFrameIndex(window.name);
parent.layer.close(iframeIndex);
})
}else{
layer.msg("添加失败");
}
}
})
return false;
});
});
</script>
</body>
</html>

@ -0,0 +1,214 @@
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>类型管理</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link rel="stylesheet" href="${pageContext.request.contextPath}/lib/layui-v2.5.5/css/layui.css" media="all">
<link rel="stylesheet" href="${pageContext.request.contextPath}/css/public.css" media="all">
<script src="${pageContext.request.contextPath}/lib/layui-v2.5.5/layui.js" charset="utf-8"></script>
</head>
<body>
<div class="layuimini-container">
<div class="layuimini-main">
<div class="demoTable">
公告主题:
<div class="layui-inline">
<input class="layui-input" name="topic" id="topic" autocomplete="off">
</div>
<button class="layui-btn" data-type="reload">搜索</button>
</div>
<script type="text/html" id="toolbarDemo">
<div class="layui-btn-container">
<button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn" lay-event="add"> 发布公告 </button>
<button class="layui-btn layui-btn-sm layui-btn-danger data-delete-btn" lay-event="delete"> 删除 </button>
</div>
</script>
<!--表单,查询出的数据在这里显示-->
<table class="layui-hide" id="currentTableId" lay-filter="currentTableFilter"></table>
<script type="text/html" id="currentTableBar">
<a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="query">查询详情</a>
<a class="layui-btn layui-btn-xs layui-btn-danger data-count-delete" lay-event="delete">删除</a>
</script>
</div>
</div>
<script>
layui.use(['form', 'table'], function () {
var $ = layui.jquery,
form = layui.form,
table = layui.table;
table.render({
elem: '#currentTableId',
url: '${pageContext.request.contextPath}/noticeAll',//查询类型数据
toolbar: '#toolbarDemo',
defaultToolbar: ['filter', 'exports', 'print', {
title: '提示',
layEvent: 'LAYTABLE_TIPS',
icon: 'layui-icon-tips'
}],
cols: [[
{type: "checkbox", width: 50},
//{field: 'id', width: 100, title: 'ID', sort: true},
{field: 'topic', width: 150, title: '公告主题'},
{field: 'content', width: 200, title: '公告内容'},
{field: 'author', width: 100, title: '发布者'},
{templet:"<div>{{layui.util.toDateString(d.createDate,'yyyy-MM-dd HH:mm:ss')}}</div>", width: 200, title: '发布时间'},
{title: '操作', minWidth: 150, toolbar: '#currentTableBar', align: "center"}
]],
limits: [10, 15, 20, 25, 50, 100],
limit: 15, <!--默认显示15条-->
page: true,
skin: 'line',
id:'testReload'
});
var $ = layui.$, active = {
reload: function(){
var topic = $('#topic').val();
console.log(name)
//执行重载
table.reload('testReload', {
page: {
curr: 1 //重新从第 1 页开始
}
,where: {
topic: topic
}
}, 'data');
}
};
$('.demoTable .layui-btn').on('click', function(){
var type = $(this).data('type');
active[type] ? active[type].call(this) : '';
});
/**
* tool操作栏监听事件
*/
table.on('tool(currentTableFilter)', function (obj) {
var data=obj.data;
if (obj.event === 'query') { // 监听查询详情操作
var index = layer.open({
title: '查看公告',
type: 2,
shade: 0.2,
maxmin:true,
shadeClose: true,
area: ['60%', '60%'],
content: '${pageContext.request.contextPath}/queryNoticeById?id='+data.id,
});
$(window).on("resize", function () {
layer.full(index);
});
} else if (obj.event === 'delete') { // 监听删除操作
layer.confirm('确定是否删除', function (index) {
//调用删除功能
deleteInfoByIds(data.id,index);
layer.close(index);
});
}
});
//监听表格复选框选择
table.on('checkbox(currentTableFilter)', function (obj) {
console.log(obj)
});
/**
* 获取选中记录的id信息
*/
function getCheackId(data){
var arr=new Array();
for(var i=0;i<data.length;i++){
arr.push(data[i].id);
}
//拼接id,变成一个字符串
return arr.join(",");
};
/**
* 提交删除功能
*/
function deleteInfoByIds(ids ,index){
//向后台发送请求
$.ajax({
url: "deleteNoticeByIds",
type: "POST",
data: {ids: ids},
success: function (result) {
if (result.code == 0) {//如果成功
layer.msg('删除成功', {
icon: 6,
time: 500
}, function () {
parent.window.location.reload();
var iframeIndex = parent.layer.getFrameIndex(window.name);
parent.layer.close(iframeIndex);
});
} else {
layer.msg("删除失败");
}
}
})
};
/**
* toolbar栏监听事件
*/
table.on('toolbar(currentTableFilter)', function (obj) {
if (obj.event === 'add') { // 监听发布公告操作
var index = layer.open({
title: '发布公告',
type: 2,
shade: 0.2,
maxmin:true,
shadeClose: true,
area: ['60%', '60%'],
content: '${pageContext.request.contextPath}/noticeAdd',
});
$(window).on("resize", function () {
layer.full(index);
});
} else if (obj.event === 'delete') {
/*
1、提示内容必须删除大于0条
2、获取要删除记录的id信息
3、提交删除功能 ajax
*/
//获取选中的记录信息
var checkStatus=table.checkStatus(obj.config.id);
var data=checkStatus.data;
if(data.length==0){//如果没有选中信息
layer.msg("请选择要删除的记录信息");
}else{
//获取记录信息的id集合,拼接的ids
var ids=getCheackId(data);
layer.confirm('确定是否删除', function (index) {
//调用删除功能
deleteInfoByIds(ids,index);
layer.close(index);
});
}
}
});
});
</script>
</body>
</html>

@ -0,0 +1,115 @@
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>类型管理</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link rel="stylesheet" href="${pageContext.request.contextPath}/lib/layui-v2.5.5/css/layui.css" media="all">
<link rel="stylesheet" href="${pageContext.request.contextPath}/css/public.css" media="all">
<script src="${pageContext.request.contextPath}/lib/layui-v2.5.5/layui.js" charset="utf-8"></script>
</head>
<body>
<div class="layuimini-container">
<div class="layuimini-main">
<div class="demoTable">
公告主题:
<div class="layui-inline">
<input class="layui-input" name="topic" id="topic" autocomplete="off">
</div>
<button class="layui-btn" data-type="reload">搜索</button>
</div>
<!--表单,查询出的数据在这里显示-->
<table class="layui-hide" id="currentTableId" lay-filter="currentTableFilter"></table>
<script type="text/html" id="currentTableBar">
<a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="query">查询详情</a>
</script>
</div>
</div>
<script>
layui.use(['form', 'table'], function () {
var $ = layui.jquery,
form = layui.form,
table = layui.table;
table.render({
elem: '#currentTableId',
url: '${pageContext.request.contextPath}/noticeAll',//查询类型数据
toolbar: '#toolbarDemo',
defaultToolbar: ['filter', 'exports', 'print', {
title: '提示',
layEvent: 'LAYTABLE_TIPS',
icon: 'layui-icon-tips'
}],
cols: [[
//{type: "checkbox", width: 50},
//{field: 'id', width: 100, title: 'ID', sort: true},
{field: 'topic', width: 150, title: '公告主题'},
{field: 'content', width: 200, title: '公告内容'},
{field: 'author', width: 100, title: '发布者'},
{templet:"<div>{{layui.util.toDateString(d.createDate,'yyyy-MM-dd HH:mm:ss')}}</div>", width: 200, title: '发布时间'},
{title: '操作', minWidth: 150, toolbar: '#currentTableBar', align: "center"}
]],
limits: [10, 15, 20, 25, 50, 100],
limit: 15, <!--默认显示15条-->
page: true,
skin: 'line',
id:'testReload'
});
var $ = layui.$, active = {
reload: function(){
var topic = $('#topic').val();
console.log(name)
//执行重载
table.reload('testReload', {
page: {
curr: 1 //重新从第 1 页开始
}
,where: {
topic: topic
}
}, 'data');
}
};
$('.demoTable .layui-btn').on('click', function(){
var type = $(this).data('type');
active[type] ? active[type].call(this) : '';
});
/**
* tool操作栏监听事件
*/
table.on('tool(currentTableFilter)', function (obj) {
var data=obj.data;
if (obj.event === 'query') { // 监听查询详情操作
var index = layer.open({
title: '查看公告',
type: 2,
shade: 0.2,
maxmin:true,
shadeClose: true,
area: ['60%', '60%'],
content: '${pageContext.request.contextPath}/queryNoticeById?id='+data.id,
});
$(window).on("resize", function () {
layer.full(index);
});
}
});
});
</script>
</body>
</html>

@ -0,0 +1,88 @@
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<%@ page isELIgnored="false" %>
<%--<%
String path=request.getContextPath();
String basePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>--%>
<html>
<head>
<meta charset="utf-8">
<title>修改公告信息</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link rel="stylesheet" href="${pageContext.request.contextPath}/lib/layui-v2.5.5/css/layui.css" media="all">
<link rel="stylesheet" href="${pageContext.request.contextPath}/css/public.css" media="all">
<style>
body {
background-color: #ffffff;
}
</style>
</head>
<body>
<div class="layui-form layuimini-form">
<input type="hidden" name="id" value="${info.id}">
<div class="layui-form-item">
<label class="layui-form-label">公告主题</label>
<div class="layui-input-block">
<input type="text" name="topic" readonly="true" value="${info.topic}" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">发布人</label>
<div class="layui-input-block">
<input type="text" name="author" readonly="true" value="${info.author}" class="layui-input">
</div>
</div>
<div class="layui-form-item layui-form-text">
<label class="layui-form-label">公告内容</label>
<div class="layui-input-block">
<textarea name="content" readonly="true" class="layui-textarea" > ${info.content}</textarea>
</div>
</div>
</div>
<script src="${pageContext.request.contextPath}/lib/layui-v2.5.5/layui.js" charset="utf-8"></script>
<script>
layui.use(['form'], function () {
var form = layui.form,
layer = layui.layer,
$ = layui.$;
//监听提交
form.on('submit(saveBtn)', function (data) {
var datas=data.field;//form单中的数据信息
//向后台发送数据提交添加
$.ajax({
url:"updateTypeSubmit",
type:"POST",
// data:datas,
contentType:"application/json",
data:JSON.stringify(datas),
success:function(result){
if(result.code==0){//如果成功
layer.msg('修改成功',{
icon:6,
time:500
},function(){
parent.window.location.reload();
var iframeIndex = parent.layer.getFrameIndex(window.name);
parent.layer.close(iframeIndex);
})
}else{
layer.msg("修改失败");
}
}
})
return false;
});
});
</script>
</body>
</html>

@ -0,0 +1,98 @@
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>修改密码</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link rel="stylesheet" href="${pageContext.request.contextPath}/lib/layui-v2.5.5/css/layui.css" media="all">
<link rel="stylesheet" href="${pageContext.request.contextPath}/css/public.css" media="all">
<style>
.layui-form-item .layui-input-company {width: auto;padding-right: 10px;line-height: 38px;}
</style>
</head>
<body>
<div class="layuimini-container">
<div class="layuimini-main">
<div class="layui-form layuimini-form">
<div class="layui-form-item">
<label class="layui-form-label required">旧的密码</label>
<div class="layui-input-block">
<input type="password" name="oldPwd" id="oldPwd" lay-verify="required" lay-reqtext="旧密码不能为空" placeholder="请输入旧的密码" value="" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label required">新的密码</label>
<div class="layui-input-block">
<input type="password" name="newPwd" id="newPwd" lay-verify="required" lay-reqtext="新密码不能为空" placeholder="请输入新的密码" value="" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label required">确认密码</label>
<div class="layui-input-block">
<input type="password" name="againPwd" id="againPwd" lay-verify="required" lay-reqtext="密码不能为空" placeholder="请输入新的密码" value="" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn layui-btn-normal" lay-submit lay-filter="saveBtn">确认保存</button>
</div>
</div>
</div>
</div>
</div>
<script src="${pageContext.request.contextPath}/lib/layui-v2.5.5/layui.js" charset="utf-8"></script>
<script src="${pageContext.request.contextPath}/js/lay-config.js?v=1.0.4" charset="utf-8"></script>
<script>
layui.use(['form'], function () {
var form = layui.form,
layer = layui.layer,
$ = layui.$;
//监听提交
form.on('submit(saveBtn)', function (data) {
var datas=data.field;//form单中的数据信息
if (datas.newPwd != datas.againPwd){
layer.msg("两次输入的新密码不一致,请重新输入")
}else{
//向后台发送数据提交添加
$.ajax({
url:"updatePwdSubmit2", //读者的修改密码
type:"POST",
data: {
oldPwd:datas.oldPwd,
newPwd:datas.newPwd
},
success:function(result){
if(result.code==0){//如果成功
layer.msg("修改成功",{
icon:6,
time:500
},function(){
var oldPassword = document.getElementById("oldPwd");
var newPassword = document.getElementById("newPwd");
var againPassword = document.getElementById("againPwd");
oldPassword.value = "";
newPassword.value = "";
againPassword.value = "";
})
}else{
layer.msg(result.msg);
}
}
})
}
return false;
});
});
</script>
</body>
</html>

@ -0,0 +1,123 @@
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<html>
<head>
<meta charset="utf-8">
<title>添加读者</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link rel="stylesheet" href="${pageContext.request.contextPath}/lib/layui-v2.5.5/css/layui.css" media="all">
<link rel="stylesheet" href="${pageContext.request.contextPath}/css/public.css" media="all">
<style>
body {
background-color: #ffffff;
}
</style>
</head>
<body>
<div class="layui-form layuimini-form">
<div class="layui-form-item">
<label class="layui-form-label required">读者卡号</label>
<div class="layui-input-block">
<input type="text" name="readerNumber" lay-verify="required" lay-reqtext="读者卡号不能为空" placeholder="请输入读者卡号" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label required">用户名</label>
<div class="layui-input-block">
<input type="text" name="username" lay-verify="required" lay-reqtext="用户名不能为空" placeholder="请输入用户名" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label required">真实姓名</label>
<div class="layui-input-block">
<input type="text" name="realName" lay-verify="required" lay-reqtext="真实姓名不能为空" placeholder="请输入真实姓名" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label required">性别</label>
<div class="layui-input-block">
<input type="radio" name="sex" value="男" title="男" checked="checked"/>
<input type="radio" name="sex" value="女" title="女" />
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label required">出生日期</label>
<div class="layui-input-block">
<input type="text" name="birthday" id="date" lay-verify="required" class="layui-input" autocomplete="off">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label required">联系方式</label>
<div class="layui-input-block">
<input type="text" name="tel" lay-verify="required" class="layui-input" autocomplete="off">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label required">邮箱地址</label>
<div class="layui-input-block">
<input type="text" name="email" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn layui-btn-normal" lay-submit lay-filter="saveBtn">确认保存</button>
</div>
</div>
</div>
<script src="${pageContext.request.contextPath}/lib/layui-v2.5.5/layui.js" charset="utf-8"></script>
<script>
layui.use(['form','laydate'], function () {
var form = layui.form,
layer = layui.layer,
laydate=layui.laydate,
$ = layui.$;
//日期
laydate.render({
elem: '#date',
trigger:'click'
});
//监听提交
form.on('submit(saveBtn)', function (data) {
var datas=data.field;//form单中的数据信息
//向后台发送数据提交添加
$.ajax({
url:"addReaderSubmit",
type:"POST",
//data:datas,
contentType:'application/json',
data:JSON.stringify(datas),
success:function(result){
if(result.code==0){//如果成功
layer.msg('添加成功',{
icon:6,
time:500
},function(){
parent.window.location.reload();
var iframeIndex = parent.layer.getFrameIndex(window.name);
parent.layer.close(iframeIndex);
})
}else{
layer.msg("添加失败");
}
}
})
return false;
});
});
</script>
</body>
</html>

@ -0,0 +1,235 @@
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<%--<%
String path=request.getContextPath();
String basePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>--%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>读者管理</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link rel="stylesheet" href="${pageContext.request.contextPath}/lib/layui-v2.5.5/css/layui.css" media="all">
<link rel="stylesheet" href="${pageContext.request.contextPath}/css/public.css" media="all">
<script src="${pageContext.request.contextPath}/lib/layui-v2.5.5/layui.js" charset="utf-8"></script>
</head>
<body>
<div class="layuimini-container">
<div class="layuimini-main">
<div class="demoTable">
<div class="layui-form-item layui-form ">
图书卡号:
<div class="layui-inline">
<input class="layui-input" name="readerNumber" id="readerNumber" autocomplete="off">
</div>
用户名:
<div class="layui-inline">
<input class="layui-input" name="username" id="username" autocomplete="off">
</div>
电话:
<div class="layui-inline">
<input class="layui-input" name="tel" id="tel" autocomplete="off">
</div>
<button class="layui-btn" data-type="reload">搜索</button>
</div>
</div>
<script type="text/html" id="toolbarDemo">
<div class="layui-btn-container">
<button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn" lay-event="add"> 添加 </button>
<button class="layui-btn layui-btn-sm layui-btn-danger data-delete-btn" lay-event="delete"> 删除 </button>
</div>
</script>
<!--表单,查询出的数据在这里显示-->
<table class="layui-hide" id="currentTableId" lay-filter="currentTableFilter"></table>
<script type="text/html" id="currentTableBar">
<a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="update">修改</a>
<a class="layui-btn layui-btn-xs layui-btn-danger data-count-delete" lay-event="delete">删除</a>
</script>
</div>
</div>
<script>
layui.use(['form', 'table'], function () {
var $ = layui.jquery,
form = layui.form,
table = layui.table;
table.render({
elem: '#currentTableId',
url: '${pageContext.request.contextPath}/readerAll',//查询数据
toolbar: '#toolbarDemo',
defaultToolbar: ['filter', 'exports', 'print', {
title: '提示',
layEvent: 'LAYTABLE_TIPS',
icon: 'layui-icon-tips'
}],
cols: [[
{type: "checkbox", width: 50},
//{field: 'id', width: 100, title: 'ID', sort: true},
{field: 'readerNumber', width: 150, title: '读者卡号'},
{field: 'username', width: 100, title: '用户名'},
{field: 'realName', width: 100, title: '真实姓名'},
{field: 'sex', width: 80, title: '性别'},
{field: 'tel', width: 150, title: '电话'},
{templet:"<div>{{layui.util.toDateString(d.registerDate,'yyyy-MM-dd HH:mm:ss')}}</div>", width: 200, title: '办卡时间'},
{templet: '<div>{{d.email}}</div>', width: 150, title: '邮箱'},
{title: '操作', minWidth: 150, toolbar: '#currentTableBar', align: "center"}
]],
limits: [10, 15, 20, 25, 50, 100],
limit: 15, <!--默认显示15条-->
page: true,
skin: 'line',
id:'testReload'
});
var $ = layui.$, active = {
reload: function(){
var readerNumber = $('#readerNumber').val();
var username = $('#username').val();
var tel = $('#tel').val();
console.log(name)
//执行重载
table.reload('testReload', {
page: {
curr: 1 //重新从第 1 页开始
}
,where: {
readerNumber: readerNumber,
username:username,
tel:tel
}
}, 'data');
}
};
$('.demoTable .layui-btn').on('click', function(){
var type = $(this).data('type');
active[type] ? active[type].call(this) : '';
});
/**
* tool操作栏监听事件
*/
table.on('tool(currentTableFilter)', function (obj) {
var data=obj.data;
if (obj.event === 'update') { // 监听修改操作
var index = layer.open({
title: '修改读者信息',
type: 2,
shade: 0.2,
maxmin:true,
shadeClose: true,
area: ['100%', '100%'],
content: '${pageContext.request.contextPath}/queryReaderInfoById?id='+data.id,
});
$(window).on("resize", function () {
layer.full(index);
});
} else if (obj.event === 'delete') { // 监听删除操作
layer.confirm('确定是否删除', function (index) {
//调用删除功能
deleteInfoByIds(data.id,index);
layer.close(index);
});
}
});
//监听表格复选框选择
table.on('checkbox(currentTableFilter)', function (obj) {
console.log(obj)
});
/**
* 获取选中记录的id信息
*/
function getCheackId(data){
var arr=new Array();
for(var i=0;i<data.length;i++){
arr.push(data[i].id);
}
//拼接id,变成一个字符串
return arr.join(",");
};
/**
* 提交删除功能
*/
function deleteInfoByIds(ids ,index){
//向后台发送请求
$.ajax({
url: "deleteReader",
type: "POST",
data: {ids: ids},
success: function (result) {
if (result.code == 0) {//如果成功
layer.msg('删除成功', {
icon: 6,
time: 500
}, function () {
parent.window.location.reload();
var iframeIndex = parent.layer.getFrameIndex(window.name);
parent.layer.close(iframeIndex);
});
} else {
layer.msg("删除失败");
}
}
})
};
/**
* toolbar栏监听事件
*/
table.on('toolbar(currentTableFilter)', function (obj) {
if (obj.event === 'add') { // 监听添加操作
var index = layer.open({
title: '添加图书',
type: 2,
shade: 0.2,
maxmin:true,
shadeClose: true,
area: ['100%', '100%'],
content: '${pageContext.request.contextPath}/readerAdd',
});
$(window).on("resize", function () {
layer.full(index);
});
} else if (obj.event === 'delete') {
/*
1、提示内容必须删除大于0条
2、获取要删除记录的id信息
3、提交删除功能 ajax
*/
//获取选中的记录信息
var checkStatus=table.checkStatus(obj.config.id);
var data=checkStatus.data;
if(data.length==0){//如果没有选中信息
layer.msg("请选择要删除的记录信息");
}else{
//获取记录信息的id集合,拼接的ids
var ids=getCheackId(data);
layer.confirm('确定是否删除', function (index) {
//调用删除功能
deleteInfoByIds(ids,index);
layer.close(index);
});
}
}
});
});
</script>
</body>
</html>

@ -0,0 +1,125 @@
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ page isELIgnored="false" %>
<html>
<head>
<meta charset="utf-8">
<title>修改图书</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link rel="stylesheet" href="${pageContext.request.contextPath}/lib/layui-v2.5.5/css/layui.css" media="all">
<link rel="stylesheet" href="${pageContext.request.contextPath}/css/public.css" media="all">
<style>
body {
background-color: #ffffff;
}
</style>
</head>
<body>
<div class="layui-form layuimini-form">
<input type="hidden" name="id" value="${info.id}">
<div class="layui-form-item">
<label class="layui-form-label required">读者卡号</label>
<div class="layui-input-block">
<input type="text" name="readerNumber" lay-reqtext="读者卡号不能为空" value="${info.readerNumber}" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label required">用户名</label>
<div class="layui-input-block">
<input type="text" name="username" lay-reqtext="用户名不能为空" value="${info.username}" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label required">真实姓名</label>
<div class="layui-input-block">
<input type="text" name="realName" lay-reqtext="真实姓名不能为空" value="${info.realName}" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label required">性别</label>
<div class="layui-input-block">
<input type="radio" name="sex" value="男" title="男" ${"男" eq info.sex ?"checked='checked'":''} />
<input type="radio" name="sex" value="女" title="女" ${"女" eq info.sex ?"checked='checked'":''} />
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label required">出生日期</label>
<div class="layui-input-block">
<input type="text" name="birthday" id="date" lay-verify="required" value="<fmt:formatDate value='${info.birthday}' pattern='yyyy-MM-dd'/>" class="layui-input" autocomplete="off">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label required">联系方式</label>
<div class="layui-input-block">
<input type="text" name="tel" lay-verify="required" class="layui-input" value="${info.tel}" autocomplete="off">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label required">邮箱地址</label>
<div class="layui-input-block">
<input type="text" name="email" autocomplete="off" value="${info.email}" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn layui-btn-normal" lay-submit lay-filter="saveBtn">确认修改</button>
</div>
</div>
</div>
<script src="${pageContext.request.contextPath}/lib/layui-v2.5.5/layui.js" charset="utf-8"></script>
<script>
layui.use(['form','laydate'], function () {
var form = layui.form,
layer = layui.layer,
laydate=layui.laydate,
$ = layui.$;
//日期
laydate.render({
elem: '#date',
trigger:'click'
});
//监听提交
form.on('submit(saveBtn)', function (data) {
var datas=data.field;//form单中的数据信息
//向后台发送数据提交添加
$.ajax({
url:"updateReaderSubmit",
type:"POST",
//data:datas,
contentType:'application/json',
data:JSON.stringify(datas),
success:function(result){
if(result.code==0){//如果成功
layer.msg('修改成功',{
icon:6,
time:500
},function(){
parent.window.location.reload();
var iframeIndex = parent.layer.getFrameIndex(window.name);
parent.layer.close(iframeIndex);
})
}else{
layer.msg("修改失败");
}
}
})
return false;
});
});
</script>
</body>
</html>

@ -0,0 +1,78 @@
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<html>
<head>
<meta charset="utf-8">
<title>类型添加</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link rel="stylesheet" href="${pageContext.request.contextPath}/lib/layui-v2.5.5/css/layui.css" media="all">
<link rel="stylesheet" href="${pageContext.request.contextPath}/css/public.css" media="all">
<style>
body {
background-color: #ffffff;
}
</style>
</head>
<body>
<div class="layui-form layuimini-form">
<div class="layui-form-item">
<label class="layui-form-label required">类型名称</label>
<div class="layui-input-block">
<input type="text" name="name" lay-verify="required" lay-reqtext="类型名称不能为空" placeholder="请输入类型名称" value="" class="layui-input">
<tip>填写自己类型名称</tip>
</div>
</div>
<div class="layui-form-item layui-form-text">
<label class="layui-form-label">备注信息</label>
<div class="layui-input-block">
<textarea name="remarks" class="layui-textarea" placeholder="请输入备注信息"></textarea>
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn layui-btn-normal" lay-submit lay-filter="saveBtn">确认保存</button>
</div>
</div>
</div>
<script src="${pageContext.request.contextPath}/lib/layui-v2.5.5/layui.js" charset="utf-8"></script>
<script>
layui.use(['form'], function () {
var form = layui.form,
layer = layui.layer,
$ = layui.$;
//监听提交
form.on('submit(saveBtn)', function (data) {
var datas=data.field;//form单中的数据信息
//向后台发送数据提交添加
$.ajax({
url:"addTypeSubmit",
type:"POST",
data:datas,
success:function(result){
if(result.code==0){//如果成功
layer.msg('添加成功',{
icon:6,
time:500
},function(){
parent.window.location.reload();
var iframeIndex = parent.layer.getFrameIndex(window.name);
parent.layer.close(iframeIndex);
})
}else{
layer.msg("类型添加失败");
}
}
})
return false;
});
});
</script>
</body>
</html>

@ -0,0 +1,212 @@
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>类型管理</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link rel="stylesheet" href="${pageContext.request.contextPath}/lib/layui-v2.5.5/css/layui.css" media="all">
<link rel="stylesheet" href="${pageContext.request.contextPath}/css/public.css" media="all">
<script src="${pageContext.request.contextPath}/lib/layui-v2.5.5/layui.js" charset="utf-8"></script>
</head>
<body>
<div class="layuimini-container">
<div class="layuimini-main">
<div class="demoTable">
类型名称:
<div class="layui-inline">
<input class="layui-input" name="name" id="name" autocomplete="off">
</div>
<button class="layui-btn" data-type="reload">搜索</button>
</div>
<script type="text/html" id="toolbarDemo">
<div class="layui-btn-container">
<button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn" lay-event="add"> 添加 </button>
<button class="layui-btn layui-btn-sm layui-btn-danger data-delete-btn" lay-event="delete"> 删除 </button>
</div>
</script>
<!--表单,查询出的数据在这里显示-->
<table class="layui-hide" id="currentTableId" lay-filter="currentTableFilter"></table>
<script type="text/html" id="currentTableBar">
<a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="edit">编辑</a>
<a class="layui-btn layui-btn-xs layui-btn-danger data-count-delete" lay-event="delete">删除</a>
</script>
</div>
</div>
<script>
layui.use(['form', 'table'], function () {
var $ = layui.jquery,
form = layui.form,
table = layui.table;
table.render({
elem: '#currentTableId',
url: '${pageContext.request.contextPath}/typeAll',//查询类型数据
toolbar: '#toolbarDemo',
defaultToolbar: ['filter', 'exports', 'print', {
title: '提示',
layEvent: 'LAYTABLE_TIPS',
icon: 'layui-icon-tips'
}],
cols: [[
{type: "checkbox", width: 50},
//{field: 'id', width: 100, title: 'ID', sort: true},
{field: 'name', width: 180, title: '类型名称'},
{field: 'remarks', width: 280, title: '备注'},
{title: '操作', minWidth: 150, toolbar: '#currentTableBar', align: "center"}
]],
limits: [10, 15, 20, 25, 50, 100],
limit: 15, <!--默认显示15条-->
page: true,
skin: 'line',
id:'testReload'
});
var $ = layui.$, active = {
reload: function(){
var name = $('#name').val();
console.log(name)
//执行重载
table.reload('testReload', {
page: {
curr: 1 //重新从第 1 页开始
}
,where: {
name: name
}
}, 'data');
}
};
$('.demoTable .layui-btn').on('click', function(){
var type = $(this).data('type');
active[type] ? active[type].call(this) : '';
});
/**
* tool操作栏监听事件
*/
table.on('tool(currentTableFilter)', function (obj) {
var data=obj.data;
if (obj.event === 'edit') { // 监听修改操作
var index = layer.open({
title: '修改图书类型',
type: 2,
shade: 0.2,
maxmin:true,
shadeClose: true,
area: ['60%', '60%'],
content: '${pageContext.request.contextPath}/queryTypeInfoById?id='+data.id,
});
$(window).on("resize", function () {
layer.full(index);
});
} else if (obj.event === 'delete') { // 监听删除操作
layer.confirm('确定是否删除', function (index) {
//调用删除功能
deleteInfoByIds(data.id,index);
layer.close(index);
});
}
});
//监听表格复选框选择
table.on('checkbox(currentTableFilter)', function (obj) {
console.log(obj)
});
/**
* 获取选中记录的id信息
*/
function getCheackId(data){
var arr=new Array();
for(var i=0;i<data.length;i++){
arr.push(data[i].id);
}
//拼接id,变成一个字符串
return arr.join(",");
};
/**
* 提交删除功能
*/
function deleteInfoByIds(ids ,index){
//向后台发送请求
$.ajax({
url: "deleteType",
type: "POST",
data: {ids: ids},
success: function (result) {
if (result.code == 0) {//如果成功
layer.msg('删除成功', {
icon: 6,
time: 500
}, function () {
parent.window.location.reload();
var iframeIndex = parent.layer.getFrameIndex(window.name);
parent.layer.close(iframeIndex);
});
} else {
layer.msg("删除失败");
}
}
})
};
/**
* toolbar栏监听事件
*/
table.on('toolbar(currentTableFilter)', function (obj) {
if (obj.event === 'add') { // 监听添加操作
var index = layer.open({
title: '添加类型',
type: 2,
shade: 0.2,
maxmin:true,
shadeClose: true,
area: ['60%', '60%'],
content: '${pageContext.request.contextPath}/typeAdd',
});
$(window).on("resize", function () {
layer.full(index);
});
} else if (obj.event === 'delete') {
/*
1、提示内容必须删除大于0条
2、获取要删除记录的id信息
3、提交删除功能 ajax
*/
//获取选中的记录信息
var checkStatus=table.checkStatus(obj.config.id);
var data=checkStatus.data;
if(data.length==0){//如果没有选中信息
layer.msg("请选择要删除的记录信息");
}else{
//获取记录信息的id集合,拼接的ids
var ids=getCheackId(data);
layer.confirm('确定是否删除', function (index) {
//调用删除功能
deleteInfoByIds(ids,index);
layer.close(index);
});
}
}
});
});
</script>
</body>
</html>

@ -0,0 +1,82 @@
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core"%>
<%@ page isELIgnored="false" %>
<html>
<head>
<meta charset="utf-8">
<title>修改类型信息</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link rel="stylesheet" href="${pageContext.request.contextPath}/lib/layui-v2.5.5/css/layui.css" media="all">
<link rel="stylesheet" href="${pageContext.request.contextPath}/css/public.css" media="all">
<style>
body {
background-color: #ffffff;
}
</style>
</head>
<body>
<div class="layui-form layuimini-form">
<input type="hidden" name="id" value="${info.id}">
<div class="layui-form-item">
<label class="layui-form-label required">类型名称</label>
<div class="layui-input-block">
<input type="text" name="name" lay-verify="required" value="${info.name}" class="layui-input">
<tip>填写自己类型名称</tip>
</div>
</div>
<div class="layui-form-item layui-form-text">
<label class="layui-form-label">备注信息</label>
<div class="layui-input-block">
<textarea name="remarks" class="layui-textarea" > ${info.remarks}</textarea>
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn layui-btn-normal" lay-submit lay-filter="saveBtn">确认修改</button>
</div>
</div>
</div>
<script src="${pageContext.request.contextPath}/lib/layui-v2.5.5/layui.js" charset="utf-8"></script>
<script>
layui.use(['form'], function () {
var form = layui.form,
layer = layui.layer,
$ = layui.$;
//监听提交
form.on('submit(saveBtn)', function (data) {
var datas=data.field;//form单中的数据信息
//向后台发送数据提交添加
$.ajax({
url:"updateTypeSubmit",
type:"POST",
// data:datas,
contentType:"application/json",
data:JSON.stringify(datas),
success:function(result){
if(result.code==0){//如果成功
layer.msg('修改成功',{
icon:6,
time:500
},function(){
parent.window.location.reload();
var iframeIndex = parent.layer.getFrameIndex(window.name);
parent.layer.close(iframeIndex);
})
}else{
layer.msg("修改失败");
}
}
})
return false;
});
});
</script>
</body>
</html>

@ -0,0 +1,99 @@
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>首页</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link rel="stylesheet" href="${pageContext.request.contextPath}/lib/layui-v2.5.5/css/layui.css" media="all">
<link rel="stylesheet" href="${pageContext.request.contextPath}/lib/font-awesome-4.7.0/css/font-awesome.min.css" media="all">
<link rel="stylesheet" href="${pageContext.request.contextPath}/css/public.css" media="all">
<style>
.layui-card {border:1px solid #f2f2f2;border-radius:5px;}
.icon {margin-right:10px;color:#1aa094;}
.icon-cray {color:#ffb800!important;}
.icon-blue {color:#1e9fff!important;}
.icon-tip {color:#ff5722!important;}
.layuimini-qiuck-module {text-align:center;margin-top: 10px}
.layuimini-qiuck-module a i {display:inline-block;width:100%;height:60px;line-height:60px;text-align:center;border-radius:2px;font-size:30px;background-color:#F8F8F8;color:#333;transition:all .3s;-webkit-transition:all .3s;}
.layuimini-qiuck-module a cite {position:relative;top:2px;display:block;color:#666;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;font-size:14px;}
.welcome-module {width:100%;height:210px;}
.panel {background-color:#fff;border:1px solid transparent;border-radius:3px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}
.panel-body {padding:10px}
.panel-title {margin-top:0;margin-bottom:0;font-size:12px;color:inherit}
.label {display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em;margin-top: .3em;}
.layui-red {color:red}
.main_btn > p {height:40px;}
.layui-bg-number {background-color:#F8F8F8;}
.layuimini-notice:hover {background:#f6f6f6;}
.layuimini-notice {padding:7px 16px;clear:both;font-size:12px !important;cursor:pointer;position:relative;transition:background 0.2s ease-in-out;}
.layuimini-notice-title,.layuimini-notice-label {
padding-right: 70px !important;text-overflow:ellipsis!important;overflow:hidden!important;white-space:nowrap!important;}
.layuimini-notice-title {line-height:28px;font-size:14px;}
.layuimini-notice-extra {position:absolute;top:50%;margin-top:-8px;right:16px;display:inline-block;height:16px;color:#999;}
</style>
</head>
<body>
<div class="layuimini-container">
<div class="layui-col-md4">
<div class="layui-card">
<div class="layui-card-header"><i class="fa fa-bullhorn icon icon-tip"></i>系统公告</div>
<div class="layui-card-body layui-text">
<c:forEach var="notice" items="${noticeList}">
<div class="layuimini-notice">
<div class="layuimini-notice-title">${notice.topic}</div>
<div class="layuimini-notice-extra"><fmt:formatDate value="${notice.createDate}" pattern="yyyy-MM-dd HH:mm:ss" /></div>
<div class="layuimini-notice-content layui-hide">
${notice.content}
</div>
</div>
</c:forEach>
</div>
</div>
</div>
</div>
<script src="${pageContext.request.contextPath}/lib/layui-v2.5.5/layui.js" charset="utf-8"></script>
<script src="${pageContext.request.contextPath}/js/lay-config.js?v=1.0.4" charset="utf-8"></script>
<script>
layui.use(['layer', 'miniTab','echarts'], function () {
var $ = layui.jquery,
layer = layui.layer,
miniTab = layui.miniTab,
echarts = layui.echarts;
miniTab.listen();
/**
* 查看公告信息
**/
$('body').on('click', '.layuimini-notice', function () {
var title = $(this).children('.layuimini-notice-title').text(),
noticeTime = $(this).children('.layuimini-notice-extra').text(),
content = $(this).children('.layuimini-notice-content').html();
var html = '<div style="padding:15px 20px; text-align:justify; line-height: 22px;border-bottom:1px solid #e2e2e2;background-color: #2f4056;color: #ffffff">\n' +
'<div style="text-align: center;margin-bottom: 20px;font-weight: bold;border-bottom:1px solid #718fb5;padding-bottom: 5px"><h4 class="text-danger">' + title + '</h4></div>\n' +
'<div style="font-size: 12px">' + content + '</div>\n' +
'</div>\n';
parent.layer.open({
type: 1,
title: '系统公告'+'<span style="float: right;right: 1px;font-size: 12px;color: #b1b3b9;margin-top: 1px">'+noticeTime+'</span>',
area: '300px;',
shade: 0.8,
id: 'layuimini-notice',
btnAlign: 'c',
moveType: 1,
content:html
});
});
});
</script>
</body>
</html>

@ -0,0 +1,66 @@
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!--SpringMVC前端核心控制器启动Controller组件-->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--声明配置文件位置-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<!--懒汉式 饿汉式 可选创建servlet-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!--防乱码-->
<filter>
<filter-name>encoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--配置监听器在项目启动时同时启动Spring工厂使得Dao和Service以及Druid连接池启动-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!--配置静态资源-->
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.js</url-pattern>
<url-pattern>*.css</url-pattern>
<url-pattern>*.png</url-pattern>
<url-pattern>*.jpg</url-pattern>
<url-pattern>/api/**</url-pattern>
<url-pattern>/css/**</url-pattern>
<url-pattern>/images/**</url-pattern>
<url-pattern>/js/*</url-pattern>
<url-pattern>/lib/*</url-pattern>
<url-pattern>/page/*</url-pattern>
</servlet-mapping>
<!--配置spring文件路径-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring.xml</param-value>
</context-param>
</web-app>

@ -0,0 +1,4 @@
{
"code": 1,
"msg": "服务端清理缓存成功"
}

@ -0,0 +1,73 @@
{
"homeInfo": {
"title": "首页",
"href": "welcome"
},
"logoInfo": {
"title": "图书管理",
"image": "images/favicon.ico",
"href": ""
},
"menuInfo": [
{
"title": "功能管理",
"icon": "fa fa-bars",
"href": "",
"target": "_self",
"child": [
{
"title": "借阅管理",
"href": "lendListIndex",
"icon": "fa fa-window-maximize",
"target": "_self"
},
{
"title": "图书管理",
"href": "bookIndex",
"icon": "fa fa-book",
"target": "_self"
},
{
"title": "读者管理",
"href": "readerIndex",
"icon": "fa fa-credit-card",
"target": "_self"
},
{
"title": "类型管理",
"href": "typeIndex",
"icon": "fa fa-file-text",
"target": "_self"
},
{
"title": "公告管理",
"href": "noticeIndexOfBack",
"icon": "fa fa-bell",
"target": "_self"
},
{
"title": "管理员管理",
"href": "adminIndex",
"icon": "fa fa-user-circle-o",
"target": "_self"
}
]
},
{
"title": "统计分析",
"icon": "fa fa-bar-chart",
"href": "",
"target": "_self",
"child": [
{
"title": "统计分析",
"href": "statisticIndex",
"icon": "fa fa-superpowers",
"target": "_self"
}
]
}
]
}

@ -0,0 +1,34 @@
{
"homeInfo": {
"title": "首页",
"href": "welcome"
},
"logoInfo": {
"title": "图书馆管理",
"image": "images/favicon.ico",
"href": ""
},
"menuInfo": [
{
"title": "功能管理",
"icon": "fa fa-address-book",
"href": "",
"target": "_self",
"child": [
{
"title": "公告管理",
"href": "noticeIndexOfReader",
"icon": "fa fa-window-maximize",
"target": "_self"
},
{
"title": "借阅管理",
"href": "queryLookBookList2",
"icon": "fa fa-gears",
"target": "_self"
}
]
}
]
}

@ -0,0 +1,254 @@
{
"code": 0,
"msg": "",
"count": 19,
"data": [
{
"authorityId": 1,
"authorityName": "系统管理",
"orderNumber": 1,
"menuUrl": null,
"menuIcon": "layui-icon-set",
"createTime": "2018/06/29 11:05:41",
"authority": null,
"checked": 0,
"updateTime": "2018/07/13 09:13:42",
"isMenu": 0,
"parentId": -1
},
{
"authorityId": 2,
"authorityName": "用户管理",
"orderNumber": 2,
"menuUrl": "system/user",
"menuIcon": null,
"createTime": "2018/06/29 11:05:41",
"authority": null,
"checked": 0,
"updateTime": "2018/07/13 09:13:42",
"isMenu": 0,
"parentId": 1
},
{
"authorityId": 3,
"authorityName": "查询用户",
"orderNumber": 3,
"menuUrl": "",
"menuIcon": "",
"createTime": "2018/07/21 13:54:16",
"authority": "user:view",
"checked": 0,
"updateTime": "2018/07/21 13:54:16",
"isMenu": 1,
"parentId": 2
},
{
"authorityId": 4,
"authorityName": "添加用户",
"orderNumber": 4,
"menuUrl": null,
"menuIcon": null,
"createTime": "2018/06/29 11:05:41",
"authority": "user:add",
"checked": 0,
"updateTime": "2018/07/13 09:13:42",
"isMenu": 1,
"parentId": 2
},
{
"authorityId": 5,
"authorityName": "修改用户",
"orderNumber": 5,
"menuUrl": null,
"menuIcon": null,
"createTime": "2018/06/29 11:05:41",
"authority": "user:edit",
"checked": 0,
"updateTime": "2018/07/13 09:13:42",
"isMenu": 1,
"parentId": 2
},
{
"authorityId": 6,
"authorityName": "删除用户",
"orderNumber": 6,
"menuUrl": null,
"menuIcon": null,
"createTime": "2018/06/29 11:05:41",
"authority": "user:delete",
"checked": 0,
"updateTime": "2018/07/13 09:13:42",
"isMenu": 1,
"parentId": 2
},
{
"authorityId": 7,
"authorityName": "角色管理",
"orderNumber": 7,
"menuUrl": "system/role",
"menuIcon": null,
"createTime": "2018/06/29 11:05:41",
"authority": null,
"checked": 0,
"updateTime": "2018/07/13 09:13:42",
"isMenu": 0,
"parentId": 1
},
{
"authorityId": 8,
"authorityName": "查询角色",
"orderNumber": 8,
"menuUrl": "",
"menuIcon": "",
"createTime": "2018/07/21 13:54:59",
"authority": "role:view",
"checked": 0,
"updateTime": "2018/07/21 13:54:58",
"isMenu": 1,
"parentId": 7
},
{
"authorityId": 9,
"authorityName": "添加角色",
"orderNumber": 9,
"menuUrl": "",
"menuIcon": "",
"createTime": "2018/06/29 11:05:41",
"authority": "role:add",
"checked": 0,
"updateTime": "2018/07/13 09:13:42",
"isMenu": 1,
"parentId": 7
},
{
"authorityId": 10,
"authorityName": "修改角色",
"orderNumber": 10,
"menuUrl": "",
"menuIcon": "",
"createTime": "2018/06/29 11:05:41",
"authority": "role:edit",
"checked": 0,
"updateTime": "2018/07/13 09:13:42",
"isMenu": 1,
"parentId": 7
},
{
"authorityId": 11,
"authorityName": "删除角色",
"orderNumber": 11,
"menuUrl": "",
"menuIcon": "",
"createTime": "2018/06/29 11:05:41",
"authority": "role:delete",
"checked": 0,
"updateTime": "2018/07/13 09:13:42",
"isMenu": 1,
"parentId": 7
},
{
"authorityId": 12,
"authorityName": "角色权限管理",
"orderNumber": 12,
"menuUrl": "",
"menuIcon": "",
"createTime": "2018/06/29 11:05:41",
"authority": "role:auth",
"checked": 0,
"updateTime": "2018/07/13 15:27:18",
"isMenu": 1,
"parentId": 7
},
{
"authorityId": 13,
"authorityName": "权限管理",
"orderNumber": 13,
"menuUrl": "system/authorities",
"menuIcon": null,
"createTime": "2018/06/29 11:05:41",
"authority": null,
"checked": 0,
"updateTime": "2018/07/13 15:45:13",
"isMenu": 0,
"parentId": 1
},
{
"authorityId": 14,
"authorityName": "查询权限",
"orderNumber": 14,
"menuUrl": "",
"menuIcon": "",
"createTime": "2018/07/21 13:55:57",
"authority": "authorities:view",
"checked": 0,
"updateTime": "2018/07/21 13:55:56",
"isMenu": 1,
"parentId": 13
},
{
"authorityId": 15,
"authorityName": "添加权限",
"orderNumber": 15,
"menuUrl": "",
"menuIcon": "",
"createTime": "2018/06/29 11:05:41",
"authority": "authorities:add",
"checked": 0,
"updateTime": "2018/06/29 11:05:41",
"isMenu": 1,
"parentId": 13
},
{
"authorityId": 16,
"authorityName": "修改权限",
"orderNumber": 16,
"menuUrl": "",
"menuIcon": "",
"createTime": "2018/07/13 09:13:42",
"authority": "authorities:edit",
"checked": 0,
"updateTime": "2018/07/13 09:13:42",
"isMenu": 1,
"parentId": 13
},
{
"authorityId": 17,
"authorityName": "删除权限",
"orderNumber": 17,
"menuUrl": "",
"menuIcon": "",
"createTime": "2018/06/29 11:05:41",
"authority": "authorities:delete",
"checked": 0,
"updateTime": "2018/06/29 11:05:41",
"isMenu": 1,
"parentId": 13
},
{
"authorityId": 18,
"authorityName": "登录日志",
"orderNumber": 18,
"menuUrl": "system/loginRecord",
"menuIcon": null,
"createTime": "2018/06/29 11:05:41",
"authority": null,
"checked": 0,
"updateTime": "2018/06/29 11:05:41",
"isMenu": 0,
"parentId": 1
},
{
"authorityId": 19,
"authorityName": "查询登录日志",
"orderNumber": 19,
"menuUrl": "",
"menuIcon": "",
"createTime": "2018/07/21 13:56:43",
"authority": "loginRecord:view",
"checked": 0,
"updateTime": "2018/07/21 13:56:43",
"isMenu": 1,
"parentId": 18
}
]
}

@ -0,0 +1,127 @@
{
"code": 0,
"msg": "",
"count": 1000,
"data": [
{
"id": 10000,
"username": "user-0",
"sex": "女",
"city": "城市-0",
"sign": "签名-0",
"experience": 255,
"logins": 24,
"wealth": 82830700,
"classify": "作家",
"score": 57
},
{
"id": 10001,
"username": "user-1",
"sex": "男",
"city": "城市-1",
"sign": "签名-1",
"experience": 884,
"logins": 58,
"wealth": 64928690,
"classify": "词人",
"score": 27
},
{
"id": 10002,
"username": "user-2",
"sex": "女",
"city": "城市-2",
"sign": "签名-2",
"experience": 650,
"logins": 77,
"wealth": 6298078,
"classify": "酱油",
"score": 31
},
{
"id": 10003,
"username": "user-3",
"sex": "女",
"city": "城市-3",
"sign": "签名-3",
"experience": 362,
"logins": 157,
"wealth": 37117017,
"classify": "诗人",
"score": 68
},
{
"id": 10004,
"username": "user-4",
"sex": "男",
"city": "城市-4",
"sign": "签名-4",
"experience": 807,
"logins": 51,
"wealth": 76263262,
"classify": "作家",
"score": 6
},
{
"id": 10005,
"username": "user-5",
"sex": "女",
"city": "城市-5",
"sign": "签名-5",
"experience": 173,
"logins": 68,
"wealth": 60344147,
"classify": "作家",
"score": 87
},
{
"id": 10006,
"username": "user-6",
"sex": "女",
"city": "城市-6",
"sign": "签名-6",
"experience": 982,
"logins": 37,
"wealth": 57768166,
"classify": "作家",
"score": 34
},
{
"id": 10007,
"username": "user-7",
"sex": "男",
"city": "城市-7",
"sign": "签名-7",
"experience": 727,
"logins": 150,
"wealth": 82030578,
"classify": "作家",
"score": 28
},
{
"id": 10008,
"username": "user-8",
"sex": "男",
"city": "城市-8",
"sign": "签名-8",
"experience": 951,
"logins": 133,
"wealth": 16503371,
"classify": "词人",
"score": 14
},
{
"id": 10009,
"username": "user-9",
"sex": "女",
"city": "城市-9",
"sign": "签名-9",
"experience": 484,
"logins": 25,
"wealth": 86801934,
"classify": "词人",
"score": 75
}
]
}

@ -0,0 +1,23 @@
{
"code": 0,
"msg": "",
"count": 16,
"data": [
{ "id":"001", "username":"张玉林", "sex":"女" },
{ "id":"002", "username":"刘晓军", "sex":"男" },
{ "id":"003", "username":"张恒", "sex":"男" },
{ "id":"004", "username":"朱一", "sex":"男" },
{ "id":"005", "username":"刘佳能", "sex":"女" },
{ "id":"006", "username":"晓梅", "sex":"女" },
{ "id":"007", "username":"马冬梅", "sex":"女" },
{ "id":"008", "username":"刘晓庆", "sex":"女" },
{ "id":"009", "username":"刘晓庆", "sex":"女" },
{ "id":"010", "username":"刘晓庆", "sex":"女" },
{ "id":"011", "username":"刘晓庆", "sex":"女" },
{ "id":"012", "username":"刘晓庆", "sex":"女" },
{ "id":"013", "username":"刘晓庆", "sex":"女" },
{ "id":"014", "username":"刘晓庆", "sex":"女" },
{ "id":"015", "username":"刘晓庆", "sex":"女" },
{ "id":"016", "username":"刘晓庆", "sex":"女" }
]
}

@ -0,0 +1,10 @@
{
"code": 1,
"msg": "上传成功",
"data": {
"url": [
"../images/logo.png",
"../images/captcha.jpg"
]
}
}

@ -0,0 +1,911 @@
/**
*/
/**头部-配色*/
.layui-layout-admin .layui-header {
/*background-color: #1aa094 !important;*/
}
.layui-header > ul > .layui-nav-item.layui-this, .layuimini-tool i:hover {
background-color: #197971 !important;
}
.layui-header .layuimini-header-content > ul > .layui-nav-item.layui-this, .layuimini-tool i:hover {
background-color: #197971 !important;
}
/**logo-配色*/
.layui-layout-admin .layuimini-logo {
background-color: #243346 !important;
}
/**左侧-配色*/
.layui-side.layui-bg-black, .layui-side.layui-bg-black > .layuimini-menu-left > ul {
background-color: #2f4056 !important;
}
.layuimini-menu-left .layui-nav .layui-nav-child a:hover:not(.layui-this) {
background-color: #3b3f4b;
}
/**左侧菜单选中-配色*/
.layui-layout-admin .layui-nav-tree .layui-this, .layui-layout-admin .layui-nav-tree .layui-this > a, .layui-layout-admin .layui-nav-tree .layui-nav-child dd.layui-this, .layui-layout-admin .layui-nav-tree .layui-nav-child dd.layui-this a {
background-color: #1aa094 !important;
}
/**头部样式 */
.layui-layout-admin .header {
position: fixed;
left: 0;
right: 0;
top: 0;
bottom: 0;
}
.layuimini-header-menu, .layui-header {
height: 60px !important;
}
.layuimini-header-menu > .layui-nav-item {
color: #1b1d21;
height: 60px !important;
line-height: 60px !important;
}
.layui-header > .layui-layout-right > .layui-nav-item {
height: 60px !important;
line-height: 60px !important;
}
.layui-layout-left {
left: 295px !important;
}
.layui-nav.layui-layout-left.layuimini-header-menu.layuimini-pc-show {
font-weight: bold;
transition: all .2s;
}
/**logo演示通用 */
.layui-layout-admin .layuimini-logo {
font-weight: bold;
color: #ffffff !important;
height: 60px !important;
line-height: 60px !important;
overflow: hidden;
line-height: 64px;
transition: all .2s !important;
}
.layui-layout-admin .layuimini-logo img {
display: inline-block;
height: 40px;
vertical-align: middle;
}
.layui-layout-admin .layuimini-logo h1 {
display: inline-block;
margin: 0 0 0 12px;
color: #ffffff;
font-weight: 600;
font-size: 20px;
font-family: Avenir, Helvetica Neue, Arial, Helvetica, sans-serif;
vertical-align: middle;
}
/**缩放工具(通用) */
.layuimini-tool {
position: absolute !important;
top: 0;
left: 235px;
width: 60px;
height: 100%;
line-height: 60px;
text-align: center;
color: #ffffff !important;
transition: all .2s;
}
/**缩放工具(缩放) */
.layuimini-tool i {
display: block;
color: #bbe3df;
width: 32px;
height: 32px;
line-height: 32px;
border-radius: 3px;
text-align: center;
margin-top: 15px;
cursor: pointer;
}
/**tab选项卡 */
.layuimini-tab {
margin: 0px;
overflow: hidden;
height: 100% !important;
}
.layuimini-tab .layui-tab-content {
height: calc(100% - 37px) !important;
}
.layuimini-tab .layui-tab-content .layui-tab-item {
height: 100%;
}
.layuimini-tab .layui-tab-content {
padding: 0px;
}
.layuimini-tab .layui-tab-title {
border: none;
border: 1px solid whitesmoke;
background-color: white;
}
.layuimini-tab .layui-tab-title li {
border-right: 1px solid whitesmoke;
color: dimgray;
}
.layuimini-tab .layui-tab-title .layui-tab-bar {
display: none;
}
.layuimini-tab .layui-tab-title .layui-this:after {
display: none;
}
.layuimini-tab .layui-tab-title .layuimini-tab-active {
display: inline-block;
background-color: lightgray;
width: 9px;
height: 9px;
border-radius: 30px;
margin-right: 5px;
}
.layuimini-tab .layui-tab-title .layui-this .layuimini-tab-active {
background-color: #1aa094;
}
.layuimini-tab > .layui-tab-title, .layuimini-tab > .close-box {
height: 35px !important;
}
.layuimini-tab > .layui-tab-title li, .layuimini-tab > .close-box li {
line-height: 35px !important;
}
.layuimini-tab .layui-tab-title span {
color: #acafb1;
}
.layuimini-tab .layui-tab-title .layui-this span {
color: dimgray;
}
.layuimini-tab .layui-tab-title .layui-tab-close {
font-size: 12px !important;
width: 14px !important;
height: 14px !important;
line-height: 16px !important;
}
.layuimini-tab .layui-tab-title .layui-tab-close:hover {
border-radius: 4em;
background: #ff5722;
}
.layuimini-tab .layui-tab-title .disable-close + .layui-tab-close {
display: none;
}
.layuimini-tab .layui-tab-title .able-close + .layui-tab-close {
display: inline-block;
}
.layuimini-tab .layui-tab-control > li {
position: absolute;
top: 0px;
height: 35px;
line-height: 35px;
width: 35px;
text-align: center;
background-color: white;
border-top: whitesmoke 1px solid;
border-bottom: whitesmoke 1px solid;
}
.layuimini-tab .layuimini-tab-roll-left {
left: 0px;
border-right: whitesmoke 1px solid;
border-left: whitesmoke 1px solid;
}
.layuimini-tab .layuimini-tab-roll-right {
right: 35px;
border-left: 1px solid whitesmoke;
}
.layuimini-tab .layui-tab-tool {
right: 0px;
border-left: 1px solid whitesmoke;
}
.layuimini-tab .layui-tab-control .layui-tab-tool,
.layuimini-tab .layui-tab-control .layuimini-tab-roll-left,
.layuimini-tab .layui-tab-control .layuimini-tab-roll-right {
display: none;
}
.layuimini-tab.layui-tab-roll .layui-tab-control .layuimini-tab-roll-left,
.layuimini-tab.layui-tab-roll .layui-tab-control .layuimini-tab-roll-right {
display: block;
}
.layuimini-tab.layui-tab-roll .layui-tab-control .layuimini-tab-roll-right {
right: 0px;
border-right: 1px solid whitesmoke;
}
.layuimini-tab.layui-tab-roll .layui-tab-title {
padding-left: 35px;
padding-right: 35px;
}
.layuimini-tab.layui-tab-tool .layui-tab-control .layui-tab-tool {
display: block;
}
.layuimini-tab.layui-tab-tool .layui-tab-title {
padding-left: 0px;
padding-right: 35px;
}
.layuimini-tab.layui-tab-rollTool .layui-tab-title {
padding-left: 35px;
padding-right: 80px;
}
.layuimini-tab.layui-tab-rollTool .layui-tab-control .layuimini-tab-roll-left,
.layuimini-tab.layui-tab-rollTool .layui-tab-control .layuimini-tab-roll-right,
.layuimini-tab.layui-tab-rollTool .layui-tab-control .layui-tab-tool {
display: block;
}
.layuimini-tab .layui-tab-tool .layui-nav {
position: absolute;
height: 43px !important;
top: 0;
width: 100%;
height: 100%;
padding: 0;
background: 0 0;
}
.layuimini-tab .layui-tab-tool .layui-nav-item {
height: 35px;
}
.layuimini-tab .layui-tab-tool .layui-nav-bar {
display: none;
}
.layuimini-tab .layui-tab-tool .layui-nav-child {
left: auto;
top: 45px;
right: 3px;
width: 120px;
border: 1px solid whitesmoke;
}
.layuimini-tab .layui-tab-tool .layui-this a {
background-color: #009688;
}
.layuimini-tab-loading {
position: absolute;
display: none;
width: 100%;
height: calc(100% - 37px);
top: 37px;
z-index: 19;
background-color: #fff
}
.layuimini-tab-loading.close {
animation: close 1s;
-webkit-animation: close 1s;
animation-fill-mode: forwards;
}
/**左侧菜单栏 (通用) */
.layui-side.layui-bg-black {
transition: all .2s;
}
.layui-side.layui-bg-black > .layuimini-menu-left > ul {
transition: all .2s;
}
.layui-side.layui-bg-black > .layuimini-menu-left > ul > .layui-nav-item:first-child {
border-top: 1px solid #4b5461;
}
.layuimini-menu-left .layui-nav .layui-nav-item a {
height: 40px;
line-height: 40px;
padding-right: 30px;
}
.layuimini-menu-left .layui-nav .layui-nav-item > a {
padding-top: 5px;
padding-bottom: 5px;
}
.layuimini-menu-left .layui-nav .layui-nav-child .layui-nav-child {
background: 0 0 !important
}
.layuimini-menu-left .layui-nav .layui-nav-more {
right: 15px;
}
.layuimini-menu-left .layui-nav .layui-nav-item a:hover {
background-color: transparent !important;
}
.layuimini-menu-left .layui-nav {
background-color: transparent !important;
}
/**左侧菜单栏 (正常) */
.layui-layout-body .layui-nav-itemed .layui-nav-child a, .layui-layout-body .layuimini-menu-left .layui-nav .layui-nav-child a {
padding-left: 35px;
}
.layui-layout-body .layuimini-menu-left .layui-nav .layui-nav-child .layui-nav-child a {
padding-left: 45px;
}
.layui-layout-body .layuimini-menu-left .layui-nav .layui-nav-child .layui-nav-child .layui-nav-child a {
padding-left: 55px;
}
.layui-layout-body .layuimini-menu-left .layui-nav .layui-nav-child .layui-nav-child .layui-nav-child .layui-nav-child a {
padding-left: 65px;
}
.layui-layout-body .layuimini-menu-left .layui-nav .layui-nav-itemed > .layui-nav-child {
padding: 5px 0;
}
/**内容主体(通用) */
.layui-layout-admin .layui-body {
overflow: hidden;
bottom: 0px !important;
top: 60px !important;
transition: all .2s;
}
/**选择配色方案 */
.layuimini-color .color-title {
padding: 10px 0 10px 20px;
border-bottom: 1px solid #d9dada;
margin-bottom: 8px;
}
.layuimini-color .color-content {
padding: 10px 5px 0 5px;
}
.layuimini-color .color-content ul {
list-style: none;
text-align: center;
}
.layuimini-color .color-content ul li {
position: relative;
display: inline-block;
vertical-align: top;
width: 80px;
height: 50px;
margin: 0 15px 15px 0;
padding: 2px 2px 4px 2px;
background-color: #f2f2f2;
cursor: pointer;
font-size: 12px;
color: #666;
}
.layuimini-color .color-content li.layui-this:after, .layuimini-color .color-content li:hover:after {
width: 100%;
height: 100%;
padding: 4px;
top: -5px;
left: -5px;
border-color: #d8d8d8;
opacity: 1;
}
.layuimini-color .color-content li:after {
content: '';
position: absolute;
z-index: 20;
top: 50%;
left: 50%;
width: 1px;
height: 0;
border: 1px solid #f2f2f2;
transition: all .3s;
-webkit-transition: all .3s;
opacity: 0;
}
/**其它 */
.layui-tab-item {
width: 100% !important;
height: 100% !important;
}
.layui-nav-item.layui-this {
background-color: #1b1d21;
}
.layui-width-height {
width: 100%;
height: 95%;
}
.layui-tab {
margin: 0 0 0 0;
z-index: 99999;
}
.text-center {
height: 30px !important;
line-height: 30px !important;
text-align: center !important;
}
.layui-nav {
padding: 0 !important;
}
.layui-nav .layui-this:after, .layui-nav-bar, .layui-nav-tree .layui-nav-itemed:after {
width: 0 !important;
height: 0 !important;
}
.layui-layout-admin .layui-side {
top: 60px !important;
}
.layui-tab-card {
box-shadow: 0px 0px 0px #888888;
border-bottom: 0;
}
/**自定义滚动条样式 */
::-webkit-scrollbar {
display: none
}
/*移动端遮罩层*/
.layuimini-make {
position: fixed;
left: 0;
right: 0;
bottom: 0;
top: 0;
z-index: 1000;
background: rgba(0, 0, 0, .5);
display: none;
}
.layuimini-mini .layui-header {
z-index: 1001;
}
/**初始化加载层*/
.layuimini-loader {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: #ffffff;
z-index: 999999;
}
.layuimini-loader .layuimini-loader-inner {
display: block;
position: relative;
left: 50%;
top: 50%;
width: 150px;
height: 150px;
margin: -75px 0 0 -75px;
border-radius: 50%;
border: 3px solid transparent;
border-top-color: #1E9FFF;
animation: spin 2s linear infinite;
}
.layuimini-loader .layuimini-loader-inner:before {
content: "";
position: absolute;
top: 5px;
left: 5px;
right: 5px;
bottom: 5px;
border-radius: 50%;
border: 3px solid transparent;
border-top-color: #1E9FFF;
animation: spin 3s linear infinite;
}
.layuimini-loader .layuimini-loader-inner:after {
content: "";
position: absolute;
top: 15px;
left: 15px;
right: 15px;
bottom: 15px;
border-radius: 50%;
border: 3px solid transparent;
border-top-color: #1E9FFF;
animation: spin 1.5s linear infinite;
}
@keyframes spin {
0% {
transform: rotate(0deg);
}
to {
transform: rotate(1turn);
}
}
/*系统设置*/
.layuimini-color .layui-word-aux {
position: absolute;
left: 60px;
top: 12px;
font-size: 12px;
}
.layuimini-color .layui-input-block {
margin-left: 15px;
min-height: 36px;
}
.layuimini-color .more-menu-list {
width: 100%;
margin-top: 30px;
}
.layuimini-color .more-menu-item:first-child {
border-top: 1px solid #e8e8e8;
}
.layuimini-color .more-menu-item .layui-icon {
font-size: 18px;
padding-right: 10px;
}
.layuimini-color .more-menu-item {
color: #595959;
height: 50px;
line-height: 50px;
font-size: 16px;
padding: 0 25px;
border-bottom: 1px solid #e8e8e8;
font-style: normal;
display: block;
}
.layuimini-color .more-menu-item:hover {
background-color: whitesmoke;
}
.layuimini-color .more-menu-item:after {
color: #8c8c8c;
right: 16px;
content: "\e602";
position: absolute;
font-family: layui-icon !important;
}
/**
*/
.layuimini-tab-mousedown {
display: none;
width: 80px;
position: absolute;
top: 0px !important;
left: 0px !important;
}
.layuimini-tab-mousedown dd a {
padding: 0 15px;
color: #484545;
}
.layuimini-tab-make{
position: absolute;
top: 36px;
bottom: 0px;
width: 100%;
background: rgb(255, 255, 255,0);
padding: 0px;
overflow: hidden;
}
/**
*/
.popup-tips .layui-layer-TipsG{
display: none;
}
.popup-tips.layui-layer-tips .layui-layer-content{
padding: 0;
}
.popup-tips .layui-nav-tree{
width: 150px;
border-radius: 10px;
}
/**左侧菜单字体间距*/
.layuimini-menu-left .layui-nav-item a span {
letter-spacing: 1px;
}
/**头部菜单字体间距*/
.layui-layout-admin .layui-header .layuimini-header-menu.layuimini-pc-show,.layui-layout-admin .layui-header .layuimini-header-menu.layuimini-mobile-show {
letter-spacing: 1px;
}
/**左侧菜单更多下拉样式*/
.layuimini-menu-left .layui-nav-more,.layuimini-menu-left-zoom .layui-nav-more {
font-family: layui-icon !important;
font-size: 12px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
overflow: hidden;
width: auto;
height: auto;
line-height: normal;
border: none;
display: inline-block;
margin-top: -6px !important;
}
.layuimini-menu-left .layui-nav-child .layui-nav-more {
margin-top: -6px !important;
}
.layuimini-menu-left .layui-nav .layui-nav-mored,.layuimini-menu-left .layui-nav-itemed>a .layui-nav-more{
margin-top: -9px!important;
}
.layuimini-menu-left-zoom.layui-nav .layui-nav-mored,.layuimini-menu-left-zoom.layui-nav-itemed>a .layui-nav-more{
margin-top: -9px!important;
}
.layuimini-menu-left .layui-nav-more:before,.layuimini-menu-left-zoom .layui-nav-more:before {
content: "\e61a";
}
.layuimini-menu-left .layui-nav-itemed > a > .layui-nav-more,.layuimini-menu-left-zoom .layui-nav-itemed > a > .layui-nav-more {
transform: rotate(180deg);
-ms-transform: rotate(180deg);
-moz-transform: rotate(180deg);
-webkit-transform: rotate(180deg);
-o-transform: rotate(180deg);
width: 12px;
text-align: center;
border-style:none;
}
.layuimini-menu-left .layui-nav-itemed > a > .layui-nav-more:before,.layuimini-menu-left-zoom .layui-nav-itemed > a > .layui-nav-more:before {
content: '\e61a';
background-color: transparent;
display: inline-block;
vertical-align: middle;
}
/**修复左侧菜单字体不对齐的问题*/
.layuimini-menu-left .layui-nav-item a .fa,.layuimini-menu-left .layui-nav-item a .layui-icon{
width: 20px;
}
/**
PC
*/
@media screen and (min-width: 1025px) {
/**头部样式(缩放) */
.layuimini-mini .layui-layout-left.layuimini-header-menu.layuimini-pc-show {
left: 155px !important;
}
/**logo演示缩放 */
.layuimini-mini .layui-layout-admin .layuimini-logo {
width: 60px !important;
}
.layuimini-mini .layui-layout-admin .layuimini-logo h1 {
display: none;
}
/**左侧菜单栏(缩放) */
.layuimini-mini .layuimini-menu-left {
width: 80px !important;
}
.layuimini-mini .layui-side.layui-bg-black, .layuimini-mini .layuimini-menu-left > ul, .layuimini-mini .layuimini-menu-left > ul li i {
width: 60px !important;
}
.layuimini-mini .layuimini-menu-left > ul li span:first-child {
display: none;
}
.layuimini-mini .layuimini-menu-left > ul li span:last-child {
float: right;
right: 7px;
}
.layuimini-mini .layuimini-menu-left .layui-nav .layui-nav-item a {
height: 40px;
line-height: 40px;
padding-right: 0px !important;
}
/**内容主体(缩放) */
.layuimini-mini .layui-layout-admin .layui-body {
left: 60px !important;
}
.layuimini-mini .layuimini-tool {
left: 95px !important;
}
.layuimini-pc-show{
display: block;
}
.layuimini-mobile-show{
display: none;
}
/**菜单缩放*/
.layuimini-mini .layuimini-menu-left .layui-nav-more,.layuimini-mini .layuimini-menu-left .layui-nav-child{
display: none;!important;
}
}
/**
*/
@media screen and (max-width: 1024px) {
.layuimini-pc-show{
display: none;
}
.layuimini-mobile-show{
display: block;
}
.layuimini-header-content {
left: 0;
}
.layui-layout-admin .layui-body .layui-tab-item.layui-show {
border-top: 1px solid #e2e2e2;
}
.layuimini-all .layui-layout-left.layuimini-header-menu {
left: 15px !important
}
.layuimini-mini .layui-layout-left.layuimini-header-menu {
left: 205px !important
}
.layui-layout-admin .layui-nav.layui-layout-right > li:not(.layuimini-setting) {
width: 40px !important;
}
.layui-layout-admin .layui-nav.layui-layout-right > li:not(.layuimini-setting) a {
padding: 0 15px;
}
.layuimini-all .layui-layout-admin .layui-body {
left: 0px !important;
}
.layuimini-mini .layui-layout-admin .layuimini-menu-left, .layuimini-mini .layui-header .layuimini-logo {
left: 0;
transition: left .2s;
z-index: 1001 !important;
}
.layuimini-all .layui-layout-admin .layuimini-menu-left, .layuimini-all .layui-header .layuimini-logo {
left: -200px;
transition: left .2s;
top: 0;
z-index: 1002;
}
.layuimini-mini .layui-layout-admin .layui-body {
left: 0!important;
transition: left .2s;
top: 0;
z-index: 998;
}
.layuimini-mini .layuimini-make {
display: block;
}
.layuimini-multi-module .layuimini-header-content .layuimini-tool {
display: none;
}
.layuimini-single-module .layuimini-header-content .layuimini-tool {
left: 15px;
}
.layuimini-mini .layuimini-site-mobile {
display: none !important;
}
.layuimini-site-mobile {
display: block !important;
position: fixed;
z-index: 100000;
bottom: 15px;
left: 15px;
width: 40px;
height: 40px;
line-height: 40px;
border-radius: 2px;
text-align: center;
background-color: rgba(0, 0, 0, .7);
color: #fff;
}
.layuimini-header-content {
z-index: 997;
}
/*修复UC之类的浏览器点击无效*/
.layuimini-make {
cursor: pointer;
}
.layuimini-site-mobile {
cursor: pointer;
}
}
@media screen and (max-width: 550px){
/**头部右侧数据*/
.layuimini-multi-module.layuimini-mini .layuimini-header-content .layui-layout-right {
display: none;
}
}

@ -0,0 +1,70 @@
body {
margin: 15px 15px 15px 15px;
background: #f2f2f2;
}
.layuimini-container {
border: 1px solid #f2f2f2;
border-radius: 5px;
background-color: #ffffff
}
.layuimini-main {
margin: 10px 10px 10px 10px;
}
/**必填红点 */
.layuimini-form > .layui-form-item > .required:after {
content: '*';
color: red;
position: absolute;
margin-left: 4px;
font-weight: bold;
line-height: 1.8em;
top: 6px;
right: 5px;
}
.layuimini-form > .layui-form-item > .layui-form-label {
width: 120px !important;
}
.layuimini-form > .layui-form-item > .layui-input-block {
margin-left: 150px !important;
}
.layuimini-form > .layui-form-item > .layui-input-block > tip {
display: inline-block;
margin-top: 10px;
line-height: 10px;
font-size: 10px;
color: #a29c9c;
}
/**搜索框*/
.layuimini-container .table-search-fieldset {
margin: 0;
border: 1px solid #e6e6e6;
padding: 10px 20px 5px 20px;
color: #6b6b6b;
}
/**自定义滚动条样式 */
::-webkit-scrollbar {
width: 6px;
height: 6px
}
::-webkit-scrollbar-track {
background-color: transparent;
-webkit-border-radius: 2em;
-moz-border-radius: 2em;
border-radius: 2em;
}
::-webkit-scrollbar-thumb {
background-color: #9c9da0;
-webkit-border-radius: 2em;
-moz-border-radius: 2em;
border-radius: 2em
}

@ -0,0 +1,95 @@
/*头部右侧背景色 headerRightBg */
.layui-layout-admin .layui-header {
/*background-color: #ffffff !important;*/
}
/*头部右侧选中背景色 headerRightBgThis */
.layui-layout-admin .layui-header .layuimini-header-content > ul > .layui-nav-item.layui-this, .layuimini-tool i:hover {
background-color: #e4e4e4 !important;
}
/*头部右侧字体颜色 headerRightColor */
.layui-layout-admin .layui-header .layui-nav .layui-nav-item a {
color: rgba(107, 107, 107, 0.7);
}
/**头部右侧下拉字体颜色 headerRightChildColor */
.layui-layout-admin .layui-header .layui-nav .layui-nav-item .layui-nav-child a {
color: rgba(107, 107, 107, 0.7) !important;
}
/*头部右侧鼠标选中 headerRightColorThis */
.layui-header .layuimini-menu-header-pc.layui-nav .layui-nav-item a:hover, .layui-header .layuimini-header-menu.layuimini-pc-show.layui-nav .layui-this a {
color: #565656 !important;
}
/*头部右侧更多下拉颜色 headerRightNavMore */
.layui-header .layui-nav .layui-nav-more {
border-top-color: rgba(160, 160, 160, 0.7) !important;
}
/*头部右侧更多下拉颜色 headerRightNavMore */
.layui-header .layui-nav .layui-nav-mored, .layui-header .layui-nav-itemed > a .layui-nav-more {
border-color: transparent transparent rgba(160, 160, 160, 0.7) !important;
}
/**头部右侧更多下拉配置色 headerRightNavMoreBg headerRightNavMoreColor */
.layui-header .layui-nav .layui-nav-child dd.layui-this a, .layui-header .layui-nav-child dd.layui-this, .layui-layout-admin .layui-header .layui-nav .layui-nav-item .layui-nav-child .layui-this a {
background-color: #1E9FFF !important;
color: #ffffff !important;
}
/*头部缩放按钮样式 headerRightToolColor */
.layui-layout-admin .layui-header .layuimini-tool i {
color: #565656;
}
/*logo背景颜色 headerLogoBg */
.layui-layout-admin .layuimini-logo {
background-color: #192027 !important;
}
/*logo字体颜色 headerLogoColor */
.layui-layout-admin .layuimini-logo h1 {
color: rgb(191, 187, 187);
}
/*左侧菜单更多下拉样式 leftMenuNavMore */
.layuimini-menu-left .layui-nav .layui-nav-more, .layuimini-menu-left-zoom.layui-nav .layui-nav-more {
border-top-color: rgb(191, 187, 187);
}
/*左侧菜单更多下拉样式 leftMenuNavMore */
.layuimini-menu-left .layui-nav .layui-nav-mored, .layuimini-menu-left .layui-nav-itemed > a .layui-nav-more, .layuimini-menu-left-zoom.layui-nav .layui-nav-mored, .layuimini-menu-left-zoom.layui-nav-itemed > a .layui-nav-more {
border-color: transparent transparent rgb(191, 187, 187) !important;
}
/*左侧菜单背景 leftMenuBg */
.layui-side.layui-bg-black, .layui-side.layui-bg-black > .layuimini-menu-left > ul, .layuimini-menu-left-zoom > ul {
background-color: #28333E !important;
}
/*左侧菜单选中背景 leftMenuBgThis */
.layuimini-menu-left .layui-nav-tree .layui-this, .layuimini-menu-left .layui-nav-tree .layui-this > a, .layuimini-menu-left .layui-nav-tree .layui-nav-child dd.layui-this, .layuimini-menu-left .layui-nav-tree .layui-nav-child dd.layui-this a, .layuimini-menu-left-zoom.layui-nav-tree .layui-this, .layuimini-menu-left-zoom.layui-nav-tree .layui-this > a, .layuimini-menu-left-zoom.layui-nav-tree .layui-nav-child dd.layui-this, .layuimini-menu-left-zoom.layui-nav-tree .layui-nav-child dd.layui-this a {
background-color: #1E9FFF !important
}
/*左侧菜单子菜单背景 leftMenuChildBg */
.layuimini-menu-left .layui-nav-itemed > .layui-nav-child {
background-color: #0c0f13 !important;
}
/*左侧菜单字体颜色 leftMenuColor */
.layuimini-menu-left .layui-nav .layui-nav-item a, .layuimini-menu-left-zoom.layui-nav .layui-nav-item a {
color: rgb(191, 187, 187) !important;
}
/*左侧菜单选中字体颜色 leftMenuColorThis */
.layuimini-menu-left .layui-nav .layui-nav-item a:hover, .layuimini-menu-left .layui-nav .layui-this a, .layuimini-menu-left-zoom.layui-nav .layui-nav-item a:hover, .layuimini-menu-left-zoom.layui-nav .layui-this a {
color: #ffffff !important;
}
/**tab选项卡选中颜色 tabActiveColor */
.layuimini-tab .layui-tab-title .layui-this .layuimini-tab-active {
background-color: #1e9fff;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 422 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 507 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 671 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

@ -0,0 +1,30 @@
/**
* date:2019/08/16
* author:Mr.Chung
* description:此处放layui自定义扩展
* version:2.0.4
*/
window.rootPath = (function (src) {
src = document.scripts[document.scripts.length - 1].src;
return src.substring(0, src.lastIndexOf("/") + 1);
})();
layui.config({
base: rootPath + "lay-module/",
version: true
}).extend({
miniAdmin: "layuimini/miniAdmin", // layuimini后台扩展
miniMenu: "layuimini/miniMenu", // layuimini菜单扩展
miniTab: "layuimini/miniTab", // layuimini tab扩展
miniTheme: "layuimini/miniTheme", // layuimini 主题扩展
miniTongji: "layuimini/miniTongji", // layuimini 统计扩展
step: 'step-lay/step', // 分步表单扩展
treetable: 'treetable-lay/treetable', //table树形扩展
tableSelect: 'tableSelect/tableSelect', // table选择扩展
iconPickerFa: 'iconPicker/iconPickerFa', // fa图标选择扩展
echarts: 'echarts/echarts', // echarts图表扩展
echartsTheme: 'echarts/echartsTheme', // echarts图表主题扩展
wangEditor: 'wangEditor/wangEditor', // wangEditor富文本扩展
layarea: 'layarea/layarea', // 省市县区三级联动下拉选择器
});

File diff suppressed because one or more lines are too long

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save