vue+springboot+mybatis 宿舍管理系统

112 篇文章 0 订阅
40 篇文章 0 订阅

新建项目

新建springboot项目,内建vue模块

 

 

mysql数据库

drop table if exists f_dormitory_admin;
create table f_dormitory_admin(
	id int not null auto_increment primary key comment '宿管id',
	user_name varchar(20) not null comment '登录名',
	password varchar(20) not null comment '密码',
	name varchar(20) not null comment '姓名',
	gender varchar(10) default null comment '性别',
	telephone varchar(20) default null comment '电话'
) comment '宿舍管理员表';
insert into f_dormitory_admin values (null,'user1','1234','赵国栋','男','13300000000');
insert into f_dormitory_admin values (null,'user2','1234','张无忌','男','13400000000');
insert into f_dormitory_admin values (null,'user3','1234','张亚琴','女','18800000000');

drop table if exists f_system_admin;
create table f_system_admin(
	id int not null auto_increment primary key comment 'id',
	user_name varchar(20) not null comment '登录名',
	password varchar(20) not null comment '密码',
	name varchar(20) not null comment '姓名',
	gender varchar(10) default null comment '性别',
	telephone varchar(20) default null comment '电话'
) comment '系统管理员表';
insert into f_system_admin values (null,'admin1','1234','管理员1','男','13300000000');
insert into f_system_admin values (null,'admin2','1234','管理员2','男','13400000000');
insert into f_system_admin values (null,'admin3','1234','管理员3','女','18800000000');

drop table if exists f_student;
create table f_student(
	id int not null auto_increment primary key comment 'id',
	number varchar(20) not null comment '学号',
	name varchar(20) not null comment '姓名',
	gender varchar(10) default null comment '性别',
	dormitory_id int not null comment '宿舍id',
	state varchar(10) not null comment '状态',
	create_date datetime default CURRENT_TIMESTAMP comment '创建时间'
) comment '学生表';
insert into f_student values(null,'001','周润发','男',1,'入住','2023-01-01');
insert into f_student values(null,'002','周星驰','男',1,'入住','2023-01-01');
insert into f_student values(null,'003','刘德华','男',1,'入住','2023-01-01');
insert into f_student values(null,'004','迪丽热巴','女',2,'入住','2023-01-01');

drop table if exists f_dormitory;
create table f_dormitory(
	id int not null auto_increment primary key comment 'id',
	building_id int not null comment '楼宇id',
	name varchar(30) not null comment '宿舍名称',
	type int not null comment '几人间宿舍',
	available int not null comment '空余床位',
	telephone varchar(20) default null comment '电话'
) comment '宿舍表';
insert into f_dormitory values(null,1,'101',4,0,'88230001');
insert into f_dormitory values(null,1,'201',2,2,'88230002');
insert into f_dormitory values(null,1,'301',8,6,'88230002');

drop table if exists f_building;
create table f_building(
	id int not null auto_increment primary key comment 'id',
	name varchar(30) not null comment '楼宇名称',
	introduction varchar(30) default null comment '介绍',
	admin_id int not null comment '宿管id'
) comment '楼宇表';
insert into f_building values (null,'1号楼','科技学院宿舍楼',1);
insert into f_building values (null,'2号楼','信息学院宿舍楼',1);
insert into f_building values (null,'5号楼','电信学院宿舍楼',1);

springboot

配置

pom.xml

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.15</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.shrimpking</groupId>
    <artifactId>springboot-vue-test07</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot-vue-test07</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.1</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.4.1</version>
        </dependency>
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.30</version>
        </dependency>
        <dependency>
            <groupId>com.spring4all</groupId>
            <artifactId>spring-boot-starter-swagger</artifactId>
            <version>1.5.1.RELEASE</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

application.properties

server.port=8089

spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimeZone=UTC
spring.datasource.username=root
spring.datasource.password=mysql123
#日志
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
#配置别名
mybatis-plus.type-aliases-package=com.shrimpking.pojo

config

CorsConfig .java

package com.shrimpking.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * @author user1
 * // 案例 一
 */
@Configuration
public class CorsConfig implements WebMvcConfigurer
{
 
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                //是否发送Cookie
                .allowCredentials(true)
                //放行哪些原始域
                .allowedOriginPatterns("*")
                .allowedMethods(new String[]{"GET", "POST", "PUT", "DELETE"})
                .allowedHeaders("*")
                .exposedHeaders("*");
    }
}

MybatisPlusConfig.java 

package com.shrimpking.config;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@MapperScan("com.shrimpking.mapper")
public class MybatisPlusConfig
{
    /**
     * 配置分页插件的
     * @return
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor()
    {
        MybatisPlusInterceptor interceptor
                = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }
}

controller

BuildingController .java

package com.shrimpking.controller;


import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

/**
 * <p>
 * 楼宇表 前端控制器
 * </p>
 *
 * @author shrimpking
 * @since 2023-08-30
 */
@RestController
@RequestMapping("/building")
public class BuildingController {

}

DormitoryAdminController .java 

package com.shrimpking.controller;


import com.shrimpking.form.RuleForm;
import com.shrimpking.form.SearchForm;
import com.shrimpking.pojo.DormitoryAdmin;
import com.shrimpking.service.DormitoryAdminService;
import com.shrimpking.utils.ResultVOUtil;
import com.shrimpking.vo.PageVO;
import com.shrimpking.vo.ResultVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * <p>
 * 宿舍管理员表 前端控制器
 * </p>
 *
 * @author shrimpking
 * @since 2023-08-28
 */
@RestController
@RequestMapping("/dormitoryAdmin")
public class DormitoryAdminController {

    @Autowired
    private DormitoryAdminService dormitoryAdminService;

    //登录
    @GetMapping("/login")
    public ResultVO login(RuleForm ruleForm){
        return this.dormitoryAdminService.login(ruleForm);
    }

    //保存
    @PostMapping("/save")
    public ResultVO save(@RequestBody DormitoryAdmin dormitoryAdmin){
        boolean save = this.dormitoryAdminService.save(dormitoryAdmin);
        ResultVO resultVO = new ResultVO();
        if(save){
            //保存成功
            return ResultVOUtil.success(null);
        }else {
            //保存失败
            return ResultVOUtil.fail();
        }
    }

    //查询列表
    @GetMapping("/list/{page}/{size}")
    public ResultVO list(
            @PathVariable("page") Integer page,
            @PathVariable("size") Integer size){
        PageVO pageVO = this.dormitoryAdminService.pageList(page, size);
        return ResultVOUtil.success(pageVO);
    }

    @GetMapping("/search")
    public ResultVO search(SearchForm searchForm){
        PageVO pageVO = this.dormitoryAdminService.search(searchForm);
        return ResultVOUtil.success(pageVO);
    }

    //更新
    @PutMapping("/update")
    public ResultVO update(@RequestBody DormitoryAdmin dormitoryAdmin){
        boolean update = this.dormitoryAdminService.updateById(dormitoryAdmin);
        ResultVO resultVO = new ResultVO();
        if(update){
            //更新成功
            return ResultVOUtil.success(null);
        }else {
            //更新失败
            return ResultVOUtil.fail();
        }
    }

    @GetMapping("/findById/{id}")
    public ResultVO findById(@PathVariable("id") Integer id){
        DormitoryAdmin dormitoryAdmin = this.dormitoryAdminService.getById(id);
        return ResultVOUtil.success(dormitoryAdmin);
    }


    @DeleteMapping("/delete/{id}")
    public ResultVO delete(@PathVariable("id") Integer id){
        boolean remove = this.dormitoryAdminService.removeById(id);
        if(remove){
            return ResultVOUtil.success(null);
        }else {
            return ResultVOUtil.fail();
        }
    }
}

 DormitoryController .java

package com.shrimpking.controller;


import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.shrimpking.pojo.Dormitory;
import com.shrimpking.service.DormitoryService;
import com.shrimpking.utils.ResultVOUtil;
import com.shrimpking.vo.ResultVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * <p>
 * 宿舍表 前端控制器
 * </p>
 *
 * @author shrimpking
 * @since 2023-08-30
 */
@RestController
@RequestMapping("/dormitory")
public class DormitoryController {

    @Autowired
    private DormitoryService dormitoryService;

    //返回有空余床位的宿舍列表
    @GetMapping("/availableList")
    public ResultVO availableList(){
        LambdaQueryWrapper<Dormitory> wrapper = new LambdaQueryWrapper<>();
        wrapper.gt(Dormitory::getAvailable,0);
        List<Dormitory> dormitoryList = this.dormitoryService.list(wrapper);
        return ResultVOUtil.success(dormitoryList);
    }


}

StudentController .java 

package com.shrimpking.controller;


import com.shrimpking.form.SearchForm;
import com.shrimpking.form.StudentForm;
import com.shrimpking.pojo.DormitoryAdmin;
import com.shrimpking.pojo.Student;
import com.shrimpking.service.StudentService;
import com.shrimpking.utils.ResultVOUtil;
import com.shrimpking.vo.PageVO;
import com.shrimpking.vo.ResultVO;
import net.bytebuddy.asm.Advice;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

import javax.swing.*;

/**
 * <p>
 * 学生表 前端控制器
 * </p>
 *
 * @author shrimpking
 * @since 2023-08-29
 */
@RestController
@RequestMapping("/student")
public class StudentController {

    @Autowired
    private StudentService studentService;

    //保存
    @PostMapping("/save")
    public ResultVO save(@RequestBody Student student){
        boolean saveStudent = this.studentService.saveStudent(student);
        if(!saveStudent) {return ResultVOUtil.fail();}
        return ResultVOUtil.success(null);
    }

    //查询列表
    @GetMapping("/list/{page}/{size}")
    public ResultVO list(
            @PathVariable("page") Integer page,
            @PathVariable("size") Integer size
    ){
        PageVO pageVO = this.studentService.pageList(page, size);
        return ResultVOUtil.success(pageVO);
    }

    //搜索
    @GetMapping("/search")
    public ResultVO search(SearchForm searchForm){
        PageVO pageVO = this.studentService.search(searchForm);
        return ResultVOUtil.success(pageVO);
    }

    @PutMapping("/update")
    public ResultVO update(@RequestBody StudentForm studentForm){
        boolean update = this.studentService.update(studentForm);
        ResultVO resultVO = new ResultVO();
        if(update){
            //更新成功
            return ResultVOUtil.success(null);
        }else {
            //更新失败
            return ResultVOUtil.fail();
        }
    }

    @GetMapping("/findById/{id}")
    public ResultVO findById(@PathVariable("id") Integer id){
        Student student = this.studentService.getById(id);
        StudentForm studentForm = new StudentForm();
        BeanUtils.copyProperties(student,studentForm);
        studentForm.setOldDormitoryId(student.getDormitoryId());
        return ResultVOUtil.success(studentForm);
    }

    @DeleteMapping("/delete/{id}")
    public ResultVO delete(@PathVariable("id") Integer id){
        boolean remove = this.studentService.removeById(id);
        if(!remove) ResultVOUtil.fail();
        return ResultVOUtil.success(null);
    }
}

SystemAdminController .java 

package com.shrimpking.controller;


import com.shrimpking.form.RuleForm;
import com.shrimpking.service.SystemAdminService;
import com.shrimpking.vo.ResultVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

/**
 * <p>
 * 宿舍管理员表 前端控制器
 * </p>
 *
 * @author shrimpking
 * @since 2023-08-28
 */
@RestController
@RequestMapping("/systemAdmin")
public class SystemAdminController {

    @Autowired
    private SystemAdminService systemAdminService;

    @GetMapping("/login")
    public ResultVO login(RuleForm ruleForm){
        return systemAdminService.login(ruleForm);
    }
}

form

RuleForm.java

package com.shrimpking.form;

import lombok.Data;

/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Shrimpking
 * @create 2023/8/28 19:57
 */
@Data
public class RuleForm
{
    private String username;
    private String password;
}

SearchForm.java 

package com.shrimpking.form;

import lombok.Data;

/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Shrimpking
 * @create 2023/8/29 20:25
 */
@Data
public class SearchForm
{
    private String key;
    private String value;
    private Integer page;
    private Integer size;
}

 StudentForm.java

package com.shrimpking.form;

import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.util.Date;

/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Shrimpking
 * @create 2023/8/30 16:11
 */
@Data
public class StudentForm
{
    private Integer id;
    private String number;
    private String name;
    private String gender;
    private Integer dormitoryId;
    private Integer oldDormitoryId;
    private String state;
    private Date createDate;
}

mapper

BuildingMapper .java

package com.shrimpking.mapper;

import com.shrimpking.pojo.Building;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;

/**
 * <p>
 * 楼宇表 Mapper 接口
 * </p>
 *
 * @author shrimpking
 * @since 2023-08-30
 */
public interface BuildingMapper extends BaseMapper<Building> {

}

DormitoryAdminMapper .java 

package com.shrimpking.mapper;

import com.shrimpking.pojo.DormitoryAdmin;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;

/**
 * <p>
 * 宿舍管理员表 Mapper 接口
 * </p>
 *
 * @author shrimpking
 * @since 2023-08-28
 */
public interface DormitoryAdminMapper extends BaseMapper<DormitoryAdmin> {

}

DormitoryMapper .java 

package com.shrimpking.mapper;

import com.shrimpking.pojo.Dormitory;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;

/**
 * <p>
 * 宿舍表 Mapper 接口
 * </p>
 *
 * @author shrimpking
 * @since 2023-08-30
 */
public interface DormitoryMapper extends BaseMapper<Dormitory> {
    public void subAvailable(Integer id);
    public void addAvailable(Integer id);
}

 StudentMapper .java

package com.shrimpking.mapper;

import com.shrimpking.pojo.Student;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;

/**
 * <p>
 * 学生表 Mapper 接口
 * </p>
 *
 * @author shrimpking
 * @since 2023-08-29
 */
public interface StudentMapper extends BaseMapper<Student> {

}

 SystemAdminMapper .java

package com.shrimpking.mapper;

import com.shrimpking.pojo.SystemAdmin;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;

/**
 * <p>
 * 宿舍管理员表 Mapper 接口
 * </p>
 *
 * @author shrimpking
 * @since 2023-08-28
 */
public interface SystemAdminMapper extends BaseMapper<SystemAdmin> {

}

pojo

Building .java

package com.shrimpking.pojo;

import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;

/**
 * <p>
 * 楼宇表
 * </p>
 *
 * @author shrimpking
 * @since 2023-08-30
 */
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("f_building")
@ApiModel(value="Building对象", description="楼宇表")
public class Building implements Serializable {

    private static final long serialVersionUID = 1L;

    @ApiModelProperty(value = "id")
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;

    @ApiModelProperty(value = "楼宇名称")
    private String name;

    @ApiModelProperty(value = "介绍")
    private String introduction;

    @ApiModelProperty(value = "宿管id")
    private Integer adminId;


}

Dormitory .java 

package com.shrimpking.pojo;

import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;

/**
 * <p>
 * 宿舍表
 * </p>
 *
 * @author shrimpking
 * @since 2023-08-30
 */
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("f_dormitory")
@ApiModel(value="Dormitory对象", description="宿舍表")
public class Dormitory implements Serializable {

    private static final long serialVersionUID = 1L;

    @ApiModelProperty(value = "id")
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;

    @ApiModelProperty(value = "楼宇id")
    private Integer buildingId;

    @ApiModelProperty(value = "宿舍名称")
    private String name;

    @ApiModelProperty(value = "几人间宿舍")
    private Integer type;

    @ApiModelProperty(value = "空余床位")
    private Integer available;

    @ApiModelProperty(value = "电话")
    private String telephone;


}

DormitoryAdmin .java 

package com.shrimpking.pojo;

import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;

/**
 * <p>
 * 宿舍管理员表
 * </p>
 *
 * @author shrimpking
 * @since 2023-08-28
 */
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("f_dormitory_admin")
@ApiModel(value="DormitoryAdmin对象", description="宿舍管理员表")
public class DormitoryAdmin implements Serializable {

    private static final long serialVersionUID = 1L;

    @ApiModelProperty(value = "宿管id")
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;

    @ApiModelProperty(value = "登录名")
    private String userName;

    @ApiModelProperty(value = "密码")
    private String password;

    @ApiModelProperty(value = "姓名")
    private String name;

    @ApiModelProperty(value = "性别")
    private String gender;

    @ApiModelProperty(value = "电话")
    private String telephone;


}

student.java

package com.shrimpking.pojo;

import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import java.util.Date;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;

/**
 * <p>
 * 学生表
 * </p>
 *
 * @author shrimpking
 * @since 2023-08-29
 */
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("f_student")
@ApiModel(value="Student对象", description="学生表")
public class Student implements Serializable {

    private static final long serialVersionUID = 1L;

    @ApiModelProperty(value = "id")
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;

    @ApiModelProperty(value = "学号")
    private String number;

    @ApiModelProperty(value = "姓名")
    private String name;

    @ApiModelProperty(value = "性别")
    private String gender;

    @ApiModelProperty(value = "宿舍id")
    private Integer dormitoryId;

    @ApiModelProperty(value = "状态")
    private String state;

    @ApiModelProperty(value = "创建时间")
    private Date createDate;


}

 SystemAdmin .java

package com.shrimpking.pojo;

import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;

/**
 * <p>
 * 宿舍管理员表
 * </p>
 *
 * @author shrimpking
 * @since 2023-08-28
 */
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("f_system_admin")
@ApiModel(value="SystemAdmin对象", description="系统管理员表")
public class SystemAdmin implements Serializable {

    private static final long serialVersionUID = 1L;

    @ApiModelProperty(value = "id")
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;

    @ApiModelProperty(value = "登录名")
    private String userName;

    @ApiModelProperty(value = "密码")
    private String password;

    @ApiModelProperty(value = "姓名")
    private String name;

    @ApiModelProperty(value = "性别")
    private String gender;

    @ApiModelProperty(value = "电话")
    private String telephone;


}

service

BuildingService .java

package com.shrimpking.service;

import com.shrimpking.pojo.Building;
import com.baomidou.mybatisplus.extension.service.IService;

/**
 * <p>
 * 楼宇表 服务类
 * </p>
 *
 * @author shrimpking
 * @since 2023-08-30
 */
public interface BuildingService extends IService<Building> {

}

DormitoryAdminService .java

package com.shrimpking.service;

import com.shrimpking.form.RuleForm;
import com.shrimpking.form.SearchForm;
import com.shrimpking.pojo.DormitoryAdmin;
import com.baomidou.mybatisplus.extension.service.IService;
import com.shrimpking.vo.PageVO;
import com.shrimpking.vo.ResultVO;

/**
 * <p>
 * 宿舍管理员表 服务类
 * </p>
 *
 * @author shrimpking
 * @since 2023-08-28
 */
public interface DormitoryAdminService extends IService<DormitoryAdmin> {
    public ResultVO login(RuleForm ruleForm);
    public PageVO pageList(Integer page,Integer size);
    public PageVO search(SearchForm searchForm);
}

DormitoryService .java

package com.shrimpking.service;

import com.shrimpking.pojo.Dormitory;
import com.baomidou.mybatisplus.extension.service.IService;

/**
 * <p>
 * 宿舍表 服务类
 * </p>
 *
 * @author shrimpking
 * @since 2023-08-30
 */
public interface DormitoryService extends IService<Dormitory> {

}

StudentService .java

package com.shrimpking.service;

import com.shrimpking.form.SearchForm;
import com.shrimpking.form.StudentForm;
import com.shrimpking.pojo.Student;
import com.baomidou.mybatisplus.extension.service.IService;
import com.shrimpking.vo.PageVO;
import com.shrimpking.vo.StudentVO;

import java.util.List;

/**
 * <p>
 * 学生表 服务类
 * </p>
 *
 * @author shrimpking
 * @since 2023-08-29
 */
public interface StudentService extends IService<Student> {
    public boolean saveStudent(Student student);
    public boolean update(StudentForm studentForm);
    public PageVO pageList(Integer page, Integer size);
    public PageVO search(SearchForm searchForm);
}

SystemAdminService .java

package com.shrimpking.service;

import com.shrimpking.form.RuleForm;
import com.shrimpking.pojo.SystemAdmin;
import com.baomidou.mybatisplus.extension.service.IService;
import com.shrimpking.vo.ResultVO;

/**
 * <p>
 * 宿舍管理员表 服务类
 * </p>
 *
 * @author shrimpking
 * @since 2023-08-28
 */
public interface SystemAdminService extends IService<SystemAdmin> {
    public ResultVO login(RuleForm ruleForm);
}

service impl

BuildingServiceImpl .java

package com.shrimpking.service.impl;

import com.shrimpking.pojo.Building;
import com.shrimpking.mapper.BuildingMapper;
import com.shrimpking.service.BuildingService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;

/**
 * <p>
 * 楼宇表 服务实现类
 * </p>
 *
 * @author shrimpking
 * @since 2023-08-30
 */
@Service
public class BuildingServiceImpl extends ServiceImpl<BuildingMapper, Building> implements BuildingService {

}

DormitoryAdminServiceImpl .java

package com.shrimpking.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.shrimpking.form.RuleForm;
import com.shrimpking.form.SearchForm;
import com.shrimpking.pojo.DormitoryAdmin;
import com.shrimpking.mapper.DormitoryAdminMapper;
import com.shrimpking.service.DormitoryAdminService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.shrimpking.vo.PageVO;
import com.shrimpking.vo.ResultVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * <p>
 * 宿舍管理员表 服务实现类
 * </p>
 *
 * @author shrimpking
 * @since 2023-08-28
 */
@Service
public class DormitoryAdminServiceImpl extends ServiceImpl<DormitoryAdminMapper, DormitoryAdmin> implements DormitoryAdminService {

    @Autowired
    private DormitoryAdminMapper dormitoryAdminMapper;

    @Override
    public ResultVO login(RuleForm ruleForm)
    {
        //查询数据库用户名是否存在
        LambdaQueryWrapper<DormitoryAdmin> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(DormitoryAdmin::getUserName,ruleForm.getUsername());
        DormitoryAdmin dormitoryAdmin = dormitoryAdminMapper.selectOne(wrapper);
        ResultVO<DormitoryAdmin> resultVO = new ResultVO<>();
        //没查到用户名
        if(dormitoryAdmin == null){
            resultVO.setCode(-1);
        } else {
            //判断密码是否正确
            if(!dormitoryAdmin.getPassword().equals(ruleForm.getPassword())){
                //密码错误
                resultVO.setCode(-2);
            } else {
                //密码正确
                resultVO.setCode(0);
                resultVO.setData(dormitoryAdmin);
            }
        }

        return resultVO;
    }

    @Override
    public PageVO pageList(Integer page, Integer size)
    {
        Page<DormitoryAdmin> dormitoryAdminPage = new Page<>(page,size);
        Page<DormitoryAdmin> resultPage = this.dormitoryAdminMapper.selectPage(dormitoryAdminPage,null);
        PageVO pageVO = new PageVO();
        //总数
        pageVO.setTotal(resultPage.getTotal());
        //数据
        pageVO.setData(resultPage.getRecords());
        return pageVO;
    }

    @Override
    public PageVO search(SearchForm searchForm)
    {
        //需要模糊查询与分页
        Page<DormitoryAdmin> page = new Page<>(searchForm.getPage(),searchForm.getSize());
        Page<DormitoryAdmin> resultPage = null;
        if("".equals(searchForm.getValue())){
            //没有查询条件的值,
            resultPage = this.dormitoryAdminMapper.selectPage(page,null);
        } else {
            //
            QueryWrapper<DormitoryAdmin> wrapper = new QueryWrapper<>();
            wrapper.like(searchForm.getKey(),searchForm.getValue());
            resultPage = this.dormitoryAdminMapper.selectPage(page,wrapper);
        }
        //封装
        PageVO pageVO = new PageVO();
        pageVO.setTotal(resultPage.getTotal());
        pageVO.setData(resultPage.getRecords());
        return pageVO;
    }


}

DormitoryServiceImpl .java

package com.shrimpking.service.impl;

import com.shrimpking.pojo.Dormitory;
import com.shrimpking.mapper.DormitoryMapper;
import com.shrimpking.service.DormitoryService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;

/**
 * <p>
 * 宿舍表 服务实现类
 * </p>
 *
 * @author shrimpking
 * @since 2023-08-30
 */
@Service
public class DormitoryServiceImpl extends ServiceImpl<DormitoryMapper, Dormitory> implements DormitoryService {

}

StudentServiceImpl .java

package com.shrimpking.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.shrimpking.form.SearchForm;
import com.shrimpking.form.StudentForm;
import com.shrimpking.mapper.DormitoryMapper;
import com.shrimpking.pojo.Dormitory;
import com.shrimpking.pojo.Student;
import com.shrimpking.mapper.StudentMapper;
import com.shrimpking.service.StudentService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.shrimpking.utils.CommonUtil;
import com.shrimpking.vo.PageVO;
import com.shrimpking.vo.StudentVO;
import freemarker.core.UnknownDateTypeFormattingUnsupportedException;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * <p>
 * 学生表 服务实现类
 * </p>
 *
 * @author shrimpking
 * @since 2023-08-29
 */
@Service
public class StudentServiceImpl extends ServiceImpl<StudentMapper, Student> implements StudentService {

    @Autowired
    private StudentMapper studentMapper;

    @Autowired
    private DormitoryMapper dormitoryMapper;

    @Override
    public boolean saveStudent(Student student)
    {
        //添加学生信息
        student.setState("入住");
        student.setCreateDate(new Date());
        int insert = this.studentMapper.insert(student);
        if(insert != 1){ return false; }
        //修改宿舍空余床位
        Dormitory dormitory = this.dormitoryMapper.selectById(student.getDormitoryId());
        if(dormitory.getAvailable() == 0){
            return false;
        }
        dormitory.setAvailable(dormitory.getAvailable() - 1);
        int update = this.dormitoryMapper.updateById(dormitory);
        if(update != 1) { return false; }
        return true;
    }

    @Override
    public boolean update(StudentForm studentForm)
    {
        //更新学生信息
        Student student = new Student();
        BeanUtils.copyProperties(studentForm,student);
        int update = this.studentMapper.updateById(student);
        if(update != 1) { return false; }
        //更新宿舍信息
        if(!studentForm.getDormitoryId().equals(studentForm.getOldDormitoryId())){
            try
            {
                this.dormitoryMapper.addAvailable(studentForm.getOldDormitoryId());
                this.dormitoryMapper.subAvailable(studentForm.getDormitoryId());
            }catch (Exception e){
                return  false;
            }
        }
        return true;
    }

    @Override
    public PageVO pageList(Integer page, Integer size)
    {
        //声明分页
        Page<Student> studentPage = new Page<>(page,size);
        Page<Student> resultPage = this.studentMapper.selectPage(studentPage,null);
        //获取结果集
        List<Student> studentList = resultPage.getRecords();
        List<StudentVO> studentVOList = new ArrayList<>();
        //Vo转换
        for (Student student : studentList)
        {
            StudentVO studentVO = new StudentVO();
            //复制属性内容到新vo中
            BeanUtils.copyProperties(student,studentVO);
            //查询宿舍名称
            Dormitory dormitory = this.dormitoryMapper.selectById(student.getDormitoryId());
            studentVO.setDormitoryName(dormitory.getName());
            studentVOList.add(studentVO);
        }
        PageVO pageVO = new PageVO();
        pageVO.setData(studentVOList);
        pageVO.setTotal(resultPage.getTotal());
        return pageVO;
    }


    @Override
    public PageVO search(SearchForm searchForm){
        Page<Student> studentPage = new Page<>(searchForm.getPage(),searchForm.getSize());
        Page<Student> resultPage = null;
        if("".equals(searchForm.getValue())){
            resultPage = this.studentMapper.selectPage(studentPage,null);
        }else {
            QueryWrapper<Student> queryWrapper = new QueryWrapper<>();
            queryWrapper.like(searchForm.getKey(),searchForm.getValue());
            resultPage = this.studentMapper.selectPage(studentPage,queryWrapper);
        }
        //获取结果集
        List<Student> studentList = resultPage.getRecords();
        List<StudentVO> studentVOList = new ArrayList<>();
        //Vo转换
        for (Student student : studentList)
        {
            StudentVO studentVO = new StudentVO();
            //复制属性内容到新vo中
            BeanUtils.copyProperties(student,studentVO);
            //查询宿舍名称
            Dormitory dormitory = this.dormitoryMapper.selectById(student.getDormitoryId());
            studentVO.setDormitoryName(dormitory.getName());
            studentVOList.add(studentVO);
        }
        PageVO pageVO = new PageVO();
        pageVO.setData(studentVOList);
        pageVO.setTotal(resultPage.getTotal());
        return pageVO;
    }
}

SystemAdminServiceImpl .java

package com.shrimpking.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.shrimpking.form.RuleForm;
import com.shrimpking.pojo.SystemAdmin;
import com.shrimpking.mapper.SystemAdminMapper;
import com.shrimpking.service.SystemAdminService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.shrimpking.vo.ResultVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * <p>
 * 宿舍管理员表 服务实现类
 * </p>
 *
 * @author shrimpking
 * @since 2023-08-28
 */
@Service
public class SystemAdminServiceImpl extends ServiceImpl<SystemAdminMapper, SystemAdmin> implements SystemAdminService {

    @Autowired
    private SystemAdminMapper systemAdminMapper;

    @Override
    public ResultVO login(RuleForm ruleForm)
    {
        //查询用户名是否存在
        LambdaQueryWrapper<SystemAdmin> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(SystemAdmin::getUserName,ruleForm.getUsername());
        SystemAdmin systemAdmin = this.systemAdminMapper.selectOne(wrapper);
        ResultVO<SystemAdmin> resultVO = new ResultVO<>();
        if(systemAdmin == null){
            //用户名不存在
            resultVO.setCode(-1);
        } else {
            //密码是否正确
            if(!systemAdmin.getPassword().equals(ruleForm.getPassword())){
                resultVO.setCode(-2);
            } else {
                //密码正确
                resultVO.setCode(0);
                resultVO.setData(systemAdmin);
            }
        }
        return resultVO;
    }
}

utils

CommonUtil.java

package com.shrimpking.utils;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Shrimpking
 * @create 2023/8/30 10:24
 */
public class CommonUtil
{
    /**
     * 创建日期类型的字符串
     * @return
     */
    public static String createData(){
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        return format.format(new Date());
    }
}

ResultVOUtil.java

package com.shrimpking.utils;

import com.shrimpking.vo.ResultVO;

/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Shrimpking
 * @create 2023/8/29 11:10
 */
public class ResultVOUtil
{
    //成功
    public static ResultVO success(Object object){
        ResultVO resultVO = new ResultVO<>();
        resultVO.setCode(0);
        resultVO.setData(object);
        return resultVO;
    }

    //失败
    public static ResultVO fail(){
        ResultVO resultVO = new ResultVO();
        resultVO.setCode(-1);
        return resultVO;
    }

}

Vo

pagevo.java

package com.shrimpking.vo;

import lombok.Data;

/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Shrimpking
 * @create 2023/8/29 19:49
 */
@Data
public class PageVO
{
    private Object data;
    private Long total;
}

resultVo.java

package com.shrimpking.vo;

import lombok.Data;

/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Shrimpking
 * @create 2023/8/28 19:54
 */
@Data
public class ResultVO<T>
{
    private Integer code;
    private T data;
}

studentvo.java

package com.shrimpking.vo;

import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.util.Date;

/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Shrimpking
 * @create 2023/8/30 13:11
 */
@Data
public class StudentVO
{
    private Integer id;
    private String number;
    private String name;
    private String gender;
    private String dormitoryName;
    private String state;
    private Date createDate;
}

mapper xml

buildingMapper.xml

<?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.shrimpking.mapper.BuildingMapper">

    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.shrimpking.pojo.Building">
        <id column="id" property="id" />
        <result column="name" property="name" />
        <result column="introduction" property="introduction" />
        <result column="admin_id" property="adminId" />
    </resultMap>

    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        id, name, introduction, admin_id
    </sql>

</mapper>

DormitoryAdminMapper.xml 

<?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.shrimpking.mapper.DormitoryAdminMapper">

    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.shrimpking.pojo.DormitoryAdmin">
        <id column="id" property="id" />
        <result column="user_name" property="userName" />
        <result column="password" property="password" />
        <result column="name" property="name" />
        <result column="gender" property="gender" />
        <result column="telephone" property="telephone" />
    </resultMap>

    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        id, user_name, password, name, gender, telephone
    </sql>

</mapper>

DormitoryMapper.xml

<?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.shrimpking.mapper.DormitoryMapper">

    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.shrimpking.pojo.Dormitory">
        <id column="id" property="id" />
        <result column="building_id" property="buildingId" />
        <result column="name" property="name" />
        <result column="type" property="type" />
        <result column="available" property="available" />
        <result column="telephone" property="telephone" />
    </resultMap>

    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        id, building_id, name, type, available, telephone
    </sql>


    <update id="subAvailable">
        update f_dormitory set available = available - 1 where id = #{id}
    </update>

    <update id="addAvailable">
        update f_dormitory set available = available + 1 where id = #{id}
    </update>

</mapper>

StudentMapper.xml

<?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.shrimpking.mapper.StudentMapper">

    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.shrimpking.pojo.Student">
        <id column="id" property="id" />
        <result column="number" property="number" />
        <result column="name" property="name" />
        <result column="gender" property="gender" />
        <result column="dormitory_id" property="dormitoryId" />
        <result column="state" property="state" />
        <result column="create_date" property="createDate" />
    </resultMap>

    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        id, number, name, gender, dormitory_id, state, create_date
    </sql>

</mapper>

SystemAdminMapper.xml

<?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.shrimpking.mapper.SystemAdminMapper">

    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.shrimpking.pojo.SystemAdmin">
        <id column="id" property="id" />
        <result column="user_name" property="userName" />
        <result column="password" property="password" />
        <result column="name" property="name" />
        <result column="gender" property="gender" />
        <result column="telephone" property="telephone" />
    </resultMap>

    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        id, user_name, password, name, gender, telephone
    </sql>

</mapper>

vue

配置

main.js

import Vue from 'vue'
import App from './App.vue'
import router from '@/router'
import store from '@/store'
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
import axios from "axios";
import * as echarts from 'echarts'


axios.defaults.baseURL='http://localhost:8089';
Vue.prototype.$http = axios;
Vue.prototype.$echarts = echarts;
Vue.use(ElementUI,{size:'small'});
Vue.config.productionTip = false;

new Vue({
  render: h => h(App),
  router,
  store
}).$mount('#app');

app.vue

<template>
  <div id="app">
    <router-view></router-view>
  </div>
</template>

<script>

export default {
  name: 'App',
  components: {

  }
}
</script>

<style>
    *,div {
        margin: 0;
        padding: 0;
    }
</style>

store index.js

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex);

export default new Vuex.Store({
    state:{

    }
});

router index.js

import Vue from 'vue'
import VueRouter from "vue-router";
import Login from "@/views/Login";
import SystemAdmin from "@/views/SystemAdmin";
import DormitoryAdminAdd from "@/views/DormitoryAdminAdd";
import DormitoryAdminManager from "@/views/DormitoryAdminManager";
import DormitoryAdminUpdate from "@/views/DormitoryAdminUpdate";
import StudentAdd from "@/views/StudentAdd";
import StudentManager from "@/views/StudentManager";
import StudentUpdate from "@/views/StudentUpdate";

Vue.use(VueRouter);

export default new VueRouter({
    mode:'history',
   routes:[
       {
           path:'/',
           redirect:'/login'
       },
       {
           path: '/login',
           name:'Login',
           component: Login
       },
       {
           path:'/systemAdmin',
           name:'SystemAdmin',
           component:SystemAdmin,
           redirect:'/dormitoryAdminManager',
           meta:{
               displayName:'后台'
           },
           children:[
               {
                   path:'/dormitoryAdminAdd',
                   name:'DormitoryAdminAdd',
                   component:DormitoryAdminAdd,
                   meta:{
                       displayName: '添加宿管'
                   }
               },
               {
                   path:'/dormitoryAdminManager',
                   name:'DormitoryAdminManager',
                   component:DormitoryAdminManager,
                   meta: {
                       displayName: '宿管管理'
                   }
               },
               {
                   path:'/dormitoryAdminUpdate',
                   name:'DormitoryAdminUpdate',
                   component:DormitoryAdminUpdate,
                   meta:{
                       displayName: '更新宿管'
                   }
               },
               {
                   path:'/studentAdd',
                   name:'StudentAdd',
                   component: StudentAdd,
                   meta:{
                       displayName:'添加学生'
                   }
               },
               {
                   path:'/studentManager',
                   name:'StudentManager',
                   component: StudentManager,
                   meta:{
                       displayName:'学生管理'
                   }
               },
               {
                   path:'/studentUpdate',
                   name:'StudentUpdate',
                   component: StudentUpdate,
                   meta:{
                       displayName:'修改学生'
                   }
               },
           ]
       }
   ]
});

views

DormitoryAdminAdd.vue

<template>
    <div class="dormitory-add">
        <el-form :model="ruleForm" :rules="rules" ref="ruleForm"
                 label-width="90px"
                 label-position="left"
                 class="">
            <el-form-item label="用户名" prop="userName">
                <el-input v-model="ruleForm.userName" type="text"></el-input>
            </el-form-item>
            <el-form-item label="密码" prop="password">
                <el-input v-model="ruleForm.password" type="password"></el-input>
            </el-form-item>
            <el-form-item label="姓名" prop="name">
                <el-input v-model="ruleForm.name" type="text"></el-input>
            </el-form-item>
            <el-form-item label="性别" prop="gender">
                <div style="width:170px;height:30px;">
                    <template>
                        <el-radio v-model="ruleForm.gender" label="男">男</el-radio>
                        <el-radio v-model="ruleForm.gender" label="女">女</el-radio>
                    </template>
                </div>
            </el-form-item>
            <el-form-item label="电话" prop="telephone">
                <el-input v-model="ruleForm.telephone" type="text"></el-input>
            </el-form-item>
            <el-form-item>
                <el-button type="primary" @click="handleSubmit('ruleForm')">保存</el-button>
                <el-button @click="handleReset('ruleForm')">重置</el-button>
            </el-form-item>
        </el-form>
    </div>
</template>

<script>
    export default {
        name: "DormitoryAdminAdd",
        data(){
            return {
                ruleForm:{
                    userName:'',
                    password:'',
                    name:'',
                    gender:'男',
                    telephone:''
                },
                rules:{
                    userName:[
                        { required: true, message: '请输入用户名', trigger: 'blur'}
                    ],
                    password:[
                        { required: true, message: '请输入密码', trigger: 'blur'}
                    ],
                    name:[
                        { required: true, message: '请输入姓名', trigger: 'blur'}
                    ],
                    gender:[
                        { required: true, message:'请选择性别', trigger: 'blur'}
                    ],
                    telephone: [
                        { required: true, message: '请输入手机号码', trigger:'blur'}
                    ]
                }
            }
        },
        methods:{
            //保存
            handleSubmit(formName){
                this.$refs[formName].validate((valid) => {
                    if(valid){
                        this.$http.post('/dormitoryAdmin/save',this.ruleForm)
                            .then( res => {
                                if(res.data.code === 0){
                                    //成功
                                    this.$message.success('保存成功!');
                                    this.$router.push('/dormitoryAdminManager');
                                }
                            })
                    }
                })
            },
            //重置
            handleReset(formName){
                this.$refs[formName].resetFields();
            }
        }
    }
</script>

<style scoped>
    .dormitory-add{
        margin-top: 60px;
        margin-left: 330px;
        width: 450px;
        height: 500px;
    }
</style>

DormitoryAdminManager.vue

<template>
    <div class="dormitory-manager">
        <el-form :model="ruleForm" :rules="rules" ref="ruleForm"
                label-width="65px" label-position="left">
            <el-form-item label="字段" prop="key">
                <el-select v-model="ruleForm.key" style="width: 160px;float: left;" placeholder="请选择字段">
                    <el-option label="宿管账号" value="user_name"></el-option>
                    <el-option label="宿管姓名" value="name"></el-option>
                    <el-option label="宿管电话" value="telephone"></el-option>
                </el-select>
            </el-form-item>
            <div style="width: 400px;height: 60px;position: relative;top:-51px;left:300px;">
                <el-form-item label="值">
                    <el-input type="text" v-model="ruleForm.value" placeholder="请输入关键字" style="width: 160px;"></el-input>
                    <el-button type="primary" icon="el-icon-search" style="position:relative;left:20px;" @click="handleSearch('ruleForm')">搜索</el-button>
                </el-form-item>
            </div>
        </el-form>

        <el-table
                :data="tableData"
                border
                style="width: 100%;position: relative;top: -30px;">
            <el-table-column
                    prop="id"
                    label="ID">
            </el-table-column>
            <el-table-column
                    prop="userName"
                    label="用户名">
            </el-table-column>
            <el-table-column
                    prop="password"
                    label="密码">
            </el-table-column>
            <el-table-column
                    prop="name"
                    label="姓名">
            </el-table-column>
            <el-table-column
                    prop="gender"
                    label="性别">
            </el-table-column>
            <el-table-column
                    prop="telephone"
                    label="电话">
            </el-table-column>
            <el-table-column label="操作" >
                <template slot-scope="scope">
                    <el-button @click="edit(scope.row)">编辑</el-button>
                    <el-button @click="del(scope.row)" type="danger">删除</el-button>
                </template>
            </el-table-column>
        </el-table>
        <el-pagination
                background
                layout="prev,pager,next"
                :pageSize="pageSize"
                :total="total"
                :current-page.sync="currentPage"
                @current-change="page">

        </el-pagination>
    </div>
</template>

<script>
    export default {
        name: "DormitoryAdminManager",
        data(){
            return {
                tableData:null,
                currentPage: 1,
                pageSize: 3,
                total:null,
                ruleForm:{
                    key:'',
                    value:'',
                    page:'',
                    size: 3
                },
                rules:{
                    key:[{required: true, message:'请选择字段', trigger: 'change'}]
                }
            }
        },
        methods:{
            //加载数据
            loadData(){
                this.$http.get('/dormitoryAdmin/list/1/'+ this.pageSize).then(res => {
                    this.tableData = res.data.data.data;
                    this.total = res.data.data.total;
                });
            },
            edit(row){
                this.$router.push('/dormitoryAdminUpdate?id=' + row.id);
            },
            del(row){
                this.$confirm('确定要删除【' + row.userName +'】吗?','删除提示',{
                    confirmButtonText:'删除',
                    cancelButtonText:'取消',
                    type:'warning'
                }).then(() => {
                    this.$http.delete('/dormitoryAdmin/delete/'+ row.id)
                        .then( res => {
                            if(res.data.code === 0){
                                this.$message.success('删除成功!');
                            }
                        }).then(()=> {
                            this.currentPage = 1;
                            this.loadData();
                    })
                }).catch(()=>{
                    this.$message({
                        type:'info',
                        message:'已取消删除!'
                    });
                });
            },
            //搜索
            handleSearch(formName){
                this.currentPage = 1;
                this.$refs[formName].validate((valid) =>{
                    if(valid){
                        this.ruleForm.page = this.currentPage;
                        this.$http.get('/dormitoryAdmin/search',{params: this.ruleForm})
                            .then(res => {
                                this.tableData = res.data.data.data;
                                this.total = res.data.data.total;
                            })
                    }
                })
            },
            page(currentPage){
                //没有查询条件
                if(this.ruleForm.value === ''){
                    this.$http.get('/dormitoryAdmin/list/'+ currentPage +'/' + this.pageSize)
                        .then(res => {
                            this.tableData = res.data.data.data;
                            this.total = res.data.data.total;
                        })
                } else {
                    //有查询条件
                    this.ruleForm.page = this.currentPage;
                    this.$http.get('/dormitoryAdmin/search',{params: this.ruleForm})
                        .then(res => {
                            this.tableData = res.data.data.data;
                            this.total = res.data.data.total;
                        })
                }
            }
        },
        created(){
            this.loadData();
        }
    }
</script>

<style scoped>
    .dormitory-manager{
        margin-top: 60px;
        margin-left: 80px;
    }
</style>

DormitoryAdminUpdate.vue

<template>
    <div class="dormitory-add">
        <el-form :model="ruleForm" :rules="rules" ref="ruleForm"
                 label-width="90px"
                 label-position="left"
                 class="">
            <el-form-item label="ID">
                <el-input v-model="ruleForm.id" type="text" readonly></el-input>
            </el-form-item>
            <el-form-item label="用户名" prop="userName">
                <el-input v-model="ruleForm.userName" type="text"></el-input>
            </el-form-item>
            <el-form-item label="密码" prop="password">
                <el-input v-model="ruleForm.password" type="password"></el-input>
            </el-form-item>
            <el-form-item label="姓名" prop="name">
                <el-input v-model="ruleForm.name" type="text"></el-input>
            </el-form-item>
            <el-form-item label="性别" prop="gender">
                <div style="width:170px;height:30px;">
                    <template>
                        <el-radio v-model="ruleForm.gender" label="男">男</el-radio>
                        <el-radio v-model="ruleForm.gender" label="女">女</el-radio>
                    </template>
                </div>
            </el-form-item>
            <el-form-item label="电话" prop="telephone">
                <el-input v-model="ruleForm.telephone" type="text"></el-input>
            </el-form-item>
            <el-form-item>
                <el-button type="primary" @click="handleSubmit('ruleForm')">更新</el-button>
                <el-button @click="handleCancel">取消</el-button>
            </el-form-item>
        </el-form>
    </div>
</template>

<script>
    export default {
        name: "DormitoryAdminUpdate",
        data(){
            return {
                ruleForm:{
                    id:'',
                    userName:'',
                    password:'',
                    name:'',
                    gender:'男',
                    telephone:''
                },
                rules:{
                    userName:[
                        { required: true, message: '请输入用户名', trigger: 'blur'}
                    ],
                    password:[
                        { required: true, message: '请输入密码', trigger: 'blur'}
                    ],
                    name:[
                        { required: true, message: '请输入姓名', trigger: 'blur'}
                    ],
                    gender:[
                        { required: true, message:'请选择性别', trigger: 'blur'}
                    ],
                    telephone: [
                        { required: true, message: '请输入手机号码', trigger:'blur'}
                    ]
                }
            }
        },
        methods:{
            //保存
            handleSubmit(formName){
                this.$refs[formName].validate((valid) => {
                    if(valid){
                        this.$http.put('/dormitoryAdmin/update',this.ruleForm)
                            .then( res => {
                                if(res.data.code === 0){
                                    //成功
                                    this.$message.success('更新成功!');
                                    this.$router.push('/dormitoryAdminManager');
                                }
                            })
                    }
                })
            },
            //取消
            handleCancel(){
                this.$router.push('/dormitoryAdminManager');
            }
        },
        created(){
            this.$http.get('/dormitoryAdmin/findById/'+this.$route.query.id)
                .then(res => {
                    this.ruleForm = res.data.data;
                });
        }
    }
</script>

<style scoped>
    .dormitory-add{
        margin-top: 60px;
        margin-left: 330px;
        width: 450px;
        height: 500px;
    }
</style>

LoginPage.vue

<template>
    <div class="login-container">
        <el-form :model="ruleForm" :rules="rules"
                 status-icon
                 ref="ruleForm"
                 label-position="left"
                 label-width="80px"
                 class="demo-ruleForm login-page">
            <h3 class="title">系统登录</h3>
            <el-form-item label="用户名" prop="username">
                <el-input type="text" v-model="ruleForm.username" placeholder="用户名"></el-input>
            </el-form-item>
            <el-form-item label="密码" prop="password">
                <el-input type="password" v-model="ruleForm.password" placeholder="密码"></el-input>
            </el-form-item>
            <el-form-item>
                <el-radio v-model="type" label="sysAdmin">系统管理员</el-radio>
                <el-radio v-model="type" label="dormitoryAdmin" style="position: relative;left: 120px;">宿舍管理员</el-radio>
            </el-form-item>
            <el-form-item>
                <el-button type="primary" @click="handleLogin" :loading="loading" style="width: 80%;">登录</el-button>
            </el-form-item>
        </el-form>
    </div>
</template>

<script>
    export default {
        name: "LoginPage",
        data(){
            return {
                ruleForm:{
                    username:'admin1',
                    password:'1234'
                },
                type:'sysAdmin',
                loading: false,
                rules:{
                    username:[
                        { required: true,message: '请输入账号',trigger: 'blur'}
                    ],
                    password:[
                        { required: true,message: '请输入密码',trigger: 'blur'}
                    ]
                }
            }
        },
        methods:{
            handleLogin(){
                this.$refs.ruleForm.validate( (valid) =>{
                    if(valid){
                        this.loading = true;
                        if(this.type === 'sysAdmin'){
                            this.$http.get('/systemAdmin/login',{
                                params:{
                                    username: this.ruleForm.username,
                                    password: this.ruleForm.password
                                }
                            })
                                .then(res => {
                                    this.loading = false;
                                    if(res.data.code === -1){
                                        this.$message.warning('用户名不存在')
                                    }
                                    if(res.data.code === -2){
                                        this.$message.error('密码错误')
                                    }
                                    if(res.data.code === 0){
                                        this.$message.success('登录成功');
                                        localStorage.setItem('systemAdmin',JSON.stringify(res.data.data));
                                        this.$router.push('/systemAdmin');
                                    }

                                })

                        }else if (this.type === 'dormitoryAdmin'){
                            this.$http.get('/dormitoryAdmin/login',{params:this.ruleForm})
                                .then(res => {
                                    this.loading = false;
                                    if(res.data.code === -1){
                                        this.$message.warning('用户名不存在')
                                    }
                                    if(res.data.code === -2){
                                        this.$message.error('密码错误')
                                    }
                                    if(res.data.code === 0){
                                        this.$message.success('登录成功');
                                        localStorage.setItem('dormitoryAdmin',JSON.stringify(res.data.data));
                                        this.$router.push('/systemAdmin');
                                    }

                                })
                        }
                    }
                });

            }
        }
    }
</script>

<style scoped>
    .login-container{
        width: 30%;
        margin: 140px auto;
        border: 1px solid #cccccc;
        border-radius: 15px;
        padding: 5px 20px;
    }
</style>

StudentAdd.vue

<template>
    <div class="student-add">
        <el-form :model="ruleForm" :rules="rules" ref="ruleForm"
                label-width="80px" label-position="left">
            <el-form-item label="学号" prop="number">
                <el-input type="text" v-model="ruleForm.number"></el-input>
            </el-form-item>
            <el-form-item label="姓名" prop="name">
                <el-input type="text" v-model="ruleForm.name"></el-input>
            </el-form-item>
            <el-form-item label="性别" prop="gender">
                <div style="width: 170px;height: 30px;">
                    <template>
                        <el-radio v-model="ruleForm.gender" label="男">男</el-radio>
                        <el-radio v-model="ruleForm.gender" label="女">女</el-radio>
                    </template>
                </div>
            </el-form-item>
            <el-form-item label="宿舍" prop="dormitoryId">
                <el-select v-model="ruleForm.dormitoryId" placeholder="请选择宿舍">
                    <el-option v-for="(item,index) in dormitoryList" :key="index" :label="item.name" :value="item.id"></el-option>
                </el-select>
            </el-form-item>
            <el-form-item>
                <el-button type="primary" @click="handleSubmit('ruleForm')">保存</el-button>
                <el-button @click="handleReset('ruleForm')">重置</el-button>
            </el-form-item>
        </el-form>
    </div>
</template>

<script>
    export default {
        name: "StudentAdd",
        data(){
            return {
                dormitoryList:[],
                ruleForm:{
                    number:'',
                    name:'',
                    gender:'男',
                    dormitoryId:''
                },
                rules:{
                    number:[{ required: true, message: '请输入学号', trigger: 'blur'}],
                    name: [{ required: true, message: '请输入姓名', trigger: 'blur'}],
                    gender: [{ required: true, message: '请选择性别', trigger: 'blur'}],
                    dormitoryId: [{ required: true, message: '请选择宿舍', trigger: 'change'}],
                }
            }
        },
        methods:{
            handleSubmit(formName){
                this.$refs[formName].validate((valid) => {
                    if(valid){
                        this.$http.post('/student/save',this.ruleForm).then(res => {
                            if(res.data.code === 0){
                                this.$message.success('保存成功!');
                                this.$router.push('/studentManager');
                            }
                        })
                    }
                })

            },
            handleReset(formName){
                this.$refs[formName].resetFields();
            }
        },
        created(){
            this.$http.get('/dormitory/availableList').then(res => {
                this.dormitoryList = res.data.data;
            });
        }
    }
</script>

<style scoped>
    .student-add{
        margin-top: 60px;
        margin-left: 330px;
        width: 350px;
        height: 500px;

    }
</style>

StudentManager.vue

<template>
    <div class="student-manager">
        <el-form :model="ruleForm" :rules="rules" ref="ruleForm"
                 label-width="65px" label-position="left">
            <el-form-item label="字段" prop="key">
                <el-select v-model="ruleForm.key" style="width: 160px;float: left;">
                    <el-option label="学号" value="number"></el-option>
                    <el-option label="姓名" value="name"></el-option>
                </el-select>
            </el-form-item>
            <div style="width: 400px; height: 60px;position:relative; top:-51px;left: 300px;">
                <el-form-item label="值">
                    <el-input type="text" v-model="ruleForm.value" palceholder="请输入关键字" style="width:160px;"></el-input>
                    <el-button type="primary" icon="el-icon-search" style="position:relative;left:20px;" @click="handleSearch('ruleForm')">搜索</el-button>
                </el-form-item>
            </div>
        </el-form>

        <el-table
                :data="tableData"
                border
                style="width: 100%;position: relative;top: -30px;">
            <el-table-column
                    prop="id"
                    label="ID">
            </el-table-column>
            <el-table-column
                    prop="number"
                    label="学号">
            </el-table-column>
            <el-table-column
                    prop="name"
                    label="姓名">
            </el-table-column>
            <el-table-column
                    prop="gender"
                    label="性别">
            </el-table-column>
            <el-table-column
                    prop="dormitoryName"
                    label="宿舍">
            </el-table-column>
            <el-table-column
                    prop="state"
                    label="住宿状态">
            </el-table-column>
            <el-table-column
                    prop="createDate"
                    label="入住时间">
            </el-table-column>
            <el-table-column label="操作" >
                <template slot-scope="scope">
                    <el-button @click="edit(scope.row)">编辑</el-button>
                    <el-button @click="del(scope.row)" type="danger">删除</el-button>
                </template>
            </el-table-column>
        </el-table>
        <el-pagination
                background
                layout="prev,pager,next"
                :pageSize="pageSize"
                :total="total"
                :current-page.sync="currentPage"
                @current-change="page">

        </el-pagination>
    </div>
</template>

<script>
    export default {
        name: "StudentManager",
        data(){
            return {
                tableData:null,
                currentPage: 1,
                pageSize: 3,
                total:null,
                ruleForm:{
                    key:'',
                    value:'',
                    page:'',
                    size: 3
                },
                rules:{
                    key:[{required: true, message:'请选择字段', trigger: 'change'}]
                }
            }
        },
        methods:{
            //加载数据
            loadData(){
                this.$http.get('/student/list/1/'+ this.pageSize).then(res => {
                    this.tableData = res.data.data.data;
                    this.total = res.data.data.total;
                });
            },
            edit(row){
                this.$router.push('/studentUpdate?id=' + row.id);
            },
            del(row){
                this.$confirm('确定要删除【' + row.name +'】吗?','删除提示',{
                    confirmButtonText:'删除',
                    cancelButtonText:'取消',
                    type:'warning'
                }).then(() => {
                    this.$http.delete('/student/delete/'+ row.id)
                        .then( res => {
                            if(res.data.code === 0){
                                this.$message.success('删除成功!');
                            }
                        }).then(()=> {
                        this.currentPage = 1;
                        this.loadData();
                    })
                }).catch(()=>{
                    this.$message({
                        type:'info',
                        message:'已取消删除!'
                    });
                });
            },
            //搜索
            handleSearch(formName){
                this.currentPage = 1;
                this.$refs[formName].validate((valid) =>{
                    if(valid){
                        this.ruleForm.page = this.currentPage;
                        this.$http.get('/student/search',{params: this.ruleForm})
                            .then(res => {
                                this.tableData = res.data.data.data;
                                this.total = res.data.data.total;
                            })
                    }
                })
            },
            page(currentPage){
                //没有查询条件
                if(this.ruleForm.value === ''){
                    this.$http.get('/student/list/'+ currentPage +'/' + this.pageSize)
                        .then(res => {
                            this.tableData = res.data.data.data;
                            this.total = res.data.data.total;
                        })
                } else {
                    //有查询条件
                    this.ruleForm.page = this.currentPage;
                    this.$http.get('/student/search',{params: this.ruleForm})
                        .then(res => {
                            this.tableData = res.data.data.data;
                            this.total = res.data.data.total;
                        })
                }
            }
        },
        created(){
            this.loadData();
        }
    }
</script>

<style scoped>
    .student-manager{
        margin-top: 60px;
        margin-left: 80px;

    }
</style>

StudentUpdate.vue

<template>
    <div class="student-add">
        <el-form :model="ruleForm" :rules="rules" ref="ruleForm"
                 label-width="80px" label-position="left">
            <el-form-item label="ID">
                <el-input type="text" v-model="ruleForm.id" readonly></el-input>
            </el-form-item>
            <el-form-item label="学号" prop="number">
                <el-input type="text" v-model="ruleForm.number"></el-input>
            </el-form-item>
            <el-form-item label="姓名" prop="name">
                <el-input type="text" v-model="ruleForm.name"></el-input>
            </el-form-item>
            <el-form-item label="性别" prop="gender">
                <div style="width: 170px;height: 30px;">
                    <template>
                        <el-radio v-model="ruleForm.gender" label="男">男</el-radio>
                        <el-radio v-model="ruleForm.gender" label="女">女</el-radio>
                    </template>
                </div>
            </el-form-item>
            <el-form-item label="宿舍" prop="dormitoryId">
                <el-select v-model="ruleForm.dormitoryId" placeholder="请选择宿舍">
                    <el-option v-for="(item,index) in dormitoryList" :key="index" :label="item.name" :value="item.id"></el-option>
                </el-select>
            </el-form-item>
            <el-form-item>
                <el-button type="primary" @click="handleSubmit('ruleForm')">更新</el-button>
                <el-button @click="handleCancel">取消</el-button>
            </el-form-item>
        </el-form>
    </div>
</template>

<script>
    export default {
        name: "StudentUpdate",
        data(){
            return {
                dormitoryList:[],
                ruleForm:{
                    id:'',
                    number:'',
                    name:'',
                    gender:'男',
                    dormitoryId:''
                },
                rules:{
                    number:[{ required: true, message: '请输入学号', trigger: 'blur'}],
                    name: [{ required: true, message: '请输入姓名', trigger: 'blur'}],
                    gender: [{ required: true, message: '请选择性别', trigger: 'blur'}],
                    dormitoryId: [{ required: true, message: '请选择宿舍', trigger: 'change'}],
                }
            }
        },
        methods:{
            handleSubmit(formName){
                this.$refs[formName].validate((valid) => {
                    if(valid){
                        this.$http.put('/student/update',this.ruleForm).then(res => {
                            if(res.data.code === 0){
                                this.$message.success('更新成功!');
                                this.$router.push('/studentManager');
                            }
                        })
                    }
                })

            },
            handleCancel(){
                this.$router.push('/studentManager');
            }
        },
        created(){
            this.$http.get('/dormitory/availableList').then(res => {
                this.dormitoryList = res.data.data;
            });

            this.$http.get('/student/findById/'+this.$route.query.id)
                .then(res => {
                    this.ruleForm = res.data.data;
                });
        }
    }
</script>

<style scoped>
    .student-add{
        margin-top: 60px;
        margin-left: 330px;
        width: 350px;
        height: 500px;

    }
</style>

SystemAdmin.vue

<template>
    <el-container class="home-container">
        <!--  头部      -->
        <el-header class="home-header">
            <div class="home-title">Shrimpking宿舍管理系统</div>
            <div class="home-userInfo">
                <el-dropdown>
                    <span class="el-dropdown-link home-user">
                        {{ admin.name }} <i class="el-icon-arrow-down el-icon--right home-user"></i>
                    </span>
                    <el-dropdown-menu slot="dropdown">
                        <el-dropdown-item @click.native="logout">退出登录</el-dropdown-item>
                    </el-dropdown-menu>
                </el-dropdown>
            </div>
        </el-header>
        <el-container>
            <!-- 左边菜单           -->
            <el-aside class="home-aside" width="200px">
                <el-menu
                        default-active="1"
                        class="el-menu-vertical-demo"
                        router>
                    <el-submenu index="1">
                        <template slot="title">
                            <i class="el-icon-menu"></i>
                            <span>宿管模块</span>
                        </template>
                        <el-menu-item index="/dormitoryAdminAdd" :class="$route.path === '/dormitoryAdminAdd'? 'is-active': ''">
                            <i class="el-icon-document"></i>
                            <span slot="title">添加宿管</span>
                        </el-menu-item>
                        <el-menu-item index="/dormitoryAdminManager" :class="$route.path === '/dormitoryAdminManager'? 'is-active': ''">
                            <i class="el-icon-document"></i>
                            <span slot="title">宿管管理</span>
                        </el-menu-item>
                    </el-submenu>
                    <el-submenu index="2">
                        <template slot="title">
                            <i class="el-icon-menu"></i>
                            <span>学生模块</span>
                        </template>
                        <el-menu-item index="/studentAdd" :class="$route.path === '/studentAdd'? 'is-active': ''">
                            <i class="el-icon-document"></i>
                            <span slot="title">添加学生</span>
                        </el-menu-item>
                        <el-menu-item index="/studentManager" :class="$route.path === '/studentManager'? 'is-active': ''">
                            <i class="el-icon-document"></i>
                            <span slot="title">学生管理</span>
                        </el-menu-item>
                    </el-submenu>
                    <el-submenu index="3">
                        <template slot="title">
                            <i class="el-icon-menu"></i>
                            <span>楼宇模块</span>
                        </template>
                        <el-menu-item index="/buildingAdd">
                            <i class="el-icon-document"></i>
                            <span slot="title">添加楼宇</span>
                        </el-menu-item>
                        <el-menu-item index="/buildingManager">
                            <i class="el-icon-document"></i>
                            <span slot="title">楼宇管理</span>
                        </el-menu-item>
                    </el-submenu>
                    <el-submenu index="4">
                        <template slot="title">
                            <i class="el-icon-menu"></i>
                            <span>宿舍模块</span>
                        </template>
                        <el-menu-item index="/dormitoryAdd">
                            <i class="el-icon-document"></i>
                            <span slot="title">添加宿舍</span>
                        </el-menu-item>
                        <el-menu-item index="/dormitoryManager">
                            <i class="el-icon-document"></i>
                            <span slot="title">宿舍管理</span>
                        </el-menu-item>
                    </el-submenu>
                    <el-menu-item index="/moveoutRegister">
                        <i class="el-icon-document"></i>
                        <span slot="title">学生迁出登记</span>
                    </el-menu-item>
                    <el-menu-item index="/moveoutRecord">
                        <i class="el-icon-document"></i>
                        <span slot="title">学生迁出记录</span>
                    </el-menu-item>
                    <el-menu-item index="/absentRecord">
                        <i class="el-icon-document"></i>
                        <span slot="title">学生缺寝记录</span>
                    </el-menu-item>
                </el-menu>
            </el-aside>
            <!-- 中部           -->
            <el-container>
                <el-main>
                    <el-breadcrumb separator-class="el-icon-arrow-right">
                        <el-breadcrumb-item :to="{ path: '/systemAdmin' }">首页</el-breadcrumb-item>
                        <el-breadcrumb-item v-text="this.$router.currentRoute.meta.displayName"></el-breadcrumb-item>
                    </el-breadcrumb>
                    <router-view></router-view>
                </el-main>
                <el-footer class="home-footer">
                    <sapn class="footer-title">虾米大王</sapn>
                </el-footer>
            </el-container>
        </el-container>
    </el-container>
</template>

<script>
    export default {
        name: "SystemAdmin",
        data(){
            return {
                admin: ''
            }
        },
        methods:{
            logout(){
                this.$confirm('确定要退出吗?','提示',{
                    confirmButtonText:'退出',
                    cancelButtonText:'取消',
                    type:'warning'
                }).then(() => {
                    window.localStorage.removeItem('systemAdmin');
                    window.localStorage.removeItem('dormitoryAdmin');
                    this.$message.success('退出系统成功!');
                    this.$router.push('/login');
                }).catch(() =>{

                });
            }
        },
        created(){
            //从本地存储,取得登录的信息
            let admin = JSON.parse(window.localStorage.getItem('systemAdmin'));
            if(admin == null){
                admin = JSON.parse(window.localStorage.getItem('dormitoryAdmin'));
            }
            this.admin = admin;
        }
    }
</script>

<style scoped>
    .home-container{
        width: 100%;
        height: 100%;
    }

    .home-header{
        background-color: #1f1e20;
    }

    .home-title{
        display: inline;
        color: #9afff8;
        font-size: 24px;
        line-height: 60px;
    }

    .home-userInfo{
        width: 120px;
        height: 60px;
        line-height: 60px;
        float: right;
        margin-right: 35px;
        text-align: center;
    }

    .home-user{
        color: #bdfaff;
    }

    .home-aside{
        height: 91vh;
        overscroll-behavior-x: none;
        overscroll-behavior-y: none;
    }

    .el-menu{
        height: 100%;
    }

    .home-footer{
        width: 100%;
        text-align: center;
        border-top: 1px solid #cccccc;
    }

    .home-footer .footer-title{
        color: #666666;
        font-size: 14px;
        display: inline-block;
        margin-top: 28px;
    }
</style>

测试

登录

 首页

退出登录 

 添加宿管

 宿管管理

更新宿管

 删除宿管

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

虾米大王

有你的支持,我会更有动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值