From 43a44aef58840581b94b9c3beec4e9b84bb895e0 Mon Sep 17 00:00:00 2001 From: "2632890037@qq.com" <262890037@qq.com> Date: Tue, 17 Dec 2024 20:12:13 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E5=BA=9E=E7=BA=AA=E8=BE=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/service/AdminService.java | 4 +- src/service/CDCService.java | 2 +- src/service/ComplaintService.java | 2 +- src/service/CourseService.java | 4 +- src/service/NotifyService.java | 4 +- src/service/PhotoService.java | 4 +- src/service/SelectCourseService.java | 4 +- src/service/StudentService.java | 45 +++++++- src/service/TeacherService.java | 32 +++++- src/utils/JDBCUtils.java | 70 +++++++++++- .../servlet/admin/AddStudentInfoServlet.java | 4 +- src/web/servlet/admin/AddStudentServlet.java | 5 + .../admin/AdminPasswordIndexServlet.java | 4 + .../admin/AdminPasswordUpdateServlet.java | 4 +- .../admin/DoDeleteSelectCourseServlet.java | 11 +- .../admin/UpdateStudentInfoServlet.java | 6 +- .../servlet/admin/UpdateStudentServlet.java | 2 + src/web/servlet/cdc/CDCListServlet.java | 4 +- .../complaints/AddComplaintsServlet.java | 2 +- .../complaints/ComplaintListServlet.java | 5 +- .../servlet/complaints/ComplaintServlet.java | 12 +- src/web/servlet/file/DeleteFileServlet.java | 13 ++- src/web/servlet/file/DownloadServlet.java | 12 +- src/web/servlet/file/FileListServlet.java | 6 +- src/web/servlet/file/FileServlet.java | 20 +++- src/web/servlet/file/ShowPhotoServlet.java | 8 +- src/web/servlet/file/UploadImageServlet.java | 14 +-- src/web/servlet/file/UploadServlet.java | 16 ++- src/web/servlet/index/AdminIndexServlet.java | 12 +- .../servlet/index/StudentIndexServlet.java | 12 +- .../servlet/index/TeacherIndexServlet.java | 11 ++ src/web/servlet/login/FindStudentServlet.java | 14 ++- src/web/servlet/login/LoginServlet.java | 22 ++-- src/web/servlet/login/LogoutServlet.java | 12 +- src/web/servlet/login/RegisterServlet.java | 13 ++- src/web/servlet/notify/AddNotifyServlet.java | 2 +- .../servlet/notify/DeleteNotifyServlet.java | 13 ++- src/web/servlet/notify/NotifyListServlet.java | 14 ++- .../servlet/notify/NotifyListToServlet.java | 14 ++- src/web/servlet/notify/NotifyServlet.java | 9 +- .../page/FindStudentByPageServlet.java | 6 +- .../student/DeleteSelectStudentServlet.java | 15 ++- .../servlet/student/DeleteStudentServlet.java | 20 +++- .../student/DoSelectCourseServlet.java | 10 ++ .../student/StudentInfomationServlet.java | 14 +++ .../StudentInfomationUpdateServlet.java | 30 ++++- .../servlet/student/StudentListServlet.java | 17 ++- .../student/StudentOptionalCourseServlet.java | 13 ++- .../student/StudentPasswordIndexServlet.java | 18 ++- .../student/StudentPasswordUpdateServlet.java | 32 ++++++ .../StudentSelectCourseListServlet.java | 37 +++++- src/web/servlet/student/StudentServlet.java | 22 +++- .../teacher/AddOptionalCourseServlet.java | 43 +++++++ .../teacher/AddSelectCourseServlet.java | 30 ++++- .../teacher/AddTeacherInfoServlet.java | 84 +++++++++++--- .../servlet/teacher/AddTeacherServlet.java | 23 ++++ .../teacher/DeleteOptionalCourseServlet.java | 43 ++++++- .../servlet/teacher/DeleteTeacherServlet.java | 14 +++ .../FindStudentCourseScoreServlet.java | 24 ++++ .../teacher/TeacherInfomationServlet.java | 10 ++ .../servlet/teacher/TeacherListServlet.java | 32 +++++- .../teacher/TeacherOptionalCourseServlet.java | 26 ++++- .../TeacherOptionalCourseUpdateServlet.java | 46 +++++++- .../teacher/TeacherPasswordIndexServlet.java | 10 ++ .../teacher/TeacherPasswordUpdateServlet.java | 42 ++++++- .../UpdateOptionalCourseScoreServlet.java | 37 ++++++ .../servlet/teacher/UpdateScoreServlet.java | 30 +++++ .../teacher/UpdateTeacherInfoServlet.java | 45 +++++++- .../UpdateTeacherOptionalCourseServlet.java | 21 +++- .../servlet/teacher/UpdateTeacherServlet.java | 31 +++++ .../servlet/verifycode/CheckCodeServlet.java | 108 ++++++++++++++---- 71 files changed, 1246 insertions(+), 154 deletions(-) diff --git a/src/service/AdminService.java b/src/service/AdminService.java index b9240d8..885ffbe 100644 --- a/src/service/AdminService.java +++ b/src/service/AdminService.java @@ -4,11 +4,11 @@ package service; import domain.Admin; /** - * 管理员的业务接口 + * 管理员业务接口 */ public interface AdminService { /** - * 管理员登录 + * 管理员的登录 */ Admin login(Admin admin); diff --git a/src/service/CDCService.java b/src/service/CDCService.java index 13313ed..d74b6d4 100644 --- a/src/service/CDCService.java +++ b/src/service/CDCService.java @@ -7,7 +7,7 @@ import domain.CDC; import java.util.List; /** - * 学院专业班级的业务接口 + * 学院专业班级的业务接口- */ public interface CDCService { List findAllCollege(); diff --git a/src/service/ComplaintService.java b/src/service/ComplaintService.java index fe9ad0f..58fced9 100644 --- a/src/service/ComplaintService.java +++ b/src/service/ComplaintService.java @@ -5,7 +5,7 @@ import domain.Complaint; import java.util.List; /** - * 小吐槽的业务接口 + * 小吐槽的业务接口- */ public interface ComplaintService { List findAll(); diff --git a/src/service/CourseService.java b/src/service/CourseService.java index 0030ea2..7dfc87e 100644 --- a/src/service/CourseService.java +++ b/src/service/CourseService.java @@ -1,7 +1,9 @@ package service; import domain.Course; - +/** + * 课程管理服务接口 + */ public interface CourseService { void addOptionalCourse(Course course); diff --git a/src/service/NotifyService.java b/src/service/NotifyService.java index 586fe45..cec4a8a 100644 --- a/src/service/NotifyService.java +++ b/src/service/NotifyService.java @@ -5,11 +5,11 @@ import domain.Notify; import java.util.List; /** - * 公告的业务接口 + * 公告的业务接口- */ public interface NotifyService { /** - * 公告发布 + * 公告发布- */ void addNotify(Notify notify); diff --git a/src/service/PhotoService.java b/src/service/PhotoService.java index 743b9d9..717b9cf 100644 --- a/src/service/PhotoService.java +++ b/src/service/PhotoService.java @@ -1,7 +1,9 @@ package service; import domain.Photo; - +/** + * 照片管理服务接口 + */ public interface PhotoService { void addPhoto(Photo photo); diff --git a/src/service/SelectCourseService.java b/src/service/SelectCourseService.java index 4b528ce..6330277 100644 --- a/src/service/SelectCourseService.java +++ b/src/service/SelectCourseService.java @@ -3,7 +3,9 @@ package service; import domain.SelectCourse; import java.util.List; - +/** + * 选课服务接口 + */ public interface SelectCourseService { List findStudentSelectedCourseByCourseId(String cid); diff --git a/src/service/StudentService.java b/src/service/StudentService.java index f594236..bfa54cd 100644 --- a/src/service/StudentService.java +++ b/src/service/StudentService.java @@ -8,11 +8,11 @@ import java.util.List; import java.util.Map; /** - * 学生管理的业务接口 + * 学生管理的业务接口- */ public interface StudentService { /** - * 分页条件查询 + * 分页条件查询- * @param currentPage * @param rows * @param condition @@ -21,7 +21,7 @@ public interface StudentService { PageBean findStudentByPage(String currentPage, String rows, Map condition); /** - * 查询所有学生信息 + * 查询所有学生信息- */ List findAll(); @@ -49,3 +49,42 @@ public interface StudentService { List findSelectCourseAllStudent(); } +//public interface StudentService { +// /** +// * 分页条件查询- +// * @param currentPage +// * @param rows +// * @param condition +// * @return +// */ +// PageBean findStudentByPage(String currentPage, String rows, Map condition); +// +// /** +// * 查询所有学生信息- +// */ +// List findAll(); +// +// Student login(Student student); +// +// Student findStudentById(Student student); +// +// void register(Student student); +// +// void updateInfo(Student student); +// +// void updatePassword(String studentid, String newpassword); +// +// List findAllSelectCourse(String studentid); +// +// List findAllOptionalCourse(); +// +// void addSelectCourse(String studentid, String courseid); +// +// void deleteStudentById(String studentid); +// +// void deleteSelectStudent(String[] sids); +// +// void addStudentAllInfo(Student updateStudent); +// +// List findSelectCourseAllStudent(); +//} \ No newline at end of file diff --git a/src/service/TeacherService.java b/src/service/TeacherService.java index 2dfcc79..d508854 100644 --- a/src/service/TeacherService.java +++ b/src/service/TeacherService.java @@ -6,11 +6,11 @@ import domain.Teacher; import java.util.List; /** - * 教师管理的业务接口 + * 教师管理的业务接口- */ public interface TeacherService { /** - * 教师登录 + * 教师登录- */ Teacher login(Teacher teacher); @@ -33,4 +33,30 @@ public interface TeacherService { void deleteTeacherById(String teacherid); void updateInfo(Teacher updateTeacher); -} \ No newline at end of file +} +//public interface TeacherService { +// /** +// * 教师登录- +// */ +// Teacher login(Teacher teacher); +// +// List findAll(); +// +// List findMySelfOptionalCourse(String T_id); +// +// Course findOptionalCourseByCourseId(String cid); +// +// void updateCourseInfo(Course updateCourse); +// +// void deleteCourseById(String cid); +// +// void updatePassword(String teacherid, String newpassword); +// +// Teacher findTeacherById(Teacher teacher); +// +// void addTeacherAllInfo(Teacher updateTeacher); +// +// void deleteTeacherById(String teacherid); +// +// void updateInfo(Teacher updateTeacher); +//} \ No newline at end of file diff --git a/src/utils/JDBCUtils.java b/src/utils/JDBCUtils.java index 6cd7860..3ef7e5d 100644 --- a/src/utils/JDBCUtils.java +++ b/src/utils/JDBCUtils.java @@ -10,7 +10,7 @@ import java.sql.Statement; import java.util.Properties; /** - * Druid连接池工具类,将来dao层调用 + * Druid连接池工具类,将来dao层调用- */ public class JDBCUtils { private static DataSource dataSource; //定义成员变量DataSource @@ -28,14 +28,14 @@ public class JDBCUtils { } /** - * 获取连接 + * 获取连接- */ public static Connection getConnection() throws SQLException { return dataSource.getConnection(); } /** - * 释放资源 + * 释放资源- */ public static void close(Statement statement,Connection connection) { close(null,statement,connection); @@ -68,9 +68,71 @@ public class JDBCUtils { } /** - * 获取连接池方法 + * 获取连接池方法- */ public static DataSource getDataSource() { return dataSource; } } +//public class JDBCUtils { +// private static DataSource dataSource; //定义成员变量DataSource +// static { +// try { +// //加载配置文件 +// Properties properties = new Properties(); +// properties.load(JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties")); +// +// //获取DataSource +// dataSource = DruidDataSourceFactory.createDataSource(properties); +// } catch (Exception e) { +// e.printStackTrace(); +// } +// } +// +// /** +// * 获取连接- +// */ +// public static Connection getConnection() throws SQLException { +// return dataSource.getConnection(); +// } +// +// /** +// * 释放资源- +// */ +// public static void close(Statement statement,Connection connection) { +// close(null,statement,connection); +// } +// +// public static void close(ResultSet resultSet, Statement statement, Connection connection) { +// if (resultSet != null) { +// try { +// resultSet.close(); +// } catch (SQLException e) { +// e.printStackTrace(); +// } +// } +// +// if (statement != null) { +// try { +// statement.close(); +// } catch (SQLException e) { +// e.printStackTrace(); +// } +// } +// +// if (connection != null) { +// try { +// connection.close();//归还连接 +// }catch (SQLException e) { +// e.printStackTrace(); +// } +// } +// } +// +// /** +// * 获取连接池方法- +// */ +// public static DataSource getDataSource() { +// return dataSource; +// } +//} \ No newline at end of file diff --git a/src/web/servlet/admin/AddStudentInfoServlet.java b/src/web/servlet/admin/AddStudentInfoServlet.java index 8c4ad90..7ae1cab 100644 --- a/src/web/servlet/admin/AddStudentInfoServlet.java +++ b/src/web/servlet/admin/AddStudentInfoServlet.java @@ -17,7 +17,7 @@ public class AddStudentInfoServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); StudentService service= new StudentServiceImpl(); - //先进行判断是否已存在该学生 + //先进行判断是否已存在该学生- String sid = request.getParameter("student-id"); Student s = new Student(); s.setS_id(sid); @@ -59,7 +59,7 @@ public class AddStudentInfoServlet extends HttpServlet { updateStudent.setS_class(cclass); service.addStudentAllInfo(updateStudent); - request.setAttribute("update_msg","添加成功!"+String.format("%tT",new Date())); + request.setAttribute("update_msg","添加成功!"+String.format("%tT",new Date()));//返回添加信息 request.getRequestDispatcher("addStudentServlet").forward(request, response); } diff --git a/src/web/servlet/admin/AddStudentServlet.java b/src/web/servlet/admin/AddStudentServlet.java index a20a188..0b5b843 100644 --- a/src/web/servlet/admin/AddStudentServlet.java +++ b/src/web/servlet/admin/AddStudentServlet.java @@ -16,12 +16,17 @@ import javax.servlet.http.HttpSession; import java.io.IOException; import java.util.List; +/** + * 添加学生的Servlet处理类 + */ @WebServlet("/addStudentServlet") public class AddStudentServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // 设置请求编码为UTF-8,以支持中文字符的正确处理 request.setCharacterEncoding("utf-8"); HttpSession session = request.getSession(); + // 创建CDCService的实例,通常用于处理与学院、系、班级相关的业务逻辑 CDCService service2 = new CDCServiceImpl(); List collegeList = service2.findAllCollege(); List departmentList = service2.findAllDepartment(); diff --git a/src/web/servlet/admin/AdminPasswordIndexServlet.java b/src/web/servlet/admin/AdminPasswordIndexServlet.java index 908e74d..65c3995 100644 --- a/src/web/servlet/admin/AdminPasswordIndexServlet.java +++ b/src/web/servlet/admin/AdminPasswordIndexServlet.java @@ -8,7 +8,11 @@ import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet("/adminPasswordIndexServlet") +/* + 管理员密码更新界面的Servlet处理类 + */ public class AdminPasswordIndexServlet extends HttpServlet { + // 将请求转发到管理员密码更新界面 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.getRequestDispatcher("/WEB-INF/admin/adminUpdatePassword.jsp").forward(request,response); } diff --git a/src/web/servlet/admin/AdminPasswordUpdateServlet.java b/src/web/servlet/admin/AdminPasswordUpdateServlet.java index 0a5a0cd..5be2f61 100644 --- a/src/web/servlet/admin/AdminPasswordUpdateServlet.java +++ b/src/web/servlet/admin/AdminPasswordUpdateServlet.java @@ -15,7 +15,9 @@ import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.IOException; import java.util.Date; - +/** + * 管理员密码更新的Servlet处理类 + */ @WebServlet("/adminPasswordUpdateServlet") public class AdminPasswordUpdateServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { diff --git a/src/web/servlet/admin/DoDeleteSelectCourseServlet.java b/src/web/servlet/admin/DoDeleteSelectCourseServlet.java index c91b438..0d9a19d 100644 --- a/src/web/servlet/admin/DoDeleteSelectCourseServlet.java +++ b/src/web/servlet/admin/DoDeleteSelectCourseServlet.java @@ -13,9 +13,18 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.IOException; - +/** + * 处理学生选课删除请求的Servlet + */ @WebServlet("/doDeleteSelectCourseServlet") public class DoDeleteSelectCourseServlet extends HttpServlet { + /** + * 处理POST请求,执行选课删除操作。 + * + * @param request HTTP请求对象,包含客户端发送的数据。 + * @param response HTTP响应对象,用于生成返回给客户端的响应。 + * @throws IOException 如果输入或输出异常发生。 + */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); HttpSession session = request.getSession(); diff --git a/src/web/servlet/admin/UpdateStudentInfoServlet.java b/src/web/servlet/admin/UpdateStudentInfoServlet.java index 6f4b7ff..d9e9932 100644 --- a/src/web/servlet/admin/UpdateStudentInfoServlet.java +++ b/src/web/servlet/admin/UpdateStudentInfoServlet.java @@ -46,12 +46,12 @@ public class UpdateStudentInfoServlet extends HttpServlet { Student updateStudent = new Student(); - //判断输入位数是否大于数据库位数 + //判断输入位数是否大于数据库位数- if (name.length() > 4 || phone.length() > 11 || email.length()>24 || address.length() > 24 || age.length()>2 || name.contains("<") || phone.contains("<") || email.contains("<") || address.contains("<") || age.contains("<")) { request.setAttribute("update_msg","格式错误,请重新提交!"+String.format("%tT",new Date())); request.getRequestDispatcher("updateStudentServlet?sid="+sid).forward(request, response); }else { - //封装学生对象 + //封装学生对象- updateStudent.setS_id(sid); updateStudent.setS_name(name); updateStudent.setS_sex(sex); @@ -63,7 +63,7 @@ public class UpdateStudentInfoServlet extends HttpServlet { updateStudent.setS_department(department); updateStudent.setS_class(cclass); - //调用studentUpdata服务 + //调用studentUpdata服务- StudentService service= new StudentServiceImpl(); service.updateInfo(updateStudent); diff --git a/src/web/servlet/admin/UpdateStudentServlet.java b/src/web/servlet/admin/UpdateStudentServlet.java index 812fa9d..3ff7107 100644 --- a/src/web/servlet/admin/UpdateStudentServlet.java +++ b/src/web/servlet/admin/UpdateStudentServlet.java @@ -26,10 +26,12 @@ public class UpdateStudentServlet extends HttpServlet { Student student = new Student(); student.setS_id(studentid); + // 创建学生服务的实现类实例,用于处理与学生相关的业务逻辑 StudentService service = new StudentServiceImpl(); Student newStudent = service.findStudentById(student); request.setAttribute("student",newStudent); + // 创建 CDCService 的实现类实例,用于处理与院系、系别和班级相关的业务逻辑 CDCService service2 = new CDCServiceImpl(); List collegeList = service2.findAllCollege(); List departmentList = service2.findAllDepartment(); diff --git a/src/web/servlet/cdc/CDCListServlet.java b/src/web/servlet/cdc/CDCListServlet.java index 2756c6c..c7bec81 100644 --- a/src/web/servlet/cdc/CDCListServlet.java +++ b/src/web/servlet/cdc/CDCListServlet.java @@ -22,10 +22,10 @@ import java.util.List; public class CDCListServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); - //调用StudentService完成查询 + //调用StudentService完成查询- CDCService service = new CDCServiceImpl(); List cdcs = service.findAll(); - //将list存入request域 + //将list存入request域- request.setAttribute("cdcs",cdcs); HttpSession session = request.getSession(); diff --git a/src/web/servlet/complaints/AddComplaintsServlet.java b/src/web/servlet/complaints/AddComplaintsServlet.java index 3ad0368..95fca50 100644 --- a/src/web/servlet/complaints/AddComplaintsServlet.java +++ b/src/web/servlet/complaints/AddComplaintsServlet.java @@ -19,7 +19,7 @@ public class AddComplaintsServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); - //获取参数 + //获取参数- Complaint complaint = new Complaint(); String text = (String) request.getParameter("complaint"); diff --git a/src/web/servlet/complaints/ComplaintListServlet.java b/src/web/servlet/complaints/ComplaintListServlet.java index 6f38867..d1bae26 100644 --- a/src/web/servlet/complaints/ComplaintListServlet.java +++ b/src/web/servlet/complaints/ComplaintListServlet.java @@ -11,13 +11,16 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.List; - +/** + * 投诉列表处理的Servlet + */ @WebServlet("/complaintListServlet") public class ComplaintListServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); ComplaintService service = new ComplaintServiceImpl(); List complaints = service.findAll(); + // 将查询到的投诉信息存入请求属性,以便在后续的 JSP 页面中使用 request.setAttribute("complaints",complaints); request.getRequestDispatcher("/WEB-INF/complaint/complaintsList.jsp").forward(request,response); } diff --git a/src/web/servlet/complaints/ComplaintServlet.java b/src/web/servlet/complaints/ComplaintServlet.java index eada675..1ab7053 100644 --- a/src/web/servlet/complaints/ComplaintServlet.java +++ b/src/web/servlet/complaints/ComplaintServlet.java @@ -11,16 +11,26 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.List; - +/** + * 投诉处理的Servlet + */ @WebServlet("/complaintServlet") public class ComplaintServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // 设置请求编码为UTF-8,以支持中文字符的正确处理 request.setCharacterEncoding("utf-8"); ComplaintService service = new ComplaintServiceImpl(); List complaints = service.findAll(); request.setAttribute("complaints",complaints); request.getRequestDispatcher("/WEB-INF/complaint/complaintsList.jsp").forward(request,response); } + /** + * 处理GET请求,调用POST请求处理方法。 + * + * @param request HTTP请求对象,包含客户端发送的数据。 + * @param response HTTP响应对象,用于生成返回给客户端的响应。 + * @throws IOException 如果输入或输出异常发生。 + */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request,response); diff --git a/src/web/servlet/file/DeleteFileServlet.java b/src/web/servlet/file/DeleteFileServlet.java index db51f8b..623ea85 100644 --- a/src/web/servlet/file/DeleteFileServlet.java +++ b/src/web/servlet/file/DeleteFileServlet.java @@ -7,9 +7,20 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.IOException; - +/** + * 删除文件的Servlet + */ @WebServlet("/deleteFileServlet") public class DeleteFileServlet extends HttpServlet { + + /** + * 处理POST请求,执行文件删除操作。 + * + * @param request HTTP请求对象,包含客户端发送的数据。 + * @param response HTTP响应对象,用于生成返回给客户端的响应。 + * @throws ServletException 如果处理请求时发生错误。 + * @throws IOException 如果输入或输出异常发生。 + */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); String fileName = request.getParameter("filename"); diff --git a/src/web/servlet/file/DownloadServlet.java b/src/web/servlet/file/DownloadServlet.java index 6648ad5..6019987 100644 --- a/src/web/servlet/file/DownloadServlet.java +++ b/src/web/servlet/file/DownloadServlet.java @@ -14,9 +14,19 @@ import javax.servlet.http.HttpSession; import java.io.IOException; import java.io.InputStream; import java.net.URLEncoder; - +/** + * 文件下载的Servlet + */ @WebServlet("/downloadServlet") public class DownloadServlet extends HttpServlet { + /** + * 处理POST请求,执行文件下载操作。 + * + * @param request HTTP请求对象,包含客户端发送的数据。 + * @param response HTTP响应对象,用于生成返回给客户端的响应。 + * @throws ServletException 如果处理请求时发生错误。 + * @throws IOException 如果输入或输出异常发生。 + */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String filename = request.getParameter("filename"); if (filename.equalsIgnoreCase("../") || filename.equalsIgnoreCase("/")) { diff --git a/src/web/servlet/file/FileListServlet.java b/src/web/servlet/file/FileListServlet.java index ed63af3..1c378d3 100644 --- a/src/web/servlet/file/FileListServlet.java +++ b/src/web/servlet/file/FileListServlet.java @@ -25,7 +25,7 @@ public class FileListServlet extends HttpServlet { File dir = new File(this.getServletContext().getRealPath("upload")); if (!dir.exists() && !dir.isDirectory()) { System.out.println(this.getServletContext().getRealPath("upload") + "目录不存在,需要创建"); - // 创建目录 + // 创建目录- dir.mkdir(); } File[] arrs = dir.listFiles(); @@ -62,14 +62,14 @@ public class FileListServlet extends HttpServlet { } public static String getPrintSize(long size) { - // 如果字节数少于1024,则直接以B为单位,否则先除于1024,后3位因太少无意义 + // 如果字节数少于1024,则直接以B为单位,否则先除于1024,后3位因太少无意义- double value = (double) size; if (value < 1024) { return String.valueOf(value) + "B"; } else { value = new BigDecimal(value / 1024).setScale(2, BigDecimal.ROUND_DOWN).doubleValue(); } - // 如果原字节数除于1024之后,少于1024,则可以直接以KB作为单位 + // 如果原字节数除于1024之后,少于1024,则可以直接以KB作为单位- // 因为还没有到达要使用另一个单位的时候 // 接下去以此类推 if (value < 1024) { diff --git a/src/web/servlet/file/FileServlet.java b/src/web/servlet/file/FileServlet.java index 93d6861..ecce88f 100644 --- a/src/web/servlet/file/FileServlet.java +++ b/src/web/servlet/file/FileServlet.java @@ -6,13 +6,31 @@ import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; - +/** + * 文件处理的Servlet,用于转发到文件上传页面 + */ @WebServlet("/fileServlet") public class FileServlet extends HttpServlet { + /** + * 处理POST请求,转发到文件上传页面。 + * + * @param request HTTP请求对象,包含客户端发送的数据。 + * @param response HTTP响应对象,用于生成返回给客户端的响应。 + * @throws ServletException 如果处理请求时发生错误。 + * @throws IOException 如果输入或输出异常发生。 + */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.getRequestDispatcher("/WEB-INF/admin/uploadFile.jsp").forward(request,response); } + /** + * 处理GET请求,直接调用POST请求处理方法。 + * + * @param request HTTP请求对象,包含客户端发送的数据。 + * @param response HTTP响应对象,用于生成返回给客户端的响应。 + * @throws ServletException 如果处理请求时发生错误。 + * @throws IOException 如果输入或输出异常发生。 + */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request,response); } diff --git a/src/web/servlet/file/ShowPhotoServlet.java b/src/web/servlet/file/ShowPhotoServlet.java index 1710ccc..0c0fd31 100644 --- a/src/web/servlet/file/ShowPhotoServlet.java +++ b/src/web/servlet/file/ShowPhotoServlet.java @@ -58,13 +58,13 @@ public class ShowPhotoServlet extends HttpServlet { if (imagePath.toLowerCase().endsWith(".jpg"))// 使用编码处理文件流的情况: { response.setContentType(JPG);// 设定输出的类型 - // 得到图片的真实路径 + // 得到图片的真实路径- - // 得到图片的文件流 + // 得到图片的文件流- InputStream imageIn = new FileInputStream(new File(imagePath)); - // 得到输入的编码器,将文件流进行jpg格式编码 + // 得到输入的编码器,将文件流进行jpg格式编码- JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(imageIn); - // 得到编码后的图片对象 + // 得到编码后的图片对象- BufferedImage image = decoder.decodeAsBufferedImage(); // 得到输出的编码器 JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(output); diff --git a/src/web/servlet/file/UploadImageServlet.java b/src/web/servlet/file/UploadImageServlet.java index 62c7b9d..c105e8c 100644 --- a/src/web/servlet/file/UploadImageServlet.java +++ b/src/web/servlet/file/UploadImageServlet.java @@ -41,29 +41,29 @@ public class UploadImageServlet extends HttpServlet { request.setAttribute("path", ""); String filename = null; String newFileName = null; - // 设置上传图片的保存路径 + // 设置上传图片的保存路径- String savePath = this.getServletContext().getRealPath("/photos"); File file = new File(savePath); - // 判断上传文件的保存目录是否存在 + // 判断上传文件的保存目录是否存在- if (!file.exists() && !file.isDirectory()) { System.out.println(savePath + "目录不存在,需要创建"); // 创建目录 file.mkdir(); } DiskFileItemFactory factory = new DiskFileItemFactory(); - // 2、创建一个文件上传解析器 + // 2、创建一个文件上传解析器- ServletFileUpload upload = new ServletFileUpload(factory); upload.setHeaderEncoding("UTF-8"); - // 3、判断提交上来的数据是否是上传表单的数据 + // 3、判断提交上来的数据是否是上传表单的数据- if (!ServletFileUpload.isMultipartContent(request)) { - // 按照传统方式获取数据 + // 按照传统方式获取数据- return; } try { List list = upload.parseRequest(request); - System.out.println(list.toString());// 文件的路径 以及保存的路径 + System.out.println(list.toString());// 文件的路径 以及保存的路径- for (FileItem item : list) { - filename = item.getName();// 获得一个项的文件名称 + filename = item.getName();// 获得一个项的文件名称- try { newFileName = id + filename.substring(filename.lastIndexOf(".")); filename = id + filename.substring(filename.lastIndexOf(".")); diff --git a/src/web/servlet/file/UploadServlet.java b/src/web/servlet/file/UploadServlet.java index 3b9385f..cabb805 100644 --- a/src/web/servlet/file/UploadServlet.java +++ b/src/web/servlet/file/UploadServlet.java @@ -15,9 +15,20 @@ import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.ProgressListener; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; - +/** + * 文件上传的Servlet + */ @WebServlet("/uploadServlet") public class UploadServlet extends HttpServlet { + + /** + * 处理POST请求,用于执行文件上传操作。 + * + * @param request HTTP请求对象,包含客户端发送的数据。 + * @param response HTTP响应对象,用于生成返回给客户端的响应。 + * @throws ServletException 如果处理请求时发生错误。 + * @throws IOException 如果输入或输出异常发生。 + */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8"); @@ -93,6 +104,9 @@ public class UploadServlet extends HttpServlet { } } + /** + * 表示文件上传或下载过程中的信息类 + */ class ProcessInfo{ public long totalSize = 1; public long readSize = 0; diff --git a/src/web/servlet/index/AdminIndexServlet.java b/src/web/servlet/index/AdminIndexServlet.java index dc1ad93..8474ca1 100644 --- a/src/web/servlet/index/AdminIndexServlet.java +++ b/src/web/servlet/index/AdminIndexServlet.java @@ -6,9 +6,19 @@ import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; - +/** + * 管理员首页的Servlet,用于处理对管理员主页的请求 + */ @WebServlet("/adminIndexServlet") public class AdminIndexServlet extends HttpServlet { + /** + * 处理POST请求,转发到管理员首页的JSP页面。 + * + * @param request HTTP请求对象,包含客户端发送的数据。 + * @param response HTTP响应对象,用于生成返回给客户端的响应。 + * @throws ServletException 如果处理请求时发生错误。 + * @throws IOException 如果输入或输出异常发生。 + */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.getRequestDispatcher("/WEB-INF/admin/aIndex.jsp").forward(request,response); } diff --git a/src/web/servlet/index/StudentIndexServlet.java b/src/web/servlet/index/StudentIndexServlet.java index 66688fc..cb7f173 100644 --- a/src/web/servlet/index/StudentIndexServlet.java +++ b/src/web/servlet/index/StudentIndexServlet.java @@ -6,9 +6,19 @@ import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; - +/** + * 学生首页的Servlet,用于处理学生主页的请求 + */ @WebServlet("/studentIndexServlet") public class StudentIndexServlet extends HttpServlet { + /** + * 处理POST请求,转发到学生首页的JSP页面。 + * + * @param request HTTP请求对象,包含客户端发送的数据。 + * @param response HTTP响应对象,用于生成返回给客户端的响应。 + * @throws ServletException 如果处理请求时发生错误。 + * @throws IOException 如果输入或输出异常发生。 + */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.getRequestDispatcher("/WEB-INF/student/sIndex.jsp").forward(request,response); } diff --git a/src/web/servlet/index/TeacherIndexServlet.java b/src/web/servlet/index/TeacherIndexServlet.java index b60e68e..5aec915 100644 --- a/src/web/servlet/index/TeacherIndexServlet.java +++ b/src/web/servlet/index/TeacherIndexServlet.java @@ -7,8 +7,19 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; +/** + * 教师首页的Servlet,用于处理教师主页的请求 + */ @WebServlet("/teacherIndexServlet") public class TeacherIndexServlet extends HttpServlet { + /** + * 处理POST请求,转发到教师首页的JSP页面。 + * + * @param request HTTP请求对象,包含客户端发送的数据。 + * @param response HTTP响应对象,用于生成返回给客户端的响应。 + * @throws ServletException 如果处理请求时发生错误。 + * @throws IOException 如果输入或输出异常发生。 + */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.getRequestDispatcher("/WEB-INF/teacher/tIndex.jsp").forward(request,response); } diff --git a/src/web/servlet/login/FindStudentServlet.java b/src/web/servlet/login/FindStudentServlet.java index e308d1b..23a1ede 100644 --- a/src/web/servlet/login/FindStudentServlet.java +++ b/src/web/servlet/login/FindStudentServlet.java @@ -13,9 +13,19 @@ import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.HashMap; import java.util.Map; - +/** + * 查找学生信息的Servlet + */ @WebServlet("/findStudentServlet") public class FindStudentServlet extends HttpServlet { + /** + * 处理POST请求,根据学生ID查找学生信息。 + * + * @param request HTTP请求对象,包含客户端发送的数据。 + * @param response HTTP响应对象,用于生成返回给客户端的响应。 + * @throws ServletException 如果处理请求时发生错误。 + * @throws IOException 如果输入或输出异常发生。 + */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("application/json;charset=utf-8"); String studentId = request.getParameter("studentid"); @@ -34,7 +44,7 @@ public class FindStudentServlet extends HttpServlet { map.put("studentExsit", false); map.put("msg", "用户名可用"); } - //map转为json传给客户端 + //map转为json传给客户端- ObjectMapper mapper = new ObjectMapper(); mapper.writeValue(response.getWriter(),map); } catch (Exception e) { diff --git a/src/web/servlet/login/LoginServlet.java b/src/web/servlet/login/LoginServlet.java index eae657c..6312bf9 100644 --- a/src/web/servlet/login/LoginServlet.java +++ b/src/web/servlet/login/LoginServlet.java @@ -32,38 +32,38 @@ public class LoginServlet extends HttpServlet { Teacher loginTeacher = null; Admin loginAdmin = null; - //设置编码 + //设置编码- request.setCharacterEncoding("utf-8"); - //获取数据 + //获取数据- String verifycode = request.getParameter("verifycode"); String loginid = request.getParameter("id"); String loginpassword = request.getParameter("password"); - //验证码校验 + //验证码校验- HttpSession session = request.getSession(); String checkcode_server = (String) session.getAttribute("CHECKCODE_SERVER"); session.removeAttribute("CHECKCODE_SERVER");//确保验证一次性 if (checkcode_server == null || !checkcode_server.equalsIgnoreCase(verifycode)) { - //验证码不正确 + //验证码不正确- request.setAttribute("login_msg","验证码错误"); - //跳转页面 + //跳转页面- request.setAttribute("loginid",loginid); request.setAttribute("loginpassword",loginpassword); request.getRequestDispatcher("/login.jsp").forward(request,response); return; } - //封装对象 + //封装对象- String id = request.getParameter("id"); String password = request.getParameter("password"); String roles = request.getParameter("roles"); - //公告加载 + //公告加载- NotifyService notifyService= new NotifyServiceImpl(); List notifys = notifyService.find(); session.setAttribute("notifys",notifys); - //判断roles封装对象、保存session、调用不同Service查询 + //判断roles封装对象、保存session、调用不同Service查询- if ("student".equals(roles)) { Student student = new Student(); @@ -79,7 +79,7 @@ public class LoginServlet extends HttpServlet { // request.getRequestDispatcher("/WEB-INF/student/sIndex.jsp").forward(request,response); response.sendRedirect("studentIndexServlet"); }else { - //登录失败 提示信息 + //登录失败 提示信息- request.setAttribute("login_msg", "用户名或密码错误!"); request.setAttribute("loginid",loginid); request.setAttribute("loginpassword",loginpassword); @@ -100,7 +100,7 @@ public class LoginServlet extends HttpServlet { // request.getRequestDispatcher("/WEB-INF/teacher/tIndex.jsp").forward(request, response); response.sendRedirect("teacherIndexServlet"); }else { - //登录失败 提示信息 + //登录失败 提示信息- request.setAttribute("login_msg", "用户名或密码错误!"); request.getRequestDispatcher("/login.jsp").forward(request, response); } @@ -120,7 +120,7 @@ public class LoginServlet extends HttpServlet { // request.getRequestDispatcher("/WEB-INF/admin/aIndex.jsp").forward(request,response); response.sendRedirect("adminIndexServlet"); }else { - //登录失败 提示信息 + //登录失败 提示信息- request.setAttribute("login_msg", "用户名或密码错误!"); request.getRequestDispatcher("/login.jsp").forward(request, response); } diff --git a/src/web/servlet/login/LogoutServlet.java b/src/web/servlet/login/LogoutServlet.java index 6ca6781..6dd439f 100644 --- a/src/web/servlet/login/LogoutServlet.java +++ b/src/web/servlet/login/LogoutServlet.java @@ -7,9 +7,19 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.IOException; - +/** + * 处理用户注销的Servlet + */ @WebServlet("/logoutServlet") public class LogoutServlet extends HttpServlet { + /** + * 处理POST请求,实现用户注销功能。 + * + * @param request HTTP请求对象,包含客户端发送的数据。 + * @param response HTTP响应对象,用于生成返回给客户端的响应。 + * @throws ServletException 如果处理请求时发生错误。 + * @throws IOException 如果输入或输出异常发生。 + */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); HttpSession session = request.getSession(); diff --git a/src/web/servlet/login/RegisterServlet.java b/src/web/servlet/login/RegisterServlet.java index 7067f61..cd6c844 100644 --- a/src/web/servlet/login/RegisterServlet.java +++ b/src/web/servlet/login/RegisterServlet.java @@ -8,10 +8,21 @@ import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.*; import java.io.IOException; - +/** + * 用户注册的Servlet + */ @WebServlet("/registerServlet") public class RegisterServlet extends HttpServlet { + /** + * 处理POST请求,实现用户注册功能。 + * + * @param request HTTP请求对象,包含客户端发送的数据。 + * @param response HTTP响应对象,用于生成返回给客户端的响应。 + * @throws ServletException 如果处理请求时发生错误。 + * @throws IOException 如果输入或输出异常发生。 + */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // 获取当前用户的会话 HttpSession session = request.getSession(); String studentid = request.getParameter("studentid"); String password = request.getParameter("password"); diff --git a/src/web/servlet/notify/AddNotifyServlet.java b/src/web/servlet/notify/AddNotifyServlet.java index 797bcea..86d93c3 100644 --- a/src/web/servlet/notify/AddNotifyServlet.java +++ b/src/web/servlet/notify/AddNotifyServlet.java @@ -22,7 +22,7 @@ public class AddNotifyServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); - //获取参数 + //获取参数- Notify notify = new Notify(); notify.setNotifyInfo((String) request.getParameter("notifyInfo")); Date d = new Date(); diff --git a/src/web/servlet/notify/DeleteNotifyServlet.java b/src/web/servlet/notify/DeleteNotifyServlet.java index fb9f8d7..9242efa 100644 --- a/src/web/servlet/notify/DeleteNotifyServlet.java +++ b/src/web/servlet/notify/DeleteNotifyServlet.java @@ -11,10 +11,21 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.IOException; - +/** + * 删除通知的Servlet + */ @WebServlet("/deleteNotifyServlet") public class DeleteNotifyServlet extends HttpServlet { + /** + * 处理POST请求,删除指定ID的通知。 + * + * @param request HTTP请求对象,包含客户端发送的数据。 + * @param response HTTP响应对象,用于生成返回给客户端的响应。 + * @throws ServletException 如果处理请求时发生错误。 + * @throws IOException 如果输入或输出异常发生。 + */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // 设置请求的字符编码为UTF-8,以支持中文字符的正确处理 request.setCharacterEncoding("utf-8"); HttpSession session = request.getSession(); String notifyid = request.getParameter("id"); diff --git a/src/web/servlet/notify/NotifyListServlet.java b/src/web/servlet/notify/NotifyListServlet.java index 2e82af4..902096a 100644 --- a/src/web/servlet/notify/NotifyListServlet.java +++ b/src/web/servlet/notify/NotifyListServlet.java @@ -11,11 +11,23 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.List; - +/** + * 显示通知列表的Servlet + */ @WebServlet("/notifyListServlet") public class NotifyListServlet extends HttpServlet { + /** + * 处理POST请求,获取所有通知并转发到通知列表页面。 + * + * @param request HTTP请求对象,包含客户端发送的数据。 + * @param response HTTP响应对象,用于生成返回给客户端的响应。 + * @throws ServletException 如果处理请求时发生错误。 + * @throws IOException 如果输入或输出异常发生。 + */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // 设置请求的字符编码为UTF-8,以支持中文字符的正确处理 request.setCharacterEncoding("utf-8"); + // 创建通知服务的实例,以便获取通知数据 NotifyService service = new NotifyServiceImpl(); List notifys = service.findAll(); request.setAttribute("notifys",notifys); diff --git a/src/web/servlet/notify/NotifyListToServlet.java b/src/web/servlet/notify/NotifyListToServlet.java index a2a7599..8ed17fb 100644 --- a/src/web/servlet/notify/NotifyListToServlet.java +++ b/src/web/servlet/notify/NotifyListToServlet.java @@ -15,11 +15,23 @@ import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.IOException; import java.util.List; - +/** + * 转发到通知列表的Servlet + */ @WebServlet("/notifyListToServlet") public class NotifyListToServlet extends HttpServlet { + /** + * 处理POST请求,获取所有通知并转发到通知列表页面。 + * + * @param request HTTP请求对象,包含客户端发送的数据。 + * @param response HTTP响应对象,用于生成返回给客户端的响应。 + * @throws ServletException 如果处理请求时发生错误。 + * @throws IOException 如果输入或输出异常发生。 + */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // 设置请求的字符编码为UTF-8,以支持中文字符的正确处理 request.setCharacterEncoding("utf-8"); + // 创建通知服务的实例,以便获取通知数据 NotifyService service = new NotifyServiceImpl(); List notifys = service.findAll(); request.setAttribute("notifys",notifys); diff --git a/src/web/servlet/notify/NotifyServlet.java b/src/web/servlet/notify/NotifyServlet.java index bd711d6..0c6d904 100644 --- a/src/web/servlet/notify/NotifyServlet.java +++ b/src/web/servlet/notify/NotifyServlet.java @@ -9,11 +9,16 @@ import java.io.IOException; @WebServlet("/notifyServlet") public class NotifyServlet extends HttpServlet { + + // 处理POST请求的方法 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - request.getRequestDispatcher("/WEB-INF/notify/addNotify.jsp").forward(request,response); + // 将请求转发到指定的JSP页面 + request.getRequestDispatcher("/WEB-INF/notify/addNotify.jsp").forward(request, response); } + // 处理GET请求的方法 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - doPost(request,response); + // 将GET请求转发到doPost方法进行处理 + doPost(request, response); } } diff --git a/src/web/servlet/page/FindStudentByPageServlet.java b/src/web/servlet/page/FindStudentByPageServlet.java index 336e7db..3d80aeb 100644 --- a/src/web/servlet/page/FindStudentByPageServlet.java +++ b/src/web/servlet/page/FindStudentByPageServlet.java @@ -18,7 +18,9 @@ import java.util.Map; @WebServlet("/findStudentByPageServlet") public class FindStudentByPageServlet extends HttpServlet { + // 处理POST请求的方法- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // 设置请求的字符编码为UTF-8,以支持中文字符- request.setCharacterEncoding("utf-8"); String currentPage = request.getParameter("currentPage");//当前页码 String rows = request.getParameter("rows");//每页显示条数 @@ -30,14 +32,14 @@ public class FindStudentByPageServlet extends HttpServlet { rows = "5"; } - //获取条件查询参数 + //获取条件查询参数- Map condition = request.getParameterMap(); StudentService service = new StudentServiceImpl(); PageBean pb = service.findStudentByPage(currentPage,rows,condition); request.setAttribute("pb",pb); - request.setAttribute("condition",condition);//存入查询条件 + request.setAttribute("condition",condition);//存入查询条件- request.setCharacterEncoding("utf-8"); HttpSession session = request.getSession(); Student student= (Student)session.getAttribute("student"); diff --git a/src/web/servlet/student/DeleteSelectStudentServlet.java b/src/web/servlet/student/DeleteSelectStudentServlet.java index 7b49c71..7679d0c 100644 --- a/src/web/servlet/student/DeleteSelectStudentServlet.java +++ b/src/web/servlet/student/DeleteSelectStudentServlet.java @@ -11,15 +11,26 @@ import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet("/deleteSelectStudentServlet") +// 删除选定学生的Servlet public class DeleteSelectStudentServlet extends HttpServlet { + + // 处理POST请求 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // 获取选定学生的ID数组 String[] sids = request.getParameterValues("sid"); + + // 创建学生服务的实例 StudentService service = new StudentServiceImpl(); + + // 调用服务方法删除选定的学生 service.deleteSelectStudent(sids); - response.sendRedirect(request.getContextPath()+"/findStudentByPageServlet"); + + // 重定向到查找学生的页面 + response.sendRedirect(request.getContextPath() + "/findStudentByPageServlet"); } + // 处理GET请求,直接调用doPost方法 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - doPost(request,response); + doPost(request, response); } } diff --git a/src/web/servlet/student/DeleteStudentServlet.java b/src/web/servlet/student/DeleteStudentServlet.java index f062068..22c4011 100644 --- a/src/web/servlet/student/DeleteStudentServlet.java +++ b/src/web/servlet/student/DeleteStudentServlet.java @@ -14,18 +14,34 @@ import javax.servlet.http.HttpSession; import java.io.IOException; @WebServlet("/deleteStudentServlet") +// 删除学生的Servlet public class DeleteStudentServlet extends HttpServlet { + + // 处理POST请求 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // 设置请求的字符编码为UTF-8 request.setCharacterEncoding("utf-8"); + + // 获取当前会话 HttpSession session = request.getSession(); + + // 获取要删除的学生ID String studentid = request.getParameter("s_id"); + + // 创建学生服务的实例 StudentService service = new StudentServiceImpl(); + + // 调用服务方法通过学生ID删除学生 service.deleteStudentById(studentid); -// request.getRequestDispatcher("/findStudentByPageServlet").forward(request,response); + + // 重定向到查找学生的页面 response.sendRedirect("findStudentByPageServlet"); + // 如果需要使用转发,可以使用下面的代码 + // request.getRequestDispatcher("/findStudentByPageServlet").forward(request, response); } + // 处理GET请求,直接调用doPost方法 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - doPost(request,response); + doPost(request, response); } } diff --git a/src/web/servlet/student/DoSelectCourseServlet.java b/src/web/servlet/student/DoSelectCourseServlet.java index 127d2c6..e68505b 100644 --- a/src/web/servlet/student/DoSelectCourseServlet.java +++ b/src/web/servlet/student/DoSelectCourseServlet.java @@ -24,6 +24,16 @@ public class DoSelectCourseServlet extends HttpServlet { Student student= (Student)session.getAttribute("student"); String courseid = request.getParameter("id"); //存不存在已选该课 + //1 + //2 + //3 + //4 + //5 + //6 + //7 + //8 + //9 + //0 boolean flag = false; //判断是否已选 diff --git a/src/web/servlet/student/StudentInfomationServlet.java b/src/web/servlet/student/StudentInfomationServlet.java index cb879fb..09157e8 100644 --- a/src/web/servlet/student/StudentInfomationServlet.java +++ b/src/web/servlet/student/StudentInfomationServlet.java @@ -27,3 +27,17 @@ public class StudentInfomationServlet extends HttpServlet { doPost(request,response); } } +//public class StudentInfomationServlet extends HttpServlet { +// protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +//// HttpSession session = request.getSession(); +//// Student s = (Student) session.getAttribute("student"); +//// StudentService service = new StudentServiceImpl(); +//// Student newStudent = service.findStudentById(s); +//// session.setAttribute("student",newStudent); +// request.getRequestDispatcher("/WEB-INF/student/sInformation.jsp").forward(request,response); +// } +// +// protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// doPost(request,response); +// } +//} \ No newline at end of file diff --git a/src/web/servlet/student/StudentInfomationUpdateServlet.java b/src/web/servlet/student/StudentInfomationUpdateServlet.java index 7080e84..44e3b82 100644 --- a/src/web/servlet/student/StudentInfomationUpdateServlet.java +++ b/src/web/servlet/student/StudentInfomationUpdateServlet.java @@ -20,7 +20,7 @@ public class StudentInfomationUpdateServlet extends HttpServlet { request.setCharacterEncoding("utf-8"); - //保存输入内容 + //保存输入内容- String sid = request.getParameter("student-id"); String name = request.getParameter("student-name"); String sex = request.getParameter("student-sex"); @@ -31,18 +31,28 @@ public class StudentInfomationUpdateServlet extends HttpServlet { String college = request.getParameter("selectCollege"); String department = request.getParameter("selectDepartment"); String cclass = request.getParameter("selectClass"); + //String sid = request.getParameter("student-id"); + // String name = request.getParameter("student-name"); + // String sex = request.getParameter("student-sex"); + // String age = request.getParameter("student-age"); + // String phone = request.getParameter("student-phone"); + // String email = request.getParameter("student-email"); + // String address = request.getParameter("student-address"); + // String college = request.getParameter("selectCollege"); + // String department = request.getParameter("selectDepartment"); + // String cclass = request.getParameter("selectClass"); Student updateStudent = new Student(); - //判断输入位数是否大于数据库位数 + //判断输入位数是否大于数据库位数- if (name.length() > 4 || phone.length() > 11 || email.length()>24 || address.length() > 24 || age.length()>2 || name.contains("<") || phone.contains("<") || email.contains("<") || address.contains("<") || age.contains("<")) { request.setAttribute("update_msg","格式错误,请重新提交!"+String.format("%tT",new Date())); request.getRequestDispatcher("/WEB-INF/student/sInformation.jsp").forward(request, response); // response.sendRedirect("studentInfomationServlet"); }else { - //封装学生对象 + //封装学生对象- updateStudent.setS_id(sid); updateStudent.setS_name(name); updateStudent.setS_sex(sex); @@ -53,8 +63,18 @@ public class StudentInfomationUpdateServlet extends HttpServlet { updateStudent.setS_college(college); updateStudent.setS_department(department); updateStudent.setS_class(cclass); + //updateStudent.setS_id(sid); + // updateStudent.setS_name(name); + // updateStudent.setS_sex(sex); + // updateStudent.setS_age(age); + // updateStudent.setS_phone(phone); + // updateStudent.setS_email(email); + // updateStudent.setS_address(address); + // updateStudent.setS_college(college); + // updateStudent.setS_department(department); + // updateStudent.setS_class(cclass); - //调用studentUpdata服务 + //调用studentUpdata服务- StudentService service= new StudentServiceImpl(); service.updateInfo(updateStudent); @@ -63,7 +83,7 @@ public class StudentInfomationUpdateServlet extends HttpServlet { Student s = service.findStudentById(updateStudent); session.setAttribute("student",s); - //成功则返回并给提示 + //成功则返回并给提示- request.setAttribute("update_msg", "修改成功!"+String.format("%tT",new Date())); request.setAttribute("student",updateStudent); request.getRequestDispatcher("/WEB-INF/student/sInformation.jsp").forward(request, response); diff --git a/src/web/servlet/student/StudentListServlet.java b/src/web/servlet/student/StudentListServlet.java index 1a531ae..03dfffa 100644 --- a/src/web/servlet/student/StudentListServlet.java +++ b/src/web/servlet/student/StudentListServlet.java @@ -18,10 +18,10 @@ import java.util.List; @WebServlet("/studentListServlet") public class StudentListServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - //调用StudentService完成查询 + //调用StudentService完成查询- StudentService studentService = new StudentServiceImpl(); List students = studentService.findAll(); - //将list存入request域 + //将list存入request域- request.setAttribute("students",students); request.setCharacterEncoding("utf-8"); @@ -40,6 +40,19 @@ public class StudentListServlet extends HttpServlet { request.getRequestDispatcher("error.jsp").forward(request, response); } } + // HttpSession session = request.getSession(); + // Student student= (Student)session.getAttribute("student"); + // Admin admin= (Admin)session.getAttribute("admin"); + // Teacher teacher= (Teacher)session.getAttribute("teacher"); + // if (student != null && admin == null && teacher == null) { + // request.getRequestDispatcher("/WEB-INF/student/studentList.jsp").forward(request, response); + // } else if (admin != null && student == null && teacher == null) { + // request.getRequestDispatcher("/WEB-INF/admin/aFindStudentList.jsp").forward(request, response); + // } else if (teacher != null && admin == null && student == null) { + // request.getRequestDispatcher("/WEB-INF/teacher/tFindStudentList.jsp").forward(request, response); + // } else { + // request.getRequestDispatcher("error.jsp").forward(request, response); + // } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request,response); diff --git a/src/web/servlet/student/StudentOptionalCourseServlet.java b/src/web/servlet/student/StudentOptionalCourseServlet.java index caefc67..f71c8d8 100644 --- a/src/web/servlet/student/StudentOptionalCourseServlet.java +++ b/src/web/servlet/student/StudentOptionalCourseServlet.java @@ -24,12 +24,12 @@ public class StudentOptionalCourseServlet extends HttpServlet { Student student= (Student)session.getAttribute("student"); Admin admin =(Admin)session.getAttribute("admin"); - //调用StudentService完成查询 + //调用StudentService完成查询- StudentService studentService = new StudentServiceImpl(); List optionalcourses = studentService.findAllOptionalCourse(); - //将list存入request域 + //将list存入request域- request.setAttribute("optionalcourses",optionalcourses); - //转发到list.jsp + //转发到list.jsp- if (student != null && admin == null) { request.getRequestDispatcher("/WEB-INF/student/studentOptionalCourse.jsp").forward(request,response); @@ -38,6 +38,13 @@ public class StudentOptionalCourseServlet extends HttpServlet { } else { request.getRequestDispatcher("error.jsp").forward(request, response); } + //if (student != null && admin == null) { + // request.getRequestDispatcher("/WEB-INF/student/studentOptionalCourse.jsp").forward(request,response); + // } else if (admin != null && student == null) { + // request.getRequestDispatcher("/WEB-INF/admin/allStudentOptionalCourse.jsp").forward(request, response); + // } else { + // request.getRequestDispatcher("error.jsp").forward(request, response); + // } } diff --git a/src/web/servlet/student/StudentPasswordIndexServlet.java b/src/web/servlet/student/StudentPasswordIndexServlet.java index 8f026ea..1f50581 100644 --- a/src/web/servlet/student/StudentPasswordIndexServlet.java +++ b/src/web/servlet/student/StudentPasswordIndexServlet.java @@ -8,12 +8,26 @@ import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet("/studentPasswordIndexServlet") +// 学生密码修改索引Servlet public class StudentPasswordIndexServlet extends HttpServlet { + + // 处理POST请求 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - request.getRequestDispatcher("/WEB-INF/student/studentUpdatePassword.jsp").forward(request,response); + // 转发请求到学生密码修改页面 + request.getRequestDispatcher("/WEB-INF/student/studentUpdatePassword.jsp").forward(request, response); } + // 处理GET请求,直接调用doPost方法 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - doPost(request,response); + doPost(request, response); } } +//public class StudentPasswordIndexServlet extends HttpServlet { +// protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// request.getRequestDispatcher("/WEB-INF/student/studentUpdatePassword.jsp").forward(request,response); +// } +// +// protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// doPost(request,response); +// } +//} diff --git a/src/web/servlet/student/StudentPasswordUpdateServlet.java b/src/web/servlet/student/StudentPasswordUpdateServlet.java index 3fa2b5d..5c6fac5 100644 --- a/src/web/servlet/student/StudentPasswordUpdateServlet.java +++ b/src/web/servlet/student/StudentPasswordUpdateServlet.java @@ -14,8 +14,11 @@ import java.io.IOException; import java.util.Date; @WebServlet("/studentPasswordUpdateServlet") +// 学生密码更新Servlet public class StudentPasswordUpdateServlet extends HttpServlet { + // 处理POST请求 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // 设置请求的字符编码为UTF-8,以支持中文 request.setCharacterEncoding("utf-8"); HttpSession session = request.getSession(); Student student= (Student)session.getAttribute("student"); @@ -45,6 +48,35 @@ public class StudentPasswordUpdateServlet extends HttpServlet { } } + // request.setCharacterEncoding("utf-8"); + // HttpSession session = request.getSession(); + // Student student= (Student)session.getAttribute("student"); + // + // String studentid = student.getS_id(); + // String newpassword = request.getParameter("student-newpassword"); + // String ennewpassword = request.getParameter("student-ennewpassword"); + // String regex = "^[\\w]{3,12}$"; + // boolean flag = newpassword.matches(regex); + // if (!flag) { + // request.setAttribute("update_msg", "密码格式错误,重新提交!"+String.format("%tT",new Date())); + // request.getRequestDispatcher("/WEB-INF/student/studentUpdatePassword.jsp").forward(request, response); + // } else if (!newpassword.equals(ennewpassword)) { + // request.setAttribute("update_msg", "密码确认错误,请重新提交!" + String.format("%tT", new Date())); + // request.getRequestDispatcher("/WEB-INF/student/studentUpdatePassword.jsp").forward(request, response); + // } else { + // + // StudentService service= new StudentServiceImpl(); + // service.updatePassword(studentid,newpassword); + // + // Student newStudent = service.findStudentById(student); + // student = newStudent; + // session.setAttribute("student",student); + // + // request.setAttribute("update_msg", "修改成功!" + String.format("%tT", new Date())); + // request.getRequestDispatcher("/WEB-INF/student/studentUpdatePassword.jsp").forward(request, response); + // } + // + // } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request,response); diff --git a/src/web/servlet/student/StudentSelectCourseListServlet.java b/src/web/servlet/student/StudentSelectCourseListServlet.java index dd60b25..c48cc88 100644 --- a/src/web/servlet/student/StudentSelectCourseListServlet.java +++ b/src/web/servlet/student/StudentSelectCourseListServlet.java @@ -25,13 +25,13 @@ public class StudentSelectCourseListServlet extends HttpServlet { Student student= (Student)session.getAttribute("student"); Admin admin =(Admin)session.getAttribute("admin"); - //调用StudentService完成查询 + //调用StudentService完成查询- StudentService studentService = new StudentServiceImpl(); if (student != null && admin == null) { List selectcourses = studentService.findAllSelectCourse(student.getS_id()); - //将list存入request域 + //将list存入request域- request.setAttribute("selectcourses",selectcourses); - //转发到list.jsp + //转发到list.jsp- request.getRequestDispatcher("/WEB-INF/student/studentSelectCourseList.jsp").forward(request,response); } else if (admin != null && student == null) { List selectcourses = studentService.findSelectCourseAllStudent(); @@ -48,3 +48,34 @@ public class StudentSelectCourseListServlet extends HttpServlet { this.doPost(request,response); } } +//public class StudentSelectCourseListServlet extends HttpServlet { +// protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// +// request.setCharacterEncoding("utf-8"); +// HttpSession session = request.getSession(); +// Student student= (Student)session.getAttribute("student"); +// Admin admin =(Admin)session.getAttribute("admin"); +// +// //调用StudentService完成查询- +// StudentService studentService = new StudentServiceImpl(); +// if (student != null && admin == null) { +// List selectcourses = studentService.findAllSelectCourse(student.getS_id()); +// //将list存入request域- +// request.setAttribute("selectcourses",selectcourses); +// //转发到list.jsp- +// request.getRequestDispatcher("/WEB-INF/student/studentSelectCourseList.jsp").forward(request,response); +// } else if (admin != null && student == null) { +// List selectcourses = studentService.findSelectCourseAllStudent(); +// request.setAttribute("selectcourses", selectcourses); +// request.getRequestDispatcher("/WEB-INF/admin/allStudentSelectCourseList.jsp").forward(request, response); +// } else { +// request.getRequestDispatcher("error.jsp").forward(request, response); +// } +// +// +// } +// +// protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// this.doPost(request,response); +// } +//} \ No newline at end of file diff --git a/src/web/servlet/student/StudentServlet.java b/src/web/servlet/student/StudentServlet.java index 1f83341..ac9d8f8 100644 --- a/src/web/servlet/student/StudentServlet.java +++ b/src/web/servlet/student/StudentServlet.java @@ -8,12 +8,30 @@ import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet("/studentServlet") +// 学生相关操作的Servlet public class StudentServlet extends HttpServlet { + + // 处理POST请求 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - request.getRequestDispatcher("/WEB-INF/student/sIndex.jsp").forward(request,response); + // 转发请求到学生首页 + request.getRequestDispatcher("/WEB-INF/student/sIndex.jsp").forward(request, response); } + // 处理GET请求,直接调用doPost方法 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - doPost(request,response); + doPost(request, response); } } +//public class StudentServlet extends HttpServlet { +// +// // 处理POST请求 +// protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// // 转发请求到学生首页 +// request.getRequestDispatcher("/WEB-INF/student/sIndex.jsp").forward(request, response); +// } +// +// // 处理GET请求,直接调用doPost方法 +// protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// doPost(request, response); +// } +//} \ No newline at end of file diff --git a/src/web/servlet/teacher/AddOptionalCourseServlet.java b/src/web/servlet/teacher/AddOptionalCourseServlet.java index 45a4b70..b9d730e 100644 --- a/src/web/servlet/teacher/AddOptionalCourseServlet.java +++ b/src/web/servlet/teacher/AddOptionalCourseServlet.java @@ -15,11 +15,16 @@ import java.io.IOException; import java.util.Date; @WebServlet("/addOptionalCourseServlet") +// 添加选修课程的Servlet public class AddOptionalCourseServlet extends HttpServlet { + // 处理POST请求 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // 设置请求的字符编码为UTF-8,以支持中文 request.setCharacterEncoding("utf-8"); + // 获取当前会话 HttpSession session = request.getSession(); + Teacher teacher = (Teacher) session.getAttribute("teacher"); String cid = request.getParameter("cid"); @@ -49,3 +54,41 @@ public class AddOptionalCourseServlet extends HttpServlet { doPost(request,response); } } +//public class AddOptionalCourseServlet extends HttpServlet { +// // 处理POST请求 +// protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// // 设置请求的字符编码为UTF-8,以支持中文 +// request.setCharacterEncoding("utf-8"); +// // 获取当前会话 +// +// HttpSession session = request.getSession(); +// +// Teacher teacher = (Teacher) session.getAttribute("teacher"); +// +// String cid = request.getParameter("cid"); +// String cname = request.getParameter("course-name"); +// String cinfo = request.getParameter("course-info"); +// +// CourseService service = new CourseServiceImpl(); +// Course course = service.findSelectCourseByCourseId(cid); +// if (course != null) { +// request.setAttribute("update_msg","课程ID冲突,请重新添加!"+String.format("%tT",new Date())); +// request.getRequestDispatcher("/WEB-INF/teacher/addOptionalCourse.jsp").forward(request,response); +// }else { +// Course newCourse = new Course(); +// newCourse.setC_id(cid); +// newCourse.setC_name(cname); +// newCourse.setC_info(cinfo); +// newCourse.setT_id(teacher.getT_id()); +// newCourse.setT_name(teacher.getT_name()); +// +// service.addOptionalCourse(newCourse); +// request.setAttribute("update_msg","课程添加成功!"+String.format("%tT",new Date())); +// request.getRequestDispatcher("/WEB-INF/teacher/addOptionalCourse.jsp").forward(request,response); +// } +// } +// +// protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// doPost(request,response); +// } +//} \ No newline at end of file diff --git a/src/web/servlet/teacher/AddSelectCourseServlet.java b/src/web/servlet/teacher/AddSelectCourseServlet.java index 4143a74..bf0d5ee 100644 --- a/src/web/servlet/teacher/AddSelectCourseServlet.java +++ b/src/web/servlet/teacher/AddSelectCourseServlet.java @@ -9,12 +9,38 @@ import java.io.IOException; @WebServlet("/addSelectCourseServlet") public class AddSelectCourseServlet extends HttpServlet { + + // 处理POST请求的方法 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // 设置请求字符编码为UTF-8,以支持中文字符 request.setCharacterEncoding("utf-8"); - request.getRequestDispatcher("/WEB-INF/teacher/addOptionalCourse.jsp").forward(request,response); + + // 将请求转发到指定的JSP页面 + // "/WEB-INF/teacher/addOptionalCourse.jsp" 是要转发到的JSP页面路径 + request.getRequestDispatcher("/WEB-INF/teacher/addOptionalCourse.jsp").forward(request, response); } + // 处理GET请求的方法 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - doPost(request,response); + // 对于GET请求,调用doPost方法进行处理 + doPost(request, response); } } +//public class AddSelectCourseServlet extends HttpServlet { +// +// // 处理POST请求的方法 +// protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// // 设置请求字符编码为UTF-8,以支持中文字符 +// request.setCharacterEncoding("utf-8"); +// +// // 将请求转发到指定的JSP页面 +// // "/WEB-INF/teacher/addOptionalCourse.jsp" 是要转发到的JSP页面路径 +// request.getRequestDispatcher("/WEB-INF/teacher/addOptionalCourse.jsp").forward(request, response); +// } +// +// // 处理GET请求的方法 +// protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// // 对于GET请求,调用doPost方法进行处理 +// doPost(request, response); +// } +//} \ No newline at end of file diff --git a/src/web/servlet/teacher/AddTeacherInfoServlet.java b/src/web/servlet/teacher/AddTeacherInfoServlet.java index 62ece8d..4db8f83 100644 --- a/src/web/servlet/teacher/AddTeacherInfoServlet.java +++ b/src/web/servlet/teacher/AddTeacherInfoServlet.java @@ -17,7 +17,7 @@ public class AddTeacherInfoServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); TeacherService service= new TeacherServiceImpl(); - //先进行判断是否已存在该教师 + //先进行判断是否已存在该教师- String tid = request.getParameter("teacher-id"); Teacher t = new Teacher(); t.setT_id(tid); @@ -31,18 +31,18 @@ public class AddTeacherInfoServlet extends HttpServlet { String education = request.getParameter("teacher-education"); String title = request.getParameter("teacher-title"); -// String college = request.getParameter("selectCollege"); -// String department = request.getParameter("selectDepartment"); -// String cclass = request.getParameter("selectClass"); -// if ("".equals(college)) { -// college = "待分配"; -// } -// if ("".equals(department)) { -// department = "待分配"; -// } -// if ("".equals(cclass)) { -// cclass = "待分配"; -// } +// String college = request.getParameter("selectCollege");- +// String department = request.getParameter("selectDepartment");- +// String cclass = request.getParameter("selectClass");- +// if ("".equals(college)) {- +// college = "待分配";- +// }- +// if ("".equals(department)) {- +// department = "待分配";- +// }- +// if ("".equals(cclass)) {- +// cclass = "待分配";- +// }- Teacher updateTeacher = new Teacher(); @@ -51,9 +51,9 @@ public class AddTeacherInfoServlet extends HttpServlet { updateTeacher.setT_sex(sex); updateTeacher.setT_education(education); updateTeacher.setT_title(title); -// updateTeacher.setT_college(college); -// updateTeacher.setT_department(department); -// updateTeacher.setT_class(cclass); +// updateTeacher.setT_college(college);- +// updateTeacher.setT_department(department);- +// updateTeacher.setT_class(cclass);- service.addTeacherAllInfo(updateTeacher); request.setAttribute("update_msg", "添加成功!" + String.format("%tT", new Date())); @@ -65,3 +65,55 @@ public class AddTeacherInfoServlet extends HttpServlet { doPost(request,response); } } +//public class AddTeacherInfoServlet extends HttpServlet { +// protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// request.setCharacterEncoding("utf-8"); +// TeacherService service= new TeacherServiceImpl(); +// //先进行判断是否已存在该教师- +// String tid = request.getParameter("teacher-id"); +// Teacher t = new Teacher(); +// t.setT_id(tid); +// Teacher newTeacher = service.findTeacherById(t); +// if (newTeacher != null) { +// request.setAttribute("update_msg","已存在该教师,请重新添加!"+String.format("%tT",new Date())); +// request.getRequestDispatcher("addTeacherServlet").forward(request, response); +// }else { +// String name = request.getParameter("teacher-name"); +// String sex = request.getParameter("teacher-sex"); +// String education = request.getParameter("teacher-education"); +// String title = request.getParameter("teacher-title"); +// +//// String college = request.getParameter("selectCollege");- +//// String department = request.getParameter("selectDepartment");- +//// String cclass = request.getParameter("selectClass");- +//// if ("".equals(college)) {- +//// college = "待分配";- +//// }- +//// if ("".equals(department)) {- +//// department = "待分配";- +//// }- +//// if ("".equals(cclass)) {- +//// cclass = "待分配";- +//// }- +// +// Teacher updateTeacher = new Teacher(); +// +// updateTeacher.setT_id(tid); +// updateTeacher.setT_name(name); +// updateTeacher.setT_sex(sex); +// updateTeacher.setT_education(education); +// updateTeacher.setT_title(title); +//// updateTeacher.setT_college(college);- +//// updateTeacher.setT_department(department);- +//// updateTeacher.setT_class(cclass);- +// +// service.addTeacherAllInfo(updateTeacher); +// request.setAttribute("update_msg", "添加成功!" + String.format("%tT", new Date())); +// request.getRequestDispatcher("addTeacherServlet").forward(request, response); +// } +// } +// +// protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// doPost(request,response); +// } +//} \ No newline at end of file diff --git a/src/web/servlet/teacher/AddTeacherServlet.java b/src/web/servlet/teacher/AddTeacherServlet.java index 671691a..72fbc1a 100644 --- a/src/web/servlet/teacher/AddTeacherServlet.java +++ b/src/web/servlet/teacher/AddTeacherServlet.java @@ -15,6 +15,7 @@ import java.util.List; @WebServlet("/addTeacherServlet") public class AddTeacherServlet extends HttpServlet { + //注册 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); HttpSession session = request.getSession(); @@ -35,3 +36,25 @@ public class AddTeacherServlet extends HttpServlet { doPost(request,response); } } +//public class AddTeacherServlet extends HttpServlet { +// //注册 +// protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// request.setCharacterEncoding("utf-8"); +// HttpSession session = request.getSession(); +// +// CDCService service = new CDCServiceImpl(); +// List collegeList = service.findAllCollege(); +// List departmentList = service.findAllDepartment(); +// List classList = service.findAllClass(); +// +// session.setAttribute("collegeLists",collegeList); +// session.setAttribute("departmentLists",departmentList); +// session.setAttribute("classLists",classList); +// +// request.getRequestDispatcher("/WEB-INF/admin/addTeacher.jsp").forward(request,response); +// } +// +// protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// doPost(request,response); +// } +//} \ No newline at end of file diff --git a/src/web/servlet/teacher/DeleteOptionalCourseServlet.java b/src/web/servlet/teacher/DeleteOptionalCourseServlet.java index f516500..d61a9f2 100644 --- a/src/web/servlet/teacher/DeleteOptionalCourseServlet.java +++ b/src/web/servlet/teacher/DeleteOptionalCourseServlet.java @@ -13,15 +13,54 @@ import java.io.IOException; @WebServlet("/deleteOptionalCourseServlet") public class DeleteOptionalCourseServlet extends HttpServlet { + + // 处理POST请求的方法 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // 设置请求字符编码为UTF-8,以支持中文字符 request.setCharacterEncoding("utf-8"); + + // 获取请求 "cid",表示要删除的课程ID String cid = request.getParameter("cid"); + + // 创建教师服务的实现类实例 TeacherService service = new TeacherServiceImpl(); + + // 调用服务层方法,根据课程ID删除课程 service.deleteCourseById(cid); - request.getRequestDispatcher("/teacherOptionalCourseServlet").forward(request,response); + + // 请求转发到教师可选课程的Servlet,以更新课程列表 + request.getRequestDispatcher("/teacherOptionalCourseServlet").forward(request, response); } + // 处理GET请求的方法 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - doPost(request,response); + // 对于GET请求,调用doPost方法进行处理 + doPost(request, response); } } +//public class DeleteOptionalCourseServlet extends HttpServlet { +// +// // 处理POST请求的方法 +// protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// // 设置请求字符编码为UTF-8,以支持中文字符 +// request.setCharacterEncoding("utf-8"); +// +// // 获取请求 "cid",表示要删除的课程ID +// String cid = request.getParameter("cid"); +// +// // 创建教师服务的实现类实例 +// TeacherService service = new TeacherServiceImpl(); +// +// // 调用服务层方法,根据课程ID删除课程 +// service.deleteCourseById(cid); +// +// // 请求转发到教师可选课程的Servlet,以更新课程列表 +// request.getRequestDispatcher("/teacherOptionalCourseServlet").forward(request, response); +// } +// +// // 处理GET请求的方法 +// protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// // 对于GET请求,调用doPost方法进行处理 +// doPost(request, response); +// } +//} \ No newline at end of file diff --git a/src/web/servlet/teacher/DeleteTeacherServlet.java b/src/web/servlet/teacher/DeleteTeacherServlet.java index 3cd1739..881331e 100644 --- a/src/web/servlet/teacher/DeleteTeacherServlet.java +++ b/src/web/servlet/teacher/DeleteTeacherServlet.java @@ -12,6 +12,7 @@ import javax.servlet.http.HttpSession; import java.io.IOException; @WebServlet("/deleteTeacherServlet") +//教师服务页面 public class DeleteTeacherServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); @@ -25,3 +26,16 @@ public class DeleteTeacherServlet extends HttpServlet { doPost(request,response); } } +//public class DeleteTeacherServlet extends HttpServlet { +// protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// request.setCharacterEncoding("utf-8"); +// String teacherid = request.getParameter("tid"); +// TeacherService service = new TeacherServiceImpl(); +// service.deleteTeacherById(teacherid); +// request.getRequestDispatcher("/teacherListServlet").forward(request,response); +// } +// +// protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// doPost(request,response); +// } +//} \ No newline at end of file diff --git a/src/web/servlet/teacher/FindStudentCourseScoreServlet.java b/src/web/servlet/teacher/FindStudentCourseScoreServlet.java index f5078b6..e1c5d47 100644 --- a/src/web/servlet/teacher/FindStudentCourseScoreServlet.java +++ b/src/web/servlet/teacher/FindStudentCourseScoreServlet.java @@ -13,8 +13,10 @@ import java.io.IOException; import java.util.List; @WebServlet("/findStudentCourseScoreServlet") +//不清楚什么作用 public class FindStudentCourseScoreServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + //中文 request.setCharacterEncoding("utf-8"); String cid = request.getParameter("cid"); System.out.println(cid); @@ -34,3 +36,25 @@ public class FindStudentCourseScoreServlet extends HttpServlet { doPost(request,response); } } +//public class FindStudentCourseScoreServlet extends HttpServlet { +// protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// //中文 +// request.setCharacterEncoding("utf-8"); +// String cid = request.getParameter("cid"); +// System.out.println(cid); +// +// SelectCourseService service = new SelectCourseServiceImpl(); +// List scs = service.findStudentSelectedCourseByCourseId(cid); +// for (int i = 0; i < scs.size(); i++) { +// System.out.println(scs.get(i)); +// } +// +// request.setAttribute("scs",scs); +// request.getRequestDispatcher("/WEB-INF/teacher/findSelectCourseListByCourseId.jsp").forward(request,response); +// +// } +// +// protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// doPost(request,response); +// } +//} \ No newline at end of file diff --git a/src/web/servlet/teacher/TeacherInfomationServlet.java b/src/web/servlet/teacher/TeacherInfomationServlet.java index 0b5aaba..c531482 100644 --- a/src/web/servlet/teacher/TeacherInfomationServlet.java +++ b/src/web/servlet/teacher/TeacherInfomationServlet.java @@ -11,6 +11,7 @@ import javax.servlet.http.HttpSession; import java.io.IOException; @WebServlet("/teacherInfomationServlet") +//网络页面 public class TeacherInfomationServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.getRequestDispatcher("/WEB-INF/teacher/tInformation.jsp").forward(request,response); @@ -20,3 +21,12 @@ public class TeacherInfomationServlet extends HttpServlet { doPost(request,response); } } +//public class TeacherInfomationServlet extends HttpServlet { +// protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// request.getRequestDispatcher("/WEB-INF/teacher/tInformation.jsp").forward(request,response); +// } +// +// protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// doPost(request,response); +// } +//} \ No newline at end of file diff --git a/src/web/servlet/teacher/TeacherListServlet.java b/src/web/servlet/teacher/TeacherListServlet.java index 856f96d..e306050 100644 --- a/src/web/servlet/teacher/TeacherListServlet.java +++ b/src/web/servlet/teacher/TeacherListServlet.java @@ -20,10 +20,10 @@ import java.util.List; @WebServlet("/teacherListServlet") public class TeacherListServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - //调用TeacherService完成查询 + //调用TeacherService完成查询- TeacherService teacherService = new TeacherServiceImpl(); List teachers = teacherService.findAll(); - //将list存入request域 + //将list存入request域- request.setAttribute("teachers",teachers); request.setCharacterEncoding("utf-8"); @@ -46,3 +46,31 @@ public class TeacherListServlet extends HttpServlet { this.doPost(request,response); } } +//public class TeacherListServlet extends HttpServlet { +// protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// //调用TeacherService完成查询- +// TeacherService teacherService = new TeacherServiceImpl(); +// List teachers = teacherService.findAll(); +// //将list存入request域- +// request.setAttribute("teachers",teachers); +// +// request.setCharacterEncoding("utf-8"); +// HttpSession session = request.getSession(); +// Student student= (Student)session.getAttribute("student"); +// Admin admin= (Admin)session.getAttribute("admin"); +// Teacher teacher= (Teacher)session.getAttribute("teacher"); +// if (student != null && admin == null && teacher == null) { +// request.getRequestDispatcher("/WEB-INF/student/sFindTeacherList.jsp").forward(request, response); +// } else if (admin != null && student == null && teacher == null) { +// request.getRequestDispatcher("/WEB-INF/admin/aFindTeacherList.jsp").forward(request, response); +// } else if (teacher != null && admin == null && student == null) { +// request.getRequestDispatcher("/WEB-INF/teacher/tFindTeacherList.jsp").forward(request, response); +// } else { +// request.getRequestDispatcher("error.jsp").forward(request, response); +// } +// } +// +// protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// this.doPost(request,response); +// } +//} \ No newline at end of file diff --git a/src/web/servlet/teacher/TeacherOptionalCourseServlet.java b/src/web/servlet/teacher/TeacherOptionalCourseServlet.java index 20b1a33..a4b323f 100644 --- a/src/web/servlet/teacher/TeacherOptionalCourseServlet.java +++ b/src/web/servlet/teacher/TeacherOptionalCourseServlet.java @@ -24,12 +24,12 @@ public class TeacherOptionalCourseServlet extends HttpServlet { HttpSession session = request.getSession(); Teacher t = (Teacher) session.getAttribute("teacher"); if (t != null) { - //调用StudentService完成查询 + //调用StudentService完成查询- TeacherService service = new TeacherServiceImpl(); List optionalcourses = service.findMySelfOptionalCourse(t.getT_id()); - //将list存入request域 + //将list存入request域- request.setAttribute("optionalcourses",optionalcourses); - //转发到list.jsp + //转发到list.jsp- request.getRequestDispatcher("/WEB-INF/teacher/teacherOptionalCourse.jsp").forward(request,response); } } @@ -38,3 +38,23 @@ public class TeacherOptionalCourseServlet extends HttpServlet { this.doPost(request,response); } } +//public class TeacherOptionalCourseServlet extends HttpServlet { +// protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// request.setCharacterEncoding("utf-8"); +// HttpSession session = request.getSession(); +// Teacher t = (Teacher) session.getAttribute("teacher"); +// if (t != null) { +// //调用StudentService完成查询- +// TeacherService service = new TeacherServiceImpl(); +// List optionalcourses = service.findMySelfOptionalCourse(t.getT_id()); +// //将list存入request域- +// request.setAttribute("optionalcourses",optionalcourses); +// //转发到list.jsp- +// request.getRequestDispatcher("/WEB-INF/teacher/teacherOptionalCourse.jsp").forward(request,response); +// } +// } +// +// protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// this.doPost(request,response); +// } +//} \ No newline at end of file diff --git a/src/web/servlet/teacher/TeacherOptionalCourseUpdateServlet.java b/src/web/servlet/teacher/TeacherOptionalCourseUpdateServlet.java index ab22a08..07b92fd 100644 --- a/src/web/servlet/teacher/TeacherOptionalCourseUpdateServlet.java +++ b/src/web/servlet/teacher/TeacherOptionalCourseUpdateServlet.java @@ -21,27 +21,27 @@ public class TeacherOptionalCourseUpdateServlet extends HttpServlet { String cid =request.getParameter("cid"); - //保存输入内容 + //保存输入内容- String name = request.getParameter("course-name"); String info = request.getParameter("course-info"); Course updateCourse = new Course(); - //判断输入位数是否大于数据库位数 + //判断输入位数是否大于数据库位数- if (cid.contains("<") || name.contains("<") || info.contains("<")) { request.setAttribute("update_msg","格式错误,请重新提交!"+String.format("%tT",new Date())); request.getRequestDispatcher("updateTeacherOptionalCourseServlet?cid="+cid).forward(request, response); }else { - //封装学生对象 + //封装学生对象- updateCourse.setC_id(cid); updateCourse.setC_name(name); updateCourse.setC_info(info); - //调用studentUpdata服务 + //调用studentUpdata服务- TeacherService service= new TeacherServiceImpl(); service.updateCourseInfo(updateCourse); - //成功则返回并给提示 + //成功则返回并给提示- request.setAttribute("update_msg", "修改成功!"+String.format("%tT",new Date())); request.getRequestDispatcher("updateTeacherOptionalCourseServlet?cid="+cid).forward(request, response); } @@ -51,3 +51,39 @@ public class TeacherOptionalCourseUpdateServlet extends HttpServlet { doPost(request,response); } } +//public class TeacherOptionalCourseUpdateServlet extends HttpServlet { +// protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// request.setCharacterEncoding("utf-8"); +// +// String cid =request.getParameter("cid"); +// +// //保存输入内容- +// String name = request.getParameter("course-name"); +// String info = request.getParameter("course-info"); +// +// Course updateCourse = new Course(); +// +// //判断输入位数是否大于数据库位数- +// if (cid.contains("<") || name.contains("<") || info.contains("<")) { +// request.setAttribute("update_msg","格式错误,请重新提交!"+String.format("%tT",new Date())); +// request.getRequestDispatcher("updateTeacherOptionalCourseServlet?cid="+cid).forward(request, response); +// }else { +// //封装学生对象- +// updateCourse.setC_id(cid); +// updateCourse.setC_name(name); +// updateCourse.setC_info(info); +// +// //调用studentUpdata服务- +// TeacherService service= new TeacherServiceImpl(); +// service.updateCourseInfo(updateCourse); +// +// //成功则返回并给提示- +// request.setAttribute("update_msg", "修改成功!"+String.format("%tT",new Date())); +// request.getRequestDispatcher("updateTeacherOptionalCourseServlet?cid="+cid).forward(request, response); +// } +// } +// +// protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// doPost(request,response); +// } +//} \ No newline at end of file diff --git a/src/web/servlet/teacher/TeacherPasswordIndexServlet.java b/src/web/servlet/teacher/TeacherPasswordIndexServlet.java index fc6da4f..b67bfe3 100644 --- a/src/web/servlet/teacher/TeacherPasswordIndexServlet.java +++ b/src/web/servlet/teacher/TeacherPasswordIndexServlet.java @@ -8,6 +8,7 @@ import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet("/teacherPasswordIndexServlet") +//网络服务 public class TeacherPasswordIndexServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.getRequestDispatcher("/WEB-INF/teacher/teacherUpdatePassword.jsp").forward(request,response); @@ -17,3 +18,12 @@ public class TeacherPasswordIndexServlet extends HttpServlet { doPost(request,response); } } +//public class TeacherPasswordIndexServlet extends HttpServlet { +// protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// request.getRequestDispatcher("/WEB-INF/teacher/teacherUpdatePassword.jsp").forward(request,response); +// } +// +// protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// doPost(request,response); +// } +//} \ No newline at end of file diff --git a/src/web/servlet/teacher/TeacherPasswordUpdateServlet.java b/src/web/servlet/teacher/TeacherPasswordUpdateServlet.java index bf6ced2..6da82ef 100644 --- a/src/web/servlet/teacher/TeacherPasswordUpdateServlet.java +++ b/src/web/servlet/teacher/TeacherPasswordUpdateServlet.java @@ -16,14 +16,16 @@ import javax.servlet.http.HttpSession; import java.io.IOException; import java.util.Date; -@WebServlet("/teacherPasswordUpdateServlet") +@WebServlet("/teacherPasswordUpdateServlet")//1 public class TeacherPasswordUpdateServlet extends HttpServlet { + //2 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); HttpSession session = request.getSession(); Teacher teacher = (Teacher)session.getAttribute("teacher"); String teacherid = teacher.getT_id(); + //3 String newpassword = request.getParameter("teacher-newpassword"); String ennewpassword = request.getParameter("teacher-ennewpassword"); String regex = "^[\\w]{3,12}$"; @@ -53,3 +55,41 @@ public class TeacherPasswordUpdateServlet extends HttpServlet { doPost(request,response); } } +//public class TeacherPasswordUpdateServlet extends HttpServlet { +// //2 +// protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// request.setCharacterEncoding("utf-8"); +// HttpSession session = request.getSession(); +// Teacher teacher = (Teacher)session.getAttribute("teacher"); +// +// String teacherid = teacher.getT_id(); +// //3 +// String newpassword = request.getParameter("teacher-newpassword"); +// String ennewpassword = request.getParameter("teacher-ennewpassword"); +// String regex = "^[\\w]{3,12}$"; +// boolean flag = newpassword.matches(regex); +// if (!flag) { +// request.setAttribute("update_msg", "密码格式错误,重新提交!"+String.format("%tT",new Date())); +// request.getRequestDispatcher("/WEB-INF/teacher/teacherUpdatePassword.jsp").forward(request, response); +// } else if (!newpassword.equals(ennewpassword)) { +// request.setAttribute("update_msg", "密码确认错误,请重新提交!" + String.format("%tT", new Date())); +// request.getRequestDispatcher("/WEB-INF/teacher/teacherUpdatePassword.jsp").forward(request, response); +// } else { +// +// TeacherService service= new TeacherServiceImpl(); +// service.updatePassword(teacherid,newpassword); +// +// Teacher newTeacher = service.findTeacherById(teacher); +// teacher = newTeacher; +// session.setAttribute("teacher",teacher); +// +// request.setAttribute("update_msg", "修改成功!" + String.format("%tT", new Date())); +// request.getRequestDispatcher("/WEB-INF/teacher/teacherUpdatePassword.jsp").forward(request, response); +// } +// +// } +// +// protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// doPost(request,response); +// } +//} \ No newline at end of file diff --git a/src/web/servlet/teacher/UpdateOptionalCourseScoreServlet.java b/src/web/servlet/teacher/UpdateOptionalCourseScoreServlet.java index 0a73f0e..9dfe576 100644 --- a/src/web/servlet/teacher/UpdateOptionalCourseScoreServlet.java +++ b/src/web/servlet/teacher/UpdateOptionalCourseScoreServlet.java @@ -21,11 +21,14 @@ import java.io.IOException; import java.util.Date; @WebServlet("/updateOptionalCourseScoreServlet") + +//啊 public class UpdateOptionalCourseScoreServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); String cid = request.getParameter("cid"); + //咦 String sid = request.getParameter("sid"); String sScore = request.getParameter("student-score"); StudentService service = new StudentServiceImpl(); @@ -40,6 +43,7 @@ public class UpdateOptionalCourseScoreServlet extends HttpServlet { Student s = service.findStudentById(student); Course c = service1.findSelectCourseByCourseId(cid); SelectCourse sc = service2.findScoreByCourseIdAndStudentId(cid,sid); + //什么 request.setAttribute("s",s); request.setAttribute("c",c); @@ -52,3 +56,36 @@ public class UpdateOptionalCourseScoreServlet extends HttpServlet { doPost(request,response); } } +//public class UpdateOptionalCourseScoreServlet extends HttpServlet { +// protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// request.setCharacterEncoding("utf-8"); +// +// String cid = request.getParameter("cid"); +// //咦 +// String sid = request.getParameter("sid"); +// String sScore = request.getParameter("student-score"); +// StudentService service = new StudentServiceImpl(); +// CourseService service1 = new CourseServiceImpl(); +// SelectCourseService service2 = new SelectCourseServiceImpl(); +// +// service2.upDateScoreByCidAndSid(cid,sid,sScore); +// +// Student student = new Student(); +// student.setS_id(sid); +// +// Student s = service.findStudentById(student); +// Course c = service1.findSelectCourseByCourseId(cid); +// SelectCourse sc = service2.findScoreByCourseIdAndStudentId(cid,sid); +// //什么 +// +// request.setAttribute("s",s); +// request.setAttribute("c",c); +// request.setAttribute("sc",sc); +// request.setAttribute("update_msg","修改分数成功!"+String.format("%tT",new Date())); +// request.getRequestDispatcher("/WEB-INF/teacher/updateOptionalCourseScore.jsp").forward(request,response); +// } +// +// protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// doPost(request,response); +// } +//} \ No newline at end of file diff --git a/src/web/servlet/teacher/UpdateScoreServlet.java b/src/web/servlet/teacher/UpdateScoreServlet.java index 08384c8..db0f7c6 100644 --- a/src/web/servlet/teacher/UpdateScoreServlet.java +++ b/src/web/servlet/teacher/UpdateScoreServlet.java @@ -18,8 +18,10 @@ import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet("/updateScoreServlet") +//i public class UpdateScoreServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + //中文 request.setCharacterEncoding("utf-8"); String cid = request.getParameter("cid"); String sid = request.getParameter("sid"); @@ -45,3 +47,31 @@ public class UpdateScoreServlet extends HttpServlet { doPost(request,response); } } +//public class UpdateScoreServlet extends HttpServlet { +// protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// //中文 +// request.setCharacterEncoding("utf-8"); +// String cid = request.getParameter("cid"); +// String sid = request.getParameter("sid"); +// +// StudentService service = new StudentServiceImpl(); +// Student student = new Student(); +// student.setS_id(sid); +// Student s = service.findStudentById(student); +// +// CourseService service1 = new CourseServiceImpl(); +// Course c = service1.findSelectCourseByCourseId(cid); +// +// SelectCourseService service2 = new SelectCourseServiceImpl(); +// SelectCourse sc = service2.findScoreByCourseIdAndStudentId(cid,sid); +// +// request.setAttribute("s",s); +// request.setAttribute("c",c); +// request.setAttribute("sc",sc); +// request.getRequestDispatcher("/WEB-INF/teacher/updateOptionalCourseScore.jsp").forward(request,response); +// } +// +// protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// doPost(request,response); +// } +//} \ No newline at end of file diff --git a/src/web/servlet/teacher/UpdateTeacherInfoServlet.java b/src/web/servlet/teacher/UpdateTeacherInfoServlet.java index 972e4e0..f6daffb 100644 --- a/src/web/servlet/teacher/UpdateTeacherInfoServlet.java +++ b/src/web/servlet/teacher/UpdateTeacherInfoServlet.java @@ -26,23 +26,23 @@ public class UpdateTeacherInfoServlet extends HttpServlet { String title = request.getParameter("teacher-title"); Teacher updateTeacher = new Teacher(); - //判断输入位数是否大于数据库位数 + //判断输入位数是否大于数据库位数- if (name.length() > 4 || education.length() > 20 || title.length()>24 || name.contains("<") || education.contains("<") || title.contains("<")) { request.setAttribute("update_msg","格式错误,请重新提交!"+String.format("%tT",new Date())); request.getRequestDispatcher("updateTeacherServlet?tid="+tid).forward(request, response); }else { - //封装教师对象 + //封装教师对象- updateTeacher.setT_id(tid); updateTeacher.setT_name(name); updateTeacher.setT_sex(sex); updateTeacher.setT_education(education); updateTeacher.setT_title(title); - //调用TeacherUpdate服务 + //调用TeacherUpdate服务- TeacherService service = new TeacherServiceImpl(); service.updateInfo(updateTeacher); - //成功则返回并给提示 + //成功则返回并给提示- request.setAttribute("update_msg", "修改成功!" + String.format("%tT", new Date())); request.getRequestDispatcher("updateTeacherServlet?tid=" + tid).forward(request, response); } @@ -52,3 +52,40 @@ public class UpdateTeacherInfoServlet extends HttpServlet { doPost(request,response); } } +//public class UpdateTeacherInfoServlet extends HttpServlet { +// protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// request.setCharacterEncoding("utf-8"); +// String tid = request.getParameter("teacher-id"); +// +// String name = request.getParameter("teacher-name"); +// String sex = request.getParameter("teacher-sex"); +// String education = request.getParameter("teacher-education"); +// String title = request.getParameter("teacher-title"); +// +// Teacher updateTeacher = new Teacher(); +// //判断输入位数是否大于数据库位数- +// if (name.length() > 4 || education.length() > 20 || title.length()>24 || name.contains("<") || education.contains("<") || title.contains("<")) { +// request.setAttribute("update_msg","格式错误,请重新提交!"+String.format("%tT",new Date())); +// request.getRequestDispatcher("updateTeacherServlet?tid="+tid).forward(request, response); +// }else { +// //封装教师对象- +// updateTeacher.setT_id(tid); +// updateTeacher.setT_name(name); +// updateTeacher.setT_sex(sex); +// updateTeacher.setT_education(education); +// updateTeacher.setT_title(title); +// +// //调用TeacherUpdate服务- +// TeacherService service = new TeacherServiceImpl(); +// service.updateInfo(updateTeacher); +// +// //成功则返回并给提示- +// request.setAttribute("update_msg", "修改成功!" + String.format("%tT", new Date())); +// request.getRequestDispatcher("updateTeacherServlet?tid=" + tid).forward(request, response); +// } +// } +// +// protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// doPost(request,response); +// } +//} \ No newline at end of file diff --git a/src/web/servlet/teacher/UpdateTeacherOptionalCourseServlet.java b/src/web/servlet/teacher/UpdateTeacherOptionalCourseServlet.java index 7e5d7da..0ae3b62 100644 --- a/src/web/servlet/teacher/UpdateTeacherOptionalCourseServlet.java +++ b/src/web/servlet/teacher/UpdateTeacherOptionalCourseServlet.java @@ -17,7 +17,7 @@ import java.util.List; public class UpdateTeacherOptionalCourseServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); -// HttpSession session = request.getSession(); +// HttpSession session = request.getSession();- String cid = (String)request.getParameter("cid"); TeacherService service = new TeacherServiceImpl(); Course c = service.findOptionalCourseByCourseId(cid); @@ -33,3 +33,22 @@ public class UpdateTeacherOptionalCourseServlet extends HttpServlet { doPost(request,response); } } +//public class UpdateTeacherOptionalCourseServlet extends HttpServlet { +// protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// request.setCharacterEncoding("utf-8"); +//// HttpSession session = request.getSession();- +// String cid = (String)request.getParameter("cid"); +// TeacherService service = new TeacherServiceImpl(); +// Course c = service.findOptionalCourseByCourseId(cid); +// request.setAttribute("course",c); +// System.out.println(c.getC_id()); +// System.out.println(c.getC_name()); +// System.out.println(c.getC_info()); +// +// request.getRequestDispatcher("/WEB-INF/teacher/updateTeacherOptionalCourseInfo.jsp").forward(request,response); +// } +// +// protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// doPost(request,response); +// } +//} \ No newline at end of file diff --git a/src/web/servlet/teacher/UpdateTeacherServlet.java b/src/web/servlet/teacher/UpdateTeacherServlet.java index cb37644..c8b619c 100644 --- a/src/web/servlet/teacher/UpdateTeacherServlet.java +++ b/src/web/servlet/teacher/UpdateTeacherServlet.java @@ -21,6 +21,7 @@ import java.io.IOException; import java.util.List; @WebServlet("/updateTeacherServlet") +//1 public class UpdateTeacherServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); @@ -34,6 +35,7 @@ public class UpdateTeacherServlet extends HttpServlet { request.setAttribute("teacher",newTeacher); CDCService service2 = new CDCServiceImpl(); + //2 List collegeList = service2.findAllCollege(); List departmentList = service2.findAllDepartment(); List classList = service2.findAllClass(); @@ -49,3 +51,32 @@ public class UpdateTeacherServlet extends HttpServlet { doPost(request,response); } } +//public class UpdateTeacherServlet extends HttpServlet { +// protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// request.setCharacterEncoding("utf-8"); +// HttpSession session = request.getSession(); +// String teacherid = request.getParameter("tid"); +// +// Teacher teacher = new Teacher(); +// teacher.setT_id(teacherid); +// TeacherService service = new TeacherServiceImpl(); +// Teacher newTeacher = service.findTeacherById(teacher); +// request.setAttribute("teacher",newTeacher); +// +// CDCService service2 = new CDCServiceImpl(); +// //2 +// List collegeList = service2.findAllCollege(); +// List departmentList = service2.findAllDepartment(); +// List classList = service2.findAllClass(); +// +// session.setAttribute("collegeLists",collegeList); +// session.setAttribute("departmentLists",departmentList); +// session.setAttribute("classLists",classList); +// +// request.getRequestDispatcher("/WEB-INF/admin/updateTeacher.jsp").forward(request,response); +// } +// +// protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// doPost(request,response); +// } +//} \ No newline at end of file diff --git a/src/web/servlet/verifycode/CheckCodeServlet.java b/src/web/servlet/verifycode/CheckCodeServlet.java index 598368e..1aa4101 100644 --- a/src/web/servlet/verifycode/CheckCodeServlet.java +++ b/src/web/servlet/verifycode/CheckCodeServlet.java @@ -20,52 +20,52 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** - * 验证码 + * 验证码- */ @WebServlet("/checkCodeServlet") public class CheckCodeServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { - //服务器通知浏览器不要缓存 + //服务器通知浏览器不要缓存- response.setHeader("pragma","no-cache"); response.setHeader("cache-control","no-cache"); response.setHeader("expires","0"); - //在内存中创建一个长80,宽30的图片,默认黑色背景 - //参数一:长 - //参数二:宽 - //参数三:颜色 + //在内存中创建一个长80,宽30的图片,默认黑色背景- + //参数一:长- + //参数二:宽- + //参数三:颜色- int width = 136; int height = 38; BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB); - //获取画笔 + //获取画笔- Graphics g = image.getGraphics(); - //设置画笔颜色为灰色 + //设置画笔颜色为灰色- g.setColor(Color.GRAY); - //填充图片 + //填充图片- g.fillRect(0,0, width,height); - //产生4个随机验证码,12Ey + //产生4个随机验证码,12Ey- String checkCode = getCheckCode(); - //将验证码放入HttpSession中 + //将验证码放入HttpSession中- request.getSession().setAttribute("CHECKCODE_SERVER",checkCode); - //设置画笔颜色为黄色 + //设置画笔颜色为黄色- g.setColor(Color.YELLOW); - //设置字体的小大 + //设置字体的小大- g.setFont(new Font("黑体",Font.BOLD,30)); - //向图片上写入验证码 + //向图片上写入验证码- g.drawString(checkCode,36,28); - //将内存中的图片输出到浏览器 - //参数一:图片对象 - //参数二:图片的格式,如PNG,JPG,GIF - //参数三:图片输出到哪里去 + //将内存中的图片输出到浏览器- + //参数一:图片对象- + //参数二:图片的格式,如PNG,JPG,GIF- + //参数三:图片输出到哪里去- ImageIO.write(image,"PNG",response.getOutputStream()); } /** - * 产生4位随机字符串 + * 产生4位随机字符串 - */ private String getCheckCode() { String base = "23456789ABCDEFGHJKMNPQRSTUVWXYZabcdefghjkmnpqrstuvwxyz"; @@ -73,11 +73,11 @@ public class CheckCodeServlet extends HttpServlet { Random r = new Random(); StringBuffer sb = new StringBuffer(); for(int i=1;i<=4;i++){ - //产生0到size-1的随机值 + //产生0到size-1的随机值- int index = r.nextInt(size); - //在base字符串中获取下标为index的字符 + //在base字符串中获取下标为index的字符- char c = base.charAt(index); - //将c放入到StringBuffer中去 + //将c放入到StringBuffer中去- sb.append(c); } return sb.toString(); @@ -86,6 +86,68 @@ public class CheckCodeServlet extends HttpServlet { this.doGet(request,response); } } - +//public class CheckCodeServlet extends HttpServlet { +// public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { +// +// //服务器通知浏览器不要缓存- +// response.setHeader("pragma","no-cache"); +// response.setHeader("cache-control","no-cache"); +// response.setHeader("expires","0"); +// +// //在内存中创建一个长80,宽30的图片,默认黑色背景- +// //参数一:长- +// //参数二:宽- +// //参数三:颜色- +// int width = 136; +// int height = 38; +// BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB); +// +// //获取画笔- +// Graphics g = image.getGraphics(); +// //设置画笔颜色为灰色- +// g.setColor(Color.GRAY); +// //填充图片- +// g.fillRect(0,0, width,height); +// +// //产生4个随机验证码,12Ey- +// String checkCode = getCheckCode(); +// //将验证码放入HttpSession中- +// request.getSession().setAttribute("CHECKCODE_SERVER",checkCode); +// +// //设置画笔颜色为黄色- +// g.setColor(Color.YELLOW); +// //设置字体的小大- +// g.setFont(new Font("黑体",Font.BOLD,30)); +// //向图片上写入验证码- +// g.drawString(checkCode,36,28); +// +// //将内存中的图片输出到浏览器- +// //参数一:图片对象- +// //参数二:图片的格式,如PNG,JPG,GIF- +// //参数三:图片输出到哪里去- +// ImageIO.write(image,"PNG",response.getOutputStream()); +// } +// /** +// * 产生4位随机字符串 - +// */ +// private String getCheckCode() { +// String base = "23456789ABCDEFGHJKMNPQRSTUVWXYZabcdefghjkmnpqrstuvwxyz"; +// int size = base.length(); +// Random r = new Random(); +// StringBuffer sb = new StringBuffer(); +// for(int i=1;i<=4;i++){ +// //产生0到size-1的随机值- +// int index = r.nextInt(size); +// //在base字符串中获取下标为index的字符- +// char c = base.charAt(index); +// //将c放入到StringBuffer中去- +// sb.append(c); +// } +// return sb.toString(); +// } +// public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// this.doGet(request,response); +// } +//} From b4265e580f1b66ff2c1f2ccd42621218246b5b7b Mon Sep 17 00:00:00 2001 From: "2632890037@qq.com" <262890037@qq.com> Date: Tue, 17 Dec 2024 21:41:14 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E5=BA=9E=E7=BA=AA=E8=BE=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- text.iml | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 text.iml diff --git a/text.iml b/text.iml new file mode 100644 index 0000000..bc73df7 --- /dev/null +++ b/text.iml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From c3c730ef8a7aa1510ab051ba6e46111b22004008 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BA=9E=E7=BA=AA=E8=BE=89?= <262890037@qq.com> Date: Tue, 17 Dec 2024 22:46:45 +0800 Subject: [PATCH 3/6] 1 --- src/utils/JDBCUtils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/utils/JDBCUtils.java b/src/utils/JDBCUtils.java index 3ef7e5d..bc6f5ae 100644 --- a/src/utils/JDBCUtils.java +++ b/src/utils/JDBCUtils.java @@ -10,7 +10,7 @@ import java.sql.Statement; import java.util.Properties; /** - * Druid连接池工具类,将来dao层调用- + * Druid连接池工具类,将来dao层调用-- */ public class JDBCUtils { private static DataSource dataSource; //定义成员变量DataSource From 5bab3473d75670cb59f1c54794255e792ce1e01c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BA=9E=E7=BA=AA=E8=BE=89?= <262890037@qq.com> Date: Wed, 18 Dec 2024 00:15:00 +0800 Subject: [PATCH 4/6] =?UTF-8?q?=E5=BA=9E=E7=BA=AA=E8=BE=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../servlet/admin/AddStudentInfoServlet.java | 151 +++++++++++++++ src/web/servlet/admin/AddStudentServlet.java | 59 ++++++ .../admin/AdminPasswordIndexServlet.java | 23 +++ .../admin/AdminPasswordUpdateServlet.java | 95 +++++++++ .../admin/DoDeleteSelectCourseServlet.java | 54 ++++++ .../admin/UpdateStudentInfoServlet.java | 119 ++++++++++++ .../servlet/admin/UpdateStudentServlet.java | 64 ++++++ src/web/servlet/cdc/CDCListServlet.java | 66 +++++++ .../complaints/AddComplaintsServlet.java | 62 ++++++ .../complaints/ComplaintListServlet.java | 40 ++++ .../servlet/complaints/ComplaintServlet.java | 48 +++++ src/web/servlet/file/DeleteFileServlet.java | 47 +++++ src/web/servlet/file/DownloadServlet.java | 106 ++++++++++ src/web/servlet/file/FileListServlet.java | 130 +++++++++++++ src/web/servlet/file/FileServlet.java | 37 ++++ src/web/servlet/file/ShowPhotoServlet.java | 133 ++++++++++++- src/web/servlet/file/UploadImageServlet.java | 160 +++++++++++++++ src/web/servlet/file/UploadServlet.java | 183 ++++++++++++++++++ src/web/servlet/login/LogoutServlet.java | 8 + src/web/servlet/login/RegisterServlet.java | 111 ++++++++++- src/web/servlet/notify/AddNotifyServlet.java | 39 ++++ .../servlet/notify/DeleteNotifyServlet.java | 40 ++++ src/web/servlet/notify/NotifyListServlet.java | 39 ++++ .../servlet/notify/NotifyListToServlet.java | 67 +++++++ src/web/servlet/notify/NotifyServlet.java | 24 +++ .../page/FindStudentByPageServlet.java | 89 +++++++++ .../student/DeleteSelectStudentServlet.java | 36 ++++ .../servlet/student/DeleteStudentServlet.java | 47 +++++ .../student/DoSelectCourseServlet.java | 73 +++++++ .../StudentInfomationUpdateServlet.java | 136 +++++++++++++ .../servlet/student/StudentListServlet.java | 76 ++++++++ .../student/StudentOptionalCourseServlet.java | 70 +++++++ .../student/StudentPasswordUpdateServlet.java | 116 +++++++++++ .../StudentSelectCourseListServlet.java | 8 + .../teacher/AddOptionalCourseServlet.java | 9 + .../servlet/teacher/TeacherListServlet.java | 9 + .../teacher/TeacherOptionalCourseServlet.java | 5 + .../teacher/TeacherPasswordUpdateServlet.java | 22 +++ .../UpdateOptionalCourseScoreServlet.java | 14 ++ .../servlet/teacher/UpdateScoreServlet.java | 14 ++ .../teacher/UpdateTeacherInfoServlet.java | 10 + .../UpdateTeacherOptionalCourseServlet.java | 7 + .../servlet/teacher/UpdateTeacherServlet.java | 10 + 43 files changed, 2649 insertions(+), 7 deletions(-) diff --git a/src/web/servlet/admin/AddStudentInfoServlet.java b/src/web/servlet/admin/AddStudentInfoServlet.java index 7ae1cab..83abc5f 100644 --- a/src/web/servlet/admin/AddStudentInfoServlet.java +++ b/src/web/servlet/admin/AddStudentInfoServlet.java @@ -15,57 +15,208 @@ import java.util.Date; @WebServlet("/addStudentInfoServlet") public class AddStudentInfoServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + //设置请求编码 request.setCharacterEncoding("utf-8"); + //创建学生服务对象 StudentService service= new StudentServiceImpl(); //先进行判断是否已存在该学生- String sid = request.getParameter("student-id"); + // 创建一个Student对象 Student s = new Student(); + // 设置学生ID s.setS_id(sid); + // 根据学生ID查找学生 Student newStudent = service.findStudentById(s); + // 如果找到了该学生 if (newStudent != null) { + // 设置更新消息 request.setAttribute("update_msg","已存在该学生,请重新添加!"+String.format("%tT",new Date())); + // 转发到addStudentServlet request.getRequestDispatcher("addStudentServlet").forward(request, response); }else { + // 获取学生姓名 String name = request.getParameter("student-name"); + // 获取学生性别 String sex = request.getParameter("student-sex"); + // 获取学生年龄 String age = request.getParameter("student-age"); + // 获取学生电话 String phone = request.getParameter("student-phone"); + // 获取学生邮箱 String email = request.getParameter("student-email"); + // 获取学生地址 String address = request.getParameter("student-address"); + // 获取学生所在学院 String college = request.getParameter("selectCollege"); + // 获取学生所在系 String department = request.getParameter("selectDepartment"); + // 获取学生所在班级 + // 获取请求参数selectClass的值 String cclass = request.getParameter("selectClass"); + // 如果college参数为空,则将其赋值为"待分配" if ("".equals(college)) { college = "待分配"; } + // 如果department参数为空,则将其赋值为"待分配" if ("".equals(department)) { department = "待分配"; } + // 如果cclass参数为空,则将其赋值为"待分配" + // 如果cclass为空,则将其设置为"待分配" if ("".equals(cclass)) { cclass = "待分配"; } + // 创建一个Student对象 Student updateStudent = new Student(); + // 设置Student对象的属性 + // 设置学生ID updateStudent.setS_id(sid); + // 设置学生姓名 updateStudent.setS_name(name); + // 设置学生性别 updateStudent.setS_sex(sex); + // 设置学生年龄 updateStudent.setS_age(age); + // 设置学生电话 updateStudent.setS_phone(phone); + // 设置学生邮箱 updateStudent.setS_email(email); + // 设置学生地址 updateStudent.setS_address(address); + // 设置学生学院 updateStudent.setS_college(college); + // 设置学生系别 updateStudent.setS_department(department); + // 设置学生班级 updateStudent.setS_class(cclass); +//protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + //调用service层的方法,添加学生信息 service.addStudentAllInfo(updateStudent); + //将添加信息返回给客户端 request.setAttribute("update_msg","添加成功!"+String.format("%tT",new Date()));//返回添加信息 + //将请求转发到addStudentServlet request.getRequestDispatcher("addStudentServlet").forward(request, response); } } + //处理get请求 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + //调用doPost方法 doPost(request,response); } } +//package web.servlet.admin; +// +//import domain.Student; +//import service.StudentService; +//import service.impl.StudentServiceImpl; +// +//import javax.servlet.ServletException; +//import javax.servlet.annotation.WebServlet; +//import javax.servlet.http.HttpServlet; +//import javax.servlet.http.HttpServletRequest; +//import javax.servlet.http.HttpServletResponse; +//import java.io.IOException; +//import java.util.Date; +// +//@WebServlet("/addStudentInfoServlet") +//public class AddStudentInfoServlet extends HttpServlet { +// protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// //设置请求编码 +// request.setCharacterEncoding("utf-8"); +// //创建学生服务对象 +// StudentService service= new StudentServiceImpl(); +// //先进行判断是否已存在该学生- +// String sid = request.getParameter("student-id"); +// // 创建一个Student对象 +// Student s = new Student(); +// // 设置学生ID +// s.setS_id(sid); +// // 根据学生ID查找学生 +// Student newStudent = service.findStudentById(s); +// // 如果找到了该学生 +// if (newStudent != null) { +// // 设置更新消息 +// request.setAttribute("update_msg","已存在该学生,请重新添加!"+String.format("%tT",new Date())); +// // 转发到addStudentServlet +// request.getRequestDispatcher("addStudentServlet").forward(request, response); +// }else { +// // 获取学生姓名 +// String name = request.getParameter("student-name"); +// // 获取学生性别 +// String sex = request.getParameter("student-sex"); +// // 获取学生年龄 +// String age = request.getParameter("student-age"); +// // 获取学生电话 +// String phone = request.getParameter("student-phone"); +// // 获取学生邮箱 +// String email = request.getParameter("student-email"); +// // 获取学生地址 +// String address = request.getParameter("student-address"); +// // 获取学生所在学院 +// String college = request.getParameter("selectCollege"); +// // 获取学生所在系 +// String department = request.getParameter("selectDepartment"); +// // 获取学生所在班级 +// // 获取请求参数selectClass的值 +// String cclass = request.getParameter("selectClass"); +// // 如果college参数为空,则将其赋值为"待分配" +// if ("".equals(college)) { +// college = "待分配"; +// } +// // 如果department参数为空,则将其赋值为"待分配" +// if ("".equals(department)) { +// department = "待分配"; +// } +// // 如果cclass参数为空,则将其赋值为"待分配" +// // 如果cclass为空,则将其设置为"待分配" +// if ("".equals(cclass)) { +// cclass = "待分配"; +// } +// +// // 创建一个Student对象 +// Student updateStudent = new Student(); +// +// // 设置Student对象的属性 +// // 设置学生ID +// updateStudent.setS_id(sid); +// // 设置学生姓名 +// updateStudent.setS_name(name); +// // 设置学生性别 +// updateStudent.setS_sex(sex); +// // 设置学生年龄 +// updateStudent.setS_age(age); +// // 设置学生电话 +// updateStudent.setS_phone(phone); +// // 设置学生邮箱 +// updateStudent.setS_email(email); +// // 设置学生地址 +// updateStudent.setS_address(address); +// // 设置学生学院 +// updateStudent.setS_college(college); +// // 设置学生系别 +// updateStudent.setS_department(department); +// // 设置学生班级 +// updateStudent.setS_class(cclass); +// +////protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// //调用service层的方法,添加学生信息 +// service.addStudentAllInfo(updateStudent); +// //将添加信息返回给客户端 +// request.setAttribute("update_msg","添加成功!"+String.format("%tT",new Date()));//返回添加信息 +// //将请求转发到addStudentServlet +// request.getRequestDispatcher("addStudentServlet").forward(request, response); +// +// } +// } +// +// //处理get请求 +// protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// //调用doPost方法 +// doPost(request,response); +// } +//} \ No newline at end of file diff --git a/src/web/servlet/admin/AddStudentServlet.java b/src/web/servlet/admin/AddStudentServlet.java index 0b5b843..f652fbe 100644 --- a/src/web/servlet/admin/AddStudentServlet.java +++ b/src/web/servlet/admin/AddStudentServlet.java @@ -27,15 +27,22 @@ public class AddStudentServlet extends HttpServlet { HttpSession session = request.getSession(); // 创建CDCService的实例,通常用于处理与学院、系、班级相关的业务逻辑 + // 创建CDCService的实现类 CDCService service2 = new CDCServiceImpl(); + // 调用findAllCollege方法,获取所有学院列表 List collegeList = service2.findAllCollege(); + // 调用findAllDepartment方法,获取所有部门列表 List departmentList = service2.findAllDepartment(); + // 调用findAllClass方法,获取所有班级列表 + // 获取所有班级信息 List classList = service2.findAllClass(); + // 将学院列表、系列表、班级列表存入session中 session.setAttribute("collegeLists",collegeList); session.setAttribute("departmentLists",departmentList); session.setAttribute("classLists",classList); + // 转发到添加学生页面 request.getRequestDispatcher("/WEB-INF/admin/addStudent.jsp").forward(request,response); } @@ -43,3 +50,55 @@ public class AddStudentServlet extends HttpServlet { doPost(request,response); } } +//package web.servlet.admin; +// +//import domain.CDC; +//import domain.Student; +//import service.CDCService; +//import service.StudentService; +//import service.impl.CDCServiceImpl; +//import service.impl.StudentServiceImpl; +// +//import javax.servlet.ServletException; +//import javax.servlet.annotation.WebServlet; +//import javax.servlet.http.HttpServlet; +//import javax.servlet.http.HttpServletRequest; +//import javax.servlet.http.HttpServletResponse; +//import javax.servlet.http.HttpSession; +//import java.io.IOException; +//import java.util.List; +// +///** +// * 添加学生的Servlet处理类 +// */ +//@WebServlet("/addStudentServlet") +//public class AddStudentServlet extends HttpServlet { +// protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// // 设置请求编码为UTF-8,以支持中文字符的正确处理 +// request.setCharacterEncoding("utf-8"); +// HttpSession session = request.getSession(); +// +// // 创建CDCService的实例,通常用于处理与学院、系、班级相关的业务逻辑 +// // 创建CDCService的实现类 +// CDCService service2 = new CDCServiceImpl(); +// // 调用findAllCollege方法,获取所有学院列表 +// List collegeList = service2.findAllCollege(); +// // 调用findAllDepartment方法,获取所有部门列表 +// List departmentList = service2.findAllDepartment(); +// // 调用findAllClass方法,获取所有班级列表 +// // 获取所有班级信息 +// List classList = service2.findAllClass(); +// +// // 将学院列表、系列表、班级列表存入session中 +// session.setAttribute("collegeLists",collegeList); +// session.setAttribute("departmentLists",departmentList); +// session.setAttribute("classLists",classList); +// +// // 转发到添加学生页面 +// request.getRequestDispatcher("/WEB-INF/admin/addStudent.jsp").forward(request,response); +// } +// +// protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// doPost(request,response); +// } +//} \ No newline at end of file diff --git a/src/web/servlet/admin/AdminPasswordIndexServlet.java b/src/web/servlet/admin/AdminPasswordIndexServlet.java index 65c3995..fd704a2 100644 --- a/src/web/servlet/admin/AdminPasswordIndexServlet.java +++ b/src/web/servlet/admin/AdminPasswordIndexServlet.java @@ -21,3 +21,26 @@ public class AdminPasswordIndexServlet extends HttpServlet { doPost(request,response); } } +//package web.servlet.admin; +// +//import javax.servlet.ServletException; +//import javax.servlet.annotation.WebServlet; +//import javax.servlet.http.HttpServlet; +//import javax.servlet.http.HttpServletRequest; +//import javax.servlet.http.HttpServletResponse; +//import java.io.IOException; +// +//@WebServlet("/adminPasswordIndexServlet") +///* +// 管理员密码更新界面的Servlet处理类 +// */ +//public class AdminPasswordIndexServlet extends HttpServlet { +// // 将请求转发到管理员密码更新界面 +// protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// request.getRequestDispatcher("/WEB-INF/admin/adminUpdatePassword.jsp").forward(request,response); +// } +// +// protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// doPost(request,response); +// } +//} \ No newline at end of file diff --git a/src/web/servlet/admin/AdminPasswordUpdateServlet.java b/src/web/servlet/admin/AdminPasswordUpdateServlet.java index 5be2f61..6830db4 100644 --- a/src/web/servlet/admin/AdminPasswordUpdateServlet.java +++ b/src/web/servlet/admin/AdminPasswordUpdateServlet.java @@ -20,32 +20,51 @@ import java.util.Date; */ @WebServlet("/adminPasswordUpdateServlet") public class AdminPasswordUpdateServlet extends HttpServlet { + // 处理POST请求 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // 设置请求编码为utf-8 request.setCharacterEncoding("utf-8"); + // 获取当前会话 HttpSession session = request.getSession(); + // 从会话中获取管理员对象 Admin admin= (Admin) session.getAttribute("admin"); + // 获取管理员ID String adminid = admin.getA_id(); + // 获取新密码 String newpassword = request.getParameter("admin-newpassword"); + // 获取确认新密码 String ennewpassword = request.getParameter("admin-ennewpassword"); + // 定义正则表达式,用于验证密码格式 String regex = "^[\\w]{3,12}$"; + // 判断新密码是否符合正则表达式 boolean flag = newpassword.matches(regex); + // 如果不符合,则设置错误信息,并跳转到更新密码页面 if (!flag) { request.setAttribute("update_msg", "密码格式错误,重新提交!"+String.format("%tT",new Date())); request.getRequestDispatcher("/WEB-INF/admin/adminUpdatePassword.jsp").forward(request, response); + // 如果新密码和确认密码不一致,则设置错误信息,并跳转到更新密码页面 } else if (!newpassword.equals(ennewpassword)) { request.setAttribute("update_msg", "密码确认错误,请重新提交!" + String.format("%tT", new Date())); request.getRequestDispatcher("/WEB-INF/admin/adminUpdatePassword.jsp").forward(request, response); + // 如果新密码和确认密码一致,则继续执行 } else { + // 创建AdminService实例 AdminService service= new AdminServiceImpl(); + // 调用updatePassword方法,更新密码 service.updatePassword(adminid,newpassword); + // 调用findAdminById方法,根据adminid查找管理员信息 Admin newAdmin = service.findAdminById(admin); + // 将新的管理员信息赋值给admin admin = newAdmin; + // 将新的管理员信息存入session中 session.setAttribute("admin",admin); + // 设置更新成功的信息 request.setAttribute("update_msg", "修改成功!" + String.format("%tT", new Date())); + // 转发到adminUpdatePassword.jsp页面 request.getRequestDispatcher("/WEB-INF/admin/adminUpdatePassword.jsp").forward(request, response); } @@ -55,3 +74,79 @@ public class AdminPasswordUpdateServlet extends HttpServlet { doPost(request,response); } } +//package web.servlet.admin; +// +//import domain.Admin; +//import domain.Student; +//import service.AdminService; +//import service.StudentService; +//import service.impl.AdminServiceImpl; +//import service.impl.StudentServiceImpl; +// +//import javax.servlet.ServletException; +//import javax.servlet.annotation.WebServlet; +//import javax.servlet.http.HttpServlet; +//import javax.servlet.http.HttpServletRequest; +//import javax.servlet.http.HttpServletResponse; +//import javax.servlet.http.HttpSession; +//import java.io.IOException; +//import java.util.Date; +///** +// * 管理员密码更新的Servlet处理类 +// */ +//@WebServlet("/adminPasswordUpdateServlet") +//public class AdminPasswordUpdateServlet extends HttpServlet { +// // 处理POST请求 +// protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// // 设置请求编码为utf-8 +// request.setCharacterEncoding("utf-8"); +// // 获取当前会话 +// HttpSession session = request.getSession(); +// // 从会话中获取管理员对象 +// Admin admin= (Admin) session.getAttribute("admin"); +// +// // 获取管理员ID +// String adminid = admin.getA_id(); +// // 获取新密码 +// String newpassword = request.getParameter("admin-newpassword"); +// // 获取确认新密码 +// String ennewpassword = request.getParameter("admin-ennewpassword"); +// // 定义正则表达式,用于验证密码格式 +// String regex = "^[\\w]{3,12}$"; +// // 判断新密码是否符合正则表达式 +// boolean flag = newpassword.matches(regex); +// // 如果不符合,则设置错误信息,并跳转到更新密码页面 +// if (!flag) { +// request.setAttribute("update_msg", "密码格式错误,重新提交!"+String.format("%tT",new Date())); +// request.getRequestDispatcher("/WEB-INF/admin/adminUpdatePassword.jsp").forward(request, response); +// // 如果新密码和确认密码不一致,则设置错误信息,并跳转到更新密码页面 +// } else if (!newpassword.equals(ennewpassword)) { +// request.setAttribute("update_msg", "密码确认错误,请重新提交!" + String.format("%tT", new Date())); +// request.getRequestDispatcher("/WEB-INF/admin/adminUpdatePassword.jsp").forward(request, response); +// // 如果新密码和确认密码一致,则继续执行 +// } else { +// +// // 创建AdminService实例 +// AdminService service= new AdminServiceImpl(); +// // 调用updatePassword方法,更新密码 +// service.updatePassword(adminid,newpassword); +// +// // 调用findAdminById方法,根据adminid查找管理员信息 +// Admin newAdmin = service.findAdminById(admin); +// // 将新的管理员信息赋值给admin +// admin = newAdmin; +// // 将新的管理员信息存入session中 +// session.setAttribute("admin",admin); +// +// // 设置更新成功的信息 +// request.setAttribute("update_msg", "修改成功!" + String.format("%tT", new Date())); +// // 转发到adminUpdatePassword.jsp页面 +// request.getRequestDispatcher("/WEB-INF/admin/adminUpdatePassword.jsp").forward(request, response); +// } +// +// } +// +// protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// doPost(request,response); +// } +//} \ No newline at end of file diff --git a/src/web/servlet/admin/DoDeleteSelectCourseServlet.java b/src/web/servlet/admin/DoDeleteSelectCourseServlet.java index 0d9a19d..b11bbf0 100644 --- a/src/web/servlet/admin/DoDeleteSelectCourseServlet.java +++ b/src/web/servlet/admin/DoDeleteSelectCourseServlet.java @@ -25,12 +25,19 @@ public class DoDeleteSelectCourseServlet extends HttpServlet { * @param response HTTP响应对象,用于生成返回给客户端的响应。 * @throws IOException 如果输入或输出异常发生。 */ + // 处理POST请求 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // 设置请求编码为utf-8 request.setCharacterEncoding("utf-8"); + // 获取当前会话 HttpSession session = request.getSession(); + // 获取请求参数cid String cid = request.getParameter("cid"); + // 创建CourseService实例 CourseService service = new CourseServiceImpl(); + // 根据cid删除课程 service.deleteServiceById(cid); + // 转发到studentOptionalCourseServlet request.getRequestDispatcher("/studentOptionalCourseServlet").forward(request,response); } @@ -38,3 +45,50 @@ public class DoDeleteSelectCourseServlet extends HttpServlet { doPost(request,response); } } +//package web.servlet.admin; +// +//import domain.Course; +//import service.CourseService; +//import service.StudentService; +//import service.impl.CourseServiceImpl; +//import service.impl.StudentServiceImpl; +// +//import javax.servlet.ServletException; +//import javax.servlet.annotation.WebServlet; +//import javax.servlet.http.HttpServlet; +//import javax.servlet.http.HttpServletRequest; +//import javax.servlet.http.HttpServletResponse; +//import javax.servlet.http.HttpSession; +//import java.io.IOException; +///** +// * 处理学生选课删除请求的Servlet +// */ +//@WebServlet("/doDeleteSelectCourseServlet") +//public class DoDeleteSelectCourseServlet extends HttpServlet { +// /** +// * 处理POST请求,执行选课删除操作。 +// * +// * @param request HTTP请求对象,包含客户端发送的数据。 +// * @param response HTTP响应对象,用于生成返回给客户端的响应。 +// * @throws IOException 如果输入或输出异常发生。 +// */ +// // 处理POST请求 +// protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// // 设置请求编码为utf-8 +// request.setCharacterEncoding("utf-8"); +// // 获取当前会话 +// HttpSession session = request.getSession(); +// // 获取请求参数cid +// String cid = request.getParameter("cid"); +// // 创建CourseService实例 +// CourseService service = new CourseServiceImpl(); +// // 根据cid删除课程 +// service.deleteServiceById(cid); +// // 转发到studentOptionalCourseServlet +// request.getRequestDispatcher("/studentOptionalCourseServlet").forward(request,response); +// } +// +// protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// doPost(request,response); +// } +//} \ No newline at end of file diff --git a/src/web/servlet/admin/UpdateStudentInfoServlet.java b/src/web/servlet/admin/UpdateStudentInfoServlet.java index d9e9932..8452a47 100644 --- a/src/web/servlet/admin/UpdateStudentInfoServlet.java +++ b/src/web/servlet/admin/UpdateStudentInfoServlet.java @@ -31,19 +31,29 @@ public class UpdateStudentInfoServlet extends HttpServlet { //保存输入内容 + // 获取请求参数中的学生姓名 String name = request.getParameter("student-name"); + // 输出学生姓名 System.out.println("sname:"+name); + // 获取请求参数中的学生性别 String sex = request.getParameter("student-sex"); + // 输出学生性别 System.out.println("ssex:"+sex); + // 获取请求参数中的学生年龄 String age = request.getParameter("student-age"); + // 获取请求参数中的学生电话 String phone = request.getParameter("student-phone"); + // 获取请求参数中的学生邮箱 String email = request.getParameter("student-email"); + // 获取请求参数中的学生地址 String address = request.getParameter("student-address"); + // 获取请求参数 String college = request.getParameter("selectCollege"); String department = request.getParameter("selectDepartment"); String cclass = request.getParameter("selectClass"); + // 创建一个学生对象 Student updateStudent = new Student(); //判断输入位数是否大于数据库位数- @@ -52,15 +62,25 @@ public class UpdateStudentInfoServlet extends HttpServlet { request.getRequestDispatcher("updateStudentServlet?sid="+sid).forward(request, response); }else { //封装学生对象- + // 设置学生ID updateStudent.setS_id(sid); + // 设置学生姓名 updateStudent.setS_name(name); + // 设置学生性别 updateStudent.setS_sex(sex); + // 设置学生年龄 updateStudent.setS_age(age); + // 设置学生电话 updateStudent.setS_phone(phone); + // 设置学生邮箱 updateStudent.setS_email(email); + // 设置学生地址 updateStudent.setS_address(address); + // 设置学生学院 updateStudent.setS_college(college); + // 设置学生系别 updateStudent.setS_department(department); + // 设置学生班级 updateStudent.setS_class(cclass); //调用studentUpdata服务- @@ -77,3 +97,102 @@ public class UpdateStudentInfoServlet extends HttpServlet { doPost(request,response); } } +//package web.servlet.admin; +// +// +// +//import domain.CDC; +//import domain.Student; +//import service.CDCService; +//import service.StudentService; +//import service.impl.CDCServiceImpl; +//import service.impl.StudentServiceImpl; +// +//import javax.servlet.ServletException; +//import javax.servlet.annotation.WebServlet; +//import javax.servlet.http.HttpServlet; +//import javax.servlet.http.HttpServletRequest; +//import javax.servlet.http.HttpServletResponse; +//import javax.servlet.http.HttpSession; +//import java.io.IOException; +//import java.text.SimpleDateFormat; +//import java.util.Date; +//import java.util.List; +// +//@WebServlet("/updateStudentInfoServlet") +//public class UpdateStudentInfoServlet extends HttpServlet { +// protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// +// request.setCharacterEncoding("utf-8"); +//// HttpSession session = request.getSession(); +// String sid = request.getParameter("student-id"); +// System.out.println("sid:"+sid); +// +// +// //保存输入内容 +// // 获取请求参数中的学生姓名 +// String name = request.getParameter("student-name"); +// // 输出学生姓名 +// System.out.println("sname:"+name); +// // 获取请求参数中的学生性别 +// String sex = request.getParameter("student-sex"); +// // 输出学生性别 +// System.out.println("ssex:"+sex); +// // 获取请求参数中的学生年龄 +// String age = request.getParameter("student-age"); +// // 获取请求参数中的学生电话 +// String phone = request.getParameter("student-phone"); +// // 获取请求参数中的学生邮箱 +// String email = request.getParameter("student-email"); +// // 获取请求参数中的学生地址 +// String address = request.getParameter("student-address"); +// +// // 获取请求参数 +// String college = request.getParameter("selectCollege"); +// String department = request.getParameter("selectDepartment"); +// String cclass = request.getParameter("selectClass"); +// +// // 创建一个学生对象 +// Student updateStudent = new Student(); +// +// //判断输入位数是否大于数据库位数- +// if (name.length() > 4 || phone.length() > 11 || email.length()>24 || address.length() > 24 || age.length()>2 || name.contains("<") || phone.contains("<") || email.contains("<") || address.contains("<") || age.contains("<")) { +// request.setAttribute("update_msg","格式错误,请重新提交!"+String.format("%tT",new Date())); +// request.getRequestDispatcher("updateStudentServlet?sid="+sid).forward(request, response); +// }else { +// //封装学生对象- +// // 设置学生ID +// updateStudent.setS_id(sid); +// // 设置学生姓名 +// updateStudent.setS_name(name); +// // 设置学生性别 +// updateStudent.setS_sex(sex); +// // 设置学生年龄 +// updateStudent.setS_age(age); +// // 设置学生电话 +// updateStudent.setS_phone(phone); +// // 设置学生邮箱 +// updateStudent.setS_email(email); +// // 设置学生地址 +// updateStudent.setS_address(address); +// // 设置学生学院 +// updateStudent.setS_college(college); +// // 设置学生系别 +// updateStudent.setS_department(department); +// // 设置学生班级 +// updateStudent.setS_class(cclass); +// +// //调用studentUpdata服务- +// StudentService service= new StudentServiceImpl(); +// service.updateInfo(updateStudent); +// +// //成功则返回并给提示 +// request.setAttribute("update_msg", "修改成功!"+String.format("%tT",new Date())); +// request.getRequestDispatcher("updateStudentServlet?sid="+sid).forward(request, response); +// } +// } +// +// protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// doPost(request,response); +// } +//} \ No newline at end of file diff --git a/src/web/servlet/admin/UpdateStudentServlet.java b/src/web/servlet/admin/UpdateStudentServlet.java index 3ff7107..130cd57 100644 --- a/src/web/servlet/admin/UpdateStudentServlet.java +++ b/src/web/servlet/admin/UpdateStudentServlet.java @@ -32,13 +32,20 @@ public class UpdateStudentServlet extends HttpServlet { request.setAttribute("student",newStudent); // 创建 CDCService 的实现类实例,用于处理与院系、系别和班级相关的业务逻辑 + // 创建CDCService实例 CDCService service2 = new CDCServiceImpl(); + // 调用findAllCollege方法获取所有学院列表 List collegeList = service2.findAllCollege(); + // 调用findAllDepartment方法获取所有部门列表 List departmentList = service2.findAllDepartment(); + // 调用findAllClass方法获取所有班级列表 List classList = service2.findAllClass(); + // 将学院列表存入session中 session.setAttribute("collegeLists",collegeList); + // 将部门列表存入session中 session.setAttribute("departmentLists",departmentList); + // 将班级列表存入session中 session.setAttribute("classLists",classList); request.getRequestDispatcher("/WEB-INF/admin/updateStudent.jsp").forward(request,response); @@ -48,3 +55,60 @@ public class UpdateStudentServlet extends HttpServlet { doPost(request,response); } } +//package web.servlet.admin; +// +//import domain.CDC; +//import domain.Student; +//import service.CDCService; +//import service.StudentService; +//import service.impl.CDCServiceImpl; +//import service.impl.StudentServiceImpl; +// +//import javax.servlet.ServletException; +//import javax.servlet.annotation.WebServlet; +//import javax.servlet.http.HttpServlet; +//import javax.servlet.http.HttpServletRequest; +//import javax.servlet.http.HttpServletResponse; +//import javax.servlet.http.HttpSession; +//import java.io.IOException; +//import java.util.List; +// +//@WebServlet("/updateStudentServlet") +//public class UpdateStudentServlet extends HttpServlet { +// protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// request.setCharacterEncoding("utf-8"); +// HttpSession session = request.getSession(); +// String studentid = request.getParameter("sid"); +//// session.setAttribute("sid",studentid); +// +// Student student = new Student(); +// student.setS_id(studentid); +// // 创建学生服务的实现类实例,用于处理与学生相关的业务逻辑 +// StudentService service = new StudentServiceImpl(); +// Student newStudent = service.findStudentById(student); +// request.setAttribute("student",newStudent); +// +// // 创建 CDCService 的实现类实例,用于处理与院系、系别和班级相关的业务逻辑 +// // 创建CDCService实例 +// CDCService service2 = new CDCServiceImpl(); +// // 调用findAllCollege方法获取所有学院列表 +// List collegeList = service2.findAllCollege(); +// // 调用findAllDepartment方法获取所有部门列表 +// List departmentList = service2.findAllDepartment(); +// // 调用findAllClass方法获取所有班级列表 +// List classList = service2.findAllClass(); +// +// // 将学院列表存入session中 +// session.setAttribute("collegeLists",collegeList); +// // 将部门列表存入session中 +// session.setAttribute("departmentLists",departmentList); +// // 将班级列表存入session中 +// session.setAttribute("classLists",classList); +// +// request.getRequestDispatcher("/WEB-INF/admin/updateStudent.jsp").forward(request,response); +// } +// +// protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// doPost(request,response); +// } +//} \ No newline at end of file diff --git a/src/web/servlet/cdc/CDCListServlet.java b/src/web/servlet/cdc/CDCListServlet.java index c7bec81..11b59c5 100644 --- a/src/web/servlet/cdc/CDCListServlet.java +++ b/src/web/servlet/cdc/CDCListServlet.java @@ -28,17 +28,25 @@ public class CDCListServlet extends HttpServlet { //将list存入request域- request.setAttribute("cdcs",cdcs); + // 获取当前会话 HttpSession session = request.getSession(); + // 从会话中获取学生对象 Student student= (Student)session.getAttribute("student"); + // 从会话中获取管理员对象 Admin admin= (Admin)session.getAttribute("admin"); + // 从会话中获取教师对象 Teacher teacher= (Teacher)session.getAttribute("teacher"); + // 如果会话中存在学生对象,且不存在管理员对象和教师对象,则跳转到学生CDC列表页面 if (student != null && admin == null && teacher == null) { request.getRequestDispatcher("/WEB-INF/student/sCDCList.jsp").forward(request, response); + // 如果会话中存在管理员对象,且不存在学生对象和教师对象,则跳转到管理员CDC列表页面 } else if (admin != null && student == null && teacher == null) { request.getRequestDispatcher("/WEB-INF/admin/aCDCList.jsp").forward(request, response); + // 如果会话中存在教师对象,且不存在学生对象和管理员对象,则跳转到教师CDC列表页面 } else if (teacher != null && admin == null && student == null) { request.getRequestDispatcher("/WEB-INF/teacher/tCDCList.jsp").forward(request, response); + // 如果会话中不存在学生对象、管理员对象和教师对象,则跳转到错误页面 } else { request.getRequestDispatcher("error.jsp").forward(request, response); } @@ -48,3 +56,61 @@ public class CDCListServlet extends HttpServlet { this.doPost(request,response); } } +//package web.servlet.cdc; +// +//import domain.Admin; +//import domain.CDC; +//import domain.Student; +//import domain.Teacher; +//import service.CDCService; +//import service.StudentService; +//import service.impl.CDCServiceImpl; +//import service.impl.StudentServiceImpl; +// +//import javax.servlet.ServletException; +//import javax.servlet.annotation.WebServlet; +//import javax.servlet.http.HttpServlet; +//import javax.servlet.http.HttpServletRequest; +//import javax.servlet.http.HttpServletResponse; +//import javax.servlet.http.HttpSession; +//import java.io.IOException; +//import java.util.List; +// +//@WebServlet("/cdcListServlet") +//public class CDCListServlet extends HttpServlet { +// protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// request.setCharacterEncoding("utf-8"); +// //调用StudentService完成查询- +// CDCService service = new CDCServiceImpl(); +// List cdcs = service.findAll(); +// //将list存入request域- +// request.setAttribute("cdcs",cdcs); +// +// // 获取当前会话 +// HttpSession session = request.getSession(); +// // 从会话中获取学生对象 +// Student student= (Student)session.getAttribute("student"); +// // 从会话中获取管理员对象 +// Admin admin= (Admin)session.getAttribute("admin"); +// // 从会话中获取教师对象 +// Teacher teacher= (Teacher)session.getAttribute("teacher"); +// +// // 如果会话中存在学生对象,且不存在管理员对象和教师对象,则跳转到学生CDC列表页面 +// if (student != null && admin == null && teacher == null) { +// request.getRequestDispatcher("/WEB-INF/student/sCDCList.jsp").forward(request, response); +// // 如果会话中存在管理员对象,且不存在学生对象和教师对象,则跳转到管理员CDC列表页面 +// } else if (admin != null && student == null && teacher == null) { +// request.getRequestDispatcher("/WEB-INF/admin/aCDCList.jsp").forward(request, response); +// // 如果会话中存在教师对象,且不存在学生对象和管理员对象,则跳转到教师CDC列表页面 +// } else if (teacher != null && admin == null && student == null) { +// request.getRequestDispatcher("/WEB-INF/teacher/tCDCList.jsp").forward(request, response); +// // 如果会话中不存在学生对象、管理员对象和教师对象,则跳转到错误页面 +// } else { +// request.getRequestDispatcher("error.jsp").forward(request, response); +// } +// } +// +// protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// this.doPost(request,response); +// } +//} \ No newline at end of file diff --git a/src/web/servlet/complaints/AddComplaintsServlet.java b/src/web/servlet/complaints/AddComplaintsServlet.java index 95fca50..9a0f843 100644 --- a/src/web/servlet/complaints/AddComplaintsServlet.java +++ b/src/web/servlet/complaints/AddComplaintsServlet.java @@ -29,12 +29,19 @@ public class AddComplaintsServlet extends HttpServlet { text = text.replace("/script",""); } + // 判断文本是否为空 if (!text.equals("")) { + // 设置投诉内容 complaint.setContent(text); + // 获取当前时间 Date d = new Date(); + // 设置时间格式 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + // 设置投诉日期 complaint.setCdate(sdf.format(d)); + // 创建投诉服务对象 ComplaintService service = new ComplaintServiceImpl(); + // 添加投诉 service.addComplaint(complaint); } @@ -46,3 +53,58 @@ public class AddComplaintsServlet extends HttpServlet { doPost(request,response); } } +//package web.servlet.complaints; +// +//import domain.Complaint; +//import service.ComplaintService; +//import service.NotifyService; +//import service.impl.ComplaintServiceImpl; +// +//import javax.servlet.ServletException; +//import javax.servlet.annotation.WebServlet; +//import javax.servlet.http.HttpServlet; +//import javax.servlet.http.HttpServletRequest; +//import javax.servlet.http.HttpServletResponse; +//import java.io.IOException; +//import java.text.SimpleDateFormat; +//import java.util.Date; +// +//@WebServlet("/addComplaintsServlet") +//public class AddComplaintsServlet extends HttpServlet { +// protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// request.setCharacterEncoding("utf-8"); +// +// //获取参数- +// Complaint complaint = new Complaint(); +// +// String text = (String) request.getParameter("complaint"); +// +// if (text.contains("script") && text.contains("/script")) { +// text = text.replace("script",""); +// text = text.replace("/script",""); +// } +// +// // 判断文本是否为空 +// if (!text.equals("")) { +// // 设置投诉内容 +// complaint.setContent(text); +// // 获取当前时间 +// Date d = new Date(); +// // 设置时间格式 +// SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); +// // 设置投诉日期 +// complaint.setCdate(sdf.format(d)); +// // 创建投诉服务对象 +// ComplaintService service = new ComplaintServiceImpl(); +// // 添加投诉 +// service.addComplaint(complaint); +// } +// +// response.sendRedirect("complaintServlet"); +//// request.getRequestDispatcher("/complaintListServlet").forward(request,response); +// } +// +// protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// doPost(request,response); +// } +//} \ No newline at end of file diff --git a/src/web/servlet/complaints/ComplaintListServlet.java b/src/web/servlet/complaints/ComplaintListServlet.java index d1bae26..cc8c4f4 100644 --- a/src/web/servlet/complaints/ComplaintListServlet.java +++ b/src/web/servlet/complaints/ComplaintListServlet.java @@ -16,15 +16,55 @@ import java.util.List; */ @WebServlet("/complaintListServlet") public class ComplaintListServlet extends HttpServlet { + // 处理 POST 请求 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // 设置请求编码为 utf-8 request.setCharacterEncoding("utf-8"); + // 创建投诉服务对象 ComplaintService service = new ComplaintServiceImpl(); + // 查询所有投诉信息 List complaints = service.findAll(); // 将查询到的投诉信息存入请求属性,以便在后续的 JSP 页面中使用 request.setAttribute("complaints",complaints); + // 转发请求到 JSP 页面 request.getRequestDispatcher("/WEB-INF/complaint/complaintsList.jsp").forward(request,response); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request,response); } } +//package web.servlet.complaints; +// +//import domain.Complaint; +//import service.ComplaintService; +//import service.impl.ComplaintServiceImpl; +// +//import javax.servlet.ServletException; +//import javax.servlet.annotation.WebServlet; +//import javax.servlet.http.HttpServlet; +//import javax.servlet.http.HttpServletRequest; +//import javax.servlet.http.HttpServletResponse; +//import java.io.IOException; +//import java.util.List; +///** +// * 投诉列表处理的Servlet +// */ +//@WebServlet("/complaintListServlet") +//public class ComplaintListServlet extends HttpServlet { +// // 处理 POST 请求 +// protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// // 设置请求编码为 utf-8 +// request.setCharacterEncoding("utf-8"); +// // 创建投诉服务对象 +// ComplaintService service = new ComplaintServiceImpl(); +// // 查询所有投诉信息 +// List complaints = service.findAll(); +// // 将查询到的投诉信息存入请求属性,以便在后续的 JSP 页面中使用 +// request.setAttribute("complaints",complaints); +// // 转发请求到 JSP 页面 +// request.getRequestDispatcher("/WEB-INF/complaint/complaintsList.jsp").forward(request,response); +// } +// protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// doPost(request,response); +// } +//} \ No newline at end of file diff --git a/src/web/servlet/complaints/ComplaintServlet.java b/src/web/servlet/complaints/ComplaintServlet.java index 1ab7053..0f9eda3 100644 --- a/src/web/servlet/complaints/ComplaintServlet.java +++ b/src/web/servlet/complaints/ComplaintServlet.java @@ -18,10 +18,15 @@ import java.util.List; public class ComplaintServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 设置请求编码为UTF-8,以支持中文字符的正确处理 + // 设置请求的字符编码为utf-8 request.setCharacterEncoding("utf-8"); + // 创建ComplaintService实例 ComplaintService service = new ComplaintServiceImpl(); + // 调用findAll方法获取所有投诉信息 List complaints = service.findAll(); + // 将投诉信息存入request对象中 request.setAttribute("complaints",complaints); + // 将请求转发到complaintsList.jsp页面 request.getRequestDispatcher("/WEB-INF/complaint/complaintsList.jsp").forward(request,response); } /** @@ -36,3 +41,46 @@ public class ComplaintServlet extends HttpServlet { doPost(request,response); } } +//package web.servlet.complaints; +// +//import domain.Complaint; +//import service.ComplaintService; +//import service.impl.ComplaintServiceImpl; +// +//import javax.servlet.ServletException; +//import javax.servlet.annotation.WebServlet; +//import javax.servlet.http.HttpServlet; +//import javax.servlet.http.HttpServletRequest; +//import javax.servlet.http.HttpServletResponse; +//import java.io.IOException; +//import java.util.List; +///** +// * 投诉处理的Servlet +// */ +//@WebServlet("/complaintServlet") +//public class ComplaintServlet extends HttpServlet { +// protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// // 设置请求编码为UTF-8,以支持中文字符的正确处理 +// // 设置请求的字符编码为utf-8 +// request.setCharacterEncoding("utf-8"); +// // 创建ComplaintService实例 +// ComplaintService service = new ComplaintServiceImpl(); +// // 调用findAll方法获取所有投诉信息 +// List complaints = service.findAll(); +// // 将投诉信息存入request对象中 +// request.setAttribute("complaints",complaints); +// // 将请求转发到complaintsList.jsp页面 +// request.getRequestDispatcher("/WEB-INF/complaint/complaintsList.jsp").forward(request,response); +// } +// /** +// * 处理GET请求,调用POST请求处理方法。 +// * +// * @param request HTTP请求对象,包含客户端发送的数据。 +// * @param response HTTP响应对象,用于生成返回给客户端的响应。 +// * @throws IOException 如果输入或输出异常发生。 +// */ +// +// protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// doPost(request,response); +// } +//} \ No newline at end of file diff --git a/src/web/servlet/file/DeleteFileServlet.java b/src/web/servlet/file/DeleteFileServlet.java index 623ea85..5245d18 100644 --- a/src/web/servlet/file/DeleteFileServlet.java +++ b/src/web/servlet/file/DeleteFileServlet.java @@ -21,10 +21,15 @@ public class DeleteFileServlet extends HttpServlet { * @throws ServletException 如果处理请求时发生错误。 * @throws IOException 如果输入或输出异常发生。 */ + // 处理POST请求 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // 设置请求编码为utf-8 request.setCharacterEncoding("utf-8"); + // 获取请求参数filename String fileName = request.getParameter("filename"); + // 获取上传文件的路径 File file = new File(this.getServletContext().getRealPath("upload")+File.separator+fileName); + // 如果文件存在,则删除 if (file.exists()) { file.delete(); } @@ -35,3 +40,45 @@ public class DeleteFileServlet extends HttpServlet { doPost(request,response); } } +//package web.servlet.file; +// +//import javax.servlet.ServletException; +//import javax.servlet.annotation.WebServlet; +//import javax.servlet.http.HttpServlet; +//import javax.servlet.http.HttpServletRequest; +//import javax.servlet.http.HttpServletResponse; +//import java.io.File; +//import java.io.IOException; +///** +// * 删除文件的Servlet +// */ +//@WebServlet("/deleteFileServlet") +//public class DeleteFileServlet extends HttpServlet { +// +// /** +// * 处理POST请求,执行文件删除操作。 +// * +// * @param request HTTP请求对象,包含客户端发送的数据。 +// * @param response HTTP响应对象,用于生成返回给客户端的响应。 +// * @throws ServletException 如果处理请求时发生错误。 +// * @throws IOException 如果输入或输出异常发生。 +// */ +// // 处理POST请求 +// protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// // 设置请求编码为utf-8 +// request.setCharacterEncoding("utf-8"); +// // 获取请求参数filename +// String fileName = request.getParameter("filename"); +// // 获取上传文件的路径 +// File file = new File(this.getServletContext().getRealPath("upload")+File.separator+fileName); +// // 如果文件存在,则删除 +// if (file.exists()) { +// file.delete(); +// } +// request.getRequestDispatcher("/fileListServlet").forward(request,response); +// } +// +// protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// doPost(request,response); +// } +//} \ No newline at end of file diff --git a/src/web/servlet/file/DownloadServlet.java b/src/web/servlet/file/DownloadServlet.java index 6019987..5e62baf 100644 --- a/src/web/servlet/file/DownloadServlet.java +++ b/src/web/servlet/file/DownloadServlet.java @@ -27,18 +27,27 @@ public class DownloadServlet extends HttpServlet { * @throws ServletException 如果处理请求时发生错误。 * @throws IOException 如果输入或输出异常发生。 */ + // 处理POST请求 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // 获取请求参数filename String filename = request.getParameter("filename"); + // 判断filename是否为../或/ if (filename.equalsIgnoreCase("../") || filename.equalsIgnoreCase("/")) { + // 如果是,则转发到error.jsp页面 request.getRequestDispatcher("error.jsp").forward(request, response); } + // 设置响应头content-Type为application/octet-stream response.addHeader("content-Type", "application/octet-stream"); + // 获取请求头User-Agent String agent = request.getHeader("User-Agent"); + // 判断User-Agent是否包含chrome if (agent.toLowerCase().indexOf("chrome") > 0) { + // 如果包含,则设置响应头content-Disposition为attachment;filename,并将filename进行UTF-8和ISO8859-1编码 response.addHeader("content-Disposition", "attachment;filename=" + new String(filename.getBytes("UTF-8"), "ISO8859-1")); } else { + // 如果不包含,则设置响应头content-Disposition为attachment;filename,并将filename进行UTF-8编码 response.addHeader("content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8")); } InputStream in = getServletContext().getResourceAsStream("/upload/" + filename); @@ -51,16 +60,24 @@ public class DownloadServlet extends HttpServlet { out.close(); in.close(); + // 获取当前会话 HttpSession session = request.getSession(); + // 从会话中获取学生对象 Student student= (Student)session.getAttribute("student"); + // 从会话中获取管理员对象 Admin admin= (Admin)session.getAttribute("admin"); + // 从会话中获取教师对象 Teacher teacher= (Teacher)session.getAttribute("teacher"); + // 如果会话中存在学生对象,且不存在管理员对象和教师对象,则跳转到学生查找文件列表页面 if (student != null && admin == null && teacher == null) { request.getRequestDispatcher("/WEB-INF/student/sFindFileList.jsp").forward(request, response); + // 如果会话中存在管理员对象,且不存在学生对象和教师对象,则跳转到管理员查找文件列表页面 } else if (admin != null && student == null && teacher == null) { request.getRequestDispatcher("/WEB-INF/admin/aFindFileList.jsp").forward(request, response); + // 如果会话中存在教师对象,且不存在学生对象和管理员对象,则跳转到教师查找文件列表页面 } else if (teacher != null && admin == null && student == null) { request.getRequestDispatcher("/WEB-INF/teacher/tFindFileList.jsp").forward(request, response); + // 如果会话中不存在学生对象、管理员对象和教师对象,则跳转到错误页面 } else { request.getRequestDispatcher("error.jsp").forward(request, response); } @@ -70,3 +87,92 @@ public class DownloadServlet extends HttpServlet { doPost(request, response); } } +//package web.servlet.file; +// +//import domain.Admin; +//import domain.Student; +//import domain.Teacher; +// +//import javax.servlet.ServletException; +//import javax.servlet.ServletOutputStream; +//import javax.servlet.annotation.WebServlet; +//import javax.servlet.http.HttpServlet; +//import javax.servlet.http.HttpServletRequest; +//import javax.servlet.http.HttpServletResponse; +//import javax.servlet.http.HttpSession; +//import java.io.IOException; +//import java.io.InputStream; +//import java.net.URLEncoder; +///** +// * 文件下载的Servlet +// */ +//@WebServlet("/downloadServlet") +//public class DownloadServlet extends HttpServlet { +// /** +// * 处理POST请求,执行文件下载操作。 +// * +// * @param request HTTP请求对象,包含客户端发送的数据。 +// * @param response HTTP响应对象,用于生成返回给客户端的响应。 +// * @throws ServletException 如果处理请求时发生错误。 +// * @throws IOException 如果输入或输出异常发生。 +// */ +// // 处理POST请求 +// protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// // 获取请求参数filename +// String filename = request.getParameter("filename"); +// // 判断filename是否为../或/ +// if (filename.equalsIgnoreCase("../") || filename.equalsIgnoreCase("/")) { +// // 如果是,则转发到error.jsp页面 +// request.getRequestDispatcher("error.jsp").forward(request, response); +// } +// // 设置响应头content-Type为application/octet-stream +// response.addHeader("content-Type", "application/octet-stream"); +// +// // 获取请求头User-Agent +// String agent = request.getHeader("User-Agent"); +// +// // 判断User-Agent是否包含chrome +// if (agent.toLowerCase().indexOf("chrome") > 0) { +// // 如果包含,则设置响应头content-Disposition为attachment;filename,并将filename进行UTF-8和ISO8859-1编码 +// response.addHeader("content-Disposition", "attachment;filename=" + new String(filename.getBytes("UTF-8"), "ISO8859-1")); +// } else { +// // 如果不包含,则设置响应头content-Disposition为attachment;filename,并将filename进行UTF-8编码 +// response.addHeader("content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8")); +// } +// InputStream in = getServletContext().getResourceAsStream("/upload/" + filename); +// ServletOutputStream out = response.getOutputStream(); +// byte[] bs = new byte[1024]; +// int len = -1; +// while ((len = in.read(bs)) != -1) { +// out.write(bs, 0, len); +// } +// out.close(); +// in.close(); +// +// // 获取当前会话 +// HttpSession session = request.getSession(); +// // 从会话中获取学生对象 +// Student student= (Student)session.getAttribute("student"); +// // 从会话中获取管理员对象 +// Admin admin= (Admin)session.getAttribute("admin"); +// // 从会话中获取教师对象 +// Teacher teacher= (Teacher)session.getAttribute("teacher"); +// // 如果会话中存在学生对象,且不存在管理员对象和教师对象,则跳转到学生查找文件列表页面 +// if (student != null && admin == null && teacher == null) { +// request.getRequestDispatcher("/WEB-INF/student/sFindFileList.jsp").forward(request, response); +// // 如果会话中存在管理员对象,且不存在学生对象和教师对象,则跳转到管理员查找文件列表页面 +// } else if (admin != null && student == null && teacher == null) { +// request.getRequestDispatcher("/WEB-INF/admin/aFindFileList.jsp").forward(request, response); +// // 如果会话中存在教师对象,且不存在学生对象和管理员对象,则跳转到教师查找文件列表页面 +// } else if (teacher != null && admin == null && student == null) { +// request.getRequestDispatcher("/WEB-INF/teacher/tFindFileList.jsp").forward(request, response); +// // 如果会话中不存在学生对象、管理员对象和教师对象,则跳转到错误页面 +// } else { +// request.getRequestDispatcher("error.jsp").forward(request, response); +// } +// } +// +// protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// doPost(request, response); +// } +//} \ No newline at end of file diff --git a/src/web/servlet/file/FileListServlet.java b/src/web/servlet/file/FileListServlet.java index 1c378d3..d2f6ead 100644 --- a/src/web/servlet/file/FileListServlet.java +++ b/src/web/servlet/file/FileListServlet.java @@ -20,23 +20,38 @@ import java.util.List; @WebServlet("/fileListServlet") public class FileListServlet extends HttpServlet { + // 处理POST请求 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // 设置请求编码为utf-8 request.setCharacterEncoding("utf-8"); + // 获取上传文件的目录 File dir = new File(this.getServletContext().getRealPath("upload")); + // 如果目录不存在且不是目录 if (!dir.exists() && !dir.isDirectory()) { + // 输出提示信息 System.out.println(this.getServletContext().getRealPath("upload") + "目录不存在,需要创建"); // 创建目录- dir.mkdir(); } + // 获取目录下的所有文件 File[] arrs = dir.listFiles(); + // 创建一个List来存储文件信息 List fileLists = new ArrayList(); + // 遍历所有文件 for(File f:arrs){ + // 获取文件大小 long l = f.length(); + // 将文件大小转换为可读的格式 String fileSize = getPrintSize(l); + // 创建一个FileClass对象 FileClass file = new FileClass(); + // 设置文件名 file.setFileName(f.getName()); + // 设置文件路径 file.setFilePath(f.getAbsolutePath()); + // 设置文件大小 file.setFileSize(fileSize); + // 将文件信息添加到List中 fileLists.add(file); } request.setAttribute("fileLists",fileLists); @@ -44,14 +59,20 @@ public class FileListServlet extends HttpServlet { HttpSession session = request.getSession(); Student student= (Student)session.getAttribute("student"); + // 从session中获取admin对象 Admin admin= (Admin)session.getAttribute("admin"); + // 从session中获取teacher对象 Teacher teacher= (Teacher)session.getAttribute("teacher"); + // 如果student对象不为空,admin对象为空,teacher对象为空,则跳转到student的文件列表页面 if (student != null && admin == null && teacher == null) { request.getRequestDispatcher("/WEB-INF/student/sFindFileList.jsp").forward(request, response); + // 如果admin对象不为空,student对象为空,teacher对象为空,则跳转到admin的文件列表页面 } else if (admin != null && student == null && teacher == null) { request.getRequestDispatcher("/WEB-INF/admin/aFindFileList.jsp").forward(request, response); + // 如果teacher对象不为空,admin对象为空,student对象为空,则跳转到teacher的文件列表页面 } else if (teacher != null && admin == null && student == null) { request.getRequestDispatcher("/WEB-INF/teacher/tFindFileList.jsp").forward(request, response); + // 否则跳转到错误页面 } else { request.getRequestDispatcher("error.jsp").forward(request, response); } @@ -86,3 +107,112 @@ public class FileListServlet extends HttpServlet { } } } +//package web.servlet.file; +// +//import domain.Admin; +//import domain.FileClass; +//import domain.Student; +//import domain.Teacher; +// +//import javax.servlet.ServletException; +//import javax.servlet.annotation.WebServlet; +//import javax.servlet.http.HttpServlet; +//import javax.servlet.http.HttpServletRequest; +//import javax.servlet.http.HttpServletResponse; +//import javax.servlet.http.HttpSession; +//import java.io.File; +//import java.io.IOException; +//import java.math.BigDecimal; +//import java.math.RoundingMode; +//import java.util.ArrayList; +//import java.util.List; +// +//@WebServlet("/fileListServlet") +//public class FileListServlet extends HttpServlet { +// // 处理POST请求 +// protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// // 设置请求编码为utf-8 +// request.setCharacterEncoding("utf-8"); +// // 获取上传文件的目录 +// File dir = new File(this.getServletContext().getRealPath("upload")); +// // 如果目录不存在且不是目录 +// if (!dir.exists() && !dir.isDirectory()) { +// // 输出提示信息 +// System.out.println(this.getServletContext().getRealPath("upload") + "目录不存在,需要创建"); +// // 创建目录- +// dir.mkdir(); +// } +// // 获取目录下的所有文件 +// File[] arrs = dir.listFiles(); +// // 创建一个List来存储文件信息 +// List fileLists = new ArrayList(); +// // 遍历所有文件 +// for(File f:arrs){ +// // 获取文件大小 +// long l = f.length(); +// // 将文件大小转换为可读的格式 +// String fileSize = getPrintSize(l); +// // 创建一个FileClass对象 +// FileClass file = new FileClass(); +// // 设置文件名 +// file.setFileName(f.getName()); +// // 设置文件路径 +// file.setFilePath(f.getAbsolutePath()); +// // 设置文件大小 +// file.setFileSize(fileSize); +// // 将文件信息添加到List中 +// fileLists.add(file); +// } +// request.setAttribute("fileLists",fileLists); +// +// HttpSession session = request.getSession(); +// Student student= (Student)session.getAttribute("student"); +// +// // 从session中获取admin对象 +// Admin admin= (Admin)session.getAttribute("admin"); +// // 从session中获取teacher对象 +// Teacher teacher= (Teacher)session.getAttribute("teacher"); +// // 如果student对象不为空,admin对象为空,teacher对象为空,则跳转到student的文件列表页面 +// if (student != null && admin == null && teacher == null) { +// request.getRequestDispatcher("/WEB-INF/student/sFindFileList.jsp").forward(request, response); +// // 如果admin对象不为空,student对象为空,teacher对象为空,则跳转到admin的文件列表页面 +// } else if (admin != null && student == null && teacher == null) { +// request.getRequestDispatcher("/WEB-INF/admin/aFindFileList.jsp").forward(request, response); +// // 如果teacher对象不为空,admin对象为空,student对象为空,则跳转到teacher的文件列表页面 +// } else if (teacher != null && admin == null && student == null) { +// request.getRequestDispatcher("/WEB-INF/teacher/tFindFileList.jsp").forward(request, response); +// // 否则跳转到错误页面 +// } else { +// request.getRequestDispatcher("error.jsp").forward(request, response); +// } +// } +// +// protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// doPost(request,response); +// } +// +// public static String getPrintSize(long size) { +// // 如果字节数少于1024,则直接以B为单位,否则先除于1024,后3位因太少无意义- +// double value = (double) size; +// if (value < 1024) { +// return String.valueOf(value) + "B"; +// } else { +// value = new BigDecimal(value / 1024).setScale(2, BigDecimal.ROUND_DOWN).doubleValue(); +// } +// // 如果原字节数除于1024之后,少于1024,则可以直接以KB作为单位- +// // 因为还没有到达要使用另一个单位的时候 +// // 接下去以此类推 +// if (value < 1024) { +// return String.valueOf(value) + "KB"; +// } else { +// value = new BigDecimal(value / 1024).setScale(2, BigDecimal.ROUND_DOWN).doubleValue(); +// } +// if (value < 1024) { +// return String.valueOf(value) + "MB"; +// } else { +// // 否则如果要以GB为单位的,先除于1024再作同样的处理 +// value = new BigDecimal(value / 1024).setScale(2, BigDecimal.ROUND_DOWN).doubleValue(); +// return String.valueOf(value) + "GB"; +// } +// } +//} \ No newline at end of file diff --git a/src/web/servlet/file/FileServlet.java b/src/web/servlet/file/FileServlet.java index ecce88f..80aac30 100644 --- a/src/web/servlet/file/FileServlet.java +++ b/src/web/servlet/file/FileServlet.java @@ -35,3 +35,40 @@ public class FileServlet extends HttpServlet { doPost(request,response); } } +//package web.servlet.file; +// +//import javax.servlet.ServletException; +//import javax.servlet.annotation.WebServlet; +//import javax.servlet.http.HttpServlet; +//import javax.servlet.http.HttpServletRequest; +//import javax.servlet.http.HttpServletResponse; +//import java.io.IOException; +///** +// * 文件处理的Servlet,用于转发到文件上传页面 +// */ +//@WebServlet("/fileServlet") +//public class FileServlet extends HttpServlet { +// /** +// * 处理POST请求,转发到文件上传页面。 +// * +// * @param request HTTP请求对象,包含客户端发送的数据。 +// * @param response HTTP响应对象,用于生成返回给客户端的响应。 +// * @throws ServletException 如果处理请求时发生错误。 +// * @throws IOException 如果输入或输出异常发生。 +// */ +// protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// request.getRequestDispatcher("/WEB-INF/admin/uploadFile.jsp").forward(request,response); +// } +// +// /** +// * 处理GET请求,直接调用POST请求处理方法。 +// * +// * @param request HTTP请求对象,包含客户端发送的数据。 +// * @param response HTTP响应对象,用于生成返回给客户端的响应。 +// * @throws ServletException 如果处理请求时发生错误。 +// * @throws IOException 如果输入或输出异常发生。 +// */ +// protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// doPost(request,response); +// } +//} \ No newline at end of file diff --git a/src/web/servlet/file/ShowPhotoServlet.java b/src/web/servlet/file/ShowPhotoServlet.java index 0c0fd31..70e1b0c 100644 --- a/src/web/servlet/file/ShowPhotoServlet.java +++ b/src/web/servlet/file/ShowPhotoServlet.java @@ -34,18 +34,23 @@ public class ShowPhotoServlet extends HttpServlet { Student student = (Student) session.getAttribute("student"); Teacher teacher = (Teacher) session.getAttribute("teacher"); Photo p; + // 判断当前用户是学生还是教师 if (student != null) { + // 如果是学生,则根据学生id查询照片 PhotoService service = new PhotoServiceImpl(); p = service.findPhotoByPhotoId(student.getS_id()); }else{ + // 如果是教师,则根据教师id查询照片 PhotoService service = new PhotoServiceImpl(); p = service.findPhotoByPhotoId(teacher.getT_id()); } String imagePath = ""; + // 如果没有查询到照片,则使用默认照片 if (p == null) { imagePath = this.getServletContext().getRealPath("/photos/") + "0.jpg"; System.out.println(imagePath); } else { + // 如果查询到照片,则使用查询到的照片 String photoName = p.getPhotoName(); imagePath = this.getServletContext().getRealPath("/photos/") + photoName; System.out.println(imagePath); @@ -72,14 +77,20 @@ public class ShowPhotoServlet extends HttpServlet { imageIn.close();// 关闭文件流 } - if (imagePath.toLowerCase().endsWith(".gif"))// 不使用编码处理文件流的情况: + if (imagePath.toLowerCase().endsWith(".gif")) + // 不使用编码处理文件流的情况: { response.setContentType(GIF); - ServletContext context = getServletContext();// 得到背景对象 - InputStream imageIn = context.getResourceAsStream(imagePath);// 文件流 - BufferedInputStream bis = new BufferedInputStream(imageIn);// 输入缓冲流 - BufferedOutputStream bos = new BufferedOutputStream(output);// 输出缓冲流 - byte data[] = new byte[4096];// 缓冲字节数 + ServletContext context = getServletContext(); + // 得到背景对象 + InputStream imageIn = context.getResourceAsStream(imagePath); + // 文件流 + BufferedInputStream bis = new BufferedInputStream(imageIn); + // 输入缓冲流 + BufferedOutputStream bos = new BufferedOutputStream(output); + // 输出缓冲流 + byte data[] = new byte[4096]; + // 缓冲字节数 int size = 0; size = bis.read(data); while (size != -1) { @@ -97,3 +108,113 @@ public class ShowPhotoServlet extends HttpServlet { doPost(request,response); } } +//package web.servlet.file; +// +//import com.sun.image.codec.jpeg.JPEGCodec; +//import com.sun.image.codec.jpeg.JPEGImageDecoder; +//import com.sun.image.codec.jpeg.JPEGImageEncoder; +//import domain.Photo; +//import domain.Student; +//import domain.Teacher; +//import service.PhotoService; +//import service.impl.PhotoServiceImpl; +// +//import javax.servlet.ServletContext; +//import javax.servlet.ServletException; +//import javax.servlet.annotation.WebServlet; +//import javax.servlet.http.HttpServlet; +//import javax.servlet.http.HttpServletRequest; +//import javax.servlet.http.HttpServletResponse; +//import javax.servlet.http.HttpSession; +//import java.awt.image.BufferedImage; +//import java.io.*; +//import java.net.ServerSocket; +// +//@WebServlet("/showPhotoServlet") +//public class ShowPhotoServlet extends HttpServlet { +// private static final String GIF = "image/gif;charset=GB2312";// 设定输出的类型 +// +// private static final String JPG = "image/jpeg;charset=GB2312"; +// +// protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// String spec = request.getParameter("spec");// 输出图片的类型的标志 +// +// request.setCharacterEncoding("utf-8"); +// HttpSession session = request.getSession(); +// Student student = (Student) session.getAttribute("student"); +// Teacher teacher = (Teacher) session.getAttribute("teacher"); +// Photo p; +// // 判断当前用户是学生还是教师 +// if (student != null) { +// // 如果是学生,则根据学生id查询照片 +// PhotoService service = new PhotoServiceImpl(); +// p = service.findPhotoByPhotoId(student.getS_id()); +// }else{ +// // 如果是教师,则根据教师id查询照片 +// PhotoService service = new PhotoServiceImpl(); +// p = service.findPhotoByPhotoId(teacher.getT_id()); +// } +// String imagePath = ""; +// // 如果没有查询到照片,则使用默认照片 +// if (p == null) { +// imagePath = this.getServletContext().getRealPath("/photos/") + "0.jpg"; +// System.out.println(imagePath); +// } else { +// // 如果查询到照片,则使用查询到的照片 +// String photoName = p.getPhotoName(); +// imagePath = this.getServletContext().getRealPath("/photos/") + photoName; +// System.out.println(imagePath); +// } +// +// +// response.reset(); +// +// OutputStream output = response.getOutputStream();// 得到输出流 +// if (imagePath.toLowerCase().endsWith(".jpg"))// 使用编码处理文件流的情况: +// { +// response.setContentType(JPG);// 设定输出的类型 +// // 得到图片的真实路径- +// +// // 得到图片的文件流- +// InputStream imageIn = new FileInputStream(new File(imagePath)); +// // 得到输入的编码器,将文件流进行jpg格式编码- +// JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(imageIn); +// // 得到编码后的图片对象- +// BufferedImage image = decoder.decodeAsBufferedImage(); +// // 得到输出的编码器 +// JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(output); +// encoder.encode(image);// 对图片进行输出编码 +// imageIn.close();// 关闭文件流 +// } +// +// if (imagePath.toLowerCase().endsWith(".gif")) +// // 不使用编码处理文件流的情况: +// { +// response.setContentType(GIF); +// ServletContext context = getServletContext(); +// // 得到背景对象 +// InputStream imageIn = context.getResourceAsStream(imagePath); +// // 文件流 +// BufferedInputStream bis = new BufferedInputStream(imageIn); +// // 输入缓冲流 +// BufferedOutputStream bos = new BufferedOutputStream(output); +// // 输出缓冲流 +// byte data[] = new byte[4096]; +// // 缓冲字节数 +// int size = 0; +// size = bis.read(data); +// while (size != -1) { +// bos.write(data, 0, size); +// size = bis.read(data); +// } +// bis.close(); +// bos.flush();// 清空输出缓冲流 +// bos.close(); +// } +// output.close(); +// } +// +// protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// doPost(request,response); +// } +//} \ No newline at end of file diff --git a/src/web/servlet/file/UploadImageServlet.java b/src/web/servlet/file/UploadImageServlet.java index c105e8c..83ae140 100644 --- a/src/web/servlet/file/UploadImageServlet.java +++ b/src/web/servlet/file/UploadImageServlet.java @@ -26,14 +26,22 @@ import java.util.List; @WebServlet("/uploadImageServlet") public class UploadImageServlet extends HttpServlet { + // 处理POST请求 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // 获取当前会话 HttpSession session = request.getSession(); + // 获取当前会话中的学生对象 Student student = (Student) session.getAttribute("student"); + // 获取当前会话中的教师对象 Teacher teacher = (Teacher) session.getAttribute("teacher"); + // 获取当前会话中的管理员对象 Admin admin = (Admin) session.getAttribute("admin"); + // 定义一个字符串变量,用于存储用户ID String id = ""; + // 如果当前会话中有学生对象 if (student != null) { + // 将学生ID赋值给id变量 id = student.getS_id(); } @@ -79,6 +87,7 @@ public class UploadImageServlet extends HttpServlet { filename = filename.substring(filename.lastIndexOf("\\") + 1); // System.out.print(filename); + // 判断文件名后缀是否为JPG、JPEG、gif、GIF、jpg、jpeg if (filename.substring(filename.lastIndexOf(".") + 1).equals("JPG") || filename.substring(filename.lastIndexOf(".") + 1).equals("JPEG") || filename.substring(filename.lastIndexOf(".") + 1).equals("gif") @@ -101,6 +110,7 @@ public class UploadImageServlet extends HttpServlet { } else { //必须是图片才能上传否则失败 request.setAttribute("update_msg", "上传失败,只能上传类型为jpg或GIF的图像文件!"+String.format("%tT",new Date())); // request.getRequestDispatcher("/WEB-INF/index.jsp").forward(request, response); + // 转发到studentAddPhoto.jsp页面 request.getRequestDispatcher("/WEB-INF/student/studentAddPhoto.jsp").forward(request, response); return; } @@ -109,9 +119,13 @@ public class UploadImageServlet extends HttpServlet { e.printStackTrace(); } + // 创建Photo对象 Photo photo = new Photo(); + // 设置photoId photo.setPhotoId(id); + // 设置photoName photo.setPhotoName(newFileName); + // 创建PhotoService对象 PhotoService service = new PhotoServiceImpl(); @@ -130,3 +144,149 @@ public class UploadImageServlet extends HttpServlet { request.getRequestDispatcher("/WEB-INF/student/studentAddPhoto.jsp").forward(request, response); } } +//package web.servlet.file; +// +//import domain.Admin; +//import domain.Photo; +//import domain.Student; +//import domain.Teacher; +//import org.apache.commons.fileupload.FileItem; +//import org.apache.commons.fileupload.FileUploadException; +//import org.apache.commons.fileupload.disk.DiskFileItemFactory; +//import org.apache.commons.fileupload.servlet.ServletFileUpload; +//import service.PhotoService; +//import service.impl.PhotoServiceImpl; +// +//import javax.servlet.ServletException; +//import javax.servlet.annotation.WebServlet; +//import javax.servlet.http.HttpServlet; +//import javax.servlet.http.HttpServletRequest; +//import javax.servlet.http.HttpServletResponse; +//import javax.servlet.http.HttpSession; +//import java.io.File; +//import java.io.FileOutputStream; +//import java.io.IOException; +//import java.io.InputStream; +//import java.util.Date; +//import java.util.List; +// +//@WebServlet("/uploadImageServlet") +//public class UploadImageServlet extends HttpServlet { +// // 处理POST请求 +// protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// +// // 获取当前会话 +// HttpSession session = request.getSession(); +// // 获取当前会话中的学生对象 +// Student student = (Student) session.getAttribute("student"); +// // 获取当前会话中的教师对象 +// Teacher teacher = (Teacher) session.getAttribute("teacher"); +// // 获取当前会话中的管理员对象 +// Admin admin = (Admin) session.getAttribute("admin"); +// // 定义一个字符串变量,用于存储用户ID +// String id = ""; +// // 如果当前会话中有学生对象 +// if (student != null) { +// // 将学生ID赋值给id变量 +// id = student.getS_id(); +// } +// +// request.setAttribute("message", ""); +// request.setAttribute("path", ""); +// String filename = null; +// String newFileName = null; +// // 设置上传图片的保存路径- +// String savePath = this.getServletContext().getRealPath("/photos"); +// File file = new File(savePath); +// // 判断上传文件的保存目录是否存在- +// if (!file.exists() && !file.isDirectory()) { +// System.out.println(savePath + "目录不存在,需要创建"); +// // 创建目录 +// file.mkdir(); +// } +// DiskFileItemFactory factory = new DiskFileItemFactory(); +// // 2、创建一个文件上传解析器- +// ServletFileUpload upload = new ServletFileUpload(factory); +// upload.setHeaderEncoding("UTF-8"); +// // 3、判断提交上来的数据是否是上传表单的数据- +// if (!ServletFileUpload.isMultipartContent(request)) { +// // 按照传统方式获取数据- +// return; +// } +// try { +// List list = upload.parseRequest(request); +// System.out.println(list.toString());// 文件的路径 以及保存的路径- +// for (FileItem item : list) { +// filename = item.getName();// 获得一个项的文件名称- +// try { +// newFileName = id + filename.substring(filename.lastIndexOf(".")); +// filename = id + filename.substring(filename.lastIndexOf(".")); +// } catch (Exception e) { +// e.printStackTrace(); +// } +// if (filename == null || filename.trim().equals("")) {// 如果為空則跳過 +// continue; +// } +// // 報錯 需要過濾文件名稱 java.io.FileNotFoundException: +// // G:\测试02\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\FaceUp\WEB-INF\images\C:\Users\Ray\Pictures\2.jpeg +// // (文件名、目录名或卷标语法不正确。) +// +// filename = filename.substring(filename.lastIndexOf("\\") + 1); +//// System.out.print(filename); +// // 判断文件名后缀是否为JPG、JPEG、gif、GIF、jpg、jpeg +// if (filename.substring(filename.lastIndexOf(".") + 1).equals("JPG") +// || filename.substring(filename.lastIndexOf(".") + 1).equals("JPEG") +// || filename.substring(filename.lastIndexOf(".") + 1).equals("gif") +// || filename.substring(filename.lastIndexOf(".") + 1).equals("GIF") +// || filename.substring(filename.lastIndexOf(".") + 1).equals("jpg") +// || filename.substring(filename.lastIndexOf(".") + 1).equals("jpeg")) { +// InputStream in = item.getInputStream();// 獲得上傳的輸入流 +// FileOutputStream out = new FileOutputStream(savePath + "\\" + filename);// 指定web-inf目錄下的images文件 +// request.setAttribute("path", "photos"+"\\" + filename); +// +// int len = 0; +// byte buffer[] = new byte[1024]; +// while ((len = in.read(buffer)) > 0)// 每次讀取 +// { +// out.write(buffer, 0, len); +// } +// in.close(); +// out.close(); +// item.delete(); +// } else { //必须是图片才能上传否则失败 +// request.setAttribute("update_msg", "上传失败,只能上传类型为jpg或GIF的图像文件!"+String.format("%tT",new Date())); +//// request.getRequestDispatcher("/WEB-INF/index.jsp").forward(request, response); +// // 转发到studentAddPhoto.jsp页面 +// request.getRequestDispatcher("/WEB-INF/student/studentAddPhoto.jsp").forward(request, response); +// return; +// } +// } +// } catch (FileUploadException e) { +// e.printStackTrace(); +// } +// +// // 创建Photo对象 +// Photo photo = new Photo(); +// // 设置photoId +// photo.setPhotoId(id); +// // 设置photoName +// photo.setPhotoName(newFileName); +// // 创建PhotoService对象 +// PhotoService service = new PhotoServiceImpl(); +// +// +// Photo photo1= service.findPhotoByPhotoId(id); +// if (photo1==null) { +// service.addPhoto(photo); +// }else { +// service.updatePhoto(photo); +// } +// request.setAttribute("update_msg", "上传成功!"+String.format("%tT",new Date())); +//// request.getRequestDispatcher("/WEB-INF/index.jsp").forward(request, response); +// request.getRequestDispatcher("/WEB-INF/student/studentAddPhoto.jsp").forward(request, response); +// } +// +// protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// request.getRequestDispatcher("/WEB-INF/student/studentAddPhoto.jsp").forward(request, response); +// } +//} \ No newline at end of file diff --git a/src/web/servlet/file/UploadServlet.java b/src/web/servlet/file/UploadServlet.java index cabb805..8912952 100644 --- a/src/web/servlet/file/UploadServlet.java +++ b/src/web/servlet/file/UploadServlet.java @@ -29,16 +29,25 @@ public class UploadServlet extends HttpServlet { * @throws ServletException 如果处理请求时发生错误。 * @throws IOException 如果输入或输出异常发生。 */ + // 处理POST请求 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // 设置请求编码为utf-8 request.setCharacterEncoding("utf-8"); + // 设置响应编码为utf-8 response.setCharacterEncoding("utf-8"); + // 设置响应内容类型为text/html,编码为utf-8 response.setContentType("text/html; charset=utf-8"); + // 判断请求是否为文件上传 boolean isMultipart=ServletFileUpload.isMultipartContent(request); + // 如果是文件上传 if (isMultipart) { + // 创建一个文件项工厂 FileItemFactory factory = new DiskFileItemFactory(); + // 创建一个文件上传对象 ServletFileUpload upload = new ServletFileUpload(factory); + // 设置文件上传对象的编码为utf-8 upload.setHeaderEncoding("utf-8"); // upload.setProgressListener(new ProgressListener(){ @@ -54,11 +63,17 @@ public class UploadServlet extends HttpServlet { // }); try { + // 解析请求,获取上传的文件项 List items = upload.parseRequest(request); + // 获取文件项的迭代器 Iterator it = items.iterator(); + // 遍历文件项 while (it.hasNext()) { + // 获取下一个文件项 FileItem item = it.next(); + // 获取文件项的名称 String itemname = item.getFieldName(); + // 初始化学号和姓名 int sno = -1; String sname = null; @@ -74,21 +89,31 @@ public class UploadServlet extends HttpServlet { } else { String filename = item.getName(); //String path=request.getSession().getServletContext().getRealPath("upload"); + // 获取上传文件的路径 String path = this.getServletContext().getRealPath("upload"); + // 判断上传文件的扩展名是否为jsp、htm或html if (filename.substring(filename.lastIndexOf(".") + 1).equals("jsp") || filename.substring(filename.lastIndexOf(".") + 1).equals("htm") || filename.substring(filename.lastIndexOf(".") + 1).equals("html")) { + // 如果是,则转发到错误页面 request.getRequestDispatcher("error.jsp").forward(request, response); } else { + // 如果不是,则打印上传文件的路径 System.out.println(path); + // 创建文件对象 File file = new File(path); + // 如果文件不存在且不是目录,则创建目录 if (!file.exists() && !file.isDirectory()) { file.mkdir(); } + // 将上传的文件写入到指定路径 item.write(new File(path, filename)); + // 设置上传成功的属性 request.setAttribute("news", filename + " 上传成功!"); + // 转发到上传成功页面 request.getRequestDispatcher("/WEB-INF/admin/uploadFile.jsp").forward(request, response); // response.sendRedirect("fileUploadIndexServlet"); + // 打印上传成功的消息 System.out.println(filename + "上传成功!!!"); } @@ -107,11 +132,17 @@ public class UploadServlet extends HttpServlet { /** * 表示文件上传或下载过程中的信息类 */ + // 定义一个ProcessInfo类,用于存储进程信息 class ProcessInfo{ + // 总大小 public long totalSize = 1; + // 已读大小 public long readSize = 0; + // 显示信息 public String show = ""; + // 项目数量 public int itemNum = 0; + // 速率 public int rate = 0; } @@ -119,3 +150,155 @@ public class UploadServlet extends HttpServlet { doPost(request, response); } } +//package web.servlet.file; +// +//import javax.servlet.ServletException; +//import javax.servlet.annotation.WebServlet; +//import javax.servlet.http.HttpServlet; +//import javax.servlet.http.HttpServletRequest; +//import javax.servlet.http.HttpServletResponse; +//import java.io.IOException; +//import java.io.File; +//import java.util.Iterator; +//import java.util.List; +//import org.apache.commons.fileupload.FileItem; +//import org.apache.commons.fileupload.FileItemFactory; +//import org.apache.commons.fileupload.FileUploadException; +//import org.apache.commons.fileupload.ProgressListener; +//import org.apache.commons.fileupload.disk.DiskFileItemFactory; +//import org.apache.commons.fileupload.servlet.ServletFileUpload; +///** +// * 文件上传的Servlet +// */ +//@WebServlet("/uploadServlet") +//public class UploadServlet extends HttpServlet { +// +// /** +// * 处理POST请求,用于执行文件上传操作。 +// * +// * @param request HTTP请求对象,包含客户端发送的数据。 +// * @param response HTTP响应对象,用于生成返回给客户端的响应。 +// * @throws ServletException 如果处理请求时发生错误。 +// * @throws IOException 如果输入或输出异常发生。 +// */ +// // 处理POST请求 +// protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// // 设置请求编码为utf-8 +// request.setCharacterEncoding("utf-8"); +// // 设置响应编码为utf-8 +// response.setCharacterEncoding("utf-8"); +// // 设置响应内容类型为text/html,编码为utf-8 +// response.setContentType("text/html; charset=utf-8"); +// +// +// // 判断请求是否为文件上传 +// boolean isMultipart=ServletFileUpload.isMultipartContent(request); +// // 如果是文件上传 +// if (isMultipart) { +// // 创建一个文件项工厂 +// FileItemFactory factory = new DiskFileItemFactory(); +// // 创建一个文件上传对象 +// ServletFileUpload upload = new ServletFileUpload(factory); +// // 设置文件上传对象的编码为utf-8 +// upload.setHeaderEncoding("utf-8"); +// +//// upload.setProgressListener(new ProgressListener(){ +//// public void update(long pBytesRead, long pContentLength, int pItems) { +//// ProcessInfo pri = new ProcessInfo(); +//// pri.itemNum = pItems; +//// pri.readSize = pBytesRead; +//// pri.totalSize = pContentLength; +//// pri.show = pBytesRead+"/"+pContentLength+" byte"; +//// pri.rate = Math.round(new Float(pBytesRead) / new Float(pContentLength)*100); +//// hs.setAttribute("proInfo", pri); +//// } +//// }); +// +// try { +// // 解析请求,获取上传的文件项 +// List items = upload.parseRequest(request); +// // 获取文件项的迭代器 +// Iterator it = items.iterator(); +// // 遍历文件项 +// while (it.hasNext()) { +// // 获取下一个文件项 +// FileItem item = it.next(); +// // 获取文件项的名称 +// String itemname = item.getFieldName(); +// // 初始化学号和姓名 +// int sno = -1; +// String sname = null; +// +// if (item.isFormField()) { +// if (itemname.equals("sno")) { +// sno = Integer.parseInt(item.getString("utf-8")); +// } else if (itemname.equals("sname")) { +// sname = item.getString("utf-8"); +// sname = item.getName(); +// } else { +// System.out.println("其他字段"); +// } +// } else { +// String filename = item.getName(); +// //String path=request.getSession().getServletContext().getRealPath("upload"); +// // 获取上传文件的路径 +// String path = this.getServletContext().getRealPath("upload"); +// // 判断上传文件的扩展名是否为jsp、htm或html +// if (filename.substring(filename.lastIndexOf(".") + 1).equals("jsp") +// || filename.substring(filename.lastIndexOf(".") + 1).equals("htm") +// || filename.substring(filename.lastIndexOf(".") + 1).equals("html")) { +// // 如果是,则转发到错误页面 +// request.getRequestDispatcher("error.jsp").forward(request, response); +// } else { +// // 如果不是,则打印上传文件的路径 +// System.out.println(path); +// // 创建文件对象 +// File file = new File(path); +// // 如果文件不存在且不是目录,则创建目录 +// if (!file.exists() && !file.isDirectory()) { +// file.mkdir(); +// } +// // 将上传的文件写入到指定路径 +// item.write(new File(path, filename)); +// // 设置上传成功的属性 +// request.setAttribute("news", filename + " 上传成功!"); +// // 转发到上传成功页面 +// request.getRequestDispatcher("/WEB-INF/admin/uploadFile.jsp").forward(request, response); +//// response.sendRedirect("fileUploadIndexServlet"); +// // 打印上传成功的消息 +// System.out.println(filename + "上传成功!!!"); +// +// } +// return; +// } +// +// } +// } catch (FileUploadException e) { +// e.printStackTrace(); +// } catch (Exception e) { +// e.printStackTrace(); +// } +// } +// } +// +// /** +// * 表示文件上传或下载过程中的信息类 +// */ +// // 定义一个ProcessInfo类,用于存储进程信息 +// class ProcessInfo{ +// // 总大小 +// public long totalSize = 1; +// // 已读大小 +// public long readSize = 0; +// // 显示信息 +// public String show = ""; +// // 项目数量 +// public int itemNum = 0; +// // 速率 +// public int rate = 0; +// } +// +// protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// doPost(request, response); +// } +//} \ No newline at end of file diff --git a/src/web/servlet/login/LogoutServlet.java b/src/web/servlet/login/LogoutServlet.java index 6dd439f..aa9df49 100644 --- a/src/web/servlet/login/LogoutServlet.java +++ b/src/web/servlet/login/LogoutServlet.java @@ -20,13 +20,21 @@ public class LogoutServlet extends HttpServlet { * @throws ServletException 如果处理请求时发生错误。 * @throws IOException 如果输入或输出异常发生。 */ + // 处理POST请求 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // 设置请求编码为UTF-8 request.setCharacterEncoding("UTF-8"); + // 获取当前会话 HttpSession session = request.getSession(); + // 移除会话中的student属性 session.removeAttribute("student"); + // 移除会话中的teacher属性 session.removeAttribute("teacher"); + // 移除会话中的admin属性 session.removeAttribute("admin"); + // 使会话失效 session.invalidate(); + // 重定向到index.jsp页面 response.sendRedirect("index.jsp"); } diff --git a/src/web/servlet/login/RegisterServlet.java b/src/web/servlet/login/RegisterServlet.java index cd6c844..9c93829 100644 --- a/src/web/servlet/login/RegisterServlet.java +++ b/src/web/servlet/login/RegisterServlet.java @@ -24,32 +24,56 @@ public class RegisterServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取当前用户的会话 HttpSession session = request.getSession(); + // 获取用户输入的学生ID String studentid = request.getParameter("studentid"); + // 获取用户输入的密码 String password = request.getParameter("password"); + // 获取用户输入的确认密码 String repassword = request.getParameter("repassword"); + // 获取用户输入的验证码 String vcode = request.getParameter("verifycode"); + //从session中获取服务器生成的验证码 String checkcode_server = (String) session.getAttribute("CHECKCODE_SERVER"); - session.removeAttribute("CHECKCODE_SERVER");//确保验证一次性 + session.removeAttribute("CHECKCODE_SERVER"); + //确保验证一次性 + // 判断验证码是否正确 if (!vcode.equalsIgnoreCase(checkcode_server)){ + // 如果验证码错误,将错误信息、用户输入的信息存入request中 request.setAttribute("msg","验证码错误"); + // 将用户输入的学号存入request中 request.setAttribute("studentid",studentid); + // 将用户输入的密码存入request中 request.setAttribute("password",password); + // 将用户输入的确认密码存入request中 request.setAttribute("repassword",repassword); + // 将请求转发到register.jsp页面 request.getRequestDispatcher("register.jsp").forward(request,response); + // 返回 return; }else { Student student = new Student(); + // 设置学生id student.setS_id(studentid); + // 设置学生密码 student.setS_password(password); + // 打印学生id System.out.println(studentid); + // 打印学生密码 System.out.println(password); + // 创建学生服务对象 StudentService service= new StudentServiceImpl(); + // 调用注册方法 service.register(student); + // 设置注册成功信息 request.setAttribute("msg","注册成功"); + // 清空学生id request.setAttribute("studentid",""); + // 清空学生密码 request.setAttribute("password",""); + // 清空确认密码 request.setAttribute("repassword",""); + // 转发到注册页面 request.getRequestDispatcher("register.jsp").forward(request,response); } @@ -59,3 +83,88 @@ public class RegisterServlet extends HttpServlet { doPost(request,response); } } +//package web.servlet.login; +// +//import domain.Student; +//import service.StudentService; +//import service.impl.StudentServiceImpl; +// +//import javax.servlet.ServletException; +//import javax.servlet.annotation.WebServlet; +//import javax.servlet.http.*; +//import java.io.IOException; +///** +// * 用户注册的Servlet +// */ +//@WebServlet("/registerServlet") +//public class RegisterServlet extends HttpServlet { +// /** +// * 处理POST请求,实现用户注册功能。 +// * +// * @param request HTTP请求对象,包含客户端发送的数据。 +// * @param response HTTP响应对象,用于生成返回给客户端的响应。 +// * @throws ServletException 如果处理请求时发生错误。 +// * @throws IOException 如果输入或输出异常发生。 +// */ +// protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// // 获取当前用户的会话 +// HttpSession session = request.getSession(); +// // 获取用户输入的学生ID +// String studentid = request.getParameter("studentid"); +// // 获取用户输入的密码 +// String password = request.getParameter("password"); +// // 获取用户输入的确认密码 +// String repassword = request.getParameter("repassword"); +// // 获取用户输入的验证码 +// String vcode = request.getParameter("verifycode"); +// +// //从session中获取服务器生成的验证码 +// String checkcode_server = (String) session.getAttribute("CHECKCODE_SERVER"); +// session.removeAttribute("CHECKCODE_SERVER"); +// //确保验证一次性 +// // 判断验证码是否正确 +// if (!vcode.equalsIgnoreCase(checkcode_server)){ +// // 如果验证码错误,将错误信息、用户输入的信息存入request中 +// request.setAttribute("msg","验证码错误"); +// // 将用户输入的学号存入request中 +// request.setAttribute("studentid",studentid); +// // 将用户输入的密码存入request中 +// request.setAttribute("password",password); +// // 将用户输入的确认密码存入request中 +// request.setAttribute("repassword",repassword); +// // 将请求转发到register.jsp页面 +// request.getRequestDispatcher("register.jsp").forward(request,response); +// // 返回 +// return; +// }else { +// Student student = new Student(); +// // 设置学生id +// student.setS_id(studentid); +// // 设置学生密码 +// student.setS_password(password); +// // 打印学生id +// System.out.println(studentid); +// // 打印学生密码 +// System.out.println(password); +// // 创建学生服务对象 +// StudentService service= new StudentServiceImpl(); +// // 调用注册方法 +// service.register(student); +// // 设置注册成功信息 +// request.setAttribute("msg","注册成功"); +// // 清空学生id +// request.setAttribute("studentid",""); +// // 清空学生密码 +// request.setAttribute("password",""); +// // 清空确认密码 +// request.setAttribute("repassword",""); +// // 转发到注册页面 +// request.getRequestDispatcher("register.jsp").forward(request,response); +// +// } +// } +// +// protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// doPost(request,response); +// } +//} \ No newline at end of file diff --git a/src/web/servlet/notify/AddNotifyServlet.java b/src/web/servlet/notify/AddNotifyServlet.java index 86d93c3..5b96379 100644 --- a/src/web/servlet/notify/AddNotifyServlet.java +++ b/src/web/servlet/notify/AddNotifyServlet.java @@ -37,3 +37,42 @@ public class AddNotifyServlet extends HttpServlet { doPost(request,response); } } +//package web.servlet.notify; +// +//import domain.Notify; +//import org.apache.commons.beanutils.BeanUtils; +//import service.NotifyService; +//import service.impl.NotifyServiceImpl; +// +//import javax.servlet.ServletException; +//import javax.servlet.annotation.WebServlet; +//import javax.servlet.http.HttpServlet; +//import javax.servlet.http.HttpServletRequest; +//import javax.servlet.http.HttpServletResponse; +//import java.io.IOException; +//import java.lang.reflect.InvocationTargetException; +//import java.text.SimpleDateFormat; +//import java.util.Date; +//import java.util.List; +//import java.util.Map; +// +//@WebServlet("/addNotifyServlet") +//public class AddNotifyServlet extends HttpServlet { +// protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// request.setCharacterEncoding("utf-8"); +// +// //获取参数- +// Notify notify = new Notify(); +// notify.setNotifyInfo((String) request.getParameter("notifyInfo")); +// Date d = new Date(); +// SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); +// notify.setNotifyDate(sdf.format(d)); +// NotifyService service = new NotifyServiceImpl(); +// service.addNotify(notify); +//// response.sendRedirect("/notifyListServlet"); +// request.getRequestDispatcher("/notifyListServlet").forward(request,response); +// } +// protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// doPost(request,response); +// } +//} \ No newline at end of file diff --git a/src/web/servlet/notify/DeleteNotifyServlet.java b/src/web/servlet/notify/DeleteNotifyServlet.java index 9242efa..f8e818e 100644 --- a/src/web/servlet/notify/DeleteNotifyServlet.java +++ b/src/web/servlet/notify/DeleteNotifyServlet.java @@ -38,3 +38,43 @@ public class DeleteNotifyServlet extends HttpServlet { doPost(request,response); } } +//package web.servlet.notify; +// +//import domain.Student; +//import service.NotifyService; +//import service.impl.NotifyServiceImpl; +// +//import javax.servlet.ServletException; +//import javax.servlet.annotation.WebServlet; +//import javax.servlet.http.HttpServlet; +//import javax.servlet.http.HttpServletRequest; +//import javax.servlet.http.HttpServletResponse; +//import javax.servlet.http.HttpSession; +//import java.io.IOException; +///** +// * 删除通知的Servlet +// */ +//@WebServlet("/deleteNotifyServlet") +//public class DeleteNotifyServlet extends HttpServlet { +// /** +// * 处理POST请求,删除指定ID的通知。 +// * +// * @param request HTTP请求对象,包含客户端发送的数据。 +// * @param response HTTP响应对象,用于生成返回给客户端的响应。 +// * @throws ServletException 如果处理请求时发生错误。 +// * @throws IOException 如果输入或输出异常发生。 +// */ +// protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// // 设置请求的字符编码为UTF-8,以支持中文字符的正确处理 +// request.setCharacterEncoding("utf-8"); +// HttpSession session = request.getSession(); +// String notifyid = request.getParameter("id"); +// NotifyService service = new NotifyServiceImpl(); +// service.deleteNotifyById(notifyid); +// request.getRequestDispatcher("/notifyListServlet").forward(request,response); +// } +// +// protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// doPost(request,response); +// } +//} \ No newline at end of file diff --git a/src/web/servlet/notify/NotifyListServlet.java b/src/web/servlet/notify/NotifyListServlet.java index 902096a..9995648 100644 --- a/src/web/servlet/notify/NotifyListServlet.java +++ b/src/web/servlet/notify/NotifyListServlet.java @@ -37,3 +37,42 @@ public class NotifyListServlet extends HttpServlet { doPost(request,response); } } +//package web.servlet.notify; +// +//import domain.Notify; +//import service.NotifyService; +//import service.impl.NotifyServiceImpl; +// +//import javax.servlet.ServletException; +//import javax.servlet.annotation.WebServlet; +//import javax.servlet.http.HttpServlet; +//import javax.servlet.http.HttpServletRequest; +//import javax.servlet.http.HttpServletResponse; +//import java.io.IOException; +//import java.util.List; +///** +// * 显示通知列表的Servlet +// */ +//@WebServlet("/notifyListServlet") +//public class NotifyListServlet extends HttpServlet { +// /** +// * 处理POST请求,获取所有通知并转发到通知列表页面。 +// * +// * @param request HTTP请求对象,包含客户端发送的数据。 +// * @param response HTTP响应对象,用于生成返回给客户端的响应。 +// * @throws ServletException 如果处理请求时发生错误。 +// * @throws IOException 如果输入或输出异常发生。 +// */ +// protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// // 设置请求的字符编码为UTF-8,以支持中文字符的正确处理 +// request.setCharacterEncoding("utf-8"); +// // 创建通知服务的实例,以便获取通知数据 +// NotifyService service = new NotifyServiceImpl(); +// List notifys = service.findAll(); +// request.setAttribute("notifys",notifys); +// request.getRequestDispatcher("/WEB-INF/notify/notifyList.jsp").forward(request,response); +// } +// protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// doPost(request,response); +// } +//} \ No newline at end of file diff --git a/src/web/servlet/notify/NotifyListToServlet.java b/src/web/servlet/notify/NotifyListToServlet.java index 8ed17fb..3ce9607 100644 --- a/src/web/servlet/notify/NotifyListToServlet.java +++ b/src/web/servlet/notify/NotifyListToServlet.java @@ -36,13 +36,19 @@ public class NotifyListToServlet extends HttpServlet { List notifys = service.findAll(); request.setAttribute("notifys",notifys); + // 获取当前会话 HttpSession session = request.getSession(); + // 从会话中获取学生对象 Student student= (Student)session.getAttribute("student"); + // 从会话中获取教师对象 Teacher teacher= (Teacher)session.getAttribute("teacher"); + // 如果会话中存在学生对象且不存在教师对象,则转发到学生通知列表页面 if (student != null && teacher == null) { request.getRequestDispatcher("/WEB-INF/notify/notifyListToStudent.jsp").forward(request,response); + // 如果会话中存在教师对象且不存在学生对象,则转发到教师通知列表页面 } else if (teacher != null && student == null) { request.getRequestDispatcher("/WEB-INF/notify/notifyListToTeacher.jsp").forward(request,response); + // 如果会话中既不存在学生对象也不存在教师对象,则转发到错误页面 } else { request.getRequestDispatcher("error.jsp").forward(request, response); } @@ -53,3 +59,64 @@ public class NotifyListToServlet extends HttpServlet { doPost(request,response); } } +//package web.servlet.notify; +// +//import domain.Admin; +//import domain.Notify; +//import domain.Student; +//import domain.Teacher; +//import service.NotifyService; +//import service.impl.NotifyServiceImpl; +// +//import javax.servlet.ServletException; +//import javax.servlet.annotation.WebServlet; +//import javax.servlet.http.HttpServlet; +//import javax.servlet.http.HttpServletRequest; +//import javax.servlet.http.HttpServletResponse; +//import javax.servlet.http.HttpSession; +//import java.io.IOException; +//import java.util.List; +///** +// * 转发到通知列表的Servlet +// */ +//@WebServlet("/notifyListToServlet") +//public class NotifyListToServlet extends HttpServlet { +// /** +// * 处理POST请求,获取所有通知并转发到通知列表页面。 +// * +// * @param request HTTP请求对象,包含客户端发送的数据。 +// * @param response HTTP响应对象,用于生成返回给客户端的响应。 +// * @throws ServletException 如果处理请求时发生错误。 +// * @throws IOException 如果输入或输出异常发生。 +// */ +// protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// // 设置请求的字符编码为UTF-8,以支持中文字符的正确处理 +// request.setCharacterEncoding("utf-8"); +// // 创建通知服务的实例,以便获取通知数据 +// NotifyService service = new NotifyServiceImpl(); +// List notifys = service.findAll(); +// request.setAttribute("notifys",notifys); +// +// // 获取当前会话 +// HttpSession session = request.getSession(); +// // 从会话中获取学生对象 +// Student student= (Student)session.getAttribute("student"); +// // 从会话中获取教师对象 +// Teacher teacher= (Teacher)session.getAttribute("teacher"); +// // 如果会话中存在学生对象且不存在教师对象,则转发到学生通知列表页面 +// if (student != null && teacher == null) { +// request.getRequestDispatcher("/WEB-INF/notify/notifyListToStudent.jsp").forward(request,response); +// // 如果会话中存在教师对象且不存在学生对象,则转发到教师通知列表页面 +// } else if (teacher != null && student == null) { +// request.getRequestDispatcher("/WEB-INF/notify/notifyListToTeacher.jsp").forward(request,response); +// // 如果会话中既不存在学生对象也不存在教师对象,则转发到错误页面 +// } else { +// request.getRequestDispatcher("error.jsp").forward(request, response); +// } +// +// } +// +// protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// doPost(request,response); +// } +//} \ No newline at end of file diff --git a/src/web/servlet/notify/NotifyServlet.java b/src/web/servlet/notify/NotifyServlet.java index 0c6d904..4e9fea8 100644 --- a/src/web/servlet/notify/NotifyServlet.java +++ b/src/web/servlet/notify/NotifyServlet.java @@ -22,3 +22,27 @@ public class NotifyServlet extends HttpServlet { doPost(request, response); } } +//package web.servlet.notify; +// +//import javax.servlet.ServletException; +//import javax.servlet.annotation.WebServlet; +//import javax.servlet.http.HttpServlet; +//import javax.servlet.http.HttpServletRequest; +//import javax.servlet.http.HttpServletResponse; +//import java.io.IOException; +// +//@WebServlet("/notifyServlet") +//public class NotifyServlet extends HttpServlet { +// +// // 处理POST请求的方法 +// protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// // 将请求转发到指定的JSP页面 +// request.getRequestDispatcher("/WEB-INF/notify/addNotify.jsp").forward(request, response); +// } +// +// // 处理GET请求的方法 +// protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// // 将GET请求转发到doPost方法进行处理 +// doPost(request, response); +// } +//} \ No newline at end of file diff --git a/src/web/servlet/page/FindStudentByPageServlet.java b/src/web/servlet/page/FindStudentByPageServlet.java index 3d80aeb..fdbac74 100644 --- a/src/web/servlet/page/FindStudentByPageServlet.java +++ b/src/web/servlet/page/FindStudentByPageServlet.java @@ -35,23 +35,36 @@ public class FindStudentByPageServlet extends HttpServlet { //获取条件查询参数- Map condition = request.getParameterMap(); + //创建StudentService对象 StudentService service = new StudentServiceImpl(); + //调用findStudentByPage方法,传入当前页码、每页显示的行数和查询条件,返回PageBean对象 PageBean pb = service.findStudentByPage(currentPage,rows,condition); + //将PageBean对象存入request域中 request.setAttribute("pb",pb); + //将查询条件存入request域中 request.setAttribute("condition",condition);//存入查询条件- + //设置request的字符编码为utf-8 request.setCharacterEncoding("utf-8"); + //获取session对象 HttpSession session = request.getSession(); + //从session中获取Student对象 Student student= (Student)session.getAttribute("student"); + // 从session中获取admin对象 Admin admin= (Admin)session.getAttribute("admin"); + // 从session中获取teacher对象 Teacher teacher= (Teacher)session.getAttribute("teacher"); + // 如果student对象不为空,admin对象为空,teacher对象为空,则跳转到student的查找学生列表页面 if (student != null && admin == null && teacher == null) { request.getRequestDispatcher("/WEB-INF/student/sFindStudentList.jsp").forward(request, response); + // 如果admin对象不为空,student对象为空,teacher对象为空,则跳转到admin的查找学生列表页面 } else if (admin != null && student == null && teacher == null) { request.getRequestDispatcher("/WEB-INF/admin/aFindStudentList.jsp").forward(request, response); + // 如果teacher对象不为空,admin对象为空,student对象为空,则跳转到teacher的查找学生列表页面 } else if (teacher != null && admin == null && student == null) { request.getRequestDispatcher("/WEB-INF/teacher/tFindStudentList.jsp").forward(request, response); + // 否则跳转到错误页面 } else { request.getRequestDispatcher("error.jsp").forward(request, response); } @@ -61,3 +74,79 @@ public class FindStudentByPageServlet extends HttpServlet { doPost(request,response); } } +//package web.servlet.page; +// +//import domain.Admin; +//import domain.PageBean; +//import domain.Student; +//import domain.Teacher; +//import service.StudentService; +//import service.impl.StudentServiceImpl; +// +//import javax.servlet.ServletException; +//import javax.servlet.annotation.WebServlet; +//import javax.servlet.http.HttpServlet; +//import javax.servlet.http.HttpServletRequest; +//import javax.servlet.http.HttpServletResponse; +//import javax.servlet.http.HttpSession; +//import java.io.IOException; +//import java.util.Map; +// +//@WebServlet("/findStudentByPageServlet") +//public class FindStudentByPageServlet extends HttpServlet { +// // 处理POST请求的方法- +// protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// // 设置请求的字符编码为UTF-8,以支持中文字符- +// request.setCharacterEncoding("utf-8"); +// String currentPage = request.getParameter("currentPage");//当前页码 +// String rows = request.getParameter("rows");//每页显示条数 +// +// if (currentPage == null || "".equals(currentPage)) { +// currentPage = "1"; +// } +// if (rows == null || "".equals(rows)) { +// rows = "5"; +// } +// +// //获取条件查询参数- +// Map condition = request.getParameterMap(); +// +// //创建StudentService对象 +// StudentService service = new StudentServiceImpl(); +// //调用findStudentByPage方法,传入当前页码、每页显示的行数和查询条件,返回PageBean对象 +// PageBean pb = service.findStudentByPage(currentPage,rows,condition); +// +// //将PageBean对象存入request域中 +// request.setAttribute("pb",pb); +// //将查询条件存入request域中 +// request.setAttribute("condition",condition);//存入查询条件- +// //设置request的字符编码为utf-8 +// request.setCharacterEncoding("utf-8"); +// //获取session对象 +// HttpSession session = request.getSession(); +// //从session中获取Student对象 +// Student student= (Student)session.getAttribute("student"); +// +// // 从session中获取admin对象 +// Admin admin= (Admin)session.getAttribute("admin"); +// // 从session中获取teacher对象 +// Teacher teacher= (Teacher)session.getAttribute("teacher"); +// // 如果student对象不为空,admin对象为空,teacher对象为空,则跳转到student的查找学生列表页面 +// if (student != null && admin == null && teacher == null) { +// request.getRequestDispatcher("/WEB-INF/student/sFindStudentList.jsp").forward(request, response); +// // 如果admin对象不为空,student对象为空,teacher对象为空,则跳转到admin的查找学生列表页面 +// } else if (admin != null && student == null && teacher == null) { +// request.getRequestDispatcher("/WEB-INF/admin/aFindStudentList.jsp").forward(request, response); +// // 如果teacher对象不为空,admin对象为空,student对象为空,则跳转到teacher的查找学生列表页面 +// } else if (teacher != null && admin == null && student == null) { +// request.getRequestDispatcher("/WEB-INF/teacher/tFindStudentList.jsp").forward(request, response); +// // 否则跳转到错误页面 +// } else { +// request.getRequestDispatcher("error.jsp").forward(request, response); +// } +// } +// +// protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// doPost(request,response); +// } +//} \ No newline at end of file diff --git a/src/web/servlet/student/DeleteSelectStudentServlet.java b/src/web/servlet/student/DeleteSelectStudentServlet.java index 7679d0c..69776be 100644 --- a/src/web/servlet/student/DeleteSelectStudentServlet.java +++ b/src/web/servlet/student/DeleteSelectStudentServlet.java @@ -34,3 +34,39 @@ public class DeleteSelectStudentServlet extends HttpServlet { doPost(request, response); } } +//package web.servlet.student; +// +//import service.StudentService; +//import service.impl.StudentServiceImpl; +// +//import javax.servlet.ServletException; +//import javax.servlet.annotation.WebServlet; +//import javax.servlet.http.HttpServlet; +//import javax.servlet.http.HttpServletRequest; +//import javax.servlet.http.HttpServletResponse; +//import java.io.IOException; +// +//@WebServlet("/deleteSelectStudentServlet") +//// 删除选定学生的Servlet +//public class DeleteSelectStudentServlet extends HttpServlet { +// +// // 处理POST请求 +// protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// // 获取选定学生的ID数组 +// String[] sids = request.getParameterValues("sid"); +// +// // 创建学生服务的实例 +// StudentService service = new StudentServiceImpl(); +// +// // 调用服务方法删除选定的学生 +// service.deleteSelectStudent(sids); +// +// // 重定向到查找学生的页面 +// response.sendRedirect(request.getContextPath() + "/findStudentByPageServlet"); +// } +// +// // 处理GET请求,直接调用doPost方法 +// protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// doPost(request, response); +// } +//} \ No newline at end of file diff --git a/src/web/servlet/student/DeleteStudentServlet.java b/src/web/servlet/student/DeleteStudentServlet.java index 22c4011..dfac786 100644 --- a/src/web/servlet/student/DeleteStudentServlet.java +++ b/src/web/servlet/student/DeleteStudentServlet.java @@ -45,3 +45,50 @@ public class DeleteStudentServlet extends HttpServlet { doPost(request, response); } } +//package web.servlet.student; +// +//import service.NotifyService; +//import service.StudentService; +//import service.impl.NotifyServiceImpl; +//import service.impl.StudentServiceImpl; +// +//import javax.servlet.ServletException; +//import javax.servlet.annotation.WebServlet; +//import javax.servlet.http.HttpServlet; +//import javax.servlet.http.HttpServletRequest; +//import javax.servlet.http.HttpServletResponse; +//import javax.servlet.http.HttpSession; +//import java.io.IOException; +// +//@WebServlet("/deleteStudentServlet") +//// 删除学生的Servlet +//public class DeleteStudentServlet extends HttpServlet { +// +// // 处理POST请求 +// protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// // 设置请求的字符编码为UTF-8 +// request.setCharacterEncoding("utf-8"); +// +// // 获取当前会话 +// HttpSession session = request.getSession(); +// +// // 获取要删除的学生ID +// String studentid = request.getParameter("s_id"); +// +// // 创建学生服务的实例 +// StudentService service = new StudentServiceImpl(); +// +// // 调用服务方法通过学生ID删除学生 +// service.deleteStudentById(studentid); +// +// // 重定向到查找学生的页面 +// response.sendRedirect("findStudentByPageServlet"); +// // 如果需要使用转发,可以使用下面的代码 +// // request.getRequestDispatcher("/findStudentByPageServlet").forward(request, response); +// } +// +// // 处理GET请求,直接调用doPost方法 +// protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// doPost(request, response); +// } +//} \ No newline at end of file diff --git a/src/web/servlet/student/DoSelectCourseServlet.java b/src/web/servlet/student/DoSelectCourseServlet.java index e68505b..3f93251 100644 --- a/src/web/servlet/student/DoSelectCourseServlet.java +++ b/src/web/servlet/student/DoSelectCourseServlet.java @@ -71,3 +71,76 @@ public class DoSelectCourseServlet extends HttpServlet { doPost(request,response); } } +//package web.servlet.student; +// +//import domain.Course; +//import domain.SelectCourse; +//import domain.Student; +//import service.StudentService; +//import service.impl.StudentServiceImpl; +// +//import javax.servlet.ServletException; +//import javax.servlet.annotation.WebServlet; +//import javax.servlet.http.HttpServlet; +//import javax.servlet.http.HttpServletRequest; +//import javax.servlet.http.HttpServletResponse; +//import javax.servlet.http.HttpSession; +//import java.io.IOException; +//import java.util.Date; +//import java.util.List; +// +//@WebServlet("/doSelectCourseServlet") +//public class DoSelectCourseServlet extends HttpServlet { +// protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// request.setCharacterEncoding("utf-8"); +// HttpSession session = request.getSession(); +// Student student= (Student)session.getAttribute("student"); +// String courseid = request.getParameter("id"); +// //存不存在已选该课 +// //1 +// //2 +// //3 +// //4 +// //5 +// //6 +// //7 +// //8 +// //9 +// //0 +// boolean flag = false; +// +// //判断是否已选 +// StudentService studentService = new StudentServiceImpl(); +// List selectcourses = studentService.findAllSelectCourse(student.getS_id()); +// for (SelectCourse s:selectcourses) { +// if (s.getC_id().equals(courseid)) { +// flag = true; +// break; +// } +// } +// if (flag == true) { +// +// request.setAttribute("select_msg", "你已选了该课程!" + String.format("%tT", new Date())); +// request.getRequestDispatcher("studentOptionalCourseServlet").forward(request, response); +//// response.sendRedirect("studentOptionalCourseServlet"); +// } else { +// //获取到当前学生id +// String studentid = student.getS_id(); +// +// //获取当前行的课程id courseid +// +// //调用学生添加选课服务s_id c_id score select_course添加 +// StudentService Service = new StudentServiceImpl(); +// Service.addSelectCourse(studentid,courseid); +// +// //完成后给提示跳转 +// request.setAttribute("select_msg", "选课成功!" + String.format("%tT", new Date())); +// request.getRequestDispatcher("studentOptionalCourseServlet").forward(request, response); +// } +// +// } +// +// protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// doPost(request,response); +// } +//} \ No newline at end of file diff --git a/src/web/servlet/student/StudentInfomationUpdateServlet.java b/src/web/servlet/student/StudentInfomationUpdateServlet.java index 44e3b82..5ed7781 100644 --- a/src/web/servlet/student/StudentInfomationUpdateServlet.java +++ b/src/web/servlet/student/StudentInfomationUpdateServlet.java @@ -21,15 +21,25 @@ public class StudentInfomationUpdateServlet extends HttpServlet { request.setCharacterEncoding("utf-8"); //保存输入内容- + // 获取学生ID String sid = request.getParameter("student-id"); + // 获取学生姓名 String name = request.getParameter("student-name"); + // 获取学生性别 String sex = request.getParameter("student-sex"); + // 获取学生年龄 String age = request.getParameter("student-age"); + // 获取学生电话 String phone = request.getParameter("student-phone"); + // 获取学生邮箱 String email = request.getParameter("student-email"); + // 获取学生地址 String address = request.getParameter("student-address"); + // 获取学生所在学院 String college = request.getParameter("selectCollege"); + // 获取学生所在系 String department = request.getParameter("selectDepartment"); + // 获取学生所在班级 String cclass = request.getParameter("selectClass"); //String sid = request.getParameter("student-id"); // String name = request.getParameter("student-name"); @@ -53,15 +63,25 @@ public class StudentInfomationUpdateServlet extends HttpServlet { // response.sendRedirect("studentInfomationServlet"); }else { //封装学生对象- + // 设置学生ID updateStudent.setS_id(sid); + // 设置学生姓名 updateStudent.setS_name(name); + // 设置学生性别 updateStudent.setS_sex(sex); + // 设置学生年龄 updateStudent.setS_age(age); + // 设置学生电话 updateStudent.setS_phone(phone); + // 设置学生邮箱 updateStudent.setS_email(email); + // 设置学生地址 updateStudent.setS_address(address); + // 设置学生学院 updateStudent.setS_college(college); + // 设置学生系别 updateStudent.setS_department(department); + // 设置学生班级 updateStudent.setS_class(cclass); //updateStudent.setS_id(sid); // updateStudent.setS_name(name); @@ -94,3 +114,119 @@ public class StudentInfomationUpdateServlet extends HttpServlet { doPost(request,response); } } +//package web.servlet.student; +// +//import domain.Student; +//import service.StudentService; +//import service.impl.StudentServiceImpl; +// +//import javax.servlet.ServletException; +//import javax.servlet.annotation.WebServlet; +//import javax.servlet.http.HttpServlet; +//import javax.servlet.http.HttpServletRequest; +//import javax.servlet.http.HttpServletResponse; +//import javax.servlet.http.HttpSession; +//import java.io.IOException; +//import java.text.SimpleDateFormat; +//import java.util.Date; +// +//@WebServlet("/studentInfomationUpdateServlet") +//public class StudentInfomationUpdateServlet extends HttpServlet { +// protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// +// request.setCharacterEncoding("utf-8"); +// +// //保存输入内容- +// // 获取学生ID +// String sid = request.getParameter("student-id"); +// // 获取学生姓名 +// String name = request.getParameter("student-name"); +// // 获取学生性别 +// String sex = request.getParameter("student-sex"); +// // 获取学生年龄 +// String age = request.getParameter("student-age"); +// // 获取学生电话 +// String phone = request.getParameter("student-phone"); +// // 获取学生邮箱 +// String email = request.getParameter("student-email"); +// // 获取学生地址 +// String address = request.getParameter("student-address"); +// // 获取学生所在学院 +// String college = request.getParameter("selectCollege"); +// // 获取学生所在系 +// String department = request.getParameter("selectDepartment"); +// // 获取学生所在班级 +// String cclass = request.getParameter("selectClass"); +// //String sid = request.getParameter("student-id"); +// // String name = request.getParameter("student-name"); +// // String sex = request.getParameter("student-sex"); +// // String age = request.getParameter("student-age"); +// // String phone = request.getParameter("student-phone"); +// // String email = request.getParameter("student-email"); +// // String address = request.getParameter("student-address"); +// // String college = request.getParameter("selectCollege"); +// // String department = request.getParameter("selectDepartment"); +// // String cclass = request.getParameter("selectClass"); +// +// Student updateStudent = new Student(); +// +// +// //判断输入位数是否大于数据库位数- +// if (name.length() > 4 || phone.length() > 11 || email.length()>24 || address.length() > 24 || age.length()>2 || name.contains("<") || phone.contains("<") || email.contains("<") || address.contains("<") || age.contains("<")) { +// request.setAttribute("update_msg","格式错误,请重新提交!"+String.format("%tT",new Date())); +// +// request.getRequestDispatcher("/WEB-INF/student/sInformation.jsp").forward(request, response); +//// response.sendRedirect("studentInfomationServlet"); +// }else { +// //封装学生对象- +// // 设置学生ID +// updateStudent.setS_id(sid); +// // 设置学生姓名 +// updateStudent.setS_name(name); +// // 设置学生性别 +// updateStudent.setS_sex(sex); +// // 设置学生年龄 +// updateStudent.setS_age(age); +// // 设置学生电话 +// updateStudent.setS_phone(phone); +// // 设置学生邮箱 +// updateStudent.setS_email(email); +// // 设置学生地址 +// updateStudent.setS_address(address); +// // 设置学生学院 +// updateStudent.setS_college(college); +// // 设置学生系别 +// updateStudent.setS_department(department); +// // 设置学生班级 +// updateStudent.setS_class(cclass); +// //updateStudent.setS_id(sid); +// // updateStudent.setS_name(name); +// // updateStudent.setS_sex(sex); +// // updateStudent.setS_age(age); +// // updateStudent.setS_phone(phone); +// // updateStudent.setS_email(email); +// // updateStudent.setS_address(address); +// // updateStudent.setS_college(college); +// // updateStudent.setS_department(department); +// // updateStudent.setS_class(cclass); +// +// //调用studentUpdata服务- +// StudentService service= new StudentServiceImpl(); +// service.updateInfo(updateStudent); +// +// HttpSession session = request.getSession(); +// +// Student s = service.findStudentById(updateStudent); +// session.setAttribute("student",s); +// +// //成功则返回并给提示- +// request.setAttribute("update_msg", "修改成功!"+String.format("%tT",new Date())); +// request.setAttribute("student",updateStudent); +// request.getRequestDispatcher("/WEB-INF/student/sInformation.jsp").forward(request, response); +// } +// } +// +// protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// doPost(request,response); +// } +//} \ No newline at end of file diff --git a/src/web/servlet/student/StudentListServlet.java b/src/web/servlet/student/StudentListServlet.java index 03dfffa..9bd21d1 100644 --- a/src/web/servlet/student/StudentListServlet.java +++ b/src/web/servlet/student/StudentListServlet.java @@ -26,16 +26,24 @@ public class StudentListServlet extends HttpServlet { request.setCharacterEncoding("utf-8"); + // 获取当前会话 HttpSession session = request.getSession(); + // 从会话中获取学生对象 Student student= (Student)session.getAttribute("student"); + // 从会话中获取管理员对象 Admin admin= (Admin)session.getAttribute("admin"); + // 从会话中获取教师对象 Teacher teacher= (Teacher)session.getAttribute("teacher"); + // 如果会话中存在学生对象,且不存在管理员对象和教师对象,则跳转到学生列表页面 if (student != null && admin == null && teacher == null) { request.getRequestDispatcher("/WEB-INF/student/studentList.jsp").forward(request, response); + // 如果会话中存在管理员对象,且不存在学生对象和教师对象,则跳转到管理员查找学生列表页面 } else if (admin != null && student == null && teacher == null) { request.getRequestDispatcher("/WEB-INF/admin/aFindStudentList.jsp").forward(request, response); + // 如果会话中存在教师对象,且不存在学生对象和管理员对象,则跳转到教师查找学生列表页面 } else if (teacher != null && admin == null && student == null) { request.getRequestDispatcher("/WEB-INF/teacher/tFindStudentList.jsp").forward(request, response); + // 如果会话中不存在学生对象、管理员对象和教师对象,则跳转到错误页面 } else { request.getRequestDispatcher("error.jsp").forward(request, response); } @@ -58,3 +66,71 @@ public class StudentListServlet extends HttpServlet { this.doPost(request,response); } } +//package web.servlet.student; +// +//import domain.Admin; +//import domain.Student; +//import domain.Teacher; +//import service.StudentService; +//import service.impl.StudentServiceImpl; +// +//import javax.servlet.ServletException; +//import javax.servlet.annotation.WebServlet; +//import javax.servlet.http.HttpServlet; +//import javax.servlet.http.HttpServletRequest; +//import javax.servlet.http.HttpServletResponse; +//import javax.servlet.http.HttpSession; +//import java.io.IOException; +//import java.util.List; +// +//@WebServlet("/studentListServlet") +//public class StudentListServlet extends HttpServlet { +// protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// //调用StudentService完成查询- +// StudentService studentService = new StudentServiceImpl(); +// List students = studentService.findAll(); +// //将list存入request域- +// request.setAttribute("students",students); +// +// request.setCharacterEncoding("utf-8"); +// +// // 获取当前会话 +// HttpSession session = request.getSession(); +// // 从会话中获取学生对象 +// Student student= (Student)session.getAttribute("student"); +// // 从会话中获取管理员对象 +// Admin admin= (Admin)session.getAttribute("admin"); +// // 从会话中获取教师对象 +// Teacher teacher= (Teacher)session.getAttribute("teacher"); +// // 如果会话中存在学生对象,且不存在管理员对象和教师对象,则跳转到学生列表页面 +// if (student != null && admin == null && teacher == null) { +// request.getRequestDispatcher("/WEB-INF/student/studentList.jsp").forward(request, response); +// // 如果会话中存在管理员对象,且不存在学生对象和教师对象,则跳转到管理员查找学生列表页面 +// } else if (admin != null && student == null && teacher == null) { +// request.getRequestDispatcher("/WEB-INF/admin/aFindStudentList.jsp").forward(request, response); +// // 如果会话中存在教师对象,且不存在学生对象和管理员对象,则跳转到教师查找学生列表页面 +// } else if (teacher != null && admin == null && student == null) { +// request.getRequestDispatcher("/WEB-INF/teacher/tFindStudentList.jsp").forward(request, response); +// // 如果会话中不存在学生对象、管理员对象和教师对象,则跳转到错误页面 +// } else { +// request.getRequestDispatcher("error.jsp").forward(request, response); +// } +// } +// // HttpSession session = request.getSession(); +// // Student student= (Student)session.getAttribute("student"); +// // Admin admin= (Admin)session.getAttribute("admin"); +// // Teacher teacher= (Teacher)session.getAttribute("teacher"); +// // if (student != null && admin == null && teacher == null) { +// // request.getRequestDispatcher("/WEB-INF/student/studentList.jsp").forward(request, response); +// // } else if (admin != null && student == null && teacher == null) { +// // request.getRequestDispatcher("/WEB-INF/admin/aFindStudentList.jsp").forward(request, response); +// // } else if (teacher != null && admin == null && student == null) { +// // request.getRequestDispatcher("/WEB-INF/teacher/tFindStudentList.jsp").forward(request, response); +// // } else { +// // request.getRequestDispatcher("error.jsp").forward(request, response); +// // } +// +// protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// this.doPost(request,response); +// } +//} \ No newline at end of file diff --git a/src/web/servlet/student/StudentOptionalCourseServlet.java b/src/web/servlet/student/StudentOptionalCourseServlet.java index f71c8d8..b73c793 100644 --- a/src/web/servlet/student/StudentOptionalCourseServlet.java +++ b/src/web/servlet/student/StudentOptionalCourseServlet.java @@ -18,10 +18,15 @@ import java.util.List; @WebServlet("/studentOptionalCourseServlet") public class StudentOptionalCourseServlet extends HttpServlet { + // 处理POST请求 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // 设置请求编码为utf-8 request.setCharacterEncoding("utf-8"); + // 获取当前会话 HttpSession session = request.getSession(); + // 从会话中获取学生对象 Student student= (Student)session.getAttribute("student"); + // 从会话中获取管理员对象 Admin admin =(Admin)session.getAttribute("admin"); //调用StudentService完成查询- @@ -31,10 +36,13 @@ public class StudentOptionalCourseServlet extends HttpServlet { request.setAttribute("optionalcourses",optionalcourses); //转发到list.jsp- + // 如果student不为空且admin为空,则跳转到studentOptionalCourse.jsp页面 if (student != null && admin == null) { request.getRequestDispatcher("/WEB-INF/student/studentOptionalCourse.jsp").forward(request,response); + // 如果admin不为空且student为空,则跳转到allStudentOptionalCourse.jsp页面 } else if (admin != null && student == null) { request.getRequestDispatcher("/WEB-INF/admin/allStudentOptionalCourse.jsp").forward(request, response); + // 否则跳转到error.jsp页面 } else { request.getRequestDispatcher("error.jsp").forward(request, response); } @@ -52,3 +60,65 @@ public class StudentOptionalCourseServlet extends HttpServlet { this.doPost(request,response); } } +//package web.servlet.student; +// +//import domain.Admin; +//import domain.Course; +//import domain.SelectCourse; +//import domain.Student; +//import service.StudentService; +//import service.impl.StudentServiceImpl; +// +//import javax.servlet.ServletException; +//import javax.servlet.annotation.WebServlet; +//import javax.servlet.http.HttpServlet; +//import javax.servlet.http.HttpServletRequest; +//import javax.servlet.http.HttpServletResponse; +//import javax.servlet.http.HttpSession; +//import java.io.IOException; +//import java.util.List; +// +//@WebServlet("/studentOptionalCourseServlet") +//public class StudentOptionalCourseServlet extends HttpServlet { +// // 处理POST请求 +// protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// // 设置请求编码为utf-8 +// request.setCharacterEncoding("utf-8"); +// // 获取当前会话 +// HttpSession session = request.getSession(); +// // 从会话中获取学生对象 +// Student student= (Student)session.getAttribute("student"); +// // 从会话中获取管理员对象 +// Admin admin =(Admin)session.getAttribute("admin"); +// +// //调用StudentService完成查询- +// StudentService studentService = new StudentServiceImpl(); +// List optionalcourses = studentService.findAllOptionalCourse(); +// //将list存入request域- +// request.setAttribute("optionalcourses",optionalcourses); +// //转发到list.jsp- +// +// // 如果student不为空且admin为空,则跳转到studentOptionalCourse.jsp页面 +// if (student != null && admin == null) { +// request.getRequestDispatcher("/WEB-INF/student/studentOptionalCourse.jsp").forward(request,response); +// // 如果admin不为空且student为空,则跳转到allStudentOptionalCourse.jsp页面 +// } else if (admin != null && student == null) { +// request.getRequestDispatcher("/WEB-INF/admin/allStudentOptionalCourse.jsp").forward(request, response); +// // 否则跳转到error.jsp页面 +// } else { +// request.getRequestDispatcher("error.jsp").forward(request, response); +// } +// //if (student != null && admin == null) { +// // request.getRequestDispatcher("/WEB-INF/student/studentOptionalCourse.jsp").forward(request,response); +// // } else if (admin != null && student == null) { +// // request.getRequestDispatcher("/WEB-INF/admin/allStudentOptionalCourse.jsp").forward(request, response); +// // } else { +// // request.getRequestDispatcher("error.jsp").forward(request, response); +// // } +// +// } +// +// protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// this.doPost(request,response); +// } +//} \ No newline at end of file diff --git a/src/web/servlet/student/StudentPasswordUpdateServlet.java b/src/web/servlet/student/StudentPasswordUpdateServlet.java index 5c6fac5..6d5990d 100644 --- a/src/web/servlet/student/StudentPasswordUpdateServlet.java +++ b/src/web/servlet/student/StudentPasswordUpdateServlet.java @@ -19,30 +19,46 @@ public class StudentPasswordUpdateServlet extends HttpServlet { // 处理POST请求 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 设置请求的字符编码为UTF-8,以支持中文 + // 设置请求的字符编码为utf-8 request.setCharacterEncoding("utf-8"); + // 获取当前会话 HttpSession session = request.getSession(); + // 从会话中获取学生对象 Student student= (Student)session.getAttribute("student"); + // 获取学生id String studentid = student.getS_id(); + // 获取新密码 String newpassword = request.getParameter("student-newpassword"); + // 获取确认新密码 String ennewpassword = request.getParameter("student-ennewpassword"); + // 定义正则表达式,匹配3-12位字母、数字、下划线 String regex = "^[\\w]{3,12}$"; + // 判断新密码是否符合正则表达式 + // 判断新密码是否符合正则表达式 boolean flag = newpassword.matches(regex); + // 如果不符合,则设置错误信息,并跳转到修改密码页面 if (!flag) { request.setAttribute("update_msg", "密码格式错误,重新提交!"+String.format("%tT",new Date())); request.getRequestDispatcher("/WEB-INF/student/studentUpdatePassword.jsp").forward(request, response); + // 如果新密码和确认密码不一致,则设置错误信息,并跳转到修改密码页面 } else if (!newpassword.equals(ennewpassword)) { request.setAttribute("update_msg", "密码确认错误,请重新提交!" + String.format("%tT", new Date())); request.getRequestDispatcher("/WEB-INF/student/studentUpdatePassword.jsp").forward(request, response); + // 如果新密码和确认密码一致,则调用服务层更新密码 } else { StudentService service= new StudentServiceImpl(); service.updatePassword(studentid,newpassword); + // 根据学号查询学生信息 Student newStudent = service.findStudentById(student); + // 更新学生信息 student = newStudent; + // 将学生信息存入session session.setAttribute("student",student); + // 设置成功信息,并跳转到修改密码页面 request.setAttribute("update_msg", "修改成功!" + String.format("%tT", new Date())); request.getRequestDispatcher("/WEB-INF/student/studentUpdatePassword.jsp").forward(request, response); } @@ -82,3 +98,103 @@ public class StudentPasswordUpdateServlet extends HttpServlet { doPost(request,response); } } +//package web.servlet.student; +// +//import domain.Student; +//import service.StudentService; +//import service.impl.StudentServiceImpl; +// +//import javax.servlet.ServletException; +//import javax.servlet.annotation.WebServlet; +//import javax.servlet.http.HttpServlet; +//import javax.servlet.http.HttpServletRequest; +//import javax.servlet.http.HttpServletResponse; +//import javax.servlet.http.HttpSession; +//import java.io.IOException; +//import java.util.Date; +// +//@WebServlet("/studentPasswordUpdateServlet") +//// 学生密码更新Servlet +//public class StudentPasswordUpdateServlet extends HttpServlet { +// // 处理POST请求 +// protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// // 设置请求的字符编码为UTF-8,以支持中文 +// // 设置请求的字符编码为utf-8 +// request.setCharacterEncoding("utf-8"); +// // 获取当前会话 +// HttpSession session = request.getSession(); +// // 从会话中获取学生对象 +// Student student= (Student)session.getAttribute("student"); +// +// // 获取学生id +// String studentid = student.getS_id(); +// // 获取新密码 +// String newpassword = request.getParameter("student-newpassword"); +// // 获取确认新密码 +// String ennewpassword = request.getParameter("student-ennewpassword"); +// // 定义正则表达式,匹配3-12位字母、数字、下划线 +// String regex = "^[\\w]{3,12}$"; +// // 判断新密码是否符合正则表达式 +// // 判断新密码是否符合正则表达式 +// boolean flag = newpassword.matches(regex); +// // 如果不符合,则设置错误信息,并跳转到修改密码页面 +// if (!flag) { +// request.setAttribute("update_msg", "密码格式错误,重新提交!"+String.format("%tT",new Date())); +// request.getRequestDispatcher("/WEB-INF/student/studentUpdatePassword.jsp").forward(request, response); +// // 如果新密码和确认密码不一致,则设置错误信息,并跳转到修改密码页面 +// } else if (!newpassword.equals(ennewpassword)) { +// request.setAttribute("update_msg", "密码确认错误,请重新提交!" + String.format("%tT", new Date())); +// request.getRequestDispatcher("/WEB-INF/student/studentUpdatePassword.jsp").forward(request, response); +// // 如果新密码和确认密码一致,则调用服务层更新密码 +// } else { +// +// StudentService service= new StudentServiceImpl(); +// service.updatePassword(studentid,newpassword); +// +// // 根据学号查询学生信息 +// Student newStudent = service.findStudentById(student); +// // 更新学生信息 +// student = newStudent; +// // 将学生信息存入session +// session.setAttribute("student",student); +// +// // 设置成功信息,并跳转到修改密码页面 +// request.setAttribute("update_msg", "修改成功!" + String.format("%tT", new Date())); +// request.getRequestDispatcher("/WEB-INF/student/studentUpdatePassword.jsp").forward(request, response); +// } +// +// } +// // request.setCharacterEncoding("utf-8"); +// // HttpSession session = request.getSession(); +// // Student student= (Student)session.getAttribute("student"); +// // +// // String studentid = student.getS_id(); +// // String newpassword = request.getParameter("student-newpassword"); +// // String ennewpassword = request.getParameter("student-ennewpassword"); +// // String regex = "^[\\w]{3,12}$"; +// // boolean flag = newpassword.matches(regex); +// // if (!flag) { +// // request.setAttribute("update_msg", "密码格式错误,重新提交!"+String.format("%tT",new Date())); +// // request.getRequestDispatcher("/WEB-INF/student/studentUpdatePassword.jsp").forward(request, response); +// // } else if (!newpassword.equals(ennewpassword)) { +// // request.setAttribute("update_msg", "密码确认错误,请重新提交!" + String.format("%tT", new Date())); +// // request.getRequestDispatcher("/WEB-INF/student/studentUpdatePassword.jsp").forward(request, response); +// // } else { +// // +// // StudentService service= new StudentServiceImpl(); +// // service.updatePassword(studentid,newpassword); +// // +// // Student newStudent = service.findStudentById(student); +// // student = newStudent; +// // session.setAttribute("student",student); +// // +// // request.setAttribute("update_msg", "修改成功!" + String.format("%tT", new Date())); +// // request.getRequestDispatcher("/WEB-INF/student/studentUpdatePassword.jsp").forward(request, response); +// // } +// // +// // } +// +// protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// doPost(request,response); +// } +//} \ No newline at end of file diff --git a/src/web/servlet/student/StudentSelectCourseListServlet.java b/src/web/servlet/student/StudentSelectCourseListServlet.java index c48cc88..9ec56ca 100644 --- a/src/web/servlet/student/StudentSelectCourseListServlet.java +++ b/src/web/servlet/student/StudentSelectCourseListServlet.java @@ -18,11 +18,16 @@ import java.util.List; @WebServlet("/studentSelectCourseListServlet") public class StudentSelectCourseListServlet extends HttpServlet { + // 处理POST请求 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // 设置请求编码为utf-8 request.setCharacterEncoding("utf-8"); + // 获取当前会话 HttpSession session = request.getSession(); + // 从会话中获取学生对象 Student student= (Student)session.getAttribute("student"); + // 从会话中获取管理员对象 Admin admin =(Admin)session.getAttribute("admin"); //调用StudentService完成查询- @@ -32,12 +37,15 @@ public class StudentSelectCourseListServlet extends HttpServlet { //将list存入request域- request.setAttribute("selectcourses",selectcourses); //转发到list.jsp- + // 如果学生不为空,则跳转到学生选课列表页面 request.getRequestDispatcher("/WEB-INF/student/studentSelectCourseList.jsp").forward(request,response); } else if (admin != null && student == null) { + // 如果管理员不为空,学生为空,则查询所有学生的选课列表,并跳转到管理员查看所有学生选课列表页面 List selectcourses = studentService.findSelectCourseAllStudent(); request.setAttribute("selectcourses", selectcourses); request.getRequestDispatcher("/WEB-INF/admin/allStudentSelectCourseList.jsp").forward(request, response); } else { + // 否则,跳转到错误页面 request.getRequestDispatcher("error.jsp").forward(request, response); } diff --git a/src/web/servlet/teacher/AddOptionalCourseServlet.java b/src/web/servlet/teacher/AddOptionalCourseServlet.java index b9d730e..0caaa69 100644 --- a/src/web/servlet/teacher/AddOptionalCourseServlet.java +++ b/src/web/servlet/teacher/AddOptionalCourseServlet.java @@ -33,15 +33,24 @@ public class AddOptionalCourseServlet extends HttpServlet { CourseService service = new CourseServiceImpl(); Course course = service.findSelectCourseByCourseId(cid); + // 判断课程是否为空 if (course != null) { + // 设置请求属性,提示课程ID冲突 request.setAttribute("update_msg","课程ID冲突,请重新添加!"+String.format("%tT",new Date())); + // 转发到添加可选课程页面 request.getRequestDispatcher("/WEB-INF/teacher/addOptionalCourse.jsp").forward(request,response); }else { + // 创建新的课程对象 Course newCourse = new Course(); + // 设置课程ID newCourse.setC_id(cid); + // 设置课程名称 newCourse.setC_name(cname); + // 设置课程信息 newCourse.setC_info(cinfo); + // 设置教师ID newCourse.setT_id(teacher.getT_id()); + // 设置教师名称 newCourse.setT_name(teacher.getT_name()); service.addOptionalCourse(newCourse); diff --git a/src/web/servlet/teacher/TeacherListServlet.java b/src/web/servlet/teacher/TeacherListServlet.java index e306050..df6a70c 100644 --- a/src/web/servlet/teacher/TeacherListServlet.java +++ b/src/web/servlet/teacher/TeacherListServlet.java @@ -26,17 +26,26 @@ public class TeacherListServlet extends HttpServlet { //将list存入request域- request.setAttribute("teachers",teachers); + // 设置请求的字符编码为utf-8 request.setCharacterEncoding("utf-8"); + // 获取当前会话 HttpSession session = request.getSession(); + // 从会话中获取学生对象 Student student= (Student)session.getAttribute("student"); + // 从会话中获取管理员对象 Admin admin= (Admin)session.getAttribute("admin"); + // 从会话中获取教师对象 Teacher teacher= (Teacher)session.getAttribute("teacher"); + // 如果会话中存在学生对象,且不存在管理员对象和教师对象,则跳转到学生查找教师列表页面 if (student != null && admin == null && teacher == null) { request.getRequestDispatcher("/WEB-INF/student/sFindTeacherList.jsp").forward(request, response); + // 如果会话中存在管理员对象,且不存在学生对象和教师对象,则跳转到管理员查找教师列表页面 } else if (admin != null && student == null && teacher == null) { request.getRequestDispatcher("/WEB-INF/admin/aFindTeacherList.jsp").forward(request, response); + // 如果会话中存在教师对象,且不存在学生对象和管理员对象,则跳转到教师查找教师列表页面 } else if (teacher != null && admin == null && student == null) { request.getRequestDispatcher("/WEB-INF/teacher/tFindTeacherList.jsp").forward(request, response); + // 如果会话中不存在学生对象、管理员对象和教师对象,则跳转到错误页面 } else { request.getRequestDispatcher("error.jsp").forward(request, response); } diff --git a/src/web/servlet/teacher/TeacherOptionalCourseServlet.java b/src/web/servlet/teacher/TeacherOptionalCourseServlet.java index a4b323f..493c001 100644 --- a/src/web/servlet/teacher/TeacherOptionalCourseServlet.java +++ b/src/web/servlet/teacher/TeacherOptionalCourseServlet.java @@ -19,10 +19,15 @@ import java.util.List; @WebServlet("/teacherOptionalCourseServlet") public class TeacherOptionalCourseServlet extends HttpServlet { + // 处理POST请求 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // 设置请求编码为utf-8 request.setCharacterEncoding("utf-8"); + // 获取当前会话 HttpSession session = request.getSession(); + // 从会话中获取教师对象 Teacher t = (Teacher) session.getAttribute("teacher"); + // 如果教师对象不为空 if (t != null) { //调用StudentService完成查询- TeacherService service = new TeacherServiceImpl(); diff --git a/src/web/servlet/teacher/TeacherPasswordUpdateServlet.java b/src/web/servlet/teacher/TeacherPasswordUpdateServlet.java index 6da82ef..489e433 100644 --- a/src/web/servlet/teacher/TeacherPasswordUpdateServlet.java +++ b/src/web/servlet/teacher/TeacherPasswordUpdateServlet.java @@ -20,32 +20,54 @@ import java.util.Date; public class TeacherPasswordUpdateServlet extends HttpServlet { //2 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // 设置请求编码为utf-8 request.setCharacterEncoding("utf-8"); + // 获取当前会话 HttpSession session = request.getSession(); + // 从会话中获取教师对象 Teacher teacher = (Teacher)session.getAttribute("teacher"); + // 获取教师ID String teacherid = teacher.getT_id(); //3 + // 获取新密码 String newpassword = request.getParameter("teacher-newpassword"); + // 获取确认新密码 String ennewpassword = request.getParameter("teacher-ennewpassword"); + // 定义密码格式正则表达式 String regex = "^[\\w]{3,12}$"; + // 判断新密码是否符合格式 boolean flag = newpassword.matches(regex); + // 如果新密码不符合格式 if (!flag) { + // 设置错误信息 request.setAttribute("update_msg", "密码格式错误,重新提交!"+String.format("%tT",new Date())); + // 转发到修改密码页面 request.getRequestDispatcher("/WEB-INF/teacher/teacherUpdatePassword.jsp").forward(request, response); + // 如果新密码和确认新密码不一致 } else if (!newpassword.equals(ennewpassword)) { + // 设置错误信息 request.setAttribute("update_msg", "密码确认错误,请重新提交!" + String.format("%tT", new Date())); + // 转发到修改密码页面 request.getRequestDispatcher("/WEB-INF/teacher/teacherUpdatePassword.jsp").forward(request, response); + // 如果新密码和确认新密码一致 } else { + // 创建TeacherService对象 TeacherService service= new TeacherServiceImpl(); + // 调用updatePassword方法,更新密码 service.updatePassword(teacherid,newpassword); + // 根据teacherid查找新的Teacher对象 Teacher newTeacher = service.findTeacherById(teacher); + // 将新的Teacher对象赋值给teacher teacher = newTeacher; + // 将teacher对象存入session中 session.setAttribute("teacher",teacher); + // 设置update_msg属性,提示修改成功 request.setAttribute("update_msg", "修改成功!" + String.format("%tT", new Date())); + // 转发到teacherUpdatePassword.jsp页面 request.getRequestDispatcher("/WEB-INF/teacher/teacherUpdatePassword.jsp").forward(request, response); } diff --git a/src/web/servlet/teacher/UpdateOptionalCourseScoreServlet.java b/src/web/servlet/teacher/UpdateOptionalCourseScoreServlet.java index 9dfe576..6205248 100644 --- a/src/web/servlet/teacher/UpdateOptionalCourseScoreServlet.java +++ b/src/web/servlet/teacher/UpdateOptionalCourseScoreServlet.java @@ -25,30 +25,44 @@ import java.util.Date; //啊 public class UpdateOptionalCourseScoreServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // 设置请求编码为utf-8 request.setCharacterEncoding("utf-8"); + // 获取请求参数 String cid = request.getParameter("cid"); //咦 String sid = request.getParameter("sid"); String sScore = request.getParameter("student-score"); + // 创建学生服务对象 StudentService service = new StudentServiceImpl(); + // 创建课程服务对象 CourseService service1 = new CourseServiceImpl(); + // 创建选课服务对象 SelectCourseService service2 = new SelectCourseServiceImpl(); + // 根据课程id和学生id更新学生成绩 service2.upDateScoreByCidAndSid(cid,sid,sScore); + //创建一个Student对象 Student student = new Student(); + //设置Student对象的id student.setS_id(sid); + //根据Student对象的id查找学生信息 Student s = service.findStudentById(student); + //根据课程id查找选课信息 Course c = service1.findSelectCourseByCourseId(cid); + //根据课程id和学生id查找成绩信息 SelectCourse sc = service2.findScoreByCourseIdAndStudentId(cid,sid); //什么 + //将学生信息、选课信息和成绩信息存入request对象中 request.setAttribute("s",s); request.setAttribute("c",c); request.setAttribute("sc",sc); + //设置修改分数成功的提示信息 request.setAttribute("update_msg","修改分数成功!"+String.format("%tT",new Date())); + //转发到updateOptionalCourseScore.jsp页面 request.getRequestDispatcher("/WEB-INF/teacher/updateOptionalCourseScore.jsp").forward(request,response); } diff --git a/src/web/servlet/teacher/UpdateScoreServlet.java b/src/web/servlet/teacher/UpdateScoreServlet.java index db0f7c6..ea0f0c5 100644 --- a/src/web/servlet/teacher/UpdateScoreServlet.java +++ b/src/web/servlet/teacher/UpdateScoreServlet.java @@ -22,24 +22,38 @@ import java.io.IOException; public class UpdateScoreServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //中文 + // 设置请求的字符编码为utf-8 request.setCharacterEncoding("utf-8"); + // 获取请求参数cid String cid = request.getParameter("cid"); + // 获取请求参数sid String sid = request.getParameter("sid"); + // 创建StudentService对象 StudentService service = new StudentServiceImpl(); + // 创建Student对象 Student student = new Student(); + // 设置Student对象的s_id属性 student.setS_id(sid); + // 根据Student对象的s_id属性查找学生信息 + // 根据学生id查找学生信息 Student s = service.findStudentById(student); + // 创建CourseServiceImpl对象 CourseService service1 = new CourseServiceImpl(); + // 根据课程id查找选课信息 Course c = service1.findSelectCourseByCourseId(cid); + // 创建SelectCourseServiceImpl对象 SelectCourseService service2 = new SelectCourseServiceImpl(); + // 根据课程id和学生id查找成绩信息 SelectCourse sc = service2.findScoreByCourseIdAndStudentId(cid,sid); + // 将学生信息、选课信息和成绩信息存入request对象中 request.setAttribute("s",s); request.setAttribute("c",c); request.setAttribute("sc",sc); + // 转发到updateOptionalCourseScore.jsp页面 request.getRequestDispatcher("/WEB-INF/teacher/updateOptionalCourseScore.jsp").forward(request,response); } diff --git a/src/web/servlet/teacher/UpdateTeacherInfoServlet.java b/src/web/servlet/teacher/UpdateTeacherInfoServlet.java index f6daffb..bf77df4 100644 --- a/src/web/servlet/teacher/UpdateTeacherInfoServlet.java +++ b/src/web/servlet/teacher/UpdateTeacherInfoServlet.java @@ -16,19 +16,29 @@ import java.util.Date; @WebServlet("/updateTeacherInfoServlet") public class UpdateTeacherInfoServlet extends HttpServlet { + // 处理POST请求 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // 设置请求编码为utf-8 request.setCharacterEncoding("utf-8"); + // 获取教师ID String tid = request.getParameter("teacher-id"); + // 获取教师姓名 String name = request.getParameter("teacher-name"); + // 获取教师性别 String sex = request.getParameter("teacher-sex"); + // 获取教师学历 String education = request.getParameter("teacher-education"); + // 获取教师职称 String title = request.getParameter("teacher-title"); Teacher updateTeacher = new Teacher(); //判断输入位数是否大于数据库位数- + //判断输入的姓名、学历、职称是否合法 if (name.length() > 4 || education.length() > 20 || title.length()>24 || name.contains("<") || education.contains("<") || title.contains("<")) { + //将错误信息存入request对象中 request.setAttribute("update_msg","格式错误,请重新提交!"+String.format("%tT",new Date())); + //转发到updateTeacherServlet页面 request.getRequestDispatcher("updateTeacherServlet?tid="+tid).forward(request, response); }else { //封装教师对象- diff --git a/src/web/servlet/teacher/UpdateTeacherOptionalCourseServlet.java b/src/web/servlet/teacher/UpdateTeacherOptionalCourseServlet.java index 0ae3b62..59adf6b 100644 --- a/src/web/servlet/teacher/UpdateTeacherOptionalCourseServlet.java +++ b/src/web/servlet/teacher/UpdateTeacherOptionalCourseServlet.java @@ -18,12 +18,19 @@ public class UpdateTeacherOptionalCourseServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); // HttpSession session = request.getSession();- + // 获取请求参数中的课程ID String cid = (String)request.getParameter("cid"); + // 创建TeacherService对象 TeacherService service = new TeacherServiceImpl(); + // 根据课程ID查找可选课程 Course c = service.findOptionalCourseByCourseId(cid); + // 将课程对象存入请求属性中 request.setAttribute("course",c); + // 输出课程ID System.out.println(c.getC_id()); + // 输出课程名称 System.out.println(c.getC_name()); + // 输出课程信息 System.out.println(c.getC_info()); request.getRequestDispatcher("/WEB-INF/teacher/updateTeacherOptionalCourseInfo.jsp").forward(request,response); diff --git a/src/web/servlet/teacher/UpdateTeacherServlet.java b/src/web/servlet/teacher/UpdateTeacherServlet.java index c8b619c..1b2c3d8 100644 --- a/src/web/servlet/teacher/UpdateTeacherServlet.java +++ b/src/web/servlet/teacher/UpdateTeacherServlet.java @@ -23,15 +23,24 @@ import java.util.List; @WebServlet("/updateTeacherServlet") //1 public class UpdateTeacherServlet extends HttpServlet { + // 处理POST请求 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // 设置请求编码为utf-8 request.setCharacterEncoding("utf-8"); + // 获取当前会话 HttpSession session = request.getSession(); + // 获取请求参数中的教师id String teacherid = request.getParameter("tid"); + // 创建教师对象 Teacher teacher = new Teacher(); + // 设置教师id teacher.setT_id(teacherid); + // 创建教师服务对象 TeacherService service = new TeacherServiceImpl(); + // 根据教师id查找教师信息 Teacher newTeacher = service.findTeacherById(teacher); + // 将教师信息存入请求属性中 request.setAttribute("teacher",newTeacher); CDCService service2 = new CDCServiceImpl(); @@ -40,6 +49,7 @@ public class UpdateTeacherServlet extends HttpServlet { List departmentList = service2.findAllDepartment(); List classList = service2.findAllClass(); + //将collegeList、departmentList、classList放入session中 session.setAttribute("collegeLists",collegeList); session.setAttribute("departmentLists",departmentList); session.setAttribute("classLists",classList); From b49f0cead6b3ad32c201d6c74a22e7a2875aa026 Mon Sep 17 00:00:00 2001 From: yangmingjie <2691388447@qq.com> Date: Wed, 18 Dec 2024 17:38:42 +0800 Subject: [PATCH 5/6] =?UTF-8?q?=E6=9D=A8=E5=90=8D=E6=9D=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/lay/modules/carousel.js | 157 +++++++++++++++++- web/lay/modules/code.js | 58 ++++++- web/lay/modules/colorpicker.js | 198 +++++++++++++++++++++- web/lay/modules/element.js | 171 ++++++++++++++++++- web/lay/modules/flow.js | 118 +++++++++++++- web/lay/modules/form.js | 109 ++++++++++++- web/lay/modules/laydate.js | 290 ++++++++++++++++++++++++++++++++- web/lay/modules/layedit.js | 93 ++++++++++- web/lay/modules/layer.js | 130 ++++++++++++++- web/lay/modules/laypage.js | 138 +++++++++++++++- web/lay/modules/laytpl.js | 86 +++++++++- web/lay/modules/rate.js | 106 +++++++++++- web/lay/modules/slider.js | 166 ++++++++++++++++++- web/lay/modules/transfer.js | 155 +++++++++++++++++- web/lay/modules/tree.js | 148 ++++++++++++++++- web/lay/modules/upload.js | 114 ++++++++++++- web/lay/modules/util.js | 179 +++++++++++++++++++- 17 files changed, 2399 insertions(+), 17 deletions(-) diff --git a/web/lay/modules/carousel.js b/web/lay/modules/carousel.js index 2c4521b..9ecb5ee 100644 --- a/web/lay/modules/carousel.js +++ b/web/lay/modules/carousel.js @@ -1,2 +1,157 @@ /** layui-v2.5.6 MIT License By https://www.layui.com */ - ;layui.define("jquery",function(e){"use strict";var i=layui.$,n=(layui.hint(),layui.device(),{config:{},set:function(e){var n=this;return n.config=i.extend({},n.config,e),n},on:function(e,i){return layui.onevent.call(this,t,e,i)}}),t="carousel",a="layui-this",l=">*[carousel-item]>*",o="layui-carousel-left",r="layui-carousel-right",d="layui-carousel-prev",s="layui-carousel-next",u="layui-carousel-arrow",c="layui-carousel-ind",m=function(e){var t=this;t.config=i.extend({},t.config,n.config,e),t.render()};m.prototype.config={width:"600px",height:"280px",full:!1,arrow:"hover",indicator:"inside",autoplay:!0,interval:3e3,anim:"",trigger:"click",index:0},m.prototype.render=function(){var e=this,n=e.config;n.elem=i(n.elem),n.elem[0]&&(e.elemItem=n.elem.find(l),n.index<0&&(n.index=0),n.index>=e.elemItem.length&&(n.index=e.elemItem.length-1),n.interval<800&&(n.interval=800),n.full?n.elem.css({position:"fixed",width:"100%",height:"100%",zIndex:9999}):n.elem.css({width:n.width,height:n.height}),n.elem.attr("lay-anim",n.anim),e.elemItem.eq(n.index).addClass(a),e.elemItem.length<=1||(e.indicator(),e.arrow(),e.autoplay(),e.events()))},m.prototype.reload=function(e){var n=this;clearInterval(n.timer),n.config=i.extend({},n.config,e),n.render()},m.prototype.prevIndex=function(){var e=this,i=e.config,n=i.index-1;return n<0&&(n=e.elemItem.length-1),n},m.prototype.nextIndex=function(){var e=this,i=e.config,n=i.index+1;return n>=e.elemItem.length&&(n=0),n},m.prototype.addIndex=function(e){var i=this,n=i.config;e=e||1,n.index=n.index+e,n.index>=i.elemItem.length&&(n.index=0)},m.prototype.subIndex=function(e){var i=this,n=i.config;e=e||1,n.index=n.index-e,n.index<0&&(n.index=i.elemItem.length-1)},m.prototype.autoplay=function(){var e=this,i=e.config;i.autoplay&&(clearInterval(e.timer),e.timer=setInterval(function(){e.slide()},i.interval))},m.prototype.arrow=function(){var e=this,n=e.config,t=i(['",'"].join(""));n.elem.attr("lay-arrow",n.arrow),n.elem.find("."+u)[0]&&n.elem.find("."+u).remove(),n.elem.append(t),t.on("click",function(){var n=i(this),t=n.attr("lay-type");e.slide(t)})},m.prototype.indicator=function(){var e=this,n=e.config,t=e.elemInd=i(['
    ',function(){var i=[];return layui.each(e.elemItem,function(e){i.push("")}),i.join("")}(),"
"].join(""));n.elem.attr("lay-indicator",n.indicator),n.elem.find("."+c)[0]&&n.elem.find("."+c).remove(),n.elem.append(t),"updown"===n.anim&&t.css("margin-top",-(t.height()/2)),t.find("li").on("hover"===n.trigger?"mouseover":n.trigger,function(){var t=i(this),a=t.index();a>n.index?e.slide("add",a-n.index):a=e.elemItem.length&&(n.index=e.elemItem.length-1),n.interval<800&&(n.interval=800),n.full?n.elem.css({position:"fixed",width:"100%",height:"100%",zIndex:9999}):n.elem.css({width:n.width,height:n.height}),n.elem.attr("lay-anim",n.anim),e.elemItem.eq(n.index).addClass(a),e.elemItem.length<=1||(e.indicator(),e.arrow(),e.autoplay(),e.events())) + }, + + // 重新加载轮播图 + m.prototype.reload=function(e){ + var n=this; + clearInterval(n.timer), + n.config=i.extend({},n.config,e), + n.render() + }, + + // 获取上一项的索引 + m.prototype.prevIndex=function(){ + var e=this,i=e.config,n=i.index-1; + return n<0&&(n=e.elemItem.length-1),n + }, + + // 获取下一项的索引 + m.prototype.nextIndex=function(){ + var e=this,i=e.config,n=i.index+1; + return n>=e.elemItem.length&&(n=0),n + }, + + // 增加索引 + m.prototype.addIndex=function(e){ + var i=this,n=i.config; + e=e||1,n.index=n.index+e,n.index>=i.elemItem.length&&(n.index=0) + }, + + // 减少索引 + m.prototype.subIndex=function(e){ + var i=this,n=i.config; + e=e||1,n.index=n.index-e,n.index<0&&(n.index=i.elemItem.length-1) + }, + + // 自动播放 + m.prototype.autoplay=function(){ + var e=this,i=e.config; + i.autoplay&&(clearInterval(e.timer),e.timer=setInterval(function(){ + e.slide() + },i.interval)) + }, + + // 箭头按钮 + m.prototype.arrow=function(){ + var e=this,n=e.config,t=i(['", + '"].join("")); + + // 设置箭头的显示方式 + n.elem.attr("lay-arrow",n.arrow), + n.elem.find("."+u)[0]&&n.elem.find("."+u).remove(), + n.elem.append(t), + t.on("click",function(){ + var n=i(this),t=n.attr("lay-type"); + e.slide(t) + }) + }, + + // 指示器 + m.prototype.indicator=function(){ + var e=this,n=e.config,t=e.elemInd=i(['
    ',function(){ + var i=[]; + return layui.each(e.elemItem,function(e){ + i.push("") + }),i.join("") + }(),"
"].join("")); + + // 设置指示器的显示方式 + n.elem.attr("lay-indicator",n.indicator), + n.elem.find("."+c)[0]&&n.elem.find("."+c).remove(), + n.elem.append(t),"updown"===n.anim&&t.css("margin-top",-(t.height()/2)), + t.find("li").on("hover"===n.trigger?"mouseover":n.trigger,function(){ + var t=i(this),a=t.index(); + a>n.index?e.slide("add",a-n.index):a/g,">").replace(/'/g,"'").replace(/"/g,""")),c.html('
  1. '+o.replace(/[\r\t\n]+/g,"
  2. ")+"
"),c.find(">.layui-code-h3")[0]||c.prepend('

'+(c.attr("lay-title")||e.title||"code")+(e.about?'layui.code':"")+"

");var d=c.find(">.layui-code-ol");c.addClass("layui-box layui-code-view"),(c.attr("lay-skin")||e.skin)&&c.addClass("layui-code-"+(c.attr("lay-skin")||e.skin)),(d.find("li").length/100|0)>0&&d.css("margin-left",(d.find("li").length/100|0)+"px"),(c.attr("lay-height")||e.height)&&d.css("max-height",c.attr("lay-height")||e.height)})})}).addcss("modules/code.css","skincodecss"); \ No newline at end of file +;layui.define("jquery",function(e){"use strict"; + + // 引入 layui 的 $(jQuery)模块 + var a=layui.$, + // layui 文档模块的 URL 地址 + l="http://www.layui.com/doc/modules/code.html"; + + // 定义模块 "code",并执行传入的函数 + e("code",function(e){ + var t=[]; // 初始化一个空数组,用于存储每个代码块元素 + // 如果 e 参数未定义,则默认为空对象 + e=e||{}, + // 如果 e 中没有指定 about,则默认为 true + e.about=!("about"in e)||e.about, + // 获取所有指定的代码块元素,默认为 .layui-code + e.elem=a(e.elem||".layui-code"), + // 遍历所有代码块元素 + e.elem.each(function(){ + t.push(this); // 将每个代码块元素添加到数组 t 中 + }), + + // 倒序遍历每个代码块元素 + layui.each(t.reverse(),function(t,i){ + var c=a(i), // 获取当前代码块元素 + o=c.html(); // 获取当前代码块的 HTML 内容 + + // 如果代码块元素有 lay-encode 属性或者传入参数 e.encode 为真,进行 HTML 转义 + (c.attr("lay-encode")||e.encode)&&(o=o.replace(/&(?!#?[a-zA-Z0-9]+;)/g,"&") + .replace(//g,">") + .replace(/'/g,"'") + .replace(/"/g,""")); + + // 将转义后的 HTML 内容分行显示,每行一个
  • 元素 + c.html('
    1. '+o.replace(/[\r\t\n]+/g,"
    2. ")+"
    "); + + // 如果没有标题,插入一个标题(h3),标题内容可以通过 lay-title 来指定 + c.find(">.layui-code-h3")[0] || c.prepend('

    '+(c.attr("lay-title")||e.title||"code")+(e.about?'layui.code':"")+"

    "); + + // 获取代码块中的
      元素 + var d=c.find(">.layui-code-ol"); + + // 为代码块添加类名,设置样式 + c.addClass("layui-box layui-code-view"), + + // 如果有指定 skin 或 lay-skin,给代码块添加相应的样式 + (c.attr("lay-skin")||e.skin) && c.addClass("layui-code-"+(c.attr("lay-skin")||e.skin)), + + // 如果代码行数超过100行,设置左边距,使其有缩进效果 + (d.find("li").length/100|0)>0 && d.css("margin-left",(d.find("li").length/100|0)+"px"), + + // 如果指定了 lay-height 或者传入的参数 e.height,设置最大高度 + (c.attr("lay-height")||e.height) && d.css("max-height",c.attr("lay-height")||e.height) + }) + })}) + // 引入代码块的 CSS 样式 + .addcss("modules/code.css","skincodecss"); diff --git a/web/lay/modules/colorpicker.js b/web/lay/modules/colorpicker.js index 0fc6395..e427967 100644 --- a/web/lay/modules/colorpicker.js +++ b/web/lay/modules/colorpicker.js @@ -1,2 +1,198 @@ /** layui-v2.5.6 MIT License By https://www.layui.com */ - ;layui.define("jquery",function(e){"use strict";var i=layui.jquery,o={config:{},index:layui.colorpicker?layui.colorpicker.index+1e4:0,set:function(e){var o=this;return o.config=i.extend({},o.config,e),o},on:function(e,i){return layui.onevent.call(this,"colorpicker",e,i)}},r=function(){var e=this,i=e.config;return{config:i}},t="colorpicker",n="layui-show",l="layui-colorpicker",c=".layui-colorpicker-main",a="layui-icon-down",s="layui-icon-close",f="layui-colorpicker-trigger-span",d="layui-colorpicker-trigger-i",u="layui-colorpicker-side",p="layui-colorpicker-side-slider",g="layui-colorpicker-basis",v="layui-colorpicker-alpha-bgcolor",h="layui-colorpicker-alpha-slider",m="layui-colorpicker-basis-cursor",b="layui-colorpicker-main-input",k=function(e){var i={h:0,s:0,b:0},o=Math.min(e.r,e.g,e.b),r=Math.max(e.r,e.g,e.b),t=r-o;return i.b=r,i.s=0!=r?255*t/r:0,0!=i.s?e.r==r?i.h=(e.g-e.b)/t:e.g==r?i.h=2+(e.b-e.r)/t:i.h=4+(e.r-e.g)/t:i.h=-1,r==o&&(i.h=0),i.h*=60,i.h<0&&(i.h+=360),i.s*=100/255,i.b*=100/255,i},y=function(e){var e=e.indexOf("#")>-1?e.substring(1):e;if(3==e.length){var i=e.split("");e=i[0]+i[0]+i[1]+i[1]+i[2]+i[2]}e=parseInt(e,16);var o={r:e>>16,g:(65280&e)>>8,b:255&e};return k(o)},x=function(e){var i={},o=e.h,r=255*e.s/100,t=255*e.b/100;if(0==r)i.r=i.g=i.b=t;else{var n=t,l=(255-r)*t/255,c=(n-l)*(o%60)/60;360==o&&(o=0),o<60?(i.r=n,i.b=l,i.g=l+c):o<120?(i.g=n,i.b=l,i.r=n-c):o<180?(i.g=n,i.r=l,i.b=l+c):o<240?(i.b=n,i.r=l,i.g=n-c):o<300?(i.b=n,i.g=l,i.r=l+c):o<360?(i.r=n,i.g=l,i.b=n-c):(i.r=0,i.g=0,i.b=0)}return{r:Math.round(i.r),g:Math.round(i.g),b:Math.round(i.b)}},C=function(e){var o=x(e),r=[o.r.toString(16),o.g.toString(16),o.b.toString(16)];return i.each(r,function(e,i){1==i.length&&(r[e]="0"+i)}),r.join("")},P=function(e){var i=/[0-9]{1,3}/g,o=e.match(i)||[];return{r:o[0],g:o[1],b:o[2]}},B=i(window),w=i(document),D=function(e){var r=this;r.index=++o.index,r.config=i.extend({},r.config,o.config,e),r.render()};D.prototype.config={color:"",size:null,alpha:!1,format:"hex",predefine:!1,colors:["#009688","#5FB878","#1E9FFF","#FF5722","#FFB800","#01AAED","#999","#c00","#ff8c00","#ffd700","#90ee90","#00ced1","#1e90ff","#c71585","rgb(0, 186, 189)","rgb(255, 120, 0)","rgb(250, 212, 0)","#393D49","rgba(0,0,0,.5)","rgba(255, 69, 0, 0.68)","rgba(144, 240, 144, 0.5)","rgba(31, 147, 255, 0.73)"]},D.prototype.render=function(){var e=this,o=e.config,r=i(['
      ',"",'3&&(o.alpha&&"rgb"==o.format||(e="#"+C(k(P(o.color))))),"background: "+e):e}()+'">','',"","","
      "].join("")),t=i(o.elem);o.size&&r.addClass("layui-colorpicker-"+o.size),t.addClass("layui-inline").html(e.elemColorBox=r),e.color=e.elemColorBox.find("."+f)[0].style.background,e.events()},D.prototype.renderPicker=function(){var e=this,o=e.config,r=e.elemColorBox[0],t=e.elemPicker=i(['
      ','
      ','
      ','
      ','
      ','
      ',"
      ",'
      ','
      ',"
      ","
      ",'
      ','
      ','
      ',"
      ","
      ",function(){if(o.predefine){var e=['
      '];return layui.each(o.colors,function(i,o){e.push(['
      ','
      ',"
      "].join(""))}),e.push("
      "),e.join("")}return""}(),'
      ','
      ','',"
      ",'
      ','','',"","
      "].join(""));e.elemColorBox.find("."+f)[0];i(c)[0]&&i(c).data("index")==e.index?e.removePicker(D.thisElemInd):(e.removePicker(D.thisElemInd),i("body").append(t)),D.thisElemInd=e.index,D.thisColor=r.style.background,e.position(),e.pickerEvents()},D.prototype.removePicker=function(e){var o=this;o.config;return i("#layui-colorpicker"+(e||o.index)).remove(),o},D.prototype.position=function(){var e=this,i=e.config,o=e.bindElem||e.elemColorBox[0],r=e.elemPicker[0],t=o.getBoundingClientRect(),n=r.offsetWidth,l=r.offsetHeight,c=function(e){return e=e?"scrollLeft":"scrollTop",document.body[e]|document.documentElement[e]},a=function(e){return document.documentElement[e?"clientWidth":"clientHeight"]},s=5,f=t.left,d=t.bottom;f-=(n-o.offsetWidth)/2,d+=s,f+n+s>a("width")?f=a("width")-n-s:fa()&&(d=t.top>l?t.top-l:a()-l,d-=2*s),i.position&&(r.style.position=i.position),r.style.left=f+("fixed"===i.position?0:c(1))+"px",r.style.top=d+("fixed"===i.position?0:c())+"px"},D.prototype.val=function(){var e=this,i=(e.config,e.elemColorBox.find("."+f)),o=e.elemPicker.find("."+b),r=i[0],t=r.style.backgroundColor;if(t){var n=k(P(t)),l=i.attr("lay-type");if(e.select(n.h,n.s,n.b),"torgb"===l&&o.find("input").val(t),"rgba"===l){var c=P(t);if(3==(t.match(/[0-9]{1,3}/g)||[]).length)o.find("input").val("rgba("+c.r+", "+c.g+", "+c.b+", 1)"),e.elemPicker.find("."+h).css("left",280);else{o.find("input").val(t);var a=280*t.slice(t.lastIndexOf(",")+1,t.length-1);e.elemPicker.find("."+h).css("left",a)}e.elemPicker.find("."+v)[0].style.background="linear-gradient(to right, rgba("+c.r+", "+c.g+", "+c.b+", 0), rgb("+c.r+", "+c.g+", "+c.b+"))"}}else e.select(0,100,100),o.find("input").val(""),e.elemPicker.find("."+v)[0].style.background="",e.elemPicker.find("."+h).css("left",280)},D.prototype.side=function(){var e=this,o=e.config,r=e.elemColorBox.find("."+f),t=r.attr("lay-type"),n=e.elemPicker.find("."+u),l=e.elemPicker.find("."+p),c=e.elemPicker.find("."+g),y=e.elemPicker.find("."+m),C=e.elemPicker.find("."+v),w=e.elemPicker.find("."+h),D=l[0].offsetTop/180*360,E=100-(y[0].offsetTop+3)/180*100,H=(y[0].offsetLeft+3)/260*100,W=Math.round(w[0].offsetLeft/280*100)/100,j=e.elemColorBox.find("."+d),F=e.elemPicker.find(".layui-colorpicker-pre").children("div"),L=function(i,n,l,c){e.select(i,n,l);var f=x({h:i,s:n,b:l});if(j.addClass(a).removeClass(s),r[0].style.background="rgb("+f.r+", "+f.g+", "+f.b+")","torgb"===t&&e.elemPicker.find("."+b).find("input").val("rgb("+f.r+", "+f.g+", "+f.b+")"),"rgba"===t){var d=0;d=280*c,w.css("left",d),e.elemPicker.find("."+b).find("input").val("rgba("+f.r+", "+f.g+", "+f.b+", "+c+")"),r[0].style.background="rgba("+f.r+", "+f.g+", "+f.b+", "+c+")",C[0].style.background="linear-gradient(to right, rgba("+f.r+", "+f.g+", "+f.b+", 0), rgb("+f.r+", "+f.g+", "+f.b+"))"}o.change&&o.change(e.elemPicker.find("."+b).find("input").val())},M=i(['
      t&&(r=t);var l=r/180*360;D=l,L(l,H,E,W),e.preventDefault()};Y(r),e.preventDefault()}),n.on("click",function(e){var o=e.clientY-i(this).offset().top;o<0&&(o=0),o>this.offsetHeight&&(o=this.offsetHeight);var r=o/180*360;D=r,L(r,H,E,W),e.preventDefault()}),y.on("mousedown",function(e){var i=this.offsetTop,o=this.offsetLeft,r=e.clientY,t=e.clientX,n=function(e){var n=i+(e.clientY-r),l=o+(e.clientX-t),a=c[0].offsetHeight-3,s=c[0].offsetWidth-3;n<-3&&(n=-3),n>a&&(n=a),l<-3&&(l=-3),l>s&&(l=s);var f=(l+3)/260*100,d=100-(n+3)/180*100;E=d,H=f,L(D,f,d,W),e.preventDefault()};layui.stope(e),Y(n),e.preventDefault()}),c.on("mousedown",function(e){var o=e.clientY-i(this).offset().top-3+B.scrollTop(),r=e.clientX-i(this).offset().left-3+B.scrollLeft();o<-3&&(o=-3),o>this.offsetHeight-3&&(o=this.offsetHeight-3),r<-3&&(r=-3),r>this.offsetWidth-3&&(r=this.offsetWidth-3);var t=(r+3)/260*100,n=100-(o+3)/180*100;E=n,H=t,L(D,t,n,W),e.preventDefault(),y.trigger(e,"mousedown")}),w.on("mousedown",function(e){var i=this.offsetLeft,o=e.clientX,r=function(e){var r=i+(e.clientX-o),t=C[0].offsetWidth;r<0&&(r=0),r>t&&(r=t);var n=Math.round(r/280*100)/100;W=n,L(D,H,E,n),e.preventDefault()};Y(r),e.preventDefault()}),C.on("click",function(e){var o=e.clientX-i(this).offset().left;o<0&&(o=0),o>this.offsetWidth&&(o=this.offsetWidth);var r=Math.round(o/280*100)/100;W=r,L(D,H,E,r),e.preventDefault()}),F.each(function(){i(this).on("click",function(){i(this).parent(".layui-colorpicker-pre").addClass("selected").siblings().removeClass("selected");var e,o=this.style.backgroundColor,r=k(P(o)),t=o.slice(o.lastIndexOf(",")+1,o.length-1);D=r.h,H=r.s,E=r.b,3==(o.match(/[0-9]{1,3}/g)||[]).length&&(t=1),W=t,e=280*t,L(r.h,r.s,r.b,t)})})},D.prototype.select=function(e,i,o,r){var t=this,n=(t.config,C({h:e,s:100,b:100})),l=C({h:e,s:i,b:o}),c=e/360*180,a=180-o/100*180-3,s=i/100*260-3;t.elemPicker.find("."+p).css("top",c),t.elemPicker.find("."+g)[0].style.background="#"+n,t.elemPicker.find("."+m).css({top:a,left:s}),"change"!==r&&t.elemPicker.find("."+b).find("input").val("#"+l)},D.prototype.pickerEvents=function(){var e=this,o=e.config,r=e.elemColorBox.find("."+f),t=e.elemPicker.find("."+b+" input"),n={clear:function(i){r[0].style.background="",e.elemColorBox.find("."+d).removeClass(a).addClass(s),e.color="",o.done&&o.done(""),e.removePicker()},confirm:function(i,n){var l=t.val(),c=l,f={};if(l.indexOf(",")>-1){if(f=k(P(l)),e.select(f.h,f.s,f.b),r[0].style.background=c="#"+C(f),(l.match(/[0-9]{1,3}/g)||[]).length>3&&"rgba"===r.attr("lay-type")){var u=280*l.slice(l.lastIndexOf(",")+1,l.length-1);e.elemPicker.find("."+h).css("left",u),r[0].style.background=l,c=l}}else f=y(l),r[0].style.background=c="#"+C(f),e.elemColorBox.find("."+d).removeClass(s).addClass(a);return"change"===n?(e.select(f.h,f.s,f.b,n),void(o.change&&o.change(c))):(e.color=l,o.done&&o.done(l),void e.removePicker())}};e.elemPicker.on("click","*[colorpicker-events]",function(){var e=i(this),o=e.attr("colorpicker-events");n[o]&&n[o].call(this,e)}),t.on("keyup",function(e){var o=i(this);n.confirm.call(this,o,13===e.keyCode?null:"change")})},D.prototype.events=function(){var e=this,o=e.config,r=e.elemColorBox.find("."+f);e.elemColorBox.on("click",function(){e.renderPicker(),i(c)[0]&&(e.val(),e.side())}),o.elem[0]&&!e.elemColorBox[0].eventHandler&&(w.on("click",function(o){if(!i(o.target).hasClass(l)&&!i(o.target).parents("."+l)[0]&&!i(o.target).hasClass(c.replace(/\./g,""))&&!i(o.target).parents(c)[0]&&e.elemPicker){if(e.color){var t=k(P(e.color));e.select(t.h,t.s,t.b)}else e.elemColorBox.find("."+d).removeClass(a).addClass(s);r[0].style.background=e.color||"",e.removePicker()}}),B.on("resize",function(){return!(!e.elemPicker||!i(c)[0])&&void e.position()}),e.elemColorBox[0].eventHandler=!0)},o.render=function(e){var i=new D(e);return r.call(i)},e(t,o)}); \ No newline at end of file + +// 定义layui模块,依赖于jquery +layui.define("jquery", function(e) { + "use strict"; + var i = layui.jquery; // 获取jquery对象 + var o = { + config: {}, // 配置对象 + index: layui.colorpicker ? layui.colorpicker.index + 1e4 : 0, // 唯一标识符 + // 设置配置项 + set: function(e) { + var o = this; + return o.config = i.extend({}, o.config, e), o; + }, + // 事件监听 + on: function(e, i) { + return layui.onevent.call(this, "colorpicker", e, i); + } + }; + + // 颜色转换函数:RGB -> HSB + var k = function(e) { + var i = { h: 0, s: 0, b: 0 }; // 初始HSB值 + var o = Math.min(e.r, e.g, e.b); // 最小颜色值 + var r = Math.max(e.r, e.g, e.b); // 最大颜色值 + var t = r - o; // 色差 + + i.b = r; + i.s = 0 != r ? 255 * t / r : 0; + if (i.s != 0) { + if (e.r == r) { + i.h = (e.g - e.b) / t; + } else if (e.g == r) { + i.h = 2 + (e.b - e.r) / t; + } else { + i.h = 4 + (e.r - e.g) / t; + } + } + i.h *= 60; + if (i.h < 0) { + i.h += 360; + } + i.s *= 100 / 255; + i.b *= 100 / 255; + + return i; + }; + + // 将十六进制颜色转为HSB值 + var y = function(e) { + var e = e.indexOf("#") > -1 ? e.substring(1) : e; + if (e.length == 3) { + var i = e.split(""); + e = i[0] + i[0] + i[1] + i[1] + i[2] + i[2]; + } + e = parseInt(e, 16); + var o = { r: e >> 16, g: (65280 & e) >> 8, b: 255 & e }; // 获取RGB值 + return k(o); + }; + + // 将HSB值转换为十六进制颜色 + var C = function(e) { + var o = x(e), + r = [o.r.toString(16), o.g.toString(16), o.b.toString(16)]; + i.each(r, function(e, i) { + if (i.length == 1) { + r[e] = "0" + i; // 补齐为两位 + } + }); + return r.join(""); // 返回十六进制颜色值 + }; + + // RGB值转换为HSB + var x = function(e) { + var i = {}, o = e.h, r = 255 * e.s / 100, t = 255 * e.b / 100; + if (r == 0) { + i.r = i.g = i.b = t; + } else { + var n = t, l = (255 - r) * t / 255, c = (n - l) * (o % 60) / 60; + o = o == 360 ? 0 : o; + + if (o < 60) { + i.r = n; + i.b = l; + i.g = l + c; + } else if (o < 120) { + i.g = n; + i.b = l; + i.r = n - c; + } else if (o < 180) { + i.g = n; + i.r = l; + i.b = l + c; + } else if (o < 240) { + i.b = n; + i.r = l; + i.g = n - c; + } else if (o < 300) { + i.b = n; + i.g = l; + i.r = l + c; + } else { + i.r = 0; + i.g = 0; + i.b = 0; + } + } + return { r: Math.round(i.r), g: Math.round(i.g), b: Math.round(i.b) }; + }; + + // 将RGB值转换为十六进制 + var P = function(e) { + var i = /[0-9]{1,3}/g, o = e.match(i) || []; + return { r: o[0], g: o[1], b: o[2] }; + }; + + // 滚动条事件 + var B = i(window), w = i(document); + + // 初始化颜色选择器 + var D = function(e) { + var r = this; + r.index = ++o.index; + r.config = i.extend({}, r.config, o.config, e); + r.render(); + }; + + D.prototype.config = { + color: "", // 默认颜色 + size: null, // 大小 + alpha: false, // 是否支持透明度 + format: "hex", // 颜色格式 + predefine: false, // 是否使用预定义颜色 + colors: [ + "#009688", "#5FB878", "#1E9FFF", "#FF5722", "#FFB800", "#01AAED", + "#999", "#c00", "#ff8c00", "#ffd700", "#90ee90", "#00ced1", + "#1e90ff", "#c71585", "rgb(0, 186, 189)", "rgb(255, 120, 0)", + "rgb(250, 212, 0)", "#393D49", "rgba(0,0,0,.5)", "rgba(255, 69, 0, 0.68)", + "rgba(144, 240, 144, 0.5)", "rgba(31, 147, 255, 0.73)" + ] + }; + + // 渲染颜色选择器 + D.prototype.render = function() { + var e = this, o = e.config; + var r = i(['
      ', + "", + ' 3 && !(o.alpha && "rgb" == o.format)) { + e = "#" + C(k(P(o.color))); + } + } + return "background: " + e; + }() + '">', + '', + "", + "", + "
      "].join("")); + + // 绑定颜色选择框 + var t = i(o.elem); + if (o.size) { + r.addClass("layui-colorpicker-" + o.size); + } + t.addClass("layui-inline").html(e.elemColorBox = r); + e.color = e.elemColorBox.find("." + f)[0].style.background; + e.events(); + }; + + // 渲染颜色选择器的面板 + D.prototype.renderPicker = function() { + var e = this, o = e.config, r = e.elemColorBox[0], + t = e.elemPicker = i([ + '
      ', + '
      ', + '
      ', + '
      ', + '
      ', + '
      ', + "
      ", + '
      ', + '
      ', + "
      ", + "
      ", + '
      ', + '
      ', + '
      ', + "
      ", + "
      ", + function() { + if (o.predefine) { + var e = ['
      ']; + layui.each(o.colors, function(i, o) diff --git a/web/lay/modules/element.js b/web/lay/modules/element.js index 290a1e8..875ccb1 100644 --- a/web/lay/modules/element.js +++ b/web/lay/modules/element.js @@ -1,2 +1,171 @@ /** layui-v2.5.6 MIT License By https://www.layui.com */ - ;layui.define("jquery",function(t){"use strict";var a=layui.$,i=(layui.hint(),layui.device()),e="element",l="layui-this",n="layui-show",s=function(){this.config={}};s.prototype.set=function(t){var i=this;return a.extend(!0,i.config,t),i},s.prototype.on=function(t,a){return layui.onevent.call(this,e,t,a)},s.prototype.tabAdd=function(t,i){var e=".layui-tab-title",l=a(".layui-tab[lay-filter="+t+"]"),n=l.children(e),s=n.children(".layui-tab-bar"),o=l.children(".layui-tab-content"),r='
    1. "+(i.title||"unnaming")+"
    2. ";return s[0]?s.before(r):n.append(r),o.append('
      '+(i.content||"")+"
      "),f.hideTabMore(!0),f.tabAuto(),this},s.prototype.tabDelete=function(t,i){var e=".layui-tab-title",l=a(".layui-tab[lay-filter="+t+"]"),n=l.children(e),s=n.find('>li[lay-id="'+i+'"]');return f.tabDelete(null,s),this},s.prototype.tabChange=function(t,i){var e=".layui-tab-title",l=a(".layui-tab[lay-filter="+t+"]"),n=l.children(e),s=n.find('>li[lay-id="'+i+'"]');return f.tabClick.call(s[0],null,null,s),this},s.prototype.tab=function(t){t=t||{},b.on("click",t.headerElem,function(i){var e=a(this).index();f.tabClick.call(this,i,e,null,t)})},s.prototype.progress=function(t,i){var e="layui-progress",l=a("."+e+"[lay-filter="+t+"]"),n=l.find("."+e+"-bar"),s=n.find("."+e+"-text");return n.css("width",i),s.text(i),this};var o=".layui-nav",r="layui-nav-item",c="layui-nav-bar",u="layui-nav-tree",d="layui-nav-child",y="layui-nav-more",h="layui-anim layui-anim-upbit",f={tabClick:function(t,i,s,o){o=o||{};var r=s||a(this),i=i||r.parent().children("li").index(r),c=o.headerElem?r.parent():r.parents(".layui-tab").eq(0),u=o.bodyElem?a(o.bodyElem):c.children(".layui-tab-content").children(".layui-tab-item"),d=r.find("a"),y=c.attr("lay-filter");"javascript:;"!==d.attr("href")&&"_blank"===d.attr("target")||(r.addClass(l).siblings().removeClass(l),u.eq(i).addClass(n).siblings().removeClass(n)),layui.event.call(this,e,"tab("+y+")",{elem:c,index:i})},tabDelete:function(t,i){var n=i||a(this).parent(),s=n.index(),o=n.parents(".layui-tab").eq(0),r=o.children(".layui-tab-content").children(".layui-tab-item"),c=o.attr("lay-filter");n.hasClass(l)&&(n.next()[0]?f.tabClick.call(n.next()[0],null,s+1):n.prev()[0]&&f.tabClick.call(n.prev()[0],null,s-1)),n.remove(),r.eq(s).remove(),setTimeout(function(){f.tabAuto()},50),layui.event.call(this,e,"tabDelete("+c+")",{elem:o,index:s})},tabAuto:function(){var t="layui-tab-more",e="layui-tab-bar",l="layui-tab-close",n=this;a(".layui-tab").each(function(){var s=a(this),o=s.children(".layui-tab-title"),r=(s.children(".layui-tab-content").children(".layui-tab-item"),'lay-stope="tabmore"'),c=a('');if(n===window&&8!=i.ie&&f.hideTabMore(!0),s.attr("lay-allowClose")&&o.find("li").each(function(){var t=a(this);if(!t.find("."+l)[0]){var i=a('');i.on("click",f.tabDelete),t.append(i)}}),"string"!=typeof s.attr("lay-unauto"))if(o.prop("scrollWidth")>o.outerWidth()+1){if(o.find("."+e)[0])return;o.append(c),s.attr("overflow",""),c.on("click",function(a){o[this.title?"removeClass":"addClass"](t),this.title=this.title?"":"收缩"})}else o.find("."+e).remove(),s.removeAttr("overflow")})},hideTabMore:function(t){var i=a(".layui-tab-title");t!==!0&&"tabmore"===a(t.target).attr("lay-stope")||(i.removeClass("layui-tab-more"),i.find(".layui-tab-bar").attr("title",""))},clickThis:function(){var t=a(this),i=t.parents(o),n=i.attr("lay-filter"),s=t.parent(),c=t.siblings("."+d),y="string"==typeof s.attr("lay-unselect");"javascript:;"!==t.attr("href")&&"_blank"===t.attr("target")||y||c[0]||(i.find("."+l).removeClass(l),s.addClass(l)),i.hasClass(u)&&(c.removeClass(h),c[0]&&(s["none"===c.css("display")?"addClass":"removeClass"](r+"ed"),"all"===i.attr("lay-shrink")&&s.siblings().removeClass(r+"ed"))),layui.event.call(this,e,"nav("+n+")",t)},collapse:function(){var t=a(this),i=t.find(".layui-colla-icon"),l=t.siblings(".layui-colla-content"),s=t.parents(".layui-collapse").eq(0),o=s.attr("lay-filter"),r="none"===l.css("display");if("string"==typeof s.attr("lay-accordion")){var c=s.children(".layui-colla-item").children("."+n);c.siblings(".layui-colla-title").children(".layui-colla-icon").html(""),c.removeClass(n)}l[r?"addClass":"removeClass"](n),i.html(r?"":""),layui.event.call(this,e,"collapse("+o+")",{title:t,content:l,show:r})}};s.prototype.init=function(t,e){var l=function(){return e?'[lay-filter="'+e+'"]':""}(),s={tab:function(){f.tabAuto.call({})},nav:function(){var t=200,e={},s={},p={},b=function(l,o,r){var c=a(this),f=c.find("."+d);o.hasClass(u)?l.css({top:c.position().top,height:c.children("a").outerHeight(),opacity:1}):(f.addClass(h),l.css({left:c.position().left+parseFloat(c.css("marginLeft")),top:c.position().top+c.height()-l.height()}),e[r]=setTimeout(function(){l.css({width:c.width(),opacity:1})},i.ie&&i.ie<10?0:t),clearTimeout(p[r]),"block"===f.css("display")&&clearTimeout(s[r]),s[r]=setTimeout(function(){f.addClass(n),c.find("."+y).addClass(y+"d")},300))};a(o+l).each(function(i){var l=a(this),o=a(''),h=l.find("."+r);l.find("."+c)[0]||(l.append(o),h.on("mouseenter",function(){b.call(this,o,l,i)}).on("mouseleave",function(){l.hasClass(u)||(clearTimeout(s[i]),s[i]=setTimeout(function(){l.find("."+d).removeClass(n),l.find("."+y).removeClass(y+"d")},300))}),l.on("mouseleave",function(){clearTimeout(e[i]),p[i]=setTimeout(function(){l.hasClass(u)?o.css({height:0,top:o.position().top+o.height()/2,opacity:0}):o.css({width:0,left:o.position().left+o.width()/2,opacity:0})},t)})),h.find("a").each(function(){var t=a(this),i=(t.parent(),t.siblings("."+d));i[0]&&!t.children("."+y)[0]&&t.append(''),t.off("click",f.clickThis).on("click",f.clickThis)})})},breadcrumb:function(){var t=".layui-breadcrumb";a(t+l).each(function(){var t=a(this),i="lay-separator",e=t.attr(i)||"/",l=t.find("a");l.next("span["+i+"]")[0]||(l.each(function(t){t!==l.length-1&&a(this).after(""+e+"")}),t.css("visibility","visible"))})},progress:function(){var t="layui-progress";a("."+t+l).each(function(){var i=a(this),e=i.find(".layui-progress-bar"),l=e.attr("lay-percent");e.css("width",function(){return/^.+\/.+$/.test(l)?100*new Function("return "+l)()+"%":l}()),i.attr("lay-showPercent")&&setTimeout(function(){e.html(''+l+"")},350)})},collapse:function(){var t="layui-collapse";a("."+t+l).each(function(){var t=a(this).find(".layui-colla-item");t.each(function(){var t=a(this),i=t.find(".layui-colla-title"),e=t.find(".layui-colla-content"),l="none"===e.css("display");i.find(".layui-colla-icon").remove(),i.append(''+(l?"":"")+""),i.off("click",f.collapse).on("click",f.collapse)})})}};return s[t]?s[t]():layui.each(s,function(t,a){a()})},s.prototype.render=s.prototype.init;var p=new s,b=a(document);p.render();var v=".layui-tab-title li";b.on("click",v,f.tabClick),b.on("click",f.hideTabMore),a(window).on("resize",f.tabAuto),t(e,p)}); \ No newline at end of file +;layui.define("jquery", function(t) { + "use strict"; + var a = layui.$, // 获取layui中的$对象,类似jQuery + i = (layui.hint(), layui.device()), // 获取设备信息 + e = "element", // 元素模块标识 + l = "layui-this", // 激活样式 + n = "layui-show", // 显示样式 + + // 定义一个空的配置对象 + s = function() { this.config = {}; }; + + // 设置配置项的方法 + s.prototype.set = function(t) { + var i = this; + return a.extend(!0, i.config, t), i; // 合并配置 + }; + + // 注册事件的方法 + s.prototype.on = function(t, a) { + return layui.onevent.call(this, e, t, a); // 调用layui事件机制 + }; + + // 向tab中添加新tab项的方法 + s.prototype.tabAdd = function(t, i) { + var e = ".layui-tab-title", + l = a(".layui-tab[lay-filter=" + t + "]"), // 获取指定filter属性的tab容器 + n = l.children(e), // 获取tab标题区域 + s = n.children(".layui-tab-bar"), // 获取tab栏区域 + o = l.children(".layui-tab-content"), // 获取tab内容区域 + r = '
    3. " + (i.title || "unnaming") + "
    4. "; + + // 在tab标题区域前添加新的tab项 + return s[0] ? s.before(r) : n.append(r), + // 在tab内容区域添加相应的tab内容 + o.append('
      ' + (i.content || "") + "
      "), + // 隐藏更多tab按钮并重新调整tab宽度 + f.hideTabMore(!0), + f.tabAuto(), + this; + }; + + // 删除指定tab项的方法 + s.prototype.tabDelete = function(t, i) { + var e = ".layui-tab-title", + l = a(".layui-tab[lay-filter=" + t + "]"), // 获取tab容器 + n = l.children(e), // 获取tab标题区域 + s = n.find('>li[lay-id="' + i + '"]'); // 获取指定id的tab项 + return f.tabDelete(null, s), this; + }; + + // 切换指定tab项的方法 + s.prototype.tabChange = function(t, i) { + var e = ".layui-tab-title", + l = a(".layui-tab[lay-filter=" + t + "]"), // 获取tab容器 + n = l.children(e), // 获取tab标题区域 + s = n.find('>li[lay-id="' + i + '"]'); // 获取指定id的tab项 + return f.tabClick.call(s[0], null, null, s), this; + }; + + // 绑定tab点击事件 + s.prototype.tab = function(t) { + t = t || {}, + b.on("click", t.headerElem, function(i) { + var e = a(this).index(); + f.tabClick.call(this, i, e, null, t); + }); + }; + + // 更新进度条的方法 + s.prototype.progress = function(t, i) { + var e = "layui-progress", + l = a("." + e + "[lay-filter=" + t + "]"), // 获取进度条元素 + n = l.find("." + e + "-bar"), // 获取进度条条形部分 + s = n.find("." + e + "-text"); // 获取进度条文本 + return n.css("width", i), // 设置进度条宽度 + s.text(i), // 更新进度条文本 + this; + }; + + // 导航条相关操作 + var o = ".layui-nav", // 导航条容器 + r = "layui-nav-item", // 导航条项 + c = "layui-nav-bar", // 导航条指示条 + u = "layui-nav-tree", // 树形菜单 + d = "layui-nav-child", // 子菜单 + y = "layui-nav-more", // 更多按钮 + h = "layui-anim layui-anim-upbit", // 动画效果 + + // 处理tab点击、删除、显示、隐藏等操作 + f = { + tabClick: function(t, i, s, o) { + o = o || {}; + var r = s || a(this), + i = i || r.parent().children("li").index(r), // 获取当前点击tab项的索引 + c = o.headerElem ? r.parent() : r.parents(".layui-tab").eq(0), // 获取tab容器 + u = o.bodyElem ? a(o.bodyElem) : c.children(".layui-tab-content").children(".layui-tab-item"), // 获取tab内容 + d = r.find("a"), // 获取点击的链接 + y = c.attr("lay-filter"); + + // 防止点击跳转 + if ("javascript:;" !== d.attr("href") && "_blank" === d.attr("target")) return; + r.addClass(l).siblings().removeClass(l); // 激活当前tab项 + u.eq(i).addClass(n).siblings().removeClass(n); // 显示对应内容 + layui.event.call(this, e, "tab(" + y + ")", {elem: c, index: i}); + }, + + // 删除tab项的方法 + tabDelete: function(t, i) { + var n = i || a(this).parent(), // 获取当前tab项 + s = n.index(), // 获取当前tab项的索引 + o = n.parents(".layui-tab").eq(0), // 获取tab容器 + r = o.children(".layui-tab-content").children(".layui-tab-item"); // 获取tab内容 + n.hasClass(l) && (n.next()[0] ? f.tabClick.call(n.next()[0], null, s + 1) : n.prev()[0] && f.tabClick.call(n.prev()[0], null, s - 1)); // 如果删除的是当前激活的tab项,调整激活tab + n.remove(); // 删除tab项 + r.eq(s).remove(); // 删除tab内容 + setTimeout(function() { + f.tabAuto(); // 调整tab宽度 + }, 50); + layui.event.call(this, e, "tabDelete(" + o.attr("lay-filter") + ")", {elem: o, index: s}); + }, + + // 自动调整tab的显示 + tabAuto: function() { + var t = "layui-tab-more", + e = "layui-tab-bar", + l = "layui-tab-close", + n = this; + + a(".layui-tab").each(function() { + var s = a(this), + o = s.children(".layui-tab-title"), // 获取tab标题区域 + r = (s.children(".layui-tab-content").children(".layui-tab-item"), 'lay-stope="tabmore"'), + c = a(''); + + if (n === window && 8 != i.ie && f.hideTabMore(!0), s.attr("lay-allowClose") && o.find("li").each(function() { + var t = a(this); + if (!t.find("." + l)[0]) { + var i = a(''); + i.on("click", f.tabDelete); + t.append(i); + } + }), "string" != typeof s.attr("lay-unauto")) if (o.prop("scrollWidth") > o.outerWidth() + 1) { + if (o.find("." + e)[0]) return; + o.append(c), s.attr("overflow", ""), c.on("click", function(a) { + o[this.title ? "removeClass" : "addClass"](t), this.title = this.title ? "" : "收缩"; + }); + } else o.find("." + e).remove(), s.removeAttr("overflow"); + }); + }, + + // 隐藏更多tab的按钮 + hideTabMore: function(t) { + var i = a(".layui-tab-title"); + t !== !0 && "tabmore" === a(t.target).attr("lay-stope") || (i.removeClass("layui-tab-more"), i.find(".layui-tab-bar").attr("title", "")); + }, + + // 处理导航点击事件 + clickThis: function() { + var t = a(this), + i = t.parents(o), + n = i.attr("lay-filter"), + s = t.parent(), + c = t.siblings("." + d), + y = "string" == typeof s.attr("lay-unselect"); + + if ("javascript:;" !== t.attr("href") && "_blank" === t.attr("target") || y || c[0]) return; + i.find("." + l).removeClass(l), s.addClass(l); + i.hasClass + + diff --git a/web/lay/modules/flow.js b/web/lay/modules/flow.js index 924c78d..f84863b 100644 --- a/web/lay/modules/flow.js +++ b/web/lay/modules/flow.js @@ -1,2 +1,118 @@ /** layui-v2.5.6 MIT License By https://www.layui.com */ - ;layui.define("jquery",function(e){"use strict";var l=layui.$,o=function(e){},t='';o.prototype.load=function(e){var o,i,n,r,a=this,c=0;e=e||{};var f=l(e.elem);if(f[0]){var m=l(e.scrollElem||document),u=e.mb||50,s=!("isAuto"in e)||e.isAuto,v=e.end||"没有更多了",y=e.scrollElem&&e.scrollElem!==document,d="加载更多",h=l('");f.find(".layui-flow-more")[0]||f.append(h);var p=function(e,t){e=l(e),h.before(e),t=0==t||null,t?h.html(v):h.find("a").html(d),i=t,o=null,n&&n()},g=function(){o=!0,h.find("a").html(t),"function"==typeof e.done&&e.done(++c,p)};if(g(),h.find("a").on("click",function(){l(this);i||o||g()}),e.isLazyimg)var n=a.lazyimg({elem:e.elem+" img",scrollElem:e.scrollElem});return s?(m.on("scroll",function(){var e=l(this),t=e.scrollTop();r&&clearTimeout(r),!i&&f.width()&&(r=setTimeout(function(){var i=y?e.height():l(window).height(),n=y?e.prop("scrollHeight"):document.documentElement.scrollHeight;n-t-i<=u&&(o||g())},100))}),a):a}},o.prototype.lazyimg=function(e){var o,t=this,i=0;e=e||{};var n=l(e.scrollElem||document),r=e.elem||"img",a=e.scrollElem&&e.scrollElem!==document,c=function(e,l){var o=n.scrollTop(),r=o+l,c=a?function(){return e.offset().top-n.offset().top+o}():e.offset().top;if(c>=o&&c<=r&&!e.attr("src")){var m=e.attr("lay-src");layui.img(m,function(){var l=t.lazyimg.elem.eq(i);e.attr("src",m).removeAttr("lay-src"),l[0]&&f(l),i++})}},f=function(e,o){var f=a?(o||n).height():l(window).height(),m=n.scrollTop(),u=m+f;if(t.lazyimg.elem=l(r),e)c(e,f);else for(var s=0;su)break}};if(f(),!o){var m;n.on("scroll",function(){var e=l(this);m&&clearTimeout(m),m=setTimeout(function(){f(null,e)},50)}),o=!0}return f},e("flow",new o)}); \ No newline at end of file +;layui.define("jquery", function(e) { + "use strict"; + var l = layui.$, o = function(e) {}, t = ''; + + // 定义 load 方法,用于加载更多内容 + o.prototype.load = function(e) { + var o, i, n, r, a = this, c = 0; + e = e || {}; + var f = l(e.elem); // 获取加载更多按钮所在的元素 + if (f[0]) { // 如果该元素存在 + var m = l(e.scrollElem || document), // 获取滚动容器元素,默认为 document + u = e.mb || 50, // 滚动到距离底部多少距离时触发加载更多 + s = !("isAuto" in e) || e.isAuto, // 是否自动加载 + v = e.end || "没有更多了", // 加载完成后的提示 + y = e.scrollElem && e.scrollElem !== document, // 判断是否是自定义滚动区域 + d = "加载更多", // 默认的加载更多文本 + h = l('"); + + f.find(".layui-flow-more")[0] || f.append(h); // 如果没有加载更多的按钮,则追加 + var p = function(e, t) { + e = l(e); + h.before(e); // 将新内容插入到加载更多按钮之前 + t = 0 == t || null; + t ? h.html(v) : h.find("a").html(d); // 如果已加载完毕,显示“没有更多了” + i = t; + o = null; + n && n(); + }; + + // 加载更多逻辑 + var g = function() { + o = !0; + h.find("a").html(t); // 显示加载动画 + "function" == typeof e.done && e.done(++c, p); // 如果有 done 方法,调用它 + }; + + // 初始化加载 + g(); + // 点击加载更多时,触发加载操作 + h.find("a").on("click", function() { + l(this); + i || o || g(); + }); + + // 如果启用了懒加载 + if (e.isLazyimg) var n = a.lazyimg({ elem: e.elem + " img", scrollElem: e.scrollElem }); + + return s ? (m.on("scroll", function() { + var e = l(this), t = e.scrollTop(); + r && clearTimeout(r); + !i && f.width() && (r = setTimeout(function() { + var i = y ? e.height() : l(window).height(), + n = y ? e.prop("scrollHeight") : document.documentElement.scrollHeight; + // 滚动到底部时加载更多 + n - t - i <= u && (o || g()); + }, 100)); + }), a) : a; + } + }; + + // 懒加载方法 + o.prototype.lazyimg = function(e) { + var o, t = this, i = 0; + e = e || {}; + var n = l(e.scrollElem || document), r = e.elem || "img", a = e.scrollElem && e.scrollElem !== document; + + // 图片加载检查和设置 + var c = function(e, l) { + var o = n.scrollTop(), r = o + l, c = a ? function() { + return e.offset().top - n.offset().top + o; + }() : e.offset().top; + if (c >= o && c <= r && !e.attr("src")) { + var m = e.attr("lay-src"); + layui.img(m, function() { + var l = t.lazyimg.elem.eq(i); + e.attr("src", m).removeAttr("lay-src"); + l[0] && f(l); + i++; + }); + } + }; + + // 触发懒加载 + var f = function(e, o) { + var f = a ? (o || n).height() : l(window).height(), m = n.scrollTop(), u = m + f; + t.lazyimg.elem = l(r); + if (e) c(e, f); + else { + for (var s = 0; s < t.lazyimg.elem.length; s++) { + var v = t.lazyimg.elem.eq(s), + y = a ? function() { + return v.offset().top - n.offset().top + m; + }() : v.offset().top; + if (c(v, f), i = s, y > u) break; + } + } + }; + + // 初次加载图片 + f(); + if (!o) { + var m; + n.on("scroll", function() { + var e = l(this); + m && clearTimeout(m); + m = setTimeout(function() { + f(null, e); + }, 50); + }); + o = !0; + } + return f; + }; + + // 定义模块接口 + e("flow", new o); +}); diff --git a/web/lay/modules/form.js b/web/lay/modules/form.js index 818dd39..3d8490f 100644 --- a/web/lay/modules/form.js +++ b/web/lay/modules/form.js @@ -1,2 +1,109 @@ /** layui-v2.5.6 MIT License By https://www.layui.com */ - ;layui.define("layer",function(e){"use strict";var t=layui.$,i=layui.layer,a=layui.hint(),n=layui.device(),l="form",r=".layui-form",s="layui-this",o="layui-hide",c="layui-disabled",u=function(){this.config={verify:{required:[/[\S]+/,"必填项不能为空"],phone:[/^1\d{10}$/,"请输入正确的手机号"],email:[/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/,"邮箱格式不正确"],url:[/(^#)|(^http(s*):\/\/[^\s]+\.[^\s]+)/,"链接格式不正确"],number:function(e){if(!e||isNaN(e))return"只能填写数字"},date:[/^(\d{4})[-\/](\d{1}|0\d{1}|1[0-2])([-\/](\d{1}|0\d{1}|[1-2][0-9]|3[0-1]))*$/,"日期格式不正确"],identity:[/(^\d{15}$)|(^\d{17}(x|X|\d)$)/,"请输入正确的身份证号"]}}};u.prototype.set=function(e){var i=this;return t.extend(!0,i.config,e),i},u.prototype.verify=function(e){var i=this;return t.extend(!0,i.config.verify,e),i},u.prototype.on=function(e,t){return layui.onevent.call(this,l,e,t)},u.prototype.val=function(e,i){var a=this,n=t(r+'[lay-filter="'+e+'"]');return n.each(function(e,a){var n=t(this);layui.each(i,function(e,t){var i,a=n.find('[name="'+e+'"]');a[0]&&(i=a[0].type,"checkbox"===i?a[0].checked=t:"radio"===i?a.each(function(){this.value==t&&(this.checked=!0)}):a.val(t))})}),f.render(null,e),a.getValue(e)},u.prototype.getValue=function(e,i){i=i||t(r+'[lay-filter="'+e+'"]').eq(0);var a={},n={},l=i.find("input,select,textarea");return layui.each(l,function(e,t){if(t.name=(t.name||"").replace(/^\s*|\s*&/,""),t.name){if(/^.*\[\]$/.test(t.name)){var i=t.name.match(/^(.*)\[\]$/g)[0];a[i]=0|a[i],t.name=t.name.replace(/^(.*)\[\]$/,"$1["+a[i]++ +"]")}/^checkbox|radio$/.test(t.type)&&!t.checked||(n[t.name]=t.value)}}),n},u.prototype.render=function(e,i){var n=this,u=t(r+function(){return i?'[lay-filter="'+i+'"]':""}()),d={select:function(){var e,i="请选择",a="layui-form-select",n="layui-select-title",r="layui-select-none",d="",f=u.find("select"),v=function(i,l){t(i.target).parent().hasClass(n)&&!l||(t("."+a).removeClass(a+"ed "+a+"up"),e&&d&&e.val(d)),e=null},y=function(i,u,f){var y,p=t(this),m=i.find("."+n),k=m.find("input"),g=i.find("dl"),x=g.children("dd"),b=this.selectedIndex;if(!u){var C=function(){var e=i.offset().top+i.outerHeight()+5-h.scrollTop(),t=g.outerHeight();b=p[0].selectedIndex,i.addClass(a+"ed"),x.removeClass(o),y=null,x.eq(b).addClass(s).siblings().removeClass(s),e+t>h.height()&&e>=t&&i.addClass(a+"up"),T()},w=function(e){i.removeClass(a+"ed "+a+"up"),k.blur(),y=null,e||$(k.val(),function(e){var i=p[0].selectedIndex;e&&(d=t(p[0].options[i]).html(),0===i&&d===k.attr("placeholder")&&(d=""),k.val(d||""))})},T=function(){var e=g.children("dd."+s);if(e[0]){var t=e.position().top,i=g.height(),a=e.height();t>i&&g.scrollTop(t+g.scrollTop()-i+a-5),t<0&&g.scrollTop(t+g.scrollTop()-5)}};m.on("click",function(e){i.hasClass(a+"ed")?w():(v(e,!0),C()),g.find("."+r).remove()}),m.find(".layui-edge").on("click",function(){k.focus()}),k.on("keyup",function(e){var t=e.keyCode;9===t&&C()}).on("keydown",function(e){var t=e.keyCode;9===t&&w();var i=function(t,a){var n,l;e.preventDefault();var r=function(){var e=g.children("dd."+s);if(g.children("dd."+o)[0]&&"next"===t){var i=g.children("dd:not(."+o+",."+c+")"),n=i.eq(0).index();if(n>=0&&n无匹配项

      '):g.find("."+r).remove()},"keyup"),""===t&&g.find("."+r).remove(),void T())};f&&k.on("keyup",q).on("blur",function(i){var a=p[0].selectedIndex;e=k,d=t(p[0].options[a]).html(),0===a&&d===k.attr("placeholder")&&(d=""),setTimeout(function(){$(k.val(),function(e){d||k.val("")},"blur")},200)}),x.on("click",function(){var e=t(this),a=e.attr("lay-value"),n=p.attr("lay-filter");return!e.hasClass(c)&&(e.hasClass("layui-select-tips")?k.val(""):(k.val(e.text()),e.addClass(s)),e.siblings().removeClass(s),p.val(a).removeClass("layui-form-danger"),layui.event.call(this,l,"select("+n+")",{elem:p[0],value:a,othis:i}),w(!0),!1)}),i.find("dl>dt").on("click",function(e){return!1}),t(document).off("click",v).on("click",v)}};f.each(function(e,l){var r=t(this),o=r.next("."+a),u=this.disabled,d=l.value,f=t(l.options[l.selectedIndex]),v=l.options[0];if("string"==typeof r.attr("lay-ignore"))return r.show();var h="string"==typeof r.attr("lay-search"),p=v?v.value?i:v.innerHTML||i:i,m=t(['
      ','
      ','','
      ','
      ',function(e){var t=[];return layui.each(e,function(e,a){0!==e||a.value?"optgroup"===a.tagName.toLowerCase()?t.push("
      "+a.label+"
      "):t.push('
      '+a.innerHTML+"
      "):t.push('
      '+(a.innerHTML||i)+"
      ")}),0===t.length&&t.push('
      没有选项
      '),t.join("")}(r.find("*"))+"
      ","
      "].join(""));o[0]&&o.remove(),r.after(m),y.call(this,m,u,h)})},checkbox:function(){var e={checkbox:["layui-form-checkbox","layui-form-checked","checkbox"],_switch:["layui-form-switch","layui-form-onswitch","switch"]},i=u.find("input[type=checkbox]"),a=function(e,i){var a=t(this);e.on("click",function(){var t=a.attr("lay-filter"),n=(a.attr("lay-text")||"").split("|");a[0].disabled||(a[0].checked?(a[0].checked=!1,e.removeClass(i[1]).find("em").text(n[1])):(a[0].checked=!0,e.addClass(i[1]).find("em").text(n[0])),layui.event.call(a[0],l,i[2]+"("+t+")",{elem:a[0],value:a[0].value,othis:e}))})};i.each(function(i,n){var l=t(this),r=l.attr("lay-skin"),s=(l.attr("lay-text")||"").split("|"),o=this.disabled;"switch"===r&&(r="_"+r);var u=e[r]||e.checkbox;if("string"==typeof l.attr("lay-ignore"))return l.show();var d=l.next("."+u[0]),f=t(['
      ",function(){var e=n.title.replace(/\s/g,""),t={checkbox:[e?""+n.title+"":"",''].join(""),_switch:""+((n.checked?s[0]:s[1])||"")+""};return t[r]||t.checkbox}(),"
      "].join(""));d[0]&&d.remove(),l.after(f),a.call(this,f,u)})},radio:function(){var e="layui-form-radio",i=["",""],a=u.find("input[type=radio]"),n=function(a){var n=t(this),s="layui-anim-scaleSpring";a.on("click",function(){var o=n[0].name,c=n.parents(r),u=n.attr("lay-filter"),d=c.find("input[name="+o.replace(/(\.|#|\[|\])/g,"\\$1")+"]");n[0].disabled||(layui.each(d,function(){var a=t(this).next("."+e);this.checked=!1,a.removeClass(e+"ed"),a.find(".layui-icon").removeClass(s).html(i[1])}),n[0].checked=!0,a.addClass(e+"ed"),a.find(".layui-icon").addClass(s).html(i[0]),layui.event.call(n[0],l,"radio("+u+")",{elem:n[0],value:n[0].value,othis:a}))})};a.each(function(a,l){var r=t(this),s=r.next("."+e),o=this.disabled;if("string"==typeof r.attr("lay-ignore"))return r.show();s[0]&&s.remove();var u=t(['
      ',''+i[l.checked?0:1]+"","
      "+function(){var e=l.title||"";return"string"==typeof r.next().attr("lay-radio")&&(e=r.next().html(),r.next().remove()),e}()+"
      ","
      "].join(""));r.after(u),n.call(this,u)})}};return e?d[e]?d[e]():a.error("不支持的"+e+"表单渲染"):layui.each(d,function(e,t){t()}),n};var d=function(){var e=null,a=f.config.verify,s="layui-form-danger",o={},c=t(this),u=c.parents(r),d=u.find("*[lay-verify]"),v=c.parents("form")[0],h=c.attr("lay-filter");return layui.each(d,function(l,r){var o=t(this),c=o.attr("lay-verify").split("|"),u=o.attr("lay-verType"),d=o.val();if(o.removeClass(s),layui.each(c,function(t,l){var c,f="",v="function"==typeof a[l];if(a[l]){var c=v?f=a[l](d,r):!a[l][0].test(d);if(f=f||a[l][1],"required"===l&&(f=o.attr("lay-reqText")||f),c)return"tips"===u?i.tips(f,function(){return"string"==typeof o.attr("lay-ignore")||"select"!==r.tagName.toLowerCase()&&!/^checkbox|radio$/.test(r.type)?o:o.next()}(),{tips:1}):"alert"===u?i.alert(f,{title:"提示",shadeClose:!0}):i.msg(f,{icon:5,shift:6}),n.android||n.ios||setTimeout(function(){r.focus()},7),o.addClass(s),e=!0}}),e)return e}),!e&&(o=f.getValue(null,u),layui.event.call(this,l,"submit("+h+")",{elem:this,form:v,field:o}))},f=new u,v=t(document),h=t(window);f.render(),v.on("reset",r,function(){var e=t(this).attr("lay-filter");setTimeout(function(){f.render(null,e)},50)}),v.on("submit",r,d).on("click","*[lay-submit]",d),e(l,f)}); \ No newline at end of file +layui.define("layer", function(e) { + "use strict"; + var t = layui.$, // 获取 layui 的 jQuery 对象 + i = layui.layer, // 获取 layui 的 layer 模块,用于弹出层 + a = layui.hint(), // 获取提示信息模块 + n = layui.device(), // 获取设备信息 + l = "form", // 表单模块 + r = ".layui-form", // 表单的选择器 + s = "layui-this", // 当前选中元素的 class + o = "layui-hide", // 隐藏元素的 class + c = "layui-disabled", // 禁用元素的 class + + // 定义表单验证模块 + u = function() { + this.config = { + verify: { + required: [/[\S]+/, "必填项不能为空"], // 必填项验证 + phone: [/^1\d{10}$/, "请输入正确的手机号"], // 手机号格式验证 + email: [/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/, "邮箱格式不正确"], // 邮箱格式验证 + url: [/(^#)|(^http(s*):\/\/[^\s]+\.[^\s]+)/, "链接格式不正确"], // URL 格式验证 + number: function(e) { + if (!e || isNaN(e)) return "只能填写数字"; // 数字验证 + }, + date: [/^(\d{4})[-\/](\d{1}|0\d{1}|1[0-2])([-\/](\d{1}|0\d{1}|[1-2][0-9]|3[0-1]))*$/, "日期格式不正确"], // 日期格式验证 + identity: [/(^\d{15}$)|(^\d{17}(x|X|\d)$)/, "请输入正确的身份证号"] // 身份证号验证 + } + }; + }; + + // 设置配置项 + u.prototype.set = function(e) { + var i = this; + return t.extend(!0, i.config, e), i; + }; + + // 设置验证规则 + u.prototype.verify = function(e) { + var i = this; + return t.extend(!0, i.config.verify, e), i; + }; + + // 绑定事件 + u.prototype.on = function(e, t) { + return layui.onevent.call(this, l, e, t); + }; + + // 获取表单的值 + u.prototype.val = function(e, i) { + var a = this, + n = t(r + '[lay-filter="' + e + '"]'); + return n.each(function(e, a) { + var n = t(this); + layui.each(i, function(e, t) { + var i, a = n.find('[name="' + e + '"]'); + a[0] && (i = a[0].type, "checkbox" === i ? a[0].checked = t : "radio" === i ? a.each(function() { this.value == t && (this.checked = !0) }) : a.val(t)) + }); + }), f.render(null, e), a.getValue(e); + }; + + // 获取表单值 + u.prototype.getValue = function(e, i) { + i = i || t(r + '[lay-filter="' + e + '"]').eq(0); + var a = {}, n = {}, l = i.find("input,select,textarea"); + return layui.each(l, function(e, t) { + if (t.name = (t.name || "").replace(/^\s*|\s*&/, ""), t.name) { + if (/^.*\[\]$/.test(t.name)) { + var i = t.name.match(/^(.*)\[\]$/g)[0]; + a[i] = 0 | a[i], t.name = t.name.replace(/^(.*)\[\]$/, "$1[" + a[i]++ + "]") + } + /^checkbox|radio$/.test(t.type) && !t.checked || (n[t.name] = t.value) + } + }), n; + }; + + // 渲染表单元素 + u.prototype.render = function(e, i) { + var n = this, u = t(r + (function() { return i ? '[lay-filter="' + i + '"]' : "" }())); + var d = { + // 渲染 select 元素 + select: function() { + var e, i = "请选择", a = "layui-form-select", n = "layui-select-title", r = "layui-select-none", d = "", f = u.find("select"), + v = function(i, l) { t(i.target).parent().hasClass(n) && !l || (t("." + a).removeClass(a + "ed " + a + "up"), e && d && e.val(d)), e = null }, + y = function(i, u, f) { + var y, p = t(this), m = i.find("." + n), k = m.find("input"), g = i.find("dl"), x = g.children("dd"), b = this.selectedIndex; + if (!u) { + var C = function() { + var e = i.offset().top + i.outerHeight() + 5 - h.scrollTop(), t = g.outerHeight(); + b = p[0].selectedIndex, i.addClass(a + "ed"), x.removeClass(o), y = null, x.eq(b).addClass(s).siblings().removeClass(s), e + t > h.height() && e >= t && i.addClass(a + "up"), T() + }; + var w = function(e) { i.removeClass(a + "ed " + a + "up"), k.blur(), y = null, e || $(k.val(), function(e) { var i = p[0].selectedIndex; e && (d = t(p[0].options[i]).html(), 0 === i && d === k.attr("placeholder") && (d = ""), k.val(d || "")) }) }, + T = function() { var e = g.children("dd." + s); if (e[0]) { var t = e.position().top, i = g.height(), a = e.height(); t > i && g.scrollTop(t + g.scrollTop() - i + a - 5), t < 0 && g.scrollTop(t + g.scrollTop() - 5) } }; + m.on("click", function(e) { i.hasClass(a + "ed") ? w() : (v(e, !0), C()), g.find("." + r).remove() }), m.find(".layui-edge").on("click", function() { k.focus() }), k.on("keyup", function(e) { var t = e.keyCode; 9 === t && C() }).on("keydown", function(e) { + var t = e.keyCode; 9 === t && w(); var i = function(t, a) { + var n, l; e.preventDefault(); + var r = function() { + var e = g.children("dd." + s); + if (g.children("dd." + o)[0] && "next" === t) { var i = g.children("dd:not(." + o + ",." + c + ")"), n = i.eq(0).index(); if (n >= 0 && n < e.index() && !i.hasClass(s)) return i.eq(0).prev()[0] ? i.eq(0).prev() : g.children(":last") } return a && a[0] ? a : y && y[0] ? y : e }(); + return l = r[t](), n = r[t]("dd:not(." + o + ")"), l[0] ? (y = r[t](), n[0] && !n.hasClass(c) || !y[0] ? (n.addClass(s).siblings().removeClass(s), void T()) : i(t, y)) : y = null }; + 38 === t && i("prev"), 40 === t && i("next"), 13 === t && (e.preventDefault(), g.children("dd." + s).trigger("click")) + }); + var $ = function(e, i, a) { + var n = 0; layui.each(x, function() { + var i = t(this), l = i.text(), r = l.indexOf(e) === -1; + ("" === e || "blur" === a ? e !== l : r) && n++, "keyup" === a && i[r ? "addClass" : "removeClass"](o) + }); + var l = n === x.length; return i(l), l + }; + var q = function(e) { var t = this.value, i = e.keyCode; return 9 !== i && 13 !== i && 37 !== i && 38 !== i && 39 !== i && 40 !== i && ($(t, function(e) { e ? g.find("." + r)[0] || g.append('

      无匹配项0;a--)if("interactive"===t[a].readyState){e=t[a].src;break}return e||t[n].src}();return e.substring(0,e.lastIndexOf("/")+1)}(),getStyle:function(e,t){var n=e.currentStyle?e.currentStyle:window.getComputedStyle(e,null);return n[n.getPropertyValue?"getPropertyValue":"getAttribute"](t)},link:function(e,a,i){if(n.path){var r=document.getElementsByTagName("head")[0],o=document.createElement("link");"string"==typeof a&&(i=a);var s=(i||e).replace(/\.|\//g,""),l="layuicss-"+s,d=0;o.rel="stylesheet",o.href=n.path+e,o.id=l,document.getElementById(l)||r.appendChild(o),"function"==typeof a&&!function c(){return++d>80?window.console&&console.error("laydate.css: Invalid"):void(1989===parseInt(t.getStyle(document.getElementById(l),"width"))?a():setTimeout(c,100))}()}}},n={v:"5.0.9",config:{},index:window.laydate&&window.laydate.v?1e5:0,path:t.getPath,set:function(e){var t=this;return t.config=w.extend({},t.config,e),t},ready:function(a){var i="laydate",r="",o=(e?"modules/laydate/":"theme/")+"default/laydate.css?v="+n.v+r;return e?layui.addcss(o,a,i):t.link(o,a,i),this}},a=function(){var e=this;return{hint:function(t){e.hint.call(e,t)},config:e.config}},i="laydate",r=".layui-laydate",o="layui-this",s="laydate-disabled",l="开始日期超出了结束日期
      建议重新选择",d=[100,2e5],c="layui-laydate-static",m="layui-laydate-list",u="laydate-selected",h="layui-laydate-hint",y="laydate-day-prev",f="laydate-day-next",p="layui-laydate-footer",g=".laydate-btns-confirm",v="laydate-time-text",D=".laydate-btns-time",T=function(e){var t=this;t.index=++n.index,t.config=w.extend({},t.config,n.config,e),n.ready(function(){t.init()})},w=function(e){return new C(e)},C=function(e){for(var t=0,n="object"==typeof e?[e]:(this.selector=e,document.querySelectorAll(e||null));t0)return n[0].getAttribute(e)}():n.each(function(n,a){a.setAttribute(e,t)})},C.prototype.removeAttr=function(e){return this.each(function(t,n){n.removeAttribute(e)})},C.prototype.html=function(e){return this.each(function(t,n){n.innerHTML=e})},C.prototype.val=function(e){return this.each(function(t,n){n.value=e})},C.prototype.append=function(e){return this.each(function(t,n){"object"==typeof e?n.appendChild(e):n.innerHTML=n.innerHTML+e})},C.prototype.remove=function(e){return this.each(function(t,n){e?n.removeChild(e):n.parentNode.removeChild(n)})},C.prototype.on=function(e,t){return this.each(function(n,a){a.attachEvent?a.attachEvent("on"+e,function(e){e.target=e.srcElement,t.call(a,e)}):a.addEventListener(e,t,!1)})},C.prototype.off=function(e,t){return this.each(function(n,a){a.detachEvent?a.detachEvent("on"+e,t):a.removeEventListener(e,t,!1)})},T.isLeapYear=function(e){return e%4===0&&e%100!==0||e%400===0},T.prototype.config={type:"date",range:!1,format:"yyyy-MM-dd",value:null,isInitValue:!0,min:"1900-1-1",max:"2099-12-31",trigger:"focus",show:!1,showBottom:!0,btns:["clear","now","confirm"],lang:"cn",theme:"default",position:null,calendar:!1,mark:{},zIndex:null,done:null,change:null},T.prototype.lang=function(){var e=this,t=e.config,n={cn:{weeks:["日","一","二","三","四","五","六"],time:["时","分","秒"],timeTips:"选择时间",startTime:"开始时间",endTime:"结束时间",dateTips:"返回日期",month:["一","二","三","四","五","六","七","八","九","十","十一","十二"],tools:{confirm:"确定",clear:"清空",now:"现在"}},en:{weeks:["Su","Mo","Tu","We","Th","Fr","Sa"],time:["Hours","Minutes","Seconds"],timeTips:"Select Time",startTime:"Start Time",endTime:"End Time",dateTips:"Select Date",month:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],tools:{confirm:"Confirm",clear:"Clear",now:"Now"}}};return n[t.lang]||n.cn},T.prototype.init=function(){var e=this,t=e.config,n="yyyy|y|MM|M|dd|d|HH|H|mm|m|ss|s",a="static"===t.position,i={year:"yyyy",month:"yyyy-MM",date:"yyyy-MM-dd",time:"HH:mm:ss",datetime:"yyyy-MM-dd HH:mm:ss"};t.elem=w(t.elem),t.eventElem=w(t.eventElem),t.elem[0]&&(t.range===!0&&(t.range="-"),t.format===i.date&&(t.format=i[t.type]),e.format=t.format.match(new RegExp(n+"|.","g"))||[],e.EXP_IF="",e.EXP_SPLIT="",w.each(e.format,function(t,a){var i=new RegExp(n).test(a)?"\\d{"+function(){return new RegExp(n).test(e.format[0===t?t+1:t-1]||"")?/^yyyy|y$/.test(a)?4:a.length:/^yyyy$/.test(a)?"1,4":/^y$/.test(a)?"1,308":"1,2"}()+"}":"\\"+a;e.EXP_IF=e.EXP_IF+i,e.EXP_SPLIT=e.EXP_SPLIT+"("+i+")"}),e.EXP_IF=new RegExp("^"+(t.range?e.EXP_IF+"\\s\\"+t.range+"\\s"+e.EXP_IF:e.EXP_IF)+"$"),e.EXP_SPLIT=new RegExp("^"+e.EXP_SPLIT+"$",""),e.isInput(t.elem[0])||"focus"===t.trigger&&(t.trigger="click"),t.elem.attr("lay-key")||(t.elem.attr("lay-key",e.index),t.eventElem.attr("lay-key",e.index)),t.mark=w.extend({},t.calendar&&"cn"===t.lang?{"0-1-1":"元旦","0-2-14":"情人","0-3-8":"妇女","0-3-12":"植树","0-4-1":"愚人","0-5-1":"劳动","0-5-4":"青年","0-6-1":"儿童","0-9-10":"教师","0-9-18":"国耻","0-10-1":"国庆","0-12-25":"圣诞"}:{},t.mark),w.each(["min","max"],function(e,n){var a=[],i=[];if("number"==typeof t[n]){var r=t[n],o=(new Date).getTime(),s=864e5,l=new Date(r?r0)return!0;var a=w.elem("div",{"class":"layui-laydate-header"}),i=[function(){var e=w.elem("i",{"class":"layui-icon laydate-icon laydate-prev-y"});return e.innerHTML="",e}(),function(){var e=w.elem("i",{"class":"layui-icon laydate-icon laydate-prev-m"});return e.innerHTML="",e}(),function(){var e=w.elem("div",{"class":"laydate-set-ym"}),t=w.elem("span"),n=w.elem("span");return e.appendChild(t),e.appendChild(n),e}(),function(){var e=w.elem("i",{"class":"layui-icon laydate-icon laydate-next-m"});return e.innerHTML="",e}(),function(){var e=w.elem("i",{"class":"layui-icon laydate-icon laydate-next-y"});return e.innerHTML="",e}()],d=w.elem("div",{"class":"layui-laydate-content"}),c=w.elem("table"),m=w.elem("thead"),u=w.elem("tr");w.each(i,function(e,t){a.appendChild(t)}),m.appendChild(u),w.each(new Array(6),function(e){var t=c.insertRow(0);w.each(new Array(7),function(a){if(0===e){var i=w.elem("th");i.innerHTML=n.weeks[a],u.appendChild(i)}t.insertCell(a)})}),c.insertBefore(m,c.children[0]),d.appendChild(c),r[e]=w.elem("div",{"class":"layui-laydate-main laydate-main-list-"+e}),r[e].appendChild(a),r[e].appendChild(d),o.push(i),s.push(d),l.push(c)}),w(d).html(function(){var e=[],i=[];return"datetime"===t.type&&e.push(''+n.timeTips+""),w.each(t.btns,function(e,r){var o=n.tools[r]||"btn";t.range&&"now"===r||(a&&"clear"===r&&(o="cn"===t.lang?"重置":"Reset"),i.push(''+o+""))}),e.push('

      "),e.join("")}()),w.each(r,function(e,t){i.appendChild(t)}),t.showBottom&&i.appendChild(d),/^#/.test(t.theme)){var m=w.elem("style"),u=["#{{id}} .layui-laydate-header{background-color:{{theme}};}","#{{id}} .layui-this{background-color:{{theme}} !important;}"].join("").replace(/{{id}}/g,e.elemID).replace(/{{theme}}/g,t.theme);"styleSheet"in m?(m.setAttribute("type","text/css"),m.styleSheet.cssText=u):m.innerHTML=u,w(i).addClass("laydate-theme-molv"),i.appendChild(m)}e.remove(T.thisElemDate),a?t.elem.append(i):(document.body.appendChild(i),e.position()),e.checkDate().calendar(),e.changeEvent(),T.thisElemDate=e.elemID,"function"==typeof t.ready&&t.ready(w.extend({},t.dateTime,{month:t.dateTime.month+1}))},T.prototype.remove=function(e){var t=this,n=(t.config,w("#"+(e||t.elemID)));return n.hasClass(c)||t.checkDate(function(){n.remove()}),t},T.prototype.position=function(){var e=this,t=e.config,n=e.bindElem||t.elem[0],a=n.getBoundingClientRect(),i=e.elem.offsetWidth,r=e.elem.offsetHeight,o=function(e){return e=e?"scrollLeft":"scrollTop",document.body[e]|document.documentElement[e]},s=function(e){return document.documentElement[e?"clientWidth":"clientHeight"]},l=5,d=a.left,c=a.bottom;d+i+l>s("width")&&(d=s("width")-i-l),c+r+l>s()&&(c=a.top>r?a.top-r:s()-r,c-=2*l),t.position&&(e.elem.style.position=t.position),e.elem.style.left=d+("fixed"===t.position?0:o(1))+"px",e.elem.style.top=c+("fixed"===t.position?0:o())+"px"},T.prototype.hint=function(e){var t=this,n=(t.config,w.elem("div",{"class":h}));t.elem&&(n.innerHTML=e||"",w(t.elem).find("."+h).remove(),t.elem.appendChild(n),clearTimeout(t.hinTimer),t.hinTimer=setTimeout(function(){w(t.elem).find("."+h).remove()},3e3))},T.prototype.getAsYM=function(e,t,n){return n?t--:t++,t<0&&(t=11,e--),t>11&&(t=0,e++),[e,t]},T.prototype.systemDate=function(e){var t=e||new Date;return{year:t.getFullYear(),month:t.getMonth(),date:t.getDate(),hours:e?e.getHours():0,minutes:e?e.getMinutes():0,seconds:e?e.getSeconds():0}},T.prototype.checkDate=function(e){var t,a,i=this,r=(new Date,i.config),o=r.dateTime=r.dateTime||i.systemDate(),s=i.bindElem||r.elem[0],l=(i.isInput(s)?"val":"html",i.isInput(s)?s.value:"static"===r.position?"":s.innerHTML),c=function(e){e.year>d[1]&&(e.year=d[1],a=!0),e.month>11&&(e.month=11,a=!0),e.hours>23&&(e.hours=0,a=!0),e.minutes>59&&(e.minutes=0,e.hours++,a=!0),e.seconds>59&&(e.seconds=0,e.minutes++,a=!0),t=n.getEndDate(e.month+1,e.year),e.date>t&&(e.date=t,a=!0)},m=function(e,t,n){var o=["startTime","endTime"];t=(t.match(i.EXP_SPLIT)||[]).slice(1),n=n||0,r.range&&(i[o[n]]=i[o[n]]||{}),w.each(i.format,function(s,l){var c=parseFloat(t[s]);t[s].length必须遵循下述格式:
      "+(r.range?r.format+" "+r.range+" "+r.format:r.format)+"
      已为你重置"),a=!0):l&&l.constructor===Date?r.dateTime=i.systemDate(l):(r.dateTime=i.systemDate(),delete i.startState,delete i.endState,delete i.startDate,delete i.endDate,delete i.startTime,delete i.endTime),c(o),a&&l&&i.setValue(r.range?i.endDate?i.parse():"":i.parse()),e&&e(),i)},T.prototype.mark=function(e,t){var n,a=this,i=a.config;return w.each(i.mark,function(e,a){var i=e.split("-");i[0]!=t[0]&&0!=i[0]||i[1]!=t[1]&&0!=i[1]||i[2]!=t[2]||(n=a||t[2])}),n&&e.html(''+n+""),a},T.prototype.limit=function(e,t,n,a){var i,r=this,o=r.config,l={},d=o[n>41?"endDate":"dateTime"],c=w.extend({},d,t||{});return w.each({now:c,min:o.min,max:o.max},function(e,t){l[e]=r.newDate(w.extend({year:t.year,month:t.month,date:t.date},function(){var e={};return w.each(a,function(n,a){e[a]=t[a]}),e}())).getTime()}),i=l.nowl.max,e&&e[i?"addClass":"removeClass"](s),i},T.prototype.calendar=function(e){var t,a,i,r=this,s=r.config,l=e||s.dateTime,c=new Date,m=r.lang(),u="date"!==s.type&&"datetime"!==s.type,h=e?1:0,y=w(r.table[h]).find("td"),f=w(r.elemHeader[h][2]).find("span");if(l.yeard[1]&&(l.year=d[1],r.hint("最高只能支持到公元"+d[1]+"年")),r.firstDate||(r.firstDate=w.extend({},l)),c.setFullYear(l.year,l.month,1),t=c.getDay(),a=n.getEndDate(l.month||12,l.year),i=n.getEndDate(l.month+1,l.year),w.each(y,function(e,n){var d=[l.year,l.month],c=0;n=w(n),n.removeAttr("class"),e=t&&e=n.firstDate.year&&(r.month=a.max.month,r.date=a.max.date),n.limit(w(i),r,t),M++}),w(u[f?0:1]).attr("lay-ym",M-8+"-"+T[1]).html(b+p+" - "+(M-1+p))}else if("month"===e)w.each(new Array(12),function(e){var i=w.elem("li",{"lay-ym":e}),s={year:T[0],month:e};e+1==T[1]&&w(i).addClass(o),i.innerHTML=r.month[e]+(f?"月":""),d.appendChild(i),T[0]=n.firstDate.year&&(s.date=a.max.date),n.limit(w(i),s,t)}),w(u[f?0:1]).attr("lay-ym",T[0]+"-"+T[1]).html(T[0]+p);else if("time"===e){var E=function(){w(d).find("ol").each(function(e,a){w(a).find("li").each(function(a,i){n.limit(w(i),[{hours:a},{hours:n[x].hours,minutes:a},{hours:n[x].hours,minutes:n[x].minutes,seconds:a}][e],t,[["hours"],["hours","minutes"],["hours","minutes","seconds"]][e])})}),a.range||n.limit(w(n.footer).find(g),n[x],0,["hours","minutes","seconds"])};a.range?n[x]||(n[x]={hours:0,minutes:0,seconds:0}):n[x]=i,w.each([24,60,60],function(e,t){var a=w.elem("li"),i=["

      "+r.time[e]+"

        "];w.each(new Array(t),function(t){i.push(""+w.digit(t,2)+"")}),a.innerHTML=i.join("")+"
      ",d.appendChild(a)}),E()}if(y&&h.removeChild(y),h.appendChild(d),"year"===e||"month"===e)w(n.elemMain[t]).addClass("laydate-ym-show"),w(d).find("li").on("click",function(){var r=0|w(this).attr("lay-ym");if(!w(this).hasClass(s)){if(0===t)i[e]=r,l&&(n.startDate[e]=r),n.limit(w(n.footer).find(g),null,0);else if(l)n.endDate[e]=r;else{var c="year"===e?n.getAsYM(r,T[1]-1,"sub"):n.getAsYM(T[0],r,"sub");w.extend(i,{year:c[0],month:c[1]})}"year"===a.type||"month"===a.type?(w(d).find("."+o).removeClass(o),w(this).addClass(o),"month"===a.type&&"year"===e&&(n.listYM[t][0]=r,l&&(n[["startDate","endDate"][t]].year=r),n.list("month",t))):(n.checkDate("limit").calendar(),n.closeList()),n.setBtnStatus(),a.range||n.done(null,"change"),w(n.footer).find(D).removeClass(s)}});else{var S=w.elem("span",{"class":v}),k=function(){w(d).find("ol").each(function(e){var t=this,a=w(t).find("li");t.scrollTop=30*(n[x][C[e]]-2),t.scrollTop<=0&&a.each(function(e,n){if(!w(this).hasClass(s))return t.scrollTop=30*(e-2),!0})})},H=w(c[2]).find("."+v);k(),S.innerHTML=a.range?[r.startTime,r.endTime][t]:r.timeTips,w(n.elemMain[t]).addClass("laydate-time-show"),H[0]&&H.remove(),c[2].appendChild(S),w(d).find("ol").each(function(e){var t=this;w(t).find("li").on("click",function(){var r=0|this.innerHTML;w(this).hasClass(s)||(a.range?n[x][C[e]]=r:i[C[e]]=r,w(t).find("."+o).removeClass(o),w(this).addClass(o),E(),k(),(n.endDate||"time"===a.type)&&n.done(null,"change"),n.setBtnStatus())})})}return n},T.prototype.listYM=[],T.prototype.closeList=function(){var e=this;e.config;w.each(e.elemCont,function(t,n){w(this).find("."+m).remove(),w(e.elemMain[t]).removeClass("laydate-ym-show laydate-time-show")}),w(e.elem).find("."+v).remove()},T.prototype.setBtnStatus=function(e,t,n){var a,i=this,r=i.config,o=w(i.footer).find(g),d=r.range&&"date"!==r.type&&"time"!==r.type;d&&(t=t||i.startDate,n=n||i.endDate,a=i.newDate(t).getTime()>i.newDate(n).getTime(),i.limit(null,t)||i.limit(null,n)?o.addClass(s):o[a?"addClass":"removeClass"](s),e&&a&&i.hint("string"==typeof e?l.replace(/日期/g,e):l))},T.prototype.parse=function(e,t){var n=this,a=n.config,i=t||(e?w.extend({},n.endDate,n.endTime):a.range?w.extend({},n.startDate,n.startTime):a.dateTime),r=n.format.concat();return w.each(r,function(e,t){/yyyy|y/.test(t)?r[e]=w.digit(i.year,t.length):/MM|M/.test(t)?r[e]=w.digit(i.month+1,t.length):/dd|d/.test(t)?r[e]=w.digit(i.date,t.length):/HH|H/.test(t)?r[e]=w.digit(i.hours,t.length):/mm|m/.test(t)?r[e]=w.digit(i.minutes,t.length):/ss|s/.test(t)&&(r[e]=w.digit(i.seconds,t.length))}),a.range&&!e?r.join("")+" "+a.range+" "+n.parse(1):r.join("")},T.prototype.newDate=function(e){return e=e||{},new Date(e.year||1,e.month||0,e.date||1,e.hours||0,e.minutes||0,e.seconds||0)},T.prototype.setValue=function(e){var t=this,n=t.config,a=t.bindElem||n.elem[0],i=t.isInput(a)?"val":"html";return"static"===n.position||w(a)[i](e||""),this},T.prototype.stampRange=function(){var e,t,n=this,a=n.config,i=w(n.elem).find("td");if(a.range&&!n.endDate&&w(n.footer).find(g).addClass(s),n.endDate)return e=n.newDate({year:n.startDate.year,month:n.startDate.month,date:n.startDate.date}).getTime(),t=n.newDate({year:n.endDate.year,month:n.endDate.month,date:n.endDate.date}).getTime(),e>t?n.hint(l):void w.each(i,function(a,i){var r=w(i).attr("lay-ymd").split("-"),s=n.newDate({year:r[0],month:r[1]-1,date:r[2]}).getTime();w(i).removeClass(u+" "+o),s!==e&&s!==t||w(i).addClass(w(i).hasClass(y)||w(i).hasClass(f)?u:o),s>e&&s0;a--) + if("interactive"===t[a].readyState){ + e=t[a].src; + break + } + return e||t[n].src + }(); + return e.substring(0,e.lastIndexOf("/")+1) // 返回当前脚本所在的路径 + }(), + + // 获取指定元素的样式 + getStyle:function(e,t){ + var n=e.currentStyle?e.currentStyle:window.getComputedStyle(e,null); + return n[n.getPropertyValue?"getPropertyValue":"getAttribute"](t) + }, + + // 动态加载 CSS 样式表 + link:function(e,a,i){ + if(n.path){ + var r=document.getElementsByTagName("head")[0], + o=document.createElement("link"); + "string"==typeof a&&(i=a); // 如果 a 是字符串,则将 i 设置为 a + var s=(i||e).replace(/\.|\//g,""), + l="layuicss-"+s,d=0; + o.rel="stylesheet", + o.href=n.path+e, + o.id=l, + document.getElementById(l)||r.appendChild(o), + + // 加载后调用回调函数 + "function"==typeof a&&!function c(){ + return++d>80?window.console&&console.error("laydate.css: Invalid"):void(1989===parseInt(t.getStyle(document.getElementById(l),"width"))?a():setTimeout(c,100)) + }() + } + } + }, + + // 版本和配置初始化 + n={ + v:"5.0.9", + config:{}, + index:window.laydate&&window.laydate.v?1e5:0, + path:t.getPath, + + // 设置配置项 + set:function(e){ + var t=this; + return t.config=w.extend({},t.config,e),t + }, + + // 加载资源后,执行初始化 + ready:function(a){ + var i="laydate", + r="", + o=(e?"modules/laydate/":"theme/")+"default/laydate.css?v="+n.v+r; + return e?layui.addcss(o,a,i):t.link(o,a,i),this + } + }, + + // 组件对象初始化 + a=function(){ + var e=this; + return{ + hint:function(t){ + e.hint.call(e,t) + }, + config:e.config + } + }, + + i="laydate", + r=".layui-laydate", + o="layui-this", + s="laydate-disabled", + l="开始日期超出了结束日期
      建议重新选择", + d=[100,2e5], + c="layui-laydate-static", + m="layui-laydate-list", + u="laydate-selected", + h="layui-laydate-hint", + y="laydate-day-prev", + f="laydate-day-next", + p="layui-laydate-footer", + g=".laydate-btns-confirm", + v="laydate-time-text", + D=".laydate-btns-time", + + // 初始化函数 + T=function(e){ + var t=this; + t.index=++n.index, + t.config=w.extend({},t.config,n.config,e), + n.ready(function(){ + t.init() + }) + }, + + // 工具函数,返回元素对象 + w=function(e){ + return new C(e) + }, + + // C 构造函数,操作 DOM 元素 + C=function(e){ + for(var t=0,n="object"==typeof e?[e]:(this.selector=e,document.querySelectorAll(e||null));t0)return n[0].getAttribute(e) + }():n.each(function(n,a){ + a.setAttribute(e,t) + }) + }, + + // 移除属性 + C.prototype.removeAttr=function(e){ + return this.each(function(t,n){ + n.removeAttribute(e) + }) + }, + + // 设置 HTML 内容 + C.prototype.html=function(e){ + return this.each(function(t,n){ + n.innerHTML=e + }) + }, + +// 设置或获取输入框的值 + T.prototype.render=function(e){ // 渲染日期选择器 + var t=this,n=(t.config,w("#"+t.elemID)),a=n.hasClass("laydate-footer"),i=n.find("td"),r=n.find("ul"); // 获取配置和HTML元素 + if(!t.config.range||a){ // 如果是日期范围选择或者没有日期范围 + if(!a){ // 如果没有footer元素 + t.elemFooter&&(t.elemFooter.style.display="none"); // 隐藏footer + }else{ // 如果有footer元素 + r.css("display","block"); // 显示时间列表 + } + } + t.dateTime={year:e.year,month:e.month,date:e.date,hours:e.hours,minutes:e.minutes,seconds:e.seconds}; // 更新日期时间 + t.renderList(e); // 渲染日期列表 + }, + T.prototype.renderList=function(e){ // 渲染日期列表 + var t=this,n=(t.config,w("#"+t.elemID)),a=n.find("td"); + w.each(a,function(t,a){ // 遍历每个单元格 + var i=w(a),r=i.attr("lay-ymd").split("-"),s=n.newDate({year:r[0],month:r[1]-1,date:r[2]}).getTime(); // 获取每个日期的时间戳 + if(s===t.dateTime.getTime())i.addClass("laydate-day-selected"); // 如果日期匹配,添加选中样式 + else i.removeClass("laydate-day-selected"); // 否则移除选中样式 + }); + }, + T.prototype.position=function(){ // 计算并设置日期选择器的位置 + var e=this,t=e.config,n=e.bindElem||t.elem[0],a=n.getBoundingClientRect(),i=e.elem.offsetWidth,r=e.elem.offsetHeight; + var o=function(e){ // 获取滚动位置 + return e=e?"scrollLeft":"scrollTop",document.body[e]|document.documentElement[e]; + }; + var s=function(e){ // 获取窗口大小 + return document.documentElement[e?"clientWidth":"clientHeight"]; + }; + var l=5,d=a.left,c=a.bottom; // 设置偏移量 + d+i+l>s("width")&&(d=s("width")-i-l); // 如果超出窗口宽度,调整位置 + c+r+l>s()&&(c=a.top>r?a.top-r:s()-r,c-=2*l); // 如果超出窗口高度,调整位置 + t.position&&(e.elem.style.position=t.position); // 如果有指定位置类型,设置位置类型 + e.elem.style.left=d+("fixed"===t.position?0:o(1))+"px"; // 设置左边距 + e.elem.style.top=c+("fixed"===t.position?0:o())+"px"; // 设置顶部边距 + }, + T.prototype.checkDate=function(e){ // 检查日期是否合法 + var t=this,n=(t.config,w("#"+t.elemID)); + // 判断日期范围 + var i=t.dateTime=e.dateTime||new Date(); + var r=t.bindElem||n[0]; + var o=function(e){ // 日期合法性检查 + if(e.year>d[1]){ // 如果年份超过最大年份 + e.year=d[1]; + a=!0; + } + }; + // 校验并返回检查结果 + }, diff --git a/web/lay/modules/layedit.js b/web/lay/modules/layedit.js index 6a18044..80779f8 100644 --- a/web/lay/modules/layedit.js +++ b/web/lay/modules/layedit.js @@ -1,2 +1,93 @@ /** layui-v2.5.6 MIT License By https://www.layui.com */ - ;layui.define(["layer","form"],function(t){"use strict";var e=layui.$,i=layui.layer,a=layui.form,l=(layui.hint(),layui.device()),n="layedit",o="layui-show",r="layui-disabled",c=function(){var t=this;t.index=0,t.config={tool:["strong","italic","underline","del","|","left","center","right","|","link","unlink","face","image"],hideTool:[],height:280}};c.prototype.set=function(t){var i=this;return e.extend(!0,i.config,t),i},c.prototype.on=function(t,e){return layui.onevent(n,t,e)},c.prototype.build=function(t,i){i=i||{};var a=this,n=a.config,r="layui-layedit",c=e("string"==typeof t?"#"+t:t),u="LAY_layedit_"+ ++a.index,d=c.next("."+r),y=e.extend({},n,i),f=function(){var t=[],e={};return layui.each(y.hideTool,function(t,i){e[i]=!0}),layui.each(y.tool,function(i,a){C[a]&&!e[a]&&t.push(C[a])}),t.join("")}(),m=e(['
      ','
      '+f+"
      ",'
      ','',"
      ","
      "].join(""));return l.ie&&l.ie<8?c.removeClass("layui-hide").addClass(o):(d[0]&&d.remove(),s.call(a,m,c[0],y),c.addClass("layui-hide").after(m),a.index)},c.prototype.getContent=function(t){var e=u(t);if(e[0])return d(e[0].document.body.innerHTML)},c.prototype.getText=function(t){var i=u(t);if(i[0])return e(i[0].document.body).text()},c.prototype.setContent=function(t,i,a){var l=u(t);l[0]&&(a?e(l[0].document.body).append(i):e(l[0].document.body).html(i),layedit.sync(t))},c.prototype.sync=function(t){var i=u(t);if(i[0]){var a=e("#"+i[1].attr("textarea"));a.val(d(i[0].document.body.innerHTML))}},c.prototype.getSelection=function(t){var e=u(t);if(e[0]){var i=m(e[0].document);return document.selection?i.text:i.toString()}};var s=function(t,i,a){var l=this,n=t.find("iframe");n.css({height:a.height}).on("load",function(){var o=n.contents(),r=n.prop("contentWindow"),c=o.find("head"),s=e([""].join("")),u=o.find("body");c.append(s),u.attr("contenteditable","true").css({"min-height":a.height}).html(i.value||""),y.apply(l,[r,n,i,a]),g.call(l,r,t,a)})},u=function(t){var i=e("#LAY_layedit_"+t),a=i.prop("contentWindow");return[a,i]},d=function(t){return 8==l.ie&&(t=t.replace(/<.+>/g,function(t){return t.toLowerCase()})),t},y=function(t,a,n,o){var r=t.document,c=e(r.body);c.on("keydown",function(t){var e=t.keyCode;if(13===e){var a=m(r),l=p(a),n=l.parentNode;if("pre"===n.tagName.toLowerCase()){if(t.shiftKey)return;return i.msg("请暂时用shift+enter"),!1}r.execCommand("formatBlock",!1,"

      ")}}),e(n).parents("form").on("submit",function(){var t=c.html();8==l.ie&&(t=t.replace(/<.+>/g,function(t){return t.toLowerCase()})),n.value=t}),c.on("paste",function(e){r.execCommand("formatBlock",!1,"

      "),setTimeout(function(){f.call(t,c),n.value=c.html()},100)})},f=function(t){var i=this;i.document;t.find("*[style]").each(function(){var t=this.style.textAlign;this.removeAttribute("style"),e(this).css({"text-align":t||""})}),t.find("table").addClass("layui-table"),t.find("script,link").remove()},m=function(t){return t.selection?t.selection.createRange():t.getSelection().getRangeAt(0)},p=function(t){return t.endContainer||t.parentElement().childNodes[0]},v=function(t,i,a){var l=this.document,n=document.createElement(t);for(var o in i)n.setAttribute(o,i[o]);if(n.removeAttribute("text"),l.selection){var r=a.text||i.text;if("a"===t&&!r)return;r&&(n.innerHTML=r),a.pasteHTML(e(n).prop("outerHTML")),a.select()}else{var r=a.toString()||i.text;if("a"===t&&!r)return;r&&(n.innerHTML=r),a.deleteContents(),a.insertNode(n)}},h=function(t,i){var a=this.document,l="layedit-tool-active",n=p(m(a)),o=function(e){return t.find(".layedit-tool-"+e)};i&&i[i.hasClass(l)?"removeClass":"addClass"](l),t.find(">i").removeClass(l),o("unlink").addClass(r),e(n).parents().each(function(){var t=this.tagName.toLowerCase(),e=this.style.textAlign;"b"!==t&&"strong"!==t||o("b").addClass(l),"i"!==t&&"em"!==t||o("i").addClass(l),"u"===t&&o("u").addClass(l),"strike"===t&&o("d").addClass(l),"p"===t&&("center"===e?o("center").addClass(l):"right"===e?o("right").addClass(l):o("left").addClass(l)),"a"===t&&(o("link").addClass(l),o("unlink").removeClass(r))})},g=function(t,a,l){var n=t.document,o=e(n.body),c={link:function(i){var a=p(i),l=e(a).parent();b.call(o,{href:l.attr("href"),target:l.attr("target")},function(e){var a=l[0];"A"===a.tagName?a.href=e.url:v.call(t,"a",{target:e.target,href:e.url,text:e.url},i)})},unlink:function(t){n.execCommand("unlink")},face:function(e){x.call(this,function(i){v.call(t,"img",{src:i.src,alt:i.alt},e)})},image:function(a){var n=this;layui.use("upload",function(o){var r=l.uploadImage||{};o.render({url:r.url,method:r.type,elem:e(n).find("input")[0],done:function(e){0==e.code?(e.data=e.data||{},v.call(t,"img",{src:e.data.src,alt:e.data.title},a)):i.msg(e.msg||"上传失败")}})})},code:function(e){k.call(o,function(i){v.call(t,"pre",{text:i.code,"lay-lang":i.lang},e)})},help:function(){i.open({type:2,title:"帮助",area:["600px","380px"],shadeClose:!0,shade:.1,skin:"layui-layer-msg",content:["http://www.layui.com/about/layedit/help.html","no"]})}},s=a.find(".layui-layedit-tool"),u=function(){var i=e(this),a=i.attr("layedit-event"),l=i.attr("lay-command");if(!i.hasClass(r)){o.focus();var u=m(n);u.commonAncestorContainer;l?(n.execCommand(l),/justifyLeft|justifyCenter|justifyRight/.test(l)&&n.execCommand("formatBlock",!1,"

      "),setTimeout(function(){o.focus()},10)):c[a]&&c[a].call(this,u),h.call(t,s,i)}},d=/image/;s.find(">i").on("mousedown",function(){var t=e(this),i=t.attr("layedit-event");d.test(i)||u.call(this)}).on("click",function(){var t=e(this),i=t.attr("layedit-event");d.test(i)&&u.call(this)}),o.on("click",function(){h.call(t,s),i.close(x.index)})},b=function(t,e){var l=this,n=i.open({type:1,id:"LAY_layedit_link",area:"350px",shade:.05,shadeClose:!0,moveType:1,title:"超链接",skin:"layui-layer-msg",content:['

        ','
      • ','','
        ','',"
        ","
      • ",'
      • ','','
        ','",'","
        ","
      • ",'
      • ','','',"
      • ","
      "].join(""),success:function(t,n){var o="submit(layedit-link-yes)";a.render("radio"),t.find(".layui-btn-primary").on("click",function(){i.close(n),l.focus()}),a.on(o,function(t){i.close(b.index),e&&e(t.field)})}});b.index=n},x=function(t){var a=function(){var t=["[微笑]","[嘻嘻]","[哈哈]","[可爱]","[可怜]","[挖鼻]","[吃惊]","[害羞]","[挤眼]","[闭嘴]","[鄙视]","[爱你]","[泪]","[偷笑]","[亲亲]","[生病]","[太开心]","[白眼]","[右哼哼]","[左哼哼]","[嘘]","[衰]","[委屈]","[吐]","[哈欠]","[抱抱]","[怒]","[疑问]","[馋嘴]","[拜拜]","[思考]","[汗]","[困]","[睡]","[钱]","[失望]","[酷]","[色]","[哼]","[鼓掌]","[晕]","[悲伤]","[抓狂]","[黑线]","[阴险]","[怒骂]","[互粉]","[心]","[伤心]","[猪头]","[熊猫]","[兔子]","[ok]","[耶]","[good]","[NO]","[赞]","[来]","[弱]","[草泥马]","[神马]","[囧]","[浮云]","[给力]","[围观]","[威武]","[奥特曼]","[礼物]","[钟]","[话筒]","[蜡烛]","[蛋糕]"],e={};return layui.each(t,function(t,i){e[i]=layui.cache.dir+"images/face/"+t+".gif"}),e}();return x.hide=x.hide||function(t){"face"!==e(t.target).attr("layedit-event")&&i.close(x.index)},x.index=i.tips(function(){var t=[];return layui.each(a,function(e,i){t.push('
    5. '+e+'
    6. ')}),'
        '+t.join("")+"
      "}(),this,{tips:1,time:0,skin:"layui-box layui-util-face",maxWidth:500,success:function(l,n){l.css({marginTop:-4,marginLeft:-10}).find(".layui-clear>li").on("click",function(){t&&t({src:a[this.title],alt:this.title}),i.close(n)}),e(document).off("click",x.hide).on("click",x.hide)}})},k=function(t){var e=this,l=i.open({type:1,id:"LAY_layedit_code",area:"550px",shade:.05,shadeClose:!0,moveType:1,title:"插入代码",skin:"layui-layer-msg",content:['
        ','
      • ','','
        ','","
        ","
      • ",'
      • ','','
        ','',"
        ","
      • ",'
      • ','','',"
      • ","
      "].join(""),success:function(l,n){var o="submit(layedit-code-yes)";a.render("select"),l.find(".layui-btn-primary").on("click",function(){i.close(n),e.focus()}),a.on(o,function(e){i.close(k.index),t&&t(e.field)})}});k.index=l},C={html:'',strong:'',italic:'',underline:'',del:'',"|":'',left:'',center:'',right:'',link:'',unlink:'',face:'',image:'',code:'',help:''},w=new c;t(n,w)}); \ No newline at end of file +;layui.define(["layer","form"],function(t){"use strict"; + var e=layui.$, // 引用 layui.$,即 jQuery + i=layui.layer, // 引用 layui.layer,弹出层 + a=layui.form, // 引用 layui.form,表单组件 + l=(layui.hint(),layui.device()), // 引用 layui.hint() 和 layui.device(),设备信息 + n="layedit", // 编辑器名称 + o="layui-show", // 显示样式 + r="layui-disabled", // 禁用样式 + c=function(){ // 构造器,初始化配置 + var t=this; + t.index=0; // 编辑器索引 + t.config={ // 编辑器默认配置 + tool:["strong","italic","underline","del","|","left","center","right","|","link","unlink","face","image"], // 工具栏按钮 + hideTool:[], // 隐藏的工具 + height:280 // 编辑框高度 + } + }; + c.prototype.set=function(t){ // 配置方法 + var i=this; + return e.extend(!0,i.config,t),i // 合并配置 + }, + c.prototype.on=function(t,e){ // 事件监听 + return layui.onevent(n,t,e) + }, + c.prototype.build=function(t,i){ // 构建编辑器 + i=i||{}; + var a=this,n=a.config,r="layui-layedit",c=e("string"==typeof t?"#"+t:t),u="LAY_layedit_"+ ++a.index,d=c.next("."+r),y=e.extend({},n,i), + f=function(){ // 工具栏显示设置 + var t=[],e={}; + return layui.each(y.hideTool,function(t,i){e[i]=!0}), + layui.each(y.tool,function(i,a){C[a]&&!e[a]&&t.push(C[a])}),t.join("") + }(), + m=e(['
      ', // 编辑器HTML结构 + '
      '+f+"
      ", + '
      ', + '', + "
      ","
      "].join("")); + return l.ie&&l.ie<8?c.removeClass("layui-hide").addClass(o):(d[0]&&d.remove(),s.call(a,m,c[0],y),c.addClass("layui-hide").after(m),a.index) + }, + c.prototype.getContent=function(t){ // 获取编辑框内容 + var e=u(t); + if(e[0])return d(e[0].document.body.innerHTML) + }, + c.prototype.getText=function(t){ // 获取纯文本 + var i=u(t); + if(i[0])return e(i[0].document.body).text() + }, + c.prototype.setContent=function(t,i,a){ // 设置编辑框内容 + var l=u(t); + l[0]&&(a?e(l[0].document.body).append(i):e(l[0].document.body).html(i),layedit.sync(t)) + }, + c.prototype.sync=function(t){ // 同步内容 + var i=u(t); + if(i[0]){var a=e("#"+i[1].attr("textarea")); + a.val(d(i[0].document.body.innerHTML)) + } + }, + c.prototype.getSelection=function(t){ // 获取当前选中的文本 + var e=u(t); + if(e[0]){var i=m(e[0].document); + return document.selection?i.text:i.toString() + } + }; + var s=function(t,i,a){ // 创建编辑器iframe并初始化 + var l=this,n=t.find("iframe"); + n.css({height:a.height}).on("load",function(){ + var o=n.contents(),r=n.prop("contentWindow"),c=o.find("head"),s=e([""].join("")), + u=o.find("body"); + c.append(s),u.attr("contenteditable","true").css({"min-height":a.height}).html(i.value||""),y.apply(l,[r,n,i,a]),g.call(l,r,t,a) + }) + }, + u=function(t){ // 获取iframe及其窗口对象 + var i=e("#LAY_layedit_"+t),a=i.prop("contentWindow"); + return[a,i] + }, + d=function(t){ // 处理IE低版本兼容 + return 8==l.ie&&(t=t.replace(/<.+>/g,function(t){return t.toLowerCase()})),t + }, + y=function(t,a,n,o){ // 编辑器初始化和事件绑定 + var r=t.document,c=e(r.body); + c.on("keydown",function(t){ // 监听按键事件 + var e=t.keyCode; + if(13===e){var a=m(r),l=p(a),n=l.parentNode;if("pre"===n.tagName.toLowerCase()){if(t.shiftKey)return;return i.msg("请暂时用shift+enter"),!1}r.execCommand("formatBlock",!1,"

      ") + }},e(n).parents("form").on("submit",function(){var t=c.html();8==l.ie&&(t=t.replace(/<.+>/g,function(t){return t.toLowerCase()})),n.value=t}), + c.on("paste",function(e){r.execCommand("formatBlock",!1,"

      "),setTimeout(function(){f.call(t,c),n.value=c.html()},100)}) + }, + f=function(t){ // 格式化HTML + var i=this;i.document; + t.find("*[style]").each(function(){var t=this.style.textAlign;this.removeAttribute("style"),e(this).css({"text-align":t||""})}), + t.find("table").addClass("layui-table"), + t.find("script,link").remove() + }, diff --git a/web/lay/modules/layer.js b/web/lay/modules/layer.js index 03e780c..5a9f2d4 100644 --- a/web/lay/modules/layer.js +++ b/web/lay/modules/layer.js @@ -1,2 +1,130 @@ /** layui-v2.5.6 MIT License By https://www.layui.com */ - ;!function(e,t){"use strict";var i,n,a=e.layui&&layui.define,o={getPath:function(){var e=document.currentScript?document.currentScript.src:function(){for(var e,t=document.scripts,i=t.length-1,n=i;n>0;n--)if("interactive"===t[n].readyState){e=t[n].src;break}return e||t[i].src}();return e.substring(0,e.lastIndexOf("/")+1)}(),config:{},end:{},minIndex:0,minLeft:[],btn:["确定","取消"],type:["dialog","page","iframe","loading","tips"],getStyle:function(t,i){var n=t.currentStyle?t.currentStyle:e.getComputedStyle(t,null);return n[n.getPropertyValue?"getPropertyValue":"getAttribute"](i)},link:function(t,i,n){if(r.path){var a=document.getElementsByTagName("head")[0],s=document.createElement("link");"string"==typeof i&&(n=i);var l=(n||t).replace(/\.|\//g,""),f="layuicss-"+l,c=0;s.rel="stylesheet",s.href=r.path+t,s.id=f,document.getElementById(f)||a.appendChild(s),"function"==typeof i&&!function u(){return++c>80?e.console&&console.error("layer.css: Invalid"):void(1989===parseInt(o.getStyle(document.getElementById(f),"width"))?i():setTimeout(u,100))}()}}},r={v:"3.1.1",ie:function(){var t=navigator.userAgent.toLowerCase();return!!(e.ActiveXObject||"ActiveXObject"in e)&&((t.match(/msie\s(\d+)/)||[])[1]||"11")}(),index:e.layer&&e.layer.v?1e5:0,path:o.getPath,config:function(e,t){return e=e||{},r.cache=o.config=i.extend({},o.config,e),r.path=o.config.path||r.path,"string"==typeof e.extend&&(e.extend=[e.extend]),o.config.path&&r.ready(),e.extend?(a?layui.addcss("modules/layer/"+e.extend):o.link("theme/"+e.extend),this):this},ready:function(e){var t="layer",i="",n=(a?"modules/layer/":"theme/")+"default/layer.css?v="+r.v+i;return a?layui.addcss(n,e,t):o.link(n,e,t),this},alert:function(e,t,n){var a="function"==typeof t;return a&&(n=t),r.open(i.extend({content:e,yes:n},a?{}:t))},confirm:function(e,t,n,a){var s="function"==typeof t;return s&&(a=n,n=t),r.open(i.extend({content:e,btn:o.btn,yes:n,btn2:a},s?{}:t))},msg:function(e,n,a){var s="function"==typeof n,f=o.config.skin,c=(f?f+" "+f+"-msg":"")||"layui-layer-msg",u=l.anim.length-1;return s&&(a=n),r.open(i.extend({content:e,time:3e3,shade:!1,skin:c,title:!1,closeBtn:!1,btn:!1,resize:!1,end:a},s&&!o.config.skin?{skin:c+" layui-layer-hui",anim:u}:function(){return n=n||{},(n.icon===-1||n.icon===t&&!o.config.skin)&&(n.skin=c+" "+(n.skin||"layui-layer-hui")),n}()))},load:function(e,t){return r.open(i.extend({type:3,icon:e||0,resize:!1,shade:.01},t))},tips:function(e,t,n){return r.open(i.extend({type:4,content:[e,t],closeBtn:!1,time:3e3,shade:!1,resize:!1,fixed:!1,maxWidth:210},n))}},s=function(e){var t=this;t.index=++r.index,t.config=i.extend({},t.config,o.config,e),document.body?t.creat():setTimeout(function(){t.creat()},30)};s.pt=s.prototype;var l=["layui-layer",".layui-layer-title",".layui-layer-main",".layui-layer-dialog","layui-layer-iframe","layui-layer-content","layui-layer-btn","layui-layer-close"];l.anim=["layer-anim-00","layer-anim-01","layer-anim-02","layer-anim-03","layer-anim-04","layer-anim-05","layer-anim-06"],s.pt.config={type:0,shade:.3,fixed:!0,move:l[1],title:"信息",offset:"auto",area:"auto",closeBtn:1,time:0,zIndex:19891014,maxWidth:360,anim:0,isOutAnim:!0,icon:-1,moveType:1,resize:!0,scrollbar:!0,tips:2},s.pt.vessel=function(e,t){var n=this,a=n.index,r=n.config,s=r.zIndex+a,f="object"==typeof r.title,c=r.maxmin&&(1===r.type||2===r.type),u=r.title?'

      '+(f?r.title[0]:r.title)+"
      ":"";return r.zIndex=s,t([r.shade?'
      ':"",'
      '+(e&&2!=r.type?"":u)+'
      '+(0==r.type&&r.icon!==-1?'':"")+(1==r.type&&e?"":r.content||"")+'
      '+function(){var e=c?'':"";return r.closeBtn&&(e+=''),e}()+""+(r.btn?function(){var e="";"string"==typeof r.btn&&(r.btn=[r.btn]);for(var t=0,i=r.btn.length;t'+r.btn[t]+"";return'
      '+e+"
      "}():"")+(r.resize?'':"")+"
      "],u,i('
      ')),n},s.pt.creat=function(){var e=this,t=e.config,a=e.index,s=t.content,f="object"==typeof s,c=i("body");if(!t.id||!i("#"+t.id)[0]){switch("string"==typeof t.area&&(t.area="auto"===t.area?["",""]:[t.area,""]),t.shift&&(t.anim=t.shift),6==r.ie&&(t.fixed=!1),t.type){case 0:t.btn="btn"in t?t.btn:o.btn[0],r.closeAll("dialog");break;case 2:var s=t.content=f?t.content:[t.content||"","auto"];t.content='';break;case 3:delete t.title,delete t.closeBtn,t.icon===-1&&0===t.icon,r.closeAll("loading");break;case 4:f||(t.content=[t.content,"body"]),t.follow=t.content[1],t.content=t.content[0]+'',delete t.title,t.tips="object"==typeof t.tips?t.tips:[t.tips,!0],t.tipsMore||r.closeAll("tips")}if(e.vessel(f,function(n,r,u){c.append(n[0]),f?function(){2==t.type||4==t.type?function(){i("body").append(n[1])}():function(){s.parents("."+l[0])[0]||(s.data("display",s.css("display")).show().addClass("layui-layer-wrap").wrap(n[1]),i("#"+l[0]+a).find("."+l[5]).before(r))}()}():c.append(n[1]),i(".layui-layer-move")[0]||c.append(o.moveElem=u),e.layero=i("#"+l[0]+a),t.scrollbar||l.html.css("overflow","hidden").attr("layer-full",a)}).auto(a),i("#layui-layer-shade"+e.index).css({"background-color":t.shade[1]||"#000",opacity:t.shade[0]||t.shade}),2==t.type&&6==r.ie&&e.layero.find("iframe").attr("src",s[0]),4==t.type?e.tips():e.offset(),t.fixed&&n.on("resize",function(){e.offset(),(/^\d+%$/.test(t.area[0])||/^\d+%$/.test(t.area[1]))&&e.auto(a),4==t.type&&e.tips()}),t.time<=0||setTimeout(function(){r.close(e.index)},t.time),e.move().callback(),l.anim[t.anim]){var u="layer-anim "+l.anim[t.anim];e.layero.addClass(u).one("webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend",function(){i(this).removeClass(u)})}t.isOutAnim&&e.layero.data("isOutAnim",!0)}},s.pt.auto=function(e){var t=this,a=t.config,o=i("#"+l[0]+e);""===a.area[0]&&a.maxWidth>0&&(r.ie&&r.ie<8&&a.btn&&o.width(o.innerWidth()),o.outerWidth()>a.maxWidth&&o.width(a.maxWidth));var s=[o.innerWidth(),o.innerHeight()],f=o.find(l[1]).outerHeight()||0,c=o.find("."+l[6]).outerHeight()||0,u=function(e){e=o.find(e),e.height(s[1]-f-c-2*(0|parseFloat(e.css("padding-top"))))};switch(a.type){case 2:u("iframe");break;default:""===a.area[1]?a.maxHeight>0&&o.outerHeight()>a.maxHeight?(s[1]=a.maxHeight,u("."+l[5])):a.fixed&&s[1]>=n.height()&&(s[1]=n.height(),u("."+l[5])):u("."+l[5])}return t},s.pt.offset=function(){var e=this,t=e.config,i=e.layero,a=[i.outerWidth(),i.outerHeight()],o="object"==typeof t.offset;e.offsetTop=(n.height()-a[1])/2,e.offsetLeft=(n.width()-a[0])/2,o?(e.offsetTop=t.offset[0],e.offsetLeft=t.offset[1]||e.offsetLeft):"auto"!==t.offset&&("t"===t.offset?e.offsetTop=0:"r"===t.offset?e.offsetLeft=n.width()-a[0]:"b"===t.offset?e.offsetTop=n.height()-a[1]:"l"===t.offset?e.offsetLeft=0:"lt"===t.offset?(e.offsetTop=0,e.offsetLeft=0):"lb"===t.offset?(e.offsetTop=n.height()-a[1],e.offsetLeft=0):"rt"===t.offset?(e.offsetTop=0,e.offsetLeft=n.width()-a[0]):"rb"===t.offset?(e.offsetTop=n.height()-a[1],e.offsetLeft=n.width()-a[0]):e.offsetTop=t.offset),t.fixed||(e.offsetTop=/%$/.test(e.offsetTop)?n.height()*parseFloat(e.offsetTop)/100:parseFloat(e.offsetTop),e.offsetLeft=/%$/.test(e.offsetLeft)?n.width()*parseFloat(e.offsetLeft)/100:parseFloat(e.offsetLeft),e.offsetTop+=n.scrollTop(),e.offsetLeft+=n.scrollLeft()),i.attr("minLeft")&&(e.offsetTop=n.height()-(i.find(l[1]).outerHeight()||0),e.offsetLeft=i.css("left")),i.css({top:e.offsetTop,left:e.offsetLeft})},s.pt.tips=function(){var e=this,t=e.config,a=e.layero,o=[a.outerWidth(),a.outerHeight()],r=i(t.follow);r[0]||(r=i("body"));var s={width:r.outerWidth(),height:r.outerHeight(),top:r.offset().top,left:r.offset().left},f=a.find(".layui-layer-TipsG"),c=t.tips[0];t.tips[1]||f.remove(),s.autoLeft=function(){s.left+o[0]-n.width()>0?(s.tipLeft=s.left+s.width-o[0],f.css({right:12,left:"auto"})):s.tipLeft=s.left},s.where=[function(){s.autoLeft(),s.tipTop=s.top-o[1]-10,f.removeClass("layui-layer-TipsB").addClass("layui-layer-TipsT").css("border-right-color",t.tips[1])},function(){s.tipLeft=s.left+s.width+10,s.tipTop=s.top,f.removeClass("layui-layer-TipsL").addClass("layui-layer-TipsR").css("border-bottom-color",t.tips[1])},function(){s.autoLeft(),s.tipTop=s.top+s.height+10,f.removeClass("layui-layer-TipsT").addClass("layui-layer-TipsB").css("border-right-color",t.tips[1])},function(){s.tipLeft=s.left-o[0]-10,s.tipTop=s.top,f.removeClass("layui-layer-TipsR").addClass("layui-layer-TipsL").css("border-bottom-color",t.tips[1])}],s.where[c-1](),1===c?s.top-(n.scrollTop()+o[1]+16)<0&&s.where[2]():2===c?n.width()-(s.left+s.width+o[0]+16)>0||s.where[3]():3===c?s.top-n.scrollTop()+s.height+o[1]+16-n.height()>0&&s.where[0]():4===c&&o[0]+16-s.left>0&&s.where[1](),a.find("."+l[5]).css({"background-color":t.tips[1],"padding-right":t.closeBtn?"30px":""}),a.css({left:s.tipLeft-(t.fixed?n.scrollLeft():0),top:s.tipTop-(t.fixed?n.scrollTop():0)})},s.pt.move=function(){var e=this,t=e.config,a=i(document),s=e.layero,l=s.find(t.move),f=s.find(".layui-layer-resize"),c={};return t.move&&l.css("cursor","move"),l.on("mousedown",function(e){e.preventDefault(),t.move&&(c.moveStart=!0,c.offset=[e.clientX-parseFloat(s.css("left")),e.clientY-parseFloat(s.css("top"))],o.moveElem.css("cursor","move").show())}),f.on("mousedown",function(e){e.preventDefault(),c.resizeStart=!0,c.offset=[e.clientX,e.clientY],c.area=[s.outerWidth(),s.outerHeight()],o.moveElem.css("cursor","se-resize").show()}),a.on("mousemove",function(i){if(c.moveStart){var a=i.clientX-c.offset[0],o=i.clientY-c.offset[1],l="fixed"===s.css("position");if(i.preventDefault(),c.stX=l?0:n.scrollLeft(),c.stY=l?0:n.scrollTop(),!t.moveOut){var f=n.width()-s.outerWidth()+c.stX,u=n.height()-s.outerHeight()+c.stY;af&&(a=f),ou&&(o=u)}s.css({left:a,top:o})}if(t.resize&&c.resizeStart){var a=i.clientX-c.offset[0],o=i.clientY-c.offset[1];i.preventDefault(),r.style(e.index,{width:c.area[0]+a,height:c.area[1]+o}),c.isResize=!0,t.resizing&&t.resizing(s)}}).on("mouseup",function(e){c.moveStart&&(delete c.moveStart,o.moveElem.hide(),t.moveEnd&&t.moveEnd(s)),c.resizeStart&&(delete c.resizeStart,o.moveElem.hide())}),e},s.pt.callback=function(){function e(){var e=a.cancel&&a.cancel(t.index,n);e===!1||r.close(t.index)}var t=this,n=t.layero,a=t.config;t.openLayer(),a.success&&(2==a.type?n.find("iframe").on("load",function(){a.success(n,t.index)}):a.success(n,t.index)),6==r.ie&&t.IE6(n),n.find("."+l[6]).children("a").on("click",function(){var e=i(this).index();if(0===e)a.yes?a.yes(t.index,n):a.btn1?a.btn1(t.index,n):r.close(t.index);else{var o=a["btn"+(e+1)]&&a["btn"+(e+1)](t.index,n);o===!1||r.close(t.index)}}),n.find("."+l[7]).on("click",e),a.shadeClose&&i("#layui-layer-shade"+t.index).on("click",function(){r.close(t.index)}),n.find(".layui-layer-min").on("click",function(){var e=a.min&&a.min(n);e===!1||r.min(t.index,a)}),n.find(".layui-layer-max").on("click",function(){i(this).hasClass("layui-layer-maxmin")?(r.restore(t.index),a.restore&&a.restore(n)):(r.full(t.index,a),setTimeout(function(){a.full&&a.full(n)},100))}),a.end&&(o.end[t.index]=a.end)},o.reselect=function(){i.each(i("select"),function(e,t){var n=i(this);n.parents("."+l[0])[0]||1==n.attr("layer")&&i("."+l[0]).length<1&&n.removeAttr("layer").show(),n=null})},s.pt.IE6=function(e){i("select").each(function(e,t){var n=i(this);n.parents("."+l[0])[0]||"none"===n.css("display")||n.attr({layer:"1"}).hide(),n=null})},s.pt.openLayer=function(){var e=this;r.zIndex=e.config.zIndex,r.setTop=function(e){var t=function(){r.zIndex++,e.css("z-index",r.zIndex+1)};return r.zIndex=parseInt(e[0].style.zIndex),e.on("mousedown",t),r.zIndex}},o.record=function(e){var t=[e.width(),e.height(),e.position().top,e.position().left+parseFloat(e.css("margin-left"))];e.find(".layui-layer-max").addClass("layui-layer-maxmin"),e.attr({area:t})},o.rescollbar=function(e){l.html.attr("layer-full")==e&&(l.html[0].style.removeProperty?l.html[0].style.removeProperty("overflow"):l.html[0].style.removeAttribute("overflow"),l.html.removeAttr("layer-full"))},e.layer=r,r.getChildFrame=function(e,t){return t=t||i("."+l[4]).attr("times"),i("#"+l[0]+t).find("iframe").contents().find(e)},r.getFrameIndex=function(e){return i("#"+e).parents("."+l[4]).attr("times")},r.iframeAuto=function(e){if(e){var t=r.getChildFrame("html",e).outerHeight(),n=i("#"+l[0]+e),a=n.find(l[1]).outerHeight()||0,o=n.find("."+l[6]).outerHeight()||0;n.css({height:t+a+o}),n.find("iframe").css({height:t})}},r.iframeSrc=function(e,t){i("#"+l[0]+e).find("iframe").attr("src",t)},r.style=function(e,t,n){var a=i("#"+l[0]+e),r=a.find(".layui-layer-content"),s=a.attr("type"),f=a.find(l[1]).outerHeight()||0,c=a.find("."+l[6]).outerHeight()||0;a.attr("minLeft");s!==o.type[3]&&s!==o.type[4]&&(n||(parseFloat(t.width)<=260&&(t.width=260),parseFloat(t.height)-f-c<=64&&(t.height=64+f+c)),a.css(t),c=a.find("."+l[6]).outerHeight(),s===o.type[2]?a.find("iframe").css({height:parseFloat(t.height)-f-c}):r.css({height:parseFloat(t.height)-f-c-parseFloat(r.css("padding-top"))-parseFloat(r.css("padding-bottom"))}))},r.min=function(e,t){var a=i("#"+l[0]+e),s=a.find(l[1]).outerHeight()||0,f=a.attr("minLeft")||181*o.minIndex+"px",c=a.css("position");o.record(a),o.minLeft[0]&&(f=o.minLeft[0],o.minLeft.shift()),a.attr("position",c),r.style(e,{width:180,height:s,left:f,top:n.height()-s,position:"fixed",overflow:"hidden"},!0),a.find(".layui-layer-min").hide(),"page"===a.attr("type")&&a.find(l[4]).hide(),o.rescollbar(e),a.attr("minLeft")||o.minIndex++,a.attr("minLeft",f)},r.restore=function(e){var t=i("#"+l[0]+e),n=t.attr("area").split(",");t.attr("type");r.style(e,{width:parseFloat(n[0]),height:parseFloat(n[1]),top:parseFloat(n[2]),left:parseFloat(n[3]),position:t.attr("position"),overflow:"visible"},!0),t.find(".layui-layer-max").removeClass("layui-layer-maxmin"),t.find(".layui-layer-min").show(),"page"===t.attr("type")&&t.find(l[4]).show(),o.rescollbar(e)},r.full=function(e){var t,a=i("#"+l[0]+e);o.record(a),l.html.attr("layer-full")||l.html.css("overflow","hidden").attr("layer-full",e),clearTimeout(t),t=setTimeout(function(){var t="fixed"===a.css("position");r.style(e,{top:t?0:n.scrollTop(),left:t?0:n.scrollLeft(),width:n.width(),height:n.height()},!0),a.find(".layui-layer-min").hide()},100)},r.title=function(e,t){var n=i("#"+l[0]+(t||r.index)).find(l[1]);n.html(e)},r.close=function(e){var t=i("#"+l[0]+e),n=t.attr("type"),a="layer-anim-close";if(t[0]){var s="layui-layer-wrap",f=function(){if(n===o.type[1]&&"object"===t.attr("conType")){t.children(":not(."+l[5]+")").remove();for(var a=t.find("."+s),r=0;r<2;r++)a.unwrap();a.css("display",a.data("display")).removeClass(s)}else{if(n===o.type[2])try{var f=i("#"+l[4]+e)[0];f.contentWindow.document.write(""),f.contentWindow.close(),t.find("."+l[5])[0].removeChild(f)}catch(c){}t[0].innerHTML="",t.remove()}"function"==typeof o.end[e]&&o.end[e](),delete o.end[e]};t.data("isOutAnim")&&t.addClass("layer-anim "+a),i("#layui-layer-moves, #layui-layer-shade"+e).remove(),6==r.ie&&o.reselect(),o.rescollbar(e),t.attr("minLeft")&&(o.minIndex--,o.minLeft.push(t.attr("minLeft"))),r.ie&&r.ie<10||!t.data("isOutAnim")?f():setTimeout(function(){f()},200)}},r.closeAll=function(e){i.each(i("."+l[0]),function(){var t=i(this),n=e?t.attr("type")===e:1;n&&r.close(t.attr("times")),n=null})};var f=r.cache||{},c=function(e){return f.skin?" "+f.skin+" "+f.skin+"-"+e:""};r.prompt=function(e,t){var a="";if(e=e||{},"function"==typeof e&&(t=e),e.area){var o=e.area;a='style="width: '+o[0]+"; height: "+o[1]+';"',delete e.area}var s,l=2==e.formType?'":function(){return''}(),f=e.success;return delete e.success,r.open(i.extend({type:1,btn:["确定","取消"],content:l,skin:"layui-layer-prompt"+c("prompt"),maxWidth:n.width(),success:function(t){s=t.find(".layui-layer-input"),s.val(e.value||"").focus(),"function"==typeof f&&f(t)},resize:!1,yes:function(i){var n=s.val();""===n?s.focus():n.length>(e.maxlength||500)?r.tips("最多输入"+(e.maxlength||500)+"个字数",s,{tips:1}):t&&t(n,i,s)}},e))},r.tab=function(e){e=e||{};var t=e.tab||{},n="layui-this",a=e.success;return delete e.success,r.open(i.extend({type:1,skin:"layui-layer-tab"+c("tab"),resize:!1,title:function(){var e=t.length,i=1,a="";if(e>0)for(a=''+t[0].title+"";i"+t[i].title+"";return a}(),content:'
        '+function(){var e=t.length,i=1,a="";if(e>0)for(a='
      • '+(t[0].content||"no content")+"
      • ";i'+(t[i].content||"no content")+"";return a}()+"
      ",success:function(t){var o=t.find(".layui-layer-title").children(),r=t.find(".layui-layer-tabmain").children();o.on("mousedown",function(t){t.stopPropagation?t.stopPropagation():t.cancelBubble=!0;var a=i(this),o=a.index();a.addClass(n).siblings().removeClass(n),r.eq(o).show().siblings().hide(),"function"==typeof e.change&&e.change(o)}),"function"==typeof a&&a(t)}},e))},r.photos=function(t,n,a){function o(e,t,i){var n=new Image;return n.src=e,n.complete?t(n):(n.onload=function(){n.onload=null,t(n)},void(n.onerror=function(e){n.onerror=null,i(e)}))}var s={};if(t=t||{},t.photos){var l=t.photos.constructor===Object,f=l?t.photos:{},u=f.data||[],d=f.start||0;s.imgIndex=(0|d)+1,t.img=t.img||"img";var y=t.success;if(delete t.success,l){if(0===u.length)return r.msg("没有图片")}else{var p=i(t.photos),h=function(){u=[],p.find(t.img).each(function(e){var t=i(this);t.attr("layer-index",e),u.push({alt:t.attr("alt"),pid:t.attr("layer-pid"),src:t.attr("layer-src")||t.attr("src"),thumb:t.attr("src")})})};if(h(),0===u.length)return;if(n||p.on("click",t.img,function(){var e=i(this),n=e.attr("layer-index");r.photos(i.extend(t,{photos:{start:n,data:u,tab:t.tab},full:t.full}),!0),h()}),!n)return}s.imgprev=function(e){s.imgIndex--,s.imgIndex<1&&(s.imgIndex=u.length),s.tabimg(e)},s.imgnext=function(e,t){s.imgIndex++,s.imgIndex>u.length&&(s.imgIndex=1,t)||s.tabimg(e)},s.keyup=function(e){if(!s.end){var t=e.keyCode;e.preventDefault(),37===t?s.imgprev(!0):39===t?s.imgnext(!0):27===t&&r.close(s.index)}},s.tabimg=function(e){if(!(u.length<=1))return f.start=s.imgIndex-1,r.close(s.index),r.photos(t,!0,e)},s.event=function(){s.bigimg.hover(function(){s.imgsee.show()},function(){s.imgsee.hide()}),s.bigimg.find(".layui-layer-imgprev").on("click",function(e){e.preventDefault(),s.imgprev()}),s.bigimg.find(".layui-layer-imgnext").on("click",function(e){e.preventDefault(),s.imgnext()}),i(document).on("keyup",s.keyup)},s.loadi=r.load(1,{shade:!("shade"in t)&&.9,scrollbar:!1}),o(u[d].src,function(n){r.close(s.loadi),s.index=r.open(i.extend({type:1,id:"layui-layer-photos",area:function(){var a=[n.width,n.height],o=[i(e).width()-100,i(e).height()-100];if(!t.full&&(a[0]>o[0]||a[1]>o[1])){var r=[a[0]/o[0],a[1]/o[1]];r[0]>r[1]?(a[0]=a[0]/r[0],a[1]=a[1]/r[0]):r[0]'+(u[d].alt||
      '+(u.length>1?'':"")+'
      '+(u[d].alt||"")+""+s.imgIndex+"/"+u.length+"
      ",success:function(e,i){s.bigimg=e.find(".layui-layer-phimg"),s.imgsee=e.find(".layui-layer-imguide,.layui-layer-imgbar"),s.event(e),t.tab&&t.tab(u[d],e),"function"==typeof y&&y(e)},end:function(){s.end=!0,i(document).off("keyup",s.keyup)}},t))},function(){r.close(s.loadi),r.msg("当前图片地址异常
      是否继续查看下一张?",{time:3e4,btn:["下一张","不看了"],yes:function(){u.length>1&&s.imgnext(!0,!0)}})})}},o.run=function(t){i=t,n=i(e),l.html=i("html"),r.open=function(e){var t=new s(e);return t.index}},e.layui&&layui.define?(r.ready(),layui.define("jquery",function(t){r.path=layui.cache.dir,o.run(layui.$),e.layer=r,t("layer",r)})):"function"==typeof define&&define.amd?define(["jquery"],function(){return o.run(e.jQuery),r}):function(){o.run(e.jQuery),r.ready()}()}(window); \ No newline at end of file +;!function(e,t){"use strict";var i,n,a=e.layui&&layui.define,o={getPath:function(){ + // 获取当前脚本路径 + var e=document.currentScript?document.currentScript.src:function(){ + // 如果currentScript不存在,通过遍历所有脚本标签来获取 + for(var e,t=document.scripts,i=t.length-1,n=i;n>0;n--) + if("interactive"===t[n].readyState){e=t[n].src;break} + return e||t[i].src}(); + return e.substring(0,e.lastIndexOf("/")+1)}, + config:{}, // 配置项 + end:{}, // 结束回调 + minIndex:0, + minLeft:[], + btn:["确定","取消"], // 默认按钮:确定与取消 + type:["dialog","page","iframe","loading","tips"], // 类型:对话框、页面、iframe、加载、提示 + getStyle:function(t,i){ + // 获取样式 + var n=t.currentStyle?t.currentStyle:e.getComputedStyle(t,null); + return n[n.getPropertyValue?"getPropertyValue":"getAttribute"](i) + }, + link:function(t,i,n){ + if(r.path){ + var a=document.getElementsByTagName("head")[0], + s=document.createElement("link"); + "string"==typeof i&&(n=i); + var l=(n||t).replace(/\.|\//g,""), + f="layuicss-"+l,c=0; + s.rel="stylesheet",s.href=r.path+t,s.id=f, + document.getElementById(f)||a.appendChild(s), + "function"==typeof i&&!function u(){ + return++c>80?e.console&&console.error("layer.css: Invalid"): + void(1989===parseInt(o.getStyle(document.getElementById(f),"width"))?i():setTimeout(u,100)) + }() + } + } +}; + +// 配置layui模块路径和版本等信息 + var r={v:"3.1.1", + ie:function(){ + var t=navigator.userAgent.toLowerCase(); + return!!(e.ActiveXObject||"ActiveXObject"in e)&&((t.match(/msie\s(\d+)/)||[])[1]||"11") + }(), + index:e.layer&&e.layer.v?1e5:0, + path:o.getPath, // layui模块路径 + config:function(e,t){ + return e=e||{}, + r.cache=o.config=i.extend({},o.config,e), + r.path=o.config.path||r.path,"string"==typeof e.extend&&(e.extend=[e.extend]), + o.config.path&&r.ready(),e.extend?(a?layui.addcss("modules/layer/"+e.extend):o.link("theme/"+e.extend),this):this + }, + ready:function(e){ + var t="layer",i="",n=(a?"modules/layer/":"theme/")+"default/layer.css?v="+r.v+i; + return a?layui.addcss(n,e,t):o.link(n,e,t),this + }, + alert:function(e,t,n){ + var a="function"==typeof t; + return a&&(n=t), + r.open(i.extend({content:e,yes:n},a?{}:t)) + }, + confirm:function(e,t,n,a){ + var s="function"==typeof t; + return s&&(a=n,n=t), + r.open(i.extend({content:e,btn:o.btn,yes:n,btn2:a},s?{}:t)) + }, + msg:function(e,n,a){ + var s="function"==typeof n,f=o.config.skin,c=(f?f+" "+f+"-msg":"")||"layui-layer-msg",u=l.anim.length-1; + return s&&(a=n), + r.open(i.extend({content:e,time:3e3,shade:!1,skin:c,title:!1,closeBtn:!1,btn:!1,resize:!1,end:a},s&&!o.config.skin?{skin:c+" layui-layer-hui",anim:u}:function(){ + return n=n||{},(n.icon===-1||n.icon===t&&!o.config.skin)&&(n.skin=c+" "+(n.skin||"layui-layer-hui")),n + }())) + }, + load:function(e,t){ + return r.open(i.extend({type:3,icon:e||0,resize:!1,shade:.01},t)) + }, + tips:function(e,t,n){ + return r.open(i.extend({type:4,content:[e,t],closeBtn:!1,time:3e3,shade:!1,resize:!1,fixed:!1,maxWidth:210},n)) + } + }; + +// Layer 对象构造函数 + var s=function(e){ + var t=this; + t.index=++r.index,t.config=i.extend({},t.config,o.config,e),document.body?t.creat():setTimeout(function(){t.creat()},30) + }; + +// Layer构造函数原型定义 + s.pt=s.prototype; + var l=["layui-layer",".layui-layer-title",".layui-layer-main",".layui-layer-dialog","layui-layer-iframe","layui-layer-content","layui-layer-btn","layui-layer-close"]; + l.anim=["layer-anim-00","layer-anim-01","layer-anim-02","layer-anim-03","layer-anim-04","layer-anim-05","layer-anim-06"]; + + s.pt.config={ + type:0, + shade:.3, + fixed:!0, + move:l[1], + title:"信息", + offset:"auto", + area:"auto", + closeBtn:1, + time:0, + zIndex:19891014, + maxWidth:360, + anim:0, + isOutAnim:!0, + icon:-1, + moveType:1, + resize:!0, + scrollbar:!0, + tips:2 + }; + +// 生成层容器 + s.pt.vessel=function(e,t){ + var n=this,a=n.index,r=n.config,s=r.zIndex+a,f="object"==typeof r.title,c=r.maxmin&&(1===r.type||2===r.type),u=r.title?'
      '+(f?r.title[0]:r.title)+"
      ":""; + return r.zIndex=s,t([r.shade?'
      ':"", + '
      '+(e&&2!=r.type?"":u)+'
      '+(0==r.type&&r.icon!==-1?'':"")+(1==r.type&&e?"":r.content||"")+'
      '+function(){ + var e=c?'':""; + return r.closeBtn&&(e+=''),e}()+""+(r.btn?function(){ + var e=""; + "string"==typeof r.btn&&(r.btn=[r.btn]); + for(var t=0,i=r.btn.length;t'+r.btn[t]+""; + return'
      '+e+"
      "}():"")+(r.resize?'':"")+"
      "],u,i('
      ')),n + }; + +// 创建图层 + s.pt.creat=function(){ + var e=this,t=e.config,a=e.index,s=t.content,f="object"==typeof s,c=i("body"); + if(!t.id||!i("#"+t.id)[0]){ + switch("string"==typeof t.area&&(t.area="auto"===t diff --git a/web/lay/modules/laypage.js b/web/lay/modules/laypage.js index 2e2ab0d..aa5725c 100644 --- a/web/lay/modules/laypage.js +++ b/web/lay/modules/laypage.js @@ -1,2 +1,138 @@ /** layui-v2.5.6 MIT License By https://www.layui.com */ - ;layui.define(function(e){"use strict";var a=document,t="getElementById",n="getElementsByTagName",i="laypage",r="layui-disabled",u=function(e){var a=this;a.config=e||{},a.config.index=++s.index,a.render(!0)};u.prototype.type=function(){var e=this.config;if("object"==typeof e.elem)return void 0===e.elem.length?2:3},u.prototype.view=function(){var e=this,a=e.config,t=a.groups="groups"in a?0|a.groups:5;a.layout="object"==typeof a.layout?a.layout:["prev","page","next"],a.count=0|a.count,a.curr=0|a.curr||1,a.limits="object"==typeof a.limits?a.limits:[10,20,30,40,50],a.limit=0|a.limit||10,a.pages=Math.ceil(a.count/a.limit)||1,a.curr>a.pages&&(a.curr=a.pages),t<0?t=1:t>a.pages&&(t=a.pages),a.prev="prev"in a?a.prev:"上一页",a.next="next"in a?a.next:"下一页";var n=a.pages>t?Math.ceil((a.curr+(t>1?1:0))/(t>0?t:1)):1,i={prev:function(){return a.prev?''+a.prev+"":""}(),page:function(){var e=[];if(a.count<1)return"";n>1&&a.first!==!1&&0!==t&&e.push(''+(a.first||1)+"");var i=Math.floor((t-1)/2),r=n>1?a.curr-i:1,u=n>1?function(){var e=a.curr+(t-i-1);return e>a.pages?a.pages:e}():t;for(u-r2&&e.push('');r<=u;r++)r===a.curr?e.push('"+r+""):e.push(''+r+"");return a.pages>t&&a.pages>u&&a.last!==!1&&(u+1…'),0!==t&&e.push(''+(a.last||a.pages)+"")),e.join("")}(),next:function(){return a.next?''+a.next+"":""}(),count:'共 '+a.count+" 条",limit:function(){var e=['"}(),refresh:['','',""].join(""),skip:function(){return['到第','','页',""].join("")}()};return['
      ',function(){var e=[];return layui.each(a.layout,function(a,t){i[t]&&e.push(i[t])}),e.join("")}(),"
      "].join("")},u.prototype.jump=function(e,a){if(e){var t=this,i=t.config,r=e.children,u=e[n]("button")[0],l=e[n]("input")[0],p=e[n]("select")[0],c=function(){var e=0|l.value.replace(/\s|\D/g,"");e&&(i.curr=e,t.render())};if(a)return c();for(var o=0,y=r.length;oi.pages||(i.curr=e,t.render())});p&&s.on(p,"change",function(){var e=this.value;i.curr*e>i.count&&(i.curr=Math.ceil(i.count/e)),i.limit=e,t.render()}),u&&s.on(u,"click",function(){c()})}},u.prototype.skip=function(e){if(e){var a=this,t=e[n]("input")[0];t&&s.on(t,"keyup",function(t){var n=this.value,i=t.keyCode;/^(37|38|39|40)$/.test(i)||(/\D/.test(n)&&(this.value=n.replace(/\D/,"")),13===i&&a.jump(e,!0))})}},u.prototype.render=function(e){var n=this,i=n.config,r=n.type(),u=n.view();2===r?i.elem&&(i.elem.innerHTML=u):3===r?i.elem.html(u):a[t](i.elem)&&(a[t](i.elem).innerHTML=u),i.jump&&i.jump(i,e);var s=a[t]("layui-laypage-"+i.index);n.jump(s),i.hash&&!e&&(location.hash="!"+i.hash+"="+i.curr),n.skip(s)};var s={render:function(e){var a=new u(e);return a.index},index:layui.laypage?layui.laypage.index+1e4:0,on:function(e,a,t){return e.attachEvent?e.attachEvent("on"+a,function(a){a.target=a.srcElement,t.call(e,a)}):e.addEventListener(a,t,!1),this}};e(i,s)}); \ No newline at end of file +layui.define(function(e){"use strict"; + var a = document, + t = "getElementById", + n = "getElementsByTagName", + i = "laypage", + r = "layui-disabled", // 禁用的class + u = function(e) { + var a = this; + a.config = e || {}, a.config.index = ++s.index, a.render(!0); + }; + + u.prototype.type = function() { + var e = this.config; + // 判断传入的配置元素类型:object类型,如果只有一个元素就返回2,如果有多个返回3 + if ("object" == typeof e.elem) return void 0 === e.elem.length ? 2 : 3; + }; + + u.prototype.view = function() { + var e = this, a = e.config, t = a.groups = "groups" in a ? 0 | a.groups : 5; + // 设置分页的基本配置,包括显示的页数,当前页等 + a.layout = "object" == typeof a.layout ? a.layout : ["prev", "page", "next"]; + a.count = 0 | a.count; + a.curr = 0 | a.curr || 1; + a.limits = "object" == typeof a.limits ? a.limits : [10, 20, 30, 40, 50]; + a.limit = 0 | a.limit || 10; + a.pages = Math.ceil(a.count / a.limit) || 1; + a.curr > a.pages && (a.curr = a.pages); + t < 0 ? t = 1 : t > a.pages && (t = a.pages); + + a.prev = "prev" in a ? a.prev : "上一页"; + a.next = "next" in a ? a.next : "下一页"; + + var n = a.pages > t ? Math.ceil((a.curr + (t > 1 ? 1 : 0)) / (t > 0 ? t : 1)) : 1; + + // 创建分页的各个部分 + var i = { + prev: function() { + return a.prev ? '' + a.prev + "" : ""; + }(), + page: function() { + var e = []; + if (a.count < 1) return ""; + n > 1 && a.first !== !1 && 0 !== t && e.push('' + (a.first || 1) + ""); + var i = Math.floor((t - 1) / 2), + r = n > 1 ? a.curr - i : 1, + u = n > 1 ? function() { + var e = a.curr + (t - i - 1); + return e > a.pages ? a.pages : e; + }() : t; + + // 生成分页数字 + for (u - r < t - 1 && (r = u - t + 1), a.first !== !1 && r > 2 && e.push(''); r <= u; r++) + r === a.curr ? e.push('" + r + "") : + e.push('' + r + ""); + return a.pages > t && a.pages > u && a.last !== !1 && (u + 1 < a.pages && e.push(''), 0 !== t && e.push('' + (a.last || a.pages) + "")), e.join(""); + }(), + next: function() { + return a.next ? '' + a.next + "" : ""; + }(), + count: '共 ' + a.count + " 条", + limit: function() { + var e = ['"; + }(), + refresh: ['', '', ""].join(""), + skip: function() { + return ['到第', '', '页', ""].join(""); + }() + }; + + return ['
      ', function() { + var e = []; + return layui.each(a.layout, function(a, t) { + i[t] && e.push(i[t]); + }), e.join(""); + }(), "
      "].join(""); + }; + + u.prototype.jump = function(e, a) { + if (e) { + var t = this, i = t.config, r = e.children, u = e[n]("button")[0], l = e[n]("input")[0], p = e[n]("select")[0], c = function() { + var e = 0 | l.value.replace(/\s|\D/g, ""); + e && (i.curr = e, t.render()); + }; + if (a) return c(); + for (var o = 0, y = r.length; o < y; o++) { + "a" === r[o].nodeName.toLowerCase() && s.on(r[o], "click", function() { + var e = 0 | this.getAttribute("data-page"); + e < 1 || e > i.pages || (i.curr = e, t.render()); + }); + } + p && s.on(p, "change", function() { + var e = this.value; + i.curr * e > i.count && (i.curr = Math.ceil(i.count / e)), i.limit = e, t.render(); + }); + u && s.on(u, "click", function() { + c(); + }); + } + }; + + u.prototype.skip = function(e) { + if (e) { + var a = this, t = e[n]("input")[0]; + t && s.on(t, "keyup", function(t) { + var n = this.value, i = t.keyCode; + /^(37|38|39|40)$/.test(i) || (/\\D/.test(n) && (this.value = n.replace(/\\D/, "")), 13 === i && a.jump(e, !0)); + }); + } + }; + + u.prototype.render = function(e) { + var n = this, i = n.config, r = n.type(), u = n.view(); + 2 === r ? i.elem && (i.elem.innerHTML = u) : 3 === r ? i.elem.html(u) : a[t](i.elem) && (a[t](i.elem).innerHTML = u); + i.jump && i.jump(i, e); + var s = a[t]("layui-laypage-" + i.index); + n.jump(s), i.hash && !e && (location.hash = "!" + i.hash + "=" + i.curr), n.skip(s); + }; + + var s = { + render: function(e) { + var a = new u(e); + return a.index; + }, + index: layui.laypage ? layui.laypage.index + 1e4 : 0, + on: function(e, a, t) { + return e.attachEvent ? e.attachEvent("on" + a, function(a) { + a.target = a.srcElement, t.call(e, a); + }) : e.addEventListener(a, t, !1), this; + } + }; + + e(i, s); +}); diff --git a/web/lay/modules/laytpl.js b/web/lay/modules/laytpl.js index 11cc3c4..cabe3d5 100644 --- a/web/lay/modules/laytpl.js +++ b/web/lay/modules/laytpl.js @@ -1,2 +1,86 @@ /** layui-v2.5.6 MIT License By https://www.layui.com */ - ;layui.define(function(e){"use strict";var r={open:"{{",close:"}}"},c={exp:function(e){return new RegExp(e,"g")},query:function(e,c,t){var o=["#([\\s\\S])+?","([^{#}])*?"][e||0];return n((c||"")+r.open+o+r.close+(t||""))},escape:function(e){return String(e||"").replace(/&(?!#?[a-zA-Z0-9]+;)/g,"&").replace(//g,">").replace(/'/g,"'").replace(/"/g,""")},error:function(e,r){var c="Laytpl Error:";return"object"==typeof console&&console.error(c+e+"\n"+(r||"")),c+e}},n=c.exp,t=function(e){this.tpl=e};t.pt=t.prototype,window.errors=0,t.pt.parse=function(e,t){var o=this,p=e,a=n("^"+r.open+"#",""),l=n(r.close+"$","");e=e.replace(/\s+|\r|\t|\n/g," ").replace(n(r.open+"#"),r.open+"# ").replace(n(r.close+"}"),"} "+r.close).replace(/\\/g,"\\\\").replace(n(r.open+"!(.+?)!"+r.close),function(e){return e=e.replace(n("^"+r.open+"!"),"").replace(n("!"+r.close),"").replace(n(r.open+"|"+r.close),function(e){return e.replace(/(.)/g,"\\$1")})}).replace(/(?="|')/g,"\\").replace(c.query(),function(e){return e=e.replace(a,"").replace(l,""),'";'+e.replace(/\\/g,"")+';view+="'}).replace(c.query(1),function(e){var c='"+(';return e.replace(/\s/g,"")===r.open+r.close?"":(e=e.replace(n(r.open+"|"+r.close),""),/^=/.test(e)&&(e=e.replace(/^=/,""),c='"+_escape_('),c+e.replace(/\\/g,"")+')+"')}),e='"use strict";var view = "'+e+'";return view;';try{return o.cache=e=new Function("d, _escape_",e),e(t,c.escape)}catch(u){return delete o.cache,c.error(u,p)}},t.pt.render=function(e,r){var n,t=this;return e?(n=t.cache?t.cache(e,c.escape):t.parse(t.tpl,e),r?void r(n):n):c.error("no data")};var o=function(e){return"string"!=typeof e?c.error("Template not found"):new t(e)};o.config=function(e){e=e||{};for(var c in e)r[c]=e[c]},o.v="1.2.0",e("laytpl",o)}); \ No newline at end of file +;layui.define(function(e){"use strict"; + // 配置模板语法的起始和结束符 + var r={open:"{{",close:"}}"}, + // 定义常用的正则表达式和方法 + c={ + exp:function(e){ // 用于生成全局的正则表达式 + return new RegExp(e,"g") + }, + query:function(e,c,t){ // 生成模板查询的正则表达式 + var o=["#([\\s\\S])+?","([^{#}])*?"][e||0]; + return n((c||"")+r.open+o+r.close+(t||"")) + }, + escape:function(e){ // 转义HTML特殊字符 + return String(e||"").replace(/&(?!#?[a-zA-Z0-9]+;)/g,"&") + .replace(//g,">") + .replace(/'/g,"'").replace(/"/g,""") + }, + error:function(e,r){ // 输出错误信息 + var c="Laytpl Error:"; + return "object"==typeof console&&console.error(c+e+"\n"+(r||"")),c+e + } + }, + n=c.exp, // 正则表达式处理函数 + t=function(e){ this.tpl=e }; // 定义一个模板处理类 + + t.pt=t.prototype, window.errors=0; + + // 模板解析方法 + t.pt.parse=function(e,t){ + var o=this,p=e,a=n("^"+r.open+"#",""),l=n(r.close+"$",""); + + // 清理模板中的多余空格和符号 + e=e.replace(/\s+|\r|\t|\n/g," ") + .replace(n(r.open+"#"),r.open+"# ") + .replace(n(r.close+"}"),"} "+r.close) + .replace(/\\/g,"\\\\") + .replace(n(r.open+"!(.+?)!"+r.close),function(e){ + return e=e.replace(n("^"+r.open+"!"),"") + .replace(n("!"+r.close),"") + .replace(n(r.open+"|"+r.close),function(e){ + return e.replace(/(.)/g,"\\$1") + }) + }) + .replace(/(?="|')/g,"\\") + .replace(c.query(),function(e){ + return e=e.replace(a,"").replace(l,""), + '";'+e.replace(/\\/g,"")+';view+="' + }) + .replace(c.query(1),function(e){ + var c='"+('; + return e.replace(/\s/g,"")===r.open+r.close?"":(e=e.replace(n(r.open+"|"+r.close),""),/^=/.test(e)&&(e=e.replace(/^=/,""),c='"+_escape_('),c+e.replace(/\\/g,"")+')+"') + }); + + // 构建最终的JavaScript代码 + e='"use strict";var view = "'+e+'";return view;'; + + try{ + // 执行生成的模板代码 + return o.cache=e=new Function("d, _escape_",e),e(t,c.escape) + }catch(u){ + // 如果模板解析失败,输出错误信息 + return delete o.cache,c.error(u,p) + } + }; + + // 渲染模板方法 + t.pt.render=function(e,r){ + var n,t=this; + return e ? (n=t.cache ? t.cache(e,c.escape) : t.parse(t.tpl,e), r ? void r(n) : n) : c.error("no data"); + }; + + // 创建模板对象 + var o=function(e){ + return "string"!=typeof e ? c.error("Template not found") : new t(e) + }; + + // 配置模板引擎的选项 + o.config=function(e){ + e=e||{}; + for(var c in e) r[c]=e[c] + }; + + // 设置模板版本 + o.v="1.2.0", e("laytpl",o) +}); diff --git a/web/lay/modules/rate.js b/web/lay/modules/rate.js index 7feef34..eb212f0 100644 --- a/web/lay/modules/rate.js +++ b/web/lay/modules/rate.js @@ -1,2 +1,106 @@ /** layui-v2.5.6 MIT License By https://www.layui.com */ - ;layui.define("jquery",function(e){"use strict";var a=layui.jquery,i={config:{},index:layui.rate?layui.rate.index+1e4:0,set:function(e){var i=this;return i.config=a.extend({},i.config,e),i},on:function(e,a){return layui.onevent.call(this,n,e,a)}},l=function(){var e=this,a=e.config;return{setvalue:function(a){e.setvalue.call(e,a)},config:a}},n="rate",t="layui-rate",o="layui-icon-rate",s="layui-icon-rate-solid",u="layui-icon-rate-half",r="layui-icon-rate-solid layui-icon-rate-half",c="layui-icon-rate-solid layui-icon-rate",f="layui-icon-rate layui-icon-rate-half",v=function(e){var l=this;l.index=++i.index,l.config=a.extend({},l.config,i.config,e),l.render()};v.prototype.config={length:5,text:!1,readonly:!1,half:!1,value:0,theme:""},v.prototype.render=function(){var e=this,i=e.config,l=i.theme?'style="color: '+i.theme+';"':"";i.elem=a(i.elem),parseInt(i.value)!==i.value&&(i.half||(i.value=Math.ceil(i.value)-i.value<.5?Math.ceil(i.value):Math.floor(i.value)));for(var n='
        ",u=1;u<=i.length;u++){var r='
      • ";i.half&&parseInt(i.value)!==i.value&&u==Math.ceil(i.value)?n=n+'
      • ":n+=r}n+="
      "+(i.text?''+i.value+"星":"")+"";var c=i.elem,f=c.next("."+t);f[0]&&f.remove(),e.elemTemp=a(n),i.span=e.elemTemp.next("span"),i.setText&&i.setText(i.value),c.html(e.elemTemp),c.addClass("layui-inline"),i.readonly||e.action()},v.prototype.setvalue=function(e){var a=this,i=a.config;i.value=e,a.render()},v.prototype.action=function(){var e=this,i=e.config,l=e.elemTemp,n=l.find("i").width();l.children("li").each(function(e){var t=e+1,v=a(this);v.on("click",function(e){if(i.value=t,i.half){var o=e.pageX-a(this).offset().left;o<=n/2&&(i.value=i.value-.5)}i.text&&l.next("span").text(i.value+"星"),i.choose&&i.choose(i.value),i.setText&&i.setText(i.value)}),v.on("mousemove",function(e){if(l.find("i").each(function(){a(this).addClass(o).removeClass(r)}),l.find("i:lt("+t+")").each(function(){a(this).addClass(s).removeClass(f)}),i.half){var c=e.pageX-a(this).offset().left;c<=n/2&&v.children("i").addClass(u).removeClass(s)}}),v.on("mouseleave",function(){l.find("i").each(function(){a(this).addClass(o).removeClass(r)}),l.find("i:lt("+Math.floor(i.value)+")").each(function(){a(this).addClass(s).removeClass(f)}),i.half&&parseInt(i.value)!==i.value&&l.children("li:eq("+Math.floor(i.value)+")").children("i").addClass(u).removeClass(c)})})},v.prototype.events=function(){var e=this;e.config},i.render=function(e){var a=new v(e);return l.call(a)},e(n,i)}); \ No newline at end of file +;layui.define("jquery",function(e){"use strict"; + // 获取 layui 的 jQuery 实例 + var a=layui.jquery, + i={config:{},index:layui.rate?layui.rate.index+1e4:0, // 默认配置 + set:function(e){ // 设置配置项 + var i=this; + return i.config=a.extend({},i.config,e),i + }, + on:function(e,a){ // 监听事件 + return layui.onevent.call(this,n,e,a) + } + }; + + // 定义局部变量 + var l=function(){ + var e=this,a=e.config; + return { + setvalue:function(a){ // 设置评分值 + e.setvalue.call(e,a) + }, + config:a + } + }, + n="rate", // 定义组件标识符 + t="layui-rate", // 样式类 + o="layui-icon-rate", // 未选中的星星图标 + s="layui-icon-rate-solid", // 选中的完整星星图标 + u="layui-icon-rate-half", // 半星图标 + r="layui-icon-rate-solid layui-icon-rate-half", // 完整星和半星 + c="layui-icon-rate-solid layui-icon-rate", // 完整星图标 + f="layui-icon-rate layui-icon-rate-half", // 半星图标样式 + v=function(e){ // 评分控件构造函数 + var l=this; + l.index=++i.index; // 自动递增索引 + l.config=a.extend({},l.config,i.config,e); // 合并配置项 + l.render(); // 渲染评分控件 + }; + + v.prototype.config={length:5,text:!1,readonly:!1,half:!1,value:0,theme:""}, // 默认配置 + v.prototype.render=function(){ // 渲染评分组件 + var e=this,i=e.config,l=i.theme?'style="color: '+i.theme+';"':""; // 处理主题颜色 + i.elem=a(i.elem); // 获取元素 + parseInt(i.value)!==i.value&&(i.half||(i.value=Math.ceil(i.value)-i.value<.5?Math.ceil(i.value):Math.floor(i.value))); // 设置值为整数或半星 + + var n='
        "; // 初始化评分组件HTML结构 + for(var u=1;u<=i.length;u++){ + var r='
      • "; + i.half&&parseInt(i.value)!==i.value&&u==Math.ceil(i.value)? + n=n+'
      • ":n+=r + } + n+="
      "+(i.text?''+i.value+"星":"")+""; + + var c=i.elem, f=c.next("."+t); + f[0]&&f.remove(); // 移除旧的评分控件 + e.elemTemp=a(n); // 渲染新的评分控件 + i.span=e.elemTemp.next("span"); // 获取显示评分值的span + i.setText&&i.setText(i.value); // 设置文本 + c.html(e.elemTemp); // 将评分控件添加到目标元素 + c.addClass("layui-inline"); // 给元素添加样式 + i.readonly||e.action(); // 如果不是只读模式,绑定事件 + }; + + v.prototype.setvalue=function(e){ // 设置评分值并重新渲染 + var a=this,i=a.config; + i.value=e; + a.render(); // 重新渲染 + }; + + v.prototype.action=function(){ // 处理点击、鼠标悬停和移出事件 + var e=this,i=e.config,l=e.elemTemp,n=l.find("i").width(); // 获取星星的宽度 + l.children("li").each(function(e){ // 遍历每个星星 + var t=e+1,v=a(this); + v.on("click",function(e){ // 处理点击事件 + if(i.value=t,i.half){ + var o=e.pageX-a(this).offset().left; + o<=n/2&&(i.value=i.value-.5) // 半星处理 + } + i.text&&l.next("span").text(i.value+"星"); // 显示星级 + i.choose&&i.choose(i.value); // 调用用户自定义的选择事件 + i.setText&&i.setText(i.value); // 设置文本 + }), + v.on("mousemove",function(e){ // 处理鼠标悬停事件 + if(l.find("i").each(function(){a(this).addClass(o).removeClass(r)}), + l.find("i:lt("+t+")").each(function(){a(this).addClass(s).removeClass(f)}), + i.half){ + var c=e.pageX-a(this).offset().left; + c<=n/2&&v.children("i").addClass(u).removeClass(s) // 半星高亮 + } + }), + v.on("mouseleave",function(){ // 处理鼠标移出事件 + l.find("i").each(function(){a(this).addClass(o).removeClass(r)}); + l.find("i:lt("+Math.floor(i.value)+")").each(function(){a(this).addClass(s).removeClass(f)}); + i.half&&parseInt(i.value)!==i.value&&l.children("li:eq("+Math.floor(i.value)+")").children("i").addClass(u).removeClass(c) + }) + }); + }; + + v.prototype.events=function(){ var e=this;e.config}, // 定义事件 + i.render=function(e){ // 渲染评分控件并返回实例 + var a=new v(e); + return l.call(a); + }; + + e(n,i) // 导出模块 +}); diff --git a/web/lay/modules/slider.js b/web/lay/modules/slider.js index 6f824a9..1a7745d 100644 --- a/web/lay/modules/slider.js +++ b/web/lay/modules/slider.js @@ -1,2 +1,166 @@ /** layui-v2.5.6 MIT License By https://www.layui.com */ - ;layui.define("jquery",function(e){"use strict";var i=layui.jquery,t={config:{},index:layui.slider?layui.slider.index+1e4:0,set:function(e){var t=this;return t.config=i.extend({},t.config,e),t},on:function(e,i){return layui.onevent.call(this,n,e,i)}},a=function(){var e=this,i=e.config;return{setValue:function(i,t){return e.slide("set",i,t||0)},config:i}},n="slider",l="layui-disabled",s="layui-slider",r="layui-slider-bar",o="layui-slider-wrap",u="layui-slider-wrap-btn",d="layui-slider-tips",v="layui-slider-input",c="layui-slider-input-txt",m="layui-slider-input-btn",p="layui-slider-hover",f=function(e){var a=this;a.index=++t.index,a.config=i.extend({},a.config,t.config,e),a.render()};f.prototype.config={type:"default",min:0,max:100,value:0,step:1,showstep:!1,tips:!0,input:!1,range:!1,height:200,disabled:!1,theme:"#009688"},f.prototype.render=function(){var e=this,t=e.config;if(t.step<1&&(t.step=1),t.maxt.min?a:t.min,t.value[1]=n>t.min?n:t.min,t.value[0]=t.value[0]>t.max?t.max:t.value[0],t.value[1]=t.value[1]>t.max?t.max:t.value[1];var r=Math.floor((t.value[0]-t.min)/(t.max-t.min)*100),v=Math.floor((t.value[1]-t.min)/(t.max-t.min)*100),m=v-r+"%";r+="%",v+="%"}else{"object"==typeof t.value&&(t.value=Math.min.apply(null,t.value)),t.valuet.max&&(t.value=t.max);var m=Math.floor((t.value-t.min)/(t.max-t.min)*100)+"%"}var p=t.disabled?"#c2c2c2":t.theme,f='
      '+(t.tips?'
      ':"")+'
      '+(t.range?'
      ':"")+"
      ",h=i(t.elem),y=h.next("."+s);if(y[0]&&y.remove(),e.elemTemp=i(f),t.range?(e.elemTemp.find("."+o).eq(0).data("value",t.value[0]),e.elemTemp.find("."+o).eq(1).data("value",t.value[1])):e.elemTemp.find("."+o).data("value",t.value),h.html(e.elemTemp),"vertical"===t.type&&e.elemTemp.height(t.height+"px"),t.showstep){for(var g=(t.max-t.min)/t.step,b="",x=1;x
      ')}e.elemTemp.append(b)}if(t.input&&!t.range){var w=i('
      ');h.css("position","relative"),h.append(w),h.find("."+c).children("input").val(t.value),"vertical"===t.type?w.css({left:0,top:-48}):e.elemTemp.css("margin-right",w.outerWidth()+15)}t.disabled?(e.elemTemp.addClass(l),e.elemTemp.find("."+u).addClass(l)):e.slide(),e.elemTemp.find("."+u).on("mouseover",function(){var a="vertical"===t.type?t.height:e.elemTemp[0].offsetWidth,n=e.elemTemp.find("."+o),l="vertical"===t.type?a-i(this).parent()[0].offsetTop-n.height():i(this).parent()[0].offsetLeft,s=l/a*100,r=i(this).parent().data("value"),u=t.setTips?t.setTips(r):r;e.elemTemp.find("."+d).html(u),"vertical"===t.type?e.elemTemp.find("."+d).css({bottom:s+"%","margin-bottom":"20px",display:"inline-block"}):e.elemTemp.find("."+d).css({left:s+"%",display:"inline-block"})}).on("mouseout",function(){e.elemTemp.find("."+d).css("display","none")})},f.prototype.slide=function(e,t,a){var n=this,l=n.config,s=n.elemTemp,f=function(){return"vertical"===l.type?l.height:s[0].offsetWidth},h=s.find("."+o),y=s.next("."+v),g=y.children("."+c).children("input").val(),b=100/((l.max-l.min)/Math.ceil(l.step)),x=function(e,i){e=Math.ceil(e)*b>100?Math.ceil(e)*b:Math.round(e)*b,e=e>100?100:e,h.eq(i).css("vertical"===l.type?"bottom":"left",e+"%");var t=T(h[0].offsetLeft),a=l.range?T(h[1].offsetLeft):0;"vertical"===l.type?(s.find("."+d).css({bottom:e+"%","margin-bottom":"20px"}),t=T(f()-h[0].offsetTop-h.height()),a=l.range?T(f()-h[1].offsetTop-h.height()):0):s.find("."+d).css("left",e+"%"),t=t>100?100:t,a=a>100?100:a;var n=Math.min(t,a),o=Math.abs(t-a);"vertical"===l.type?s.find("."+r).css({height:o+"%",bottom:n+"%"}):s.find("."+r).css({width:o+"%",left:n+"%"});var u=l.min+Math.round((l.max-l.min)*e/100);if(g=u,y.children("."+c).children("input").val(g),h.eq(i).data("value",u),u=l.setTips?l.setTips(u):u,s.find("."+d).html(u),l.range){var v=[h.eq(0).data("value"),h.eq(1).data("value")];v[0]>v[1]&&v.reverse()}l.change&&l.change(l.range?v:u)},T=function(e){var i=e/f()*100/b,t=Math.round(i)*b;return e==f()&&(t=Math.ceil(i)*b),t},w=i(['
      f()&&(r=f());var o=r/f()*100/b;x(o,e),t.addClass(p),s.find("."+d).show(),i.preventDefault()},o=function(){t.removeClass(p),s.find("."+d).hide()};M(r,o)})}),s.on("click",function(e){var t=i("."+u);if(!t.is(event.target)&&0===t.has(event.target).length&&t.length){var a,n="vertical"===l.type?f()-e.clientY+i(this).offset().top:e.clientX-i(this).offset().left;n<0&&(n=0),n>f()&&(n=f());var s=n/f()*100/b;a=l.range?"vertical"===l.type?Math.abs(n-parseInt(i(h[0]).css("bottom")))>Math.abs(n-parseInt(i(h[1]).css("bottom")))?1:0:Math.abs(n-h[0].offsetLeft)>Math.abs(n-h[1].offsetLeft)?1:0:0,x(s,a),e.preventDefault()}}),y.hover(function(){var e=i(this);e.children("."+m).fadeIn("fast")},function(){var e=i(this);e.children("."+m).fadeOut("fast")}),y.children("."+m).children("i").each(function(e){i(this).on("click",function(){g=1==e?g-l.stepl.max?l.max:Number(g)+l.step;var i=(g-l.min)/(l.max-l.min)*100/b;x(i,0)})});var q=function(){var e=this.value;e=isNaN(e)?0:e,e=el.max?l.max:e,this.value=e;var i=(e-l.min)/(l.max-l.min)*100/b;x(i,0)};y.children("."+c).children("input").on("keydown",function(e){13===e.keyCode&&(e.preventDefault(),q.call(this))}).on("change",q)},f.prototype.events=function(){var e=this;e.config},t.render=function(e){var i=new f(e);return a.call(i)},e(n,t)}); \ No newline at end of file +;layui.define("jquery", function(e) { + "use strict"; + + var i = layui.jquery, + t = { + config: {}, + index: layui.slider ? layui.slider.index + 1e4 : 0, + set: function(e) { + var t = this; + return t.config = i.extend({}, t.config, e), t; + }, + on: function(e, i) { + return layui.onevent.call(this, n, e, i); + } + }, + a = function() { + var e = this, i = e.config; + return { + setValue: function(i, t) { + return e.slide("set", i, t || 0); + }, + config: i + }; + }, + n = "slider", // 组件名称 + l = "layui-disabled", // 禁用状态的样式类 + s = "layui-slider", // 滑块的基本样式类 + r = "layui-slider-bar", // 滑块条样式类 + o = "layui-slider-wrap", // 滑块容器样式类 + u = "layui-slider-wrap-btn", // 滑块按钮样式类 + d = "layui-slider-tips", // 提示信息样式类 + v = "layui-slider-input", // 输入框样式类 + c = "layui-slider-input-txt", // 输入框文字样式类 + m = "layui-slider-input-btn", // 输入框按钮样式类 + p = "layui-slider-hover", // 滑块悬停样式类 + + f = function(e) { + var a = this; + a.index = ++t.index; + a.config = i.extend({}, a.config, t.config, e); + a.render(); + }; + + // 滑块配置项 + f.prototype.config = { + type: "default", // 默认类型 + min: 0, // 最小值 + max: 100, // 最大值 + value: 0, // 当前值 + step: 1, // 步长 + showstep: !1, // 是否显示步长 + tips: !0, // 是否显示提示信息 + input: !1, // 是否显示输入框 + range: !1, // 是否为范围选择 + height: 200, // 滑块的高度(垂直方向) + disabled: !1, // 是否禁用 + theme: "#009688" // 自定义主题颜色 + }; + + // 渲染滑块 + f.prototype.render = function() { + var e = this, t = e.config; + + // 如果步长小于1,设置为1 + if (t.step < 1) { + t.step = 1; + } + + // 如果最大值小于最小值,交换二者 + if (t.max < t.min) { + t.max = t.min + t.step; + } + + // 范围模式(两个滑块) + if (t.range) { + t.value = "object" == typeof t.value ? t.value : [t.min, t.value]; + var a = Math.min(t.value[0], t.value[1]), + n = Math.max(t.value[0], t.value[1]); + t.value[0] = a > t.min ? a : t.min; + t.value[1] = n > t.min ? n : t.min; + t.value[0] = t.value[0] > t.max ? t.max : t.value[0]; + t.value[1] = t.value[1] > t.max ? t.max : t.value[1]; + + var r = Math.floor((t.value[0] - t.min) / (t.max - t.min) * 100), + v = Math.floor((t.value[1] - t.min) / (t.max - t.min) * 100), + m = v - r + "%"; + r += "%"; + v += "%"; + } else { + // 单个滑块模式 + if ("object" == typeof t.value) { + t.value = Math.min.apply(null, t.value); + } + t.value < t.min && (t.value = t.min); + t.value > t.max && (t.value = t.max); + + var m = Math.floor((t.value - t.min) / (t.max - t.min) * 100) + "%"; + } + + // 设置禁用样式和主题颜色 + var p = t.disabled ? "#c2c2c2" : t.theme; + + // 生成滑块的HTML结构 + var f = '
      ' + + (t.tips ? '
      ' : "") + + '
      ' + + '
      ' + + '
      ' + + '
      ' + + (t.range ? '
      ' + + '
      ' + + '
      ' : "") + + "
      "; + + var h = i(t.elem), + y = h.next("."+s); + + // 如果已经渲染过,先移除之前的 + if (y[0] && y.remove()) {} + + e.elemTemp = i(f); + t.range ? (e.elemTemp.find("."+o).eq(0).data("value", t.value[0]), e.elemTemp.find("."+o).eq(1).data("value", t.value[1])) : + e.elemTemp.find("."+o).data("value", t.value); + h.html(e.elemTemp); + + // 垂直滑块的高度设置 + if ("vertical" === t.type) { + e.elemTemp.height(t.height + "px"); + } + + // 显示步长(如果配置了) + if (t.showstep) { + for (var g = (t.max - t.min) / t.step, b = "", x = 1; x < g + 1; x++) { + var T = 100 * x / g; + T < 100 && (b += '
      '); + } + e.elemTemp.append(b); + } + + // 显示输入框 + if (t.input && !t.range) { + var w = i('
      '); + h.css("position", "relative"); + h.append(w); + h.find("."+c).children("input").val(t.value); + "vertical" === t.type ? w.css({ left: 0, top: -48 }) : e.elemTemp.css("margin-right", w.outerWidth() + 15); + } + + // 如果禁用,添加禁用样式 + t.disabled ? (e.elemTemp.addClass(l), e.elemTemp.find("."+u).addClass(l)) : e.slide(); + + // 滑块按钮悬停事件 + e.elemTemp.find("."+u).on("mouseover", function() { + var a = "vertical" === t.type ? t.height : e.elemTemp[0].offsetWidth, + n = e.elemTemp.find("."+o), + l = "vertical" === t.type ? a - i(this).parent()[0].offsetTop - n.height() : i(this).parent()[0].offsetLeft, + s = l / a * 100, + r = i(this).parent().data("value"), + u = t.setTips ? t.setTips(r) : r; + e.elemTemp.find("."+d).html(u); + "vertical" === t.type ? e.elemTemp.find("."+d).css({ bottom: s + "%", "margin-bottom": "20px", display: "inline-block" }) : + e.elemTemp.find("."+d).css({ left: s + "%", display: "inline-block" }); + }).on("mouseout", function() { + e.elemTemp.find("."+d).css("display", "none"); + diff --git a/web/lay/modules/transfer.js b/web/lay/modules/transfer.js index 2483921..e4a9eaf 100644 --- a/web/lay/modules/transfer.js +++ b/web/lay/modules/transfer.js @@ -1,2 +1,155 @@ /** layui-v2.5.6 MIT License By https://www.layui.com */ - ;layui.define(["laytpl","form"],function(e){"use strict";var a=layui.$,t=layui.laytpl,n=layui.form,i="transfer",l={config:{},index:layui[i]?layui[i].index+1e4:0,set:function(e){var t=this;return t.config=a.extend({},t.config,e),t},on:function(e,a){return layui.onevent.call(this,i,e,a)}},r=function(){var e=this,a=e.config,t=a.id||e.index;return r.that[t]=e,r.config[t]=a,{config:a,reload:function(a){e.reload.call(e,a)},getData:function(){return e.getData.call(e)}}},c="layui-hide",o="layui-btn-disabled",d="layui-none",s="layui-transfer-box",u="layui-transfer-header",h="layui-transfer-search",f="layui-transfer-active",y="layui-transfer-data",p=function(e){return e=e||{},['
      ','
      ','","
      ","{{# if(d.data.showSearch){ }}",'","{{# } }}",'
        ',"
        "].join("")},v=['
        ',p({index:0,checkAllName:"layTransferLeftCheckAll"}),'
        ','",'","
        ",p({index:1,checkAllName:"layTransferRightCheckAll"}),"
        "].join(""),x=function(e){var t=this;t.index=++l.index,t.config=a.extend({},t.config,l.config,e),t.render()};x.prototype.config={title:["列表一","列表二"],width:200,height:360,data:[],value:[],showSearch:!1,id:"",text:{none:"无数据",searchNone:"无匹配数据"}},x.prototype.reload=function(e){var t=this;layui.each(e,function(e,a){a.constructor===Array&&delete t.config[e]}),t.config=a.extend(!0,{},t.config,e),t.render()},x.prototype.render=function(){var e=this,n=e.config,i=e.elem=a(t(v).render({data:n,index:e.index})),l=n.elem=a(n.elem);l[0]&&(n.data=n.data||[],n.value=n.value||[],e.key=n.id||e.index,l.html(e.elem),e.layBox=e.elem.find("."+s),e.layHeader=e.elem.find("."+u),e.laySearch=e.elem.find("."+h),e.layData=i.find("."+y),e.layBtn=i.find("."+f+" .layui-btn"),e.layBox.css({width:n.width,height:n.height}),e.layData.css({height:function(){return n.height-e.layHeader.outerHeight()-e.laySearch.outerHeight()-2}()}),e.renderData(),e.events())},x.prototype.renderData=function(){var e=this,a=(e.config,[{checkName:"layTransferLeftCheck",views:[]},{checkName:"layTransferRightCheck",views:[]}]);e.parseData(function(e){var t=e.selected?1:0,n=["
      • ",'',"
      • "].join("");a[t].views.push(n),delete e.selected}),e.layData.eq(0).html(a[0].views.join("")),e.layData.eq(1).html(a[1].views.join("")),e.renderCheckBtn()},x.prototype.renderForm=function(e){n.render(e,"LAY-transfer-"+this.index)},x.prototype.renderCheckBtn=function(e){var t=this,n=t.config;e=e||{},t.layBox.each(function(i){var l=a(this),r=l.find("."+y),d=l.find("."+u).find('input[type="checkbox"]'),s=r.find('input[type="checkbox"]'),h=0,f=!1;if(s.each(function(){var e=a(this).data("hide");(this.checked||this.disabled||e)&&h++,this.checked&&!e&&(f=!0)}),d.prop("checked",f&&h===s.length),t.layBtn.eq(i)[f?"removeClass":"addClass"](o),!e.stopNone){var p=r.children("li:not(."+c+")").length;t.noneView(r,p?"":n.text.none)}}),t.renderForm("checkbox")},x.prototype.noneView=function(e,t){var n=a('

        '+(t||"")+"

        ");e.find("."+d)[0]&&e.find("."+d).remove(),t.replace(/\s/g,"")&&e.append(n)},x.prototype.setValue=function(){var e=this,t=e.config,n=[];return e.layBox.eq(1).find("."+y+' input[type="checkbox"]').each(function(){var e=a(this).data("hide");e||n.push(this.value)}),t.value=n,e},x.prototype.parseData=function(e){var t=this,n=t.config,i=[];return layui.each(n.data,function(t,l){l=("function"==typeof n.parseData?n.parseData(l):l)||l,i.push(l=a.extend({},l)),layui.each(n.value,function(e,a){a==l.value&&(l.selected=!0)}),e&&e(l)}),n.data=i,t},x.prototype.getData=function(e){var a=this,t=a.config,n=[];return a.setValue(),layui.each(e||t.value,function(e,a){layui.each(t.data,function(e,t){delete t.selected,a==t.value&&n.push(t)})}),n},x.prototype.events=function(){var e=this,t=e.config;e.elem.on("click",'input[lay-filter="layTransferCheckbox"]+',function(){var t=a(this).prev(),n=t[0].checked,i=t.parents("."+s).eq(0).find("."+y);t[0].disabled||("all"===t.attr("lay-type")&&i.find('input[type="checkbox"]').each(function(){this.disabled||(this.checked=n)}),e.renderCheckBtn({stopNone:!0}))}),e.layBtn.on("click",function(){var n=a(this),i=n.data("index"),l=e.layBox.eq(i),r=[];if(!n.hasClass(o)){e.layBox.eq(i).each(function(t){var n=a(this),i=n.find("."+y);i.children("li").each(function(){var t=a(this),n=t.find('input[type="checkbox"]'),i=n.data("hide");n[0].checked&&!i&&(n[0].checked=!1,l.siblings("."+s).find("."+y).append(t.clone()),t.remove(),r.push(n[0].value)),e.setValue()})}),e.renderCheckBtn();var c=l.siblings("."+s).find("."+h+" input");""===c.val()||c.trigger("keyup"),t.onchange&&t.onchange(e.getData(r),i)}}),e.laySearch.find("input").on("keyup",function(){var n=this.value,i=a(this).parents("."+h).eq(0).siblings("."+y),l=i.children("li");l.each(function(){var e=a(this),t=e.find('input[type="checkbox"]'),i=t[0].title.indexOf(n)!==-1;e[i?"removeClass":"addClass"](c),t.data("hide",!i)}),e.renderCheckBtn();var r=l.length===i.children("li."+c).length;e.noneView(i,r?t.text.searchNone:"")})},r.that={},r.config={},l.reload=function(e,a){var t=r.that[e];return t.reload(a),r.call(t)},l.getData=function(e){var a=r.that[e];return a.getData()},l.render=function(e){var a=new x(e);return r.call(a)},e(i,l)}); \ No newline at end of file +;layui.define(["laytpl","form"], function(e) { + "use strict"; + + var a = layui.$, // 引用jQuery + t = layui.laytpl, // 引用laytpl模板引擎 + n = layui.form, // 引用layui的表单模块 + i = "transfer", // 模块名称 + l = { // 配置和事件管理 + config: {}, // 配置项 + index: layui[i] ? layui[i].index + 1e4 : 0, // 模块的索引 + set: function(e) { // 设置配置项 + var t = this; + return t.config = a.extend({}, t.config, e), t; + }, + on: function(e, a) { // 绑定事件 + return layui.onevent.call(this, i, e, a); + } + }, + r = function() { // 传递模块的实例 + var e = this, a = e.config, t = a.id || e.index; + return r.that[t] = e, r.config[t] = a, {config: a, reload: function(a) { e.reload.call(e, a); }, getData: function() { return e.getData.call(e); }}; + }, + c = "layui-hide", // 隐藏元素的类名 + o = "layui-btn-disabled", // 禁用按钮的类名 + d = "layui-none", // 无数据的类名 + s = "layui-transfer-box", // 转移框的类名 + u = "layui-transfer-header", // 转移框头部的类名 + h = "layui-transfer-search", // 搜索框的类名 + f = "layui-transfer-active", // 激活的类名 + y = "layui-transfer-data", // 数据项的类名 + p = function(e) { // 模板渲染的HTML + return e = e || {}, [ + '
        ', + '
        ', + '', + '
        ', + '{{# if(d.data.showSearch){ }}', + '', + '{{# } }}', + '
          ', + '
          ' + ].join(""); + }, + v = [ + '
          ', + p({index: 0, checkAllName: "layTransferLeftCheckAll"}), + '
          ', + '', + '', + '
          ', + p({index: 1, checkAllName: "layTransferRightCheckAll"}), + '
          ' + ].join(""), // 生成的HTML结构 + + x = function(e) { // 转移框构造函数 + var t = this; + t.index = ++l.index; // 自增索引 + t.config = a.extend({}, t.config, l.config, e); // 合并配置 + t.render(); + }; + + x.prototype.config = { + title: ["列表一", "列表二"], // 两个列表的标题 + width: 200, // 转移框宽度 + height: 360, // 转移框高度 + data: [], // 数据源 + value: [], // 默认选中的值 + showSearch: !1, // 是否显示搜索框 + id: "", // 唯一ID + text: { // 文本配置 + none: "无数据", // 无数据时显示的文本 + searchNone: "无匹配数据" // 搜索无匹配数据时显示的文本 + } + }; + + // 重新加载数据 + x.prototype.reload = function(e) { + var t = this; + layui.each(e, function(e, a) { + a.constructor === Array && delete t.config[e]; + }); + t.config = a.extend(!0, {}, t.config, e); // 合并新的配置 + t.render(); + }; + + // 渲染转移框 + x.prototype.render = function() { + var e = this, n = e.config; + var i = e.elem = a(t(v).render({data: n, index: e.index})), // 渲染模板 + l = n.elem = a(n.elem); // 获取元素 + l[0] && (n.data = n.data || [], n.value = n.value || [], e.key = n.id || e.index, l.html(e.elem), e.layBox = e.elem.find("."+s), e.layHeader = e.elem.find("."+u), e.laySearch = e.elem.find("."+h), e.layData = i.find("."+y), e.layBtn = i.find("."+f+" .layui-btn"), e.layBox.css({width: n.width, height: n.height}), e.layData.css({height: function() { return n.height - e.layHeader.outerHeight() - e.laySearch.outerHeight() - 2;} }), e.renderData(), e.events()); + }; + + // 渲染数据 + x.prototype.renderData = function() { + var e = this, a = (e.config, [{checkName: "layTransferLeftCheck", views: []}, {checkName: "layTransferRightCheck", views: []}]); + e.parseData(function(e) { // 解析数据 + var t = e.selected ? 1 : 0, + n = ["
        • ", '', "
        • "].join(""); + a[t].views.push(n); + delete e.selected; + }); + e.layData.eq(0).html(a[0].views.join("")); // 更新左侧列表数据 + e.layData.eq(1).html(a[1].views.join("")); // 更新右侧列表数据 + e.renderCheckBtn(); + }; + + // 渲染按钮(全选等) + x.prototype.renderCheckBtn = function(e) { + var t = this, n = t.config; + e = e || {}; + t.layBox.each(function(i) { + var l = a(this), r = l.find("."+y), d = l.find("."+u).find('input[type="checkbox"]'), s = r.find('input[type="checkbox"]'), h = 0, f = !1; + s.each(function() { + var e = a(this).data("hide"); + (this.checked || this.disabled || e) && h++, this.checked && !e && (f = !0); + }); + d.prop("checked", f && h === s.length); + t.layBtn.eq(i)[f ? "removeClass" : "addClass"](o); + !e.stopNone && t.noneView(r, r.children("li:not(."+c+")").length ? "" : n.text.none); + }); + t.renderForm("checkbox"); + }; + + // 显示没有数据的提示 + x.prototype.noneView = function(e, t) { + var n = a('

          '+(t || "")+"

          "); + e.find("."+d)[0] && e.find("."+d).remove(); + t.replace(/\s/g, "") && e.append(n); + }; + + // 设置值 + x.prototype.setValue = function() { + var e = this, t = e.config, n = []; + e.layBox.eq(1).find("."+y+' input[type="checkbox"]').each(function() { + var e = a(this).data("hide"); + e || n.push(this.value); + }); + t.value = n; + e.renderCheckBtn(); + }; + + // 解析数据 + x.prototype.parseData = function(e) { + var t = this, n = t.config, i = []; + layui.each(n.data, function(t, l) { + l = ("function" == typeof n.parse diff --git a/web/lay/modules/tree.js b/web/lay/modules/tree.js index c9c93a2..e808c25 100644 --- a/web/lay/modules/tree.js +++ b/web/lay/modules/tree.js @@ -1,2 +1,148 @@ /** layui-v2.5.6 MIT License By https://www.layui.com */ - ;layui.define("form",function(e){"use strict";var i=layui.$,a=layui.form,n=layui.layer,t="tree",r={config:{},index:layui[t]?layui[t].index+1e4:0,set:function(e){var a=this;return a.config=i.extend({},a.config,e),a},on:function(e,i){return layui.onevent.call(this,t,e,i)}},l=function(){var e=this,i=e.config,a=i.id||e.index;return l.that[a]=e,l.config[a]=i,{config:i,reload:function(i){e.reload.call(e,i)},getChecked:function(){return e.getChecked.call(e)},setChecked:function(i){return e.setChecked.call(e,i)}}},c="layui-hide",d="layui-disabled",s="layui-tree-set",o="layui-tree-iconClick",h="layui-icon-addition",u="layui-icon-subtraction",p="layui-tree-entry",f="layui-tree-main",y="layui-tree-txt",v="layui-tree-pack",C="layui-tree-spread",k="layui-tree-setLineShort",m="layui-tree-showLine",x="layui-tree-lineExtend",b=function(e){var a=this;a.index=++r.index,a.config=i.extend({},a.config,r.config,e),a.render()};b.prototype.config={data:[],showCheckbox:!1,showLine:!0,accordion:!1,onlyIconControl:!1,isJump:!1,edit:!1,text:{defaultNodeName:"未命名",none:"无数据"}},b.prototype.reload=function(e){var a=this;layui.each(e,function(e,i){i.constructor===Array&&delete a.config[e]}),a.config=i.extend(!0,{},a.config,e),a.render()},b.prototype.render=function(){var e=this,a=e.config;e.checkids=[];var n=i('
          ');e.tree(n);var t=a.elem=i(a.elem);if(t[0]){if(e.key=a.id||e.index,e.elem=n,e.elemNone=i('
          '+a.text.none+"
          "),t.html(e.elem),0==e.elem.find(".layui-tree-set").length)return e.elem.append(e.elemNone);a.showCheckbox&&e.renderForm("checkbox"),e.elem.find(".layui-tree-set").each(function(){var e=i(this);e.parent(".layui-tree-pack")[0]||e.addClass("layui-tree-setHide"),!e.next()[0]&&e.parents(".layui-tree-pack").eq(1).hasClass("layui-tree-lineExtend")&&e.addClass(k),e.next()[0]||e.parents(".layui-tree-set").eq(0).next()[0]||e.addClass(k)}),e.events()}},b.prototype.renderForm=function(e){a.render(e,"LAY-tree-"+this.index)},b.prototype.tree=function(e,a){var n=this,t=n.config,r=a||t.data;layui.each(r,function(a,r){var l=r.children&&r.children.length>0,o=i('
          '),h=i(['
          ','
          ','
          ',function(){return t.showLine?l?'':'':''}(),function(){return t.showCheckbox?'':""}(),function(){return t.isJump&&r.href?''+(r.title||r.label||t.text.defaultNodeName)+"":''+(r.title||r.label||t.text.defaultNodeName)+""}(),"
          ",function(){if(!t.edit)return"";var e={add:'',update:'',del:''},i=['
          '];return t.edit===!0&&(t.edit=["update","del"]),"object"==typeof t.edit?(layui.each(t.edit,function(a,n){i.push(e[n]||"")}),i.join("")+"
          "):void 0}(),"
          "].join(""));l&&(h.append(o),n.tree(o,r.children)),e.append(h),h.prev("."+s)[0]&&h.prev().children(".layui-tree-pack").addClass("layui-tree-showLine"),l||h.parent(".layui-tree-pack").addClass("layui-tree-lineExtend"),n.spread(h,r),t.showCheckbox&&(r.checked&&n.checkids.push(r.id),n.checkClick(h,r)),t.edit&&n.operate(h,r)})},b.prototype.spread=function(e,a){var n=this,t=n.config,r=e.children("."+p),l=r.children("."+f),c=r.find("."+o),k=r.find("."+y),m=t.onlyIconControl?c:l,x="";m.on("click",function(i){var a=e.children("."+v),n=m.children(".layui-icon")[0]?m.children(".layui-icon"):m.find(".layui-tree-icon").children(".layui-icon");if(a[0]){if(e.hasClass(C))e.removeClass(C),a.slideUp(200),n.removeClass(u).addClass(h);else if(e.addClass(C),a.slideDown(200),n.addClass(u).removeClass(h),t.accordion){var r=e.siblings("."+s);r.removeClass(C),r.children("."+v).slideUp(200),r.find(".layui-tree-icon").children(".layui-icon").removeClass(u).addClass(h)}}else x="normal"}),k.on("click",function(){var n=i(this);n.hasClass(d)||(x=e.hasClass(C)?t.onlyIconControl?"open":"close":t.onlyIconControl?"close":"open",t.click&&t.click({elem:e,state:x,data:a}))})},b.prototype.setCheckbox=function(e,i,a){var n=this,t=(n.config,a.prop("checked"));if(!a.prop("disabled")){if("object"==typeof i.children||e.find("."+v)[0]){var r=e.find("."+v).find('input[same="layuiTreeCheck"]');r.each(function(){this.disabled||(this.checked=t)})}var l=function(e){if(e.parents("."+s)[0]){var i,a=e.parent("."+v),n=a.parent(),r=a.prev().find('input[same="layuiTreeCheck"]');t?r.prop("checked",t):(a.find('input[same="layuiTreeCheck"]').each(function(){this.checked&&(i=!0)}),i||r.prop("checked",!1)),l(n)}};l(e),n.renderForm("checkbox")}},b.prototype.checkClick=function(e,a){var n=this,t=n.config,r=e.children("."+p),l=r.children("."+f);l.on("click",'input[same="layuiTreeCheck"]+',function(r){layui.stope(r);var l=i(this).prev(),c=l.prop("checked");l.prop("disabled")||(n.setCheckbox(e,a,l),t.oncheck&&t.oncheck({elem:e,checked:c,data:a}))})},b.prototype.operate=function(e,a){var t=this,r=t.config,l=e.children("."+p),d=l.children("."+f);l.children(".layui-tree-btnGroup").on("click",".layui-icon",function(l){layui.stope(l);var f=i(this).data("type"),b=e.children("."+v),g={data:a,type:f,elem:e};if("add"==f){b[0]||(r.showLine?(d.find("."+o).addClass("layui-tree-icon"),d.find("."+o).children(".layui-icon").addClass(h).removeClass("layui-icon-file")):d.find(".layui-tree-iconArrow").removeClass(c),e.append('
          '));var w=r.operate&&r.operate(g),N={};if(N.title=r.text.defaultNodeName,N.id=w,t.tree(e.children("."+v),[N]),r.showLine)if(b[0])b.hasClass(x)||b.addClass(x),e.find("."+v).each(function(){i(this).children("."+s).last().addClass(k)}),b.children("."+s).last().prev().hasClass(k)?b.children("."+s).last().prev().removeClass(k):b.children("."+s).last().removeClass(k),!e.parent("."+v)[0]&&e.next()[0]&&b.children("."+s).last().removeClass(k);else{var T=e.siblings("."+s),L=1,A=e.parent("."+v);layui.each(T,function(e,a){i(a).children("."+v)[0]||(L=0)}),1==L?(T.children("."+v).addClass(m),T.children("."+v).children("."+s).removeClass(k),e.children("."+v).addClass(m),A.removeClass(x),A.children("."+s).last().children("."+v).children("."+s).last().addClass(k)):e.children("."+v).children("."+s).addClass(k)}if(!r.showCheckbox)return;if(d.find('input[same="layuiTreeCheck"]')[0].checked){var I=e.children("."+v).children("."+s).last();I.find('input[same="layuiTreeCheck"]')[0].checked=!0}t.renderForm("checkbox")}else if("update"==f){var F=d.children("."+y).html();d.children("."+y).html(""),d.append(''),d.children(".layui-tree-editInput").val(F).focus();var j=function(e){var i=e.val().trim();i=i?i:r.text.defaultNodeName,e.remove(),d.children("."+y).html(i),g.data.title=i,r.operate&&r.operate(g)};d.children(".layui-tree-editInput").blur(function(){j(i(this))}),d.children(".layui-tree-editInput").on("keydown",function(e){13===e.keyCode&&(e.preventDefault(),j(i(this)))})}else n.confirm('确认删除该节点 "'+(a.title||"")+'" 吗?',function(a){if(r.operate&&r.operate(g),g.status="remove",n.close(a),!e.prev("."+s)[0]&&!e.next("."+s)[0]&&!e.parent("."+v)[0])return e.remove(),void t.elem.append(t.elemNone);if(e.siblings("."+s).children("."+p)[0]){if(r.showCheckbox){var l=function(e){if(e.parents("."+s)[0]){var a=e.siblings("."+s).children("."+p),n=e.parent("."+v).prev(),r=n.find('input[same="layuiTreeCheck"]')[0],c=1,d=0;0==r.checked&&(a.each(function(e,a){var n=i(a).find('input[same="layuiTreeCheck"]')[0];0!=n.checked||n.disabled||(c=0),n.disabled||(d=1)}),1==c&&1==d&&(r.checked=!0,t.renderForm("checkbox"),l(n.parent("."+s))))}};l(e)}if(r.showLine){var d=e.siblings("."+s),h=1,f=e.parent("."+v);layui.each(d,function(e,a){i(a).children("."+v)[0]||(h=0)}),1==h?(b[0]||(f.removeClass(x),d.children("."+v).addClass(m),d.children("."+v).children("."+s).removeClass(k)),e.next()[0]?f.children("."+s).last().children("."+v).children("."+s).last().addClass(k):e.prev().children("."+v).children("."+s).last().addClass(k),e.next()[0]||e.parents("."+s)[1]||e.parents("."+s).eq(0).next()[0]||e.prev("."+s).addClass(k)):!e.next()[0]&&e.hasClass(k)&&e.prev().addClass(k)}}else{var y=e.parent("."+v).prev();if(r.showLine){y.find("."+o).removeClass("layui-tree-icon"),y.find("."+o).children(".layui-icon").removeClass(u).addClass("layui-icon-file");var w=y.parents("."+v).eq(0);w.addClass(x),w.children("."+s).each(function(){i(this).children("."+v).children("."+s).last().addClass(k)})}else y.find(".layui-tree-iconArrow").addClass(c);e.parents("."+s).eq(0).removeClass(C),e.parent("."+v).remove()}e.remove()})})},b.prototype.events=function(){var e=this,a=e.config;e.elem.find(".layui-tree-checkedFirst");e.setChecked(e.checkids),e.elem.find(".layui-tree-search").on("keyup",function(){var n=i(this),t=n.val(),r=n.nextAll(),l=[];r.find("."+y).each(function(){var e=i(this).parents("."+p);if(i(this).html().indexOf(t)!=-1){l.push(i(this).parent());var a=function(e){e.addClass("layui-tree-searchShow"),e.parent("."+v)[0]&&a(e.parent("."+v).parent("."+s))};a(e.parent("."+s))}}),r.find("."+p).each(function(){var e=i(this).parent("."+s);e.hasClass("layui-tree-searchShow")||e.addClass(c)}),0==r.find(".layui-tree-searchShow").length&&e.elem.append(e.elemNone),a.onsearch&&a.onsearch({elem:l})}),e.elem.find(".layui-tree-search").on("keydown",function(){i(this).nextAll().find("."+p).each(function(){var e=i(this).parent("."+s);e.removeClass("layui-tree-searchShow "+c)}),i(".layui-tree-emptyText")[0]&&i(".layui-tree-emptyText").remove()})},b.prototype.getChecked=function(){var e=this,a=e.config,n=[],t=[];e.elem.find(".layui-form-checked").each(function(){n.push(i(this).prev()[0].value)});var r=function(e,a){layui.each(e,function(e,t){layui.each(n,function(e,n){if(t.id==n){var l=i.extend({},t);return delete l.children,a.push(l),t.children&&(l.children=[],r(t.children,l.children)),!0}})})};return r(i.extend({},a.data),t),t},b.prototype.setChecked=function(e){var a=this;a.config;a.elem.find("."+s).each(function(a,n){var t=i(this).data("id"),r=i(n).children("."+p).find('input[same="layuiTreeCheck"]'),l=r.next();if("number"==typeof e){if(t==e)return r[0].checked||l.click(),!1}else"object"==typeof e&&layui.each(e,function(e,i){if(i==t&&!r[0].checked)return l.click(),!0})})},l.that={},l.config={},r.reload=function(e,i){var a=l.that[e];return a.reload(i),l.call(a)},r.getChecked=function(e){var i=l.that[e];return i.getChecked()},r.setChecked=function(e,i){var a=l.that[e];return a.setChecked(i)},r.render=function(e){var i=new b(e);return l.call(i)},e(t,r)}); \ No newline at end of file +layui.define("form", function(e) { + "use strict"; + var i = layui.$, // 获取layui的$对象 + a = layui.form, // 获取layui的form模块 + n = layui.layer, // 获取layui的layer模块 + t = "tree", // 树形结构的模块名称 + r = { + config: {}, + index: layui[t] ? layui[t].index + 1e4 : 0, // 设置唯一的树形组件索引 + set: function(e) { + var a = this; + return a.config = i.extend({}, a.config, e), a; // 合并配置项 + }, + on: function(e, i) { + return layui.onevent.call(this, t, e, i); // 绑定事件 + } + }, + l = function() { + var e = this, i = e.config, a = i.id || e.index; + return l.that[a] = e, l.config[a] = i, { + config: i, + reload: function(i) { + e.reload.call(e, i); + }, + getChecked: function() { + return e.getChecked.call(e); + }, + setChecked: function(i) { + return e.setChecked.call(e, i); + } + }; + }, + c = "layui-hide", // 隐藏样式 + d = "layui-disabled", // 禁用样式 + s = "layui-tree-set", // 树节点容器 + o = "layui-tree-iconClick", // 树节点点击图标 + h = "layui-icon-addition", // 加号图标 + u = "layui-icon-subtraction", // 减号图标 + p = "layui-tree-entry", // 树节点条目 + f = "layui-tree-main", // 树节点主容器 + y = "layui-tree-txt", // 树节点文本 + v = "layui-tree-pack", // 树节点包裹容器 + C = "layui-tree-spread", // 树节点展开样式 + k = "layui-tree-setLineShort", // 树节点短线样式 + m = "layui-tree-showLine", // 显示树节点连接线 + x = "layui-tree-lineExtend", // 树节点连接线延伸样式 + + // 构造函数 + b = function(e) { + var a = this; + a.index = ++r.index; + a.config = i.extend({}, a.config, r.config, e); + a.render(); // 渲染树形组件 + }; + + b.prototype.config = { + data: [], // 树节点数据 + showCheckbox: !1, // 是否显示复选框 + showLine: !0, // 是否显示连线 + accordion: !1, // 是否开启手风琴模式 + onlyIconControl: !1, // 是否仅通过点击图标控制展开收缩 + isJump: !1, // 是否跳转链接 + edit: !1, // 是否允许编辑操作 + text: { + defaultNodeName: "未命名", // 默认节点名称 + none: "无数据" // 无数据时显示的文本 + } + }; + + // 重新加载树形组件 + b.prototype.reload = function(e) { + var a = this; + layui.each(e, function(e, i) { + i.constructor === Array && delete a.config[e]; // 清除旧的配置项 + }); + a.config = i.extend(!0, {}, a.config, e); // 更新配置项 + a.render(); // 重新渲染 + }; + + // 渲染树形组件 + b.prototype.render = function() { + var e = this, a = e.config; + e.checkids = []; + var n = i('
          '); + e.tree(n); // 构建树形结构 + var t = a.elem = i(a.elem); + if (t[0]) { + if (e.key = a.id || e.index, e.elem = n, e.elemNone = i('
          ' + a.text.none + "
          "), t.html(e.elem), 0 == e.elem.find(".layui-tree-set").length) { + return e.elem.append(e.elemNone); // 如果没有节点数据,显示空文本 + } + a.showCheckbox && e.renderForm("checkbox"); // 渲染复选框 + e.elem.find(".layui-tree-set").each(function() { + var e = i(this); + e.parent(".layui-tree-pack")[0] || e.addClass("layui-tree-setHide"); // 隐藏无子节点的树节点 + !e.next()[0] && e.parents(".layui-tree-pack").eq(1).hasClass("layui-tree-lineExtend") && e.addClass(k); // 为无下一个兄弟节点的节点添加短线样式 + e.next()[0] || e.parents(".layui-tree-set").eq(0).next()[0] || e.addClass(k); // 为没有下一级子节点的父节点添加短线样式 + }); + e.events(); // 绑定事件 + } + }; + + // 渲染复选框 + b.prototype.renderForm = function(e) { + a.render(e, "LAY-tree-" + this.index); + }; + + // 构建树形结构 + b.prototype.tree = function(e, a) { + var n = this, t = n.config, r = a || t.data; + layui.each(r, function(a, r) { + var l = r.children && r.children.length > 0, // 判断是否有子节点 + o = i('
          "), + h = i([ + '
          ', + '
          ', + '
          ', + function() { + return t.showLine ? l ? '' : '' : ''; + }(), + function() { + return t.showCheckbox ? '' : ""; + }(), + function() { + return t.isJump && r.href ? '' + (r.title || r.label || t.text.defaultNodeName) + "" : '' + (r.title || r.label || t.text.defaultNodeName) + ""; + }(), + "
          ", + function() { + if (!t.edit) return ""; + var e = { add: '', update: '', del: '' }, + i = ['
          ']; + return t.edit === !0 && (t.edit = ["update", "del"]), "object" == typeof t.edit ? (layui.each(t.edit, function(a, n) { i.push(e[n] || "") }), i.join("") + "
          ") : void 0; + }(), + "
          " + ].join("")); + l && (h.append(o), n.tree(o, r.children)); // 如果有子节点,递归调用 + e.append(h); + h.prev("." + s)[0] && h.prev().children(".layui-tree-pack").addClass("layui-tree-showLine"); + l || h.parent(".layui-tree-pack").addClass("layui-tree-lineExtend"); + n.spread(h, r); + t.showCheckbox && (r.checked && n.checkids.push(r.id), n.checkClick(h, r)); + t.edit && n.operate(h, r); + }); + }; + + // 展开和收缩节点 + b.prototype.spread = function(e, a) { + var n = this, t = n.config, r = e.children("." + p), l = r.children("." + f), c = r.find("." + diff --git a/web/lay/modules/upload.js b/web/lay/modules/upload.js index 9298ecf..19884af 100644 --- a/web/lay/modules/upload.js +++ b/web/lay/modules/upload.js @@ -1,2 +1,114 @@ /** layui-v2.5.6 MIT License By https://www.layui.com */ - ;layui.define("layer",function(e){"use strict";var t=layui.$,i=layui.layer,n=layui.hint(),o=layui.device(),a={config:{},set:function(e){var i=this;return i.config=t.extend({},i.config,e),i},on:function(e,t){return layui.onevent.call(this,r,e,t)}},l=function(){var e=this;return{upload:function(t){e.upload.call(e,t)},reload:function(t){e.reload.call(e,t)},config:e.config}},r="upload",u="layui-upload-file",c="layui-upload-form",f="layui-upload-iframe",s="layui-upload-choose",p=function(e){var i=this;i.config=t.extend({},i.config,a.config,e),i.render()};p.prototype.config={accept:"images",exts:"",auto:!0,bindAction:"",url:"",field:"file",acceptMime:"",method:"post",data:{},drag:!0,size:0,number:0,multiple:!1},p.prototype.render=function(e){var i=this,e=i.config;e.elem=t(e.elem),e.bindAction=t(e.bindAction),i.file(),i.events()},p.prototype.file=function(){var e=this,i=e.config,n=e.elemFile=t(['"].join("")),a=i.elem.next();(a.hasClass(u)||a.hasClass(c))&&a.remove(),o.ie&&o.ie<10&&i.elem.wrap('
          '),e.isFile()?(e.elemFile=i.elem,i.field=i.elem[0].name):i.elem.after(n),o.ie&&o.ie<10&&e.initIE()},p.prototype.initIE=function(){var e=this,i=e.config,n=t(''),o=t(['
          ',"
          "].join(""));t("#"+f)[0]||t("body").append(n),i.elem.next().hasClass(c)||(e.elemFile.wrap(o),i.elem.next("."+c).append(function(){var e=[];return layui.each(i.data,function(t,i){i="function"==typeof i?i():i,e.push('')}),e.join("")}()))},p.prototype.msg=function(e){return i.msg(e,{icon:2,shift:6})},p.prototype.isFile=function(){var e=this.config.elem[0];if(e)return"input"===e.tagName.toLocaleLowerCase()&&"file"===e.type},p.prototype.preview=function(e){var t=this;window.FileReader&&layui.each(t.chooseFiles,function(t,i){var n=new FileReader;n.readAsDataURL(i),n.onload=function(){e&&e(t,i,this.result)}})},p.prototype.upload=function(e,i){var n,a=this,l=a.config,r=a.elemFile[0],u=function(){var i=0,n=0,o=e||a.files||a.chooseFiles||r.files,u=function(){l.multiple&&i+n===a.fileLength&&"function"==typeof l.allDone&&l.allDone({total:a.fileLength,successful:i,aborted:n})};layui.each(o,function(e,o){var r=new FormData;r.append(l.field,o),layui.each(l.data,function(e,t){t="function"==typeof t?t():t,r.append(e,t)});var c={url:l.url,type:"post",data:r,contentType:!1,processData:!1,dataType:"json",headers:l.headers||{},success:function(t){i++,d(e,t),u()},error:function(){n++,a.msg("请求上传接口出现异常"),m(e),u()}};"function"==typeof l.progress&&(c.xhr=function(){var e=t.ajaxSettings.xhr();return e.upload.addEventListener("progress",function(e){if(e.lengthComputable){var t=Math.floor(e.loaded/e.total*100);l.progress(t,l.item[0],e)}}),e}),t.ajax(c)})},c=function(){var e=t("#"+f);a.elemFile.parent().submit(),clearInterval(p.timer),p.timer=setInterval(function(){var t,i=e.contents().find("body");try{t=i.text()}catch(n){a.msg("获取上传后的响应信息出现异常"),clearInterval(p.timer),m()}t&&(clearInterval(p.timer),i.html(""),d(0,t))},30)},d=function(e,t){if(a.elemFile.next("."+s).remove(),r.value="","object"!=typeof t)try{t=JSON.parse(t)}catch(i){return t={},a.msg("请对上传接口返回有效JSON")}"function"==typeof l.done&&l.done(t,e||0,function(e){a.upload(e)})},m=function(e){l.auto&&(r.value=""),"function"==typeof l.error&&l.error(e||0,function(e){a.upload(e)})},h=l.exts,v=function(){var t=[];return layui.each(e||a.chooseFiles,function(e,i){t.push(i.name)}),t}(),g={preview:function(e){a.preview(e)},upload:function(e,t){var i={};i[e]=t,a.upload(i)},pushFile:function(){return a.files=a.files||{},layui.each(a.chooseFiles,function(e,t){a.files[e]=t}),a.files},resetFile:function(e,t,i){var n=new File([t],i);a.files=a.files||{},a.files[e]=n}},y=function(){if("choose"!==i&&!l.auto||(l.choose&&l.choose(g),"choose"!==i))return l.before&&l.before(g),o.ie?o.ie>9?u():c():void u()};if(v=0===v.length?r.value.match(/[^\/\\]+\..+/g)||[]||"":v,0!==v.length){switch(l.accept){case"file":if(h&&!RegExp("\\w\\.("+h+")$","i").test(escape(v)))return a.msg("选择的文件中包含不支持的格式"),r.value="";break;case"video":if(!RegExp("\\w\\.("+(h||"avi|mp4|wma|rmvb|rm|flash|3gp|flv")+")$","i").test(escape(v)))return a.msg("选择的视频中包含不支持的格式"),r.value="";break;case"audio":if(!RegExp("\\w\\.("+(h||"mp3|wav|mid")+")$","i").test(escape(v)))return a.msg("选择的音频中包含不支持的格式"),r.value="";break;default:if(layui.each(v,function(e,t){RegExp("\\w\\.("+(h||"jpg|png|gif|bmp|jpeg$")+")","i").test(escape(t))||(n=!0)}),n)return a.msg("选择的图片中包含不支持的格式"),r.value=""}if(a.fileLength=function(){var t=0,i=e||a.files||a.chooseFiles||r.files;return layui.each(i,function(){t++}),t}(),l.number&&a.fileLength>l.number)return a.msg("同时最多只能上传的数量为:"+l.number);if(l.size>0&&!(o.ie&&o.ie<10)){var F;if(layui.each(a.chooseFiles,function(e,t){if(t.size>1024*l.size){var i=l.size/1024;i=i>=1?i.toFixed(2)+"MB":l.size+"KB",r.value="",F=i}}),F)return a.msg("文件不能超过"+F)}y()}},p.prototype.reload=function(e){e=e||{},delete e.elem,delete e.bindAction;var i=this,e=i.config=t.extend({},i.config,a.config,e),n=e.elem.next();n.attr({name:e.name,accept:e.acceptMime,multiple:e.multiple})},p.prototype.events=function(){var e=this,i=e.config,a=function(t){e.chooseFiles={},layui.each(t,function(t,i){var n=(new Date).getTime();e.chooseFiles[n+"-"+t]=i})},l=function(t,n){var o=e.elemFile,a=t.length>1?t.length+"个文件":(t[0]||{}).name||o[0].value.match(/[^\/\\]+\..+/g)||[]||"";o.next().hasClass(s)&&o.next().remove(),e.upload(null,"choose"),e.isFile()||i.choose||o.after(''+a+"")};i.elem.off("upload.start").on("upload.start",function(){var o=t(this),a=o.attr("lay-data");if(a)try{a=new Function("return "+a)(),e.config=t.extend({},i,a)}catch(l){n.error("Upload element property lay-data configuration item has a syntax error: "+a)}e.config.item=o,e.elemFile[0].click()}),o.ie&&o.ie<10||i.elem.off("upload.over").on("upload.over",function(){var e=t(this);e.attr("lay-over","")}).off("upload.leave").on("upload.leave",function(){var e=t(this);e.removeAttr("lay-over")}).off("upload.drop").on("upload.drop",function(n,o){var r=t(this),u=o.originalEvent.dataTransfer.files||[];r.removeAttr("lay-over"),a(u),i.auto?e.upload(u):l(u)}),e.elemFile.off("upload.change").on("upload.change",function(){var t=this.files||[];a(t),i.auto?e.upload():l(t)}),i.bindAction.off("upload.action").on("upload.action",function(){e.upload()}),i.elem.data("haveEvents")||(e.elemFile.on("change",function(){t(this).trigger("upload.change")}),i.elem.on("click",function(){e.isFile()||t(this).trigger("upload.start")}),i.drag&&i.elem.on("dragover",function(e){e.preventDefault(),t(this).trigger("upload.over")}).on("dragleave",function(e){t(this).trigger("upload.leave")}).on("drop",function(e){e.preventDefault(),t(this).trigger("upload.drop",e)}),i.bindAction.on("click",function(){t(this).trigger("upload.action")}),i.elem.data("haveEvents",!0))},a.render=function(e){var t=new p(e);return l.call(t)},e(r,a)}); \ No newline at end of file +;layui.define("layer",function(e){"use strict"; + var t=layui.$, // 使用 layui 的 jQuery 封装 + i=layui.layer, // 引入 layer 模块 + n=layui.hint(), // 提示模块 + o=layui.device(), // 设备模块 + a={config:{}, // 配置项 + set:function(e){var i=this; + return i.config=t.extend({},i.config,e),i}, // 设置配置 + on:function(e,t){return layui.onevent.call(this,r,e,t)}}, // 监听事件 + l=function(){var e=this; + return{upload:function(t){e.upload.call(e,t)}, // 上传方法 + reload:function(t){e.reload.call(e,t)}, // 重新加载方法 + config:e.config}}, // 返回配置 + r="upload", // 模块名 + u="layui-upload-file", // 文件上传的类名 + c="layui-upload-form", // 上传表单的类名 + f="layui-upload-iframe", // iframe 类名 + s="layui-upload-choose", // 选择文件的类名 + p=function(e){var i=this; + i.config=t.extend({},i.config,a.config,e),i.render()}; // 构造函数,初始化配置 + +// 定义上传组件的原型 + p.prototype.config={ + accept:"images", // 默认接受的文件类型是图片 + exts:"", // 文件扩展名 + auto:!0, // 是否自动上传 + bindAction:"", // 绑定的上传按钮 + url:"", // 上传的服务器地址 + field:"file", // 上传的字段名称 + acceptMime:"", // 接受的 MIME 类型 + method:"post", // 请求方法 + data:{}, // 附加的表单数据 + drag:!0, // 是否支持拖拽上传 + size:0, // 文件大小限制 + number:0, // 上传文件数量限制 + multiple:!1 // 是否支持多文件上传 + }; + +// 渲染上传控件 + p.prototype.render=function(e){ + var i=this,e=i.config; + e.elem=t(e.elem), // 获取上传控件的元素 + e.bindAction=t(e.bindAction), // 绑定上传按钮 + i.file(), // 初始化文件上传功能 + i.events() // 初始化事件 + }; + +// 初始化文件上传功能 + p.prototype.file=function(){ + var e=this,i=e.config, + n=e.elemFile=t(['"].join("")), + a=i.elem.next(); // 获取上传元素的下一个兄弟元素 + (a.hasClass(u)||a.hasClass(c))&&a.remove(), // 删除已存在的文件上传组件 + o.ie&&o.ie<10&&i.elem.wrap('
          '), // IE 10 以下需要包裹一个 div + e.isFile()?(e.elemFile=i.elem,i.field=i.elem[0].name):i.elem.after(n), // 如果是文件类型的 input,则直接使用 + o.ie&&o.ie<10&&e.initIE(); // 如果是 IE 10 以下,进行额外的初始化处理 + }; + +// 初始化 IE 特定的处理 + p.prototype.initIE=function(){ + var e=this,i=e.config, + n=t(''), + o=t(['
          ',"
          "].join("")); + t("#"+f)[0]||t("body").append(n), // 添加 iframe + i.elem.next().hasClass(c)||(e.elemFile.wrap(o),i.elem.next("."+c).append(function(){var e=[];return layui.each(i.data,function(t,i){i="function"==typeof i?i():i,e.push('')}),e.join("")}())); + }; + +// 显示错误信息 + p.prototype.msg=function(e){ + return i.msg(e,{icon:2,shift:6}); + }; + +// 检查元素是否为文件类型 + p.prototype.isFile=function(){ + var e=this.config.elem[0]; + if(e)return"input"===e.tagName.toLocaleLowerCase()&&"file"===e.type; + }; + +// 文件预览 + p.prototype.preview=function(e){ + var t=this; + window.FileReader&&layui.each(t.chooseFiles,function(t,i){ + var n=new FileReader; + n.readAsDataURL(i), + n.onload=function(){e&&e(t,i,this.result)}} + ); + }; + +// 文件上传方法 + p.prototype.upload=function(e,i){ + var n,a=this,l=a.config,r=a.elemFile[0], + u=function(){ + var i=0,n=0,o=e||a.files||a.chooseFiles||r.files,u=function(){ + l.multiple&&i+n===a.fileLength&&"function"==typeof l.allDone&&l.allDone({total:a.fileLength,successful:i,aborted:n}); + }; + layui.each(o,function(e,o){var r=new FormData;r.append(l.field,o),layui.each(l.data,function(e,t){t="function"==typeof t?t():t,r.append(e,t)});var c={url:l.url,type:"post",data:r,contentType:!1,processData:!1,dataType:"json",headers:l.headers||{},success:function(t){i++,d(e,t),u()},error:function(){n++,a.msg("请求上传接口出现异常"),m(e),u()}}; + "function"==typeof l.progress&&(c.xhr=function(){var e=t.ajaxSettings.xhr();return e.upload.addEventListener("progress",function(e){if(e.lengthComputable){var t=Math.floor(e.loaded/e.total*100);l.progress(t,l.item[0],e)}}),e}),t.ajax(c)})}; + c=function(){ + var e=t("#"+f); + a.elemFile.parent().submit(), + clearInterval(p.timer), + p.timer=setInterval(function(){var t,i=e.contents().find("body");try{t=i.text()}catch(n){a.msg("获取上传后的响应信息出现异常"),clearInterval(p.timer),m()}t&&(clearInterval(p.timer),i.html(""),d(0,t))},30) + }; + } +}; + +// 上传成功后的处理 +d=function(e,t){ // 调用文件上传成功后的处理 + // 处理成功后的回调逻辑 +}; + +// 其他相关代码 +// ... diff --git a/web/lay/modules/util.js b/web/lay/modules/util.js index fdc1ec2..ea3e18f 100644 --- a/web/lay/modules/util.js +++ b/web/lay/modules/util.js @@ -1,2 +1,179 @@ /** layui-v2.5.6 MIT License By https://www.layui.com */ - ;layui.define("jquery",function(e){"use strict";var t=layui.$,i={fixbar:function(e){var i,n,a="layui-fixbar",o="layui-fixbar-top",r=t(document),l=t("body");e=t.extend({showHeight:200},e),e.bar1=e.bar1===!0?"":e.bar1,e.bar2=e.bar2===!0?"":e.bar2,e.bgcolor=e.bgcolor?"background-color:"+e.bgcolor:"";var c=[e.bar1,e.bar2,""],u=t(['
            ',e.bar1?'
          • '+c[0]+"
          • ":"",e.bar2?'
          • '+c[1]+"
          • ":"",'
          • '+c[2]+"
          • ","
          "].join("")),g=u.find("."+o),s=function(){var t=r.scrollTop();t>=e.showHeight?i||(g.show(),i=1):i&&(g.hide(),i=0)};t("."+a)[0]||("object"==typeof e.css&&u.css(e.css),l.append(u),s(),u.find("li").on("click",function(){var i=t(this),n=i.attr("lay-type");"top"===n&&t("html,body").animate({scrollTop:0},200),e.click&&e.click.call(this,n)}),r.on("scroll",function(){clearTimeout(n),n=setTimeout(function(){s()},100)}))},countdown:function(e,t,i){var n=this,a="function"==typeof t,o=new Date(e).getTime(),r=new Date(!t||a?(new Date).getTime():t).getTime(),l=o-r,c=[Math.floor(l/864e5),Math.floor(l/36e5)%24,Math.floor(l/6e4)%60,Math.floor(l/1e3)%60];a&&(i=t);var u=setTimeout(function(){n.countdown(e,r+1e3,i)},1e3);return i&&i(l>0?c:[0,0,0,0],t,u),l<=0&&clearTimeout(u),u},timeAgo:function(e,t){var i=this,n=[[],[]],a=(new Date).getTime()-new Date(e).getTime();return a>26784e5?(a=new Date(e),n[0][0]=i.digit(a.getFullYear(),4),n[0][1]=i.digit(a.getMonth()+1),n[0][2]=i.digit(a.getDate()),t||(n[1][0]=i.digit(a.getHours()),n[1][1]=i.digit(a.getMinutes()),n[1][2]=i.digit(a.getSeconds())),n[0].join("-")+" "+n[1].join(":")):a>=864e5?(a/1e3/60/60/24|0)+"天前":a>=36e5?(a/1e3/60/60|0)+"小时前":a>=18e4?(a/1e3/60|0)+"分钟前":a<0?"未来":"刚刚"},digit:function(e,t){var i="";e=String(e),t=t||2;for(var n=e.length;n/g,">").replace(/'/g,"'").replace(/"/g,""")},event:function(e,n,a){var o=t("body");return a=a||"click",n=i.event[e]=t.extend(!0,i.event[e],n)||{},i.event.UTIL_EVENT_CALLBACK=i.event.UTIL_EVENT_CALLBACK||{},o.off(a,"*["+e+"]",i.event.UTIL_EVENT_CALLBACK[e]),i.event.UTIL_EVENT_CALLBACK[e]=function(){var i=t(this),a=i.attr(e);"function"==typeof n[a]&&n[a].call(this,i)},o.on(a,"*["+e+"]",i.event.UTIL_EVENT_CALLBACK[e]),n}};!function(e,t,i){"$:nomunge";function n(){a=t[l](function(){o.each(function(){var t=e(this),i=t.width(),n=t.height(),a=e.data(this,u);(i!==a.w||n!==a.h)&&t.trigger(c,[a.w=i,a.h=n])}),n()},r[g])}var a,o=e([]),r=e.resize=e.extend(e.resize,{}),l="setTimeout",c="resize",u=c+"-special-event",g="delay",s="throttleWindow";r[g]=250,r[s]=!0,e.event.special[c]={setup:function(){if(!r[s]&&this[l])return!1;var t=e(this);o=o.add(t),e.data(this,u,{w:t.width(),h:t.height()}),1===o.length&&n()},teardown:function(){if(!r[s]&&this[l])return!1;var t=e(this);o=o.not(t),t.removeData(u),o.length||clearTimeout(a)},add:function(t){function n(t,n,o){var r=e(this),l=e.data(this,u)||{};l.w=n!==i?n:r.width(),l.h=o!==i?o:r.height(),a.apply(this,arguments)}if(!r[s]&&this[l])return!1;var a;return e.isFunction(t)?(a=t,n):(a=t.handler,void(t.handler=n))}}}(t,window),e("util",i)}); \ No newline at end of file +layui.define("jquery", function(e) { + "use strict"; + var t = layui.$, // 引入 jQuery 库 + i = { + // 固定操作栏(侧边固定按钮) + fixbar: function(e) { + var i, n, + a = "layui-fixbar", // 固定按钮的 CSS 类名 + o = "layui-fixbar-top", // 顶部按钮的 CSS 类名 + r = t(document), // 获取文档对象 + l = t("body"); // 获取页面的 body 元素 + // 配置项默认值 + e = t.extend({ showHeight: 200 }, e); + // 如果没有设置 bar1 和 bar2 的图标,默认使用图标 + e.bar1 = e.bar1 === !0 ? "" : e.bar1; + e.bar2 = e.bar2 === !0 ? "" : e.bar2; + // 设置背景颜色样式 + e.bgcolor = e.bgcolor ? "background-color:" + e.bgcolor : ""; + + var c = [e.bar1, e.bar2, ""]; + // 创建固定操作栏的 HTML 结构 + var u = t([ + '
            ', + e.bar1 ? '
          • '+c[0]+"
          • " : "", + e.bar2 ? '
          • '+c[1]+"
          • " : "", + '
          • '+c[2]+"
          • ", + "
          " + ].join("")); + + var g = u.find("."+o); + // 滚动事件:当页面滚动到指定高度时,显示操作栏 + var s = function() { + var t = r.scrollTop(); + t >= e.showHeight ? i || (g.show(), i = 1) : i && (g.hide(), i = 0); + }; + + // 如果操作栏未渲染,则将其添加到页面 + t("."+a)[0] || ( + "object" == typeof e.css && u.css(e.css), + l.append(u), + s(), + // 绑定点击事件 + u.find("li").on("click", function() { + var i = t(this), + n = i.attr("lay-type"); + "top" === n && t("html,body").animate({ scrollTop: 0 }, 200); + e.click && e.click.call(this, n); + }), + r.on("scroll", function() { + clearTimeout(n); + n = setTimeout(function() { + s(); + }, 100); + }) + ); + }, + + // 倒计时功能 + countdown: function(e, t, i) { + var n = this, + a = "function" == typeof t, // 如果 t 是函数 + o = new Date(e).getTime(), // 目标时间戳 + r = new Date(!t || a ? (new Date).getTime() : t).getTime(), // 当前时间戳 + l = o - r, // 计算时间差 + c = [ + Math.floor(l / 864e5), // 天数 + Math.floor(l / 36e5) % 24, // 小时 + Math.floor(l / 6e4) % 60, // 分钟 + Math.floor(l / 1e3) % 60 // 秒 + ]; + // 如果 t 是函数,则执行回调 + a && (i = t); + var u = setTimeout(function() { + n.countdown(e, r + 1e3, i); + }, 1e3); + // 回调函数,传递时间差和时间数组 + return i && i(l > 0 ? c : [0, 0, 0, 0], t, u), + l <= 0 && clearTimeout(u), // 当倒计时结束,清除定时器 + u; + }, + + // 将时间格式化为“XX时间前” + timeAgo: function(e, t) { + var i = this, + n = [[], []], + a = (new Date).getTime() - new Date(e).getTime(); // 计算当前时间与给定时间的差值 + if (a > 26784e5) { // 如果时间差超过 31 天,显示完整的时间 + a = new Date(e); + n[0][0] = i.digit(a.getFullYear(), 4); + n[0][1] = i.digit(a.getMonth() + 1); + n[0][2] = i.digit(a.getDate()); + t || (n[1][0] = i.digit(a.getHours()), n[1][1] = i.digit(a.getMinutes()), n[1][2] = i.digit(a.getSeconds())); + return n[0].join("-") + " " + n[1].join(":"); + } + if (a >= 864e5) return (a / 1e3 / 60 / 60 / 24 | 0) + "天前"; + if (a >= 36e5) return (a / 1e3 / 60 / 60 | 0) + "小时前"; + if (a >= 18e4) return (a / 1e3 / 60 | 0) + "分钟前"; + return a < 0 ? "未来" : "刚刚"; + }, + + // 数字补零 + digit: function(e, t) { + var i = ""; + e = String(e); + t = t || 2; + for (var n = e.length; n < t; n++) i += "0"; + return e < Math.pow(10, t) ? i + (0 | e) : e; + }, + + // 将时间转为指定格式字符串 + toDateString: function(e, t) { + var i = this, + n = new Date(e || new Date), + a = [i.digit(n.getFullYear(), 4), i.digit(n.getMonth() + 1), i.digit(n.getDate())], + o = [i.digit(n.getHours()), i.digit(n.getMinutes()), i.digit(n.getSeconds())]; + return t = t || "yyyy-MM-dd HH:mm:ss", + t.replace(/yyyy/g, a[0]) + .replace(/MM/g, a[1]) + .replace(/dd/g, a[2]) + .replace(/HH/g, o[0]) + .replace(/mm/g, o[1]) + .replace(/ss/g, o[2]); + }, + + // 转义 HTML 字符 + escape: function(e) { + return String(e || "").replace(/&(?!#?[a-zA-Z0-9]+;)/g, "&") + .replace(//g, ">") + .replace(/'/g, "'") + .replace(/"/g, """); + }, + + // 自定义事件绑定 + event: function(e, n, a) { + var o = t("body"); + return a = a || "click", // 默认事件类型为 "click" + n = i.event[e] = t.extend(!0, i.event[e], n) || {}, + i.event.UTIL_EVENT_CALLBACK = i.event.UTIL_EVENT_CALLBACK || {}, + o.off(a, "*[" + e + "]", i.event.UTIL_EVENT_CALLBACK[e]), + i.event.UTIL_EVENT_CALLBACK[e] = function() { + var i = t(this), + a = i.attr(e); + "function" == typeof n[a] && n[a].call(this, i); + }, + o.on(a, "*[" + e + "]", i.event.UTIL_EVENT_CALLBACK[e]), + n; + } + }; + + // 窗口大小变化事件(自适应布局) + !function(e, t, i) { + "$:nomunge"; + function n() { + a = t[l](function() { + o.each(function() { + var t = e(this), + i = t.width(), + n = t.height(), + a = e.data(this, u); + (i !== a.w || n !== a.h) && t.trigger(c, [a.w = i, a.h = n]); + }); + n(); + }, r[g]); + } + var a, + o = e([]), + r = e.resize = e.extend(e.resize, {}), + l = "setTimeout", + c = "resize", + u = c + "-special-event", + g = "delay", + s = "throttleWindow"; + r[g] = 250; + r[s] = !0; + e.event.special[c] = { + setup: function() { + if (!r[s] && this[l]) return !1; From 30b3c6038f0fdfa7591b3eb8952da1fd3658568d Mon Sep 17 00:00:00 2001 From: mt <3037188102@qq.com> Date: Wed, 18 Dec 2024 17:52:34 +0800 Subject: [PATCH 6/6] =?UTF-8?q?=E9=A9=AC=E8=85=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/css/file.css | 156 ++++++++++- web/css/layui.css | 417 +++++++++++++++++++++++++++- web/css/layui.mobile.css | 520 ++++++++++++++++++++++++++++++++++- web/css/login.css | 27 +- web/css/style.css | 569 +++++++++++---------------------------- web/error.jsp | 45 +++- web/filterLogin.jsp | 18 +- web/footer.jsp | 9 +- web/forget.jsp | 53 +++- web/index.jsp | 34 ++- web/layui.js | 319 +++++++++++++++++++++- web/login.jsp | 41 ++- web/message.jsp | 47 ++-- web/register.jsp | 56 +++- web/upload2.jsp | 12 + 15 files changed, 1841 insertions(+), 482 deletions(-) diff --git a/web/css/file.css b/web/css/file.css index 650d02d..b23eadd 100644 --- a/web/css/file.css +++ b/web/css/file.css @@ -1,54 +1,198 @@ -.progress{ - margin-top:2px; +/* +.progress类用于定义一个具有特定样式的进度条容器元素。以下是对该类中各个样式属性的详细注释: +*/ +.progress { + /* + 设置元素的上外边距为2像素,使该元素与上方元素在垂直方向上保持一定的间隔距离,增加页面布局的层次感。 + */ + margin-top: 2px; + /* + 定义元素的宽度为200像素,确定了进度条在水平方向上所占据的空间大小。 + */ width: 200px; + /* + 设置元素的高度为14像素,规定了进度条在垂直方向上的尺寸。 + */ height: 14px; + /* + 设置元素的下外边距为10像素,让该元素与下方元素在垂直方向上隔开一定距离,避免布局显得过于紧凑。 + */ margin-bottom: 10px; + /* + 将溢出的内容隐藏起来,防止内部元素超出该容器的范围而显示异常,确保进度条的外观整洁、规范。 + */ overflow: hidden; + /* + 设置元素的背景颜色为#f5f5f5,这是一种浅灰色,通常用于给元素提供一个较为柔和、中性的背景色调,符合常见的页面设计风格。 + */ background-color: #f5f5f5; + /* + 给元素添加圆角效果,这里将四个角的半径都设置为4像素,使元素看起来更加圆润、美观,避免生硬的直角边框,提升视觉效果。 + */ border-radius: 4px; - -webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,.1); - box-shadow: inset 0 1px 2px rgba(0,0,0,.1); + /* + 以下是针对WebKit浏览器(如Chrome、Safari等)添加的内部阴影效果,用于在元素内部营造出一种立体感。 + inset关键字表示这是内部阴影,0 1px 2px表示阴影在水平方向不偏移、垂直方向偏移1像素、模糊半径为2像素,rgba(0,0,0,.1)表示阴影的颜色为黑色且透明度为0.1,整体效果是给元素内部添加一个淡淡的阴影,增强层次感。 + */ + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0,.1); + /* + 与上面的-webkit-box-shadow类似,这是标准的CSS盒阴影属性,用于在不支持WebKit前缀的浏览器中也能实现相同的内部阴影效果,确保在不同浏览器下的视觉一致性。 + */ + box-shadow: inset 0 1px 2px rgba(0, 0, 0,.1); } -.progress-bar{ + +/* +.progress-bar类用于定义进度条内部的填充部分(表示进度的可视化部分)的样式,以下是对该类各样式属性的详细解释: +*/ +.progress-bar { + /* + 设置进度条填充部分的背景颜色为rgb(92, 184, 92),这是一种绿色调,通常用于表示进度的增长、完成等积极的含义,符合常见的进度条颜色使用习惯。 + */ background-color: rgb(92, 184, 92); + /* + 使用线性渐变来为背景添加一种纹理效果,使进度条看起来更有质感。 + linear-gradient函数用于创建线性渐变,45deg表示渐变的方向是从左下角到右上角呈45度角,后面跟着一系列的颜色停止点及透明度设置。 + 例如rgba(255, 255, 255, 0.14902) 25%, transparent 25%表示在渐变的25%位置处使用具有一定透明度的白色,然后在25%位置切换到透明色,以此类推,通过这样的设置形成一种斜向的条纹纹理效果,增强视觉上的丰富度。 + */ background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.14902) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.14902) 50%, rgba(255, 255, 255, 0.14902) 75%, transparent 75%, transparent); + /* + 定义背景图像(这里就是上面设置的线性渐变纹理)的尺寸大小为40px 40px,即宽度和高度都为40像素,控制纹理的疏密程度等外观效果。 + */ background-size: 40px 40px; + /* + 给进度条填充部分添加一个下边框的内部阴影效果,使进度条看起来有一定的凹陷感,增强立体感。 + rgba(0, 0, 0, 0.14902)表示阴影颜色为黑色且具有一定透明度,0px -1px 0px 0px表示阴影在水平方向不偏移、垂直方向向上偏移1px、模糊半径为0px、扩展半径为0px,inset表示这是内部阴影,整体效果是在进度条填充部分的底部添加一条很细的阴影线。 + */ box-shadow: rgba(0, 0, 0, 0.14902) 0px -1px 0px 0px inset; + /* + 设置元素的盒模型计算方式为 border-box,意味着元素的宽度和高度包含了边框(border)和内边距(padding)的尺寸,这样在设置元素的尺寸以及添加边框、内边距时,不会导致元素整体尺寸超出预期,方便进行布局控制。 + */ box-sizing: border-box; + /* + 设置元素内文本的颜色为白色(rgb(255, 255, 255)),通常进度条填充部分上可能会显示进度相关的文字信息(比如百分比等),这里将文字颜色设置为白色,使其在背景颜色上能够清晰显示。 + */ color: rgb(255, 255, 255); + /* + 将元素设置为块级元素,使其在页面布局中独占一行,并且可以设置宽度、高度、内外边距等属性,像一个独立的矩形区域一样进行布局排版,符合进度条填充部分作为一个独立的可视化组件的布局需求。 + */ display: block; + /* + 使元素向左浮动,让多个进度条(如果存在多个的情况)可以在同一行内水平排列,实现多个进度条并列展示的布局效果,常用于同时展示多个任务或阶段的进度情况。 + */ float: left; + /* + 设置元素内文本的字体大小为12像素,控制进度条上显示文字的大小,确保文字在进度条填充部分内的显示比例合适,清晰可读。 + */ font-size: 12px; - height: 20px; + /* + 设置元素的行高为20像素,行高通常会影响文本在垂直方向上的对齐方式以及元素的整体高度感受,这里设置合适的行高可以让文本在进度条填充部分内垂直居中显示,视觉效果更美观。 + */ line-height: 20px; + /* + 设置文本在元素内的水平对齐方式为居中对齐,使得进度条上显示的文字(如进度百分比等)能够在水平方向上处于进度条填充部分的中间位置,看起来更加整齐、规范。 + */ text-align: center; + /* + 设置过渡效果的延迟时间为0秒,即当触发过渡相关的变化(比如进度条宽度改变等情况)时,立即开始过渡动画,没有延迟。 + */ transition-delay: 0s; + /* + 设置过渡效果的持续时间为0.6秒,规定了从初始状态到目标状态(比如进度条宽度变化等过渡情况)整个过渡动画所花费的时间长度,通过合适的时长设置可以让过渡效果看起来更加自然流畅。 + */ transition-duration: 0.6s; + /* + 指定过渡效果应用的CSS属性为宽度(width),意味着只有当元素的宽度发生变化时,才会触发设置好的过渡动画效果,比如进度条宽度随进度增加而增长时会有平滑的过渡动画展示。 + */ transition-property: width; + /* + 设置过渡效果的时间函数为ease,这是一种常见的缓动函数,它使得过渡动画在开始时较慢,中间加速,结尾时再变慢,让过渡效果更加自然、柔和,符合人眼观察物体运动变化的习惯,提升视觉体验。 + */ transition-timing-function: ease; + /* + 设置元素的初始宽度为266.188像素,这个宽度值可能是根据具体的页面布局需求或者默认进度情况来设定的,后续可以通过JavaScript等方式根据实际进度动态改变该宽度值来展示进度变化效果。 + */ width: 266.188px; } +/* +.file类用于定义一个类似文件上传按钮或链接的样式,具有特定的外观和交互效果,以下是对该类各属性的注释: +*/ .file { + /* + 将元素设置为相对定位,相对定位的元素会相对于其原本在文档流中的位置进行定位调整,方便后续通过top、right、bottom、left等属性对其内部绝对定位的子元素(如下面的input元素)进行精准定位,同时又不会脱离文档流影响整体布局。 + */ position: relative; + /* + 将元素设置为内联块级元素,它既有内联元素的特点(可以与其他内联元素在同一行显示),又具备块级元素的一些特性(可以设置宽度、高度、内外边距等属性),这样可以方便地在文本流中按照需求排列,并且呈现出类似按钮或链接的外观样式。 + */ display: inline-block; + /* + 设置元素的背景颜色为#337ab7,这是一种蓝色调,常用于表示可操作、交互的元素背景色,给用户传达一种可以点击、进行操作的视觉暗示。 + */ background-color: #337ab7; + /* + 给元素添加圆角效果,将四个角的半径都设置为4像素,使其外观更加圆润、美观,符合现代网页设计中对于按钮等元素的常见样式风格,避免生硬的直角边框。 + */ border-radius: 4px; + /* + 设置元素的内边距,上下内边距为8像素,左右内边距为12像素,通过合适的内边距设置可以让元素内部的文本(如按钮上的文字说明等)与边框之间有一定的空白空间,看起来更加舒适、美观,也便于用户点击操作。 + */ padding: 8px 12px; + /* + 将溢出的内容隐藏起来,防止内部元素(比如可能存在的一些特殊样式的子元素等)超出该元素的范围而显示异常,确保元素外观的完整性和规范性。 + */ overflow: hidden; + /* + 设置元素内文本的颜色为白色(#FFFFFF),使得文本在背景颜色上能够清晰显示,提高可读性,符合常见的按钮或链接文本颜色与背景色搭配习惯,让用户能够轻易识别元素上的文字内容。 + */ color: #FFFFFF; + /* + 清除元素的文本装饰(比如默认的下划线等),如果该元素用于模拟按钮等交互功能,通常不需要文本有下划线等装饰,使其外观更简洁、干净,符合操作按钮的视觉风格。 + */ text-decoration: none; + /* + 设置文本的缩进为0,确保文本在元素内按照正常的对齐方式从左边开始显示,没有额外的缩进效果,保持文本显示的规范性。 + */ text-indent: 0; + /* + 设置元素的行高为20像素,与上面类似,合适的行高可以让文本在垂直方向上处于合适的位置,视觉效果更美观,并且方便用户查看和点击操作。 + */ line-height: 20px; } + +/* +.file类下的input子元素的样式定义,通常用于隐藏实际的文件选择输入框,通过其他样式和交互设计来模拟一个更美观、易用的文件上传操作界面,以下是对该子元素样式属性的注释: +*/ .file input { + /* + 将元素设置为绝对定位,绝对定位的元素会脱离文档流,根据最近的已定位祖先元素(这里就是上面设置为相对定位的.file元素)来进行定位,通过下面设置的right和top属性,可以将其精准定位到.file元素的右上角位置,方便实现隐藏式的文件选择功能(因为它覆盖在可视区域之外)。 + */ position: absolute; + /* + 设置元素的字体大小为100px,这个较大的字体大小可能是为了确保在某些特殊情况下(比如不同浏览器对文件选择输入框默认样式的处理差异等)能够完全覆盖住原有的输入框外观,实现更好的隐藏效果,具体使用场景和原因可能因整体页面设计需求而定。 + */ font-size: 100px; + /* + 将元素定位到其相对定位的父元素(.file元素)的右上角,right: 0表示距离父元素右侧边界为0像素,top: 0表示距离父元素顶部边界为0像素,这样就将其放置在了父元素的右上角位置,超出了可视范围,达到隐藏的目的。 + */ right: 0; top: 0; + /* + 设置元素的透明度为0,使其完全透明不可见,进一步隐藏实际的文件选择输入框,让用户只能通过模拟的按钮或链接外观(即.file元素呈现的样式)来触发文件选择操作,提升用户体验和页面美观度。 + */ opacity: 0; } + +/* +.file类元素在鼠标悬停时的样式变化,通过改变背景颜色来提供一种交互反馈效果,让用户知道该元素是可以进行操作的,以下是对应的注释: +*/ .file:hover { + /* + 当鼠标悬停在.file元素上时,改变其背景颜色为#598FBE,这是一种比原来稍深一点的蓝色调,通过这种颜色变化给用户一个视觉提示,表明该元素处于可交互状态,增强用户操作的直观性和交互性。 + */ background: #598FBE; + /* + 再次强调清除文本装饰(比如悬停时也不出现下划线等),保持元素外观的简洁性和一致性,符合操作按钮在不同状态下的视觉规范。 + */ text-decoration: none; } \ No newline at end of file diff --git a/web/css/layui.css b/web/css/layui.css index 57f0502..17fb6a9 100644 --- a/web/css/layui.css +++ b/web/css/layui.css @@ -1,2 +1,415 @@ -/** layui-v2.5.6 MIT License By https://www.layui.com */ - .layui-inline,img{display:inline-block;vertical-align:middle}h1,h2,h3,h4,h5,h6{font-weight:400}.layui-edge,.layui-header,.layui-inline,.layui-main{position:relative}.layui-body,.layui-edge,.layui-elip{overflow:hidden}.layui-btn,.layui-edge,.layui-inline,img{vertical-align:middle}.layui-btn,.layui-disabled,.layui-icon,.layui-unselect{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.layui-elip,.layui-form-checkbox span,.layui-form-pane .layui-form-label{text-overflow:ellipsis;white-space:nowrap}.layui-breadcrumb,.layui-tree-btnGroup{visibility:hidden}blockquote,body,button,dd,div,dl,dt,form,h1,h2,h3,h4,h5,h6,input,li,ol,p,pre,td,textarea,th,ul{margin:0;padding:0;-webkit-tap-highlight-color:rgba(0,0,0,0)}a:active,a:hover{outline:0}img{border:none}li{list-style:none}table{border-collapse:collapse;border-spacing:0}h4,h5,h6{font-size:100%}button,input,optgroup,option,select,textarea{font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;outline:0}pre{white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word}body{line-height:24px;font:14px Helvetica Neue,Helvetica,PingFang SC,Tahoma,Arial,sans-serif}hr{height:1px;margin:10px 0;border:0;clear:both}a{color:#333;text-decoration:none}a:hover{color:#777}a cite{font-style:normal;*cursor:pointer}.layui-border-box,.layui-border-box *{box-sizing:border-box}.layui-box,.layui-box *{box-sizing:content-box}.layui-clear{clear:both;*zoom:1}.layui-clear:after{content:'\20';clear:both;*zoom:1;display:block;height:0}.layui-inline{*display:inline;*zoom:1}.layui-edge{display:inline-block;width:0;height:0;border-width:6px;border-style:dashed;border-color:transparent}.layui-edge-top{top:-4px;border-bottom-color:#999;border-bottom-style:solid}.layui-edge-right{border-left-color:#999;border-left-style:solid}.layui-edge-bottom{top:2px;border-top-color:#999;border-top-style:solid}.layui-edge-left{border-right-color:#999;border-right-style:solid}.layui-disabled,.layui-disabled:hover{color:#9a9a9a!important;cursor:not-allowed!important}.layui-circle{border-radius:100%}.layui-show{display:block!important}.layui-hide{display:none!important}@font-face{font-family:layui-icon;src:url(../font/iconfont.eot?v=256);src:url(../font/iconfont.eot?v=256#iefix) format('embedded-opentype'),url(../font/iconfont.woff2?v=256) format('woff2'),url(../font/iconfont.woff?v=256) format('woff'),url(../font/iconfont.ttf?v=256) format('truetype'),url(../font/iconfont.svg?v=256#layui-icon) format('svg')}.layui-icon{font-family:layui-icon!important;font-size:16px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.layui-icon-reply-fill:before{content:"\e611"}.layui-icon-set-fill:before{content:"\e614"}.layui-icon-menu-fill:before{content:"\e60f"}.layui-icon-search:before{content:"\e615"}.layui-icon-share:before{content:"\e641"}.layui-icon-set-sm:before{content:"\e620"}.layui-icon-engine:before{content:"\e628"}.layui-icon-close:before{content:"\1006"}.layui-icon-close-fill:before{content:"\1007"}.layui-icon-chart-screen:before{content:"\e629"}.layui-icon-star:before{content:"\e600"}.layui-icon-circle-dot:before{content:"\e617"}.layui-icon-chat:before{content:"\e606"}.layui-icon-release:before{content:"\e609"}.layui-icon-list:before{content:"\e60a"}.layui-icon-chart:before{content:"\e62c"}.layui-icon-ok-circle:before{content:"\1005"}.layui-icon-layim-theme:before{content:"\e61b"}.layui-icon-table:before{content:"\e62d"}.layui-icon-right:before{content:"\e602"}.layui-icon-left:before{content:"\e603"}.layui-icon-cart-simple:before{content:"\e698"}.layui-icon-face-cry:before{content:"\e69c"}.layui-icon-face-smile:before{content:"\e6af"}.layui-icon-survey:before{content:"\e6b2"}.layui-icon-tree:before{content:"\e62e"}.layui-icon-ie:before{content:"\e7bb"}.layui-icon-upload-circle:before{content:"\e62f"}.layui-icon-add-circle:before{content:"\e61f"}.layui-icon-download-circle:before{content:"\e601"}.layui-icon-templeate-1:before{content:"\e630"}.layui-icon-util:before{content:"\e631"}.layui-icon-face-surprised:before{content:"\e664"}.layui-icon-edit:before{content:"\e642"}.layui-icon-speaker:before{content:"\e645"}.layui-icon-down:before{content:"\e61a"}.layui-icon-file:before{content:"\e621"}.layui-icon-layouts:before{content:"\e632"}.layui-icon-rate-half:before{content:"\e6c9"}.layui-icon-add-circle-fine:before{content:"\e608"}.layui-icon-prev-circle:before{content:"\e633"}.layui-icon-read:before{content:"\e705"}.layui-icon-404:before{content:"\e61c"}.layui-icon-carousel:before{content:"\e634"}.layui-icon-help:before{content:"\e607"}.layui-icon-code-circle:before{content:"\e635"}.layui-icon-windows:before{content:"\e67f"}.layui-icon-water:before{content:"\e636"}.layui-icon-username:before{content:"\e66f"}.layui-icon-find-fill:before{content:"\e670"}.layui-icon-about:before{content:"\e60b"}.layui-icon-location:before{content:"\e715"}.layui-icon-up:before{content:"\e619"}.layui-icon-pause:before{content:"\e651"}.layui-icon-date:before{content:"\e637"}.layui-icon-layim-uploadfile:before{content:"\e61d"}.layui-icon-delete:before{content:"\e640"}.layui-icon-play:before{content:"\e652"}.layui-icon-top:before{content:"\e604"}.layui-icon-firefox:before{content:"\e686"}.layui-icon-friends:before{content:"\e612"}.layui-icon-refresh-3:before{content:"\e9aa"}.layui-icon-ok:before{content:"\e605"}.layui-icon-layer:before{content:"\e638"}.layui-icon-face-smile-fine:before{content:"\e60c"}.layui-icon-dollar:before{content:"\e659"}.layui-icon-group:before{content:"\e613"}.layui-icon-layim-download:before{content:"\e61e"}.layui-icon-picture-fine:before{content:"\e60d"}.layui-icon-link:before{content:"\e64c"}.layui-icon-diamond:before{content:"\e735"}.layui-icon-log:before{content:"\e60e"}.layui-icon-key:before{content:"\e683"}.layui-icon-rate-solid:before{content:"\e67a"}.layui-icon-fonts-del:before{content:"\e64f"}.layui-icon-unlink:before{content:"\e64d"}.layui-icon-fonts-clear:before{content:"\e639"}.layui-icon-triangle-r:before{content:"\e623"}.layui-icon-circle:before{content:"\e63f"}.layui-icon-radio:before{content:"\e643"}.layui-icon-align-center:before{content:"\e647"}.layui-icon-align-right:before{content:"\e648"}.layui-icon-align-left:before{content:"\e649"}.layui-icon-loading-1:before{content:"\e63e"}.layui-icon-return:before{content:"\e65c"}.layui-icon-fonts-strong:before{content:"\e62b"}.layui-icon-upload:before{content:"\e67c"}.layui-icon-dialogue:before{content:"\e63a"}.layui-icon-video:before{content:"\e6ed"}.layui-icon-headset:before{content:"\e6fc"}.layui-icon-cellphone-fine:before{content:"\e63b"}.layui-icon-add-1:before{content:"\e654"}.layui-icon-face-smile-b:before{content:"\e650"}.layui-icon-fonts-html:before{content:"\e64b"}.layui-icon-screen-full:before{content:"\e622"}.layui-icon-form:before{content:"\e63c"}.layui-icon-cart:before{content:"\e657"}.layui-icon-camera-fill:before{content:"\e65d"}.layui-icon-tabs:before{content:"\e62a"}.layui-icon-heart-fill:before{content:"\e68f"}.layui-icon-fonts-code:before{content:"\e64e"}.layui-icon-ios:before{content:"\e680"}.layui-icon-at:before{content:"\e687"}.layui-icon-fire:before{content:"\e756"}.layui-icon-set:before{content:"\e716"}.layui-icon-fonts-u:before{content:"\e646"}.layui-icon-triangle-d:before{content:"\e625"}.layui-icon-tips:before{content:"\e702"}.layui-icon-picture:before{content:"\e64a"}.layui-icon-more-vertical:before{content:"\e671"}.layui-icon-bluetooth:before{content:"\e689"}.layui-icon-flag:before{content:"\e66c"}.layui-icon-loading:before{content:"\e63d"}.layui-icon-fonts-i:before{content:"\e644"}.layui-icon-refresh-1:before{content:"\e666"}.layui-icon-rmb:before{content:"\e65e"}.layui-icon-addition:before{content:"\e624"}.layui-icon-home:before{content:"\e68e"}.layui-icon-time:before{content:"\e68d"}.layui-icon-user:before{content:"\e770"}.layui-icon-notice:before{content:"\e667"}.layui-icon-chrome:before{content:"\e68a"}.layui-icon-edge:before{content:"\e68b"}.layui-icon-login-weibo:before{content:"\e675"}.layui-icon-voice:before{content:"\e688"}.layui-icon-upload-drag:before{content:"\e681"}.layui-icon-login-qq:before{content:"\e676"}.layui-icon-snowflake:before{content:"\e6b1"}.layui-icon-heart:before{content:"\e68c"}.layui-icon-logout:before{content:"\e682"}.layui-icon-file-b:before{content:"\e655"}.layui-icon-template:before{content:"\e663"}.layui-icon-transfer:before{content:"\e691"}.layui-icon-auz:before{content:"\e672"}.layui-icon-console:before{content:"\e665"}.layui-icon-app:before{content:"\e653"}.layui-icon-prev:before{content:"\e65a"}.layui-icon-website:before{content:"\e7ae"}.layui-icon-next:before{content:"\e65b"}.layui-icon-component:before{content:"\e857"}.layui-icon-android:before{content:"\e684"}.layui-icon-more:before{content:"\e65f"}.layui-icon-login-wechat:before{content:"\e677"}.layui-icon-shrink-right:before{content:"\e668"}.layui-icon-spread-left:before{content:"\e66b"}.layui-icon-camera:before{content:"\e660"}.layui-icon-note:before{content:"\e66e"}.layui-icon-refresh:before{content:"\e669"}.layui-icon-female:before{content:"\e661"}.layui-icon-male:before{content:"\e662"}.layui-icon-screen-restore:before{content:"\e758"}.layui-icon-password:before{content:"\e673"}.layui-icon-senior:before{content:"\e674"}.layui-icon-theme:before{content:"\e66a"}.layui-icon-tread:before{content:"\e6c5"}.layui-icon-praise:before{content:"\e6c6"}.layui-icon-star-fill:before{content:"\e658"}.layui-icon-rate:before{content:"\e67b"}.layui-icon-template-1:before{content:"\e656"}.layui-icon-vercode:before{content:"\e679"}.layui-icon-service:before{content:"\e626"}.layui-icon-cellphone:before{content:"\e678"}.layui-icon-print:before{content:"\e66d"}.layui-icon-cols:before{content:"\e610"}.layui-icon-wifi:before{content:"\e7e0"}.layui-icon-export:before{content:"\e67d"}.layui-icon-rss:before{content:"\e808"}.layui-icon-slider:before{content:"\e714"}.layui-icon-email:before{content:"\e618"}.layui-icon-subtraction:before{content:"\e67e"}.layui-icon-mike:before{content:"\e6dc"}.layui-icon-light:before{content:"\e748"}.layui-icon-gift:before{content:"\e627"}.layui-icon-mute:before{content:"\e685"}.layui-icon-reduce-circle:before{content:"\e616"}.layui-icon-music:before{content:"\e690"}.layui-main{width:1140px;margin:0 auto}.layui-header{z-index:1000;height:60px}.layui-header a:hover{transition:all .5s;-webkit-transition:all .5s}.layui-side{position:fixed;left:0;top:0;bottom:0;z-index:999;width:200px;overflow-x:hidden}.layui-side-scroll{position:relative;width:220px;height:100%;overflow-x:hidden}.layui-body{position:absolute;left:200px;right:0;top:0;bottom:0;z-index:998;width:auto;overflow-y:auto;box-sizing:border-box}.layui-layout-body{overflow:hidden}.layui-layout-admin .layui-header{background-color:#23262E}.layui-layout-admin .layui-side{top:60px;width:200px;overflow-x:hidden}.layui-layout-admin .layui-body{position:fixed;top:60px;bottom:44px}.layui-layout-admin .layui-main{width:auto;margin:0 15px}.layui-layout-admin .layui-footer{position:fixed;left:200px;right:0;bottom:0;height:44px;line-height:44px;padding:0 15px;background-color:#eee}.layui-layout-admin .layui-logo{position:absolute;left:0;top:0;width:200px;height:100%;line-height:60px;text-align:center;color:#009688;font-size:16px}.layui-layout-admin .layui-header .layui-nav{background:0 0}.layui-layout-left{position:absolute!important;left:200px;top:0}.layui-layout-right{position:absolute!important;right:0;top:0}.layui-container{position:relative;margin:0 auto;padding:0 15px;box-sizing:border-box}.layui-fluid{position:relative;margin:0 auto;padding:0 15px}.layui-row:after,.layui-row:before{content:'';display:block;clear:both}.layui-col-lg1,.layui-col-lg10,.layui-col-lg11,.layui-col-lg12,.layui-col-lg2,.layui-col-lg3,.layui-col-lg4,.layui-col-lg5,.layui-col-lg6,.layui-col-lg7,.layui-col-lg8,.layui-col-lg9,.layui-col-md1,.layui-col-md10,.layui-col-md11,.layui-col-md12,.layui-col-md2,.layui-col-md3,.layui-col-md4,.layui-col-md5,.layui-col-md6,.layui-col-md7,.layui-col-md8,.layui-col-md9,.layui-col-sm1,.layui-col-sm10,.layui-col-sm11,.layui-col-sm12,.layui-col-sm2,.layui-col-sm3,.layui-col-sm4,.layui-col-sm5,.layui-col-sm6,.layui-col-sm7,.layui-col-sm8,.layui-col-sm9,.layui-col-xs1,.layui-col-xs10,.layui-col-xs11,.layui-col-xs12,.layui-col-xs2,.layui-col-xs3,.layui-col-xs4,.layui-col-xs5,.layui-col-xs6,.layui-col-xs7,.layui-col-xs8,.layui-col-xs9{position:relative;display:block;box-sizing:border-box}.layui-col-xs1,.layui-col-xs10,.layui-col-xs11,.layui-col-xs12,.layui-col-xs2,.layui-col-xs3,.layui-col-xs4,.layui-col-xs5,.layui-col-xs6,.layui-col-xs7,.layui-col-xs8,.layui-col-xs9{float:left}.layui-col-xs1{width:8.33333333%}.layui-col-xs2{width:16.66666667%}.layui-col-xs3{width:25%}.layui-col-xs4{width:33.33333333%}.layui-col-xs5{width:41.66666667%}.layui-col-xs6{width:50%}.layui-col-xs7{width:58.33333333%}.layui-col-xs8{width:66.66666667%}.layui-col-xs9{width:75%}.layui-col-xs10{width:83.33333333%}.layui-col-xs11{width:91.66666667%}.layui-col-xs12{width:100%}.layui-col-xs-offset1{margin-left:8.33333333%}.layui-col-xs-offset2{margin-left:16.66666667%}.layui-col-xs-offset3{margin-left:25%}.layui-col-xs-offset4{margin-left:33.33333333%}.layui-col-xs-offset5{margin-left:41.66666667%}.layui-col-xs-offset6{margin-left:50%}.layui-col-xs-offset7{margin-left:58.33333333%}.layui-col-xs-offset8{margin-left:66.66666667%}.layui-col-xs-offset9{margin-left:75%}.layui-col-xs-offset10{margin-left:83.33333333%}.layui-col-xs-offset11{margin-left:91.66666667%}.layui-col-xs-offset12{margin-left:100%}@media screen and (max-width:768px){.layui-hide-xs{display:none!important}.layui-show-xs-block{display:block!important}.layui-show-xs-inline{display:inline!important}.layui-show-xs-inline-block{display:inline-block!important}}@media screen and (min-width:768px){.layui-container{width:750px}.layui-hide-sm{display:none!important}.layui-show-sm-block{display:block!important}.layui-show-sm-inline{display:inline!important}.layui-show-sm-inline-block{display:inline-block!important}.layui-col-sm1,.layui-col-sm10,.layui-col-sm11,.layui-col-sm12,.layui-col-sm2,.layui-col-sm3,.layui-col-sm4,.layui-col-sm5,.layui-col-sm6,.layui-col-sm7,.layui-col-sm8,.layui-col-sm9{float:left}.layui-col-sm1{width:8.33333333%}.layui-col-sm2{width:16.66666667%}.layui-col-sm3{width:25%}.layui-col-sm4{width:33.33333333%}.layui-col-sm5{width:41.66666667%}.layui-col-sm6{width:50%}.layui-col-sm7{width:58.33333333%}.layui-col-sm8{width:66.66666667%}.layui-col-sm9{width:75%}.layui-col-sm10{width:83.33333333%}.layui-col-sm11{width:91.66666667%}.layui-col-sm12{width:100%}.layui-col-sm-offset1{margin-left:8.33333333%}.layui-col-sm-offset2{margin-left:16.66666667%}.layui-col-sm-offset3{margin-left:25%}.layui-col-sm-offset4{margin-left:33.33333333%}.layui-col-sm-offset5{margin-left:41.66666667%}.layui-col-sm-offset6{margin-left:50%}.layui-col-sm-offset7{margin-left:58.33333333%}.layui-col-sm-offset8{margin-left:66.66666667%}.layui-col-sm-offset9{margin-left:75%}.layui-col-sm-offset10{margin-left:83.33333333%}.layui-col-sm-offset11{margin-left:91.66666667%}.layui-col-sm-offset12{margin-left:100%}}@media screen and (min-width:992px){.layui-container{width:970px}.layui-hide-md{display:none!important}.layui-show-md-block{display:block!important}.layui-show-md-inline{display:inline!important}.layui-show-md-inline-block{display:inline-block!important}.layui-col-md1,.layui-col-md10,.layui-col-md11,.layui-col-md12,.layui-col-md2,.layui-col-md3,.layui-col-md4,.layui-col-md5,.layui-col-md6,.layui-col-md7,.layui-col-md8,.layui-col-md9{float:left}.layui-col-md1{width:8.33333333%}.layui-col-md2{width:16.66666667%}.layui-col-md3{width:25%}.layui-col-md4{width:33.33333333%}.layui-col-md5{width:41.66666667%}.layui-col-md6{width:50%}.layui-col-md7{width:58.33333333%}.layui-col-md8{width:66.66666667%}.layui-col-md9{width:75%}.layui-col-md10{width:83.33333333%}.layui-col-md11{width:91.66666667%}.layui-col-md12{width:100%}.layui-col-md-offset1{margin-left:8.33333333%}.layui-col-md-offset2{margin-left:16.66666667%}.layui-col-md-offset3{margin-left:25%}.layui-col-md-offset4{margin-left:33.33333333%}.layui-col-md-offset5{margin-left:41.66666667%}.layui-col-md-offset6{margin-left:50%}.layui-col-md-offset7{margin-left:58.33333333%}.layui-col-md-offset8{margin-left:66.66666667%}.layui-col-md-offset9{margin-left:75%}.layui-col-md-offset10{margin-left:83.33333333%}.layui-col-md-offset11{margin-left:91.66666667%}.layui-col-md-offset12{margin-left:100%}}@media screen and (min-width:1200px){.layui-container{width:1170px}.layui-hide-lg{display:none!important}.layui-show-lg-block{display:block!important}.layui-show-lg-inline{display:inline!important}.layui-show-lg-inline-block{display:inline-block!important}.layui-col-lg1,.layui-col-lg10,.layui-col-lg11,.layui-col-lg12,.layui-col-lg2,.layui-col-lg3,.layui-col-lg4,.layui-col-lg5,.layui-col-lg6,.layui-col-lg7,.layui-col-lg8,.layui-col-lg9{float:left}.layui-col-lg1{width:8.33333333%}.layui-col-lg2{width:16.66666667%}.layui-col-lg3{width:25%}.layui-col-lg4{width:33.33333333%}.layui-col-lg5{width:41.66666667%}.layui-col-lg6{width:50%}.layui-col-lg7{width:58.33333333%}.layui-col-lg8{width:66.66666667%}.layui-col-lg9{width:75%}.layui-col-lg10{width:83.33333333%}.layui-col-lg11{width:91.66666667%}.layui-col-lg12{width:100%}.layui-col-lg-offset1{margin-left:8.33333333%}.layui-col-lg-offset2{margin-left:16.66666667%}.layui-col-lg-offset3{margin-left:25%}.layui-col-lg-offset4{margin-left:33.33333333%}.layui-col-lg-offset5{margin-left:41.66666667%}.layui-col-lg-offset6{margin-left:50%}.layui-col-lg-offset7{margin-left:58.33333333%}.layui-col-lg-offset8{margin-left:66.66666667%}.layui-col-lg-offset9{margin-left:75%}.layui-col-lg-offset10{margin-left:83.33333333%}.layui-col-lg-offset11{margin-left:91.66666667%}.layui-col-lg-offset12{margin-left:100%}}.layui-col-space1{margin:-.5px}.layui-col-space1>*{padding:.5px}.layui-col-space2{margin:-1px}.layui-col-space2>*{padding:1px}.layui-col-space4{margin:-2px}.layui-col-space4>*{padding:2px}.layui-col-space5{margin:-2.5px}.layui-col-space5>*{padding:2.5px}.layui-col-space6{margin:-3px}.layui-col-space6>*{padding:3px}.layui-col-space8{margin:-4px}.layui-col-space8>*{padding:4px}.layui-col-space10{margin:-5px}.layui-col-space10>*{padding:5px}.layui-col-space12{margin:-6px}.layui-col-space12>*{padding:6px}.layui-col-space14{margin:-7px}.layui-col-space14>*{padding:7px}.layui-col-space15{margin:-7.5px}.layui-col-space15>*{padding:7.5px}.layui-col-space16{margin:-8px}.layui-col-space16>*{padding:8px}.layui-col-space18{margin:-9px}.layui-col-space18>*{padding:9px}.layui-col-space20{margin:-10px}.layui-col-space20>*{padding:10px}.layui-col-space22{margin:-11px}.layui-col-space22>*{padding:11px}.layui-col-space24{margin:-12px}.layui-col-space24>*{padding:12px}.layui-col-space25{margin:-12.5px}.layui-col-space25>*{padding:12.5px}.layui-col-space26{margin:-13px}.layui-col-space26>*{padding:13px}.layui-col-space28{margin:-14px}.layui-col-space28>*{padding:14px}.layui-col-space30{margin:-15px}.layui-col-space30>*{padding:15px}.layui-btn,.layui-input,.layui-select,.layui-textarea,.layui-upload-button{outline:0;-webkit-appearance:none;transition:all .3s;-webkit-transition:all .3s;box-sizing:border-box}.layui-elem-quote{margin-bottom:10px;padding:15px;line-height:22px;border-left:5px solid #009688;border-radius:0 2px 2px 0;background-color:#f2f2f2}.layui-quote-nm{border-style:solid;border-width:1px 1px 1px 5px;background:0 0}.layui-elem-field{margin-bottom:10px;padding:0;border-width:1px;border-style:solid}.layui-elem-field legend{margin-left:20px;padding:0 10px;font-size:20px;font-weight:300}.layui-field-title{margin:10px 0 20px;border-width:1px 0 0}.layui-field-box{padding:10px 15px}.layui-field-title .layui-field-box{padding:10px 0}.layui-progress{position:relative;height:6px;border-radius:20px;background-color:#e2e2e2}.layui-progress-bar{position:absolute;left:0;top:0;width:0;max-width:100%;height:6px;border-radius:20px;text-align:right;background-color:#5FB878;transition:all .3s;-webkit-transition:all .3s}.layui-progress-big,.layui-progress-big .layui-progress-bar{height:18px;line-height:18px}.layui-progress-text{position:relative;top:-20px;line-height:18px;font-size:12px;color:#666}.layui-progress-big .layui-progress-text{position:static;padding:0 10px;color:#fff}.layui-collapse{border-width:1px;border-style:solid;border-radius:2px}.layui-colla-content,.layui-colla-item{border-top-width:1px;border-top-style:solid}.layui-colla-item:first-child{border-top:none}.layui-colla-title{position:relative;height:42px;line-height:42px;padding:0 15px 0 35px;color:#333;background-color:#f2f2f2;cursor:pointer;font-size:14px;overflow:hidden}.layui-colla-content{display:none;padding:10px 15px;line-height:22px;color:#666}.layui-colla-icon{position:absolute;left:15px;top:0;font-size:14px}.layui-card{margin-bottom:15px;border-radius:2px;background-color:#fff;box-shadow:0 1px 2px 0 rgba(0,0,0,.05)}.layui-card:last-child{margin-bottom:0}.layui-card-header{position:relative;height:42px;line-height:42px;padding:0 15px;border-bottom:1px solid #f6f6f6;color:#333;border-radius:2px 2px 0 0;font-size:14px}.layui-bg-black,.layui-bg-blue,.layui-bg-cyan,.layui-bg-green,.layui-bg-orange,.layui-bg-red{color:#fff!important}.layui-card-body{position:relative;padding:10px 15px;line-height:24px}.layui-card-body[pad15]{padding:15px}.layui-card-body[pad20]{padding:20px}.layui-card-body .layui-table{margin:5px 0}.layui-card .layui-tab{margin:0}.layui-panel-window{position:relative;padding:15px;border-radius:0;border-top:5px solid #E6E6E6;background-color:#fff}.layui-auxiliar-moving{position:fixed;left:0;right:0;top:0;bottom:0;width:100%;height:100%;background:0 0;z-index:9999999999}.layui-form-label,.layui-form-mid,.layui-form-select,.layui-input-block,.layui-input-inline,.layui-textarea{position:relative}.layui-bg-red{background-color:#FF5722!important}.layui-bg-orange{background-color:#FFB800!important}.layui-bg-green{background-color:#009688!important}.layui-bg-cyan{background-color:#2F4056!important}.layui-bg-blue{background-color:#1E9FFF!important}.layui-bg-black{background-color:#393D49!important}.layui-bg-gray{background-color:#eee!important;color:#666!important}.layui-badge-rim,.layui-colla-content,.layui-colla-item,.layui-collapse,.layui-elem-field,.layui-form-pane .layui-form-item[pane],.layui-form-pane .layui-form-label,.layui-input,.layui-layedit,.layui-layedit-tool,.layui-quote-nm,.layui-select,.layui-tab-bar,.layui-tab-card,.layui-tab-title,.layui-tab-title .layui-this:after,.layui-textarea{border-color:#e6e6e6}.layui-timeline-item:before,hr{background-color:#e6e6e6}.layui-text{line-height:22px;font-size:14px;color:#666}.layui-text h1,.layui-text h2,.layui-text h3{font-weight:500;color:#333}.layui-text h1{font-size:30px}.layui-text h2{font-size:24px}.layui-text h3{font-size:18px}.layui-text a:not(.layui-btn){color:#01AAED}.layui-text a:not(.layui-btn):hover{text-decoration:underline}.layui-text ul{padding:5px 0 5px 15px}.layui-text ul li{margin-top:5px;list-style-type:disc}.layui-text em,.layui-word-aux{color:#999!important;padding:0 5px!important}.layui-btn{display:inline-block;height:38px;line-height:38px;padding:0 18px;background-color:#009688;color:#fff;white-space:nowrap;text-align:center;font-size:14px;border:none;border-radius:2px;cursor:pointer}.layui-btn:hover{opacity:.8;filter:alpha(opacity=80);color:#fff}.layui-btn:active{opacity:1;filter:alpha(opacity=100)}.layui-btn+.layui-btn{margin-left:10px}.layui-btn-container{font-size:0}.layui-btn-container .layui-btn{margin-right:10px;margin-bottom:10px}.layui-btn-container .layui-btn+.layui-btn{margin-left:0}.layui-table .layui-btn-container .layui-btn{margin-bottom:9px}.layui-btn-radius{border-radius:100px}.layui-btn .layui-icon{margin-right:3px;font-size:18px;vertical-align:bottom;vertical-align:middle\9}.layui-btn-primary{border:1px solid #C9C9C9;background-color:#fff;color:#555}.layui-btn-primary:hover{border-color:#009688;color:#333}.layui-btn-normal{background-color:#1E9FFF}.layui-btn-warm{background-color:#FFB800}.layui-btn-danger{background-color:#FF5722}.layui-btn-checked{background-color:#5FB878}.layui-btn-disabled,.layui-btn-disabled:active,.layui-btn-disabled:hover{border:1px solid #e6e6e6;background-color:#FBFBFB;color:#C9C9C9;cursor:not-allowed;opacity:1}.layui-btn-lg{height:44px;line-height:44px;padding:0 25px;font-size:16px}.layui-btn-sm{height:30px;line-height:30px;padding:0 10px;font-size:12px}.layui-btn-sm i{font-size:16px!important}.layui-btn-xs{height:22px;line-height:22px;padding:0 5px;font-size:12px}.layui-btn-xs i{font-size:14px!important}.layui-btn-group{display:inline-block;vertical-align:middle;font-size:0}.layui-btn-group .layui-btn{margin-left:0!important;margin-right:0!important;border-left:1px solid rgba(255,255,255,.5);border-radius:0}.layui-btn-group .layui-btn-primary{border-left:none}.layui-btn-group .layui-btn-primary:hover{border-color:#C9C9C9;color:#009688}.layui-btn-group .layui-btn:first-child{border-left:none;border-radius:2px 0 0 2px}.layui-btn-group .layui-btn-primary:first-child{border-left:1px solid #c9c9c9}.layui-btn-group .layui-btn:last-child{border-radius:0 2px 2px 0}.layui-btn-group .layui-btn+.layui-btn{margin-left:0}.layui-btn-group+.layui-btn-group{margin-left:10px}.layui-btn-fluid{width:100%}.layui-input,.layui-select,.layui-textarea{height:38px;line-height:1.3;line-height:38px\9;border-width:1px;border-style:solid;background-color:#fff;border-radius:2px}.layui-input::-webkit-input-placeholder,.layui-select::-webkit-input-placeholder,.layui-textarea::-webkit-input-placeholder{line-height:1.3}.layui-input,.layui-textarea{display:block;width:100%;padding-left:10px}.layui-input:hover,.layui-textarea:hover{border-color:#D2D2D2!important}.layui-input:focus,.layui-textarea:focus{border-color:#C9C9C9!important}.layui-textarea{min-height:100px;height:auto;line-height:20px;padding:6px 10px;resize:vertical}.layui-select{padding:0 10px}.layui-form input[type=checkbox],.layui-form input[type=radio],.layui-form select{display:none}.layui-form [lay-ignore]{display:initial}.layui-form-item{margin-bottom:15px;clear:both;*zoom:1}.layui-form-item:after{content:'\20';clear:both;*zoom:1;display:block;height:0}.layui-form-label{float:left;display:block;padding:9px 15px;width:80px;font-weight:400;line-height:20px;text-align:right}.layui-form-label-col{display:block;float:none;padding:9px 0;line-height:20px;text-align:left}.layui-form-item .layui-inline{margin-bottom:5px;margin-right:10px}.layui-input-block{margin-left:110px;min-height:36px}.layui-input-inline{display:inline-block;vertical-align:middle}.layui-form-item .layui-input-inline{float:left;width:190px;margin-right:10px}.layui-form-text .layui-input-inline{width:auto}.layui-form-mid{float:left;display:block;padding:9px 0!important;line-height:20px;margin-right:10px}.layui-form-danger+.layui-form-select .layui-input,.layui-form-danger:focus{border-color:#FF5722!important}.layui-form-select .layui-input{padding-right:30px;cursor:pointer}.layui-form-select .layui-edge{position:absolute;right:10px;top:50%;margin-top:-3px;cursor:pointer;border-width:6px;border-top-color:#c2c2c2;border-top-style:solid;transition:all .3s;-webkit-transition:all .3s}.layui-form-select dl{display:none;position:absolute;left:0;top:42px;padding:5px 0;z-index:899;min-width:100%;border:1px solid #d2d2d2;max-height:300px;overflow-y:auto;background-color:#fff;border-radius:2px;box-shadow:0 2px 4px rgba(0,0,0,.12);box-sizing:border-box}.layui-form-select dl dd,.layui-form-select dl dt{padding:0 10px;line-height:36px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.layui-form-select dl dt{font-size:12px;color:#999}.layui-form-select dl dd{cursor:pointer}.layui-form-select dl dd:hover{background-color:#f2f2f2;-webkit-transition:.5s all;transition:.5s all}.layui-form-select .layui-select-group dd{padding-left:20px}.layui-form-select dl dd.layui-select-tips{padding-left:10px!important;color:#999}.layui-form-select dl dd.layui-this{background-color:#5FB878;color:#fff}.layui-form-checkbox,.layui-form-select dl dd.layui-disabled{background-color:#fff}.layui-form-selected dl{display:block}.layui-form-checkbox,.layui-form-checkbox *,.layui-form-switch{display:inline-block;vertical-align:middle}.layui-form-selected .layui-edge{margin-top:-9px;-webkit-transform:rotate(180deg);transform:rotate(180deg);margin-top:-3px\9}:root .layui-form-selected .layui-edge{margin-top:-9px\0/IE9}.layui-form-selectup dl{top:auto;bottom:42px}.layui-select-none{margin:5px 0;text-align:center;color:#999}.layui-select-disabled .layui-disabled{border-color:#eee!important}.layui-select-disabled .layui-edge{border-top-color:#d2d2d2}.layui-form-checkbox{position:relative;height:30px;line-height:30px;margin-right:10px;padding-right:30px;cursor:pointer;font-size:0;-webkit-transition:.1s linear;transition:.1s linear;box-sizing:border-box}.layui-form-checkbox span{padding:0 10px;height:100%;font-size:14px;border-radius:2px 0 0 2px;background-color:#d2d2d2;color:#fff;overflow:hidden}.layui-form-checkbox:hover span{background-color:#c2c2c2}.layui-form-checkbox i{position:absolute;right:0;top:0;width:30px;height:28px;border:1px solid #d2d2d2;border-left:none;border-radius:0 2px 2px 0;color:#fff;font-size:20px;text-align:center}.layui-form-checkbox:hover i{border-color:#c2c2c2;color:#c2c2c2}.layui-form-checked,.layui-form-checked:hover{border-color:#5FB878}.layui-form-checked span,.layui-form-checked:hover span{background-color:#5FB878}.layui-form-checked i,.layui-form-checked:hover i{color:#5FB878}.layui-form-item .layui-form-checkbox{margin-top:4px}.layui-form-checkbox[lay-skin=primary]{height:auto!important;line-height:normal!important;min-width:18px;min-height:18px;border:none!important;margin-right:0;padding-left:28px;padding-right:0;background:0 0}.layui-form-checkbox[lay-skin=primary] span{padding-left:0;padding-right:15px;line-height:18px;background:0 0;color:#666}.layui-form-checkbox[lay-skin=primary] i{right:auto;left:0;width:16px;height:16px;line-height:16px;border:1px solid #d2d2d2;font-size:12px;border-radius:2px;background-color:#fff;-webkit-transition:.1s linear;transition:.1s linear}.layui-form-checkbox[lay-skin=primary]:hover i{border-color:#5FB878;color:#fff}.layui-form-checked[lay-skin=primary] i{border-color:#5FB878!important;background-color:#5FB878;color:#fff}.layui-checkbox-disbaled[lay-skin=primary] span{background:0 0!important;color:#c2c2c2}.layui-checkbox-disbaled[lay-skin=primary]:hover i{border-color:#d2d2d2}.layui-form-item .layui-form-checkbox[lay-skin=primary]{margin-top:10px}.layui-form-switch{position:relative;height:22px;line-height:22px;min-width:35px;padding:0 5px;margin-top:8px;border:1px solid #d2d2d2;border-radius:20px;cursor:pointer;background-color:#fff;-webkit-transition:.1s linear;transition:.1s linear}.layui-form-switch i{position:absolute;left:5px;top:3px;width:16px;height:16px;border-radius:20px;background-color:#d2d2d2;-webkit-transition:.1s linear;transition:.1s linear}.layui-form-switch em{position:relative;top:0;width:25px;margin-left:21px;padding:0!important;text-align:center!important;color:#999!important;font-style:normal!important;font-size:12px}.layui-form-onswitch{border-color:#5FB878;background-color:#5FB878}.layui-checkbox-disbaled,.layui-checkbox-disbaled i{border-color:#e2e2e2!important}.layui-form-onswitch i{left:100%;margin-left:-21px;background-color:#fff}.layui-form-onswitch em{margin-left:5px;margin-right:21px;color:#fff!important}.layui-checkbox-disbaled span{background-color:#e2e2e2!important}.layui-checkbox-disbaled:hover i{color:#fff!important}[lay-radio]{display:none}.layui-form-radio,.layui-form-radio *{display:inline-block;vertical-align:middle}.layui-form-radio{line-height:28px;margin:6px 10px 0 0;padding-right:10px;cursor:pointer;font-size:0}.layui-form-radio *{font-size:14px}.layui-form-radio>i{margin-right:8px;font-size:22px;color:#777777}.layui-form-radio>i:hover,.layui-form-radioed>i{color:#2b3a49}.layui-radio-disbaled>i{color:#e2e2e2!important}.layui-form-pane .layui-form-label{width:110px;padding:8px 15px;height:38px;line-height:20px;border-width:1px;border-style:solid;border-radius:2px 0 0 2px;text-align:center;background-color:#FBFBFB;overflow:hidden;box-sizing:border-box}.layui-form-pane .layui-input-inline{margin-left:-1px}.layui-form-pane .layui-input-block{margin-left:110px;left:-1px}.layui-form-pane .layui-input{border-radius:0 2px 2px 0}.layui-form-pane .layui-form-text .layui-form-label{float:none;width:100%;border-radius:2px;box-sizing:border-box;text-align:left}.layui-form-pane .layui-form-text .layui-input-inline{display:block;margin:0;top:-1px;clear:both}.layui-form-pane .layui-form-text .layui-input-block{margin:0;left:0;top:-1px}.layui-form-pane .layui-form-text .layui-textarea{min-height:100px;border-radius:0 0 2px 2px}.layui-form-pane .layui-form-checkbox{margin:4px 0 4px 10px}.layui-form-pane .layui-form-radio,.layui-form-pane .layui-form-switch{margin-top:6px;margin-left:10px}.layui-form-pane .layui-form-item[pane]{position:relative;border-width:1px;border-style:solid}.layui-form-pane .layui-form-item[pane] .layui-form-label{position:absolute;left:0;top:0;height:100%;border-width:0 1px 0 0}.layui-form-pane .layui-form-item[pane] .layui-input-inline{margin-left:110px}@media screen and (max-width:450px){.layui-form-item .layui-form-label{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.layui-form-item .layui-inline{display:block;margin-right:0;margin-bottom:20px;clear:both}.layui-form-item .layui-inline:after{content:'\20';clear:both;display:block;height:0}.layui-form-item .layui-input-inline{display:block;float:none;left:-3px;width:auto;margin:0 0 10px 112px}.layui-form-item .layui-input-inline+.layui-form-mid{margin-left:110px;top:-5px;padding:0}.layui-form-item .layui-form-checkbox{margin-right:5px;margin-bottom:5px}}.layui-layedit{border-width:1px;border-style:solid;border-radius:2px}.layui-layedit-tool{padding:3px 5px;border-bottom-width:1px;border-bottom-style:solid;font-size:0}.layedit-tool-fixed{position:fixed;top:0;border-top:1px solid #e2e2e2}.layui-layedit-tool .layedit-tool-mid,.layui-layedit-tool .layui-icon{display:inline-block;vertical-align:middle;text-align:center;font-size:14px}.layui-layedit-tool .layui-icon{position:relative;width:32px;height:30px;line-height:30px;margin:3px 5px;color:#777;cursor:pointer;border-radius:2px}.layui-layedit-tool .layui-icon:hover{color:#393D49}.layui-layedit-tool .layui-icon:active{color:#000}.layui-layedit-tool .layedit-tool-active{background-color:#e2e2e2;color:#000}.layui-layedit-tool .layui-disabled,.layui-layedit-tool .layui-disabled:hover{color:#d2d2d2;cursor:not-allowed}.layui-layedit-tool .layedit-tool-mid{width:1px;height:18px;margin:0 10px;background-color:#d2d2d2}.layedit-tool-html{width:50px!important;font-size:30px!important}.layedit-tool-b,.layedit-tool-code,.layedit-tool-help{font-size:16px!important}.layedit-tool-d,.layedit-tool-face,.layedit-tool-image,.layedit-tool-unlink{font-size:18px!important}.layedit-tool-image input{position:absolute;font-size:0;left:0;top:0;width:100%;height:100%;opacity:.01;filter:Alpha(opacity=1);cursor:pointer}.layui-layedit-iframe iframe{display:block;width:100%}#LAY_layedit_code{overflow:hidden}.layui-laypage{display:inline-block;*display:inline;*zoom:1;vertical-align:middle;margin:10px 0;font-size:0}.layui-laypage>a:first-child,.layui-laypage>a:first-child em{border-radius:2px 0 0 2px}.layui-laypage>a:last-child,.layui-laypage>a:last-child em{border-radius:0 2px 2px 0}.layui-laypage>:first-child{margin-left:0!important}.layui-laypage>:last-child{margin-right:0!important}.layui-laypage a,.layui-laypage button,.layui-laypage input,.layui-laypage select,.layui-laypage span{border:1px solid #e2e2e2}.layui-laypage a,.layui-laypage span{display:inline-block;*display:inline;*zoom:1;vertical-align:middle;padding:0 15px;height:28px;line-height:28px;margin:0 -1px 5px 0;background-color:#fff;color:#333;font-size:12px}.layui-flow-more a *,.layui-laypage input,.layui-table-view select[lay-ignore]{display:inline-block}.layui-laypage a:hover{color:#009688}.layui-laypage em{font-style:normal}.layui-laypage .layui-laypage-spr{color:#999;font-weight:700}.layui-laypage a{text-decoration:none}.layui-laypage .layui-laypage-curr{position:relative}.layui-laypage .layui-laypage-curr em{position:relative;color:#fff}.layui-laypage .layui-laypage-curr .layui-laypage-em{position:absolute;left:-1px;top:-1px;padding:1px;width:100%;height:100%;background-color:#009688}.layui-laypage-em{border-radius:2px}.layui-laypage-next em,.layui-laypage-prev em{font-family:Sim sun;font-size:16px}.layui-laypage .layui-laypage-count,.layui-laypage .layui-laypage-limits,.layui-laypage .layui-laypage-refresh,.layui-laypage .layui-laypage-skip{margin-left:10px;margin-right:10px;padding:0;border:none}.layui-laypage .layui-laypage-limits,.layui-laypage .layui-laypage-refresh{vertical-align:top}.layui-laypage .layui-laypage-refresh i{font-size:18px;cursor:pointer}.layui-laypage select{height:22px;padding:3px;border-radius:2px;cursor:pointer}.layui-laypage .layui-laypage-skip{height:30px;line-height:30px;color:#999}.layui-laypage button,.layui-laypage input{height:30px;line-height:30px;border-radius:2px;vertical-align:top;background-color:#fff;box-sizing:border-box}.layui-laypage input{width:40px;margin:0 10px;padding:0 3px;text-align:center}.layui-laypage input:focus,.layui-laypage select:focus{border-color:#009688!important}.layui-laypage button{margin-left:10px;padding:0 10px;cursor:pointer}.layui-table,.layui-table-view{margin:10px 0}.layui-flow-more{margin:10px 0;text-align:center;color:#999;font-size:14px}.layui-flow-more a{height:32px;line-height:32px}.layui-flow-more a *{vertical-align:top}.layui-flow-more a cite{padding:0 20px;border-radius:3px;background-color:#eee;color:#333;font-style:normal}.layui-flow-more a cite:hover{opacity:.8}.layui-flow-more a i{font-size:30px;color:#737383}.layui-table{width:100%;background-color:#fff;color:#666}.layui-table tr{transition:all .3s;-webkit-transition:all .3s}.layui-table th{text-align:left;font-weight:400}.layui-table tbody tr:hover,.layui-table thead tr,.layui-table-click,.layui-table-header,.layui-table-hover,.layui-table-mend,.layui-table-patch,.layui-table-tool,.layui-table-total,.layui-table-total tr,.layui-table[lay-even] tr:nth-child(even){background-color:#f2f2f2}.layui-table td,.layui-table th,.layui-table-col-set,.layui-table-fixed-r,.layui-table-grid-down,.layui-table-header,.layui-table-page,.layui-table-tips-main,.layui-table-tool,.layui-table-total,.layui-table-view,.layui-table[lay-skin=line],.layui-table[lay-skin=row]{border-width:1px;border-style:solid;border-color:#e6e6e6}.layui-table td,.layui-table th{position:relative;padding:9px 15px;min-height:20px;line-height:20px;font-size:14px}.layui-table[lay-skin=line] td,.layui-table[lay-skin=line] th{border-width:0 0 1px}.layui-table[lay-skin=row] td,.layui-table[lay-skin=row] th{border-width:0 1px 0 0}.layui-table[lay-skin=nob] td,.layui-table[lay-skin=nob] th{border:none}.layui-table img{max-width:100px}.layui-table[lay-size=lg] td,.layui-table[lay-size=lg] th{padding:15px 30px}.layui-table-view .layui-table[lay-size=lg] .layui-table-cell{height:40px;line-height:40px}.layui-table[lay-size=sm] td,.layui-table[lay-size=sm] th{font-size:12px;padding:5px 10px}.layui-table-view .layui-table[lay-size=sm] .layui-table-cell{height:20px;line-height:20px}.layui-table[lay-data]{display:none}.layui-table-box{position:relative;overflow:hidden}.layui-table-view .layui-table{position:relative;width:auto;margin:0}.layui-table-view .layui-table[lay-skin=line]{border-width:0 1px 0 0}.layui-table-view .layui-table[lay-skin=row]{border-width:0 0 1px}.layui-table-view .layui-table td,.layui-table-view .layui-table th{padding:5px 0;border-top:none;border-left:none}.layui-table-view .layui-table th.layui-unselect .layui-table-cell span{cursor:pointer}.layui-table-view .layui-table td{cursor:default}.layui-table-view .layui-table td[data-edit=text]{cursor:text}.layui-table-view .layui-form-checkbox[lay-skin=primary] i{width:18px;height:18px}.layui-table-view .layui-form-radio{line-height:0;padding:0}.layui-table-view .layui-form-radio>i{margin:0;font-size:20px}.layui-table-init{position:absolute;left:0;top:0;width:100%;height:100%;text-align:center;z-index:110}.layui-table-init .layui-icon{position:absolute;left:50%;top:50%;margin:-15px 0 0 -15px;font-size:30px;color:#c2c2c2}.layui-table-header{border-width:0 0 1px;overflow:hidden}.layui-table-header .layui-table{margin-bottom:-1px}.layui-table-tool .layui-inline[lay-event]{position:relative;width:26px;height:26px;padding:5px;line-height:16px;margin-right:10px;text-align:center;color:#333;border:1px solid #ccc;cursor:pointer;-webkit-transition:.5s all;transition:.5s all}.layui-table-tool .layui-inline[lay-event]:hover{border:1px solid #999}.layui-table-tool-temp{padding-right:120px}.layui-table-tool-self{position:absolute;right:17px;top:10px}.layui-table-tool .layui-table-tool-self .layui-inline[lay-event]{margin:0 0 0 10px}.layui-table-tool-panel{position:absolute;top:29px;left:-1px;padding:5px 0;min-width:150px;min-height:40px;border:1px solid #d2d2d2;text-align:left;overflow-y:auto;background-color:#fff;box-shadow:0 2px 4px rgba(0,0,0,.12)}.layui-table-cell,.layui-table-tool-panel li{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.layui-table-tool-panel li{padding:0 10px;line-height:30px;-webkit-transition:.5s all;transition:.5s all}.layui-table-tool-panel li .layui-form-checkbox[lay-skin=primary]{width:100%;padding-left:28px}.layui-table-tool-panel li:hover{background-color:#f2f2f2}.layui-table-tool-panel li .layui-form-checkbox[lay-skin=primary] i{position:absolute;left:0;top:0}.layui-table-tool-panel li .layui-form-checkbox[lay-skin=primary] span{padding:0}.layui-table-tool .layui-table-tool-self .layui-table-tool-panel{left:auto;right:-1px}.layui-table-col-set{position:absolute;right:0;top:0;width:20px;height:100%;border-width:0 0 0 1px;background-color:#fff}.layui-table-sort{width:10px;height:20px;margin-left:5px;cursor:pointer!important}.layui-table-sort .layui-edge{position:absolute;left:5px;border-width:5px}.layui-table-sort .layui-table-sort-asc{top:3px;border-top:none;border-bottom-style:solid;border-bottom-color:#b2b2b2}.layui-table-sort .layui-table-sort-asc:hover{border-bottom-color:#666}.layui-table-sort .layui-table-sort-desc{bottom:5px;border-bottom:none;border-top-style:solid;border-top-color:#b2b2b2}.layui-table-sort .layui-table-sort-desc:hover{border-top-color:#666}.layui-table-sort[lay-sort=asc] .layui-table-sort-asc{border-bottom-color:#000}.layui-table-sort[lay-sort=desc] .layui-table-sort-desc{border-top-color:#000}.layui-table-cell{height:28px;line-height:28px;padding:0 15px;position:relative;box-sizing:border-box}.layui-table-cell .layui-form-checkbox[lay-skin=primary]{top:-1px;padding:0}.layui-table-cell .layui-table-link{color:#01AAED}.laytable-cell-checkbox,.laytable-cell-numbers,.laytable-cell-radio,.laytable-cell-space{padding:0;text-align:center}.layui-table-body{position:relative;overflow:auto;margin-right:-1px;margin-bottom:-1px}.layui-table-body .layui-none{line-height:26px;padding:15px;text-align:center;color:#999}.layui-table-fixed{position:absolute;left:0;top:0;z-index:101}.layui-table-fixed .layui-table-body{overflow:hidden}.layui-table-fixed-l{box-shadow:0 -1px 8px rgba(0,0,0,.08)}.layui-table-fixed-r{left:auto;right:-1px;border-width:0 0 0 1px;box-shadow:-1px 0 8px rgba(0,0,0,.08)}.layui-table-fixed-r .layui-table-header{position:relative;overflow:visible}.layui-table-mend{position:absolute;right:-49px;top:0;height:100%;width:50px}.layui-table-tool{position:relative;z-index:890;width:100%;min-height:50px;line-height:30px;padding:10px 15px;border-width:0 0 1px}.layui-table-tool .layui-btn-container{margin-bottom:-10px}.layui-table-page,.layui-table-total{border-width:1px 0 0;margin-bottom:-1px;overflow:hidden}.layui-table-page{position:relative;width:100%;padding:7px 7px 0;height:41px;font-size:12px;white-space:nowrap}.layui-table-page>div{height:26px}.layui-table-page .layui-laypage{margin:0}.layui-table-page .layui-laypage a,.layui-table-page .layui-laypage span{height:26px;line-height:26px;margin-bottom:10px;border:none;background:0 0}.layui-table-page .layui-laypage a,.layui-table-page .layui-laypage span.layui-laypage-curr{padding:0 12px}.layui-table-page .layui-laypage span{margin-left:0;padding:0}.layui-table-page .layui-laypage .layui-laypage-prev{margin-left:-7px!important}.layui-table-page .layui-laypage .layui-laypage-curr .layui-laypage-em{left:0;top:0;padding:0}.layui-table-page .layui-laypage button,.layui-table-page .layui-laypage input{height:26px;line-height:26px}.layui-table-page .layui-laypage input{width:40px}.layui-table-page .layui-laypage button{padding:0 10px}.layui-table-page select{height:18px}.layui-table-patch .layui-table-cell{padding:0;width:30px}.layui-table-edit{position:absolute;left:0;top:0;width:100%;height:100%;padding:0 14px 1px;border-radius:0;box-shadow:1px 1px 20px rgba(0,0,0,.15)}.layui-table-edit:focus{border-color:#5FB878!important}select.layui-table-edit{padding:0 0 0 10px;border-color:#C9C9C9}.layui-table-view .layui-form-checkbox,.layui-table-view .layui-form-radio,.layui-table-view .layui-form-switch{top:0;margin:0;box-sizing:content-box}.layui-table-view .layui-form-checkbox{top:-1px;height:26px;line-height:26px}.layui-table-view .layui-form-checkbox i{height:26px}.layui-table-grid .layui-table-cell{overflow:visible}.layui-table-grid-down{position:absolute;top:0;right:0;width:26px;height:100%;padding:5px 0;border-width:0 0 0 1px;text-align:center;background-color:#fff;color:#999;cursor:pointer}.layui-table-grid-down .layui-icon{position:absolute;top:50%;left:50%;margin:-8px 0 0 -8px}.layui-table-grid-down:hover{background-color:#fbfbfb}body .layui-table-tips .layui-layer-content{background:0 0;padding:0;box-shadow:0 1px 6px rgba(0,0,0,.12)}.layui-table-tips-main{margin:-44px 0 0 -1px;max-height:150px;padding:8px 15px;font-size:14px;overflow-y:scroll;background-color:#fff;color:#666}.layui-table-tips-c{position:absolute;right:-3px;top:-13px;width:20px;height:20px;padding:3px;cursor:pointer;background-color:#666;border-radius:50%;color:#fff}.layui-table-tips-c:hover{background-color:#777}.layui-table-tips-c:before{position:relative;right:-2px}.layui-upload-file{display:none!important;opacity:.01;filter:Alpha(opacity=1)}.layui-upload-drag,.layui-upload-form,.layui-upload-wrap{display:inline-block}.layui-upload-list{margin:10px 0}.layui-upload-choose{padding:0 10px;color:#999}.layui-upload-drag{position:relative;padding:30px;border:1px dashed #e2e2e2;background-color:#fff;text-align:center;cursor:pointer;color:#999}.layui-upload-drag .layui-icon{font-size:50px;color:#009688}.layui-upload-drag[lay-over]{border-color:#009688}.layui-upload-iframe{position:absolute;width:0;height:0;border:0;visibility:hidden}.layui-upload-wrap{position:relative;vertical-align:middle}.layui-upload-wrap .layui-upload-file{display:block!important;position:absolute;left:0;top:0;z-index:10;font-size:100px;width:100%;height:100%;opacity:.01;filter:Alpha(opacity=1);cursor:pointer}.layui-transfer-active,.layui-transfer-box{display:inline-block;vertical-align:middle}.layui-transfer-box,.layui-transfer-header,.layui-transfer-search{border-width:0;border-style:solid;border-color:#e6e6e6}.layui-transfer-box{position:relative;border-width:1px;width:200px;height:360px;border-radius:2px;background-color:#fff}.layui-transfer-box .layui-form-checkbox{width:100%;margin:0!important}.layui-transfer-header{height:38px;line-height:38px;padding:0 10px;border-bottom-width:1px}.layui-transfer-search{position:relative;padding:10px;border-bottom-width:1px}.layui-transfer-search .layui-input{height:32px;padding-left:30px;font-size:12px}.layui-transfer-search .layui-icon-search{position:absolute;left:20px;top:50%;margin-top:-8px;color:#666}.layui-transfer-active{margin:0 15px}.layui-transfer-active .layui-btn{display:block;margin:0;padding:0 15px;background-color:#5FB878;border-color:#5FB878;color:#fff}.layui-transfer-active .layui-btn-disabled{background-color:#FBFBFB;border-color:#e6e6e6;color:#C9C9C9}.layui-transfer-active .layui-btn:first-child{margin-bottom:15px}.layui-transfer-active .layui-btn .layui-icon{margin:0;font-size:14px!important}.layui-transfer-data{padding:5px 0;overflow:auto}.layui-transfer-data li{height:32px;line-height:32px;padding:0 10px}.layui-transfer-data li:hover{background-color:#f2f2f2;transition:.5s all}.layui-transfer-data .layui-none{padding:15px 10px;text-align:center;color:#999}.layui-nav{position:relative;padding:0 20px;background-color:#393D49;color:#fff;border-radius:2px;font-size:0;box-sizing:border-box}.layui-nav *{font-size:14px}.layui-nav .layui-nav-item{position:relative;display:inline-block;*display:inline;*zoom:1;vertical-align:middle;line-height:60px}.layui-nav .layui-nav-item a{display:block;padding:0 20px;color:#fff;color:rgba(255,255,255,.7);transition:all .3s;-webkit-transition:all .3s}.layui-nav .layui-this:after,.layui-nav-bar,.layui-nav-tree .layui-nav-itemed:after{position:absolute;left:0;top:0;width:0;height:5px;background-color:#5FB878;transition:all .2s;-webkit-transition:all .2s}.layui-nav-bar{z-index:1000}.layui-nav .layui-nav-item a:hover,.layui-nav .layui-this a{color:#fff}.layui-nav .layui-this:after{content:'';top:auto;bottom:0;width:100%}.layui-nav-img{width:30px;height:30px;margin-right:10px;border-radius:50%}.layui-nav .layui-nav-more{content:'';width:0;height:0;border-style:solid dashed dashed;border-color:#fff transparent transparent;overflow:hidden;cursor:pointer;transition:all .2s;-webkit-transition:all .2s;position:absolute;top:50%;right:3px;margin-top:-3px;border-width:6px;border-top-color:rgba(255,255,255,.7)}.layui-nav .layui-nav-mored,.layui-nav-itemed>a .layui-nav-more{margin-top:-9px;border-style:dashed dashed solid;border-color:transparent transparent #fff}.layui-nav-child{display:none;position:absolute;left:0;top:65px;min-width:100%;line-height:36px;padding:5px 0;box-shadow:0 2px 4px rgba(0,0,0,.12);border:1px solid #d2d2d2;background-color:#fff;z-index:100;border-radius:2px;white-space:nowrap}.layui-nav .layui-nav-child a{color:#333}.layui-nav .layui-nav-child a:hover{background-color:#f2f2f2;color:#000}.layui-nav-child dd{position:relative}.layui-nav .layui-nav-child dd.layui-this a,.layui-nav-child dd.layui-this{background-color:#5FB878;color:#fff}.layui-nav-child dd.layui-this:after{display:none}.layui-nav-tree{width:200px;padding:0}.layui-nav-tree .layui-nav-item{display:block;width:100%;line-height:45px}.layui-nav-tree .layui-nav-item a{position:relative;height:45px;line-height:45px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.layui-nav-tree .layui-nav-item a:hover{background-color:#4E5465}.layui-nav-tree .layui-nav-bar{width:5px;height:0;background-color:#009688}.layui-nav-tree .layui-nav-child dd.layui-this,.layui-nav-tree .layui-nav-child dd.layui-this a,.layui-nav-tree .layui-this,.layui-nav-tree .layui-this>a,.layui-nav-tree .layui-this>a:hover{background-color:#009688;color:#fff}.layui-nav-tree .layui-this:after{display:none}.layui-nav-itemed>a,.layui-nav-tree .layui-nav-title a,.layui-nav-tree .layui-nav-title a:hover{color:#fff!important}.layui-nav-tree .layui-nav-child{position:relative;z-index:0;top:0;border:none;box-shadow:none}.layui-nav-tree .layui-nav-child a{height:40px;line-height:40px;color:#fff;color:rgba(255,255,255,.7)}.layui-nav-tree .layui-nav-child,.layui-nav-tree .layui-nav-child a:hover{background:0 0;color:#fff}.layui-nav-tree .layui-nav-more{right:10px}.layui-nav-itemed>.layui-nav-child{display:block;padding:0;background-color:rgba(0,0,0,.3)!important}.layui-nav-itemed>.layui-nav-child>.layui-this>.layui-nav-child{display:block}.layui-nav-side{position:fixed;top:0;bottom:0;left:0;overflow-x:hidden;z-index:999}.layui-bg-blue .layui-nav-bar,.layui-bg-blue .layui-nav-itemed:after,.layui-bg-blue .layui-this:after{background-color:#93D1FF}.layui-bg-blue .layui-nav-child dd.layui-this{background-color:#1E9FFF}.layui-bg-blue .layui-nav-itemed>a,.layui-nav-tree.layui-bg-blue .layui-nav-title a,.layui-nav-tree.layui-bg-blue .layui-nav-title a:hover{background-color:#007DDB!important}.layui-breadcrumb{font-size:0}.layui-breadcrumb>*{font-size:14px}.layui-breadcrumb a{color:#999!important}.layui-breadcrumb a:hover{color:#5FB878!important}.layui-breadcrumb a cite{color:#666;font-style:normal}.layui-breadcrumb span[lay-separator]{margin:0 10px;color:#999}.layui-tab{margin:10px 0;text-align:left!important}.layui-tab[overflow]>.layui-tab-title{overflow:hidden}.layui-tab-title{position:relative;left:0;height:40px;white-space:nowrap;font-size:0;border-bottom-width:1px;border-bottom-style:solid;transition:all .2s;-webkit-transition:all .2s}.layui-tab-title li{display:inline-block;*display:inline;*zoom:1;vertical-align:middle;font-size:14px;transition:all .2s;-webkit-transition:all .2s;position:relative;line-height:40px;min-width:65px;padding:0 15px;text-align:center;cursor:pointer}.layui-tab-title li a{display:block}.layui-tab-title .layui-this{color:#000}.layui-tab-title .layui-this:after{position:absolute;left:0;top:0;content:'';width:100%;height:41px;border-width:1px;border-style:solid;border-bottom-color:#fff;border-radius:2px 2px 0 0;box-sizing:border-box;pointer-events:none}.layui-tab-bar{position:absolute;right:0;top:0;z-index:10;width:30px;height:39px;line-height:39px;border-width:1px;border-style:solid;border-radius:2px;text-align:center;background-color:#fff;cursor:pointer}.layui-tab-bar .layui-icon{position:relative;display:inline-block;top:3px;transition:all .3s;-webkit-transition:all .3s}.layui-tab-item{display:none}.layui-tab-more{padding-right:30px;height:auto!important;white-space:normal!important}.layui-tab-more li.layui-this:after{border-bottom-color:#e2e2e2;border-radius:2px}.layui-tab-more .layui-tab-bar .layui-icon{top:-2px;top:3px\9;-webkit-transform:rotate(180deg);transform:rotate(180deg)}:root .layui-tab-more .layui-tab-bar .layui-icon{top:-2px\0/IE9}.layui-tab-content{padding:10px}.layui-tab-title li .layui-tab-close{position:relative;display:inline-block;width:18px;height:18px;line-height:20px;margin-left:8px;top:1px;text-align:center;font-size:14px;color:#c2c2c2;transition:all .2s;-webkit-transition:all .2s}.layui-tab-title li .layui-tab-close:hover{border-radius:2px;background-color:#FF5722;color:#fff}.layui-tab-brief>.layui-tab-title .layui-this{color:#009688}.layui-tab-brief>.layui-tab-more li.layui-this:after,.layui-tab-brief>.layui-tab-title .layui-this:after{border:none;border-radius:0;border-bottom:2px solid #5FB878}.layui-tab-brief[overflow]>.layui-tab-title .layui-this:after{top:-1px}.layui-tab-card{border-width:1px;border-style:solid;border-radius:2px;box-shadow:0 2px 5px 0 rgba(0,0,0,.1)}.layui-tab-card>.layui-tab-title{background-color:#f2f2f2}.layui-tab-card>.layui-tab-title li{margin-right:-1px;margin-left:-1px}.layui-tab-card>.layui-tab-title .layui-this{background-color:#fff}.layui-tab-card>.layui-tab-title .layui-this:after{border-top:none;border-width:1px;border-bottom-color:#fff}.layui-tab-card>.layui-tab-title .layui-tab-bar{height:40px;line-height:40px;border-radius:0;border-top:none;border-right:none}.layui-tab-card>.layui-tab-more .layui-this{background:0 0;color:#5FB878}.layui-tab-card>.layui-tab-more .layui-this:after{border:none}.layui-timeline{padding-left:5px}.layui-timeline-item{position:relative;padding-bottom:20px}.layui-timeline-axis{position:absolute;left:-5px;top:0;z-index:10;width:20px;height:20px;line-height:20px;background-color:#fff;color:#5FB878;border-radius:50%;text-align:center;cursor:pointer}.layui-timeline-axis:hover{color:#FF5722}.layui-timeline-item:before{content:'';position:absolute;left:5px;top:0;z-index:0;width:1px;height:100%}.layui-timeline-item:last-child:before{display:none}.layui-timeline-item:first-child:before{display:block}.layui-timeline-content{padding-left:25px}.layui-timeline-title{position:relative;margin-bottom:10px}.layui-badge,.layui-badge-dot,.layui-badge-rim{position:relative;display:inline-block;padding:0 6px;font-size:12px;text-align:center;background-color:#FF5722;color:#fff;border-radius:2px}.layui-badge{height:18px;line-height:18px}.layui-badge-dot{width:8px;height:8px;padding:0;border-radius:50%}.layui-badge-rim{height:18px;line-height:18px;border-width:1px;border-style:solid;background-color:#fff;color:#666}.layui-btn .layui-badge,.layui-btn .layui-badge-dot{margin-left:5px}.layui-nav .layui-badge,.layui-nav .layui-badge-dot{position:absolute;top:50%;margin:-8px 6px 0}.layui-tab-title .layui-badge,.layui-tab-title .layui-badge-dot{left:5px;top:-2px}.layui-carousel{position:relative;left:0;top:0;background-color:#f8f8f8}.layui-carousel>[carousel-item]{position:relative;width:100%;height:100%;overflow:hidden}.layui-carousel>[carousel-item]:before{position:absolute;content:'\e63d';left:50%;top:50%;width:100px;line-height:20px;margin:-10px 0 0 -50px;text-align:center;color:#c2c2c2;font-family:layui-icon!important;font-size:30px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.layui-carousel>[carousel-item]>*{display:none;position:absolute;left:0;top:0;width:100%;height:100%;background-color:#f8f8f8;transition-duration:.3s;-webkit-transition-duration:.3s}.layui-carousel-updown>*{-webkit-transition:.3s ease-in-out up;transition:.3s ease-in-out up}.layui-carousel-arrow{display:none\9;opacity:0;position:absolute;left:10px;top:50%;margin-top:-18px;width:36px;height:36px;line-height:36px;text-align:center;font-size:20px;border:0;border-radius:50%;background-color:rgba(0,0,0,.2);color:#fff;-webkit-transition-duration:.3s;transition-duration:.3s;cursor:pointer}.layui-carousel-arrow[lay-type=add]{left:auto!important;right:10px}.layui-carousel:hover .layui-carousel-arrow[lay-type=add],.layui-carousel[lay-arrow=always] .layui-carousel-arrow[lay-type=add]{right:20px}.layui-carousel[lay-arrow=always] .layui-carousel-arrow{opacity:1;left:20px}.layui-carousel[lay-arrow=none] .layui-carousel-arrow{display:none}.layui-carousel-arrow:hover,.layui-carousel-ind ul:hover{background-color:rgba(0,0,0,.35)}.layui-carousel:hover .layui-carousel-arrow{display:block\9;opacity:1;left:20px}.layui-carousel-ind{position:relative;top:-35px;width:100%;line-height:0!important;text-align:center;font-size:0}.layui-carousel[lay-indicator=outside]{margin-bottom:30px}.layui-carousel[lay-indicator=outside] .layui-carousel-ind{top:10px}.layui-carousel[lay-indicator=outside] .layui-carousel-ind ul{background-color:rgba(0,0,0,.5)}.layui-carousel[lay-indicator=none] .layui-carousel-ind{display:none}.layui-carousel-ind ul{display:inline-block;padding:5px;background-color:rgba(0,0,0,.2);border-radius:10px;-webkit-transition-duration:.3s;transition-duration:.3s}.layui-carousel-ind li{display:inline-block;width:10px;height:10px;margin:0 3px;font-size:14px;background-color:#e2e2e2;background-color:rgba(255,255,255,.5);border-radius:50%;cursor:pointer;-webkit-transition-duration:.3s;transition-duration:.3s}.layui-carousel-ind li:hover{background-color:rgba(255,255,255,.7)}.layui-carousel-ind li.layui-this{background-color:#fff}.layui-carousel>[carousel-item]>.layui-carousel-next,.layui-carousel>[carousel-item]>.layui-carousel-prev,.layui-carousel>[carousel-item]>.layui-this{display:block}.layui-carousel>[carousel-item]>.layui-this{left:0}.layui-carousel>[carousel-item]>.layui-carousel-prev{left:-100%}.layui-carousel>[carousel-item]>.layui-carousel-next{left:100%}.layui-carousel>[carousel-item]>.layui-carousel-next.layui-carousel-left,.layui-carousel>[carousel-item]>.layui-carousel-prev.layui-carousel-right{left:0}.layui-carousel>[carousel-item]>.layui-this.layui-carousel-left{left:-100%}.layui-carousel>[carousel-item]>.layui-this.layui-carousel-right{left:100%}.layui-carousel[lay-anim=updown] .layui-carousel-arrow{left:50%!important;top:20px;margin:0 0 0 -18px}.layui-carousel[lay-anim=updown]>[carousel-item]>*,.layui-carousel[lay-anim=fade]>[carousel-item]>*{left:0!important}.layui-carousel[lay-anim=updown] .layui-carousel-arrow[lay-type=add]{top:auto!important;bottom:20px}.layui-carousel[lay-anim=updown] .layui-carousel-ind{position:absolute;top:50%;right:20px;width:auto;height:auto}.layui-carousel[lay-anim=updown] .layui-carousel-ind ul{padding:3px 5px}.layui-carousel[lay-anim=updown] .layui-carousel-ind li{display:block;margin:6px 0}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-this{top:0}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-carousel-prev{top:-100%}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-carousel-next{top:100%}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-carousel-next.layui-carousel-left,.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-carousel-prev.layui-carousel-right{top:0}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-this.layui-carousel-left{top:-100%}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-this.layui-carousel-right{top:100%}.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-carousel-next,.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-carousel-prev{opacity:0}.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-carousel-next.layui-carousel-left,.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-carousel-prev.layui-carousel-right{opacity:1}.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-this.layui-carousel-left,.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-this.layui-carousel-right{opacity:0}.layui-fixbar{position:fixed;right:15px;bottom:15px;z-index:999999}.layui-fixbar li{width:50px;height:50px;line-height:50px;margin-bottom:1px;text-align:center;cursor:pointer;font-size:30px;background-color:#9F9F9F;color:#fff;border-radius:2px;opacity:.95}.layui-fixbar li:hover{opacity:.85}.layui-fixbar li:active{opacity:1}.layui-fixbar .layui-fixbar-top{display:none;font-size:40px}body .layui-util-face{border:none;background:0 0}body .layui-util-face .layui-layer-content{padding:0;background-color:#fff;color:#666;box-shadow:none}.layui-util-face .layui-layer-TipsG{display:none}.layui-util-face ul{position:relative;width:372px;padding:10px;border:1px solid #D9D9D9;background-color:#fff;box-shadow:0 0 20px rgba(0,0,0,.2)}.layui-util-face ul li{cursor:pointer;float:left;border:1px solid #e8e8e8;height:22px;width:26px;overflow:hidden;margin:-1px 0 0 -1px;padding:4px 2px;text-align:center}.layui-util-face ul li:hover{position:relative;z-index:2;border:1px solid #eb7350;background:#fff9ec}.layui-code{position:relative;margin:10px 0;padding:15px;line-height:20px;border:1px solid #ddd;border-left-width:6px;background-color:#F2F2F2;color:#333;font-family:Courier New;font-size:12px}.layui-rate,.layui-rate *{display:inline-block;vertical-align:middle}.layui-rate{padding:10px 5px 10px 0;font-size:0}.layui-rate li i.layui-icon{font-size:20px;color:#FFB800;margin-right:5px;transition:all .3s;-webkit-transition:all .3s}.layui-rate li i:hover{cursor:pointer;transform:scale(1.12);-webkit-transform:scale(1.12)}.layui-rate[readonly] li i:hover{cursor:default;transform:scale(1)}.layui-colorpicker{width:26px;height:26px;border:1px solid #e6e6e6;padding:5px;border-radius:2px;line-height:24px;display:inline-block;cursor:pointer;transition:all .3s;-webkit-transition:all .3s}.layui-colorpicker:hover{border-color:#d2d2d2}.layui-colorpicker.layui-colorpicker-lg{width:34px;height:34px;line-height:32px}.layui-colorpicker.layui-colorpicker-sm{width:24px;height:24px;line-height:22px}.layui-colorpicker.layui-colorpicker-xs{width:22px;height:22px;line-height:20px}.layui-colorpicker-trigger-bgcolor{display:block;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==);border-radius:2px}.layui-colorpicker-trigger-span{display:block;height:100%;box-sizing:border-box;border:1px solid rgba(0,0,0,.15);border-radius:2px;text-align:center}.layui-colorpicker-trigger-i{display:inline-block;color:#FFF;font-size:12px}.layui-colorpicker-trigger-i.layui-icon-close{color:#999}.layui-colorpicker-main{position:absolute;z-index:66666666;width:280px;padding:7px;background:#FFF;border:1px solid #d2d2d2;border-radius:2px;box-shadow:0 2px 4px rgba(0,0,0,.12)}.layui-colorpicker-main-wrapper{height:180px;position:relative}.layui-colorpicker-basis{width:260px;height:100%;position:relative}.layui-colorpicker-basis-white{width:100%;height:100%;position:absolute;top:0;left:0;background:linear-gradient(90deg,#FFF,hsla(0,0%,100%,0))}.layui-colorpicker-basis-black{width:100%;height:100%;position:absolute;top:0;left:0;background:linear-gradient(0deg,#000,transparent)}.layui-colorpicker-basis-cursor{width:10px;height:10px;border:1px solid #FFF;border-radius:50%;position:absolute;top:-3px;right:-3px;cursor:pointer}.layui-colorpicker-side{position:absolute;top:0;right:0;width:12px;height:100%;background:linear-gradient(red,#FF0,#0F0,#0FF,#00F,#F0F,red)}.layui-colorpicker-side-slider{width:100%;height:5px;box-shadow:0 0 1px #888;box-sizing:border-box;background:#FFF;border-radius:1px;border:1px solid #f0f0f0;cursor:pointer;position:absolute;left:0}.layui-colorpicker-main-alpha{display:none;height:12px;margin-top:7px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.layui-colorpicker-alpha-bgcolor{height:100%;position:relative}.layui-colorpicker-alpha-slider{width:5px;height:100%;box-shadow:0 0 1px #888;box-sizing:border-box;background:#FFF;border-radius:1px;border:1px solid #f0f0f0;cursor:pointer;position:absolute;top:0}.layui-colorpicker-main-pre{padding-top:7px;font-size:0}.layui-colorpicker-pre{width:20px;height:20px;border-radius:2px;display:inline-block;margin-left:6px;margin-bottom:7px;cursor:pointer}.layui-colorpicker-pre:nth-child(11n+1){margin-left:0}.layui-colorpicker-pre-isalpha{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.layui-colorpicker-pre.layui-this{box-shadow:0 0 3px 2px rgba(0,0,0,.15)}.layui-colorpicker-pre>div{height:100%;border-radius:2px}.layui-colorpicker-main-input{text-align:right;padding-top:7px}.layui-colorpicker-main-input .layui-btn-container .layui-btn{margin:0 0 0 10px}.layui-colorpicker-main-input div.layui-inline{float:left;margin-right:10px;font-size:14px}.layui-colorpicker-main-input input.layui-input{width:150px;height:30px;color:#666}.layui-slider{height:4px;background:#e2e2e2;border-radius:3px;position:relative;cursor:pointer}.layui-slider-bar{border-radius:3px;position:absolute;height:100%}.layui-slider-step{position:absolute;top:0;width:4px;height:4px;border-radius:50%;background:#FFF;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.layui-slider-wrap{width:36px;height:36px;position:absolute;top:-16px;-webkit-transform:translateX(-50%);transform:translateX(-50%);z-index:10;text-align:center}.layui-slider-wrap-btn{width:12px;height:12px;border-radius:50%;background:#FFF;display:inline-block;vertical-align:middle;cursor:pointer;transition:.3s}.layui-slider-wrap:after{content:"";height:100%;display:inline-block;vertical-align:middle}.layui-slider-wrap-btn.layui-slider-hover,.layui-slider-wrap-btn:hover{transform:scale(1.2)}.layui-slider-wrap-btn.layui-disabled:hover{transform:scale(1)!important}.layui-slider-tips{position:absolute;top:-42px;z-index:66666666;white-space:nowrap;display:none;-webkit-transform:translateX(-50%);transform:translateX(-50%);color:#FFF;background:#000;border-radius:3px;height:25px;line-height:25px;padding:0 10px}.layui-slider-tips:after{content:'';position:absolute;bottom:-12px;left:50%;margin-left:-6px;width:0;height:0;border-width:6px;border-style:solid;border-color:#000 transparent transparent}.layui-slider-input{width:70px;height:32px;border:1px solid #e6e6e6;border-radius:3px;font-size:16px;line-height:32px;position:absolute;right:0;top:-15px}.layui-slider-input-btn{display:none;position:absolute;top:0;right:0;width:20px;height:100%;border-left:1px solid #d2d2d2}.layui-slider-input-btn i{cursor:pointer;position:absolute;right:0;bottom:0;width:20px;height:50%;font-size:12px;line-height:16px;text-align:center;color:#999}.layui-slider-input-btn i:first-child{top:0;border-bottom:1px solid #d2d2d2}.layui-slider-input-txt{height:100%;font-size:14px}.layui-slider-input-txt input{height:100%;border:none}.layui-slider-input-btn i:hover{color:#009688}.layui-slider-vertical{width:4px;margin-left:34px}.layui-slider-vertical .layui-slider-bar{width:4px}.layui-slider-vertical .layui-slider-step{top:auto;left:0;-webkit-transform:translateY(50%);transform:translateY(50%)}.layui-slider-vertical .layui-slider-wrap{top:auto;left:-16px;-webkit-transform:translateY(50%);transform:translateY(50%)}.layui-slider-vertical .layui-slider-tips{top:auto;left:2px}@media \0screen{.layui-slider-wrap-btn{margin-left:-20px}.layui-slider-vertical .layui-slider-wrap-btn{margin-left:0;margin-bottom:-20px}.layui-slider-vertical .layui-slider-tips{margin-left:-8px}.layui-slider>span{margin-left:8px}}.layui-tree{line-height:22px}.layui-tree .layui-form-checkbox{margin:0!important}.layui-tree-set{width:100%;position:relative}.layui-tree-pack{display:none;padding-left:20px;position:relative}.layui-tree-iconClick,.layui-tree-main{display:inline-block;vertical-align:middle}.layui-tree-line .layui-tree-pack{padding-left:27px}.layui-tree-line .layui-tree-set .layui-tree-set:after{content:'';position:absolute;top:14px;left:-9px;width:17px;height:0;border-top:1px dotted #c0c4cc}.layui-tree-entry{position:relative;padding:3px 0;height:20px;white-space:nowrap}.layui-tree-entry:hover{background-color:#eee}.layui-tree-line .layui-tree-entry:hover{background-color:rgba(0,0,0,0)}.layui-tree-line .layui-tree-entry:hover .layui-tree-txt{color:#999;text-decoration:underline;transition:.3s}.layui-tree-main{cursor:pointer;padding-right:10px}.layui-tree-line .layui-tree-set:before{content:'';position:absolute;top:0;left:-9px;width:0;height:100%;border-left:1px dotted #c0c4cc}.layui-tree-line .layui-tree-set.layui-tree-setLineShort:before{height:13px}.layui-tree-line .layui-tree-set.layui-tree-setHide:before{height:0}.layui-tree-iconClick{position:relative;height:20px;line-height:20px;margin:0 10px;color:#c0c4cc}.layui-tree-icon{height:12px;line-height:12px;width:12px;text-align:center;border:1px solid #c0c4cc}.layui-tree-iconClick .layui-icon{font-size:18px}.layui-tree-icon .layui-icon{font-size:12px;color:#666}.layui-tree-iconArrow{padding:0 5px}.layui-tree-iconArrow:after{content:'';position:absolute;left:4px;top:3px;z-index:100;width:0;height:0;border-width:5px;border-style:solid;border-color:transparent transparent transparent #c0c4cc;transition:.5s}.layui-tree-btnGroup,.layui-tree-editInput{position:relative;vertical-align:middle;display:inline-block}.layui-tree-spread>.layui-tree-entry>.layui-tree-iconClick>.layui-tree-iconArrow:after{transform:rotate(90deg) translate(3px,4px)}.layui-tree-txt{display:inline-block;vertical-align:middle;color:#555}.layui-tree-search{margin-bottom:15px;color:#666}.layui-tree-btnGroup .layui-icon{display:inline-block;vertical-align:middle;padding:0 2px;cursor:pointer}.layui-tree-btnGroup .layui-icon:hover{color:#999;transition:.3s}.layui-tree-entry:hover .layui-tree-btnGroup{visibility:visible}.layui-tree-editInput{height:20px;line-height:20px;padding:0 3px;border:none;background-color:rgba(0,0,0,.05)}.layui-tree-emptyText{text-align:center;color:#999}.layui-anim{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both}.layui-anim.layui-icon{display:inline-block}.layui-anim-loop{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.layui-trans,.layui-trans a{transition:all .3s;-webkit-transition:all .3s}@-webkit-keyframes layui-rotate{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(360deg)}}@keyframes layui-rotate{from{transform:rotate(0)}to{transform:rotate(360deg)}}.layui-anim-rotate{-webkit-animation-name:layui-rotate;animation-name:layui-rotate;-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-timing-function:linear;animation-timing-function:linear}@-webkit-keyframes layui-up{from{-webkit-transform:translate3d(0,100%,0);opacity:.3}to{-webkit-transform:translate3d(0,0,0);opacity:1}}@keyframes layui-up{from{transform:translate3d(0,100%,0);opacity:.3}to{transform:translate3d(0,0,0);opacity:1}}.layui-anim-up{-webkit-animation-name:layui-up;animation-name:layui-up}@-webkit-keyframes layui-upbit{from{-webkit-transform:translate3d(0,30px,0);opacity:.3}to{-webkit-transform:translate3d(0,0,0);opacity:1}}@keyframes layui-upbit{from{transform:translate3d(0,30px,0);opacity:.3}to{transform:translate3d(0,0,0);opacity:1}}.layui-anim-upbit{-webkit-animation-name:layui-upbit;animation-name:layui-upbit}@-webkit-keyframes layui-scale{0%{opacity:.3;-webkit-transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1)}}@keyframes layui-scale{0%{opacity:.3;-ms-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-ms-transform:scale(1);transform:scale(1)}}.layui-anim-scale{-webkit-animation-name:layui-scale;animation-name:layui-scale}@-webkit-keyframes layui-scale-spring{0%{opacity:.5;-webkit-transform:scale(.5)}80%{opacity:.8;-webkit-transform:scale(1.1)}100%{opacity:1;-webkit-transform:scale(1)}}@keyframes layui-scale-spring{0%{opacity:.5;transform:scale(.5)}80%{opacity:.8;transform:scale(1.1)}100%{opacity:1;transform:scale(1)}}.layui-anim-scaleSpring{-webkit-animation-name:layui-scale-spring;animation-name:layui-scale-spring}@-webkit-keyframes layui-fadein{0%{opacity:0}100%{opacity:1}}@keyframes layui-fadein{0%{opacity:0}100%{opacity:1}}.layui-anim-fadein{-webkit-animation-name:layui-fadein;animation-name:layui-fadein}@-webkit-keyframes layui-fadeout{0%{opacity:1}100%{opacity:0}}@keyframes layui-fadeout{0%{opacity:1}100%{opacity:0}}.layui-anim-fadeout{-webkit-animation-name:layui-fadeout;animation-name:layui-fadeout} \ No newline at end of file +/* 整体样式重置,去除一些默认样式 */ +blockquote,body,button,dd,div,dl,dt,form,h1,h2,h3,h4,h5,h6,input,li,ol,p,pre,td,textarea,th,ul{ + margin:0; + padding:0; + -webkit-tap-highlight-color:rgba(0,0,0,0); +} +/* 去除a标签点击和悬停时的默认轮廓 */ +a:active,a:hover{ + outline:0; +} +/* 图片无边框 */ +img{ + border:none; +} +/* 列表项无默认样式 */ +li{ + list-style:none; +} +/* 表格边框合并等样式设置 */ +table{ + border-collapse:collapse; + border-spacing:0; +} +/* h4到h6标签字号保持默认大小 */ +h4,h5,h6{ + font-size:100%; +} +/* 表单元素继承字体相关样式并去除默认轮廓 */ +button,input,optgroup,option,select,textarea{ + font-family:inherit; + font-size:inherit; + font-style:inherit; + font-weight:inherit; + outline:0; +} +/* 让pre标签内文字可换行 */ +pre{ + white-space:pre-wrap; + white-space:-moz-pre-wrap; + white-space:-pre-wrap; + white-space:-o-pre-wrap; + word-wrap:break-word; +} +/* 页面主体文字样式 */ +body{ + line-height:24px; + font:14px Helvetica Neue,Helvetica,PingFang SC,Tahoma,Arial,sans-serif; +} +/* 水平分割线样式 */ +hr{ + height:1px; + margin:10px 0; + border:0; + clear:both; +} +/* 链接默认颜色及去除下划线 */ +a{ + color:#333; + text-decoration:none; +} +/* 链接悬停时颜色变化 */ +a:hover{ + color:#777; +} +/* 让cite标签内文字样式正常,模拟可点击效果 */ +a cite{ + font-style:normal; + *cursor:pointer; +} +/* 使设置了该类的元素及其内部元素盒模型为 border-box */ +.layui-border-box,.layui-border-box *{ + box-sizing:border-box; +} +/* 使设置了该类的元素及其内部元素盒模型为 content-box */ +.layui-box,.layui-box *{ + box-sizing:content-box; +} +/* 清除浮动并添加 zoom 属性兼容低版本IE */ +.layui-clear{ + clear:both; + *zoom:1; +} +.layui-clear:after{ + content:'\20'; + clear:both; + *zoom:1; + display:block; + height:0; +} +/* 让内联元素在低版本IE下能正常显示及添加 zoom 属性兼容 */ +.layui-inline{ + *display:inline; + *zoom:1; +} +/* 用于创建三角形的通用样式,初始为透明边框 */ +.layui-edge{ + display:inline-block; + width:0; + height:0; + border-width:6px; + border-style:dashed; + border-color:transparent; +} +/* 顶部三角形样式,设置底部边框颜色和样式来呈现 */ +.layui-edge-top{ + top:-4px; + border-bottom-color:#999; + border-bottom-style:solid; +} +/* 右侧三角形样式,设置左侧边框颜色和样式来呈现 */ +.layui-edge-right{ + border-left-color:#999; + border-left-style:solid; +} +/* 底部三角形样式,设置顶部边框颜色和样式来呈现 */ +.layui-edge-bottom{ + top:2px; + border-top-color:#999; + border-top-style:solid; +} +/* 左侧三角形样式,设置右侧边框颜色和样式来呈现 */ +.layui-edge-left{ + border-right-color:#999; + border-right-style:solid; +} +/* 禁用状态的通用样式,颜色变灰且鼠标指针变为不允许状态 */ +.layui-disabled,.layui-disabled:hover{ + color:#9a9a9a!important; + cursor:not-allowed!important; +} +/* 圆形样式,设置边框圆角为100% */ +.layui-circle{ + border-radius:100%; +} +/* 显示元素 */ +.layui-show{ + display:block!important; +} +/* 隐藏元素 */ +.layui-hide{ + display:none!important; +} +/* 定义图标字体,设置不同格式的字体文件路径 */ +@font-face{ + font-family:layui-icon; + src:url(../font/iconfont.eot?v=256); + src:url(../font/iconfont.eot?v=256#iefix) format('embedded-opentype'), + url(../font/iconfont.woff2?v=256) format('woff2'), + url(../font/iconfont.woff?v=256) format('woff'), + url(../font/iconfont.ttf?v=256) format('truetype'), + url(../font/iconfont.svg?v=256#layui-icon) format('svg'); +} +/* 图标样式设置,指定字体、字号、样式及抗锯齿等 */ +.layui-icon{ + font-family:layui-icon!important; + font-size:16px; + font-style:normal; + -webkit-font-smoothing:antialiased; + -moz-osx-font-smoothing:grayscale; +} +/* 具体每个图标的内容定义,通过:before伪元素设置对应图标编码 */ +.layui-icon-reply-fill:before{ + content:"\e611"; +} +.layui-icon-set-fill:before{ + content:"\e614"; +} +/* 此处省略众多单个图标的样式定义代码 */ +/* 主体内容区域宽度及水平居中 */ +.layui-main{ + width:1140px; + margin:0 auto; +} +/* 头部区域样式,设置层级和高度等 */ +.layui-header{ + z-index:1000; + height:60px; +} +/* 头部链接悬停时的过渡效果 */ +.layui-header a:hover{ + transition:all.5s; + -webkit-transition:all.5s; +} +/* 侧边栏固定定位及基本样式 */ +.layui-side{ + position:fixed; + left:0; + top:0; + bottom:0; + z-index:999; + width:200px; + overflow-x:hidden; +} +/* 侧边栏滚动区域样式 */ +.layui-side-scroll{ + position:relative; + width:220px; + height:100%; + overflow-x:hidden; +} +/* 主体内容区域定位及滚动等样式 */ +.layui-body{ + position:absolute; + left:200px; + right:0; + top:0; + bottom:0; + z-index:998; + width:auto; + overflow-y:auto; + box-sizing:border-box; +} +/* 布局主体的整体样式,处理溢出隐藏 */ +.layui-layout-body{ + overflow:hidden; +} +/* 管理后台布局下头部背景色设置 */ +.layui-layout-admin.layui-header{ + background-color:#23262E; +} +/* 管理后台布局下侧边栏的位置及宽度等样式调整 */ +.layui-layout-admin.layui-side{ + top:60px; + width:200px; + overflow-x:hidden; +} +/* 管理后台布局下主体内容区域的定位及高度设置 */ +.layui-layout-admin.layui-body{ + position:fixed; + top:60px; + bottom:44px; +} +/* 管理后台布局下主体内容宽度自适应及左右边距设置 */ +.layui-layout-admin.layui-main{ + width:auto; + margin:0 15px; +} +/* 管理后台布局下页脚的定位、高度、背景色等样式 */ +.layui-layout-admin.layui-footer{ + position:fixed; + left:200px; + right:0; + bottom:0; + height:44px; + line-height:44px; + padding:0 15px; + background-color:#eee; +} +/* 管理后台布局下的logo区域样式 */ +.layui-layout-admin.layui-logo{ + position:absolute; + left:0; + top:0; + width:200px; + height:100%; + line-height:60px; + text-align:center; + color:#009688; + font-size:16px; +} +/* 左侧布局相关样式 */ +.layui-layout-left{ + position:absolute!important; + left:200px; + top:0; +} +/* 右侧布局相关样式 */ +.layui-layout-right{ + position:absolute!important; + right:0; + top:0; +} +/* 容器通用样式,相对定位及内边距设置 */ +.layui-container{ + position:relative; + margin:0 auto; + padding:0 15px; + box-sizing:border-box; +} +/* 流体容器样式,相对定位及内边距设置 */ +.layui-fluid{ + position:relative; + margin:0 auto; + padding:0 15px; +} +/* 行样式,清除浮动相关设置 */ +.layui-row:after,.layui-row:before{ + content:''; + display:block; + clear:both; +} +/* 列通用样式,相对定位及盒模型设置 */ +.layui-col-lg1,.layui-col-lg10,.layui-col-lg11,.layui-col-lg12,.layui-col-lg2,.layui-col-lg3,.layui-col-lg4,.layui-col-lg5,.layui-col-lg6,.layui-col-lg7,.layui-col-lg8,.layui-col-lg9,.layui-col-md1,.layui-col-md10,.layui-col-md11,.layui-col-md12,.layui-col-md2,.layui-col-md3,.layui-col-md4,.layui-col-md5,.layui-col-md6,.layui-col-md7,.layui-col-md8,.layui-col-md9,.layui-col-sm1,.layui-col-sm10,.layui-col-sm11,.layui-col-sm12,.layui-col-sm2,.layui-col-sm3,.layui-col-sm4,.layui-col-sm5,.layui-col-sm6,.layui-col-sm7,.layui-col-sm8,.layui-col-sm9,.layui-col-xs1,.layui-col-xs10,.layui-col-xs11,.layui-col-xs12,.layui-col-xs2,.layui-col-xs3,.layui-col-xs4,.layui-col-xs5,.layui-col-xs6,.layui-col-xs7,.layui-col-xs8,.layui-col-xs9{ + position:relative; + display:block; + box-sizing:border-box; +} +/* 超小屏幕下的列宽度设置及左浮动 */ +.layui-col-xs1,.layui-col-xs10,.layui-col-xs11,.layui-col-xs12,.layui-col-xs2,.layui-col-xs3,.layui-col-xs4,.layui-col-xs5,.layui-col-xs6,.layui-col-xs7,.layui-col-xs8,.layui-col-xs9{ + float:left; +} +.layui-col-xs1{ + width:8.33333333%; +} +/* 此处省略众多不同屏幕尺寸下各列宽度及偏移量等样式定义代码 */ +/* 按钮通用样式,设置基本外观、颜色、光标样式等 */ +.layui-btn{ + display:inline-block; + height:38px; + line-height:38px; + padding:0 18px; + background-color:#009688; + color:#fff; + white-space:nowrap; + text-align:center; + font-size:14px; + border:none; + border-radius:2px; + cursor:pointer; +} +/* 按钮悬停时透明度变化 */ +.layui-btn:hover{ + opacity:.8; + filter:alpha(opacity=80); + color:#fff; +} +/* 按钮按下时恢复透明度 */ +.layui-btn:active{ + opacity:1; + filter:alpha(opacity=100); +} +/* 按钮间距设置 */ +.layui-btn+.layui-btn{ + margin-left:10px; +} +/* 按钮容器样式,字体大小设为0方便排版 */ +.layui-btn-container{ + font-size:0; +} +/* 按钮容器内按钮的间距等样式 */ +.layui-btn-container.layui-btn{ + margin-right:10px; + margin-bottom:10px; +} +/* 按钮容器内相邻按钮的间距调整 */ +.layui-btn-container.layui-btn+.layui-btn{ + margin-left:0; +} +/* 表格内按钮容器中按钮的底部间距调整 */ +.layui-table.layui-btn-container.layui-btn{ + margin-bottom:9px; +} +/* 圆角较大的按钮样式 */ +.layui-btn-radius{ + border-radius:100px; +} +/* 按钮内图标样式及间距设置 */ +.layui-btn.layui-icon{ + margin-right:3px; + font-size:18px; + vertical-align:bottom; + vertical-align:middle\9; +} +/* 不同类型按钮的特定样式,如基础按钮、主要按钮、警告按钮等 */ +.layui-btn-primary{ + border:1px solid #C9C9C9; + background-color:#fff; + color:#555; +} +.layui-btn-primary:hover{ + border-color:#009688; + color:#333; +} +/* 此处省略众多其他按钮类型的样式定义代码 */ + +/* 输入框、选择框、文本域通用样式,设置高度、边框等 */ +.layui-input,.layui-select,.layui-textarea{ + height:38px; + line-height:1.3; + line-height:38px\9; + border-width:1px; + border-style:solid; + background-color:#fff; + border-radius:2px; +} +/* 输入框等的占位符样式 */ +.layui-input::-webkit-input-placeholder,.layui-select::-webkit-input-placeholder,.layui-textarea::-webkit-input-placeholder{ + line-height:1.3; +} +/* 输入框和文本域的宽度及内边距设置 */ +.layui-input,.layui-textarea{ + display:block; + width:100%; + padding-left:10px; +} +/* 输入框等鼠标悬停时边框颜色变化 */ +.layui-input:hover,.layui-textarea:hover{ + border-color:#D2D2D2!important; +} +/* 输入框等获得焦点时边框颜色变化 */ +.layui-input:focus,.layui-textarea:focus{ + border-color:#C9C9C9!important; +} +/* 文本域的最小高度、自动高度及垂直方向可调整设置 */ +.layui-textarea{ + min-height:100px; + height:auto; + line-height:20px; + padding:6px 10px; + resize:vertical; +} +/* 选择框的内边距设置 */ +.layui-select{ + padding:0 10px; +} \ No newline at end of file diff --git a/web/css/layui.mobile.css b/web/css/layui.mobile.css index 7835392..f8bb7fe 100644 --- a/web/css/layui.mobile.css +++ b/web/css/layui.mobile.css @@ -1,2 +1,518 @@ -/** layui-v2.5.6 MIT License By https://www.layui.com */ - blockquote,body,button,dd,div,dl,dt,form,h1,h2,h3,h4,h5,h6,input,legend,li,ol,p,td,textarea,th,ul{margin:0;padding:0;-webkit-tap-highlight-color:rgba(0,0,0,0)}html{font:12px 'Helvetica Neue','PingFang SC',STHeitiSC-Light,Helvetica,Arial,sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}a,button,input{-webkit-tap-highlight-color:rgba(255,0,0,0)}a{text-decoration:none;background:0 0}a:active,a:hover{outline:0}table{border-collapse:collapse;border-spacing:0}li{list-style:none}b,strong{font-weight:700}h1,h2,h3,h4,h5,h6{font-weight:500}address,cite,dfn,em,var{font-style:normal}dfn{font-style:italic}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}img{border:0;vertical-align:bottom}.layui-inline,input,label{vertical-align:middle}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0;outline:0}button,select{text-transform:none}select{-webkit-appearance:none;border:none}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}@font-face{font-family:layui-icon;src:url(../font/iconfont.eot?v=1.0.7);src:url(../font/iconfont.eot?v=1.0.7#iefix) format('embedded-opentype'),url(../font/iconfont.woff?v=1.0.7) format('woff'),url(../font/iconfont.ttf?v=1.0.7) format('truetype'),url(../font/iconfont.svg?v=1.0.7#iconfont) format('svg')}.layui-icon{font-family:layui-icon!important;font-size:16px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.layui-box,.layui-box *{-webkit-box-sizing:content-box!important;-moz-box-sizing:content-box!important;box-sizing:content-box!important}.layui-border-box,.layui-border-box *{-webkit-box-sizing:border-box!important;-moz-box-sizing:border-box!important;box-sizing:border-box!important}.layui-inline{position:relative;display:inline-block;*display:inline;*zoom:1}.layui-edge,.layui-upload-iframe{position:absolute;width:0;height:0}.layui-edge{border-style:dashed;border-color:transparent;overflow:hidden}.layui-elip{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.layui-unselect{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.layui-disabled,.layui-disabled:active{background-color:#d2d2d2!important;color:#fff!important;cursor:not-allowed!important}.layui-circle{border-radius:100%}.layui-show{display:block!important}.layui-hide{display:none!important}.layui-upload-iframe{border:0;visibility:hidden}.layui-upload-enter{border:1px solid #009E94;background-color:#009E94;color:#fff;-webkit-transform:scale(1.1);transform:scale(1.1)}@-webkit-keyframes layui-m-anim-scale{0%{opacity:0;-webkit-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes layui-m-anim-scale{0%{opacity:0;-webkit-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}.layui-m-anim-scale{animation-name:layui-m-anim-scale;-webkit-animation-name:layui-m-anim-scale}@-webkit-keyframes layui-m-anim-up{0%{opacity:0;-webkit-transform:translateY(800px);transform:translateY(800px)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes layui-m-anim-up{0%{opacity:0;-webkit-transform:translateY(800px);transform:translateY(800px)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}.layui-m-anim-up{-webkit-animation-name:layui-m-anim-up;animation-name:layui-m-anim-up}@-webkit-keyframes layui-m-anim-left{0%{-webkit-transform:translateX(100%);transform:translateX(100%)}100%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes layui-m-anim-left{0%{-webkit-transform:translateX(100%);transform:translateX(100%)}100%{-webkit-transform:translateX(0);transform:translateX(0)}}.layui-m-anim-left{-webkit-animation-name:layui-m-anim-left;animation-name:layui-m-anim-left}@-webkit-keyframes layui-m-anim-right{0%{-webkit-transform:translateX(-100%);transform:translateX(-100%)}100%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes layui-m-anim-right{0%{-webkit-transform:translateX(-100%);transform:translateX(-100%)}100%{-webkit-transform:translateX(0);transform:translateX(0)}}.layui-m-anim-right{-webkit-animation-name:layui-m-anim-right;animation-name:layui-m-anim-right}@-webkit-keyframes layui-m-anim-lout{0%{-webkit-transform:translateX(0);transform:translateX(0)}100%{-webkit-transform:translateX(-100%);transform:translateX(-100%)}}@keyframes layui-m-anim-lout{0%{-webkit-transform:translateX(0);transform:translateX(0)}100%{-webkit-transform:translateX(-100%);transform:translateX(-100%)}}.layui-m-anim-lout{-webkit-animation-name:layui-m-anim-lout;animation-name:layui-m-anim-lout}@-webkit-keyframes layui-m-anim-rout{0%{-webkit-transform:translateX(0);transform:translateX(0)}100%{-webkit-transform:translateX(100%);transform:translateX(100%)}}@keyframes layui-m-anim-rout{0%{-webkit-transform:translateX(0);transform:translateX(0)}100%{-webkit-transform:translateX(100%);transform:translateX(100%)}}.layui-m-anim-rout{-webkit-animation-name:layui-m-anim-rout;animation-name:layui-m-anim-rout}.layui-m-layer{position:relative;z-index:19891014}.layui-m-layer *{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.layui-m-layermain,.layui-m-layershade{position:fixed;left:0;top:0;width:100%;height:100%}.layui-m-layershade{background-color:rgba(0,0,0,.7);pointer-events:auto}.layui-m-layermain{display:table;font-family:Helvetica,arial,sans-serif;pointer-events:none}.layui-m-layermain .layui-m-layersection{display:table-cell;vertical-align:middle;text-align:center}.layui-m-layerchild{position:relative;display:inline-block;text-align:left;background-color:#fff;font-size:14px;border-radius:5px;box-shadow:0 0 8px rgba(0,0,0,.1);pointer-events:auto;-webkit-overflow-scrolling:touch;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.2s;animation-duration:.2s}.layui-m-layer0 .layui-m-layerchild{width:90%;max-width:640px}.layui-m-layer1 .layui-m-layerchild{border:none;border-radius:0}.layui-m-layer2 .layui-m-layerchild{width:auto;max-width:260px;min-width:40px;border:none;background:0 0;box-shadow:none;color:#fff}.layui-m-layerchild h3{padding:0 10px;height:60px;line-height:60px;font-size:16px;font-weight:400;border-radius:5px 5px 0 0;text-align:center}.layui-m-layerbtn span,.layui-m-layerchild h3{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.layui-m-layercont{padding:50px 30px;line-height:22px;text-align:center}.layui-m-layer1 .layui-m-layercont{padding:0;text-align:left}.layui-m-layer2 .layui-m-layercont{text-align:center;padding:0;line-height:0}.layui-m-layer2 .layui-m-layercont i{width:25px;height:25px;margin-left:8px;display:inline-block;background-color:#fff;border-radius:100%;-webkit-animation:layui-m-anim-loading 1.4s infinite ease-in-out;animation:layui-m-anim-loading 1.4s infinite ease-in-out;-webkit-animation-fill-mode:both;animation-fill-mode:both}.layui-m-layerbtn,.layui-m-layerbtn span{position:relative;text-align:center;border-radius:0 0 5px 5px}.layui-m-layer2 .layui-m-layercont p{margin-top:20px}@-webkit-keyframes layui-m-anim-loading{0%,100%,80%{transform:scale(0);-webkit-transform:scale(0)}40%{transform:scale(1);-webkit-transform:scale(1)}}@keyframes layui-m-anim-loading{0%,100%,80%{transform:scale(0);-webkit-transform:scale(0)}40%{transform:scale(1);-webkit-transform:scale(1)}}.layui-m-layer2 .layui-m-layercont i:first-child{margin-left:0;-webkit-animation-delay:-.32s;animation-delay:-.32s}.layui-m-layer2 .layui-m-layercont i.layui-m-layerload{-webkit-animation-delay:-.16s;animation-delay:-.16s}.layui-m-layer2 .layui-m-layercont>div{line-height:22px;padding-top:7px;margin-bottom:20px;font-size:14px}.layui-m-layerbtn{display:box;display:-moz-box;display:-webkit-box;width:100%;height:50px;line-height:50px;font-size:0;border-top:1px solid #D0D0D0;background-color:#F2F2F2}.layui-m-layerbtn span{display:block;-moz-box-flex:1;box-flex:1;-webkit-box-flex:1;font-size:14px;cursor:pointer}.layui-m-layerbtn span[yes]{color:#40AFFE}.layui-m-layerbtn span[no]{border-right:1px solid #D0D0D0;border-radius:0 0 0 5px}.layui-m-layerbtn span:active{background-color:#F6F6F6}.layui-m-layerend{position:absolute;right:7px;top:10px;width:30px;height:30px;border:0;font-weight:400;background:0 0;cursor:pointer;-webkit-appearance:none;font-size:30px}.layui-m-layerend::after,.layui-m-layerend::before{position:absolute;left:5px;top:15px;content:'';width:18px;height:1px;background-color:#999;transform:rotate(45deg);-webkit-transform:rotate(45deg);border-radius:3px}.layui-m-layerend::after{transform:rotate(-45deg);-webkit-transform:rotate(-45deg)}body .layui-m-layer .layui-m-layer-footer{position:fixed;width:95%;max-width:100%;margin:0 auto;left:0;right:0;bottom:10px;background:0 0}.layui-m-layer-footer .layui-m-layercont{padding:20px;border-radius:5px 5px 0 0;background-color:rgba(255,255,255,.8)}.layui-m-layer-footer .layui-m-layerbtn{display:block;height:auto;background:0 0;border-top:none}.layui-m-layer-footer .layui-m-layerbtn span{background-color:rgba(255,255,255,.8)}.layui-m-layer-footer .layui-m-layerbtn span[no]{color:#FD482C;border-top:1px solid #c2c2c2;border-radius:0 0 5px 5px}.layui-m-layer-footer .layui-m-layerbtn span[yes]{margin-top:10px;border-radius:5px}body .layui-m-layer .layui-m-layer-msg{width:auto;max-width:90%;margin:0 auto;bottom:-150px;background-color:rgba(0,0,0,.7);color:#fff}.layui-m-layer-msg .layui-m-layercont{padding:10px 20px} \ No newline at end of file +/** + * layui-v2.5.6 MIT License By https://www.layui.com + * 这是Layui框架版本2.5.6的相关代码声明,表明采用MIT许可协议,版权归属于https://www.layui.com网站 + */ + +/* 全局元素样式重置 */ +blockquote, body, button, dd, div, dl, dt, form, h1, h2, h3, h4, h5, h6, input, legend, li, ol, p, td, textarea, th, ul { + margin: 0; + padding: 0; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); + /* 清除元素默认内外边距,移动端点击时去除高亮显示效果 */ +} + +html { + font: 12px 'Helvetica Neue', 'PingFang SC', STHeitiSC-Light, Helvetica, Arial, sans-serif; + -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: 100%; + /* 设置html的字体族、字号,并进行文本大小适配调整 */ +} + +a, button, input { + -webkit-tap-highlight-color: rgba(255, 0, 0, 0); + /* 去除点击时的默认高亮效果 */ +} + +a { + text-decoration: none; + background: 0 0; + /* 去除链接默认下划线和背景 */ +} + +a:active, a:hover { + outline: 0; + /* 去除链接激活、悬停时的轮廓线 */ +} + +table { + border-collapse: collapse; + border-spacing: 0; + /* 让表格边框合并,单元格间距设为0 */ +} + +li { + list-style: none; + /* 去除列表默认的项目符号样式 */ +} + +b, strong { + font-weight: 700; + /* 设置加粗文本元素的字体粗细 */ +} + +h1, h2, h3, h4, h5, h6 { + font-weight: 500; + /* 设置各级标题的字体粗细 */ +} + +address, cite, dfn, em, var { + font-style: normal; + /* 规范这些元素的字体样式 */ +} + +dfn { + font-style: italic; + /* 特别设置dfn元素为斜体样式 */ +} + +sub, sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; + /* 设置上下标元素的字号、行高、相对位置和垂直对齐方式 */ +} + +img { + border: 0; + vertical-align: bottom; + /* 去除图片边框,设置垂直对齐方式为底部对齐 */ +} + +.layui-inline, input, label { + vertical-align: middle; + /* 让相关元素垂直居中对齐 */ +} + +/* 表单元素相关样式 */ +button, input, optgroup, select, textarea { + color: inherit; + font: inherit; + margin: 0; + outline: 0; + /* 表单元素继承颜色、字体,去除默认外边距和轮廓 */ +} + +button, select { + text-transform: none; + /* 保持表单元素文本原始大小写状态 */ +} + +select { + -webkit-appearance: none; + border: none; + /* 去除select下拉框默认样式和边框 */ +} + +input { + line-height: normal; + /* 保证输入框文本行高正常 */ +} + +input[type=checkbox], input[type=radio] { + box-sizing: border-box; + padding: 0; + /* 针对复选框、单选框设置盒模型和内边距 */ +} + +input[type=number]::-webkit-inner-spin-button, input[type=number]::-webkit-outer-spin-button { + height: auto; + /* 控制数字输入框的增减按钮样式 */ +} + +input[type=search] { + -webkit-appearance: textfield; + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; + box-sizing: content-box; + /* 设置搜索输入框的外观和盒模型 */ +} + +input[type=search]::-webkit-search-cancel-button, input[type=search]::-webkit-search-decoration { + -webkit-appearance: none; + /* 去除搜索输入框相关按钮的默认样式 */ +} + +/* 字体图标相关样式 */ +@font-face { + font-family: layui-icon; + src: url(../font/iconfont.eot?v=1.0.7); + src: url(../font/iconfont.eot?v=1.0.7#iefix) format('embedded-opentype'), + url(../font/iconfont.woff?v=1.0.7) format('woff'), + url(../font/iconfont.ttf?v=1.0.7) format('truetype'), + url(../font/iconfont.svg?v=1.0.7#iconfont) format('svg'); + /* 定义layui-icon字体图标,指定不同格式的字体文件路径 */ +} + +.layui-icon { + font-family: layui-icon!important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + /* 设置使用layui-icon字体图标的元素的字号、样式等属性 */ +} + +/* 盒模型及布局相关样式 */ +.layui-box,.layui-box * { + -webkit-box-sizing: content-box!important; + -moz-box-sizing: content-box!important; + box-sizing: content-box!important; + /* 设置类及其后代元素采用内容盒模型 */ +} + +.layui-border-box,.layui-border-box * { + -webkit-box-sizing: border-box!important; + -moz-box-sizing: border-box!important; + box-sizing: border-box!important; + /* 设置类及其后代元素采用边框盒模型 */ +} + +.layui-inline { + position: relative; + display: inline-block; + *display: inline; + *zoom: 1; + /* 让元素以行内块方式显示(解决部分浏览器兼容问题) */ +} + +.layui-edge,.layui-upload-iframe { + position: absolute; + width: 0; + height: 0; + /* 用于一些需要绝对定位且宽高为0的元素(可能用于绘制边界等用途) */ +} + +.layui-elip { + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; + /* 文本溢出时显示省略号的样式设置 */ +} + +.layui-unselect { + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + /* 禁止元素被用户选择,在不同浏览器下设置相应属性 */ +} + +.layui-disabled,.layui-disabled:active { + background-color: #d2d2d2!important; + color: #fff!important; + cursor: not-allowed!important; + /* 设置禁用状态元素的背景色、颜色和鼠标指针样式 */ +} + +.layui-circle { + border-radius: 100%; + /* 让元素呈现圆形样式 */ +} + +.layui-show { + display: block!important; + /* 用于显示元素的类 */ +} + +.layui-hide { + display: none!important; + /* 用于隐藏元素的类 */ +} + +.layui-upload-iframe { + border: 0; + visibility: hidden; + /* 可能用于上传相关的隐藏iframe的样式设置 */ +} + +.layui-upload-enter { + border: 1px solid #009E94; + background-color: #009E94; + color: #fff; + -webkit-transform: scale(1.1); + transform: scale(1.1); + /* 可能用于上传相关的特定元素样式(比如鼠标悬停等交互态) */ +} + +/* 动画相关样式 */ +@-webkit-keyframes layui-m-anim-scale { + 0% { + opacity: 0; + -webkit-transform: scale(.5); + transform: scale(.5); + } + 100% { + opacity: 1; + -webkit-transform: scale(1); + transform: scale(1); + } +} + +@keyframes layui-m-anim-scale { + 0% { + opacity: 0; + -webkit-transform: scale(.5); + transform: scale(.5); + } + 100% { + opacity: 1; + -webkit-transform: scale(1); + transform: scale(1); + } +} + +.layui-m-anim-scale { + animation-name: layui-m-anim-scale; + -webkit-animation-name: layui-m-anim-scale; + /* 定义元素淡入并放大显示的动画效果类 */ +} + +@-webkit-keyframes layui-m-anim-up { + 0% { + opacity: 0; + -webkit-transform: translateY(800px); + transform: translateY(800px); + } + 100% { + opacity: 1; + -webkit-transform: translateY(0); + transform: translateY(0); + } +} + +@keyframes layui-m-anim-up { + 0% { + opacity: 0; + -webkit-transform: translateY(800px); + transform: translateY(800px); + } + 100% { + opacity: 1; + -webkit-transform: translateY(0); + transform: translateY(0); + } +} + +.layui-m-anim-up { + -webkit-animation-name: layui-m-anim-up; + animation-name: layui-m-anim-up; + /* 定义元素从下方移入的动画效果类 */ +} + +@-webkit-keyframes layui-m-anim-left { + 0% { + -webkit-transform: translateX(100%); + transform: translateX(100%); + } + 100% { + -webkit-transform: translateX(0); + transform: translateX(0); + } +} + +@keyframes layui-m-anim-left { + 0% { + -webkit-transform: translateX(100%); + transform: translateX(100%); + } + 100% { + -webkit-transform: translateX(0); + transform: translateX(0); + } +} + +.layui-m-anim-left { + -webkit-animation-name: layui-m-anim-left; + animation-name: layui-m-anim-left; + /* 定义元素从左侧移入的动画效果类 */ +} + +@-webkit-keyframes layui-m-anim-right { + 0% { + -webkit-transform: translateX(-100%); + transform: translateX(-100%); + } + 100% { + -webkit-transform: translateX(0); + transform: translateX(0); + } +} + +@keyframes layui-m-anim-right { + 0% { + -webkit-transform: translateX(-100%); + transform: translateX(-100%); + } + 100% { + -webkit-transform: translateX(0); + transform: translateX(0); + } +} + +.layui-m-anim-right { + -webkit-animation-name: layui-m-anim-right; + animation-name: layui-m-anim-right; + /* 定义元素从右侧移入的动画效果类 */ +} + +@-webkit-keyframes layui-m-anim-lout { + 0% { + -webkit-transform: translateX(0); + transform: translateX(0); + } + 100% { + -webkit-transform: translateX(-100%); + transform: translateX(-100%); + } +} + +@keyframes layui-m-anim-lout { + 0% { + -webkit-transform: translateX(0); + transform: translateX(0); + } + 100% { + -webkit-transform: translateX(-100%); + transform: translateX(-100%); + } +} + +.layui-m-anim-lout { + -webkit-animation-name: layui-m-anim-lout; + animation-name: layui-m-anim-lout; + /* 定义元素向左侧移出的动画效果类 */ +} + +@-webkit-keyframes layui-m-anim-rout { + 0% { + -webkit-transform: translateX(0); + transform: translateX(0); + } + 100% { + -webkit-transform: translateX(100%); + transform: translateX(100%); + } +} + +@keyframes layui-m-anim-rout { + 0% { + -webkit-transform: translateX(0); + transform: translateX(0); + } + 100% { + -webkit-transform: translateX(100%); + transform: translateX(100%); + } +} + +.layui-m-anim-rout { + -webkit-animation-name: layui-m-anim-rout; + animation-name: layui-m-anim-rout; + /* 定义元素向右侧移出的动画效果类 */ +} + +/* 弹层(Layer)相关样式 */ +.layui-m-layer { + position: relative; + z-index: 19891014; + /* 弹层的外层容器,设置相对定位和较高的z-index值 */ +} + +.layui-m-layer * { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; + /* 弹层内部元素采用内容盒模型 */ +} + +.layui-m-layermain,.layui-m-layershade { + position: fixed; + left: 0; + top: 0; + width: 100%; + height: 100%; + /* 弹层主体容器和遮罩层采用固定定位铺满整个页面 */ +} + +.layui-m-layershade { + background-color: rgba(0, 0, 0,.7); + pointer-events: auto; + /* 遮罩层设置背景颜色及透明度,允许触发事件 */ +} + +.layui-m-layermain { + display: table; + font-family: Helvetica, arial, sans-serif; + pointer-events: none; + /* 弹层主体容器以表格形式布局,设置字体族,禁止触发事件 */ +} + +.layui-m-layermain.layui-m-layersection { + display: table-cell; + vertical-align: middle; + text-align: center; + /* 用于让弹层内容在垂直方向居中显示 */ +} + +.layui-m-layerchild { + position: relative; + display: inline-block; + text-align: left; + background-color: #fff; + font-size: 14px; + border-radius: 5px; + box-shadow: 0 0 8px rgba(0, 0, 0,.1); + pointer-events: auto; + -webkit-overflow-scrolling: touch; + -webkit-animation-fill-mode: both; + animation-fill-mode: both; + -webkit-animation-duration:.2s; + animation-duration:.2s; + /* 弹层子元素的通用样式,如布局、背景、边框、阴影等,以及动画相关设置 */ +} + +.layui-m-layer0.layui-m-layerchild { + width: 90%; + max-width: 640px; + /* 特定类型(layui-m-layer0)弹层子元素的宽度设置 */ +} + +.layui-m-layer1.layui-m-layerchild { + border: none; + border-radius: 0; + /* 另一种类型(layui-m-layer1)弹层子元素的边框等样式设置 */ +} + +.layui-m-layer2.layui-m-layerchild { + width: auto; + max-width: 260px; + min-width: 40px; + border: none; + background: 0 0; + box-shadow: none; + color: #fff; + /* 又一种类型(layui-m-layer2)弹层子元素的样式设置,常用于加载等提示弹层 */ +} + +.layui-m-layerchild h3 { + padding: 0 10px; + height: 60px; + line-height: 60px; + font-size: 16px; + font-weight: 400; + border-radius: 5px 5px 0 0; + text-align: center; + /* 弹层标题部分的样式设置,如内边距、高度、行高、字号等 */ +} + +.layui-m-layerbtn span,.layui-m-layerchild h3 { + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; + /* 弹层按钮文本和标题文本溢出时的处理样式 */ +} + +.layui-m-layercont { + padding: 50px 30px; + line-height: 22px; + text \ No newline at end of file diff --git a/web/css/login.css b/web/css/login.css index eff01b5..c2f9907 100644 --- a/web/css/login.css +++ b/web/css/login.css @@ -1,11 +1,19 @@ -@charset "utf-8"; +/* + * @charset "utf-8"; + * 声明该CSS文件使用的字符编码为utf-8,确保能正确解析文件中的各种字符,包括中文等特殊字符。 + */ body { background: url("../images/bg.jpg"); + /* 设置页面背景图片的路径,这里图片位于相对于当前CSS文件的images文件夹下,文件名为bg.jpg */ background-position: center; + /* 让背景图片在水平和垂直方向都居中显示 */ background-size: cover; + /* 使背景图片自适应铺满整个页面可视区域,可能会根据页面尺寸拉伸或缩放图片以完全覆盖 */ padding-bottom: 0px; + /* 将body元素底部的内边距设置为0像素,控制页面底部空白区域大小等布局效果 */ } + .layadmin-user-login-icon { position: absolute; left: 1px; @@ -14,7 +22,22 @@ body { line-height: 36px; text-align: center; color: #d2d2d2; + /* + * 以下是对该类选择器样式的详细解释: + * position: absolute; 将元素设置为绝对定位,它会相对于最近的已定位祖先元素(如果没有则相对于html元素)来确定位置。 + * left: 1px; 元素距离左侧边界1像素的距离。 + * top: 1px; 元素距离顶部边界1像素的距离。 + * width: 38px; 设置元素的宽度为38像素。 + * line-height: 36px; 定义行高为36像素,影响文本在垂直方向上的排版。 + * text-align: center; 让元素内部的文本在水平方向居中对齐。 + * color: #d2d2d2; 设置文本的颜色为指定的灰色(十六进制颜色值表示)。 + */ } -.login-main .layui-input { + +.login-main.layui-input { padding-left: 38px; + /* + * 选择类名为login-main下的所有拥有layui-input类的元素,给它们设置左侧内边距为38像素, + * 可能是为了给这些输入框等元素预留一定的空间,比如放置图标之类的元素。 + */ } \ No newline at end of file diff --git a/web/css/style.css b/web/css/style.css index 5744426..38ae1dd 100644 --- a/web/css/style.css +++ b/web/css/style.css @@ -1,6 +1,10 @@ -@charset "utf-8"; +/* + * @charset "utf-8"; + * 声明该CSS文件使用的字符编码为utf-8,确保文件中的各种字符(如中文等)能被正确解析和显示。 + */ -.layui-layout-admin .my-header { +/* 针对layui布局下的自定义头部样式 */ +.layui-layout-admin.my-header { position: fixed; top: 0; left: 0; @@ -8,9 +12,19 @@ height: 60px; background: #393D49; z-index: 2; -} - -.layui-layout-admin .my-header .my-header-logo { + /* + * position: fixed; 将元素固定定位,使其相对于浏览器窗口固定位置,不会随页面滚动而移动。 + * top: 0; 距离浏览器窗口顶部0像素,即紧贴顶部显示。 + * left: 0; 距离浏览器窗口左侧0像素,即从最左边开始显示。 + * width: 100%; 占据整个浏览器窗口的宽度。 + * height: 60px; 设置头部高度为60像素。 + * background: #393D49; 定义头部的背景颜色为指定的深灰色(十六进制颜色值表示)。 + * z-index: 2; 设置元素的堆叠顺序,值越大越在上面,这里确保头部在一些其他元素之上显示。 + */ +} + +/* layui布局下头部中自定义的logo样式 */ +.layui-layout-admin.my-header.my-header-logo { display: inline-block; width: auto; height: 30px; @@ -19,31 +33,60 @@ line-height: 30px; padding: 15px; vertical-align: top; -} - -.layui-layout-admin .my-header img.my-header-logo { + /* + * display: inline-block; 让元素以行内块级元素显示,既能像行内元素一样在一行排列,又能设置宽高。 + * width: auto; 宽度自动适应内容宽度。 + * height: 30px; 设置元素高度为30像素。 + * color: white; 设置文本颜色为白色,与深色背景形成对比。 + * font-size: 18px; 定义文本字号为18像素。 + * line-height: 30px; 行高与元素高度一致,使文本垂直居中。 + * padding: 15px; 在元素四周添加内边距,增加元素内部空间感。 + * vertical-align: top; 设置元素垂直对齐方式为顶部对齐,常用于行内块元素的垂直对齐调整。 + */ +} + +/* layui布局下头部中作为图片的logo样式 */ +.layui-layout-admin.my-header img.my-header-logo { width: 150px; height: 40px; text-align: center; line-height: 40px; padding: 10px; border: none; -} - + /* + * 针对类名为my-header-logo的图片元素进行样式设置: + * width: 150px; 定义图片宽度为150像素。 + * height: 40px; 设置图片高度为40像素。 + * text-align: center; 让图片内如果有文本(通常这种情况较少)在水平方向居中对齐,这里更多是一种统一的样式设置习惯。 + * line-height: 40px; 使图片在垂直方向上文本(同样通常较少)能有合适的排版,这里也是一种样式规范设定。 + * padding: 10px; 在图片四周添加内边距,影响图片在布局中的占位空间。 + * border: none; 去除图片默认的边框(如果有的话)。 + */ +} + +/* 以下是名为my-header-btn的类选择器样式,可能用于头部的按钮相关元素 */ /* index */ .my-header-btn { display: inline-block; width: auto; height: 100%; line-height: 60px; + /* + * display: inline-block; 以行内块方式显示元素,方便布局。 + * width: auto; 宽度自动根据内容自适应。 + * height: 100%; 高度与父元素(可能是头部元素)高度一致,这里应该是占满整个头部高度的垂直空间。 + * line-height: 60px; 行高与元素高度相同,便于内部文本垂直居中对齐,使按钮等内容在垂直方向上看起来更规整。 + */ } -.my-header-btn .layui-btn .layui-icon { +.my-header-btn.layui-btn.layui-icon { margin-right: 0; + /* 针对同时具有layui-btn和layui-icon类的元素(可能是layui框架中的按钮图标元素),将其右侧外边距设置为0,调整图标与其他元素的间距 */ } .my-header-user-nav { float: right; + /* 让该元素(可能是包含用户相关操作的导航元素)向右浮动,使其在头部靠右排列,常用于页面头部的用户信息、操作按钮等布局 */ } .my-header-user-nav img { @@ -53,22 +96,40 @@ line-height: 40px; border: none; border-radius: 5px; + /* + * 对用户导航中的图片元素进行样式设置: + * width: 40px; 设置图片宽度为40像素。 + * height: 40px; 定义图片高度为40像素,使其呈现正方形。 + * text-align: center; 水平方向文本居中对齐(通常图片内无文本,但保持样式统一)。 + * line-height: 40px; 垂直方向文本排版(同样一般无文本,但规范样式)。 + * border: none; 去除图片边框。 + * border-radius: 5px; 给图片设置圆角,使其外观更圆润,常用于头像等图片展示,增加美观度。 + */ } -.my-header-user-nav .layui-nav-item a.name { - padding-left: 5px !important; +.my-header-user-nav.layui-nav-item a.name { + padding-left: 5px!important; + /* 针对用户导航中类名为layui-nav-item下的a元素且类名为name的元素(可能是显示用户名之类的文本元素),强制设置左侧内边距为5像素,调整文本与其他元素的间距 */ } .my-header ul.layui-nav { display: inline-block; vertical-align: top; border-radius: 0; + /* + * 针对头部中具有layui-nav类的ul列表元素进行样式设置: + * display: inline-block; 以行内块方式显示列表,便于与其他元素在同一行排列布局。 + * vertical-align: top; 垂直对齐方式为顶部对齐,调整列表与其他行内块元素在垂直方向上的对齐情况。 + * border-radius: 0; 去除列表默认的边框圆角效果(如果有),使其外观更规整。 + */ } .my-header ul.layui-nav li a { max-height: 60px; + /* 限制头部导航列表中每个列表项(li)内链接(a)元素的最大高度为60像素,可能是为了保证整体头部布局的一致性和美观性 */ } +/* 侧边栏样式 */ .my-side { position: fixed; top: 60px; @@ -76,21 +137,35 @@ width: 200px; z-index: 2; overflow-x: hidden; + /* + * position: fixed; 固定定位侧边栏,使其在页面滚动时位置固定。 + * top: 60px; 距离浏览器窗口顶部60像素,刚好在头部下方显示。 + * bottom: 0; 距离浏览器窗口底部0像素,使其占满页面垂直方向剩余空间。 + * width: 200px; 设置侧边栏宽度为200像素。 + * z-index: 2; 定义堆叠顺序,确保在合适的层级显示,可能在主体内容之上等情况。 + * overflow-x: hidden; 隐藏水平方向的溢出内容,防止侧边栏内容超出宽度时出现滚动条等情况。 + */ } -.my-side .layui-nav { +.my-side.layui-nav { border-radius: 0; min-height: 100%; + /* + * 针对侧边栏内的layui-nav类元素(通常是导航相关),去除边框圆角效果,并设置最小高度为100%,使其占满侧边栏的垂直空间,保证内容完整显示。 + */ } -.my-side ul.layui-nav li a i, .layui-nav .layui-nav-child a i, .layui-nav .layui-nav-item a i, .layui-tab-card > .layui-tab-title li span i { +.my-side ul.layui-nav li a i,.layui-nav.layui-nav-child a i,.layui-nav.layui-nav-item a i,.layui-tab-card >.layui-tab-title li span i { margin-right: 5px; + /* 对侧边栏导航、子导航、普通导航项以及选项卡标题中的图标元素(i标签)统一设置右侧外边距为5像素,调整图标与文本的间距,使布局更美观 */ } .my-side ul.layui-nav li dl dd a i { margin-left: 15px; + /* 针对侧边栏导航中dl列表下dd元素内的图标元素(i标签),设置左侧外边距为15像素,调整图标在这些特定元素内的位置布局 */ } +/* 页面主体内容区域样式 */ .my-body { position: fixed; top: 60px; @@ -99,10 +174,20 @@ right: 0; z-index: 1; overflow: hidden; + /* + * position: fixed; 固定定位主体内容区域,使其位置固定。 + * top: 60px; 位于头部下方60像素处开始显示。 + * bottom: 0; 占满页面底部剩余垂直空间。 + * left: 200px; 距离浏览器窗口左侧200像素,即从侧边栏右侧开始显示。 + * right: 0; 占满页面右侧剩余水平空间。 + * z-index: 1; 设置堆叠顺序,通常在头部、侧边栏等元素之后显示。 + * overflow: hidden; 隐藏超出该区域的内容,避免出现滚动条等情况,可能后续会通过内部元素的滚动设置来处理内容过多的情况。 + */ } .body { padding: 10px; + /* 给类名为body的元素设置内边距为10像素,在元素内部四周增加一定空间,方便内容排版,避免内容紧贴边界 */ } .frame-main { @@ -112,19 +197,30 @@ height: 433px; background-color: #edededbf; backdrop-filter: blur(20px); + /* + * margin-top: -210px; 将元素向上移动一定距离,这里结合top: 50%可以使其在垂直方向上居中显示(具体根据父元素等情况综合来看)。 + * top: 50%; 垂直方向上位于父元素(或相对定位的参考元素)的中间位置。 + * position: relative; 设置相对定位,方便基于自身原本位置进行一些偏移等布局调整。 + * height: 433px; 定义元素高度为433像素。 + * background-color: #edededbf; 设置背景颜色为带一定透明度的灰色(通过rgba形式表示颜色和透明度)。 + * backdrop-filter: blur(20px); 给元素添加背景模糊效果,模糊程度为20像素,常用于营造出一种毛玻璃等特殊视觉效果。 + */ } -.my-body .layui-tab, .my-body .layui-tab .layui-tab-content { +.my-body.layui-tab,.my-body.layui-tab.layui-tab-content { margin: 0; padding: 0; + /* 去除主体内容区域内选项卡(layui-tab)及其内容区域(layui-tab-content)的默认外边距和内边距,方便进行自定义的布局和样式调整 */ } -.my-body .layui-tab .layui-tab-title li:first-child > i { +.my-body.layui-tab.layui-tab-title li:first-child > i { display: none; + /* 隐藏主体内容区域内选项卡标题(layui-tab-title)中第一个列表项(li)内的图标元素(i标签),可能是根据设计需求对首个选项卡的图标进行特殊处理 */ } -.my-body .layui-tab, .my-body .layui-tab .layui-tab-content, .my-body .layui-tab .layui-tab-item { +.my-body.layui-tab,.my-body.layui-tab.layui-tab-content,.my-body.layui-tab.layui-tab-item { height: 100%; + /* 让主体内容区域内的选项卡、选项卡内容以及每个选项卡对应的具体内容项(layui-tab-item)都占满所在父元素的垂直空间,保证内容完整显示且布局合理 */ } .my-body iframe { @@ -132,447 +228,94 @@ height: 100%; border: none; outline: none; + /* + * 针对主体内容区域内的iframe元素(通常用于嵌入其他页面等),设置宽度和高度都为100%,使其占满父元素空间,并且去除边框和默认的轮廓线,使其外观更简洁,无缝融入页面布局。 + */ } -.layui-layout-admin .my-footer { +/* 页面底部样式 */ +.layui-layout-admin.my-footer { height: 40px; padding: 2px 0; + /* 设置底部元素的高度为40像素,并在垂直方向上添加2像素的内边距(上下内边距),用于放置底部相关的版权信息、提示文字等内容 */ } -.layui-layout-admin .my-footer p { +.layui-layout-admin.my-footer p { height: 20px; line-height: 20px; font-size: 12px; text-align: center; + /* + * 针对底部元素内的p段落元素进行样式设置: + * height: 20px; 定义段落高度为20像素。 + * line-height: 20px; 行高与段落高度一致,使文本垂直居中对齐。 + * font-size: 12px; 设置文本字号为12像素,通常用于显示较小的版权、说明等文字信息。 + * text-align: center; 让文本在水平方向居中对齐,使底部内容排版更整齐美观。 + */ } .my-btn-box { height: 38px; margin-bottom: 10px; + /* 定义一个类名为my-btn-box的元素样式,设置高度为38像素,并在底部添加10像素的外边距,可能用于按钮组等元素的整体样式控制,方便布局和外观调整 */ } .my-pay-box > div p { text-align: center; margin-bottom: 10px; + /* 针对类名为my-pay-box下的div元素内的p元素,设置文本水平居中对齐,并在底部添加10像素的外边距,常用于支付相关信息、提示等文本的排版布局 */ } -/* welcome */ +/* welcome页面相关样式 */ .my-index-main button.layui-icon { width: 100%; font-size: 20px; + /* 针对类名为my-index-main下的button元素且具有layui-icon类(可能是layui框架中的图标按钮元素),设置宽度为100%占满父元素宽度,字号为20像素,用于调整按钮图标大小和外观显示效果 */ } -.my-index-main .my-nav-btn { +.my-index-main.my-nav-btn { background: #efefef; cursor: pointer; border-radius: 2px; overflow: hidden; + /* + * 对类名为my-index-main下的my-nav-btn类元素(可能是导航相关按钮元素)进行样式设置: + * background: #efefef; 设置背景颜色为浅灰色(十六进制颜色值表示)。 + * cursor: pointer; 当鼠标悬停在元素上时,鼠标指针变为手型,提示用户可点击操作。 + * border-radius: 2px; 给按钮添加2像素的圆角效果,使其外观更圆润。 + * overflow: hidden; 隐藏超出元素范围的内容,防止因内容过多等情况出现显示异常。 + */ } -.my-index-main .my-nav-text:first-child { +.my-index-main.my-nav-text:first-child { height: 24px; line-height: 25px; font-size: 16px; font-weight: bold; + /* 针对类名为my-index-main下的my-nav-text类的第一个元素(可能是导航相关文本元素)进行样式设置: + * height: 24px; 定义元素高度为24像素。 + * line-height: 25px; 行高稍大于元素高度,使文本垂直方向有合适的排版效果。 + * font-size: 16px; 设置文本字号为16像素。 + * font-weight: bold; 将文本加粗显示,突出重要性,常用于导航栏标题等文本。 + */ } -.my-index-main .my-nav-text:last-child { +.my-index-main.my-nav-text:last-child { height: 20px; line-height: 20px; font-size: 12px; + /* 针对类名为my-index-main下的my-nav-text类的最后一个元素(可能是导航相关的辅助说明文本元素)进行样式设置: + * height: 20px; 定义元素高度为20像素。 + * line-height: 20px; 行高与元素高度一致,使文本垂直居中对齐。 + * font-size: 12px; 设置文本字号为12像素,用于显示较小的辅助说明文字。 + */ } -/* login */ - - +/* 登录页面相关样式 */ .login-box { position: fixed; top: 0; bottom: 0; left: 0; - right: 0; - margin: auto; - width: 320px; - height: 241px; - max-height: 300px; -} - -.login-body .login-box h3 { - color: #444; - font-size: 22px; - font-weight: 100; - text-align: center; -} - -.login-box .layui-input[type='number'] { - display: inline-block; - width: 50%; - vertical-align: top; -} - -.login-box img { - display: inline-block; - width: 46%; - height: 38px; - border: none; - vertical-align: top; - cursor: pointer; - margin-left: 4%; -} - -.login-box button.btn-reset { - width: 95px; -} - -.login-box button.btn-submit { - width: 190px; -} - -.login-main { - top: 0; - right: 0; - bottom: 0; - left: 0; - width: 350px; - margin: 0 auto; -} - -.login-main header { - - height: 35px; - line-height: 35px; - font-size: 30px; - font-weight: 100; - text-align: center; - padding-top: 58px; -} - -.login-main header, .login-main form, .login-main form .layui-input-inline { - margin-bottom: 15px; -} - -.login-main form .layui-input-inline, .login-main form .layui-input-inline input, .login-main form .layui-input-inline button { - width: 100%; -} - -.login-main form .login-btn { - margin-bottom: 5px; -} - -/* demo */ -.site-demo-button div { - margin: 20px 30px 10px; -} - -.site-demo-button .layui-btn { - margin: 0 7px 10px 0; -} - -/* check */ -input[type='checkbox'] { - vertical-align: middle; -} - -.my-checkbox { - -webkit-appearance: none; - position: relative; - width: 20px; - height: 20px; - background-color: #FFFFFF; - border: solid 2px #28B779; - border-radius: 2px; - background-clip: padding-box; - display: inline-block; - cursor: pointer; -} - -.my-checkbox:checked { - background-color: #28B779; - border: solid 0 #28B779; -} - -.my-checkbox:checked:before { - position: absolute; - display: inline-block; - right: 50%; - bottom: 50%; - -webkit-transform: translate(50%, 50%); - -ms-transform: translate(50%, 50%); - transform: translate(50%, 50%); - font-family: "Microsoft Yahei"; - content: "√"; - color: #FFFFFF; - font-size: 16px; - font-weight: 600; -} - -/* dblclick css */ -.dblclick-tab tr td { - height: 30px; - line-height: 30px; - padding: 0 6px; - border-radius: 2px; - cursor: pointer; -} - -.dblclick-tab tr td:hover { - color: black; - background: white; -} - -.dblclick-tab tr td i { - position: relative; - top: 2px; - display: inline-block; - margin-right: 5px; -} - -/* tips 404 */ -.my-page-box { - font-family: "Segoe UI", "Lucida Grande", Helvetica, Arial, "Microsoft YaHei", FreeSans, Arimo, "Droid Sans", "wenquanyi micro hei", "Hiragino Sans GB", "Hiragino Sans GB W3", FontAwesome, sans-serif; - text-align: center; - padding: 20px; - background-color: white; -} - -.my-page-box i { - font-size: 100px; -} - -.my-page-box h2, .my-page-box h3, .my-page-box h4, .my-page-box h5 { - font-size: 80px; -} - -.my-page-box p.msg { - color: #dce2ec; - font-size: 20px; - margin-top: 20px; -} - -.my-page-box p.text { - color: #666; - font-size: 16px; - margin-top: 20px; -} - -.my-page-box .my-btn-box { - margin-top: 20px; - margin-bottom: 20px; -} - -/* tree table */ -.my-tree-table-box .tree-table-tree-box { - width: 20%; - min-height: 200px; - display: inline-block; - vertical-align: top; - overflow-y: auto; - overflow-x: auto; -} - -.my-tree-table-box .tree-table-table-box { - display: inline-block; - vertical-align: top; - width: 79%; - margin-left: 1%; -} - -/* skin0 */ -html .skin-0 .dblclick-tips-box .layui-layer-content { - background-color: #009688; -} - -html .skin-0 .dblclick-tips-box i.layui-layer-TipsB { - border-right-color: #009688; -} - -/* skin1 */ -html .skin-1 .my-header .my-header-logo, -html .skin-1 .layui-nav .layui-nav-item a, -html .skin-1 .layui-nav .layui-nav-item a:hover { - color: #444; -} - -html .skin-1 .my-header, -html .skin-1 .layui-nav, -html .skin-1 .layui-nav-child { - background: white; -} - -html .skin-1 .layui-nav .layui-nav-item .layui-nav-child dd.layui-this a { - color: white; -} - -html .skin-1 .layui-nav .layui-nav-item .layui-nav-child dd.layui-this, -html .skin-1 .layui-nav .layui-nav-item .layui-nav-child dd.layui-this > a, -html .skin-1 .layui-nav-tree .layui-nav-item > a:hover, -html .skin-1 .layui-nav .layui-nav-item .layui-nav-child dd:hover > a, -html .skin-1 .layui-tab-title li .layui-tab-close:hover, -html .skin-1 .dblclick-tips-box .layui-layer-content { - color: white !important; - background-color: #666 !important; -} - -html .skin-1 .dblclick-tips-box i.layui-layer-TipsB { - border-right-color: #666; -} - -html .skin-1 .layui-nav .layui-nav-itemed > a { - background: #444 !important; -} - -html .skin-1 .layui-nav .layui-nav-more { - border-color: #444 transparent transparent; -} - -html .skin-1 .layui-nav .layui-nav-mored { - border-color: transparent transparent #444; -} - -/* skin2 */ -html .skin-2 .my-header .my-header-logo, -html .skin-2 .layui-nav .layui-nav-item a, -html .skin-2 .layui-nav .layui-nav-item a:hover { - color: white; -} - -html .skin-2 .my-header, -html .skin-2 .layui-nav, -html .skin-2 .layui-nav-child { - background-color: #01AAED; -} - -html .skin-2 .layui-nav .layui-nav-item .layui-nav-child dd.layui-this a { - color: white; -} - -html .skin-2 .layui-nav .layui-nav-item .layui-nav-child dd.layui-this, -html .skin-2 .layui-nav .layui-nav-item .layui-nav-child dd.layui-this > a, -html .skin-2 .layui-nav-tree .layui-nav-item > a:hover, -html .skin-2 .layui-nav .layui-nav-item .layui-nav-child dd:hover > a, -html .skin-2 .layui-tab-title li .layui-tab-close:hover, -html .skin-2 .dblclick-tips-box .layui-layer-content { - color: white !important; - background-color: #00C0F7 !important; -} - -html .skin-2 .dblclick-tips-box i.layui-layer-TipsB { - border-right-color: #00C0F7; -} - -html .skin-2 .layui-nav .layui-nav-itemed > a { - background-color: #1684af !important; -} - -/* skin0-2 */ -html .skin-2 .layui-nav .layui-nav-more, -html .skin-1 .layui-nav-tree .layui-nav-more, -html .skin-2 .layui-nav-tree .layui-nav-more { - border-color: white transparent transparent; -} - -html .skin-2 .layui-nav .layui-nav-mored, -html .skin-1 .layui-nav-itemed .layui-nav-more, -html .skin-2 .layui-nav-itemed .layui-nav-more { - border-color: transparent transparent white; -} - -/* tools */ -.fl { - float: left; -} - -.fr { - float: right; -} - -.none { - display: none; -} - -.block { - display: block; -} - -.tc { - text-align: center; -} - -.max-auto { - max-height: 450px; - overflow-y: auto; -} - -/* layui css cover */ -html body .layui-nav .layui-nav-bar { - opacity: 0 !important; - overflow: hidden !important; -} - -.layui-nav .layui-this:after, .layui-nav-bar, .layui-nav-tree .layui-nav-itemed:after { - background-color: transparent; -} - -.my-body .layui-tab-card > .layui-tab-title li { - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -.layui-layer-tips .layui-layer-content { - padding: 5px; -} - -.tooltip { - position: relative; - display: inline-block; - border-bottom: 1px dotted black; - position: relative; - left: 12%; - top: -10px; -} - -.tooltip .tooltiptext { - width: 138px; - background-color: #dad5d545; - color: #ff4545; - text-align: center; - border-radius: 6px; - padding: 5px 0; - position: absolute; - z-index: 1; -} - -.page-active-li { - background-color: #00FF00; -} - -.page-li { - float: left; - border: 1px solid #e2e2e2; - display: inline-block; - vertical-align: middle; - padding: 0 15px; - height: 28px; - line-height: 28px; - margin: 0px 2px 5px -3px; - background-color: #fff; - color: #333; - font-size: 12px; - } - -.page-li:hover { - color: #009688; -} - - -/* media */ - - -@media screen and ( max-width: 450px) { - .my-header ul.my-header-user-nav li a.pay { - display: none; - } -} - + right:0; +} \ No newline at end of file diff --git a/web/error.jsp b/web/error.jsp index b89b3a7..413d43b 100644 --- a/web/error.jsp +++ b/web/error.jsp @@ -1,11 +1,19 @@ <%@ page contentType="text/html;charset=UTF-8" language="java" %> + + - + + + + + + + ERROR @@ -13,17 +21,20 @@ body{ margin:0;padding:0; font-family: PingFang SC,Microsoft YaHei,WenQuanYi Micro Hei,sans-serif; + /* 设置页面主体的外边距和内边距为0,定义字体族,优先使用苹方字体,其次是微软雅黑、文泉驿微米黑等无衬线字体 */ } a, button.submit { color:#6E7173; text-decoration:none; - -webkit-transition:all .1s ease-in; - -moz-transition:all .1s ease-in; - -o-transition:all .1s ease-in; - transition:all .1s ease-in; + -webkit-transition:all.1s ease-in; + -moz-transition:all.1s ease-in; + -o-transition:all.1s ease-in; + transition:all.1s ease-in; + /* 设置链接和特定按钮的文本颜色为灰色,去除下划线,并且定义了在不同浏览器下过渡效果的属性,当元素状态改变时(如鼠标悬停等)会在0.1秒内平滑过渡样式变化 */ } a:hover, a:active { color:#6E7173; + /* 当鼠标悬停或者激活(比如点击按住时)链接元素时,保持文本颜色为灰色 */ } .body404{ position: absolute; @@ -31,9 +42,11 @@ width: 100%; background:#fff; background-size: auto 100%; + /* 定义一个类名为body404的元素,设置其绝对定位,占满整个页面的高度和宽度,背景颜色为白色,背景图片尺寸自适应高度为100%(这里没看到背景图片相关设置,可能后续会添加或者有遗漏情况) */ } - .body-about .body404{ + .body-about.body404{ background:#fff; + /* 当父元素有body-about类时,其内部的body404元素背景颜色设置为白色,可能用于特定页面布局区分样式 */ } .site-name404 { margin: 0 auto; @@ -47,21 +60,25 @@ -webkit-background-clip: text; -webkit-text-fill-color: transparent; -webkit-animation: hue 60s infinite linear; + /* 定义一个类名为site-name404的元素,使其水平居中,文本居中对齐,设置字间距、字体大小、行高、字体粗细等样式属性,文本颜色通过渐变背景和裁剪、填充等设置来实现渐变文字效果,并且添加了一个名为hue的动画,持续60秒,无限循环,线性播放 */ } .site-name404 h1{ margin: 0 0 10px; font-size:50px; line-height:1.2; + /* 针对site-name404内部的h1元素设置外边距、字体大小和行高样式 */ } .title404 span{ font-size: 15px; width: 2px; + /* 设置类名为title404内部的span元素的字体大小和宽度样式 */ } .title404 p{ font-size: 20px; line-height:1.5; margin:0; color:#7b8993; + /* 设置类名为title404内部的p元素的字体大小、行高、外边距和文本颜色样式 */ } .info404{ position: absolute; @@ -69,13 +86,16 @@ text-align: center; width: 100%; margin-top: -160px; + /* 定义一个类名为info404的元素,绝对定位在页面垂直居中的位置(通过top: 50%和负的外边距来实现精准居中),文本居中对齐,宽度占满整个页面 */ } - .body-about .info404{ + .body-about.info404{ margin-top: -180px; + /* 当父元素有body-about类时,其内部的info404元素调整上边距,用于特定页面布局下的垂直位置微调 */ } #footer404{ margin-top:30px; font-size:10px; + /* 设置id为footer404的元素,距离上方元素有30px的外边距,字体大小为10px */ } .index404 { margin-top: 24px; @@ -98,9 +118,11 @@ border-radius: 25px; background-color: #fff; color: #7b8993; + /* 定义类名为index404的元素样式,设置上边距、显示为行内块元素、禁止文本换行、鼠标指针变为手型、字间距、字体大小等诸多样式属性,包括边框、行高、文本对齐、高度、内边距、圆角、背景颜色和文本颜色等,用于呈现一个特定外观和交互效果的按钮样式 */ } .icon-about{ padding: 10px 0 25px; + /* 定义类名为icon-about的元素的内边距样式,用于布局调整 */ } .icon-about a{ font-size: 20px; @@ -109,6 +131,7 @@ background-color: #000; border-radius: 100%; padding: 6px; + /* 定义类名为icon-about内部的链接元素样式,设置字体大小、外边距、文本颜色、背景颜色、边框圆角和内边距,用于呈现特定外观的图标样式(可能是社交媒体图标之类的元素) */ } @-webkit-keyframes hue { from { @@ -118,21 +141,27 @@ to { -webkit-filter: hue-rotate(-360deg); } + /* 定义名为hue的动画关键帧,从初始状态(色相旋转0度)到结束状态(色相旋转-360度),用于实现文本颜色渐变的动画效果 */ } +
          Time Out
          +

          I have no secret of success but hard work.

          +
          Go back +
          - + + \ No newline at end of file diff --git a/web/filterLogin.jsp b/web/filterLogin.jsp index 9bbdda1..9e44a5f 100644 --- a/web/filterLogin.jsp +++ b/web/filterLogin.jsp @@ -1,16 +1,28 @@ <%@ page contentType="text/html;charset=UTF-8" language="java" %> + TITLE + <% - if (session.getAttribute("student")==null && session.getAttribute("teacher")==null && session.getAttribute("admin")==null) { + // 以下是一段嵌入在JSP页面中的Java代码片段,用于判断当前会话(session)中是否存在某些特定属性。 + // session.getAttribute("student")==null:检查名为"student"的会话属性是否不存在(值为null)。 + // session.getAttribute("teacher")==null:检查名为"teacher"的会话属性是否不存在(值为null)。 + // session.getAttribute("admin")==null:检查名为"admin"的会话属性是否不存在(值为null)。 + // 整体逻辑是,只有当这三个属性在会话中都不存在时,才会执行后续的转发操作。 + if (session.getAttribute("student") == null && session.getAttribute("teacher") == null && session.getAttribute("admin") == null) { %> - + + <% } %> - + \ No newline at end of file diff --git a/web/footer.jsp b/web/footer.jsp index cc3ae71..cc23887 100644 --- a/web/footer.jsp +++ b/web/footer.jsp @@ -1,7 +1,10 @@ <%@ page contentType="text/html;charset=UTF-8" language="java" %> + - + +
          \ No newline at end of file diff --git a/web/forget.jsp b/web/forget.jsp index 0af2b24..c4bba82 100644 --- a/web/forget.jsp +++ b/web/forget.jsp @@ -1,65 +1,116 @@ <%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + + + 忘记密码 + + + + - +
          +
          © 2018-2019.YOYLING.COM
          + + +
          © 2018-2019.YOYLING.COM
          + + @@ -112,6 +142,9 @@ } } } + // 定义函数 a,用于处理登录按钮的点击事件(原本可能是绑定在按钮的 click 事件上,现在通过 onclick 属性调用) + // 首先获取所有角色单选按钮,确定选中的角色值,然后获取用户名、密码、验证码输入框的值,进行非空验证 + // 如果输入框有值为空则直接返回不进行后续操作,如果都有值,则根据选中的角色设置表单的 action 属性,指向对应的登录 Servlet 并提交表单 \ No newline at end of file diff --git a/web/message.jsp b/web/message.jsp index 996949a..ebe1608 100644 --- a/web/message.jsp +++ b/web/message.jsp @@ -1,57 +1,67 @@ <%@ page contentType="text/html;charset=UTF-8" language="java" %> + <%@ page import="java.io.*,java.util.*,javax.servlet.*,javax.servlet.http.*" %> + <%@ page import="java.rmi.ServerException" %> + <%@ page import="java.nio.charset.Charset" %> <%@ page import="java.nio.charset.StandardCharsets" %> + + <% - //定义上传文件的最大字节 + //定义上传文件的最大字节数,这里设置的数值是 102400 * 102400 字节(不过这个数值看起来可能过大,也许是示例或特殊需求,通常会根据实际情况合理设置大小限制) int MAX_SIZE = 102400 * 102400; - //创建根路径的保存变量 + //创建根路径的保存变量,后续用于拼接出文件上传后的保存路径,初始时只是声明,还未赋值具体内容 String rootPath; - //声明文件读入类 + //声明文件读入类,用于从请求流中读取上传的数据,初始化为 null,后续会在合适的逻辑中进行实例化 DataInputStream in = null; + //声明文件输出流类,用于将上传的数据写入到服务器端的文件中,初始化为 null,后续会在合适的逻辑中进行实例化 FileOutputStream fileOut = null; - //取得互联网程序的绝对地址 + //取得互联网程序(即当前 Servlet 上下文对应的应用程序)的绝对地址,例如获取到类似项目部署在服务器上的根目录路径 String realPath = request.getSession().getServletContext().getRealPath("/"); + //对获取到的绝对路径进行处理,截取掉其中 "\out" 及之后的部分,可能是为了获取到项目更合适的基础路径(具体取决于项目结构和需求) realPath = realPath.substring(0, realPath.indexOf("\\out")); // out.print(realPath); - //创建文件的保存目录 + // 创建文件的保存目录,将处理后的路径与 "\web\upload\" 拼接起来,形成文件最终要保存的目录路径,这里假设项目中有这样一个用于存放上传文件的目录结构 rootPath = realPath + "\\web\\upload\\"; - //取得客户端上传的数据类型 + //取得客户端上传的数据类型,例如判断是否是 "multipart/form-data" 这种常见的文件上传类型的数据格式 String contentType = request.getContentType(); try { + // 判断客户端上传的数据类型是否是 "multipart/form-data",如果是则进行文件上传相关的处理逻辑 if (contentType.indexOf("multipart/form-data") >= 0) { - //读入上传数据 + // 读入上传数据,通过从请求输入流创建 DataInputStream 对象,以便按字节读取客户端上传的数据 in = new DataInputStream(request.getInputStream()); + // 获取上传数据的总长度(字节数),用于后续循环读取数据以及判断是否超过设定的最大字节限制 int formDataLength = request.getContentLength(); + // 检查上传的数据长度是否超过了预先定义的最大字节数,如果超过则输出提示信息并终止当前方法执行(直接返回) if (formDataLength > MAX_SIZE) { out.print("上传的字节不可以超过" + MAX_SIZE + "字节"); return; } - //保存上传文件的数据 + // 保存上传文件的数据,创建一个字节数组,大小为上传数据的总长度,用于存放从请求中读取到的字节数据 byte dataBytes[] = new byte[formDataLength]; int byteRead = 0; int totalBytesRead = 0; - //上传的数据保存在byte数组里面 + // 上传的数据保存在 byte 数组里面,通过循环从输入流中读取数据,每次读取一部分字节,直到读取完所有上传的数据 while (totalBytesRead < formDataLength) { byteRead = in.read(dataBytes, totalBytesRead, formDataLength); totalBytesRead += byteRead; } - //根据byte数组创建字符串 + // 根据 byte 数组创建字符串,使用指定的 UTF-8 编码将字节数组转换为字符串,方便后续对上传数据内容进行字符串相关的操作(比如提取文件名等信息) String file = new String(dataBytes, StandardCharsets.UTF_8); - //取得上传数据的文件名 + // 取得上传数据的文件名,通过对转换后的字符串进行一系列的截取操作,从包含文件名信息的字符串中提取出真正的文件名(处理了包含文件名的特定格式字符串) String saveFile = file.substring(file.indexOf("filename=\"") + 10); saveFile = saveFile.substring(0, saveFile.indexOf("\n")); saveFile = saveFile.substring(saveFile.lastIndexOf("\\") + 1, saveFile.indexOf("\"")); int lastIndex = contentType.lastIndexOf("="); - //取得数据的分隔字符串 + // 取得数据的分隔字符串,从上传数据的类型字符串(例如 "multipart/form-data; boundary=----WebKitFormBoundaryxxx")中提取出用于分隔不同部分的边界字符串(boundary) String boundary = contentType.substring(lastIndex + 1, contentType.length()); - //创建保存路径的文件名 + // 创建保存路径的文件名,将前面确定的文件保存目录路径与提取出的文件名拼接起来,形成完整的文件保存路径(包含文件名和目录) String fileName = rootPath + saveFile; int pos; pos = file.indexOf("filename = \""); @@ -59,30 +69,33 @@ pos = file.indexOf("\n", pos) + 1; pos = file.indexOf("\n", pos) + 1; int boundaryLocation = file.indexOf(boundary, pos) - 4; - //取得文件数据的开始的位置 + // 取得文件数据的开始的位置,通过对文件内容字符串进行一系列操作,先获取相关子字符串,再计算其字节长度来确定文件数据在整个上传数据中的起始位置 int startPos = ((file.substring(0, pos)).getBytes()).length; int endPos = ((file.substring(0, boundaryLocation)).getBytes()).length; File checkFile = new File(fileName); + // 检查要保存的文件是否已经存在,如果存在则输出提示信息并终止当前方法执行(直接返回) if (checkFile.exists()) { out.println("

          " + saveFile + "文件已经存在.

          "); return; } - //检查上传文件的目录是否存在 + // 检查上传文件的目录是否存在,如果不存在则创建该目录(包括上级目录等,会递归创建),确保文件保存的目录是存在的 File fileDir = new File(rootPath); if (!fileDir.exists()) { fileDir.mkdirs(); } - //创建文件的输出类 + // 创建文件的输出类,通过指定文件保存路径实例化 FileOutputStream,用于将上传的数据写入到对应的文件中 fileOut = new FileOutputStream(fileName); - //保存文件的数据 + // 保存文件的数据,将之前读取到的字节数组中对应文件数据部分写入到文件输出流中,实现文件在服务器端的保存 fileOut.write(dataBytes, startPos, (endPos - startPos)); fileOut.close(); out.print("文件上传成功"); } else { + // 如果上传的数据类型不是 "multipart/form-data",则输出提示信息,告知用户需要上传该类型的文件 String content = request.getContentType(); out.print("上传的文件类型是" + content + "类型的,请上传目录mutipart/form-data类型的文件"); } } catch (Exception ex) { + // 如果在文件上传过程中出现任何异常,捕获异常并抛出一个 ServerException,将原始异常的消息传递进去,方便在更上层进行统一的异常处理和日志记录等操作 throw new ServerException(ex.getMessage()); } %> diff --git a/web/register.jsp b/web/register.jsp index c58ce25..c70da9e 100644 --- a/web/register.jsp +++ b/web/register.jsp @@ -1,30 +1,45 @@ <%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + + + + 注册页 + + + + +
          @@ -39,6 +55,7 @@
          +
          @@ -46,47 +63,62 @@
          + + +
          +

          立即登录

          ${msg}
          - 忘记密码?

          + 忘记密码? +

          + +
          +
          © 2018-2019.YOYLING.COM
          + + + + diff --git a/web/upload2.jsp b/web/upload2.jsp index 37c4c0b..8339628 100644 --- a/web/upload2.jsp +++ b/web/upload2.jsp @@ -1,16 +1,28 @@ <%@ page contentType="text/html;charset=UTF-8" language="java" %> + + 文件上传 +

          文件上传

          +
          + + 选择一个文件: + +

          +
          \ No newline at end of file