11.7

发布时间 2023-11-13 20:37:18作者: 七安。

今天我们来实现管理员登陆与学生登录及功能等的前后端代码

首先是我的配置图

1、管理员

①后端

UserController

package com.example.controller;

import com.example.pojo.Result;
import com.example.pojo.User;
import com.example.pojo.student;
import com.example.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserService userService;

    //登陆验证
    @GetMapping("/getByUser")
    public ResponseEntity<Integer> getByUser(String username, String password, String position) {
        int re = userService.getByUser(username, password, position);
        return ResponseEntity.ok(re);
    }

    //学生注册
    @PostMapping("/add")
    public Result add(@RequestBody student s) {
        userService.add(s);
        return Result.success(s);
    }

    //登陆用户信息添加
    @PostMapping("addUser")
    public Result addUser(@RequestBody User user) {
        userService.addUser(user);
        return Result.success(user);
    }

    //查询登录数据
    @GetMapping("getUser/{username}")
    public Result getUser1(@PathVariable String username) {
        User user = userService.getUser(username);
        if (user != null) {
            return Result.success(user);
        } else {
            return Result.error("查询失败");
        }
    }

    //查询个人信息
    @GetMapping("/person/{username}")
    public Result getPerson(@PathVariable String username) {
        student s = userService.getPerson(username);
        if (s != null) {
            return Result.success(s);
        } else {
            return Result.error("查询失败");
        }
    }

    //修改用户密码
    @PutMapping("/update/{username}/{password}")
    public Result update(@PathVariable String username, @PathVariable String password) {
        userService.update(username, password);
        User user = userService.getUser(username);
        if (user != null) {
            return Result.success(user);
        } else {
            return Result.error("修改失败");
        }
    }


    //    获取全部申请注册的信息
    @GetMapping("/getAll")
    public Result getAll() {
        List<student> students = userService.getAll();
        if (students != null) {
            return Result.success(students);
        } else {
            return Result.error("当前不存在未审查的信息");
        }
    }

    //修改审批状态
    @PutMapping("/updateById/{stuId}/{state}")
    public Result updateById(@PathVariable String stuId, @PathVariable int state) {
        userService.updateById(stuId, state);
        List<student> s = userService.getAll();
        if (s != null) {
            return Result.success(s);
        } else {
            return Result.error("审批失败");
        }
    }

    //查询考试信息
    @GetMapping("/selectTest/{courseName}/{courseClass}/{courseMajor}")
    public Result selectTest(@PathVariable("courseName") String courseName, @PathVariable("courseClass") String courseClass, @PathVariable("courseMajor") String courseMajor) {
        return Result.success(userService.selectTest(courseName, courseClass, courseMajor));
    }
}

UserService

package com.example.service;

import com.example.mapper.UserMapper;
import com.example.pojo.Test;
import com.example.pojo.User;
import com.example.pojo.student;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserService {
    @Autowired
    private UserMapper userMapper;

    //登陆验证
    public int getByUser(String username, String password, String position) {
        return userMapper.getByUser(username, password, position);
    }

    //注册学生数据
    public void add(student s) {
        String stuID = s.getStuId();
        String stuName = s.getStuName();
        String grade = s.getGrade();
        String sex = s.getSex();
        String college = s.getCollege();
        String professionals = s.getProfessionals();
        String phone = s.getPhone();
        String position = s.getPosition();
        int state = s.getState();
        userMapper.add(stuID, stuName, grade, sex, college, professionals, phone, position, state);
    }
    public void addUser(User user) {
        String username=user.getUsername();
        String password=user.getPassword();
//        String[] position= user.getPosition().toArray(new String[0]);
        String position=String.join(",",user.getPosition());
        userMapper.addUser(username,password, position);
    }
    //查询个人详细信息
    public student getPerson(String username) {
        return userMapper.getPerson(username);
    }

    public User getUser(String username) {
        return userMapper.getUser(username);
    }

    public void update(String username, String password) {
        userMapper.update(username, password);
    }

    public List<student> getAll() { return userMapper.getAll();
    }

    public void updateById(String stuId,int state) { userMapper.updateById(stuId,state);

    }

    public List<Test> selectTest(String courseName, String courseClass, String courseMajor) {
        return userMapper.selectTest(courseName, courseClass, courseMajor);
    }
}

UserMapper

package com.example.mapper;

import com.example.pojo.Test;
import com.example.pojo.User;
import com.example.pojo.student;
import org.apache.ibatis.annotations.*;

import java.util.List;

@Mapper
public interface UserMapper {
    //根据用户名和密码查询用户

    //根据用户名和密码查询用户,并返回用户所在部门
    @Select("select count(*) from user where username = #{username} and password = #{password} and position like concat('%', #{position}, '%')")
    int getByUser(@Param("username") String username, @Param("password") String password, @Param("position") String position);

    @Insert("insert into student(StuID, StuName, grade, sex, College, Professionals, Phone, Position, State) VALUES (#{id},#{StuName},#{grade},#{sex},#{College},#{Professionals},#{Phone},#{Position},#{State})")
    void add(String id, String StuName, String grade, String sex, String College, String Professionals, String Phone, String Position, int State);

    @Select("select * from student where StuID=#{username}")
    student getPerson(String username);

    @Select("select  * from user where username=#{username}")
    User getUser(String username);

    @Update("update user set password=#{password} where username=#{username}")
    void update(@Param("username") String username, @Param("password") String password);

    @Select("SELECT * from student where State=0")
    List<student> getAll();

    @Update("update student set State=#{state} where StuID=#{stuId}")
    void updateById(String stuId, int state);

    @Insert("insert into user(username,password,position) VALUES (#{username},#{password},#{position})")
    void addUser(String username, String password, String position);

    @Select("select * from test1 where AuditStatus=2 and CourseName=#{courseName} and CourseClass=#{courseClass} and CourseMajor=#{courseMajor} ")
    List<Test> selectTest(String courseName, String courseClass, String courseMajor);
}

②前端

主页面index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>用户登录</title>
    <style>
        button {
            display: block;
            margin-top: 10px;
            padding: 10px;
            background-color: #007bff;
            color: #fff;
            border: none;
            border-radius: 3px;
            cursor: pointer;
        }

        .centered-form {
            text-align: center;
            display: flex;
            flex-direction: column;
            align-items: center;
            justify-content: center;
            height: 100vh;
        }

        .bordered-form {
            border: 2px solid #000; /* 边框样式 */
            padding: 20px; /* 可选的内边距 */
            background-color: #f0f0f0; /* 可选的背景颜色 */
        }
    </style>
</head>
<body>
<div class="centered-form">
    <div class="bordered-form">
        <h1>用户登录</h1>
        <form id="login">
            <label for="username">用户名:</label><input type="text" id="username">
            <br>
            <label for="password">密码:</label><input type="password" id="password">
            <br>
            <label>职位:</label>
            <div id="loginUser">
                <label><input type="radio" name="loginUser" value="专业教师">专业教师</label>
                <label><input type="radio" name="loginUser" value="专业负责人">专业负责人</label>
                <label><input type="radio" name="loginUser" value="教学副院长">教学副院长</label>
                <label><input type="radio" name="loginUser" value="学生">学生</label>
                <label><input type="radio" name="loginUser" value="系统管理员">系统管理员</label>
            </div>
            <div class="centered-buttons">
                <button type="submit" style="display: block; margin: 0 auto;">登录</button>
                <br>
                <button id="register" type="button" style="display: block; margin: 0 auto;">学生注册</button>
            </div>
        </form>
    </div>
</div>
</body>
<script>
    const register = document.getElementById("register");
    register.addEventListener("click", function () {
        window.location.href = "http://localhost:8080/STUDENT/register.html";
    });
    document.getElementById("login").addEventListener("submit", function (event) {
        event.preventDefault();
        const username = document.getElementById("username").value;
        const password = document.getElementById("password").value;
        const loginUser = document.querySelectorAll('input[name="loginUser"]');
        let l;

        loginUser.forEach(radio => {
            if (radio.checked) {
                l = radio.value;
            }
        });
        const url = `user/getByUser?username=${username}&password=${password}&position=${l}`;
        fetch(url, {
            method: 'GET',
            headers: {
                'Content-Type': 'application/json'
            }
        })
            .then(res => res.json())
            .then(data => {
                if (data === 1) {
                    alert("登录成功");
                    if (l === '系统管理员') {
                        window.location.href = "ROOT/administrator.html?username=" + encodeURIComponent(username);
                    } else if (l === '学生') {
                        window.location.href = "STUDENT/student.html?username=" + encodeURIComponent(username);
                    } else if (l === '专业教师') {
                        window.location.href = "TEACHER/teacher.html?username=" + encodeURIComponent(username);
                    } else if (l === '专业负责人') {
                        window.location.href = "HEAD/head.html?username=" + encodeURIComponent(username);
                    } else if (l === '教学副院长') {
                        window.location.href = "PRESIDENT/president.html?username=" + encodeURIComponent(username);
                    }
                } else {
                    alert("登录失败");
                    console.log(data);
                }
            })
            .catch(error => {
                alert("请求失败,请重试");
                console.error(error);
            });
    });
</script>
</html>

administrator.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>管理员页面</title>
    <style>
        .form {
            width: 600px;
            margin: 0 auto;
            /*border: 1px solid red;*/
        }

        .form table {
            margin: 0 auto;
        }

        .form table tr td {
            width: 100px;
            height: 30px;
            border: 1px solid #000;
            text-align: center;
        }

        button {
            display: block;
            margin-top: 10px;
            padding: 10px;
            background-color: #007bff;
            color: #fff;
            border: none;
            border-radius: 3px;
            cursor: pointer;
        }
    </style>
</head>
<body>
<h1 style="text-align: center">管理员系统</h1>
<script>
    // 获取URL中的用户名参数
    var urlParams = new URLSearchParams(window.location.search);
    var username = urlParams.get('username');
    console.log(username);
</script>
<div class="form">
    <table border="1px" cellspacing="0" width="600px">
        <tr>
            <th>编号</th>
            <th>功能</th>
        </tr>
        <tr>
            <td>1</td>
            <td>
                <button id="examine">审批学生注册信息</button>
            </td>
        </tr>
        <tr>
            <td>2</td>
            <td>
                <button id="insert">增加信息</button>
            </td>
        </tr>
        <tr>
            <td>3</td>
            <td>
                <button id="delete">删除信息</button>
            </td>
        </tr>
        <tr>
            <td>4</td>
            <td>
                <button id="update">修改信息</button>
            </td>
        </tr>
        <tr>
            <td>5</td>
            <td>
                <button id="select">查询信息</button>
            </td>
        </tr>
        <tr>
            <td>6</td>
            <td>
                <button id="reset">重置学生密码</button>
            </td>
        </tr>
    </table>
</div>
</body>
<script>
    document.getElementById("examine").addEventListener("click", function () {
        window.location.href = "examine.html";
    });
    document.getElementById('insert').addEventListener('click', function () {
        window.location.href = "insert.html";
    });
    document.getElementById("delete").addEventListener("click", function () {
        window.location.href = "delete.html";
    });
    document.getElementById('update').addEventListener('click', function () {
        window.location.href = "update.html";
    });
    document.getElementById("select").addEventListener("click", function () {
        window.location.href = "select.html";
    });
    document.getElementById("reset").addEventListener("click", function () {
        window.location.href = "reSet.html";
    });
</script>
</html>

insert.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>信息添加</title>
    <style>
        .reSet {
            background-color: #4CAF50;
            color: white;
            border: none;
            padding: 10px 20px;
            text-align: center;
            text-decoration: none;
            display: inline-block;
            font-size: 16px;
            margin: 4px 2px;
            cursor: pointer;
        }

        .form {
            width: 600px;
            margin: 0 auto;
            /*border: 1px solid red;*/
        }

        .form table {
            margin: 0 auto;
        }

        .form table tr td {
            width: 100px;
            height: 30px;
            border: 1px solid #000;
            text-align: center;
        }

        button {
            display: block;
            margin-top: 10px;
            padding: 10px;
            background-color: #007bff;
            color: #fff;
            border: none;
            border-radius: 3px;
            cursor: pointer;
        }

        .centered-form {
            text-align: center;
            display: flex;
            flex-direction: column;
            align-items: center;
            justify-content: center;
            height: 100vh;
        }

        .bordered-form {
            border: 2px solid #000; /* 边框样式 */
            padding: 20px; /* 可选的内边距 */
            background-color: #f0f0f0; /* 可选的背景颜色 */
        }
    </style>
</head>
<body>
<h1 style="text-align: center">添加信息</h1>
<div class="centered-form">
    <div class="bordered-form">
        <div class="form">
            <form id="addForm">
                <label for="username">请输入用户名</label>
                <input type="text" id="username" minlength="8" maxlength="8" required>
                <br>
                <label for="name">请输入姓名</label>
                <input type="text" id="name">
                <br>
                <label for="college">请输入所属学院</label>
                <input type="text" id="college">
                <br>
                <label for="pro">请输入所属专业</label>
                <input type="text" id="pro">
                <br>
                <label for="position">请输入职位,001表示普通教师、010表示专业负责人、011表示即是教师又是专业负责人,111表示三种角色兼具</label>
                <input type="text" id="position">
                <button type="submit" style="display: block; margin: 0 auto;">添加</button>
            </form>
        </div>
    </div>
</div>
</body>
<script>
    document.getElementById('addForm').addEventListener('submit', function (e) {
        e.preventDefault();
        const username = document.getElementById('username');
        const name = document.getElementById('name');
        const college = document.getElementById('college');
        const pro = document.getElementById('pro');
        const role = document.getElementById('position');
        console.log(username.value + "   " + name.value + "   " + college.value + "  " + pro.value + "  " + role.value);
        addUser(username.value, role.value);
        addTea(username.value, name.value, college.value, pro.value, role.value);
    });
</script>
<script>
    function addUser(username, role) {
        const requestUrl = 'http://localhost:8080/root/add';
        const roleToPoList = {
            '111': ["专业教师", "专业负责人", "教学副院长"],
            '011': ["专业教师", "专业负责人"],
            '001': ["专业教师"],
            '100': ["教学副院长"],
            '010': ["专业负责人"],
            '110': ["专业负责人", "教学副院长"],
            '101': ["专业教师", "教学副院长"],
        };

        const poList = roleToPoList[role] || [];
        console.log(poList);
        fetch(requestUrl,
            {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/json'
                },
                body: JSON.stringify({
                    username: username,
                    password: "123456",
                    position: poList,
                })
            })
            .then(res => res.json())
            .then(data => {
                if (data.msg === 'success') {
                    alert("已将登录信息添加到数据库");
                    console.log(data);
                } else {
                    alert("添加失败  " + data.msg);
                }
            })
            .catch(error => {
                alert("请求失败,请重试");
                console.error(error);
            });
    }
</script>
<script>
    function addTea(username, name, college, pro, role) {
        const requestUrl = 'http://localhost:8080/root/addTea';
        fetch(requestUrl,
            {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/json'
                },
                body: JSON.stringify({
                    teacherID: username,
                    name: name,
                    college: college,
                    professionals: pro,
                    role: role,
                })
            })
            .then(res => res.json())
            .then(data => {
                if (data.msg === 'success') {
                    alert("添加角色成功");
                    console.log(data);
                } else {
                    alert("添加失败  " + data.msg);
                }
            })
            .catch(error => {
                alert("请求失败,请重试");
                console.error(error);
            });
    }
</script>
</html>

delete.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>删除教师信息</title>
    <style>
        .form {
            width: 600px;
            margin: 0 auto;
            /*border: 1px solid red;*/
        }

        .form table {
            margin: 0 auto;
        }

        .form table tr td {
            width: 100px;
            height: 30px;
            border: 1px solid #000;
            text-align: center;
        }

        button {
            display: block;
            margin-top: 10px;
            padding: 10px;
            background-color: #007bff;
            color: #fff;
            border: none;
            border-radius: 3px;
            cursor: pointer;
        }

        .centered-form {
            text-align: center;
            display: flex;
            flex-direction: column;
            align-items: center;
            justify-content: center;
            height: 100vh;
        }

        .bordered-form {
            border: 2px solid #000; /* 边框样式 */
            padding: 20px; /* 可选的内边距 */
            background-color: #f0f0f0; /* 可选的背景颜色 */
        }
    </style>
</head>
<body>
<h1 style="text-align: center">删除教师信息</h1>
<!--边框居中-->
<div class="centered-form">
    <!--    增加边框-->
    <div class="bordered-form">
        <!--        调整边框大小-->
        <div class="form">
            <form id="deleteForm">
                <label for="username">请输入您要删除的用户名</label>
                <input type="text" id="username" minlength="8" maxlength="8" required>
                <br>
                <button type="submit" style="display: block; margin: 0 auto;">查询</button>
                <div id="container">

                </div>
            </form>
        </div>
    </div>
</div>
</body>
<script>
    function getTea(username) {
        const requestUrl = `http://localhost:8080/root/getTea/${username}`;
        fetch(requestUrl,
            {
                method: 'GET',
                headers: {
                    'Content-Type': 'application/json'
                },
            })
            .then(response => response.json())
            .then(data => {
                if (data.msg === 'success' && data.data != null) {
                    console.log(data);
                    generateTable(data.data);
                } else {
                    alert("查询失败,未查找到该教师");
                }
            })
            .catch(error => {
                alert("请求失败,请重试");
                console.error(error);
            });
    }
</script>
<script>
    document.getElementById('deleteForm').addEventListener('submit', function (event) {
        event.preventDefault();
        const username = document.getElementById('username').value;
        console.log(username);
        getTea(username);
    });
</script>
<script>
    function generateTable(data) {
        const tableContainer = document.getElementById("container");
        // 清空 tableContainer 中的所有子节点
        while (tableContainer.hasChildNodes()) {
            tableContainer.removeChild(tableContainer.firstChild);
        }
        const table = document.createElement("table");
        const tableBody = document.createElement("tbody");
        let row = document.createElement("tr");
        row.innerHTML = '<td>工号/用户名</td><td>姓名</td><td>所属学院</td><td>所属专业</td><td>职位</td><td>是否删除</td>';
        tableBody.appendChild(row);
        const roleToPoList = {
            '111': ["专业教师", "专业负责人", "教学副院长"],
            '011': ["专业教师", "专业负责人"],
            '001': ["专业教师"],
            '100': ["教学副院长"],
            '010': ["专业负责人"],
            '110': ["专业负责人", "教学副院长"],
            '101': ["专业教师", "教学副院长"],
        };
        const poList = roleToPoList[data.role] || [];
        row = document.createElement("tr");
        row.innerHTML = `<td>${data.teacherID}</td><td>${data.name}</td><td>${data.college}</td><td>${data.professionals}</td><td>${poList}</td><td><button class="deleteButton">删除信息</button></td>`;
        tableBody.appendChild(row);
        table.appendChild(tableBody);
        tableContainer.appendChild(table);
    }
</script>
<script>
    const tableContainer = document.getElementById("container");
    tableContainer.addEventListener("click", function (event) {
        // 获取到点击事件的目标元素
        let target = event.target;
        // 向上遍历DOM树,找到具有相应类名的祖先元素
        while (target !== tableContainer && ![...target.classList].some(className => ["deleteButton"].includes(className))) {
            target = target.parentNode;
        }
        if (target.classList.contains("deleteButton")) {
            // 点击了"审批通过"按钮
            const row = target.closest("tr");
            const username = row.querySelector("td:first-child").textContent;
            deleteTea(username);
            deleteUser(username);
            // display(); // 重新显示数据
        }
    });
</script>
<script>
    function deleteTea(username) {
        const requestUrl = `http://localhost:8080/root/deleteTea/${username}`;
        fetch(requestUrl,
            {
                method: 'DELETE',
                headers: {
                    'Content-Type': 'application/json'
                },
            })
            .then(response => response.json())
            .then(data => {
                if (data.msg === 'success' && data.data != null) {
                    alert("删除教师信息成功");
                } else {
                    alert("删除失败,或是未查找到该教师");
                }
            })
            .catch(error => {
                alert("请求失败,请重试");
                console.error(error);
            });
    }
</script>
<script>
    function deleteUser(username) {
        const requestUrl = `http://localhost:8080/root/deleteUser/${username}`;
        fetch(requestUrl,
            {
                method: 'DELETE',
                headers: {
                    'Content-Type': 'application/json'
                },
            })
            .then(response => response.json())
            .then(data => {
                if (data.msg === 'success' && data.data != null) {
                    console.log(data);
                    alert("删除登录信息成功");
                } else {
                    alert("删除失败,或是未查找到该信息");
                }
            })
            .catch(error => {
                alert("请求失败,请重试");
                console.error(error);
            });
    }
</script>
</html>

update.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>修改教师信息</title>
    <style>
        .form {
            width: 600px;
            margin: 0 auto;
            /*border: 1px solid red;*/
        }

        .form table {
            margin: 0 auto;
        }

        .form table tr td {
            width: 100px;
            height: 30px;
            border: 1px solid #000;
            text-align: center;
        }

        button {
            display: block;
            margin-top: 10px;
            padding: 10px;
            background-color: #007bff;
            color: #fff;
            border: none;
            border-radius: 3px;
            cursor: pointer;
        }

        .centered-form {
            text-align: center;
            display: flex;
            flex-direction: column;
            align-items: center;
            justify-content: center;
            height: 100vh;
        }

        .bordered-form {
            border: 2px solid #000; /* 边框样式 */
            padding: 20px; /* 可选的内边距 */
            background-color: #f0f0f0; /* 可选的背景颜色 */
        }
    </style>
</head>
<body>
<h1 style="text-align: center">修改教师信息</h1>
<!--边框居中-->
<div class="centered-form">
    <!--    增加边框-->
    <div class="bordered-form">
        <!--        调整边框大小-->
        <div class="form">
            <form id="deleteForm">
                <label for="username">请输入您要修改的用户名</label>
                <input type="text" id="username" minlength="8" maxlength="8" required>
                <br>
                <button type="submit" style="display: block; margin: 0 auto;">查询</button>
                <div id="container">

                </div>
            </form>
            <form id="updateForm">
                <label for="userid">请输入用户名</label>
                <input type="text" id="userid" minlength="8" maxlength="8" required>
                <br>
                <label for="name">请输入姓名</label>
                <input type="text" id="name">
                <br>
                <label for="college">请输入所属学院</label>
                <input type="text" id="college">
                <br>
                <label for="pro">请输入所属专业</label>
                <input type="text" id="pro">
                <br>
                <label for="position">请输入职位,001表示普通教师、010表示专业负责人、011表示即是教师又是专业负责人,111表示三种角色兼具</label>
                <input type="text" id="position">
                <button type="submit" style="display: block; margin: 0 auto;">添加</button>
            </form>
        </div>
    </div>
</div>
</body>
<script>
    document.getElementById('updateForm').addEventListener('submit', function (e) {
        e.preventDefault();
        const username = document.getElementById('userid');
        const name = document.getElementById('name');
        const college = document.getElementById('college');
        const pro = document.getElementById('pro');
        const role = document.getElementById('position');
        console.log(username.value + "   " + name.value + "   " + college.value + "  " + pro.value + "  " + role.value);
        updateTea(username.value, name.value, college.value, pro.value, role.value);
    });
</script>
<script>
    function updateTea(username, name, college, pro, role) {
        const requestUrl = `http://localhost:8080/root/updateTea/${username}/${name}/${college}/${pro}/${role}`;
        fetch(requestUrl,
            {
                method: 'PUT',
                headers: {
                    'Content-Type': 'application/json'
                },
            })
            .then(res => res.json())
            .then(data => {
                if (data.msg === 'success') {
                    alert("修改信息成功");
                    console.log(data);
                } else {
                    alert("修改失败  " + data.msg);
                }
            })
            .catch(error => {
                alert("请求失败,请重试");
                console.error(error);
            });
    }
</script>
<script>
    function getTea(username) {
        const requestUrl = `http://localhost:8080/root/getTea/${username}`;
        fetch(requestUrl,
            {
                method: 'GET',
                headers: {
                    'Content-Type': 'application/json'
                },
            })
            .then(response => response.json())
            .then(data => {
                if (data.msg === 'success' && data.data != null) {
                    console.log(data);
                    generateTable(data.data);
                } else {
                    alert("查询失败,未查找到该教师");
                }
            })
            .catch(error => {
                alert("请求失败,请重试");
                console.error(error);
            });
    }
</script>
<script>
    document.getElementById('deleteForm').addEventListener('submit', function (event) {
        event.preventDefault();
        const username = document.getElementById('username').value;
        console.log(username);
        getTea(username);
    });
</script>
<script>
    function generateTable(data) {
        const tableContainer = document.getElementById("container");
        // 清空 tableContainer 中的所有子节点
        while (tableContainer.hasChildNodes()) {
            tableContainer.removeChild(tableContainer.firstChild);
        }
        const table = document.createElement("table");
        const tableBody = document.createElement("tbody");
        let row = document.createElement("tr");
        row.innerHTML = '<td>工号/用户名</td><td>姓名</td><td>所属学院</td><td>所属专业</td><td>职位</td>';
        tableBody.appendChild(row);
        const roleToPoList = {
            '111': ["专业教师", "专业负责人", "教学副院长"],
            '011': ["专业教师", "专业负责人"],
            '001': ["专业教师"],
            '100': ["教学副院长"],
            '010': ["专业负责人"],
            '110': ["专业负责人", "教学副院长"],
            '101': ["专业教师", "教学副院长"],
        };
        const poList = roleToPoList[data.role] || [];
        row = document.createElement("tr");
        row.innerHTML = `<td>${data.teacherID}</td><td>${data.name}</td><td>${data.college}</td><td>${data.professionals}</td><td>${poList}</td>`;
        tableBody.appendChild(row);
        table.appendChild(tableBody);
        tableContainer.appendChild(table);
    }
</script>
</html>

select.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>查询用户信息</title>
    <style>
        .form {
            width: 600px;
            margin: 0 auto;
            /*border: 1px solid red;*/
        }

        .form table {
            margin: 0 auto;
        }

        .form table tr td {
            width: 100px;
            height: 30px;
            border: 1px solid #000;
            text-align: center;
        }

        button {
            display: block;
            margin-top: 10px;
            padding: 10px;
            background-color: #007bff;
            color: #fff;
            border: none;
            border-radius: 3px;
            cursor: pointer;
        }

        .centered-form {
            text-align: center;
            display: flex;
            flex-direction: column;
            align-items: center;
            justify-content: center;
            height: 100vh;
        }

        .bordered-form {
            border: 2px solid #000; /* 边框样式 */
            padding: 20px; /* 可选的内边距 */
            background-color: #f0f0f0; /* 可选的背景颜色 */
        }
    </style>
</head>
<body>
<h1 style="text-align: center">查询教师信息</h1>
<!--边框居中-->
<div class="centered-form">
    <!--    增加边框-->
    <div class="bordered-form">
        <!--        调整边框大小-->
        <div class="form">
            <form id="deleteForm">
                <label for="username">请输入您要查询的用户名</label>
                <input type="text" id="username" minlength="8" maxlength="8" required>
                <br>
                <button type="submit" style="display: block; margin: 0 auto;">查询</button>
                <div id="container">

                </div>
            </form>
        </div>
    </div>
</div>
</body>
<script>
    function getTea(username)
    {
        const requestUrl=`http://localhost:8080/root/getTea/${username}`;
        fetch(requestUrl,
            {
                method: 'GET',
                headers: {
                    'Content-Type': 'application/json'
                },
            })
            .then(response => response.json())
            .then(data => {
                if (data.msg === 'success'&&data.data!=null) {
                    console.log(data);
                    generateTable(data.data);
                } else {
                    alert("查询失败,未查找到该教师");
                }
            })
            .catch(error => {
                alert("请求失败,请重试");
                console.error(error);
            });
    }
</script>
<script>
    document.getElementById('deleteForm').addEventListener('submit',function (event)
    {
        event.preventDefault();
        const username=document.getElementById('username').value;
        console.log(username);
        getTea(username);
    });
</script>
<script>
    function generateTable(data) {
        const tableContainer = document.getElementById("container");
        // 清空 tableContainer 中的所有子节点
        while (tableContainer.hasChildNodes()) {
            tableContainer.removeChild(tableContainer.firstChild);
        }
        const table = document.createElement("table");
        const tableBody = document.createElement("tbody");
        let row = document.createElement("tr");
        row.innerHTML = '<td>工号/用户名</td><td>姓名</td><td>所属学院</td><td>所属专业</td><td>职位</td>';
        tableBody.appendChild(row);
        const roleToPoList = {
            '111': ["专业教师", "专业负责人", "教学副院长"],
            '011': ["专业教师", "专业负责人"],
            '001': ["专业教师"],
            '100': ["教学副院长"],
            '010': ["专业负责人"],
            '110': ["专业负责人", "教学副院长"],
            '101': ["专业教师", "教学副院长"],
        };
        const poList = roleToPoList[data.role] || [];
        row = document.createElement("tr");
        row.innerHTML = `<td>${data.teacherID}</td><td>${data.name}</td><td>${data.college}</td><td>${data.professionals}</td><td>${poList}</td>`;
        tableBody.appendChild(row);
        table.appendChild(tableBody);
        tableContainer.appendChild(table);
    }
</script>
</html>

exmine.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>审查学生信息</title>
    <style>
        .approveButton {
            background-color: #4CAF50;
            color: white;
            border: none;
            padding: 10px 20px;
            text-align: center;
            text-decoration: none;
            display: inline-block;
            font-size: 16px;
            margin: 4px 2px;
            cursor: pointer;
        }

        .rejectButton {
            background-color: #f44336;
            color: white;
            border: none;
            padding: 10px 20px;
            text-align: center;
            text-decoration: none;
            display: inline-block;
            font-size: 16px;
            margin: 4px 2px;
            cursor: pointer;
        }

        .form {
            width: 600px;
            margin: 0 auto;
            /*border: 1px solid red;*/
        }

        .form table {
            margin: 0 auto;
        }

        .form table tr td {
            width: 100px;
            height: 30px;
            border: 1px solid #000;
            text-align: center;
        }

        button {
            display: block;
            margin-top: 10px;
            padding: 10px;
            background-color: #007bff;
            color: #fff;
            border: none;
            border-radius: 3px;
            cursor: pointer;
        }

        .centered-form {
            text-align: center;
            display: flex;
            flex-direction: column;
            align-items: center;
            justify-content: center;
            height: 100vh;
        }

        .bordered-form {
            border: 2px solid #000; /* 边框样式 */
            padding: 20px; /* 可选的内边距 */
            background-color: #f0f0f0; /* 可选的背景颜色 */
        }
    </style>
</head>
<body>
<h1 style="text-align: center">审查信息</h1>
<div class="centered-form">
    <div class="bordered-form">
        <div class="form">
            <div id="container">

            </div>
        </div>
    </div>
</div>
<script>
    const tableContainer = document.getElementById("container");
    tableContainer.addEventListener("click", function (event) {
        // 获取到点击事件的目标元素
        let target = event.target;
        // 向上遍历DOM树,找到具有相应类名的祖先元素
        while (target !== tableContainer && ![...target.classList].some(className => ["approveButton", "rejectButton"].includes(className))) {
            target = target.parentNode;
        }
        if (target.classList.contains("approveButton")) {
            // 点击了"审批通过"按钮
            const row = target.closest("tr");
            const stuId = row.querySelector("td:first-child").textContent;
            updateStateInDatabase(stuId, 1);
            // display(); // 重新显示数据
        } else if (target.classList.contains("rejectButton")) {
            // 点击了"审批不通过"按钮
            const row = target.closest("tr");
            const stuId = row.querySelector("td:first-child").textContent;
            updateStateInDatabase(stuId, -1);
        }
    });
</script>
</body>
<script>
    const requestUrl = `http://localhost:8080/user/getAll`;
    function display() {
        fetch(requestUrl, {
            method: 'GET',
            headers: {
                'Content-Type': 'application/json'
            },
        })
            .then(response => response.json())
            .then(data => {
                if (data.msg === 'success') {
                    generateTable(data.data);
                } else {
                    alert("当前不存在未审查的结果");
                }
            })
            .catch(error => {
                alert("请求失败,请重试");
                console.error(error);
            });
    }
    display();
</script>
<script>
    function generateTable(data) {
        const tableContainer = document.getElementById("container");
        // 清空 tableContainer 中的所有子节点
        while (tableContainer.hasChildNodes()) {
            tableContainer.removeChild(tableContainer.firstChild);
        }
        const table = document.createElement("table");
        const tableBody = document.createElement("tbody");
        let row = document.createElement("tr");
        row.innerHTML = '<td>学号/用户名</td><td>姓名</td><td>年级</td><td>性别</td><td>学院</td><td>专业</td><td>手机号</td><td>职位</td><td>审核状态</td><td>是否通过</td>';
        tableBody.appendChild(row);
        // 查询方式是按姓名查询或多条查询
        for (let i = 0; i < data.length; i++) {
            row = document.createElement("tr");
            row.innerHTML = `<td>${data[i].stuId}</td><td>${data[i].stuName}</td><td>${data[i].grade}</td><td>${data[i].sex}</td><td>${data[i].college}</td><td>${data[i].professionals}</td><td>${data[i].phone}</td><td>${data[i].position}</td><td>${data[i].state}</td><td><button class="approveButton">审批通过</button></td><td><button class="rejectButton">审批不通过</button></td>`;
            tableBody.appendChild(row);
            table.appendChild(tableBody);
            tableContainer.appendChild(table);
        }
    }
</script>
<script>
    function add(stuId) {
        const requestUrl = `http://localhost:8080/user/addUser`;
        fetch(requestUrl,
            {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/json'
                },
                body: JSON.stringify(
                    {
                        username: stuId,
                        password: "123456",
                        position: ["学生"],
                    })
            })
            .then(response => response.json())
            .then(data => {
                if (data.msg === 'success') {
                    alert("已添加学生用户到数据库");
                } else {
                    alert("未通过审核,取消添加入数据库");
                }
            })
            .catch(error => {
                alert("请求失败,请重试");
                console.error(error);
            });
    }
</script>
<script>
    function updateStateInDatabase(stuId, state) {
        const requestUrl = `http://localhost:8080/user/updateById/${stuId}/${state}`;
        fetch(requestUrl, {
            method: 'PUT',
            headers: {
                'Content-Type': 'application/json'
            },
        })
            .then(response => response.json())
            .then(data => {
                if (data.msg === 'success') {
                    generateTable(data.data);
                    if(state===1)
                    {
                        add(stuId);
                    }
                    alert("审核成功")
                } else {
                    alert("审核失败");
                }
            })
            .catch(error => {
                alert("请求失败,请重试");
                console.error(error);
            });
    }
</script>
</html>

reSet.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>重置学生密码</title>
    <style>
        .reSet {
            background-color: #4CAF50;
            color: white;
            border: none;
            padding: 10px 20px;
            text-align: center;
            text-decoration: none;
            display: inline-block;
            font-size: 16px;
            margin: 4px 2px;
            cursor: pointer;
        }

        .form {
            width: 600px;
            margin: 0 auto;
            /*border: 1px solid red;*/
        }

        .form table {
            margin: 0 auto;
        }

        .form table tr td {
            width: 100px;
            height: 30px;
            border: 1px solid #000;
            text-align: center;
        }

        button {
            display: block;
            margin-top: 10px;
            padding: 10px;
            background-color: #007bff;
            color: #fff;
            border: none;
            border-radius: 3px;
            cursor: pointer;
        }

        .centered-form {
            text-align: center;
            display: flex;
            flex-direction: column;
            align-items: center;
            justify-content: center;
            height: 100vh;
        }

        .bordered-form {
            border: 2px solid #000; /* 边框样式 */
            padding: 20px; /* 可选的内边距 */
            background-color: #f0f0f0; /* 可选的背景颜色 */
        }
    </style>
</head>
<body>
<h1 style="text-align: center">重置学生密码</h1>
<div class="centered-form">
    <div class="bordered-form">
        <div class="form">
                <label for="name">请输入学生姓名</label>
                <input type="text" id="name">
                <button id="select" style="display: block; margin: 0 auto;">查询</button>
            <div id="container">

            </div>
        </div>
    </div>
</div>
</body>
<script>
    function generateTable(data) {
        const tableContainer = document.getElementById("container");
        // 清空 tableContainer 中的所有子节点
        while (tableContainer.hasChildNodes()) {
            tableContainer.removeChild(tableContainer.firstChild);
        }
        const table = document.createElement("table");
        const tableBody = document.createElement("tbody");
        let row = document.createElement("tr");
        row.innerHTML = '<td>学号/用户名</td><td>姓名</td><td>年级</td><td>性别</td><td>学院</td><td>专业</td><td>手机号</td><td>职位</td><td>审核状态</td><td>密码重置</td>';
        tableBody.appendChild(row);
        let s="审核中";
        if(data.state===1)
        {
            s="审核通过";
        }else if(data.state===-1)
        {
            s="审核未通过";
        }
        if(data.state===0||data.state===-1)
        {
            row = document.createElement("tr");
            row.innerHTML = `<td>${data.stuId}</td><td>${data.stuName}</td><td>${data.grade}</td><td>${data.sex}</td><td>${data.college}</td><td>${data.professionals}</td><td>${data.phone}</td><td>${data.position}</td><td>${s}</td>`;
            tableBody.appendChild(row);

            table.appendChild(tableBody);
            tableContainer.appendChild(table);
            alert("当前学生并未通过审核或者还未进行审核,无法进行重置密码操作")
        }
        else {
            row = document.createElement("tr");
            row.innerHTML = `<td>${data.stuId}</td><td>${data.stuName}</td><td>${data.grade}</td><td>${data.sex}</td><td>${data.college}</td><td>${data.professionals}</td><td>${data.phone}</td><td>${data.position}</td><td>${s}</td><td><button class="reSet">密码重置</button></td>`;
            tableBody.appendChild(row);

            table.appendChild(tableBody);
            tableContainer.appendChild(table);
        }
    }
</script>
<script>
    document.getElementById('select').addEventListener('click', function () {
        const name = document.getElementById('name').value;

        const requestUrl = `http://localhost:8080/root/getByName/${name}`;
        fetch(requestUrl,
            {
                method: 'GET',
                headers: {
                    'Content-Type': 'application/json'
                },
            })
            .then(response => response.json())
            .then(data => {
                if (data.msg === 'success') {
                    console.log(data);
                    generateTable(data.data);
                } else {
                    alert("学生信息不存在");
                }
            })
            .catch(error => {
                alert("请求失败,请重试");
                console.error(error);
            });
    });
</script>
<script>
    const tableContainer = document.getElementById("container");
    tableContainer.addEventListener("click", function (event) {
        // 获取到点击事件的目标元素
        let target = event.target;
        // 向上遍历DOM树,找到具有相应类名的祖先元素
        while (target !== tableContainer && ![...target.classList].some(className => ["reSet"].includes(className))) {
            target = target.parentNode;
        }
        if (target.classList.contains("reSet")) {
            // 点击了"审批通过"按钮
            const row = target.closest("tr");
            const id = row.querySelector("td:first-child").textContent;
            const requestUrl = `http://localhost:8080/root/updatePassword/${id}`
            fetch(requestUrl,
                {
                    method: 'PUT',
                    headers: {
                        'Content-Type': 'application/json'
                    },
                })
                .then(response => response.json())
                .then(data => {
                    if (data.msg === 'success') {
                        console.log(data);
                        alert("重置成功")
                    } else {
                        alert("重置失败");
                    }
                })
                .catch(error => {
                    alert("请求失败,请重试");
                    console.error(error);
                });
        }
    });
</script>
</html>