Compare commits

...

3 Commits

Author SHA1 Message Date
Chenx221 2cd656e4c0 用户管理中创建用户功能完成
已登录用户不应能够再访问login登录页

Signed-off-by: Chenx221 <chenx221@yandex.com>
2023-06-15 10:56:47 +08:00
Chenx221 7580129273 up
Signed-off-by: Chenx221 <chenx221@yandex.com>
2023-06-14 20:39:51 +08:00
Chenx221 d5f9f09a10 front page(usermanage)
Signed-off-by: Chenx221 <chenx221@yandex.com>
2023-06-14 20:01:41 +08:00
17 changed files with 282 additions and 329 deletions

View File

@ -0,0 +1,15 @@
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<option name="myName" value="Project Default" />
<inspection_tool class="HtmlUnknownAttribute" enabled="true" level="WARNING" enabled_by_default="true">
<option name="myValues">
<value>
<list size="1">
<item index="0" class="java.lang.String" itemvalue="th:text" />
</list>
</value>
</option>
<option name="myCustomValuesEnabled" value="true" />
</inspection_tool>
</profile>
</component>

View File

@ -15,6 +15,9 @@
<select id="getAllUsers" resultType="cyou.chenx221.pojo.User">
SELECT *
FROM user
where disabled = 0
</select>
<insert id="insertUserv2" parameterType="cyou.chenx221.pojo.User">
INSERT INTO user (username, password, roles, detail)
VALUES (#{username}, #{password}, #{roles}, #{detail})
</insert>
</mapper>

View File

@ -26,6 +26,7 @@
<security:intercept-url pattern="/score/**" access="hasRole('admin')"/>
<security:intercept-url pattern="/output/**" access="hasRole('admin')"/>
<security:intercept-url pattern="/system/**" access="hasRole('admin')"/>
<security:intercept-url pattern="/user/**" access="hasRole('admin')"/>
<!-- 未登录状态下会自动跳转到/login登录页-->
<security:form-login login-page="/login"
default-target-url="/dashboard"

View File

@ -32,7 +32,7 @@
</a>
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link active" aria-current="page" href="#">首页</a>
<a class="nav-link active" aria-current="page" href="/dashboard">首页</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown1" role="button"
@ -85,7 +85,7 @@
<ul class="dropdown-menu" aria-labelledby="navbarDropdown4">
<li><a class="dropdown-item" href="#">个人设定</a></li>
<li><a class="dropdown-item" href="/system/settings">系统设定</a></li>
<li><a class="dropdown-item" href="#">用户管理</a></li>
<li><a class="dropdown-item" href="/user/usermanage">用户管理</a></li>
<li><a class="dropdown-item" href="#">日志管理</a></li>
<li><a class="dropdown-item" href="#">版本信息</a></li>
</ul>

View File

@ -1,3 +1,4 @@
<%@ page import="cyou.chenx221.helper.UsernameHelper" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
@ -19,7 +20,13 @@
</head>
<body style="font-family: 'Noto Sans SC Regular',serif">
<%
if(new UsernameHelper().getCurrentUsername()!=null){
//redirect /dashboard
//note: 登陆了的就别乱访问了
response.sendRedirect("dashboard");
}
%>
<header>
<nav class="navbar navbar-expand-lg navbar-light bg-light" style="z-index: 1;min-height: 58.59px">
<div class="container">
@ -227,6 +234,7 @@
$('#exampleModal2').modal('show');
</c:if>
});
</script>
</body>
</html>

View File

@ -136,7 +136,7 @@
<button type="button" class="btn btn-primary" onclick="location.href='../dashboard'">返回</button>
<div class="table-container rounded-4 shadow-3-strong"
style="background-color: rgba(255,255,255,0.9); overflow-y: auto; max-height: 400px">
<table class="table table-striped table-hover border-primary ">
<table class="table table-striped table-hover border-primary align-middle">
<thead>
<tr>
<th scope="col">用户ID</th>
@ -144,7 +144,7 @@
<th scope="col">身份</th>
<th scope="col">身份ID</th>
<th scope="col">禁用状态</th>
<th scope="col">操作</th>
<th scope="col" class="text-center">操作</th>
</tr>
</thead>
<tbody>
@ -154,12 +154,24 @@
<td>${user.username}</td>
<td>${user.roles}</td>
<td>${user.detail}</td>
<td>${user.disabled}</td>
<td class="pt-2 pb-2 d-flex align-items-center">
<td>${user.disabled_str}</td>
<td class="text-center">
<div class="btn-group" role="group" aria-label="Basic example">
<button type="button" class="btn btn-primary btn-sm">Left</button>
<button type="button" class="btn btn-primary btn-sm">Middle</button>
<button type="button" class="btn btn-primary btn-sm">Right</button>
<c:choose>
<c:when test="${user.disabled_str == false}">
<button type="button" class="btn btn-danger"><i
class="fas fa-ban me-1"></i>禁用账户
</button>
</c:when>
<c:when test="${user.disabled_str == true}">
<button type="button" class="btn btn-success"><i
class="fas fa-circle-check me-1"></i>启用账户
</button>
</c:when>
</c:choose>
<button type="button" class="btn btn-primary" onclick="resetPWD(${user.id})"><i
class="fas fa-arrow-rotate-right me-1"></i>重设密码
</button>
</div>
</td>
</tr>
@ -173,109 +185,70 @@
<ul class="nav nav-tabs" id="ex1" role="tablist">
<li class="nav-item" role="presentation">
<a class="nav-link active fs-6" id="ex1-tab-1" data-mdb-toggle="tab" href="#ex1-tabs-1"
role="tab" aria-controls="ex1-tabs-1" aria-selected="true">成绩查询</a>
role="tab" aria-controls="ex1-tabs-1" aria-selected="true">创建账户</a>
</li>
<li class="nav-item" role="presentation">
<a class="nav-link fs-6" id="ex1-tab-2" data-mdb-toggle="tab" href="#ex1-tabs-2"
role="tab" aria-controls="ex1-tabs-2" aria-selected="true">成绩修改</a>
</li>
<li class="nav-item" role="presentation">
<a class="nav-link fs-6" id="ex1-tab-3" data-mdb-toggle="tab" href="#ex1-tabs-3"
role="tab" aria-controls="ex1-tabs-3" aria-selected="false">成绩删除</a>
</li>
<li class="nav-item" role="presentation">
<a class="nav-link fs-6" id="ex1-tab-4" data-mdb-toggle="tab" href="#ex1-tabs-4"
role="tab" aria-controls="ex1-tabs-4" aria-selected="false">成绩添加</a>
role="tab" aria-controls="ex1-tabs-2" aria-selected="true">密码重置</a>
</li>
</ul>
<!-- Tabs navs -->
<hr class="hr" style="margin: 1px"/>
<!-- Tabs content -->
<div class="tab-content" id="ex1-content">
<%-- 查询--%>
<div class="tab-pane fade show active" id="ex1-tabs-1" role="tabpanel"
aria-labelledby="ex1-tab-1">
<div class="card-body" style="min-width: 175px">
<form action="query" method="post">
<form action="create" method="post">
<div class="row mb-2">
<div class="col-12">
<div class="form-outline">
<input type="number" id="typeText1" class="form-control"
name="scoreid"/>
<label class="form-label" for="typeText1">成绩ID</label>
<input type="text" id="typeText1" class="form-control"
name="username" required/>
<label class="form-label" for="typeText1">用户名</label>
</div>
</div>
</div>
<div class="row mb-2">
<div class="row mb-2 mt-2">
<div class="col-12">
<div class="form-outline">
<input type="number" id="typeText2" class="form-control"
name="studentid"/>
<label class="form-label" for="typeText2">学号</label>
<input type="password" id="typeText2" class="form-control"
name="password" required/>
<label class="form-label" for="typeText2">密码</label>
</div>
</div>
</div>
<div class="row mb-2">
<div class="row mb-2 mt-2">
<div class="col-12">
<div class="form-outline">
<input type="text" id="typeText3" class="form-control"
name="name"/>
<label class="form-label" for="typeText3">学生姓名</label>
<input type="password" id="typeText3" class="form-control"
name="re_password" required/>
<label class="form-label" for="typeText3">重复密码</label>
</div>
</div>
</div>
<div class="row mb-2">
<div class="row mb-2 mt-2">
<div class="col-12">
<div class="form-outline">
<input type="number" id="typeText4" class="form-control"
name="courseid"/>
<label class="form-label" for="typeText4">课程ID</label>
name="roleid" disabled/>
<label class="form-label" for="typeText4">身份ID</label>
</div>
</div>
</div>
<div class="row mb-2">
<div class="row mb-2 mt-2">
<div class="col-12">
<div class="form-outline">
<input type="text" id="typeText5" class="form-control"
name="coursename"/>
<label class="form-label" for="typeText5">课程名(支持部分)</label>
</div>
<label class="form-label" for="role-select">权限组:</label>
<select name="role" id="role-select" required>
<option value="admin">管理员</option>
<option value="teacher">教师</option>
<option value="student">学生</option>
</select>
</div>
</div>
<div class="row mb-2">
<div class="col-12">
<label class="form-label" for="customRange1">成绩最小值:
<output id="score_min_value"></output>
</label>
<div class="range">
<input type="range" class="form-range" id="customRange1" name="min"
value="0" min="0" max="100" disabled/>
</div>
</div>
<div class="col-12">
<label class="form-label" for="customRange2">成绩最大值:
<output id="score_max_value"></output>
</label>
<div class="range">
<input type="range" class="form-range" id="customRange2" name="max"
value="100" min="0" max="100" disabled/>
</div>
</div>
</div>
<div class="row mb-2">
<div class="col-12">
<div class="form-check">
<input class="form-check-input" type="checkbox" value="true"
id="range_enabler" name="range_enabler"/>
<label class="form-check-label"
for="range_enabler">设定成绩范围</label>
</div>
</div>
</div>
<div class="row mb-2 mt-4">
<div class="col-lg-6 text-center">
<button type="submit" class="btn btn-primary">查询
<button type="submit" class="btn btn-primary">创建
</button>
</div>
<div class="col-lg-6 text-center">
@ -285,111 +258,49 @@
</form>
</div>
</div>
<%-- 修改--%>
<div class="tab-pane fade" id="ex1-tabs-2" role="tabpanel"
aria-labelledby="ex1-tab-2">
<div class="card-body" style="min-width: 175px">
<form action="modinfo" method="post">
<form action="" method="post">
<div class="row mb-2">
<div class="col-12">
<div class="form-outline">
<input type="number" id="typeText6" class="form-control"
required name="id"/>
<label class="form-label" for="typeText6">成绩ID (必填)</label>
<input type="number" id="typeText5" class="form-control"
name="id" readonly required/>
<label class="form-label" for="typeText5">用户ID</label>
</div>
</div>
</div>
<div class="row mb-2">
<div class="row mb-2 mt-2">
<div class="col-12">
<div class="form-outline">
<input type="number" id="typeText7" class="form-control" required
name="score"/>
<label class="form-label" for="typeText7">成绩 (必填)</label>
<input type="password" id="typeText6" class="form-control"
name="password" required/>
<label class="form-label" for="typeText6">新的密码(必填)</label>
</div>
</div>
</div>
<div class="row mb-2 mt-2">
<div class="col-12">
<div class="form-outline">
<input type="password" id="typeText7" class="form-control"
name="re_password" required/>
<label class="form-label" for="typeText7">重复密码(必填)</label>
</div>
</div>
</div>
<div class="row mb-2 mt-4">
<div class="col-lg-6 text-center">
<button type="submit" class="btn btn-primary">更改
<button type="submit" class="btn btn-primary">重置
</button>
</div>
<div class="col-lg-6 text-center">
<button type="reset" class="btn btn-secondary">重置</button>
<button type="reset" class="btn btn-secondary">清除</button>
</div>
</div>
</form>
</div>
</div>
<%-- 删除--%>
<div class="tab-pane fade" id="ex1-tabs-3" role="tabpanel" aria-labelledby="ex1-tab-3">
<div class="card-body" style="min-width: 175px">
<form action="delinfo" method="post">
<div class="row mb-2">
<div class="col-12">
<div class="form-outline">
<input type="number" id="typeText8" class="form-control"
required name="id"/>
<label class="form-label" for="typeText8">成绩ID (必填)</label>
</div>
</div>
</div>
<div class="row mb-2 mt-4">
<div class="col-lg-6 text-center">
<button type="submit" class="btn btn-primary">删除</button>
</div>
<div class="col-lg-6 text-center">
<button type="reset" class="btn btn-secondary">重置</button>
</div>
</div>
</form>
</div>
</div>
<%-- 添加--%>
<div class="tab-pane fade" id="ex1-tabs-4" role="tabpanel" aria-labelledby="ex1-tab-4">
<!-- <h5 class="card-header">信息添加</h5> -->
<div class="card-body" style="min-width: 175px">
<form action="addinfo" method="post">
<div class="row mb-2">
<div class="col-12">
<div class="form-outline">
<input type="number" id="typeText9" class="form-control" required
name="studentid"/>
<label class="form-label" for="typeText9">学号 (必填)</label>
</div>
</div>
</div>
<div class="row mb-2">
<div class="col-12">
<div class="form-outline">
<input type="number" id="typeText10" class="form-control" required
name="courseid"/>
<label class="form-label" for="typeText10">课程号 (必填)</label>
</div>
</div>
</div>
<div class="row mb-2">
<div class="col-12">
<div class="form-outline">
<input type="number" id="typeText11" class="form-control" required
name="score"/>
<label class="form-label" for="typeText11">成绩 (必填)</label>
</div>
</div>
</div>
<div class="row mb-2 mt-4">
<div class="col-lg-6 text-center">
<button type="submit" class="btn btn-primary">添加
</button>
</div>
<div class="col-lg-6 text-center">
<button type="reset" class="btn btn-secondary">重置</button>
</div>
</div>
</form>
</div>
</div>
</div>
<!-- Tabs content -->
@ -462,8 +373,21 @@
$('#exampleModal2').modal('show');
</c:if>
});
function resetPWD(id) {
$('#typeText5').val(id);
$('#ex1-tab-2').tab('show');
}
// 监听权限组选择框的变化
document.getElementById('role-select').addEventListener('change', function() {
var roleSelect = document.getElementById('role-select');
var typeText4 = document.getElementById('typeText4');
// 如果选择的是管理员权限组则禁用身份ID输入框否则启用身份ID输入框
typeText4.disabled = roleSelect.value === 'admin';
});
</script>
<script type="text/javascript" src="${pageContext.request.contextPath}/resources/js/multi_function_v1.js"></script>
</body>
</html>

View File

@ -1,5 +1,6 @@
package cyou.chenx221.controller;
import cyou.chenx221.helper.UsernameHelper;
import cyou.chenx221.mapper.UserMapper;
import cyou.chenx221.pojo.Password;
import cyou.chenx221.pojo.User;
@ -27,9 +28,6 @@ public class UserController {
@RequestMapping(path = "/signup", method = {RequestMethod.POST}) //注册
public String register(@RequestParam("username") String username, @RequestParam("password") String password, @RequestParam("re-password") String repassword, Model model) throws NoSuchAlgorithmException {
//debug start
// System.out.println("username:" + username);
//debug end
model.addAttribute("comeFrom", "reg");
//检查两次输入的密码是否相同
if (!password.equals(repassword)) {
@ -81,8 +79,71 @@ public class UserController {
@RequestMapping(path = "/user/usermanage", method = {RequestMethod.GET})
public String userManage(Model model) {
String username = new UsernameHelper().getCurrentUsername();
if (username != null) {
model.addAttribute("username", username);
}
List<User> userList = userMapper.getAllUsers();
model.addAttribute("userList", userList);
return "usermanage";
}
@RequestMapping(path = "/user/create", method = {RequestMethod.POST})
public String createUser(@RequestParam("username") String username,
@RequestParam("password") String password,
@RequestParam("re_password") String repassword,
@RequestParam(value = "roleid", defaultValue = "-1", required = false) int roleid,
@RequestParam("role") String role,
Model model) throws NoSuchAlgorithmException {
//check
if (!password.equals(repassword)) {
model.addAttribute("errorMessage", "两次输入的密码不一致,请重新输入。");
return "redirect:/user/usermanage";
}
User user = userMapper.getUserByUsername(username); //check if user exists
if (user == null) {
//检查密码强度(8~32位)需要有数字和字母允许大小写英文字母数字密码常见符号
if (password.length() < 8 || password.length() > 32) {
model.addAttribute("errorMessage", "密码长度不符合要求,请重新输入。");
return "redirect:/user/usermanage";
} else {
//检查密码是否符合要求
boolean hasNumber = false;
boolean hasLetter = false;
boolean hasinValidChar = false;
for (int i = 0; i < password.length(); i++) {
char c = password.charAt(i);
if (c >= '0' && c <= '9') {
hasNumber = true;
} else if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {
hasLetter = true;
} else if (c == '!' || c == '@' || c == '#' || c == '$' || c == '%' || c == '^' || c == '&' || c == '*' || c == '.') {
int a = 1;//do nothing
} else {
hasinValidChar = true;
}
}
if (!hasNumber || !hasLetter || hasinValidChar) {
model.addAttribute("errorMessage", "密码强度不符合要求请重新输入。要求8~32位需要有数字和字母允许大小写英文字母、数字、密码常见符号");
//FAQ: 开头测试用的账户的密码可能还真不符合要求
return "redirect:/user/usermanage";
}
// start to create
Password pw = new Password(password);
System.out.println("username:" + username + " password:" + pw.getEncryptedPassword() + " role:" + role + " roleid:" + roleid); //debug
user = new User(username, pw.getEncryptedPassword(), role, (roleid==-1?null:roleid));
int status_code = userMapper.insertUserv2(user);
if (status_code == 0) {
model.addAttribute("errorMessage", "创建用户失败,请重试。");
} else {
model.addAttribute("successMessage", "创建成功");
}
return "redirect:/user/usermanage";
}
} else {
model.addAttribute("errorMessage", "用户已存在,请重新输入。");
return "redirect:/user/usermanage";
}
}
}

View File

@ -12,4 +12,7 @@ public interface UserMapper {
void insertUser(User user);
List<User> getAllUsers();
int insertUserv2(User user);
}

View File

@ -1,14 +1,21 @@
package cyou.chenx221.pojo;
import java.util.List;
public class User {
private Integer id;
private String username;
private String password;
private String roles;
private int detail;//对应身份的id
private Integer detail;//对应身份的id // roleid
private int disabled;//是否被禁用
private boolean disabled_str;
public boolean getDisabled_str() {
return disabled_str;
}
public void setDisabled_str(boolean disabled_str) {
this.disabled_str = disabled_str;
}
public int getDisabled() {
return disabled;
@ -16,20 +23,21 @@ public class User {
public void setDisabled(int disabled) {
this.disabled = disabled;
this.disabled_str = (disabled != 0);
}
public User(String username, String password, String roles, int detail) {
public User(String username, String password, String roles, Integer detail) {
this.username = username;
this.password = password;
this.roles = roles;
this.detail = detail;
}
public int getDetail() {
public Integer getDetail() {
return detail;
}
public void setDetail(int detail) {
public void setDetail(Integer detail) {
this.detail = detail;
}

View File

@ -15,6 +15,9 @@
<select id="getAllUsers" resultType="cyou.chenx221.pojo.User">
SELECT *
FROM user
where disabled = 0
</select>
<insert id="insertUserv2" parameterType="cyou.chenx221.pojo.User">
INSERT INTO user (username, password, roles, detail)
VALUES (#{username}, #{password}, #{roles}, #{detail})
</insert>
</mapper>

View File

@ -26,6 +26,7 @@
<security:intercept-url pattern="/score/**" access="hasRole('admin')"/>
<security:intercept-url pattern="/output/**" access="hasRole('admin')"/>
<security:intercept-url pattern="/system/**" access="hasRole('admin')"/>
<security:intercept-url pattern="/user/**" access="hasRole('admin')"/>
<!-- 未登录状态下会自动跳转到/login登录页-->
<security:form-login login-page="/login"
default-target-url="/dashboard"

View File

@ -32,7 +32,7 @@
</a>
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link active" aria-current="page" href="#">首页</a>
<a class="nav-link active" aria-current="page" href="/dashboard">首页</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown1" role="button"
@ -44,17 +44,11 @@
<li><a class="dropdown-item" href="/student/queryinfo">学生信息查询</a></li>
<li><a class="dropdown-item" href="/student/modstep1">学生信息修改(旧)</a></li>
<li><a class="dropdown-item" href="/student/infomodv2">学生信息修改</a></li>
<li><a class="dropdown-item disabled"><del>自己输入sql语句查</del>(划掉,没做)</a></li>
<li>
<hr class="dropdown-divider" />
</li>
<li><a class="dropdown-item" href="/score/all">成绩查看</a></li>
<li><a class="dropdown-item" href="/score/infomodv2">成绩管理</a></li>
<li><a class="dropdown-item" href="#">学生成绩管理</a></li>
<li>
<hr class="dropdown-divider" />
</li>
<li><a class="dropdown-item" href="#">学生选课管理</a></li>
</ul>
</li>
<li class="nav-item dropdown">
@ -85,7 +79,7 @@
<ul class="dropdown-menu" aria-labelledby="navbarDropdown4">
<li><a class="dropdown-item" href="#">个人设定</a></li>
<li><a class="dropdown-item" href="/system/settings">系统设定</a></li>
<li><a class="dropdown-item" href="#">用户管理</a></li>
<li><a class="dropdown-item" href="/user/usermanage">用户管理</a></li>
<li><a class="dropdown-item" href="#">日志管理</a></li>
<li><a class="dropdown-item" href="#">版本信息</a></li>
</ul>

View File

@ -1,3 +1,4 @@
<%@ page import="cyou.chenx221.helper.UsernameHelper" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
@ -19,7 +20,13 @@
</head>
<body style="font-family: 'Noto Sans SC Regular',serif">
<%
if(new UsernameHelper().getCurrentUsername()!=null){
//redirect /dashboard
//note: 登陆了的就别乱访问了
response.sendRedirect("dashboard");
}
%>
<header>
<nav class="navbar navbar-expand-lg navbar-light bg-light" style="z-index: 1;min-height: 58.59px">
<div class="container">
@ -227,6 +234,7 @@
$('#exampleModal2').modal('show');
</c:if>
});
</script>
</body>
</html>

View File

@ -136,7 +136,7 @@
<button type="button" class="btn btn-primary" onclick="location.href='../dashboard'">返回</button>
<div class="table-container rounded-4 shadow-3-strong"
style="background-color: rgba(255,255,255,0.9); overflow-y: auto; max-height: 400px">
<table class="table table-striped table-hover border-primary ">
<table class="table table-striped table-hover border-primary align-middle">
<thead>
<tr>
<th scope="col">用户ID</th>
@ -144,7 +144,7 @@
<th scope="col">身份</th>
<th scope="col">身份ID</th>
<th scope="col">禁用状态</th>
<th scope="col">操作</th>
<th scope="col" class="text-center">操作</th>
</tr>
</thead>
<tbody>
@ -154,12 +154,24 @@
<td>${user.username}</td>
<td>${user.roles}</td>
<td>${user.detail}</td>
<td>${user.disabled}</td>
<td class="pt-2 pb-2 d-flex align-items-center">
<td>${user.disabled_str}</td>
<td class="text-center">
<div class="btn-group" role="group" aria-label="Basic example">
<button type="button" class="btn btn-primary btn-sm">Left</button>
<button type="button" class="btn btn-primary btn-sm">Middle</button>
<button type="button" class="btn btn-primary btn-sm">Right</button>
<c:choose>
<c:when test="${user.disabled_str == false}">
<button type="button" class="btn btn-danger"><i
class="fas fa-ban me-1"></i>禁用账户
</button>
</c:when>
<c:when test="${user.disabled_str == true}">
<button type="button" class="btn btn-success"><i
class="fas fa-circle-check me-1"></i>启用账户
</button>
</c:when>
</c:choose>
<button type="button" class="btn btn-primary" onclick="resetPWD(${user.id})"><i
class="fas fa-arrow-rotate-right me-1"></i>重设密码
</button>
</div>
</td>
</tr>
@ -173,109 +185,70 @@
<ul class="nav nav-tabs" id="ex1" role="tablist">
<li class="nav-item" role="presentation">
<a class="nav-link active fs-6" id="ex1-tab-1" data-mdb-toggle="tab" href="#ex1-tabs-1"
role="tab" aria-controls="ex1-tabs-1" aria-selected="true">成绩查询</a>
role="tab" aria-controls="ex1-tabs-1" aria-selected="true">创建账户</a>
</li>
<li class="nav-item" role="presentation">
<a class="nav-link fs-6" id="ex1-tab-2" data-mdb-toggle="tab" href="#ex1-tabs-2"
role="tab" aria-controls="ex1-tabs-2" aria-selected="true">成绩修改</a>
</li>
<li class="nav-item" role="presentation">
<a class="nav-link fs-6" id="ex1-tab-3" data-mdb-toggle="tab" href="#ex1-tabs-3"
role="tab" aria-controls="ex1-tabs-3" aria-selected="false">成绩删除</a>
</li>
<li class="nav-item" role="presentation">
<a class="nav-link fs-6" id="ex1-tab-4" data-mdb-toggle="tab" href="#ex1-tabs-4"
role="tab" aria-controls="ex1-tabs-4" aria-selected="false">成绩添加</a>
role="tab" aria-controls="ex1-tabs-2" aria-selected="true">密码重置</a>
</li>
</ul>
<!-- Tabs navs -->
<hr class="hr" style="margin: 1px"/>
<!-- Tabs content -->
<div class="tab-content" id="ex1-content">
<%-- 查询--%>
<div class="tab-pane fade show active" id="ex1-tabs-1" role="tabpanel"
aria-labelledby="ex1-tab-1">
<div class="card-body" style="min-width: 175px">
<form action="query" method="post">
<form action="create" method="post">
<div class="row mb-2">
<div class="col-12">
<div class="form-outline">
<input type="number" id="typeText1" class="form-control"
name="scoreid"/>
<label class="form-label" for="typeText1">成绩ID</label>
<input type="text" id="typeText1" class="form-control"
name="username" required/>
<label class="form-label" for="typeText1">用户名</label>
</div>
</div>
</div>
<div class="row mb-2">
<div class="row mb-2 mt-2">
<div class="col-12">
<div class="form-outline">
<input type="number" id="typeText2" class="form-control"
name="studentid"/>
<label class="form-label" for="typeText2">学号</label>
<input type="password" id="typeText2" class="form-control"
name="password" required/>
<label class="form-label" for="typeText2">密码</label>
</div>
</div>
</div>
<div class="row mb-2">
<div class="row mb-2 mt-2">
<div class="col-12">
<div class="form-outline">
<input type="text" id="typeText3" class="form-control"
name="name"/>
<label class="form-label" for="typeText3">学生姓名</label>
<input type="password" id="typeText3" class="form-control"
name="re_password" required/>
<label class="form-label" for="typeText3">重复密码</label>
</div>
</div>
</div>
<div class="row mb-2">
<div class="row mb-2 mt-2">
<div class="col-12">
<div class="form-outline">
<input type="number" id="typeText4" class="form-control"
name="courseid"/>
<label class="form-label" for="typeText4">课程ID</label>
name="roleid" disabled/>
<label class="form-label" for="typeText4">身份ID</label>
</div>
</div>
</div>
<div class="row mb-2">
<div class="row mb-2 mt-2">
<div class="col-12">
<div class="form-outline">
<input type="text" id="typeText5" class="form-control"
name="coursename"/>
<label class="form-label" for="typeText5">课程名(支持部分)</label>
</div>
<label class="form-label" for="role-select">权限组:</label>
<select name="role" id="role-select" required>
<option value="admin">管理员</option>
<option value="teacher">教师</option>
<option value="student">学生</option>
</select>
</div>
</div>
<div class="row mb-2">
<div class="col-12">
<label class="form-label" for="customRange1">成绩最小值:
<output id="score_min_value"></output>
</label>
<div class="range">
<input type="range" class="form-range" id="customRange1" name="min"
value="0" min="0" max="100" disabled/>
</div>
</div>
<div class="col-12">
<label class="form-label" for="customRange2">成绩最大值:
<output id="score_max_value"></output>
</label>
<div class="range">
<input type="range" class="form-range" id="customRange2" name="max"
value="100" min="0" max="100" disabled/>
</div>
</div>
</div>
<div class="row mb-2">
<div class="col-12">
<div class="form-check">
<input class="form-check-input" type="checkbox" value="true"
id="range_enabler" name="range_enabler"/>
<label class="form-check-label"
for="range_enabler">设定成绩范围</label>
</div>
</div>
</div>
<div class="row mb-2 mt-4">
<div class="col-lg-6 text-center">
<button type="submit" class="btn btn-primary">查询
<button type="submit" class="btn btn-primary">创建
</button>
</div>
<div class="col-lg-6 text-center">
@ -285,111 +258,49 @@
</form>
</div>
</div>
<%-- 修改--%>
<div class="tab-pane fade" id="ex1-tabs-2" role="tabpanel"
aria-labelledby="ex1-tab-2">
<div class="card-body" style="min-width: 175px">
<form action="modinfo" method="post">
<form action="" method="post">
<div class="row mb-2">
<div class="col-12">
<div class="form-outline">
<input type="number" id="typeText6" class="form-control"
required name="id"/>
<label class="form-label" for="typeText6">成绩ID (必填)</label>
<input type="number" id="typeText5" class="form-control"
name="id" readonly required/>
<label class="form-label" for="typeText5">用户ID</label>
</div>
</div>
</div>
<div class="row mb-2">
<div class="row mb-2 mt-2">
<div class="col-12">
<div class="form-outline">
<input type="number" id="typeText7" class="form-control" required
name="score"/>
<label class="form-label" for="typeText7">成绩 (必填)</label>
<input type="password" id="typeText6" class="form-control"
name="password" required/>
<label class="form-label" for="typeText6">新的密码(必填)</label>
</div>
</div>
</div>
<div class="row mb-2 mt-2">
<div class="col-12">
<div class="form-outline">
<input type="password" id="typeText7" class="form-control"
name="re_password" required/>
<label class="form-label" for="typeText7">重复密码(必填)</label>
</div>
</div>
</div>
<div class="row mb-2 mt-4">
<div class="col-lg-6 text-center">
<button type="submit" class="btn btn-primary">更改
<button type="submit" class="btn btn-primary">重置
</button>
</div>
<div class="col-lg-6 text-center">
<button type="reset" class="btn btn-secondary">重置</button>
<button type="reset" class="btn btn-secondary">清除</button>
</div>
</div>
</form>
</div>
</div>
<%-- 删除--%>
<div class="tab-pane fade" id="ex1-tabs-3" role="tabpanel" aria-labelledby="ex1-tab-3">
<div class="card-body" style="min-width: 175px">
<form action="delinfo" method="post">
<div class="row mb-2">
<div class="col-12">
<div class="form-outline">
<input type="number" id="typeText8" class="form-control"
required name="id"/>
<label class="form-label" for="typeText8">成绩ID (必填)</label>
</div>
</div>
</div>
<div class="row mb-2 mt-4">
<div class="col-lg-6 text-center">
<button type="submit" class="btn btn-primary">删除</button>
</div>
<div class="col-lg-6 text-center">
<button type="reset" class="btn btn-secondary">重置</button>
</div>
</div>
</form>
</div>
</div>
<%-- 添加--%>
<div class="tab-pane fade" id="ex1-tabs-4" role="tabpanel" aria-labelledby="ex1-tab-4">
<!-- <h5 class="card-header">信息添加</h5> -->
<div class="card-body" style="min-width: 175px">
<form action="addinfo" method="post">
<div class="row mb-2">
<div class="col-12">
<div class="form-outline">
<input type="number" id="typeText9" class="form-control" required
name="studentid"/>
<label class="form-label" for="typeText9">学号 (必填)</label>
</div>
</div>
</div>
<div class="row mb-2">
<div class="col-12">
<div class="form-outline">
<input type="number" id="typeText10" class="form-control" required
name="courseid"/>
<label class="form-label" for="typeText10">课程号 (必填)</label>
</div>
</div>
</div>
<div class="row mb-2">
<div class="col-12">
<div class="form-outline">
<input type="number" id="typeText11" class="form-control" required
name="score"/>
<label class="form-label" for="typeText11">成绩 (必填)</label>
</div>
</div>
</div>
<div class="row mb-2 mt-4">
<div class="col-lg-6 text-center">
<button type="submit" class="btn btn-primary">添加
</button>
</div>
<div class="col-lg-6 text-center">
<button type="reset" class="btn btn-secondary">重置</button>
</div>
</div>
</form>
</div>
</div>
</div>
<!-- Tabs content -->
@ -462,8 +373,21 @@
$('#exampleModal2').modal('show');
</c:if>
});
function resetPWD(id) {
$('#typeText5').val(id);
$('#ex1-tab-2').tab('show');
}
// 监听权限组选择框的变化
document.getElementById('role-select').addEventListener('change', function() {
var roleSelect = document.getElementById('role-select');
var typeText4 = document.getElementById('typeText4');
// 如果选择的是管理员权限组则禁用身份ID输入框否则启用身份ID输入框
typeText4.disabled = roleSelect.value === 'admin';
});
</script>
<script type="text/javascript" src="${pageContext.request.contextPath}/resources/js/multi_function_v1.js"></script>
</body>
</html>