diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..27083c3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +sims_war.war +out +/hello.txt +.idea diff --git a/README.md b/README.md index daead5d..d9cf5a3 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,102 @@ -# text1 +# 学生信息管理系统SIMS +纯Servlet技术的学生信息管理系统,没有SpringMVC、Spring Boot框架 +## 项目简介 + +面向教学信息以及学生及老师的信息管理要求,学生信息管理系统应运而生,它能提供线上的信息管理,从而高效的处理数据。方便方便对学生及老师各类数据进行大数据分析。 + +## 项目演示 + +> https://sims.rawchen.com + +## 技术栈 + +Jsp+Servlet+Layui+Druid+JDBC-Template+JQuery+Js+Ajax+Json+EL/JSTL+BeanUtils + +服务器: Tomcat_8.5.53 + +数据库: MySQL_5.6.46 + +开发工具:IDEA_2019.1.3 + +界面制作:Layui + +## 项目使用说明 + +1. 导入结构和数据:sims.sql + +2. 解压下载zip重命名sims-master文件夹为sims,IDEA打开该sims项目 + +3. 修改配置数据库连接文件:druid.properties + +4. 为项目添加Tomcat配置,Deployment下Application context设置为:/sims + + 管理员 帐号:admin 密码:admin + + 学生 帐号:1812123206 密码:123 + + 老师 帐号:9912123206 密码:123 + +## 功能描述 + +![](https://cdn.jsdelivr.net/gh/rawchen/JsDelivr/static/sims/01.png) + + + +## 数据库设计 + +![](https://cdn.jsdelivr.net/gh/rawchen/JsDelivr/static/sims/02.png) + + +## 代码结构 + +![](https://cdn.jsdelivr.net/gh/rawchen/JsDelivr/static/sims/03.jpg) + +![](https://cdn.jsdelivr.net/gh/rawchen/JsDelivr/static/sims/04.jpg) + + + +## 功能实现部分截图 + + +![](https://cdn.jsdelivr.net/gh/rawchen/JsDelivr/static/sims/05.png) + +![](https://cdn.jsdelivr.net/gh/rawchen/JsDelivr/static/sims/06.png) + +![](https://cdn.jsdelivr.net/gh/rawchen/JsDelivr/static/sims/07.png) + +![](https://cdn.jsdelivr.net/gh/rawchen/JsDelivr/static/sims/08.png) + +![](https://cdn.jsdelivr.net/gh/rawchen/JsDelivr/static/sims/09.png) + +![](https://cdn.jsdelivr.net/gh/rawchen/JsDelivr/static/sims/10.png) + +![](https://cdn.jsdelivr.net/gh/rawchen/JsDelivr/static/sims/11.png) + +![](https://cdn.jsdelivr.net/gh/rawchen/JsDelivr/static/sims/12.png) + +![](https://cdn.jsdelivr.net/gh/rawchen/JsDelivr/static/sims/13.png) + +![](https://cdn.jsdelivr.net/gh/rawchen/JsDelivr/static/sims/14.png) + +![](https://cdn.jsdelivr.net/gh/rawchen/JsDelivr/static/sims/15.png) + +![](https://cdn.jsdelivr.net/gh/rawchen/JsDelivr/static/sims/16.png) + +![](https://cdn.jsdelivr.net/gh/rawchen/JsDelivr/static/sims/17.png) + +![](https://cdn.jsdelivr.net/gh/rawchen/JsDelivr/static/sims/18.png) + +![](https://cdn.jsdelivr.net/gh/rawchen/JsDelivr/static/sims/19.png) + +![](https://cdn.jsdelivr.net/gh/rawchen/JsDelivr/static/sims/20.png) + +![](https://cdn.jsdelivr.net/gh/rawchen/JsDelivr/static/sims/21.png) + +![](https://cdn.jsdelivr.net/gh/rawchen/JsDelivr/static/sims/22.png) + +![](https://cdn.jsdelivr.net/gh/rawchen/JsDelivr/static/sims/23.png) + +![](https://cdn.jsdelivr.net/gh/rawchen/JsDelivr/static/sims/24.png) + +![](https://cdn.jsdelivr.net/gh/rawchen/JsDelivr/static/sims/25.png) diff --git a/screenshots/1.jpg b/screenshots/1.jpg new file mode 100644 index 0000000..8233ff3 Binary files /dev/null and b/screenshots/1.jpg differ diff --git a/screenshots/gnmk.png b/screenshots/gnmk.png new file mode 100644 index 0000000..d324c53 Binary files /dev/null and b/screenshots/gnmk.png differ diff --git a/screenshots/gnsx1.png b/screenshots/gnsx1.png new file mode 100644 index 0000000..f9b3aa1 Binary files /dev/null and b/screenshots/gnsx1.png differ diff --git a/screenshots/gnsx2.png b/screenshots/gnsx2.png new file mode 100644 index 0000000..945cd2a Binary files /dev/null and b/screenshots/gnsx2.png differ diff --git a/screenshots/gnsx3.png b/screenshots/gnsx3.png new file mode 100644 index 0000000..cd67cb5 Binary files /dev/null and b/screenshots/gnsx3.png differ diff --git a/screenshots/gnsx4.png b/screenshots/gnsx4.png new file mode 100644 index 0000000..f67f5b9 Binary files /dev/null and b/screenshots/gnsx4.png differ diff --git a/screenshots/gnsx5.png b/screenshots/gnsx5.png new file mode 100644 index 0000000..56a21ca Binary files /dev/null and b/screenshots/gnsx5.png differ diff --git a/screenshots/gnsx6.png b/screenshots/gnsx6.png new file mode 100644 index 0000000..de6310d Binary files /dev/null and b/screenshots/gnsx6.png differ diff --git a/screenshots/gnsx7.png b/screenshots/gnsx7.png new file mode 100644 index 0000000..5b5191d Binary files /dev/null and b/screenshots/gnsx7.png differ diff --git a/screenshots/jgt1.jpg b/screenshots/jgt1.jpg new file mode 100644 index 0000000..163feea Binary files /dev/null and b/screenshots/jgt1.jpg differ diff --git a/screenshots/jgt2.jpg b/screenshots/jgt2.jpg new file mode 100644 index 0000000..af8f85b Binary files /dev/null and b/screenshots/jgt2.jpg differ diff --git a/screenshots/sql.png b/screenshots/sql.png new file mode 100644 index 0000000..94c8008 Binary files /dev/null and b/screenshots/sql.png differ diff --git a/sims.iml b/sims.iml new file mode 100644 index 0000000..bd3b431 --- /dev/null +++ b/sims.iml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/sims.sql b/sims.sql new file mode 100644 index 0000000..fc6370a --- /dev/null +++ b/sims.sql @@ -0,0 +1,240 @@ +/* + Navicat Premium Data Transfer + + Source Server : MySQL + Source Server Type : MySQL + Source Server Version : 50646 + Source Host : localhost:3306 + Source Schema : sims + + Target Server Type : MySQL + Target Server Version : 50646 + File Encoding : 65001 + + Date: 28/05/2020 00:12:40 +*/ + +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for admin +-- ---------------------------- +DROP TABLE IF EXISTS `admin`; +CREATE TABLE `admin` ( + `a_id` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `a_password` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + PRIMARY KEY (`a_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact; + +-- ---------------------------- +-- Records of admin +-- ---------------------------- +INSERT INTO `admin` VALUES ('admin', 'admin'); + +-- ---------------------------- +-- Table structure for college_department_class +-- ---------------------------- +DROP TABLE IF EXISTS `college_department_class`; +CREATE TABLE `college_department_class` ( + `college` varchar(40) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `department` varchar(40) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `cclass` varchar(40) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + PRIMARY KEY (`college`, `department`, `cclass`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact; + +-- ---------------------------- +-- Records of college_department_class +-- ---------------------------- +INSERT INTO `college_department_class` VALUES ('应用数学学院', '数学', '数学1'); +INSERT INTO `college_department_class` VALUES ('应用数学学院', '数学', '数学2'); +INSERT INTO `college_department_class` VALUES ('应用数学学院', '数理基础科学', '数理基础1'); +INSERT INTO `college_department_class` VALUES ('应用数学学院', '数理基础科学', '数理基础2'); +INSERT INTO `college_department_class` VALUES ('软件工程学院', '新媒体', '18新媒体1'); +INSERT INTO `college_department_class` VALUES ('软件工程学院', '新媒体', '18新媒体2'); +INSERT INTO `college_department_class` VALUES ('软件工程学院', '软件工程', '18软件(理软)1'); +INSERT INTO `college_department_class` VALUES ('软件工程学院', '软件工程', '18软件(理软)2'); +INSERT INTO `college_department_class` VALUES ('软件工程学院', '软件工程', '19软件(理软)1'); +INSERT INTO `college_department_class` VALUES ('软件工程学院', '软件工程', '19软件(理软)2'); + +-- ---------------------------- +-- Table structure for complaint +-- ---------------------------- +DROP TABLE IF EXISTS `complaint`; +CREATE TABLE `complaint` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `cdate` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `content` varchar(2000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 48 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact; + +-- ---------------------------- +-- Records of complaint +-- ---------------------------- +INSERT INTO `complaint` VALUES (1, '2020-05-02 17:40:17', '这是第一条小吐槽哦'); +INSERT INTO `complaint` VALUES (2, '2020-05-02 18:07:51', '哈哈哈,界面不错'); +INSERT INTO `complaint` VALUES (3, '2020-05-02 18:09:33', '可以的兄弟'); +INSERT INTO `complaint` VALUES (4, '2020-05-02 18:16:24', '我测试下'); +INSERT INTO `complaint` VALUES (31, '2020-05-02 21:05:26', 'input'); +INSERT INTO `complaint` VALUES (32, '2020-05-20 19:07:45', '我我我我'); +INSERT INTO `complaint` VALUES (33, '2020-05-26 22:41:34', 'input/'); +INSERT INTO `complaint` VALUES (36, '2020-05-27 17:59:14', '

灌灌灌灌灌过过fffffdsfljhidldf

\r\n\r\n\r\n'); +INSERT INTO `complaint` VALUES (45, '2020-05-27 20:36:37', '

做个测试啊

\r\n\r\n

\"t\"

\r\n'); +INSERT INTO `complaint` VALUES (47, '2020-05-27 20:42:28', '

\"smiley\"\"laugh\"\"yes\"Nice

\r\n'); + +-- ---------------------------- +-- Table structure for course +-- ---------------------------- +DROP TABLE IF EXISTS `course`; +CREATE TABLE `course` ( + `c_id` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `c_name` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `t_id` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `c_info` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + PRIMARY KEY (`c_id`) USING BTREE, + INDEX `t_id`(`t_id`) USING BTREE, + CONSTRAINT `course_ibfk_1` FOREIGN KEY (`t_id`) REFERENCES `teacher` (`t_id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact; + +-- ---------------------------- +-- Records of course +-- ---------------------------- +INSERT INTO `course` VALUES ('c1111', 'java进阶', '9912123206', '关于java进阶的故事啊啊啊啊'); +INSERT INTO `course` VALUES ('c1113', '软件测试', '9912123206', '软件测试课程'); +INSERT INTO `course` VALUES ('cccc', 'as撒大大', '9912123206', '第三方爽肤水发顺丰所ddd'); +INSERT INTO `course` VALUES ('ye_course_124', 'JVM虚拟机性能优化', '9912123205', '巴拉巴拉巴拉巴拉巴拉巴拉巴拉巴拉巴拉巴拉'); + +-- ---------------------------- +-- Table structure for notify +-- ---------------------------- +DROP TABLE IF EXISTS `notify`; +CREATE TABLE `notify` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `notifyDate` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `notifyInfo` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 32 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact; + +-- ---------------------------- +-- Records of notify +-- ---------------------------- +INSERT INTO `notify` VALUES (3, '2020-04-24 15:36:22', '222222222222222222'); +INSERT INTO `notify` VALUES (4, '2020-04-24 15:36:22', '奥术大师所所所所所所所所所所所所所所所所所所所所所所所'); +INSERT INTO `notify` VALUES (5, '2020-04-24 15:36:22', '这是一条测试文本啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊'); +INSERT INTO `notify` VALUES (16, '2020-04-24 18:51:15', '这是4.24最新公告,仅供测试'); +INSERT INTO `notify` VALUES (17, '2020-04-24 19:40:45', '测试发布公告'); +INSERT INTO `notify` VALUES (18, '2020-04-24 19:42:40', '敖德萨大萨达大所多'); +INSERT INTO `notify` VALUES (22, '2020-04-24 20:34:00', '2111111111111'); +INSERT INTO `notify` VALUES (23, '2020-04-24 20:42:31', '4.24最新公告'); +INSERT INTO `notify` VALUES (24, '2020-04-24 20:44:30', '2020.4.24最新公告哈哈哈哈还好哈哈哈哈还好哈哈哈哈还好或或或或'); +INSERT INTO `notify` VALUES (25, '2020-04-24 20:49:35', '增加几个查询模块'); +INSERT INTO `notify` VALUES (26, '2020-04-24 21:00:14', '增加管理员公告发布'); +INSERT INTO `notify` VALUES (28, '2020-05-01 22:06:35', '增加学生端选课系统,增加修改用户信息,修改密码功能'); +INSERT INTO `notify` VALUES (29, '2020-05-13 12:20:10', '增加学生分页功能,管理端添加学生选中列表删除,添加全选'); +INSERT INTO `notify` VALUES (30, '2020-05-18 23:39:16', '增加文件传输服务,管理上传,全员可下载,任意大小类型'); +INSERT INTO `notify` VALUES (31, '2020-05-27 18:29:16', '小吐槽增加富文本编辑器,开源CKEditor 4'); + +-- ---------------------------- +-- Table structure for photo +-- ---------------------------- +DROP TABLE IF EXISTS `photo`; +CREATE TABLE `photo` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `photo_id` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `photo_name` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0.jpg', + PRIMARY KEY (`id`) USING BTREE, + INDEX `photo_id`(`photo_id`) USING BTREE, + CONSTRAINT `photo_ibfk_1` FOREIGN KEY (`photo_id`) REFERENCES `student` (`s_id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE = InnoDB AUTO_INCREMENT = 12 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact; + +-- ---------------------------- +-- Records of photo +-- ---------------------------- +INSERT INTO `photo` VALUES (10, '1812123206', '1812123206.jpg'); +INSERT INTO `photo` VALUES (11, '1812123205', '1812123205.jpg'); + +-- ---------------------------- +-- Table structure for select_course +-- ---------------------------- +DROP TABLE IF EXISTS `select_course`; +CREATE TABLE `select_course` ( + `s_id` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `c_id` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `score` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + PRIMARY KEY (`s_id`, `c_id`) USING BTREE, + INDEX `s_id`(`s_id`) USING BTREE, + INDEX `c_id`(`c_id`) USING BTREE, + CONSTRAINT `select_course_ibfk_1` FOREIGN KEY (`s_id`) REFERENCES `student` (`s_id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `select_course_ibfk_2` FOREIGN KEY (`c_id`) REFERENCES `course` (`c_id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact; + +-- ---------------------------- +-- Records of select_course +-- ---------------------------- +INSERT INTO `select_course` VALUES ('1812123205', 'c1111', '70'); +INSERT INTO `select_course` VALUES ('1812123205', 'c1113', NULL); +INSERT INTO `select_course` VALUES ('1812123205', 'cccc', NULL); +INSERT INTO `select_course` VALUES ('1812123206', 'c1111', '10'); +INSERT INTO `select_course` VALUES ('1812123206', 'c1113', NULL); +INSERT INTO `select_course` VALUES ('1812123206', 'cccc', NULL); +INSERT INTO `select_course` VALUES ('5555555555', 'ye_course_124', '60'); + +-- ---------------------------- +-- Table structure for student +-- ---------------------------- +DROP TABLE IF EXISTS `student`; +CREATE TABLE `student` ( + `s_id` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `s_college` varchar(15) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '待分配', + `s_department` varchar(15) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '待分配', + `s_class` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '待分配', + `s_name` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `s_sex` varchar(5) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `s_age` varchar(11) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `s_address` varchar(35) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `s_phone` varchar(12) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `s_email` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `s_password` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '123', + PRIMARY KEY (`s_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact; + +-- ---------------------------- +-- Records of student +-- ---------------------------- +INSERT INTO `student` VALUES ('1111111111', '软件工程学院', '软件工程', '18软件(理软)1', '陈毅', '男', '19', '福建', '12131231', '22@qq.com', '123'); +INSERT INTO `student` VALUES ('1111111112', '待分配', '待分配', '待分配', '哈哈哈', '女', '19', '敖德萨', '23136456', '123@qq.com', '123'); +INSERT INTO `student` VALUES ('1111111113', '待分配', '待分配', '待分配', '大大大', '男', '19', '福建', '231335353', '123@qq.com', '123'); +INSERT INTO `student` VALUES ('1111111114', '待分配', '待分配', '待分配', '仍然让', '男', '19', '福建', '2313124325', '123@qq.com', '123'); +INSERT INTO `student` VALUES ('1231231231', '待分配', '待分配', '待分配', '上官怡蓝', '女', '20', '西藏', '233245', '1@icloud.com', '123'); +INSERT INTO `student` VALUES ('1231238768', '应用数学学院', '数学', '数学1', '陈欣', '女', '19', '福建', '23136457', '123@qq.com', '123'); +INSERT INTO `student` VALUES ('1234567890', '软件工程学院', '软件工程', '18软件(理软)2', 'csq', '男', '20', '福建', '2313213', '123@qq.com', '123'); +INSERT INTO `student` VALUES ('1812123205', '软件工程学院', '软件工程', '18软件(理软)1', '陈善涛', '男', '20', '福建', '110', 'cst@qq.com', '123'); +INSERT INTO `student` VALUES ('1812123206', '软件工程学院', '软件工程', '18软件(理软)1', '陈双全', '男', '21', '福建省厦门市', '18259234126', '2221999792@qq.com', '123'); +INSERT INTO `student` VALUES ('1812123238', '软件工程学院', '软件工程', '18软件(理软)1', '张怀洲', '男', '23', '福建', '120', 'zhz@qq.com', '123'); +INSERT INTO `student` VALUES ('1812123299', '软件工程学院', '软件工程', '18新媒体1', '陈双全2', '女', '88', '福建省龙岩市', '18259234999', '888@qq.com', '123'); +INSERT INTO `student` VALUES ('1812123405', '软件工程学院', '软件工程', '18软件(理软)2', '王五', '男', '20', '福建省厦门市', '18323847123', '123972@qq.com', '123'); +INSERT INTO `student` VALUES ('2222222222', '软件工程学院', '软件工程', '18新媒体1', '碧华', '男', '21', '福建', '4231323', '213@qq.com', '123'); +INSERT INTO `student` VALUES ('5555555555', '待分配', '待分配', '待分配', '打发打', '女', '', '', '', '', '555'); +INSERT INTO `student` VALUES ('7777777777', '待分配', '待分配', '待分配', '李子柒', '女', '26', '福建', '124123132', '123@qq.com', '123'); + +-- ---------------------------- +-- Table structure for teacher +-- ---------------------------- +DROP TABLE IF EXISTS `teacher`; +CREATE TABLE `teacher` ( + `t_id` varchar(12) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `t_name` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `t_sex` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `t_education` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `t_title` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `t_password` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '123', + PRIMARY KEY (`t_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact; + +-- ---------------------------- +-- Records of teacher +-- ---------------------------- +INSERT INTO `teacher` VALUES ('9912123205', '叶老师', '女', '硕士', '助教', '123'); +INSERT INTO `teacher` VALUES ('9912123206', '陈老师', '男', '博士', '讲师', '123'); + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/src/dao/AdminDao.java b/src/dao/AdminDao.java new file mode 100644 index 0000000..6d87b0b --- /dev/null +++ b/src/dao/AdminDao.java @@ -0,0 +1,11 @@ +package dao; + +import domain.Admin; + +public interface AdminDao { + Admin findAdminidAndPassword(String id, String password); + + void updatePassword(String adminid, String newpassword); + + Admin findAdminById(String a_id); +} diff --git a/src/dao/CDCDao.java b/src/dao/CDCDao.java new file mode 100644 index 0000000..9e0791c --- /dev/null +++ b/src/dao/CDCDao.java @@ -0,0 +1,15 @@ +package dao; + +import domain.CDC; + +import java.util.List; + +public interface CDCDao { + List findAllCollege(); + + List findAllDepartment(); + + List findAllClass(); + + List findAll(); +} diff --git a/src/dao/ComplaintDao.java b/src/dao/ComplaintDao.java new file mode 100644 index 0000000..c36553f --- /dev/null +++ b/src/dao/ComplaintDao.java @@ -0,0 +1,11 @@ +package dao; + +import domain.Complaint; + +import java.util.List; + +public interface ComplaintDao { + List findAllComplaint(); + + void addComplaint(Complaint complaint); +} diff --git a/src/dao/CourseDao.java b/src/dao/CourseDao.java new file mode 100644 index 0000000..69cf044 --- /dev/null +++ b/src/dao/CourseDao.java @@ -0,0 +1,11 @@ +package dao; + +import domain.Course; + +public interface CourseDao { + void addOptionalCourse(Course course); + + Course findSelectCourseByCourseId(String cid); + + void deleteServiceById(String cid); +} diff --git a/src/dao/NotifyDao.java b/src/dao/NotifyDao.java new file mode 100644 index 0000000..40bd8d9 --- /dev/null +++ b/src/dao/NotifyDao.java @@ -0,0 +1,16 @@ +package dao; + +import domain.Notify; + +import java.util.List; + +public interface NotifyDao { + void add(Notify notify); + + List findNotify(); + + List findAllNotify(); + + void deleteNotifyById(String notifyid); + +} diff --git a/src/dao/PhotoDao.java b/src/dao/PhotoDao.java new file mode 100644 index 0000000..68fafd9 --- /dev/null +++ b/src/dao/PhotoDao.java @@ -0,0 +1,11 @@ +package dao; + +import domain.Photo; + +public interface PhotoDao { + void addPhoto(Photo photo); + + Photo findPhotoByPhotoId(String id); + + void updatePhoto(Photo photo); +} diff --git a/src/dao/SelectCourseDao.java b/src/dao/SelectCourseDao.java new file mode 100644 index 0000000..ef5167b --- /dev/null +++ b/src/dao/SelectCourseDao.java @@ -0,0 +1,13 @@ +package dao; + +import domain.SelectCourse; + +import java.util.List; + +public interface SelectCourseDao { + List findStudentSelectedCourseByCourseId(String cid); + + SelectCourse findScoreByCourseIdAndStudentId(String cid, String sid); + + void upDateScoreByCidAndSid(String cid, String sid, String sScore); +} diff --git a/src/dao/StudentDao.java b/src/dao/StudentDao.java new file mode 100644 index 0000000..1d9bf0f --- /dev/null +++ b/src/dao/StudentDao.java @@ -0,0 +1,41 @@ +package dao; + +import domain.Course; +import domain.SelectCourse; +import domain.Student; + +import java.util.List; +import java.util.Map; + +/** + * 学生操作的DAO + */ +public interface StudentDao { + List findByPage(int start, int rows, Map condition); + + List findAll(); + + Student findStudentidAndPassword(String id, String password); + + Student findStudentById(String s_id); + + void addStudent(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); + + int findTotalCount(Map condition); + + void addStudentAllInfo(Student updateStudent); + + List findSelectCourseAllStudent(); +} diff --git a/src/dao/TeacherDao.java b/src/dao/TeacherDao.java new file mode 100644 index 0000000..db62cbb --- /dev/null +++ b/src/dao/TeacherDao.java @@ -0,0 +1,33 @@ +package dao; + +import domain.Course; +import domain.Teacher; + +import java.util.List; + +/** + * 管理员操作的DAO + */ +public interface TeacherDao { + Teacher findTeacheridAndPassword(String id, String password); + + 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(String t_id); + + void addTeacherAllInfo(Teacher updateTeacher); + + void deleteTeacherById(String teacherid); + + void updateInfo(Teacher updateTeacher); +} diff --git a/src/dao/impl/AdminDaoImpl.java b/src/dao/impl/AdminDaoImpl.java new file mode 100644 index 0000000..eaed205 --- /dev/null +++ b/src/dao/impl/AdminDaoImpl.java @@ -0,0 +1,46 @@ +package dao.impl; + +import dao.AdminDao; +import domain.Admin; +import org.springframework.dao.DataAccessException; +import org.springframework.jdbc.core.BeanPropertyRowMapper; +import org.springframework.jdbc.core.JdbcTemplate; +import utils.JDBCUtils; + +public class AdminDaoImpl implements AdminDao { + private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource()); + + @Override + public Admin findAdminidAndPassword(String id, String password) { + try { + String sql = "select * from admin where a_id = ? and a_password = ?"; + Admin admin = template.queryForObject(sql,new BeanPropertyRowMapper(Admin.class),id,password); + return admin; + } catch (DataAccessException e) { + e.printStackTrace(); + return null; + } + } + + @Override + public void updatePassword(String adminid, String newpassword) { + try { + String sql = "update admin set a_password=? where a_id=?"; + template.update(sql,newpassword,adminid); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public Admin findAdminById(String id) { + try { + String sql = "select * from admin where a_id = ?"; + Admin admin = template.queryForObject(sql,new BeanPropertyRowMapper(Admin.class),id); + return admin; + } catch (DataAccessException e) { + e.printStackTrace(); + return null; + } + } +} diff --git a/src/dao/impl/CDCDaoImpl.java b/src/dao/impl/CDCDaoImpl.java new file mode 100644 index 0000000..a16f0a0 --- /dev/null +++ b/src/dao/impl/CDCDaoImpl.java @@ -0,0 +1,62 @@ +package dao.impl; + +import dao.CDCDao; +import domain.CDC; +import org.springframework.dao.DataAccessException; +import org.springframework.jdbc.core.BeanPropertyRowMapper; +import org.springframework.jdbc.core.JdbcTemplate; +import utils.JDBCUtils; + +import java.util.List; + +public class CDCDaoImpl implements CDCDao { + private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource()); + + @Override + public List findAllCollege() { + try { + String sql = "select distinct college from college_department_class"; + List cdcs = template.query(sql, new BeanPropertyRowMapper(CDC.class)); + return cdcs; + } catch (DataAccessException e) { + e.printStackTrace(); + return null; + } + } + + @Override + public List findAllDepartment() { + try { + String sql = "select distinct department from college_department_class"; + List cdcs = template.query(sql, new BeanPropertyRowMapper(CDC.class)); + return cdcs; + } catch (DataAccessException e) { + e.printStackTrace(); + return null; + } + } + + @Override + public List findAllClass() { + try { + String sql = "select distinct cclass from college_department_class"; + List cdcs = template.query(sql, new BeanPropertyRowMapper(CDC.class)); + return cdcs; + } catch (DataAccessException e) { + e.printStackTrace(); + return null; + } + } + + @Override + public List findAll() { + try { + String sql = "select * from college_department_class"; + List cdcs = template.query(sql, new BeanPropertyRowMapper(CDC.class)); + return cdcs; + } catch (DataAccessException e) { + e.printStackTrace(); + return null; + } + } +} diff --git a/src/dao/impl/ComplaintDaoImpl.java b/src/dao/impl/ComplaintDaoImpl.java new file mode 100644 index 0000000..da2d947 --- /dev/null +++ b/src/dao/impl/ComplaintDaoImpl.java @@ -0,0 +1,36 @@ +package dao.impl; + +import dao.ComplaintDao; +import domain.Complaint; +import org.springframework.dao.DataAccessException; +import org.springframework.jdbc.core.BeanPropertyRowMapper; +import org.springframework.jdbc.core.JdbcTemplate; +import utils.JDBCUtils; + +import java.util.List; + +public class ComplaintDaoImpl implements ComplaintDao { + private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource()); + + @Override + public List findAllComplaint() { + try { + String sql = "select * from complaint order by id DESC"; + List complaints = template.query(sql, new BeanPropertyRowMapper(Complaint.class)); + return complaints; + } catch (DataAccessException e) { + e.printStackTrace(); + return null; + } + } + + @Override + public void addComplaint(Complaint complaint) { + try { + String sql = "insert into complaint(cdate,content) values(?,?)"; + template.update(sql,complaint.getCdate(),complaint.getContent()); + } catch (DataAccessException e) { + e.printStackTrace(); + } + } +} diff --git a/src/dao/impl/CourseDaoImpl.java b/src/dao/impl/CourseDaoImpl.java new file mode 100644 index 0000000..eb2b243 --- /dev/null +++ b/src/dao/impl/CourseDaoImpl.java @@ -0,0 +1,44 @@ +package dao.impl; + +import dao.CourseDao; +import domain.Course; +import org.springframework.dao.DataAccessException; +import org.springframework.jdbc.core.BeanPropertyRowMapper; +import org.springframework.jdbc.core.JdbcTemplate; +import utils.JDBCUtils; + +public class CourseDaoImpl implements CourseDao { + private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource()); + + @Override + public void addOptionalCourse(Course c) { + try { + String sql = "insert into course values(?,?,?,?)"; + template.update(sql,c.getC_id(),c.getC_name(),c.getT_id(),c.getC_info()); + } catch (DataAccessException e) { + e.printStackTrace(); + } + } + + @Override + public Course findSelectCourseByCourseId(String cid) { + try { + String sql = "select * from course where c_id = ?"; + Course course = template.queryForObject(sql,new BeanPropertyRowMapper(Course.class),cid); + return course; + } catch (DataAccessException e) { + e.printStackTrace(); + return null; + } + } + + @Override + public void deleteServiceById(String cid) { + try { + String sql = "delete from course where c_id=?"; + template.update(sql,cid); + } catch (DataAccessException e) { + e.printStackTrace(); + } + } +} diff --git a/src/dao/impl/NotifyDaoImpl.java b/src/dao/impl/NotifyDaoImpl.java new file mode 100644 index 0000000..2b96348 --- /dev/null +++ b/src/dao/impl/NotifyDaoImpl.java @@ -0,0 +1,58 @@ +package dao.impl; + +import dao.NotifyDao; +import domain.Notify; +import org.springframework.dao.DataAccessException; +import org.springframework.jdbc.core.BeanPropertyRowMapper; +import org.springframework.jdbc.core.JdbcTemplate; +import utils.JDBCUtils; + +import java.util.List; + +public class NotifyDaoImpl implements NotifyDao { + private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource()); + + @Override + public void add(Notify notify) { + try { + String sql = "insert into notify(notifyDate,notifyInfo) values(?,?)"; + template.update(sql,notify.getNotifyDate(),notify.getNotifyInfo()); + } catch (DataAccessException e) { + e.printStackTrace(); + } + } + + @Override + public List findAllNotify() { + try { + String sql = "select * from notify order by id DESC"; + List notifys = template.query(sql, new BeanPropertyRowMapper(Notify.class)); + return notifys; + } catch (DataAccessException e) { + e.printStackTrace(); + return null; + } + } + + @Override + public void deleteNotifyById(String notifyid) { + try { + String sql = "delete from notify where id=?"; + template.update(sql,notifyid); + } catch (DataAccessException e) { + e.printStackTrace(); + } + } + + @Override + public List findNotify() { + try { + String sql = "select * from notify order by id DESC limit 3"; + List notify = template.query(sql, new BeanPropertyRowMapper(Notify.class)); + return notify; + } catch (DataAccessException e) { + e.printStackTrace(); + return null; + } + } +} diff --git a/src/dao/impl/PhotoDaoImpl.java b/src/dao/impl/PhotoDaoImpl.java new file mode 100644 index 0000000..3063863 --- /dev/null +++ b/src/dao/impl/PhotoDaoImpl.java @@ -0,0 +1,44 @@ +package dao.impl; + +import dao.PhotoDao; +import domain.Photo; +import org.springframework.dao.DataAccessException; +import org.springframework.jdbc.core.BeanPropertyRowMapper; +import org.springframework.jdbc.core.JdbcTemplate; +import utils.JDBCUtils; + +public class PhotoDaoImpl implements PhotoDao { + private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource()); + + @Override + public void addPhoto(Photo photo) { + try { + String sql = "insert into photo(photo_id,photo_name) values(?,?)"; + template.update(sql,photo.getPhotoId(),photo.getPhotoName()); + } catch (DataAccessException e) { + e.printStackTrace(); + } + } + + @Override + public Photo findPhotoByPhotoId(String id) { + try { + String sql = "select * from photo where photo_id = ?"; + Photo photo = template.queryForObject(sql,new BeanPropertyRowMapper(Photo.class),id); + return photo; + } catch (DataAccessException e) { + e.printStackTrace(); + return null; + } + } + + @Override + public void updatePhoto(Photo photo) { + try { + String sql = "update photo set photo_name=? where photo_id=?"; + template.update(sql,photo.getPhotoName(),photo.getPhotoId()); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/src/dao/impl/SelectCourseDaoImpl.java b/src/dao/impl/SelectCourseDaoImpl.java new file mode 100644 index 0000000..38a9a28 --- /dev/null +++ b/src/dao/impl/SelectCourseDaoImpl.java @@ -0,0 +1,53 @@ +package dao.impl; + +import dao.SelectCourseDao; +import domain.SelectCourse; +import org.springframework.dao.DataAccessException; +import org.springframework.jdbc.core.BeanPropertyRowMapper; +import org.springframework.jdbc.core.JdbcTemplate; +import utils.JDBCUtils; + +import java.util.List; + +public class SelectCourseDaoImpl implements SelectCourseDao { + private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource()); + + @Override + public List findStudentSelectedCourseByCourseId(String cid) { + try { + String sql = "select course.c_id,course.c_name,course.c_info,student.s_id,student.s_name,select_course.score\n" + + "from select_course,student,course\n" + + "where student.s_id=select_course.s_id\n" + + "and select_course.c_id=course.c_id\n" + + "and select_course.c_id=?"; + List scs = template.query(sql, new BeanPropertyRowMapper(SelectCourse.class),cid); + return scs; + } catch (DataAccessException e) { + e.printStackTrace(); + return null; + } + } + + @Override + public SelectCourse findScoreByCourseIdAndStudentId(String cid, String sid) { + try { + String sql = "select * from select_course where c_id=? and s_id=?"; + SelectCourse sc = template.queryForObject(sql, new BeanPropertyRowMapper(SelectCourse.class), cid, sid); + return sc; + } catch ( + DataAccessException e) { + e.printStackTrace(); + return null; + } + } + + @Override + public void upDateScoreByCidAndSid(String cid, String sid, String sScore) { + try { + String sql = "update select_course set score = ? where c_id = ? and s_id = ?"; + template.update(sql,sScore,cid,sid); + } catch (DataAccessException e) { + e.printStackTrace(); + } + } +} diff --git a/src/dao/impl/StudentDaoImpl.java b/src/dao/impl/StudentDaoImpl.java new file mode 100644 index 0000000..3f5623b --- /dev/null +++ b/src/dao/impl/StudentDaoImpl.java @@ -0,0 +1,233 @@ +package dao.impl; + +import dao.StudentDao; +import domain.Course; +import domain.SelectCourse; +import domain.Student; +import org.springframework.dao.DataAccessException; +import org.springframework.jdbc.core.BeanPropertyRowMapper; +import org.springframework.jdbc.core.JdbcTemplate; +import utils.JDBCUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Set; + +public class StudentDaoImpl implements StudentDao { + private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource()); + + @Override + public List findAll() { + //使用JDBC操作数据库 + try { + String sql = "select * from student"; + List students = template.query(sql, new BeanPropertyRowMapper(Student.class)); + return students; + } catch (DataAccessException e) { + e.printStackTrace(); + return null; + } + + } + + @Override + public Student findStudentidAndPassword(String id,String password) { + try { + String sql = "select * from student where s_id = ? and s_password = ?"; + Student student = template.queryForObject(sql,new BeanPropertyRowMapper(Student.class),id,password); + return student; + } catch (DataAccessException e) { + e.printStackTrace(); + return null; + } + } + + @Override + public Student findStudentById(String id) { + try { + String sql = "select * from student where s_id = ?"; + Student student = template.queryForObject(sql,new BeanPropertyRowMapper(Student.class),id); + return student; + } catch (DataAccessException e) { + e.printStackTrace(); + return null; + } + } + + @Override + public void addStudent(Student student) { + try { + String sql = "insert into student(s_id,s_password) values(?,?)"; + template.update(sql,student.getS_id(),student.getS_password()); + } catch (DataAccessException e) { + e.printStackTrace(); + } + } + + @Override + public void updateInfo(Student student) { + try { + String sql = "update student set s_name =?,s_sex=?,s_age=?,s_phone=?,s_email=?,s_address=?,s_college=?,s_department=?,s_class=? where s_id=?"; + template.update(sql,student.getS_name(),student.getS_sex(),student.getS_age(),student.getS_phone(),student.getS_email(),student.getS_address(),student.getS_college(),student.getS_department(),student.getS_class(),student.getS_id()); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public void updatePassword(String studentid, String newpassword) { + try { + String sql = "update student set s_password=? where s_id=?"; + template.update(sql,newpassword,studentid); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public List findAllSelectCourse(String studentid) { + try { + String sql = "select student.s_id,student.s_name,course.c_id,course.c_name,course.c_info,teacher.t_id,t_name,select_course.score\n" + + "from select_course,student,course,teacher\n" + + "where student.s_id=select_course.s_id\n" + + "and select_course.c_id=course.c_id\n" + + "and course.t_id=teacher.t_id\n" + + "and student.s_id=?"; + List scs = template.query(sql, new BeanPropertyRowMapper(SelectCourse.class),studentid); + return scs; + } catch (DataAccessException e) { + e.printStackTrace(); + return null; + } + } + + @Override + public List findAllOptionalCourse() { + try { + String sql = "select course.c_id,course.c_name,course.c_info,teacher.t_id,t_name\n" + + "from course,teacher\n" + + "where course.t_id=teacher.t_id"; + List cs = template.query(sql, new BeanPropertyRowMapper(Course.class)); + return cs; + } catch (DataAccessException e) { + e.printStackTrace(); + return null; + } + } + + @Override + public void addSelectCourse(String studentid, String courseid) { + try { + String sql = "insert into select_course(s_id,c_id) values(?,?)"; + template.update(sql,studentid,courseid); + } catch (DataAccessException e) { + e.printStackTrace(); + } + } + + @Override + public void deleteStudentById(String studentid) { + try { + String sql = "delete from student where s_id=?"; + template.update(sql,studentid); + } catch (DataAccessException e) { + e.printStackTrace(); + } + } + + @Override + public int findTotalCount(Map condition) { + //定义模板初始化sql + String sql = "select count(*) from student where 1=1"; + StringBuilder sb = new StringBuilder(sql); + //遍历map + Set keySet = condition.keySet(); + //定义参数集合 + List params = new ArrayList(); + for (String key : keySet) { + System.out.println(key); + //排除分页条件参数 + if ("currentPage".equals(key) || "rows".equals(key)) { + continue; + } + + //获取value + String value = condition.get(key)[0]; + //判断value是否有值 + if (value != null && !"".equals(value)) { + //有值 + sb.append(" and "+key+" like ? "); + params.add("%"+value+"%");//?条件的值 + } + } + System.out.println(sb.toString()); + System.out.println(params); + return template.queryForObject(sb.toString(),Integer.class,params.toArray()); + } + + @Override + public void addStudentAllInfo(Student s) { + try { + String sql = "insert into student(s_id,s_college,s_department,s_class,s_name,s_sex,s_age,s_phone,s_email,s_address) values(?,?,?,?,?,?,?,?,?,?)"; + template.update(sql,s.getS_id(),s.getS_college(),s.getS_department(),s.getS_class(),s.getS_name(),s.getS_sex(),s.getS_age(),s.getS_phone(),s.getS_email(),s.getS_address()); + } catch (DataAccessException e) { + e.printStackTrace(); + } + } + + @Override + public List findSelectCourseAllStudent() { + try { + String sql = "select student.s_id,student.s_name,course.c_id,course.c_name,course.c_info,teacher.t_id,t_name,select_course.score\n" + + "from select_course,student,course,teacher\n" + + "where student.s_id=select_course.s_id\n" + + "and select_course.c_id=course.c_id\n" + + "and course.t_id=teacher.t_id\n"; + List scs = template.query(sql, new BeanPropertyRowMapper(SelectCourse.class)); + return scs; + } catch (DataAccessException e) { + e.printStackTrace(); + return null; + } + + } + + @Override + public List findByPage(int start, int rows, Map condition) { + try { + String sql = "select * from student where 1=1"; + StringBuilder sb = new StringBuilder(sql); + //遍历map + Set keySet = condition.keySet(); + //定义参数集合 + List params = new ArrayList(); + for (String key : keySet) { + //排除分页条件参数 + if ("currentPage".equals(key) || "rows".equals(key)) { + continue; + } + + //获取value + String value = condition.get(key)[0]; + //判断value是否有值 + if (value != null && !"".equals(value)) { + //有值 + sb.append(" and "+key+" like ? "); + params.add("%"+value+"%");//?条件的值 + } + } + //添加分页查询 + sb.append(" limit ? , ?"); + //添加分页查询参数值 + params.add(start); + params.add(rows); + System.out.println(sb.toString()); + System.out.println(params); + return template.query(sb.toString(),new BeanPropertyRowMapper(Student.class),params.toArray()); + } catch (DataAccessException e) { + e.printStackTrace(); + return null; + } + } +} diff --git a/src/dao/impl/TeacherDaoImpl.java b/src/dao/impl/TeacherDaoImpl.java new file mode 100644 index 0000000..b998865 --- /dev/null +++ b/src/dao/impl/TeacherDaoImpl.java @@ -0,0 +1,137 @@ +package dao.impl; + +import dao.TeacherDao; +import domain.Course; +import domain.Student; +import domain.Teacher; +import org.springframework.dao.DataAccessException; +import org.springframework.jdbc.core.BeanPropertyRowMapper; +import org.springframework.jdbc.core.JdbcTemplate; +import utils.JDBCUtils; + +import java.util.List; + +public class TeacherDaoImpl implements TeacherDao { + private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource()); + + @Override + public Teacher findTeacheridAndPassword(String id, String password) { + try { + String sql = "select * from teacher where t_id = ? and t_password = ?"; + Teacher teacher = template.queryForObject(sql,new BeanPropertyRowMapper(Teacher.class),id,password); + return teacher; + } catch (DataAccessException e) { + e.printStackTrace(); + return null; + } + } + + @Override + public List findAll() { + try { + String sql = "select * from teacher"; + List teachers = template.query(sql, new BeanPropertyRowMapper(Teacher.class)); + return teachers; + } catch (DataAccessException e) { + e.printStackTrace(); + return null; + } + } + + @Override + public List findMySelfOptionalCourse(String t_id) { + try { + String sql = "select * from course where t_id = ?"; + List courses = template.query(sql, new BeanPropertyRowMapper(Course.class),t_id); + return courses; + } catch (DataAccessException e) { + e.printStackTrace(); + return null; + } + } + + @Override + public Course findOptionalCourseByCourseId(String cid) { + try { + String sql = "select * from course where c_id = ?"; + Course c = template.queryForObject(sql,new BeanPropertyRowMapper(Course.class),cid); + return c; + } catch (DataAccessException e) { + e.printStackTrace(); + return null; + } + } + + @Override + public void updateCourseInfo(Course updateCourse) { + try { + String sql = "update course set c_name =?,c_info=? where c_id=?"; + template.update(sql,updateCourse.getC_name(),updateCourse.getC_info(),updateCourse.getC_id()); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public void deleteCourseById(String cid) { + try { + String sql = "delete from course where c_id=?"; + template.update(sql,cid); + } catch (DataAccessException e) { + e.printStackTrace(); + } + } + + @Override + public void updatePassword(String teacherid, String newpassword) { + try { + String sql = "update teacher set t_password=? where t_id=?"; + template.update(sql,newpassword,teacherid); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public Teacher findTeacherById(String t_id) { + try { + String sql = "select * from teacher where t_id = ?"; + Teacher teacher = template.queryForObject(sql,new BeanPropertyRowMapper(Teacher.class),t_id); + return teacher; + } catch (DataAccessException e) { + e.printStackTrace(); + return null; + } + } + + @Override + public void addTeacherAllInfo(Teacher t) { + try { + String sql = "insert into teacher(t_id,t_name,t_sex,t_education,t_title) values(?,?,?,?,?)"; + template.update(sql,t.getT_id(),t.getT_name(),t.getT_sex(),t.getT_education(),t.getT_title()); + } catch (DataAccessException e) { + e.printStackTrace(); + } + } + + @Override + public void deleteTeacherById(String teacherid) { + try { + String sql = "delete from teacher where t_id=?"; + template.update(sql,teacherid); + } catch (DataAccessException e) { + e.printStackTrace(); + } + } + + @Override + public void updateInfo(Teacher t) { + try { + String sql = "update teacher set t_name =?,t_sex=?,t_education=?,t_title=? where t_id=?"; + template.update(sql,t.getT_name(),t.getT_sex(),t.getT_education(),t.getT_title(),t.getT_id()); + } catch (Exception e) { + e.printStackTrace(); + } + + } +} diff --git a/src/domain/Admin.java b/src/domain/Admin.java new file mode 100644 index 0000000..5f376b5 --- /dev/null +++ b/src/domain/Admin.java @@ -0,0 +1,30 @@ +package domain; + +public class Admin { + private String a_id; + private String a_password; + + public String getA_id() { + return a_id; + } + + public void setA_id(String a_id) { + this.a_id = a_id; + } + + public String getA_password() { + return a_password; + } + + public void setA_password(String a_password) { + this.a_password = a_password; + } + + @Override + public String toString() { + return "Admin{" + + "a_id='" + a_id + '\'' + + ", a_password='" + a_password + '\'' + + '}'; + } +} diff --git a/src/domain/CDC.java b/src/domain/CDC.java new file mode 100644 index 0000000..5379f31 --- /dev/null +++ b/src/domain/CDC.java @@ -0,0 +1,41 @@ +package domain; + +public class CDC { + + private String college; + private String department; + private String cclass; + + public String getCollege() { + return college; + } + + public void setCollege(String college) { + this.college = college; + } + + public String getDepartment() { + return department; + } + + public void setDepartment(String department) { + this.department = department; + } + + public String getCclass() { + return cclass; + } + + public void setCclass(String cclass) { + this.cclass = cclass; + } + + @Override + public String toString() { + return "CDC{" + + "college='" + college + '\'' + + ", department='" + department + '\'' + + ", cclass='" + cclass + '\'' + + '}'; + } +} diff --git a/src/domain/Complaint.java b/src/domain/Complaint.java new file mode 100644 index 0000000..98a3f55 --- /dev/null +++ b/src/domain/Complaint.java @@ -0,0 +1,40 @@ +package domain; + +public class Complaint { + private String id; + private String cdate; + private String content; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getCdate() { + return cdate; + } + + public void setCdate(String cdate) { + this.cdate = cdate; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + @Override + public String toString() { + return "Complaint{" + + "id='" + id + '\'' + + ", cdate='" + cdate + '\'' + + ", content='" + content + '\'' + + '}'; + } +} diff --git a/src/domain/Course.java b/src/domain/Course.java new file mode 100644 index 0000000..c14390d --- /dev/null +++ b/src/domain/Course.java @@ -0,0 +1,60 @@ +package domain; + +public class Course { + private String c_id; + private String c_name; + private String c_info; + private String t_id; + private String t_name; + + public String getC_id() { + return c_id; + } + + public void setC_id(String c_id) { + this.c_id = c_id; + } + + public String getC_name() { + return c_name; + } + + public void setC_name(String c_name) { + this.c_name = c_name; + } + + public String getC_info() { + return c_info; + } + + public void setC_info(String c_info) { + this.c_info = c_info; + } + + public String getT_id() { + return t_id; + } + + public void setT_id(String t_id) { + this.t_id = t_id; + } + + public String getT_name() { + return t_name; + } + + public void setT_name(String t_name) { + this.t_name = t_name; + } + +@Override + public String toString() { + return "Course{" + + "c_id='" + c_id + '\'' + + ", c_name='" + c_name + '\'' + + ", c_info='" + c_info + '\'' + + ", t_id='" + t_id + '\'' + + ", t_name='" + t_name + '\'' + + '}'; + } +} diff --git a/src/domain/FileClass.java b/src/domain/FileClass.java new file mode 100644 index 0000000..9318dec --- /dev/null +++ b/src/domain/FileClass.java @@ -0,0 +1,40 @@ +package domain; + +public class FileClass { + private String fileName; + private String filePath; + private String fileSize; + + public String getFileName() { + return fileName; + } + + public void setFileName(String fileName) { + this.fileName = fileName; + } + + public String getFilePath() { + return filePath; + } + + public void setFilePath(String filePath) { + this.filePath = filePath; + } + + public String getFileSize() { + return fileSize; + } + + public void setFileSize(String fileSize) { + this.fileSize = fileSize; + } + + @Override + public String toString() { + return "FileClass{" + + "fileName='" + fileName + '\'' + + ", filePath='" + filePath + '\'' + + ", fileSize='" + fileSize + '\'' + + '}'; + } +} diff --git a/src/domain/Notify.java b/src/domain/Notify.java new file mode 100644 index 0000000..5a3f62d --- /dev/null +++ b/src/domain/Notify.java @@ -0,0 +1,41 @@ +package domain; + +public class Notify { + + private String id; + private String notifyInfo; + private String notifyDate; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getNotifyInfo() { + return notifyInfo; + } + + public void setNotifyInfo(String notifyInfo) { + this.notifyInfo = notifyInfo; + } + + public String getNotifyDate() { + return notifyDate; + } + + public void setNotifyDate(String notifyDate) { + this.notifyDate = notifyDate; + } + + @Override + public String toString() { + return "Notify{" + + "id='" + id + '\'' + + ", notifyInfo='" + notifyInfo + '\'' + + ", notifyDate='" + notifyDate + '\'' + + '}'; + } +} diff --git a/src/domain/PageBean.java b/src/domain/PageBean.java new file mode 100644 index 0000000..f303146 --- /dev/null +++ b/src/domain/PageBean.java @@ -0,0 +1,65 @@ +package domain; + +import java.util.List; + +/** + * 分页对象 + */ +public class PageBean { + private int totalCount; //总记录数 + private int totalPage; //总页码 + private List list; //每页数据 + private int currentPage; //当前页码 + private int rows; //每页显示的记录数 + + public int getTotalCount() { + return totalCount; + } + + public void setTotalCount(int totalCount) { + this.totalCount = totalCount; + } + + public int getTotalPage() { + return totalPage; + } + + public void setTotalPage(int totalPage) { + this.totalPage = totalPage; + } + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public int getCurrentPage() { + return currentPage; + } + + public void setCurrentPage(int currentPage) { + this.currentPage = currentPage; + } + + public int getRows() { + return rows; + } + + public void setRows(int rows) { + this.rows = rows; + } + + @Override + public String toString() { + return "PageBean{" + + "totalCount=" + totalCount + + ", totalPage=" + totalPage + + ", list=" + list + + ", currentPage=" + currentPage + + ", rows=" + rows + + '}'; + } +} diff --git a/src/domain/Photo.java b/src/domain/Photo.java new file mode 100644 index 0000000..4178f04 --- /dev/null +++ b/src/domain/Photo.java @@ -0,0 +1,23 @@ +package domain; + +public class Photo { + + private String photoId; + private String photoName; + + public String getPhotoId() { + return photoId; + } + + public void setPhotoId(String photoId) { + this.photoId = photoId; + } + + public String getPhotoName() { + return photoName; + } + + public void setPhotoName(String photoName) { + this.photoName = photoName; + } +} diff --git a/src/domain/SelectCourse.java b/src/domain/SelectCourse.java new file mode 100644 index 0000000..bc8125b --- /dev/null +++ b/src/domain/SelectCourse.java @@ -0,0 +1,90 @@ +package domain; + +public class SelectCourse { + private String s_id; + private String s_name; + private String c_id; + private String c_name; + private String c_info; + private String t_id; + private String t_name; + private String score; + + public String getS_id() { + return s_id; + } + + public void setS_id(String s_id) { + this.s_id = s_id; + } + + public String getS_name() { + return s_name; + } + + public void setS_name(String s_name) { + this.s_name = s_name; + } + + public String getC_id() { + return c_id; + } + + public void setC_id(String c_id) { + this.c_id = c_id; + } + + public String getC_name() { + return c_name; + } + + public void setC_name(String c_name) { + this.c_name = c_name; + } + + public String getC_info() { + return c_info; + } + + public void setC_info(String c_info) { + this.c_info = c_info; + } + + public String getT_id() { + return t_id; + } + + public void setT_id(String t_id) { + this.t_id = t_id; + } + + public String getT_name() { + return t_name; + } + + public void setT_name(String t_name) { + this.t_name = t_name; + } + + public String getScore() { + return score; + } + + public void setScore(String score) { + this.score = score; + } + + @Override + public String toString() { + return "SelectCourse{" + + "s_id='" + s_id + '\'' + + ", s_name='" + s_name + '\'' + + ", c_id='" + c_id + '\'' + + ", c_name='" + c_name + '\'' + + ", c_info='" + c_info + '\'' + + ", t_id='" + t_id + '\'' + + ", t_name='" + t_name + '\'' + + ", score='" + score + '\'' + + '}'; + } +} diff --git a/src/domain/Student.java b/src/domain/Student.java new file mode 100644 index 0000000..166dca5 --- /dev/null +++ b/src/domain/Student.java @@ -0,0 +1,120 @@ +package domain; + +public class Student { + private String s_id; + private String s_college; + private String s_department; + private String s_class; + private String s_name; + private String s_sex; + private String s_age; + private String s_address; + private String s_phone; + private String s_email; + private String s_password; + + public String getS_id() { + return s_id; + } + + public void setS_id(String s_id) { + this.s_id = s_id; + } + + public String getS_college() { + return s_college; + } + + public void setS_college(String s_college) { + this.s_college = s_college; + } + + public String getS_department() { + return s_department; + } + + public void setS_department(String s_department) { + this.s_department = s_department; + } + + public String getS_class() { + return s_class; + } + + public void setS_class(String s_class) { + this.s_class = s_class; + } + + public String getS_name() { + return s_name; + } + + public void setS_name(String s_name) { + this.s_name = s_name; + } + + public String getS_sex() { + return s_sex; + } + + public void setS_sex(String s_sex) { + this.s_sex = s_sex; + } + + public String getS_age() { + return s_age; + } + + public void setS_age(String s_age) { + this.s_age = s_age; + } + + public String getS_address() { + return s_address; + } + + public void setS_address(String s_address) { + this.s_address = s_address; + } + + public String getS_phone() { + return s_phone; + } + + public void setS_phone(String s_phone) { + this.s_phone = s_phone; + } + + public String getS_email() { + return s_email; + } + + public void setS_email(String s_email) { + this.s_email = s_email; + } + + public String getS_password() { + return s_password; + } + + public void setS_password(String s_password) { + this.s_password = s_password; + } + + @Override + public String toString() { + return "Student{" + + "s_id='" + s_id + '\'' + + ", s_college='" + s_college + '\'' + + ", s_department='" + s_department + '\'' + + ", s_class='" + s_class + '\'' + + ", s_name='" + s_name + '\'' + + ", s_sex='" + s_sex + '\'' + + ", s_age=" + s_age + + ", s_address='" + s_address + '\'' + + ", s_phone='" + s_phone + '\'' + + ", s_email='" + s_email + '\'' + + ", s_password='" + s_password + '\'' + + '}'; + } +} diff --git a/src/domain/Teacher.java b/src/domain/Teacher.java new file mode 100644 index 0000000..63b9c15 --- /dev/null +++ b/src/domain/Teacher.java @@ -0,0 +1,70 @@ +package domain; + +public class Teacher { + private String t_id; + private String t_name; + private String t_sex; + private String t_education; + private String t_title; + private String t_password; + + public String getT_id() { + return t_id; + } + + public void setT_id(String t_id) { + this.t_id = t_id; + } + + public String getT_name() { + return t_name; + } + + public void setT_name(String t_name) { + this.t_name = t_name; + } + + public String getT_sex() { + return t_sex; + } + + public void setT_sex(String t_sex) { + this.t_sex = t_sex; + } + + public String getT_education() { + return t_education; + } + + public void setT_education(String t_education) { + this.t_education = t_education; + } + + public String getT_title() { + return t_title; + } + + public void setT_title(String t_title) { + this.t_title = t_title; + } + + public String getT_password() { + return t_password; + } + + public void setT_password(String t_password) { + this.t_password = t_password; + } + + @Override + public String toString() { + return "Teacher{" + + "t_id='" + t_id + '\'' + + ", t_name='" + t_name + '\'' + + ", t_sex='" + t_sex + '\'' + + ", t_education='" + t_education + '\'' + + ", t_title='" + t_title + '\'' + + ", t_password='" + t_password + '\'' + + '}'; + } +} diff --git a/src/druid.properties b/src/druid.properties new file mode 100644 index 0000000..34d897e --- /dev/null +++ b/src/druid.properties @@ -0,0 +1,7 @@ +driverClassName=com.mysql.jdbc.Driver +url=jdbc:mysql://127.0.0.1:3306/sims +username=root +password=root +initialSize=5 +maxActive=10 +maxWait=3000 \ No newline at end of file diff --git a/src/service/AdminService.java b/src/service/AdminService.java new file mode 100644 index 0000000..b9240d8 --- /dev/null +++ b/src/service/AdminService.java @@ -0,0 +1,18 @@ +package service; + + +import domain.Admin; + +/** + * 管理员的业务接口 + */ +public interface AdminService { + /** + * 管理员登录 + */ + Admin login(Admin admin); + + void updatePassword(String adminid, String newpassword); + + Admin findAdminById(Admin admin); +} diff --git a/src/service/CDCService.java b/src/service/CDCService.java new file mode 100644 index 0000000..13313ed --- /dev/null +++ b/src/service/CDCService.java @@ -0,0 +1,20 @@ +package service; + + +import domain.Admin; +import domain.CDC; + +import java.util.List; + +/** + * 学院专业班级的业务接口 + */ +public interface CDCService { + List findAllCollege(); + + List findAllDepartment(); + + List findAllClass(); + + List findAll(); +} diff --git a/src/service/ComplaintService.java b/src/service/ComplaintService.java new file mode 100644 index 0000000..fe9ad0f --- /dev/null +++ b/src/service/ComplaintService.java @@ -0,0 +1,14 @@ +package service; + +import domain.Complaint; + +import java.util.List; + +/** + * 小吐槽的业务接口 + */ +public interface ComplaintService { + List findAll(); + + void addComplaint(Complaint complaint); +} diff --git a/src/service/CourseService.java b/src/service/CourseService.java new file mode 100644 index 0000000..0030ea2 --- /dev/null +++ b/src/service/CourseService.java @@ -0,0 +1,11 @@ +package service; + +import domain.Course; + +public interface CourseService { + void addOptionalCourse(Course course); + + Course findSelectCourseByCourseId(String cid); + + void deleteServiceById(String cid); +} diff --git a/src/service/NotifyService.java b/src/service/NotifyService.java new file mode 100644 index 0000000..586fe45 --- /dev/null +++ b/src/service/NotifyService.java @@ -0,0 +1,23 @@ +package service; + +import domain.Notify; + +import java.util.List; + +/** + * 公告的业务接口 + */ +public interface NotifyService { + /** + * 公告发布 + */ + void addNotify(Notify notify); + + List find(); + + List findAll(); + + void deleteNotifyById(String notifyid); + + +} diff --git a/src/service/PhotoService.java b/src/service/PhotoService.java new file mode 100644 index 0000000..743b9d9 --- /dev/null +++ b/src/service/PhotoService.java @@ -0,0 +1,11 @@ +package service; + +import domain.Photo; + +public interface PhotoService { + void addPhoto(Photo photo); + + Photo findPhotoByPhotoId(String id); + + void updatePhoto(Photo photo); +} diff --git a/src/service/SelectCourseService.java b/src/service/SelectCourseService.java new file mode 100644 index 0000000..4b528ce --- /dev/null +++ b/src/service/SelectCourseService.java @@ -0,0 +1,13 @@ +package service; + +import domain.SelectCourse; + +import java.util.List; + +public interface SelectCourseService { + List findStudentSelectedCourseByCourseId(String cid); + + SelectCourse findScoreByCourseIdAndStudentId(String cid,String sid); + + void upDateScoreByCidAndSid(String cid, String sid, String sScore); +} diff --git a/src/service/StudentService.java b/src/service/StudentService.java new file mode 100644 index 0000000..f594236 --- /dev/null +++ b/src/service/StudentService.java @@ -0,0 +1,51 @@ +package service; + +import domain.Course; +import domain.PageBean; +import domain.SelectCourse; +import domain.Student; +import java.util.List; +import java.util.Map; + +/** + * 学生管理的业务接口 + */ +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(); +} diff --git a/src/service/TeacherService.java b/src/service/TeacherService.java new file mode 100644 index 0000000..2dfcc79 --- /dev/null +++ b/src/service/TeacherService.java @@ -0,0 +1,36 @@ +package service; + +import domain.Course; +import domain.Teacher; + +import java.util.List; + +/** + * 教师管理的业务接口 + */ +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/service/impl/AdminServiceImpl.java b/src/service/impl/AdminServiceImpl.java new file mode 100644 index 0000000..87f46e5 --- /dev/null +++ b/src/service/impl/AdminServiceImpl.java @@ -0,0 +1,25 @@ +package service.impl; + +import dao.AdminDao; +import dao.impl.AdminDaoImpl; +import domain.Admin; +import service.AdminService; + +public class AdminServiceImpl implements AdminService { + private AdminDao dao = new AdminDaoImpl(); + + @Override + public Admin login(Admin admin) { + return dao.findAdminidAndPassword(admin.getA_id(),admin.getA_password()); + } + + @Override + public void updatePassword(String adminid, String newpassword) { + dao.updatePassword(adminid,newpassword); + } + + @Override + public Admin findAdminById(Admin admin) { + return dao.findAdminById(admin.getA_id()); + } +} diff --git a/src/service/impl/CDCServiceImpl.java b/src/service/impl/CDCServiceImpl.java new file mode 100644 index 0000000..768d69f --- /dev/null +++ b/src/service/impl/CDCServiceImpl.java @@ -0,0 +1,32 @@ +package service.impl; + +import dao.CDCDao; +import dao.impl.CDCDaoImpl; +import domain.CDC; +import service.CDCService; + +import java.util.List; + +public class CDCServiceImpl implements CDCService { + private CDCDao dao = new CDCDaoImpl(); + + @Override + public List findAllCollege() { + return dao.findAllCollege(); + } + + @Override + public List findAllDepartment() { + return dao.findAllDepartment(); + } + + @Override + public List findAllClass() { + return dao.findAllClass(); + } + + @Override + public List findAll() { + return dao.findAll(); + } +} diff --git a/src/service/impl/ComplaintServiceImpl.java b/src/service/impl/ComplaintServiceImpl.java new file mode 100644 index 0000000..30af07b --- /dev/null +++ b/src/service/impl/ComplaintServiceImpl.java @@ -0,0 +1,22 @@ +package service.impl; + +import dao.ComplaintDao; +import dao.impl.ComplaintDaoImpl; +import domain.Complaint; +import service.ComplaintService; + +import java.util.List; + +public class ComplaintServiceImpl implements ComplaintService { + private ComplaintDao dao = new ComplaintDaoImpl(); + + @Override + public List findAll() { + return dao.findAllComplaint(); + } + + @Override + public void addComplaint(Complaint complaint) { + dao.addComplaint(complaint); + } +} diff --git a/src/service/impl/CourseServiceImpl.java b/src/service/impl/CourseServiceImpl.java new file mode 100644 index 0000000..48f6c53 --- /dev/null +++ b/src/service/impl/CourseServiceImpl.java @@ -0,0 +1,24 @@ +package service.impl; + +import dao.CourseDao; +import dao.impl.CourseDaoImpl; +import domain.Course; +import service.CourseService; + +public class CourseServiceImpl implements CourseService { + private CourseDao dao = new CourseDaoImpl(); + @Override + public void addOptionalCourse(Course course) { + dao.addOptionalCourse(course); + } + + @Override + public Course findSelectCourseByCourseId(String cid) { + return dao.findSelectCourseByCourseId(cid); + } + + @Override + public void deleteServiceById(String cid) { + dao.deleteServiceById(cid); + } +} diff --git a/src/service/impl/NotifyServiceImpl.java b/src/service/impl/NotifyServiceImpl.java new file mode 100644 index 0000000..61086cc --- /dev/null +++ b/src/service/impl/NotifyServiceImpl.java @@ -0,0 +1,32 @@ +package service.impl; + +import dao.NotifyDao; +import dao.impl.NotifyDaoImpl; +import domain.Notify; +import service.NotifyService; + +import java.util.List; + +public class NotifyServiceImpl implements NotifyService { + private NotifyDao dao = new NotifyDaoImpl(); + + @Override + public void addNotify(Notify notify) { + dao.add(notify); + } + + @Override + public List find() { + return dao.findNotify(); + } + + @Override + public List findAll() { + return dao.findAllNotify(); + } + + @Override + public void deleteNotifyById(String notifyid) { + dao.deleteNotifyById(notifyid); + } +} diff --git a/src/service/impl/PhotoServiceImpl.java b/src/service/impl/PhotoServiceImpl.java new file mode 100644 index 0000000..391570a --- /dev/null +++ b/src/service/impl/PhotoServiceImpl.java @@ -0,0 +1,25 @@ +package service.impl; + +import dao.PhotoDao; +import dao.impl.PhotoDaoImpl; +import domain.Photo; +import service.PhotoService; + +public class PhotoServiceImpl implements PhotoService { + private PhotoDao dao = new PhotoDaoImpl(); + + @Override + public void addPhoto(Photo photo) { + dao.addPhoto(photo); + } + + @Override + public Photo findPhotoByPhotoId(String id) { + return dao.findPhotoByPhotoId(id); + } + + @Override + public void updatePhoto(Photo photo) { + dao.updatePhoto(photo); + } +} diff --git a/src/service/impl/SelectCourseServiceImpl.java b/src/service/impl/SelectCourseServiceImpl.java new file mode 100644 index 0000000..0c7a2c7 --- /dev/null +++ b/src/service/impl/SelectCourseServiceImpl.java @@ -0,0 +1,27 @@ +package service.impl; + +import dao.SelectCourseDao; +import dao.impl.SelectCourseDaoImpl; +import domain.SelectCourse; +import service.SelectCourseService; + +import java.util.List; + +public class SelectCourseServiceImpl implements SelectCourseService { + private SelectCourseDao dao = new SelectCourseDaoImpl(); + + @Override + public List findStudentSelectedCourseByCourseId(String cid) { + return dao.findStudentSelectedCourseByCourseId(cid); + } + + @Override + public SelectCourse findScoreByCourseIdAndStudentId(String cid, String sid) { + return dao.findScoreByCourseIdAndStudentId(cid,sid); + } + + @Override + public void upDateScoreByCidAndSid(String cid, String sid, String sScore) { + dao.upDateScoreByCidAndSid(cid,sid,sScore); + } +} diff --git a/src/service/impl/StudentServiceImpl.java b/src/service/impl/StudentServiceImpl.java new file mode 100644 index 0000000..9fb17eb --- /dev/null +++ b/src/service/impl/StudentServiceImpl.java @@ -0,0 +1,114 @@ +package service.impl; + +import dao.StudentDao; +import dao.impl.StudentDaoImpl; +import domain.Course; +import domain.PageBean; +import domain.SelectCourse; +import domain.Student; +import service.StudentService; +import java.util.List; +import java.util.Map; + +public class StudentServiceImpl implements StudentService { + private StudentDao dao = new StudentDaoImpl(); + + @Override + public PageBean findStudentByPage(String _currentPage, String _rows, Map condition) { + + int currentPage = Integer.parseInt(_currentPage); + int rows = Integer.parseInt(_rows); + + //创建新的PageBean对象 + PageBean pb = new PageBean(); + + //设置参数 + pb.setCurrentPage(currentPage); + pb.setRows(rows); + + //调用dao查询总记录数 + int totalCount = dao.findTotalCount(condition); + pb.setTotalCount(totalCount); + + //调用dao查询List集合 + //计算开始记录的索引 + int start = (currentPage - 1) * rows; + Listlist = dao.findByPage(start,rows,condition); + pb.setList(list); + + //计算总页码 + int totalPage = (totalCount % rows) == 0 ? totalCount/rows : (totalCount/rows) + 1; + pb.setTotalPage(totalPage); + return pb; + } + + @Override + public List findAll() { + return dao.findAll(); + } + + @Override + public Student login(Student student) { + return dao.findStudentidAndPassword(student.getS_id(),student.getS_password()); + } + + @Override + public Student findStudentById(Student student) { + return dao.findStudentById(student.getS_id()); + } + + @Override + public void register(Student student) { + dao.addStudent(student); + } + + @Override + public void updateInfo(Student student) { + dao.updateInfo(student); + } + + @Override + public void updatePassword(String studentid, String newpassword) { + dao.updatePassword(studentid,newpassword); + } + + @Override + public List findAllSelectCourse(String studentid) { + return dao.findAllSelectCourse(studentid); + } + + @Override + public List findAllOptionalCourse() { + return dao.findAllOptionalCourse(); + } + + @Override + public void addSelectCourse(String studentid, String courseid) { + dao.addSelectCourse(studentid,courseid); + } + + @Override + public void deleteStudentById(String studentid) { + dao.deleteStudentById(studentid); + } + + @Override + public void deleteSelectStudent(String[] sids) { + if (sids != null && sids.length > 0) { + for (String sid: sids) { + dao.deleteStudentById(sid); + } + } + + } + + @Override + public void addStudentAllInfo(Student updateStudent) { + dao.addStudentAllInfo(updateStudent); + } + + @Override + public List findSelectCourseAllStudent() { + return dao.findSelectCourseAllStudent(); + } +} diff --git a/src/service/impl/TeacherServiceImpl.java b/src/service/impl/TeacherServiceImpl.java new file mode 100644 index 0000000..e3ff400 --- /dev/null +++ b/src/service/impl/TeacherServiceImpl.java @@ -0,0 +1,68 @@ +package service.impl; + +import dao.TeacherDao; +import domain.Course; +import domain.Teacher; +import dao.impl.TeacherDaoImpl; +import service.TeacherService; + +import java.util.List; + +public class TeacherServiceImpl implements TeacherService { + private TeacherDao dao = new TeacherDaoImpl(); + + @Override + public Teacher login(Teacher teacher) { + return dao.findTeacheridAndPassword(teacher.getT_id(),teacher.getT_password()); + } + + @Override + public List findAll() { + return dao.findAll(); + } + + @Override + public List findMySelfOptionalCourse(String T_id) { + return dao.findMySelfOptionalCourse(T_id); + } + + @Override + public Course findOptionalCourseByCourseId(String cid) { + return dao.findOptionalCourseByCourseId(cid); + } + + @Override + public void updateCourseInfo(Course updateCourse) { + dao.updateCourseInfo(updateCourse); + } + + @Override + public void deleteCourseById(String cid) { + dao.deleteCourseById(cid); + } + + @Override + public void updatePassword(String teacherid, String newpassword) { + dao.updatePassword(teacherid,newpassword); + } + + @Override + public Teacher findTeacherById(Teacher teacher) { + return dao.findTeacherById(teacher.getT_id()); + } + + @Override + public void addTeacherAllInfo(Teacher updateTeacher) { + dao.addTeacherAllInfo(updateTeacher); + } + + @Override + public void deleteTeacherById(String teacherid) { + dao.deleteTeacherById(teacherid); + } + + @Override + public void updateInfo(Teacher updateTeacher) { + dao.updateInfo(updateTeacher); + } +} diff --git a/src/utils/JDBCUtils.java b/src/utils/JDBCUtils.java new file mode 100644 index 0000000..6cd7860 --- /dev/null +++ b/src/utils/JDBCUtils.java @@ -0,0 +1,76 @@ +package utils; + +import com.alibaba.druid.pool.DruidDataSourceFactory; + +import javax.sql.DataSource; +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.Properties; + +/** + * Druid连接池工具类,将来dao层调用 + */ +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; + } +} diff --git a/src/web/servlet/admin/AddStudentInfoServlet.java b/src/web/servlet/admin/AddStudentInfoServlet.java new file mode 100644 index 0000000..8c4ad90 --- /dev/null +++ b/src/web/servlet/admin/AddStudentInfoServlet.java @@ -0,0 +1,71 @@ +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 s = new Student(); + s.setS_id(sid); + Student newStudent = service.findStudentById(s); + if (newStudent != null) { + request.setAttribute("update_msg","已存在该学生,请重新添加!"+String.format("%tT",new Date())); + 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"); + String cclass = request.getParameter("selectClass"); + if ("".equals(college)) { + college = "待分配"; + } + if ("".equals(department)) { + department = "待分配"; + } + if ("".equals(cclass)) { + cclass = "待分配"; + } + + Student updateStudent = new Student(); + + 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); + + service.addStudentAllInfo(updateStudent); + request.setAttribute("update_msg","添加成功!"+String.format("%tT",new Date())); + request.getRequestDispatcher("addStudentServlet").forward(request, response); + + } + } + + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + doPost(request,response); + } +} diff --git a/src/web/servlet/admin/AddStudentServlet.java b/src/web/servlet/admin/AddStudentServlet.java new file mode 100644 index 0000000..a20a188 --- /dev/null +++ b/src/web/servlet/admin/AddStudentServlet.java @@ -0,0 +1,40 @@ +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("/addStudentServlet") +public class AddStudentServlet extends HttpServlet { + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + request.setCharacterEncoding("utf-8"); + HttpSession session = request.getSession(); + + CDCService service2 = new CDCServiceImpl(); + 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/addStudent.jsp").forward(request,response); + } + + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + doPost(request,response); + } +} diff --git a/src/web/servlet/admin/AdminPasswordIndexServlet.java b/src/web/servlet/admin/AdminPasswordIndexServlet.java new file mode 100644 index 0000000..908e74d --- /dev/null +++ b/src/web/servlet/admin/AdminPasswordIndexServlet.java @@ -0,0 +1,19 @@ +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") +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); + } +} diff --git a/src/web/servlet/admin/AdminPasswordUpdateServlet.java b/src/web/servlet/admin/AdminPasswordUpdateServlet.java new file mode 100644 index 0000000..0a5a0cd --- /dev/null +++ b/src/web/servlet/admin/AdminPasswordUpdateServlet.java @@ -0,0 +1,55 @@ +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; + +@WebServlet("/adminPasswordUpdateServlet") +public class AdminPasswordUpdateServlet extends HttpServlet { + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + request.setCharacterEncoding("utf-8"); + HttpSession session = request.getSession(); + Admin admin= (Admin) session.getAttribute("admin"); + + 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 service= new AdminServiceImpl(); + service.updatePassword(adminid,newpassword); + + Admin newAdmin = service.findAdminById(admin); + admin = newAdmin; + session.setAttribute("admin",admin); + + request.setAttribute("update_msg", "修改成功!" + String.format("%tT", new Date())); + request.getRequestDispatcher("/WEB-INF/admin/adminUpdatePassword.jsp").forward(request, response); + } + + } + + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + doPost(request,response); + } +} diff --git a/src/web/servlet/admin/DoDeleteSelectCourseServlet.java b/src/web/servlet/admin/DoDeleteSelectCourseServlet.java new file mode 100644 index 0000000..c91b438 --- /dev/null +++ b/src/web/servlet/admin/DoDeleteSelectCourseServlet.java @@ -0,0 +1,31 @@ +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; + +@WebServlet("/doDeleteSelectCourseServlet") +public class DoDeleteSelectCourseServlet extends HttpServlet { + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + request.setCharacterEncoding("utf-8"); + HttpSession session = request.getSession(); + String cid = request.getParameter("cid"); + CourseService service = new CourseServiceImpl(); + service.deleteServiceById(cid); + request.getRequestDispatcher("/studentOptionalCourseServlet").forward(request,response); + } + + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + doPost(request,response); + } +} diff --git a/src/web/servlet/admin/UpdateStudentInfoServlet.java b/src/web/servlet/admin/UpdateStudentInfoServlet.java new file mode 100644 index 0000000..6f4b7ff --- /dev/null +++ b/src/web/servlet/admin/UpdateStudentInfoServlet.java @@ -0,0 +1,79 @@ +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 { + //封装学生对象 + 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); + } +} diff --git a/src/web/servlet/admin/UpdateStudentServlet.java b/src/web/servlet/admin/UpdateStudentServlet.java new file mode 100644 index 0000000..812fa9d --- /dev/null +++ b/src/web/servlet/admin/UpdateStudentServlet.java @@ -0,0 +1,48 @@ +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 service2 = new CDCServiceImpl(); + 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/updateStudent.jsp").forward(request,response); + } + + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + doPost(request,response); + } +} diff --git a/src/web/servlet/cdc/CDCListServlet.java b/src/web/servlet/cdc/CDCListServlet.java new file mode 100644 index 0000000..2756c6c --- /dev/null +++ b/src/web/servlet/cdc/CDCListServlet.java @@ -0,0 +1,50 @@ +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"); + + if (student != null && admin == null && teacher == null) { + request.getRequestDispatcher("/WEB-INF/student/sCDCList.jsp").forward(request, response); + } else if (admin != null && student == null && teacher == null) { + request.getRequestDispatcher("/WEB-INF/admin/aCDCList.jsp").forward(request, response); + } 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); + } +} diff --git a/src/web/servlet/complaints/AddComplaintsServlet.java b/src/web/servlet/complaints/AddComplaintsServlet.java new file mode 100644 index 0000000..3ad0368 --- /dev/null +++ b/src/web/servlet/complaints/AddComplaintsServlet.java @@ -0,0 +1,48 @@ +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); + } +} diff --git a/src/web/servlet/complaints/ComplaintListServlet.java b/src/web/servlet/complaints/ComplaintListServlet.java new file mode 100644 index 0000000..6f38867 --- /dev/null +++ b/src/web/servlet/complaints/ComplaintListServlet.java @@ -0,0 +1,27 @@ +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; + +@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(); + request.setAttribute("complaints",complaints); + request.getRequestDispatcher("/WEB-INF/complaint/complaintsList.jsp").forward(request,response); + } + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + doPost(request,response); + } +} diff --git a/src/web/servlet/complaints/ComplaintServlet.java b/src/web/servlet/complaints/ComplaintServlet.java new file mode 100644 index 0000000..eada675 --- /dev/null +++ b/src/web/servlet/complaints/ComplaintServlet.java @@ -0,0 +1,28 @@ +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; + +@WebServlet("/complaintServlet") +public class ComplaintServlet extends HttpServlet { + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + 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); + } + + 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 new file mode 100644 index 0000000..db51f8b --- /dev/null +++ b/src/web/servlet/file/DeleteFileServlet.java @@ -0,0 +1,26 @@ +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; + +@WebServlet("/deleteFileServlet") +public class DeleteFileServlet extends HttpServlet { + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + request.setCharacterEncoding("utf-8"); + 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); + } +} diff --git a/src/web/servlet/file/DownloadServlet.java b/src/web/servlet/file/DownloadServlet.java new file mode 100644 index 0000000..6648ad5 --- /dev/null +++ b/src/web/servlet/file/DownloadServlet.java @@ -0,0 +1,62 @@ +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; + +@WebServlet("/downloadServlet") +public class DownloadServlet extends HttpServlet { + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + String filename = request.getParameter("filename"); + if (filename.equalsIgnoreCase("../") || filename.equalsIgnoreCase("/")) { + request.getRequestDispatcher("error.jsp").forward(request, response); + } + response.addHeader("content-Type", "application/octet-stream"); + + String agent = request.getHeader("User-Agent"); + + if (agent.toLowerCase().indexOf("chrome") > 0) { + response.addHeader("content-Disposition", "attachment;filename=" + new String(filename.getBytes("UTF-8"), "ISO8859-1")); + } else { + 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); + } +} diff --git a/src/web/servlet/file/FileListServlet.java b/src/web/servlet/file/FileListServlet.java new file mode 100644 index 0000000..ed63af3 --- /dev/null +++ b/src/web/servlet/file/FileListServlet.java @@ -0,0 +1,88 @@ +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 { + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + 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 fileLists = new ArrayList(); + for(File f:arrs){ + long l = f.length(); + String fileSize = getPrintSize(l); + FileClass file = new FileClass(); + file.setFileName(f.getName()); + file.setFilePath(f.getAbsolutePath()); + file.setFileSize(fileSize); + fileLists.add(file); + } + request.setAttribute("fileLists",fileLists); + + 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); + } + + 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"; + } + } +} diff --git a/src/web/servlet/file/FileServlet.java b/src/web/servlet/file/FileServlet.java new file mode 100644 index 0000000..93d6861 --- /dev/null +++ b/src/web/servlet/file/FileServlet.java @@ -0,0 +1,19 @@ +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; + +@WebServlet("/fileServlet") +public class FileServlet extends HttpServlet { + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + request.getRequestDispatcher("/WEB-INF/admin/uploadFile.jsp").forward(request,response); + } + + 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 new file mode 100644 index 0000000..1710ccc --- /dev/null +++ b/src/web/servlet/file/ShowPhotoServlet.java @@ -0,0 +1,99 @@ +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) { + PhotoService service = new PhotoServiceImpl(); + p = service.findPhotoByPhotoId(student.getS_id()); + }else{ + 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); + } +} diff --git a/src/web/servlet/file/UploadImageServlet.java b/src/web/servlet/file/UploadImageServlet.java new file mode 100644 index 0000000..62c7b9d --- /dev/null +++ b/src/web/servlet/file/UploadImageServlet.java @@ -0,0 +1,132 @@ +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 { + 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"); + String id = ""; + if (student != null) { + 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); + 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); + request.getRequestDispatcher("/WEB-INF/student/studentAddPhoto.jsp").forward(request, response); + return; + } + } + } catch (FileUploadException e) { + e.printStackTrace(); + } + + Photo photo = new Photo(); + photo.setPhotoId(id); + photo.setPhotoName(newFileName); + 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); + } +} diff --git a/src/web/servlet/file/UploadServlet.java b/src/web/servlet/file/UploadServlet.java new file mode 100644 index 0000000..3b9385f --- /dev/null +++ b/src/web/servlet/file/UploadServlet.java @@ -0,0 +1,107 @@ +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; + +@WebServlet("/uploadServlet") +public class UploadServlet extends HttpServlet { + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + request.setCharacterEncoding("utf-8"); + response.setCharacterEncoding("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); + 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"); + 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(); + } + } + } + + 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); + } +} diff --git a/src/web/servlet/index/AdminIndexServlet.java b/src/web/servlet/index/AdminIndexServlet.java new file mode 100644 index 0000000..dc1ad93 --- /dev/null +++ b/src/web/servlet/index/AdminIndexServlet.java @@ -0,0 +1,18 @@ +package web.servlet.index; + +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("/adminIndexServlet") +public class AdminIndexServlet extends HttpServlet { + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + request.getRequestDispatcher("/WEB-INF/admin/aIndex.jsp").forward(request,response); + } + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + doPost(request,response); + } +} diff --git a/src/web/servlet/index/StudentIndexServlet.java b/src/web/servlet/index/StudentIndexServlet.java new file mode 100644 index 0000000..66688fc --- /dev/null +++ b/src/web/servlet/index/StudentIndexServlet.java @@ -0,0 +1,18 @@ +package web.servlet.index; + +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("/studentIndexServlet") +public class StudentIndexServlet extends HttpServlet { + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + request.getRequestDispatcher("/WEB-INF/student/sIndex.jsp").forward(request,response); + } + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + doPost(request,response); + } +} diff --git a/src/web/servlet/index/TeacherIndexServlet.java b/src/web/servlet/index/TeacherIndexServlet.java new file mode 100644 index 0000000..b60e68e --- /dev/null +++ b/src/web/servlet/index/TeacherIndexServlet.java @@ -0,0 +1,18 @@ +package web.servlet.index; + +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("/teacherIndexServlet") +public class TeacherIndexServlet extends HttpServlet { + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + request.getRequestDispatcher("/WEB-INF/teacher/tIndex.jsp").forward(request,response); + } + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + doPost(request,response); + } +} diff --git a/src/web/servlet/login/FindStudentServlet.java b/src/web/servlet/login/FindStudentServlet.java new file mode 100644 index 0000000..e308d1b --- /dev/null +++ b/src/web/servlet/login/FindStudentServlet.java @@ -0,0 +1,48 @@ +package web.servlet.login; + +import com.fasterxml.jackson.databind.ObjectMapper; +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.HashMap; +import java.util.Map; + +@WebServlet("/findStudentServlet") +public class FindStudentServlet extends HttpServlet { + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + response.setContentType("application/json;charset=utf-8"); + String studentId = request.getParameter("studentid"); + Student student = new Student(); + Student findStudent = new Student(); + student.setS_id(studentId); + StudentService service = new StudentServiceImpl(); + findStudent = service.findStudentById(student); + Mapmap = new HashMap(); + + try { + if (studentId.equals(findStudent.getS_id())) { + map.put("studentExsit", true); + map.put("msg", "ID已存在"); + } else { + map.put("studentExsit", false); + map.put("msg", "用户名可用"); + } + //map转为json传给客户端 + ObjectMapper mapper = new ObjectMapper(); + mapper.writeValue(response.getWriter(),map); + } catch (Exception e) { + e.printStackTrace(); + } + } + + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + doPost(request,response); + } +} diff --git a/src/web/servlet/login/LoginServlet.java b/src/web/servlet/login/LoginServlet.java new file mode 100644 index 0000000..eae657c --- /dev/null +++ b/src/web/servlet/login/LoginServlet.java @@ -0,0 +1,133 @@ +package web.servlet.login; + +import domain.Admin; +import domain.Notify; +import domain.Student; +import domain.Teacher; +import org.apache.commons.beanutils.BeanUtils; +import service.AdminService; +import service.NotifyService; +import service.StudentService; +import service.TeacherService; +import service.impl.AdminServiceImpl; +import service.impl.NotifyServiceImpl; +import service.impl.StudentServiceImpl; +import service.impl.TeacherServiceImpl; + +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.lang.reflect.InvocationTargetException; +import java.util.List; +import java.util.Map; + +@WebServlet("/loginServlet") +public class LoginServlet extends HttpServlet { + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + Student loginStudent = null; + 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查询 + if ("student".equals(roles)) { + + Student student = new Student(); + student.setS_id(id); + student.setS_password(password); + + StudentService service= new StudentServiceImpl(); + loginStudent = service.login(student); + + if (loginStudent != null) { + session.setAttribute("student", loginStudent); + session.setAttribute("html_title", "学生端"); +// 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); + request.getRequestDispatcher("/login.jsp").forward(request, response); + } + }else if ("teacher".equals(roles)) { + + Teacher teacher = new Teacher(); + teacher.setT_id(id); + teacher.setT_password(password); + + TeacherService service = new TeacherServiceImpl(); + loginTeacher = service.login(teacher); + + if (loginTeacher != null) { + session.setAttribute("teacher", loginTeacher); + session.setAttribute("html_title", "教师端"); +// 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); + } + + }else { + + Admin admin = new Admin(); + admin.setA_id(id); + admin.setA_password(password); + + AdminService service = new AdminServiceImpl(); + loginAdmin = service.login(admin); + + if (loginAdmin != null) { + session.setAttribute("admin", loginAdmin); + session.setAttribute("html_title", "管理员"); +// 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); + } + } + } + + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + doPost(request,response); + } +} diff --git a/src/web/servlet/login/LogoutServlet.java b/src/web/servlet/login/LogoutServlet.java new file mode 100644 index 0000000..6ca6781 --- /dev/null +++ b/src/web/servlet/login/LogoutServlet.java @@ -0,0 +1,26 @@ +package web.servlet.login; + +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("/logoutServlet") +public class LogoutServlet extends HttpServlet { + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + request.setCharacterEncoding("UTF-8"); + HttpSession session = request.getSession(); + session.removeAttribute("student"); + session.removeAttribute("teacher"); + session.removeAttribute("admin"); + session.invalidate(); + response.sendRedirect("index.jsp"); + } + + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + doPost(request,response); + } +} diff --git a/src/web/servlet/login/RegisterServlet.java b/src/web/servlet/login/RegisterServlet.java new file mode 100644 index 0000000..7067f61 --- /dev/null +++ b/src/web/servlet/login/RegisterServlet.java @@ -0,0 +1,50 @@ +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; + +@WebServlet("/registerServlet") +public class RegisterServlet extends HttpServlet { + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + HttpSession session = request.getSession(); + String studentid = request.getParameter("studentid"); + String password = request.getParameter("password"); + String repassword = request.getParameter("repassword"); + String vcode = request.getParameter("verifycode"); + + String checkcode_server = (String) session.getAttribute("CHECKCODE_SERVER"); + session.removeAttribute("CHECKCODE_SERVER");//确保验证一次性 + if (!vcode.equalsIgnoreCase(checkcode_server)){ + request.setAttribute("msg","验证码错误"); + request.setAttribute("studentid",studentid); + request.setAttribute("password",password); + request.setAttribute("repassword",repassword); + request.getRequestDispatcher("register.jsp").forward(request,response); + return; + }else { + Student student = new Student(); + student.setS_id(studentid); + student.setS_password(password); + System.out.println(studentid); + System.out.println(password); + StudentService service= new StudentServiceImpl(); + service.register(student); + request.setAttribute("msg","注册成功"); + 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); + } +} diff --git a/src/web/servlet/notify/AddNotifyServlet.java b/src/web/servlet/notify/AddNotifyServlet.java new file mode 100644 index 0000000..797bcea --- /dev/null +++ b/src/web/servlet/notify/AddNotifyServlet.java @@ -0,0 +1,39 @@ +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); + } +} diff --git a/src/web/servlet/notify/DeleteNotifyServlet.java b/src/web/servlet/notify/DeleteNotifyServlet.java new file mode 100644 index 0000000..fb9f8d7 --- /dev/null +++ b/src/web/servlet/notify/DeleteNotifyServlet.java @@ -0,0 +1,29 @@ +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; + +@WebServlet("/deleteNotifyServlet") +public class DeleteNotifyServlet extends HttpServlet { + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + 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); + } +} diff --git a/src/web/servlet/notify/NotifyListServlet.java b/src/web/servlet/notify/NotifyListServlet.java new file mode 100644 index 0000000..2e82af4 --- /dev/null +++ b/src/web/servlet/notify/NotifyListServlet.java @@ -0,0 +1,27 @@ +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; + +@WebServlet("/notifyListServlet") +public class NotifyListServlet extends HttpServlet { + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + 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); + } +} diff --git a/src/web/servlet/notify/NotifyListToServlet.java b/src/web/servlet/notify/NotifyListToServlet.java new file mode 100644 index 0000000..a2a7599 --- /dev/null +++ b/src/web/servlet/notify/NotifyListToServlet.java @@ -0,0 +1,43 @@ +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; + +@WebServlet("/notifyListToServlet") +public class NotifyListToServlet extends HttpServlet { + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + 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); + } +} diff --git a/src/web/servlet/notify/NotifyServlet.java b/src/web/servlet/notify/NotifyServlet.java new file mode 100644 index 0000000..bd711d6 --- /dev/null +++ b/src/web/servlet/notify/NotifyServlet.java @@ -0,0 +1,19 @@ +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 { + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + request.getRequestDispatcher("/WEB-INF/notify/addNotify.jsp").forward(request,response); + } + + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + doPost(request,response); + } +} diff --git a/src/web/servlet/page/FindStudentByPageServlet.java b/src/web/servlet/page/FindStudentByPageServlet.java new file mode 100644 index 0000000..336e7db --- /dev/null +++ b/src/web/servlet/page/FindStudentByPageServlet.java @@ -0,0 +1,61 @@ +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 { + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + 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 service = new StudentServiceImpl(); + PageBean pb = service.findStudentByPage(currentPage,rows,condition); + + request.setAttribute("pb",pb); + request.setAttribute("condition",condition);//存入查询条件 + 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/sFindStudentList.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 { + doPost(request,response); + } +} diff --git a/src/web/servlet/student/DeleteSelectStudentServlet.java b/src/web/servlet/student/DeleteSelectStudentServlet.java new file mode 100644 index 0000000..7b49c71 --- /dev/null +++ b/src/web/servlet/student/DeleteSelectStudentServlet.java @@ -0,0 +1,25 @@ +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") +public class DeleteSelectStudentServlet extends HttpServlet { + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + String[] sids = request.getParameterValues("sid"); + StudentService service = new StudentServiceImpl(); + service.deleteSelectStudent(sids); + response.sendRedirect(request.getContextPath()+"/findStudentByPageServlet"); + } + + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + doPost(request,response); + } +} diff --git a/src/web/servlet/student/DeleteStudentServlet.java b/src/web/servlet/student/DeleteStudentServlet.java new file mode 100644 index 0000000..f062068 --- /dev/null +++ b/src/web/servlet/student/DeleteStudentServlet.java @@ -0,0 +1,31 @@ +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") +public class DeleteStudentServlet extends HttpServlet { + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + request.setCharacterEncoding("utf-8"); + HttpSession session = request.getSession(); + String studentid = request.getParameter("s_id"); + StudentService service = new StudentServiceImpl(); + service.deleteStudentById(studentid); +// request.getRequestDispatcher("/findStudentByPageServlet").forward(request,response); + response.sendRedirect("findStudentByPageServlet"); + } + + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + doPost(request,response); + } +} diff --git a/src/web/servlet/student/DoSelectCourseServlet.java b/src/web/servlet/student/DoSelectCourseServlet.java new file mode 100644 index 0000000..127d2c6 --- /dev/null +++ b/src/web/servlet/student/DoSelectCourseServlet.java @@ -0,0 +1,63 @@ +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"); + //存不存在已选该课 + 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); + } +} diff --git a/src/web/servlet/student/StudentInfomationServlet.java b/src/web/servlet/student/StudentInfomationServlet.java new file mode 100644 index 0000000..cb879fb --- /dev/null +++ b/src/web/servlet/student/StudentInfomationServlet.java @@ -0,0 +1,29 @@ +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; + +@WebServlet("/studentInfomationServlet") +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); + } +} diff --git a/src/web/servlet/student/StudentInfomationUpdateServlet.java b/src/web/servlet/student/StudentInfomationUpdateServlet.java new file mode 100644 index 0000000..7080e84 --- /dev/null +++ b/src/web/servlet/student/StudentInfomationUpdateServlet.java @@ -0,0 +1,76 @@ +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"); + + //保存输入内容 + 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); + 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); + } +} diff --git a/src/web/servlet/student/StudentListServlet.java b/src/web/servlet/student/StudentListServlet.java new file mode 100644 index 0000000..1a531ae --- /dev/null +++ b/src/web/servlet/student/StudentListServlet.java @@ -0,0 +1,47 @@ +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); + } + } + + 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 new file mode 100644 index 0000000..caefc67 --- /dev/null +++ b/src/web/servlet/student/StudentOptionalCourseServlet.java @@ -0,0 +1,47 @@ +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 { + 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(); + List optionalcourses = studentService.findAllOptionalCourse(); + //将list存入request域 + request.setAttribute("optionalcourses",optionalcourses); + //转发到list.jsp + + 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); + } +} diff --git a/src/web/servlet/student/StudentPasswordIndexServlet.java b/src/web/servlet/student/StudentPasswordIndexServlet.java new file mode 100644 index 0000000..8f026ea --- /dev/null +++ b/src/web/servlet/student/StudentPasswordIndexServlet.java @@ -0,0 +1,19 @@ +package web.servlet.student; + +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("/studentPasswordIndexServlet") +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 new file mode 100644 index 0000000..3fa2b5d --- /dev/null +++ b/src/web/servlet/student/StudentPasswordUpdateServlet.java @@ -0,0 +1,52 @@ +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") +public class StudentPasswordUpdateServlet 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 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 new file mode 100644 index 0000000..dd60b25 --- /dev/null +++ b/src/web/servlet/student/StudentSelectCourseListServlet.java @@ -0,0 +1,50 @@ +package web.servlet.student; + +import domain.Admin; +import domain.SelectCourse; +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("/studentSelectCourseListServlet") +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); + } +} diff --git a/src/web/servlet/student/StudentServlet.java b/src/web/servlet/student/StudentServlet.java new file mode 100644 index 0000000..1f83341 --- /dev/null +++ b/src/web/servlet/student/StudentServlet.java @@ -0,0 +1,19 @@ +package web.servlet.student; + +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("/studentServlet") +public class StudentServlet extends HttpServlet { + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + request.getRequestDispatcher("/WEB-INF/student/sIndex.jsp").forward(request,response); + } + + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + doPost(request,response); + } +} diff --git a/src/web/servlet/teacher/AddOptionalCourseServlet.java b/src/web/servlet/teacher/AddOptionalCourseServlet.java new file mode 100644 index 0000000..45a4b70 --- /dev/null +++ b/src/web/servlet/teacher/AddOptionalCourseServlet.java @@ -0,0 +1,51 @@ +package web.servlet.teacher; + +import domain.Course; +import domain.Teacher; +import service.CourseService; +import service.impl.CourseServiceImpl; + +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("/addOptionalCourseServlet") +public class AddOptionalCourseServlet extends HttpServlet { + 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 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); + } +} diff --git a/src/web/servlet/teacher/AddSelectCourseServlet.java b/src/web/servlet/teacher/AddSelectCourseServlet.java new file mode 100644 index 0000000..4143a74 --- /dev/null +++ b/src/web/servlet/teacher/AddSelectCourseServlet.java @@ -0,0 +1,20 @@ +package web.servlet.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 java.io.IOException; + +@WebServlet("/addSelectCourseServlet") +public class AddSelectCourseServlet extends HttpServlet { + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + request.setCharacterEncoding("utf-8"); + request.getRequestDispatcher("/WEB-INF/teacher/addOptionalCourse.jsp").forward(request,response); + } + + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + doPost(request,response); + } +} diff --git a/src/web/servlet/teacher/AddTeacherInfoServlet.java b/src/web/servlet/teacher/AddTeacherInfoServlet.java new file mode 100644 index 0000000..62ece8d --- /dev/null +++ b/src/web/servlet/teacher/AddTeacherInfoServlet.java @@ -0,0 +1,67 @@ +package web.servlet.teacher; + +import domain.Teacher; +import service.TeacherService; +import service.impl.TeacherServiceImpl; + +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("/addTeacherInfoServlet") +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); + } +} diff --git a/src/web/servlet/teacher/AddTeacherServlet.java b/src/web/servlet/teacher/AddTeacherServlet.java new file mode 100644 index 0000000..671691a --- /dev/null +++ b/src/web/servlet/teacher/AddTeacherServlet.java @@ -0,0 +1,37 @@ +package web.servlet.teacher; + +import domain.CDC; +import service.CDCService; +import service.impl.CDCServiceImpl; + +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("/addTeacherServlet") +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); + } +} diff --git a/src/web/servlet/teacher/DeleteOptionalCourseServlet.java b/src/web/servlet/teacher/DeleteOptionalCourseServlet.java new file mode 100644 index 0000000..f516500 --- /dev/null +++ b/src/web/servlet/teacher/DeleteOptionalCourseServlet.java @@ -0,0 +1,27 @@ +package web.servlet.teacher; + +import service.TeacherService; +import service.impl.TeacherServiceImpl; + +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("/deleteOptionalCourseServlet") +public class DeleteOptionalCourseServlet extends HttpServlet { + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + request.setCharacterEncoding("utf-8"); + String cid = request.getParameter("cid"); + TeacherService service = new TeacherServiceImpl(); + service.deleteCourseById(cid); + request.getRequestDispatcher("/teacherOptionalCourseServlet").forward(request,response); + } + + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + doPost(request,response); + } +} diff --git a/src/web/servlet/teacher/DeleteTeacherServlet.java b/src/web/servlet/teacher/DeleteTeacherServlet.java new file mode 100644 index 0000000..3cd1739 --- /dev/null +++ b/src/web/servlet/teacher/DeleteTeacherServlet.java @@ -0,0 +1,27 @@ +package web.servlet.teacher; + +import service.TeacherService; +import service.impl.TeacherServiceImpl; + +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("/deleteTeacherServlet") +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); + } +} diff --git a/src/web/servlet/teacher/FindStudentCourseScoreServlet.java b/src/web/servlet/teacher/FindStudentCourseScoreServlet.java new file mode 100644 index 0000000..f5078b6 --- /dev/null +++ b/src/web/servlet/teacher/FindStudentCourseScoreServlet.java @@ -0,0 +1,36 @@ +package web.servlet.teacher; + +import domain.SelectCourse; +import service.SelectCourseService; +import service.impl.SelectCourseServiceImpl; + +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; + +@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); + + 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); + } +} diff --git a/src/web/servlet/teacher/TeacherInfomationServlet.java b/src/web/servlet/teacher/TeacherInfomationServlet.java new file mode 100644 index 0000000..0b5aaba --- /dev/null +++ b/src/web/servlet/teacher/TeacherInfomationServlet.java @@ -0,0 +1,22 @@ +package web.servlet.teacher; + +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.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); + } + + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + doPost(request,response); + } +} diff --git a/src/web/servlet/teacher/TeacherListServlet.java b/src/web/servlet/teacher/TeacherListServlet.java new file mode 100644 index 0000000..856f96d --- /dev/null +++ b/src/web/servlet/teacher/TeacherListServlet.java @@ -0,0 +1,48 @@ +package web.servlet.teacher; + +import domain.Admin; +import domain.Student; +import domain.Teacher; +import service.StudentService; +import service.TeacherService; +import service.impl.StudentServiceImpl; +import service.impl.TeacherServiceImpl; + +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("/teacherListServlet") +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); + } +} diff --git a/src/web/servlet/teacher/TeacherOptionalCourseServlet.java b/src/web/servlet/teacher/TeacherOptionalCourseServlet.java new file mode 100644 index 0000000..20b1a33 --- /dev/null +++ b/src/web/servlet/teacher/TeacherOptionalCourseServlet.java @@ -0,0 +1,40 @@ +package web.servlet.teacher; + +import domain.Course; +import domain.Student; +import domain.Teacher; +import service.StudentService; +import service.TeacherService; +import service.impl.StudentServiceImpl; +import service.impl.TeacherServiceImpl; + +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("/teacherOptionalCourseServlet") +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); + } +} diff --git a/src/web/servlet/teacher/TeacherOptionalCourseUpdateServlet.java b/src/web/servlet/teacher/TeacherOptionalCourseUpdateServlet.java new file mode 100644 index 0000000..ab22a08 --- /dev/null +++ b/src/web/servlet/teacher/TeacherOptionalCourseUpdateServlet.java @@ -0,0 +1,53 @@ +package web.servlet.teacher; + +import domain.Course; +import domain.Teacher; +import service.TeacherService; +import service.impl.TeacherServiceImpl; + +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("/teacherOptionalCourseUpdateServlet") +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); + } +} diff --git a/src/web/servlet/teacher/TeacherPasswordIndexServlet.java b/src/web/servlet/teacher/TeacherPasswordIndexServlet.java new file mode 100644 index 0000000..fc6da4f --- /dev/null +++ b/src/web/servlet/teacher/TeacherPasswordIndexServlet.java @@ -0,0 +1,19 @@ +package web.servlet.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 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); + } + + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + doPost(request,response); + } +} diff --git a/src/web/servlet/teacher/TeacherPasswordUpdateServlet.java b/src/web/servlet/teacher/TeacherPasswordUpdateServlet.java new file mode 100644 index 0000000..bf6ced2 --- /dev/null +++ b/src/web/servlet/teacher/TeacherPasswordUpdateServlet.java @@ -0,0 +1,55 @@ +package web.servlet.teacher; + +import domain.Student; +import domain.Teacher; +import service.StudentService; +import service.TeacherService; +import service.impl.StudentServiceImpl; +import service.impl.TeacherServiceImpl; + +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("/teacherPasswordUpdateServlet") +public class TeacherPasswordUpdateServlet extends HttpServlet { + 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(); + 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); + } +} diff --git a/src/web/servlet/teacher/UpdateOptionalCourseScoreServlet.java b/src/web/servlet/teacher/UpdateOptionalCourseScoreServlet.java new file mode 100644 index 0000000..0a73f0e --- /dev/null +++ b/src/web/servlet/teacher/UpdateOptionalCourseScoreServlet.java @@ -0,0 +1,54 @@ +package web.servlet.teacher; + +import domain.Course; +import domain.SelectCourse; +import domain.Student; +import domain.Teacher; +import service.CourseService; +import service.SelectCourseService; +import service.StudentService; +import service.impl.CourseServiceImpl; +import service.impl.SelectCourseServiceImpl; +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("/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(); + 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); + } +} diff --git a/src/web/servlet/teacher/UpdateScoreServlet.java b/src/web/servlet/teacher/UpdateScoreServlet.java new file mode 100644 index 0000000..08384c8 --- /dev/null +++ b/src/web/servlet/teacher/UpdateScoreServlet.java @@ -0,0 +1,47 @@ +package web.servlet.teacher; + +import domain.Course; +import domain.SelectCourse; +import domain.Student; +import service.CourseService; +import service.SelectCourseService; +import service.StudentService; +import service.impl.CourseServiceImpl; +import service.impl.SelectCourseServiceImpl; +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("/updateScoreServlet") +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); + } +} diff --git a/src/web/servlet/teacher/UpdateTeacherInfoServlet.java b/src/web/servlet/teacher/UpdateTeacherInfoServlet.java new file mode 100644 index 0000000..972e4e0 --- /dev/null +++ b/src/web/servlet/teacher/UpdateTeacherInfoServlet.java @@ -0,0 +1,54 @@ +package web.servlet.teacher; + +import domain.Teacher; +import service.StudentService; +import service.TeacherService; +import service.impl.StudentServiceImpl; +import service.impl.TeacherServiceImpl; + +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("/updateTeacherInfoServlet") +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); + } +} diff --git a/src/web/servlet/teacher/UpdateTeacherOptionalCourseServlet.java b/src/web/servlet/teacher/UpdateTeacherOptionalCourseServlet.java new file mode 100644 index 0000000..7e5d7da --- /dev/null +++ b/src/web/servlet/teacher/UpdateTeacherOptionalCourseServlet.java @@ -0,0 +1,35 @@ +package web.servlet.teacher; + +import domain.Course; +import service.TeacherService; +import service.impl.TeacherServiceImpl; + +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("/updateTeacherOptionalCourseServlet") +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); + } +} diff --git a/src/web/servlet/teacher/UpdateTeacherServlet.java b/src/web/servlet/teacher/UpdateTeacherServlet.java new file mode 100644 index 0000000..cb37644 --- /dev/null +++ b/src/web/servlet/teacher/UpdateTeacherServlet.java @@ -0,0 +1,51 @@ +package web.servlet.teacher; + +import com.sun.org.apache.regexp.internal.RE; +import domain.CDC; +import domain.Student; +import domain.Teacher; +import service.CDCService; +import service.StudentService; +import service.TeacherService; +import service.impl.CDCServiceImpl; +import service.impl.StudentServiceImpl; +import service.impl.TeacherServiceImpl; + +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("/updateTeacherServlet") +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(); + 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); + } +} diff --git a/src/web/servlet/verifycode/CheckCodeServlet.java b/src/web/servlet/verifycode/CheckCodeServlet.java new file mode 100644 index 0000000..598368e --- /dev/null +++ b/src/web/servlet/verifycode/CheckCodeServlet.java @@ -0,0 +1,91 @@ +package web.servlet.verifycode; + + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.util.JSONPObject; + +import java.awt.Color; +import java.awt.Font; +import java.awt.Graphics; +import java.awt.image.BufferedImage; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; +import java.util.Random; +import javax.imageio.ImageIO; +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +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的图片,默认黑色背景 + //参数一:长 + //参数二:宽 + //参数三:颜色 + 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); + } +} + + + diff --git a/web/WEB-INF/admin/aCDCList.jsp b/web/WEB-INF/admin/aCDCList.jsp new file mode 100644 index 0000000..7b555bb --- /dev/null +++ b/web/WEB-INF/admin/aCDCList.jsp @@ -0,0 +1,64 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + + 学院专业查询 + + + + + + + + + +
+
+ +
+ + 管理员 + 学院专业管理 + 学院专业查询 + + + + + + + + + + + + + + + + + + + + + +
ID学院专业班级操作
${c.count}${cdc.college}${cdc.department}${cdc.cclass}删除
+ +
+
+
+ + + + + + + diff --git a/web/WEB-INF/admin/aFindFileList.jsp b/web/WEB-INF/admin/aFindFileList.jsp new file mode 100644 index 0000000..2a96d51 --- /dev/null +++ b/web/WEB-INF/admin/aFindFileList.jsp @@ -0,0 +1,63 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + + 文件列表 + + + + + + + + + +
+
+ +
+ + 管理员 + 系统设置 + 文件列表 + + + + + + + + + + + + + + + + + + + + + +
ID文件名文件路径文件大小操作
${f.count}${filelist.fileName}${filelist.filePath}${filelist.fileSize}下载删除
+ +
+
+
+ + + + + + \ No newline at end of file diff --git a/web/WEB-INF/admin/aFindStudentList.jsp b/web/WEB-INF/admin/aFindStudentList.jsp new file mode 100644 index 0000000..425c331 --- /dev/null +++ b/web/WEB-INF/admin/aFindStudentList.jsp @@ -0,0 +1,172 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + + 查询学生 + + + + + + + + + +
+
+ +
+ + 管理员 + 学生管理 + 查询学生 + + +
+
+
+ +
+ +
+ +
+ +
+ +
+ + 删除选中 +
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ID学号学院系别班级姓名性别年龄城市手机号邮箱操作
${s.count}${student.s_id}${student.s_college}${student.s_department}${student.s_class}${student.s_name}${student.s_sex}${student.s_age}${student.s_address}${student.s_phone}${student.s_email}修改删除
+
+<%-- --%> + + +
+ 共${pb.totalCount}条记录,共${pb.totalPage}页 +
+ +
+
+
+ + + + + + + + diff --git a/web/WEB-INF/admin/aFindTeacherList.jsp b/web/WEB-INF/admin/aFindTeacherList.jsp new file mode 100644 index 0000000..095667c --- /dev/null +++ b/web/WEB-INF/admin/aFindTeacherList.jsp @@ -0,0 +1,75 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + + 查询教师 + + + + + + + + + +
+
+ +
+ + 管理员 + 教师管理 + 查询教师 + + + + + + + + + + + + + + + + + + + + + + + + + +
ID工号姓名性别文化程度职称操作
${t.count}${teacher.t_id}${teacher.t_name}${teacher.t_sex}${teacher.t_education}${teacher.t_title}修改删除
+ +
+
+
+ + + + + + + + diff --git a/web/WEB-INF/admin/aHeader.jsp b/web/WEB-INF/admin/aHeader.jsp new file mode 100644 index 0000000..295fbf7 --- /dev/null +++ b/web/WEB-INF/admin/aHeader.jsp @@ -0,0 +1,55 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %> + + + + + + + + + + + + + + + diff --git a/web/WEB-INF/admin/aIndex.jsp b/web/WEB-INF/admin/aIndex.jsp new file mode 100644 index 0000000..7475bb1 --- /dev/null +++ b/web/WEB-INF/admin/aIndex.jsp @@ -0,0 +1,147 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + + ${html_title} + + + + + + + + + + + + diff --git a/web/WEB-INF/admin/addStudent.jsp b/web/WEB-INF/admin/addStudent.jsp new file mode 100644 index 0000000..4074de3 --- /dev/null +++ b/web/WEB-INF/admin/addStudent.jsp @@ -0,0 +1,144 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + + 增加学生 + + + + + + + + + +
+
+ +
+ + 管理员 + 学生管理 + 增加学生 + +
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+
+
+ +
+ + +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+ +
+ +
+
+ +
+
+ + + ${update_msg} +
+
+
+ +
+
+
+ + + + + + + + + + + diff --git a/web/WEB-INF/admin/addTeacher.jsp b/web/WEB-INF/admin/addTeacher.jsp new file mode 100644 index 0000000..fd73ea8 --- /dev/null +++ b/web/WEB-INF/admin/addTeacher.jsp @@ -0,0 +1,131 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + + 个人信息 + + + + + + + + + +
+
+ +
+ + 管理员 + 教师管理 + 增加教师 + +
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+
+
+ +
+ + +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+
+ + + ${update_msg} +
+
+
+ +
+
+
+ + + + + + + + + + + diff --git a/web/WEB-INF/admin/adminNav.jsp b/web/WEB-INF/admin/adminNav.jsp new file mode 100644 index 0000000..43a49e1 --- /dev/null +++ b/web/WEB-INF/admin/adminNav.jsp @@ -0,0 +1,60 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + + + + + + + + + diff --git a/web/WEB-INF/admin/adminUpdatePassword.jsp b/web/WEB-INF/admin/adminUpdatePassword.jsp new file mode 100644 index 0000000..2e6be84 --- /dev/null +++ b/web/WEB-INF/admin/adminUpdatePassword.jsp @@ -0,0 +1,85 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + + 修改密码 + + + + + + + + + +
+
+ +
+ + 管理员 + 系统管理 + 修改密码 + +
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+ +
+
+ + ${update_msg} +
+
+
+ +
+
+
+ + + + + + + + + diff --git a/web/WEB-INF/admin/allStudentOptionalCourse.jsp b/web/WEB-INF/admin/allStudentOptionalCourse.jsp new file mode 100644 index 0000000..7ae1684 --- /dev/null +++ b/web/WEB-INF/admin/allStudentOptionalCourse.jsp @@ -0,0 +1,77 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + + 可选课程 + + + + + + + + + +
+
+ +
+ + 管理员 + 选课信息管理 + 可选课程 + + ${select_msg} + + + + + + + + + + + + + + + + + + + + + + + + +
ID课程号课程名课程简介教师号教师姓名操作
${s.count}${optionalcourse.c_id}${optionalcourse.c_name}${optionalcourse.c_info}${optionalcourse.t_id}${optionalcourse.t_name}删除
+ +
+
+
+ + + + + + + + + diff --git a/web/WEB-INF/admin/allStudentSelectCourseList.jsp b/web/WEB-INF/admin/allStudentSelectCourseList.jsp new file mode 100644 index 0000000..27e5243 --- /dev/null +++ b/web/WEB-INF/admin/allStudentSelectCourseList.jsp @@ -0,0 +1,73 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + + 选课列表 + + + + + + + + + +
+
+ +
+ + 管理员 + 选课信息管理 + 选课列表 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ID学号学生姓名课程号课程名课程简介教师号教师分数
${s.count}${selectcourse.s_id}${selectcourse.s_name}${selectcourse.c_id}${selectcourse.c_name}${selectcourse.c_info}${selectcourse.t_id}${selectcourse.t_name}${selectcourse.score}
+ +
+
+
+ + + + + + + + diff --git a/web/WEB-INF/admin/updateStudent.jsp b/web/WEB-INF/admin/updateStudent.jsp new file mode 100644 index 0000000..4977653 --- /dev/null +++ b/web/WEB-INF/admin/updateStudent.jsp @@ -0,0 +1,175 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + + 修改学生信息 + + + + + + + + + +
+
+ +
+ + 管理员 + 学生管理 + 修改学生信息 + +
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+
+
+ +
+ + +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+ +
+ +
+
+ +
+
+ + + ${update_msg} +
+
+
+ +
+
+
+ + + + + + + + + + + + + diff --git a/web/WEB-INF/admin/updateTeacher.jsp b/web/WEB-INF/admin/updateTeacher.jsp new file mode 100644 index 0000000..5834df3 --- /dev/null +++ b/web/WEB-INF/admin/updateTeacher.jsp @@ -0,0 +1,162 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + + 修改教师信息 + + + + + + + + + +
+
+ +
+ + 管理员 + 教师管理 + 修改教师信息 + +
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+
+
+ +
+ + +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+
+ + + ${update_msg} +
+
+
+ +
+
+
+ + + + + + + + + + + + + diff --git a/web/WEB-INF/admin/uploadFile.jsp b/web/WEB-INF/admin/uploadFile.jsp new file mode 100644 index 0000000..49375a4 --- /dev/null +++ b/web/WEB-INF/admin/uploadFile.jsp @@ -0,0 +1,125 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %> + + + + 文件传输 + + + + + + + + + + + +
+
+ +
+ + 管理员 + 系统管理 + 文件发布 + +

 

+ +
+

文件上传

+
    +
  1. 可上传任意大小任意类型文件
  2. +
+
+
+

请选择上传文件:

+
+ + + + +
+ +
+ + + +

+ ${news} +
+
+ +
+
+
+ + + + + + \ No newline at end of file diff --git a/web/WEB-INF/complaint/complaintsList.jsp b/web/WEB-INF/complaint/complaintsList.jsp new file mode 100644 index 0000000..9ec0cc8 --- /dev/null +++ b/web/WEB-INF/complaint/complaintsList.jsp @@ -0,0 +1,74 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + + 公告发布 + + + + + + + + + + + +
+
+ +
+ + 学生端 + 小吐槽 + +

 

+
+
+ + +

+

+ <%-- --%> +
+ +
+
+ +
+
吐槽ID:${complaint.id} | ${complaint.cdate}
+
${complaint.content}
+
+
+ + +
+
+
+ + + + + + + + diff --git a/web/WEB-INF/lib/commons-beanutils-1.8.0.jar b/web/WEB-INF/lib/commons-beanutils-1.8.0.jar new file mode 100644 index 0000000..caf7ae3 Binary files /dev/null and b/web/WEB-INF/lib/commons-beanutils-1.8.0.jar differ diff --git a/web/WEB-INF/lib/commons-fileupload-1.3.1.jar b/web/WEB-INF/lib/commons-fileupload-1.3.1.jar new file mode 100644 index 0000000..af0cda2 Binary files /dev/null and b/web/WEB-INF/lib/commons-fileupload-1.3.1.jar differ diff --git a/web/WEB-INF/lib/commons-io-2.4.jar b/web/WEB-INF/lib/commons-io-2.4.jar new file mode 100644 index 0000000..90035a4 Binary files /dev/null and b/web/WEB-INF/lib/commons-io-2.4.jar differ diff --git a/web/WEB-INF/lib/commons-logging-1.2.jar b/web/WEB-INF/lib/commons-logging-1.2.jar new file mode 100644 index 0000000..93a3b9f Binary files /dev/null and b/web/WEB-INF/lib/commons-logging-1.2.jar differ diff --git a/web/WEB-INF/lib/druid-1.0.9.jar b/web/WEB-INF/lib/druid-1.0.9.jar new file mode 100644 index 0000000..517dbc1 Binary files /dev/null and b/web/WEB-INF/lib/druid-1.0.9.jar differ diff --git a/web/WEB-INF/lib/jackson-annotations-2.2.3.jar b/web/WEB-INF/lib/jackson-annotations-2.2.3.jar new file mode 100644 index 0000000..b62c87d Binary files /dev/null and b/web/WEB-INF/lib/jackson-annotations-2.2.3.jar differ diff --git a/web/WEB-INF/lib/jackson-core-2.2.3.jar b/web/WEB-INF/lib/jackson-core-2.2.3.jar new file mode 100644 index 0000000..24318a4 Binary files /dev/null and b/web/WEB-INF/lib/jackson-core-2.2.3.jar differ diff --git a/web/WEB-INF/lib/jackson-databind-2.2.3.jar b/web/WEB-INF/lib/jackson-databind-2.2.3.jar new file mode 100644 index 0000000..8545084 Binary files /dev/null and b/web/WEB-INF/lib/jackson-databind-2.2.3.jar differ diff --git a/web/WEB-INF/lib/javax.servlet.jsp.jstl.jar b/web/WEB-INF/lib/javax.servlet.jsp.jstl.jar new file mode 100644 index 0000000..c5ebfcf Binary files /dev/null and b/web/WEB-INF/lib/javax.servlet.jsp.jstl.jar differ diff --git a/web/WEB-INF/lib/jstl-impl.jar b/web/WEB-INF/lib/jstl-impl.jar new file mode 100644 index 0000000..0dd4316 Binary files /dev/null and b/web/WEB-INF/lib/jstl-impl.jar differ diff --git a/web/WEB-INF/lib/mysql-connector-java-5.1.48.jar b/web/WEB-INF/lib/mysql-connector-java-5.1.48.jar new file mode 100644 index 0000000..fcd53a5 Binary files /dev/null and b/web/WEB-INF/lib/mysql-connector-java-5.1.48.jar differ diff --git a/web/WEB-INF/lib/spring-beans-4.2.4.RELEASE.jar b/web/WEB-INF/lib/spring-beans-4.2.4.RELEASE.jar new file mode 100644 index 0000000..89232b4 Binary files /dev/null and b/web/WEB-INF/lib/spring-beans-4.2.4.RELEASE.jar differ diff --git a/web/WEB-INF/lib/spring-core-4.2.4.RELEASE.jar b/web/WEB-INF/lib/spring-core-4.2.4.RELEASE.jar new file mode 100644 index 0000000..f2cd8fb Binary files /dev/null and b/web/WEB-INF/lib/spring-core-4.2.4.RELEASE.jar differ diff --git a/web/WEB-INF/lib/spring-jdbc-4.2.4.RELEASE.jar b/web/WEB-INF/lib/spring-jdbc-4.2.4.RELEASE.jar new file mode 100644 index 0000000..4f0abf1 Binary files /dev/null and b/web/WEB-INF/lib/spring-jdbc-4.2.4.RELEASE.jar differ diff --git a/web/WEB-INF/lib/spring-tx-4.2.4.RELEASE.jar b/web/WEB-INF/lib/spring-tx-4.2.4.RELEASE.jar new file mode 100644 index 0000000..dda3bc0 Binary files /dev/null and b/web/WEB-INF/lib/spring-tx-4.2.4.RELEASE.jar differ diff --git a/web/WEB-INF/notify/addNotify.jsp b/web/WEB-INF/notify/addNotify.jsp new file mode 100644 index 0000000..ea9ae35 --- /dev/null +++ b/web/WEB-INF/notify/addNotify.jsp @@ -0,0 +1,88 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + + 公告发布 + + + + + + + + + + +
+
+ +
+ + 管理员 + 系统管理 + 公告发布 + +

 

+
+
+ +

+

+ <%-- --%> +
+ +
+
+ + + + + + + + + + + + + + + + + + + +
公告ID公告日期公告内容操作
${notify.id}${notify.notifyDate}${notify.notifyInfo}
+ + +
+
+
+ + + + + + + + diff --git a/web/WEB-INF/notify/notifyList.jsp b/web/WEB-INF/notify/notifyList.jsp new file mode 100644 index 0000000..18b873e --- /dev/null +++ b/web/WEB-INF/notify/notifyList.jsp @@ -0,0 +1,75 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + + 公告列表 + + + + + + + + + +
+
+ +
+ + 管理员 + 系统管理 + 公告列表 + +

 

+ + + + + + + + + + + + + + + + + + + + + +
公告ID公告日期公告内容操作
${n.count}${notify.notifyDate}${notify.notifyInfo}删除
+ + +
+
+
+ + + + + + + + + diff --git a/web/WEB-INF/notify/notifyListToStudent.jsp b/web/WEB-INF/notify/notifyListToStudent.jsp new file mode 100644 index 0000000..a16d83a --- /dev/null +++ b/web/WEB-INF/notify/notifyListToStudent.jsp @@ -0,0 +1,59 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + + 公告列表 + + + + + + + + + +
+
+ +
+ + 学生端 + 公告列表 + +

 

+ + + + + + + + + + + + + + + + + +
公告ID公告日期公告内容
${n.count}${notify.notifyDate}${notify.notifyInfo}
+ + +
+
+
+ + + + + + + diff --git a/web/WEB-INF/notify/notifyListToTeacher.jsp b/web/WEB-INF/notify/notifyListToTeacher.jsp new file mode 100644 index 0000000..6f29382 --- /dev/null +++ b/web/WEB-INF/notify/notifyListToTeacher.jsp @@ -0,0 +1,59 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + + 公告列表 + + + + + + + + + +
+
+ +
+ + 教师端 + 公告列表 + +

 

+ + + + + + + + + + + + + + + + + +
公告ID公告日期公告内容
${n.count}${notify.notifyDate}${notify.notifyInfo}
+ + +
+
+
+ + + + + + + diff --git a/web/WEB-INF/student/sCDCList.jsp b/web/WEB-INF/student/sCDCList.jsp new file mode 100644 index 0000000..cc01735 --- /dev/null +++ b/web/WEB-INF/student/sCDCList.jsp @@ -0,0 +1,62 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + + 学院专业查询 + + + + + + + + + +
+
+ +
+ + 学生端 + 学院专业信息 + 学院专业查询 + + + + + + + + + + + + + + + + + + + +
ID学院专业班级
${c.count}${cdc.college}${cdc.department}${cdc.cclass}
+ +
+
+
+ + + + + + + diff --git a/web/WEB-INF/student/sFindFileList.jsp b/web/WEB-INF/student/sFindFileList.jsp new file mode 100644 index 0000000..0851fb1 --- /dev/null +++ b/web/WEB-INF/student/sFindFileList.jsp @@ -0,0 +1,63 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + + 文件列表 + + + + + + + + + +
+
+ +
+ + 学生端 + 个人信息管理 + 文件列表 + + + + + + + + + + + + + + + + + + + + + +
ID文件名文件路径文件大小操作
${f.count}${filelist.fileName}${filelist.filePath}${filelist.fileSize}下载
+ +
+
+
+ + + + + + \ No newline at end of file diff --git a/web/WEB-INF/student/sFindStudentList.jsp b/web/WEB-INF/student/sFindStudentList.jsp new file mode 100644 index 0000000..d39aff1 --- /dev/null +++ b/web/WEB-INF/student/sFindStudentList.jsp @@ -0,0 +1,129 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + + 学生信息查询 + + + + + + + + + +
+
+ +
+ + 学生端 + 学生通讯录 + 本院学生信息 + +
+
+
+ +
+ +
+ +
+ +
+ +
+ + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ID学号学院系别班级姓名性别年龄城市手机号邮箱
${s.count}${student.s_id}${student.s_college}${student.s_department}${student.s_class}${student.s_name}${student.s_sex}${student.s_age}${student.s_address}${student.s_phone}${student.s_email}
+ + +
+ 共${pb.totalCount}条记录,共${pb.totalPage}页 +
+ +
+
+
+ + + + + + + diff --git a/web/WEB-INF/student/sFindTeacherList.jsp b/web/WEB-INF/student/sFindTeacherList.jsp new file mode 100644 index 0000000..a883e13 --- /dev/null +++ b/web/WEB-INF/student/sFindTeacherList.jsp @@ -0,0 +1,66 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + + 本院教师信息 + + + + + + + + + +
+
+ +
+ + 学生端 + 教师通讯录 + 本院教师信息 + + + + + + + + + + + + + + + + + + + + + + + +
ID工号姓名性别文化程度职称
${t.count}${teacher.t_id}${teacher.t_name}${teacher.t_sex}${teacher.t_education}${teacher.t_title}
+ +
+
+
+ + + + + + + diff --git a/web/WEB-INF/student/sHeader.jsp b/web/WEB-INF/student/sHeader.jsp new file mode 100644 index 0000000..02c1ada --- /dev/null +++ b/web/WEB-INF/student/sHeader.jsp @@ -0,0 +1,56 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %> + + + + + + + + + + + + + + + diff --git a/web/WEB-INF/student/sIndex.jsp b/web/WEB-INF/student/sIndex.jsp new file mode 100644 index 0000000..c3f880c --- /dev/null +++ b/web/WEB-INF/student/sIndex.jsp @@ -0,0 +1,118 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + + ${html_title} + + + + + + + +
+
+ +
+ +
+
学校最新公告
+ +
${notify.notifyInfo}

${notify.notifyDate}

+
+
+ +
+
+ +
+ + + diff --git a/web/WEB-INF/student/sInformation.jsp b/web/WEB-INF/student/sInformation.jsp new file mode 100644 index 0000000..7dec92a --- /dev/null +++ b/web/WEB-INF/student/sInformation.jsp @@ -0,0 +1,162 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + + 个人信息 + + + + + + + + + +
+
+ +
+ + 学生端 + 个人信息管理 + 个人信息 + +
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+
+
+ +
+ + +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+ +
+ +
+
+ +
+
+ + + ${update_msg} +
+
+
+ +
+
+
+ + + + + + + + + + + + diff --git a/web/WEB-INF/student/studentAddPhoto.jsp b/web/WEB-INF/student/studentAddPhoto.jsp new file mode 100644 index 0000000..2f8610a --- /dev/null +++ b/web/WEB-INF/student/studentAddPhoto.jsp @@ -0,0 +1,117 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + + 个人信息 + + + + + + + + + + +
+
+ +
+ + 学生端 + 修改头像 + +

+ + +

+

+ + +

+
+ 选择文件 + + + 开始上传 + + +
+

+ ${update_msg} +

+ +
+
+
+ + + + + + + + + + diff --git a/web/WEB-INF/student/studentNav.jsp b/web/WEB-INF/student/studentNav.jsp new file mode 100644 index 0000000..afb00cc --- /dev/null +++ b/web/WEB-INF/student/studentNav.jsp @@ -0,0 +1,59 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + + + + + + + + + diff --git a/web/WEB-INF/student/studentOptionalCourse.jsp b/web/WEB-INF/student/studentOptionalCourse.jsp new file mode 100644 index 0000000..b6a73a2 --- /dev/null +++ b/web/WEB-INF/student/studentOptionalCourse.jsp @@ -0,0 +1,70 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + + 可选课程 + + + + + + + + + +
+
+ +
+ + 学生端 + 选课信息 + 可选课程 + + ${select_msg} + + + + + + + + + + + + + + + + + + + + + + + + +
ID课程号课程名课程简介教师号教师姓名操作
${s.count}${optionalcourse.c_id}${optionalcourse.c_name}${optionalcourse.c_info}${optionalcourse.t_id}${optionalcourse.t_name}选课
+ +
+
+
+ + + + + + + + diff --git a/web/WEB-INF/student/studentSelectCourseList.jsp b/web/WEB-INF/student/studentSelectCourseList.jsp new file mode 100644 index 0000000..e204582 --- /dev/null +++ b/web/WEB-INF/student/studentSelectCourseList.jsp @@ -0,0 +1,73 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + + 选课与成绩 + + + + + + + + + +
+
+ +
+ + 学生端 + 选课信息 + 选课与成绩 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ID学号学生姓名课程号课程名课程简介教师号教师分数
${s.count}${selectcourse.s_id}${selectcourse.s_name}${selectcourse.c_id}${selectcourse.c_name}${selectcourse.c_info}${selectcourse.t_id}${selectcourse.t_name}${selectcourse.score}
+ +
+
+
+ + + + + + + + diff --git a/web/WEB-INF/student/studentUpdatePassword.jsp b/web/WEB-INF/student/studentUpdatePassword.jsp new file mode 100644 index 0000000..9aede88 --- /dev/null +++ b/web/WEB-INF/student/studentUpdatePassword.jsp @@ -0,0 +1,86 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + + 修改密码 + + + + + + + + + +
+
+ +
+ + 学生端 + 个人信息管理 + 修改密码 + +
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+ +
+
+ + ${update_msg} +
+
+
+ +
+
+
+ + + + + + + + + + diff --git a/web/WEB-INF/teacher/addOptionalCourse.jsp b/web/WEB-INF/teacher/addOptionalCourse.jsp new file mode 100644 index 0000000..239aa36 --- /dev/null +++ b/web/WEB-INF/teacher/addOptionalCourse.jsp @@ -0,0 +1,77 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + + 添加课程 + + + + + + + + + +
+
+ +
+ + 教师端 + 课程信息 + 添加课程 + +
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+ +
+
+ + ${update_msg} +
+
+
+ +
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/web/WEB-INF/teacher/findSelectCourseListByCourseId.jsp b/web/WEB-INF/teacher/findSelectCourseListByCourseId.jsp new file mode 100644 index 0000000..f260367 --- /dev/null +++ b/web/WEB-INF/teacher/findSelectCourseListByCourseId.jsp @@ -0,0 +1,77 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + + 我的授课 + + + + + + + + + +
+
+ +
+ + 教师端 + 课程信息 + 学生成绩 + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ID学号学生姓名课程号课程名课程简介学生分数操作
${t.count}${sc.s_id}${sc.s_name}${sc.c_id}${sc.c_name}${sc.c_info}${sc.score}修改分数删除
+ +
+
+
+ + + + + + + diff --git a/web/WEB-INF/teacher/tCDCList.jsp b/web/WEB-INF/teacher/tCDCList.jsp new file mode 100644 index 0000000..c4a5d9b --- /dev/null +++ b/web/WEB-INF/teacher/tCDCList.jsp @@ -0,0 +1,62 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + + 学院专业查询 + + + + + + + + + +
+
+ +
+ + 教师端 + 学院专业信息 + 学院专业查询 + + + + + + + + + + + + + + + + + + + +
ID学院专业班级
${c.count}${cdc.college}${cdc.department}${cdc.cclass}
+ +
+
+
+ + + + + + + diff --git a/web/WEB-INF/teacher/tFindFileList.jsp b/web/WEB-INF/teacher/tFindFileList.jsp new file mode 100644 index 0000000..3d73062 --- /dev/null +++ b/web/WEB-INF/teacher/tFindFileList.jsp @@ -0,0 +1,63 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + + 文件列表 + + + + + + + + + +
+
+ +
+ + 教师端 + 个人信息管理 + 文件列表 + + + + + + + + + + + + + + + + + + + + + +
ID文件名文件路径文件大小操作
${f.count}${filelist.fileName}${filelist.filePath}${filelist.fileSize}下载
+ +
+
+
+ + + + + + \ No newline at end of file diff --git a/web/WEB-INF/teacher/tFindStudentList.jsp b/web/WEB-INF/teacher/tFindStudentList.jsp new file mode 100644 index 0000000..676c681 --- /dev/null +++ b/web/WEB-INF/teacher/tFindStudentList.jsp @@ -0,0 +1,127 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + + 本院学生信息 + + + + + + + + + +
+
+ +
+ + 教师端 + 学生通讯录 + 本院学生信息 + +
+
+
+ +
+ +
+ +
+ +
+ +
+ + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ID学号学院系别班级姓名性别年龄城市手机号邮箱
${s.count}${student.s_id}${student.s_college}${student.s_department}${student.s_class}${student.s_name}${student.s_sex}${student.s_age}${student.s_address}${student.s_phone}${student.s_email}
+ + +
+ 共${pb.totalCount}条记录,共${pb.totalPage}页 +
+ +
+
+
+ + + + + + + diff --git a/web/WEB-INF/teacher/tFindTeacherList.jsp b/web/WEB-INF/teacher/tFindTeacherList.jsp new file mode 100644 index 0000000..a051bd2 --- /dev/null +++ b/web/WEB-INF/teacher/tFindTeacherList.jsp @@ -0,0 +1,66 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + + 本院教师信息 + + + + + + + + + +
+
+ +
+ + 教师端 + 教师通讯录 + 本院教师信息 + + + + + + + + + + + + + + + + + + + + + + + +
ID工号姓名性别文化程度职称
${t.count}${teacher.t_id}${teacher.t_name}${teacher.t_sex}${teacher.t_education}${teacher.t_title}
+ +
+
+
+ + + + + + + diff --git a/web/WEB-INF/teacher/tHeader.jsp b/web/WEB-INF/teacher/tHeader.jsp new file mode 100644 index 0000000..1ebbe18 --- /dev/null +++ b/web/WEB-INF/teacher/tHeader.jsp @@ -0,0 +1,55 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %> + + + + + + + + + + + + + + + diff --git a/web/WEB-INF/teacher/tIndex.jsp b/web/WEB-INF/teacher/tIndex.jsp new file mode 100644 index 0000000..9111280 --- /dev/null +++ b/web/WEB-INF/teacher/tIndex.jsp @@ -0,0 +1,117 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + + ${html_title} + + + + +<%----%> + + +
+
+ +
+ +
+
学校最新公告
+ +
${notify.notifyInfo}

${notify.notifyDate}

+
+
+
+
+ +
+ + + diff --git a/web/WEB-INF/teacher/tInformation.jsp b/web/WEB-INF/teacher/tInformation.jsp new file mode 100644 index 0000000..d54759b --- /dev/null +++ b/web/WEB-INF/teacher/tInformation.jsp @@ -0,0 +1,126 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + + 个人信息 + + + + + + + + + +
+
+ +
+ + 教师端 + 个人信息管理 + 个人信息 + +
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+
+
+ +
+ + +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+ +
+
+
+ + + + + + + + + + + diff --git a/web/WEB-INF/teacher/teacherNav.jsp b/web/WEB-INF/teacher/teacherNav.jsp new file mode 100644 index 0000000..523a765 --- /dev/null +++ b/web/WEB-INF/teacher/teacherNav.jsp @@ -0,0 +1,61 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + + + + + + + + + diff --git a/web/WEB-INF/teacher/teacherOptionalCourse.jsp b/web/WEB-INF/teacher/teacherOptionalCourse.jsp new file mode 100644 index 0000000..c863748 --- /dev/null +++ b/web/WEB-INF/teacher/teacherOptionalCourse.jsp @@ -0,0 +1,70 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + + 我的授课 + + + + + + + + + +
+
+ +
+ + 教师端 + 课程信息 + 我的授课 + + + + + + + + + + + + + + + + + + + + + +
ID课程号课程名课程简介操作
${t.count}${optionalcourse.c_id}${optionalcourse.c_name}${optionalcourse.c_info}修改查看删除
+ +
+
+
+ + + + + + + diff --git a/web/WEB-INF/teacher/teacherUpdatePassword.jsp b/web/WEB-INF/teacher/teacherUpdatePassword.jsp new file mode 100644 index 0000000..914770d --- /dev/null +++ b/web/WEB-INF/teacher/teacherUpdatePassword.jsp @@ -0,0 +1,86 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + + 修改密码 + + + + + + + + + +
+
+ +
+ + 教师端 + 个人信息管理 + 修改密码 + +
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+ +
+
+ + ${update_msg} +
+
+
+ +
+
+
+ + + + + + + + + + diff --git a/web/WEB-INF/teacher/updateOptionalCourseScore.jsp b/web/WEB-INF/teacher/updateOptionalCourseScore.jsp new file mode 100644 index 0000000..fd2b328 --- /dev/null +++ b/web/WEB-INF/teacher/updateOptionalCourseScore.jsp @@ -0,0 +1,95 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + + 修改分数 + + + + + + + + + +
+
+ +
+ + 教师端 + 课程信息 + 修改学生分数 + +
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+ +
+
+ + ${update_msg} +
+
+
+ +
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/web/WEB-INF/teacher/updateTeacherOptionalCourseInfo.jsp b/web/WEB-INF/teacher/updateTeacherOptionalCourseInfo.jsp new file mode 100644 index 0000000..d38348e --- /dev/null +++ b/web/WEB-INF/teacher/updateTeacherOptionalCourseInfo.jsp @@ -0,0 +1,79 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + + 修改课程 + + + + + + + + + +
+
+ +
+ + 教师端 + 课程信息 + 修改课程 + +
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+ +
+
+ + ${update_msg} +
+
+
+ +
+
+
+ + + + + + + + + + diff --git a/web/WEB-INF/uploadImage.jsp b/web/WEB-INF/uploadImage.jsp new file mode 100644 index 0000000..9764c12 --- /dev/null +++ b/web/WEB-INF/uploadImage.jsp @@ -0,0 +1,16 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" + pageEncoding="UTF-8"%> + + + + + Insert title here + + + +
+ + +
+ + \ No newline at end of file diff --git a/web/WEB-INF/web.xml b/web/WEB-INF/web.xml new file mode 100644 index 0000000..d80081d --- /dev/null +++ b/web/WEB-INF/web.xml @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/web/css/file.css b/web/css/file.css new file mode 100644 index 0000000..650d02d --- /dev/null +++ b/web/css/file.css @@ -0,0 +1,54 @@ +.progress{ + margin-top:2px; + width: 200px; + height: 14px; + margin-bottom: 10px; + overflow: hidden; + background-color: #f5f5f5; + 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); +} +.progress-bar{ + background-color: rgb(92, 184, 92); + 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); + background-size: 40px 40px; + box-shadow: rgba(0, 0, 0, 0.14902) 0px -1px 0px 0px inset; + box-sizing: border-box; + color: rgb(255, 255, 255); + display: block; + float: left; + font-size: 12px; + height: 20px; + line-height: 20px; + text-align: center; + transition-delay: 0s; + transition-duration: 0.6s; + transition-property: width; + transition-timing-function: ease; + width: 266.188px; +} + +.file { + position: relative; + display: inline-block; + background-color: #337ab7; + border-radius: 4px; + padding: 8px 12px; + overflow: hidden; + color: #FFFFFF; + text-decoration: none; + text-indent: 0; + line-height: 20px; +} +.file input { + position: absolute; + font-size: 100px; + right: 0; + top: 0; + opacity: 0; +} +.file:hover { + background: #598FBE; + text-decoration: none; +} \ No newline at end of file diff --git a/web/css/layui.css b/web/css/layui.css new file mode 100644 index 0000000..57f0502 --- /dev/null +++ b/web/css/layui.css @@ -0,0 +1,2 @@ +/** 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 diff --git a/web/css/layui.mobile.css b/web/css/layui.mobile.css new file mode 100644 index 0000000..7835392 --- /dev/null +++ b/web/css/layui.mobile.css @@ -0,0 +1,2 @@ +/** 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 diff --git a/web/css/login.css b/web/css/login.css new file mode 100644 index 0000000..eff01b5 --- /dev/null +++ b/web/css/login.css @@ -0,0 +1,20 @@ +@charset "utf-8"; + +body { + background: url("../images/bg.jpg"); + background-position: center; + background-size: cover; + padding-bottom: 0px; +} +.layadmin-user-login-icon { + position: absolute; + left: 1px; + top: 1px; + width: 38px; + line-height: 36px; + text-align: center; + color: #d2d2d2; +} +.login-main .layui-input { + padding-left: 38px; +} \ No newline at end of file diff --git a/web/css/modules/code.css b/web/css/modules/code.css new file mode 100644 index 0000000..9143a25 --- /dev/null +++ b/web/css/modules/code.css @@ -0,0 +1,2 @@ +/** layui-v2.5.6 MIT License By https://www.layui.com */ + html #layuicss-skincodecss{display:none;position:absolute;width:1989px}.layui-code-h3,.layui-code-view{position:relative;font-size:12px}.layui-code-view{display:block;margin:10px 0;padding:0;border:1px solid #e2e2e2;border-left-width:6px;background-color:#F2F2F2;color:#333;font-family:Courier New}.layui-code-h3{padding:0 10px;height:32px;line-height:32px;border-bottom:1px solid #e2e2e2}.layui-code-h3 a{position:absolute;right:10px;top:0;color:#999}.layui-code-view .layui-code-ol{position:relative;overflow:auto}.layui-code-view .layui-code-ol li{position:relative;margin-left:45px;line-height:20px;padding:0 5px;border-left:1px solid #e2e2e2;list-style-type:decimal-leading-zero;*list-style-type:decimal;background-color:#fff}.layui-code-view pre{margin:0}.layui-code-notepad{border:1px solid #0C0C0C;border-left-color:#3F3F3F;background-color:#0C0C0C;color:#C2BE9E}.layui-code-notepad .layui-code-h3{border-bottom:none}.layui-code-notepad .layui-code-ol li{background-color:#3F3F3F;border-left:none} \ No newline at end of file diff --git a/web/css/modules/laydate/default/laydate.css b/web/css/modules/laydate/default/laydate.css new file mode 100644 index 0000000..b900971 --- /dev/null +++ b/web/css/modules/laydate/default/laydate.css @@ -0,0 +1,2 @@ +/** layui-v2.5.6 MIT License By https://www.layui.com */ + .laydate-set-ym,.layui-laydate,.layui-laydate *,.layui-laydate-list{box-sizing:border-box}html #layuicss-laydate{display:none;position:absolute;width:1989px}.layui-laydate *{margin:0;padding:0}.layui-laydate{position:absolute;z-index:66666666;margin:5px 0;border-radius:2px;font-size:14px;-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-name:laydate-upbit;animation-name:laydate-upbit}.layui-laydate-main{width:272px}.layui-laydate-content td,.layui-laydate-header *,.layui-laydate-list li{transition-duration:.3s;-webkit-transition-duration:.3s}@-webkit-keyframes laydate-upbit{from{-webkit-transform:translate3d(0,20px,0);opacity:.3}to{-webkit-transform:translate3d(0,0,0);opacity:1}}@keyframes laydate-upbit{from{transform:translate3d(0,20px,0);opacity:.3}to{transform:translate3d(0,0,0);opacity:1}}.layui-laydate-static{position:relative;z-index:0;display:inline-block;margin:0;-webkit-animation:none;animation:none}.laydate-ym-show .laydate-next-m,.laydate-ym-show .laydate-prev-m{display:none!important}.laydate-ym-show .laydate-next-y,.laydate-ym-show .laydate-prev-y{display:inline-block!important}.laydate-time-show .laydate-set-ym span[lay-type=month],.laydate-time-show .laydate-set-ym span[lay-type=year],.laydate-time-show .layui-laydate-header .layui-icon,.laydate-ym-show .laydate-set-ym span[lay-type=month]{display:none!important}.layui-laydate-header{position:relative;line-height:30px;padding:10px 70px 5px}.laydate-set-ym span,.layui-laydate-header i{padding:0 5px;cursor:pointer}.layui-laydate-header *{display:inline-block;vertical-align:bottom}.layui-laydate-header i{position:absolute;top:10px;color:#999;font-size:18px}.layui-laydate-header i.laydate-prev-y{left:15px}.layui-laydate-header i.laydate-prev-m{left:45px}.layui-laydate-header i.laydate-next-y{right:15px}.layui-laydate-header i.laydate-next-m{right:45px}.laydate-set-ym{width:100%;text-align:center;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.laydate-time-text{cursor:default!important}.layui-laydate-content{position:relative;padding:10px;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.layui-laydate-content table{border-collapse:collapse;border-spacing:0}.layui-laydate-content td,.layui-laydate-content th{width:36px;height:30px;padding:5px;text-align:center}.layui-laydate-content td{position:relative;cursor:pointer}.laydate-day-mark{position:absolute;left:0;top:0;width:100%;height:100%;line-height:30px;font-size:12px;overflow:hidden}.laydate-day-mark::after{position:absolute;content:'';right:2px;top:2px;width:5px;height:5px;border-radius:50%}.layui-laydate-footer{position:relative;height:46px;line-height:26px;padding:10px 20px}.layui-laydate-footer span{margin-right:15px;display:inline-block;cursor:pointer;font-size:12px}.layui-laydate-footer span:hover{color:#5FB878}.laydate-footer-btns{position:absolute;right:10px;top:10px}.laydate-footer-btns span{height:26px;line-height:26px;margin:0 0 0 -1px;padding:0 10px;border:1px solid #C9C9C9;background-color:#fff;white-space:nowrap;vertical-align:top;border-radius:2px}.layui-laydate-list>li,.layui-laydate-range .layui-laydate-main{display:inline-block;vertical-align:middle}.layui-laydate-list{position:absolute;left:0;top:0;width:100%;height:100%;padding:10px;background-color:#fff}.layui-laydate-list>li{position:relative;width:33.3%;height:36px;line-height:36px;margin:3px 0;text-align:center;cursor:pointer}.laydate-month-list>li{width:25%;margin:17px 0}.laydate-time-list>li{height:100%;margin:0;line-height:normal;cursor:default}.laydate-time-list p{position:relative;top:-4px;line-height:29px}.laydate-time-list ol{height:181px;overflow:hidden}.laydate-time-list>li:hover ol{overflow-y:auto}.laydate-time-list ol li{width:130%;padding-left:33px;line-height:30px;text-align:left;cursor:pointer}.layui-laydate-hint{position:absolute;top:115px;left:50%;width:250px;margin-left:-125px;line-height:20px;padding:15px;text-align:center;font-size:12px}.layui-laydate-range{width:546px}.layui-laydate-range .laydate-main-list-0 .laydate-next-m,.layui-laydate-range .laydate-main-list-0 .laydate-next-y,.layui-laydate-range .laydate-main-list-1 .laydate-prev-m,.layui-laydate-range .laydate-main-list-1 .laydate-prev-y{display:none}.layui-laydate-range .laydate-main-list-1 .layui-laydate-content{border-left:1px solid #e2e2e2}.layui-laydate,.layui-laydate-hint{border:1px solid #d2d2d2;box-shadow:0 2px 4px rgba(0,0,0,.12);background-color:#fff;color:#666}.layui-laydate-header{border-bottom:1px solid #e2e2e2}.layui-laydate-header i:hover,.layui-laydate-header span:hover{color:#5FB878}.layui-laydate-content{border-top:none 0;border-bottom:none 0}.layui-laydate-content th{font-weight:400;color:#333}.layui-laydate-content td{color:#666}.layui-laydate-content td.laydate-selected{background-color:#00F7DE}.laydate-selected:hover{background-color:#00F7DE!important}.layui-laydate-content td:hover,.layui-laydate-list li:hover{background-color:#eaeaea;color:#333}.laydate-time-list li ol{margin:0;padding:0;border:1px solid #e2e2e2;border-left-width:0}.laydate-time-list li:first-child ol{border-left-width:1px}.laydate-time-list>li:hover{background:0 0}.layui-laydate-content .laydate-day-next,.layui-laydate-content .laydate-day-prev{color:#d2d2d2}.laydate-selected.laydate-day-next,.laydate-selected.laydate-day-prev{background-color:#f8f8f8!important}.layui-laydate-footer{border-top:1px solid #e2e2e2}.layui-laydate-hint{color:#FF5722}.laydate-day-mark::after{background-color:#5FB878}.layui-laydate-content td.layui-this .laydate-day-mark::after{display:none}.layui-laydate-footer span[lay-type=date]{color:#5FB878}.layui-laydate .layui-this{background-color:#009688!important;color:#fff!important}.layui-laydate .laydate-disabled,.layui-laydate .laydate-disabled:hover{background:0 0!important;color:#d2d2d2!important;cursor:not-allowed!important;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.laydate-theme-molv{border:none}.laydate-theme-molv.layui-laydate-range{width:548px}.laydate-theme-molv .layui-laydate-main{width:274px}.laydate-theme-molv .layui-laydate-header{border:none;background-color:#009688}.laydate-theme-molv .layui-laydate-header i,.laydate-theme-molv .layui-laydate-header span{color:#f6f6f6}.laydate-theme-molv .layui-laydate-header i:hover,.laydate-theme-molv .layui-laydate-header span:hover{color:#fff}.laydate-theme-molv .layui-laydate-content{border:1px solid #e2e2e2;border-top:none;border-bottom:none}.laydate-theme-molv .laydate-main-list-1 .layui-laydate-content{border-left:none}.laydate-theme-grid .laydate-month-list>li,.laydate-theme-grid .laydate-year-list>li,.laydate-theme-grid .layui-laydate-content td,.laydate-theme-grid .layui-laydate-content thead,.laydate-theme-molv .layui-laydate-footer{border:1px solid #e2e2e2}.laydate-theme-grid .laydate-selected,.laydate-theme-grid .laydate-selected:hover{background-color:#f2f2f2!important;color:#009688!important}.laydate-theme-grid .laydate-selected.laydate-day-next,.laydate-theme-grid .laydate-selected.laydate-day-prev{color:#d2d2d2!important}.laydate-theme-grid .laydate-month-list,.laydate-theme-grid .laydate-year-list{margin:1px 0 0 1px}.laydate-theme-grid .laydate-month-list>li,.laydate-theme-grid .laydate-year-list>li{margin:0 -1px -1px 0}.laydate-theme-grid .laydate-year-list>li{height:43px;line-height:43px}.laydate-theme-grid .laydate-month-list>li{height:71px;line-height:71px} \ No newline at end of file diff --git a/web/css/modules/layer/default/icon-ext.png b/web/css/modules/layer/default/icon-ext.png new file mode 100644 index 0000000..bbbb669 Binary files /dev/null and b/web/css/modules/layer/default/icon-ext.png differ diff --git a/web/css/modules/layer/default/icon.png b/web/css/modules/layer/default/icon.png new file mode 100644 index 0000000..3e17da8 Binary files /dev/null and b/web/css/modules/layer/default/icon.png differ diff --git a/web/css/modules/layer/default/layer.css b/web/css/modules/layer/default/layer.css new file mode 100644 index 0000000..032ae12 --- /dev/null +++ b/web/css/modules/layer/default/layer.css @@ -0,0 +1,2 @@ +/** layui-v2.5.6 MIT License By https://www.layui.com */ + .layui-layer-imgbar,.layui-layer-imgtit a,.layui-layer-tab .layui-layer-title span,.layui-layer-title{text-overflow:ellipsis;white-space:nowrap}html #layuicss-layer{display:none;position:absolute;width:1989px}.layui-layer,.layui-layer-shade{position:fixed;_position:absolute;pointer-events:auto}.layui-layer-shade{top:0;left:0;width:100%;height:100%;_height:expression(document.body.offsetHeight+"px")}.layui-layer{-webkit-overflow-scrolling:touch;top:150px;left:0;margin:0;padding:0;background-color:#fff;-webkit-background-clip:content;border-radius:2px;box-shadow:1px 1px 50px rgba(0,0,0,.3)}.layui-layer-close{position:absolute}.layui-layer-content{position:relative}.layui-layer-border{border:1px solid #B2B2B2;border:1px solid rgba(0,0,0,.1);box-shadow:1px 1px 5px rgba(0,0,0,.2)}.layui-layer-load{background:url(loading-1.gif) center center no-repeat #eee}.layui-layer-ico{background:url(icon.png) no-repeat}.layui-layer-btn a,.layui-layer-dialog .layui-layer-ico,.layui-layer-setwin a{display:inline-block;*display:inline;*zoom:1;vertical-align:top}.layui-layer-move{display:none;position:fixed;*position:absolute;left:0;top:0;width:100%;height:100%;cursor:move;opacity:0;filter:alpha(opacity=0);background-color:#fff;z-index:2147483647}.layui-layer-resize{position:absolute;width:15px;height:15px;right:0;bottom:0;cursor:se-resize}.layer-anim{-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.3s;animation-duration:.3s}@-webkit-keyframes layer-bounceIn{0%{opacity:0;-webkit-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes layer-bounceIn{0%{opacity:0;-webkit-transform:scale(.5);-ms-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}.layer-anim-00{-webkit-animation-name:layer-bounceIn;animation-name:layer-bounceIn}@-webkit-keyframes layer-zoomInDown{0%{opacity:0;-webkit-transform:scale(.1) translateY(-2000px);transform:scale(.1) translateY(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateY(60px);transform:scale(.475) translateY(60px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}@keyframes layer-zoomInDown{0%{opacity:0;-webkit-transform:scale(.1) translateY(-2000px);-ms-transform:scale(.1) translateY(-2000px);transform:scale(.1) translateY(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateY(60px);-ms-transform:scale(.475) translateY(60px);transform:scale(.475) translateY(60px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}.layer-anim-01{-webkit-animation-name:layer-zoomInDown;animation-name:layer-zoomInDown}@-webkit-keyframes layer-fadeInUpBig{0%{opacity:0;-webkit-transform:translateY(2000px);transform:translateY(2000px)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes layer-fadeInUpBig{0%{opacity:0;-webkit-transform:translateY(2000px);-ms-transform:translateY(2000px);transform:translateY(2000px)}100%{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}.layer-anim-02{-webkit-animation-name:layer-fadeInUpBig;animation-name:layer-fadeInUpBig}@-webkit-keyframes layer-zoomInLeft{0%{opacity:0;-webkit-transform:scale(.1) translateX(-2000px);transform:scale(.1) translateX(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateX(48px);transform:scale(.475) translateX(48px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}@keyframes layer-zoomInLeft{0%{opacity:0;-webkit-transform:scale(.1) translateX(-2000px);-ms-transform:scale(.1) translateX(-2000px);transform:scale(.1) translateX(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateX(48px);-ms-transform:scale(.475) translateX(48px);transform:scale(.475) translateX(48px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}.layer-anim-03{-webkit-animation-name:layer-zoomInLeft;animation-name:layer-zoomInLeft}@-webkit-keyframes layer-rollIn{0%{opacity:0;-webkit-transform:translateX(-100%) rotate(-120deg);transform:translateX(-100%) rotate(-120deg)}100%{opacity:1;-webkit-transform:translateX(0) rotate(0);transform:translateX(0) rotate(0)}}@keyframes layer-rollIn{0%{opacity:0;-webkit-transform:translateX(-100%) rotate(-120deg);-ms-transform:translateX(-100%) rotate(-120deg);transform:translateX(-100%) rotate(-120deg)}100%{opacity:1;-webkit-transform:translateX(0) rotate(0);-ms-transform:translateX(0) rotate(0);transform:translateX(0) rotate(0)}}.layer-anim-04{-webkit-animation-name:layer-rollIn;animation-name:layer-rollIn}@keyframes layer-fadeIn{0%{opacity:0}100%{opacity:1}}.layer-anim-05{-webkit-animation-name:layer-fadeIn;animation-name:layer-fadeIn}@-webkit-keyframes layer-shake{0%,100%{-webkit-transform:translateX(0);transform:translateX(0)}10%,30%,50%,70%,90%{-webkit-transform:translateX(-10px);transform:translateX(-10px)}20%,40%,60%,80%{-webkit-transform:translateX(10px);transform:translateX(10px)}}@keyframes layer-shake{0%,100%{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}10%,30%,50%,70%,90%{-webkit-transform:translateX(-10px);-ms-transform:translateX(-10px);transform:translateX(-10px)}20%,40%,60%,80%{-webkit-transform:translateX(10px);-ms-transform:translateX(10px);transform:translateX(10px)}}.layer-anim-06{-webkit-animation-name:layer-shake;animation-name:layer-shake}@-webkit-keyframes fadeIn{0%{opacity:0}100%{opacity:1}}.layui-layer-title{padding:0 80px 0 20px;height:42px;line-height:42px;border-bottom:1px solid #eee;font-size:14px;color:#333;overflow:hidden;background-color:#F8F8F8;border-radius:2px 2px 0 0}.layui-layer-setwin{position:absolute;right:15px;*right:0;top:15px;font-size:0;line-height:initial}.layui-layer-setwin a{position:relative;width:16px;height:16px;margin-left:10px;font-size:12px;_overflow:hidden}.layui-layer-setwin .layui-layer-min cite{position:absolute;width:14px;height:2px;left:0;top:50%;margin-top:-1px;background-color:#2E2D3C;cursor:pointer;_overflow:hidden}.layui-layer-setwin .layui-layer-min:hover cite{background-color:#2D93CA}.layui-layer-setwin .layui-layer-max{background-position:-32px -40px}.layui-layer-setwin .layui-layer-max:hover{background-position:-16px -40px}.layui-layer-setwin .layui-layer-maxmin{background-position:-65px -40px}.layui-layer-setwin .layui-layer-maxmin:hover{background-position:-49px -40px}.layui-layer-setwin .layui-layer-close1{background-position:1px -40px;cursor:pointer}.layui-layer-setwin .layui-layer-close1:hover{opacity:.7}.layui-layer-setwin .layui-layer-close2{position:absolute;right:-28px;top:-28px;width:30px;height:30px;margin-left:0;background-position:-149px -31px;*right:-18px;_display:none}.layui-layer-setwin .layui-layer-close2:hover{background-position:-180px -31px}.layui-layer-btn{text-align:right;padding:0 15px 12px;pointer-events:auto;user-select:none;-webkit-user-select:none}.layui-layer-btn a{height:28px;line-height:28px;margin:5px 5px 0;padding:0 15px;border:1px solid #dedede;background-color:#fff;color:#333;border-radius:2px;font-weight:400;cursor:pointer;text-decoration:none}.layui-layer-btn a:hover{opacity:.9;text-decoration:none}.layui-layer-btn a:active{opacity:.8}.layui-layer-btn .layui-layer-btn0{border-color:#1E9FFF;background-color:#1E9FFF;color:#fff}.layui-layer-btn-l{text-align:left}.layui-layer-btn-c{text-align:center}.layui-layer-dialog{min-width:260px}.layui-layer-dialog .layui-layer-content{position:relative;padding:20px;line-height:24px;word-break:break-all;overflow:hidden;font-size:14px;overflow-x:hidden;overflow-y:auto}.layui-layer-dialog .layui-layer-content .layui-layer-ico{position:absolute;top:16px;left:15px;_left:-40px;width:30px;height:30px}.layui-layer-ico1{background-position:-30px 0}.layui-layer-ico2{background-position:-60px 0}.layui-layer-ico3{background-position:-90px 0}.layui-layer-ico4{background-position:-120px 0}.layui-layer-ico5{background-position:-150px 0}.layui-layer-ico6{background-position:-180px 0}.layui-layer-rim{border:6px solid #8D8D8D;border:6px solid rgba(0,0,0,.3);border-radius:5px;box-shadow:none}.layui-layer-msg{min-width:180px;border:1px solid #D3D4D3;box-shadow:none}.layui-layer-hui{min-width:100px;background-color:#000;filter:alpha(opacity=60);background-color:rgba(0,0,0,.6);color:#fff;border:none}.layui-layer-hui .layui-layer-content{padding:12px 25px;text-align:center}.layui-layer-dialog .layui-layer-padding{padding:20px 20px 20px 55px;text-align:left}.layui-layer-page .layui-layer-content{position:relative;overflow:auto}.layui-layer-iframe .layui-layer-btn,.layui-layer-page .layui-layer-btn{padding-top:10px}.layui-layer-nobg{background:0 0}.layui-layer-iframe iframe{display:block;width:100%}.layui-layer-loading{border-radius:100%;background:0 0;box-shadow:none;border:none}.layui-layer-loading .layui-layer-content{width:60px;height:24px;background:url(loading-0.gif) no-repeat}.layui-layer-loading .layui-layer-loading1{width:37px;height:37px;background:url(loading-1.gif) no-repeat}.layui-layer-ico16,.layui-layer-loading .layui-layer-loading2{width:32px;height:32px;background:url(loading-2.gif) no-repeat}.layui-layer-tips{background:0 0;box-shadow:none;border:none}.layui-layer-tips .layui-layer-content{position:relative;line-height:22px;min-width:12px;padding:8px 15px;font-size:12px;_float:left;border-radius:2px;box-shadow:1px 1px 3px rgba(0,0,0,.2);background-color:#000;color:#fff}.layui-layer-tips .layui-layer-close{right:-2px;top:-1px}.layui-layer-tips i.layui-layer-TipsG{position:absolute;width:0;height:0;border-width:8px;border-color:transparent;border-style:dashed;*overflow:hidden}.layui-layer-tips i.layui-layer-TipsB,.layui-layer-tips i.layui-layer-TipsT{left:5px;border-right-style:solid;border-right-color:#000}.layui-layer-tips i.layui-layer-TipsT{bottom:-8px}.layui-layer-tips i.layui-layer-TipsB{top:-8px}.layui-layer-tips i.layui-layer-TipsL,.layui-layer-tips i.layui-layer-TipsR{top:5px;border-bottom-style:solid;border-bottom-color:#000}.layui-layer-tips i.layui-layer-TipsR{left:-8px}.layui-layer-tips i.layui-layer-TipsL{right:-8px}.layui-layer-lan[type=dialog]{min-width:280px}.layui-layer-lan .layui-layer-title{background:#4476A7;color:#fff;border:none}.layui-layer-lan .layui-layer-btn{padding:5px 10px 10px;text-align:right;border-top:1px solid #E9E7E7}.layui-layer-lan .layui-layer-btn a{background:#fff;border-color:#E9E7E7;color:#333}.layui-layer-lan .layui-layer-btn .layui-layer-btn1{background:#C9C5C5}.layui-layer-molv .layui-layer-title{background:#009f95;color:#fff;border:none}.layui-layer-molv .layui-layer-btn a{background:#009f95;border-color:#009f95}.layui-layer-molv .layui-layer-btn .layui-layer-btn1{background:#92B8B1}.layui-layer-iconext{background:url(icon-ext.png) no-repeat}.layui-layer-prompt .layui-layer-input{display:block;width:230px;height:36px;margin:0 auto;line-height:30px;padding-left:10px;border:1px solid #e6e6e6;color:#333}.layui-layer-prompt textarea.layui-layer-input{width:300px;height:100px;line-height:20px;padding:6px 10px}.layui-layer-prompt .layui-layer-content{padding:20px}.layui-layer-prompt .layui-layer-btn{padding-top:0}.layui-layer-tab{box-shadow:1px 1px 50px rgba(0,0,0,.4)}.layui-layer-tab .layui-layer-title{padding-left:0;overflow:visible}.layui-layer-tab .layui-layer-title span{position:relative;float:left;min-width:80px;max-width:260px;padding:0 20px;text-align:center;overflow:hidden;cursor:pointer}.layui-layer-tab .layui-layer-title span.layui-this{height:43px;border-left:1px solid #eee;border-right:1px solid #eee;background-color:#fff;z-index:10}.layui-layer-tab .layui-layer-title span:first-child{border-left:none}.layui-layer-tabmain{line-height:24px;clear:both}.layui-layer-tabmain .layui-layer-tabli{display:none}.layui-layer-tabmain .layui-layer-tabli.layui-this{display:block}.layui-layer-photos{-webkit-animation-duration:.8s;animation-duration:.8s}.layui-layer-photos .layui-layer-content{overflow:hidden;text-align:center}.layui-layer-photos .layui-layer-phimg img{position:relative;width:100%;display:inline-block;*display:inline;*zoom:1;vertical-align:top}.layui-layer-imgbar,.layui-layer-imguide{display:none}.layui-layer-imgnext,.layui-layer-imgprev{position:absolute;top:50%;width:27px;_width:44px;height:44px;margin-top:-22px;outline:0;blr:expression(this.onFocus=this.blur())}.layui-layer-imgprev{left:10px;background-position:-5px -5px;_background-position:-70px -5px}.layui-layer-imgprev:hover{background-position:-33px -5px;_background-position:-120px -5px}.layui-layer-imgnext{right:10px;_right:8px;background-position:-5px -50px;_background-position:-70px -50px}.layui-layer-imgnext:hover{background-position:-33px -50px;_background-position:-120px -50px}.layui-layer-imgbar{position:absolute;left:0;bottom:0;width:100%;height:32px;line-height:32px;background-color:rgba(0,0,0,.8);background-color:#000\9;filter:Alpha(opacity=80);color:#fff;overflow:hidden;font-size:0}.layui-layer-imgtit *{display:inline-block;*display:inline;*zoom:1;vertical-align:top;font-size:12px}.layui-layer-imgtit a{max-width:65%;overflow:hidden;color:#fff}.layui-layer-imgtit a:hover{color:#fff;text-decoration:underline}.layui-layer-imgtit em{padding-left:10px;font-style:normal}@-webkit-keyframes layer-bounceOut{100%{opacity:0;-webkit-transform:scale(.7);transform:scale(.7)}30%{-webkit-transform:scale(1.05);transform:scale(1.05)}0%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes layer-bounceOut{100%{opacity:0;-webkit-transform:scale(.7);-ms-transform:scale(.7);transform:scale(.7)}30%{-webkit-transform:scale(1.05);-ms-transform:scale(1.05);transform:scale(1.05)}0%{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}.layer-anim-close{-webkit-animation-name:layer-bounceOut;animation-name:layer-bounceOut;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.2s;animation-duration:.2s}@media screen and (max-width:1100px){.layui-layer-iframe{overflow-y:auto;-webkit-overflow-scrolling:touch}} \ No newline at end of file diff --git a/web/css/modules/layer/default/loading-0.gif b/web/css/modules/layer/default/loading-0.gif new file mode 100644 index 0000000..6f3c953 Binary files /dev/null and b/web/css/modules/layer/default/loading-0.gif differ diff --git a/web/css/modules/layer/default/loading-1.gif b/web/css/modules/layer/default/loading-1.gif new file mode 100644 index 0000000..db3a483 Binary files /dev/null and b/web/css/modules/layer/default/loading-1.gif differ diff --git a/web/css/modules/layer/default/loading-2.gif b/web/css/modules/layer/default/loading-2.gif new file mode 100644 index 0000000..5bb90fd Binary files /dev/null and b/web/css/modules/layer/default/loading-2.gif differ diff --git a/web/css/style.css b/web/css/style.css new file mode 100644 index 0000000..5744426 --- /dev/null +++ b/web/css/style.css @@ -0,0 +1,578 @@ +@charset "utf-8"; + +.layui-layout-admin .my-header { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 60px; + background: #393D49; + z-index: 2; +} + +.layui-layout-admin .my-header .my-header-logo { + display: inline-block; + width: auto; + height: 30px; + color: white; + font-size: 18px; + line-height: 30px; + padding: 15px; + vertical-align: top; +} + +.layui-layout-admin .my-header img.my-header-logo { + width: 150px; + height: 40px; + text-align: center; + line-height: 40px; + padding: 10px; + border: none; +} + +/* index */ +.my-header-btn { + display: inline-block; + width: auto; + height: 100%; + line-height: 60px; +} + +.my-header-btn .layui-btn .layui-icon { + margin-right: 0; +} + +.my-header-user-nav { + float: right; +} + +.my-header-user-nav img { + width: 40px; + height: 40px; + 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 ul.layui-nav { + display: inline-block; + vertical-align: top; + border-radius: 0; +} + +.my-header ul.layui-nav li a { + max-height: 60px; +} + +.my-side { + position: fixed; + top: 60px; + bottom: 0; + width: 200px; + z-index: 2; + overflow-x: hidden; +} + +.my-side .layui-nav { + border-radius: 0; + min-height: 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 { + margin-right: 5px; +} + +.my-side ul.layui-nav li dl dd a i { + margin-left: 15px; +} + +.my-body { + position: fixed; + top: 60px; + bottom: 0; + left: 200px; + right: 0; + z-index: 1; + overflow: hidden; +} + +.body { + padding: 10px; +} + +.frame-main { + margin-top: -210px; + top: 50%; + position: relative; + height: 433px; + background-color: #edededbf; + backdrop-filter: blur(20px); +} + +.my-body .layui-tab, .my-body .layui-tab .layui-tab-content { + margin: 0; + padding: 0; +} + +.my-body .layui-tab .layui-tab-title li:first-child > i { + display: none; +} + +.my-body .layui-tab, .my-body .layui-tab .layui-tab-content, .my-body .layui-tab .layui-tab-item { + height: 100%; +} + +.my-body iframe { + width: 100%; + height: 100%; + border: none; + outline: none; +} + +.layui-layout-admin .my-footer { + height: 40px; + padding: 2px 0; +} + +.layui-layout-admin .my-footer p { + height: 20px; + line-height: 20px; + font-size: 12px; + text-align: center; +} + +.my-btn-box { + height: 38px; + margin-bottom: 10px; +} + +.my-pay-box > div p { + text-align: center; + margin-bottom: 10px; +} + +/* welcome */ +.my-index-main button.layui-icon { + width: 100%; + font-size: 20px; +} + +.my-index-main .my-nav-btn { + background: #efefef; + cursor: pointer; + border-radius: 2px; + overflow: hidden; +} + +.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:last-child { + height: 20px; + line-height: 20px; + font-size: 12px; +} + +/* 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; + } +} + diff --git a/web/error.jsp b/web/error.jsp new file mode 100644 index 0000000..b89b3a7 --- /dev/null +++ b/web/error.jsp @@ -0,0 +1,138 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + + + + + + + + ERROR + + + +
+
+
+
Time Out
+
+
+
+

I have no secret of success but hard work.

+
Go back +
+
+
+ + diff --git a/web/filterLogin.jsp b/web/filterLogin.jsp new file mode 100644 index 0000000..9bbdda1 --- /dev/null +++ b/web/filterLogin.jsp @@ -0,0 +1,16 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + TITLE + + +<% + if (session.getAttribute("student")==null && session.getAttribute("teacher")==null && session.getAttribute("admin")==null) { +%> + +<% + } +%> + + + diff --git a/web/font/iconfont.eot b/web/font/iconfont.eot new file mode 100644 index 0000000..622d7ec Binary files /dev/null and b/web/font/iconfont.eot differ diff --git a/web/font/iconfont.svg b/web/font/iconfont.svg new file mode 100644 index 0000000..999ca1f --- /dev/null +++ b/web/font/iconfont.svg @@ -0,0 +1,554 @@ + + + + + +Created by iconfont + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/font/iconfont.ttf b/web/font/iconfont.ttf new file mode 100644 index 0000000..06e30f9 Binary files /dev/null and b/web/font/iconfont.ttf differ diff --git a/web/font/iconfont.woff b/web/font/iconfont.woff new file mode 100644 index 0000000..66a1783 Binary files /dev/null and b/web/font/iconfont.woff differ diff --git a/web/font/iconfont.woff2 b/web/font/iconfont.woff2 new file mode 100644 index 0000000..47e9980 Binary files /dev/null and b/web/font/iconfont.woff2 differ diff --git a/web/footer.jsp b/web/footer.jsp new file mode 100644 index 0000000..cc3ae71 --- /dev/null +++ b/web/footer.jsp @@ -0,0 +1,7 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + diff --git a/web/forget.jsp b/web/forget.jsp new file mode 100644 index 0000000..0af2b24 --- /dev/null +++ b/web/forget.jsp @@ -0,0 +1,68 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + + + + 忘记密码 + + + + + + + +
+ +
+
© 2018-2019.YOYLING.COM
+ + + + + + \ No newline at end of file diff --git a/web/images/bg.jpg b/web/images/bg.jpg new file mode 100644 index 0000000..ee4019e Binary files /dev/null and b/web/images/bg.jpg differ diff --git a/web/images/favicon.ico b/web/images/favicon.ico new file mode 100644 index 0000000..80277a6 Binary files /dev/null and b/web/images/favicon.ico differ diff --git a/web/index.jsp b/web/index.jsp new file mode 100644 index 0000000..4f5b138 --- /dev/null +++ b/web/index.jsp @@ -0,0 +1,28 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + TITLE + + + +<% + if (session.getAttribute("student")!=null) { +%> + +<% + }else if (session.getAttribute("teacher")!=null) { +%> + +<% + }else if (session.getAttribute("admin")!=null) { +%> + +<% + }else { +%> + +<% + } +%> + + diff --git a/web/js/jquery-3.2.1.min.js b/web/js/jquery-3.2.1.min.js new file mode 100644 index 0000000..0d4fa37 --- /dev/null +++ b/web/js/jquery-3.2.1.min.js @@ -0,0 +1,4 @@ +/*! jQuery v3.2.1 | (c) JS Foundation and other contributors | jquery.org/license */ +!function(a,b){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){"use strict";var c=[],d=a.document,e=Object.getPrototypeOf,f=c.slice,g=c.concat,h=c.push,i=c.indexOf,j={},k=j.toString,l=j.hasOwnProperty,m=l.toString,n=m.call(Object),o={};function p(a,b){b=b||d;var c=b.createElement("script");c.text=a,b.head.appendChild(c).parentNode.removeChild(c)}var q="3.2.1",r=function(a,b){return new r.fn.init(a,b)},s=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,t=/^-ms-/,u=/-([a-z])/g,v=function(a,b){return b.toUpperCase()};r.fn=r.prototype={jquery:q,constructor:r,length:0,toArray:function(){return f.call(this)},get:function(a){return null==a?f.call(this):a<0?this[a+this.length]:this[a]},pushStack:function(a){var b=r.merge(this.constructor(),a);return b.prevObject=this,b},each:function(a){return r.each(this,a)},map:function(a){return this.pushStack(r.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(f.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(a<0?b:0);return this.pushStack(c>=0&&c0&&b-1 in a)}var x=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=function(a,b){for(var c=0,d=a.length;c+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(N),U=new RegExp("^"+L+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L+"|[*])"),ATTR:new RegExp("^"+M),PSEUDO:new RegExp("^"+N),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),aa=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:d<0?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ba=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ca=function(a,b){return b?"\0"===a?"\ufffd":a.slice(0,-1)+"\\"+a.charCodeAt(a.length-1).toString(16)+" ":"\\"+a},da=function(){m()},ea=ta(function(a){return a.disabled===!0&&("form"in a||"label"in a)},{dir:"parentNode",next:"legend"});try{G.apply(D=H.call(v.childNodes),v.childNodes),D[v.childNodes.length].nodeType}catch(fa){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s=b&&b.ownerDocument,w=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==w&&9!==w&&11!==w)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==w&&(l=Z.exec(a)))if(f=l[1]){if(9===w){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(s&&(j=s.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(l[2])return G.apply(d,b.getElementsByTagName(a)),d;if((f=l[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==w)s=b,r=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(ba,ca):b.setAttribute("id",k=u),o=g(a),h=o.length;while(h--)o[h]="#"+k+" "+sa(o[h]);r=o.join(","),s=$.test(a)&&qa(b.parentNode)||b}if(r)try{return G.apply(d,s.querySelectorAll(r)),d}catch(x){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(P,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("fieldset");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&a.sourceIndex-b.sourceIndex;if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return function(b){return"form"in b?b.parentNode&&b.disabled===!1?"label"in b?"label"in b.parentNode?b.parentNode.disabled===a:b.disabled===a:b.isDisabled===a||b.isDisabled!==!a&&ea(b)===a:b.disabled===a:"label"in b&&b.disabled===a}}function pa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function qa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return!!b&&"HTML"!==b.nodeName},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),v!==n&&(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(n.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){return a.getAttribute("id")===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}}):(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c,d,e,f=b.getElementById(a);if(f){if(c=f.getAttributeNode("id"),c&&c.value===a)return[f];e=b.getElementsByName(a),d=0;while(f=e[d++])if(c=f.getAttributeNode("id"),c&&c.value===a)return[f]}return[]}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){if("undefined"!=typeof b.getElementsByClassName&&p)return b.getElementsByClassName(a)},r=[],q=[],(c.qsa=Y.test(n.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){a.innerHTML="";var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+K+"*[*^$|!~]?="),2!==a.querySelectorAll(":enabled").length&&q.push(":enabled",":disabled"),o.appendChild(a).disabled=!0,2!==a.querySelectorAll(":disabled").length&&q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Y.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"*"),s.call(a,"[s!='']:x"),r.push("!=",N)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Y.test(o.compareDocumentPosition),t=b||Y.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?I(k,a)-I(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?I(k,a)-I(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?la(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(S,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.escape=function(a){return(a+"").replace(ba,ca)},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(_,aa),a[3]=(a[3]||a[4]||a[5]||"").replace(_,aa),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return V.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&T.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(_,aa).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:!b||(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(O," ")+" ").indexOf(c)>-1:"|="===b&&(e===c||e.slice(0,c.length+1)===c+"-"))}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(P,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(_,aa),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return U.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(_,aa).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:oa(!1),disabled:oa(!0),checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:pa(function(){return[0]}),last:pa(function(a,b){return[b-1]}),eq:pa(function(a,b,c){return[c<0?c+b:c]}),even:pa(function(a,b){for(var c=0;c=0;)a.push(d);return a}),gt:pa(function(a,b,c){for(var d=c<0?c+b:c;++d1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function va(a,b,c){for(var d=0,e=b.length;d-1&&(f[j]=!(g[j]=l))}}else r=wa(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ya(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ta(function(a){return a===b},h,!0),l=ta(function(a){return I(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];i1&&ua(m),i>1&&sa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(P,"$1"),c,i0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=E.call(i));u=wa(u)}G.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&ga.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=ya(b[c]),f[u]?d.push(f):e.push(f);f=A(a,za(e,d)),f.selector=a}return f},i=ga.select=function(a,b,c,e){var f,i,j,k,l,m="function"==typeof a&&a,n=!e&&g(a=m.selector||a);if(c=c||[],1===n.length){if(i=n[0]=n[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&9===b.nodeType&&p&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(_,aa),b)||[])[0],!b)return c;m&&(b=b.parentNode),a=a.slice(i.shift().value.length)}f=V.needsContext.test(a)?0:i.length;while(f--){if(j=i[f],d.relative[k=j.type])break;if((l=d.find[k])&&(e=l(j.matches[0].replace(_,aa),$.test(i[0].type)&&qa(b.parentNode)||b))){if(i.splice(f,1),a=e.length&&sa(i),!a)return G.apply(c,e),c;break}}}return(m||h(a,n))(e,b,!p,c,!b||$.test(a)&&qa(b.parentNode)||b),c},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("fieldset"))}),ja(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){if(!c)return a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){if(!c&&"input"===a.nodeName.toLowerCase())return a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(J,function(a,b,c){var d;if(!c)return a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);r.find=x,r.expr=x.selectors,r.expr[":"]=r.expr.pseudos,r.uniqueSort=r.unique=x.uniqueSort,r.text=x.getText,r.isXMLDoc=x.isXML,r.contains=x.contains,r.escapeSelector=x.escape;var y=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&r(a).is(c))break;d.push(a)}return d},z=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},A=r.expr.match.needsContext;function B(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()}var C=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,D=/^.[^:#\[\.,]*$/;function E(a,b,c){return r.isFunction(b)?r.grep(a,function(a,d){return!!b.call(a,d,a)!==c}):b.nodeType?r.grep(a,function(a){return a===b!==c}):"string"!=typeof b?r.grep(a,function(a){return i.call(b,a)>-1!==c}):D.test(b)?r.filter(b,a,c):(b=r.filter(b,a),r.grep(a,function(a){return i.call(b,a)>-1!==c&&1===a.nodeType}))}r.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?r.find.matchesSelector(d,a)?[d]:[]:r.find.matches(a,r.grep(b,function(a){return 1===a.nodeType}))},r.fn.extend({find:function(a){var b,c,d=this.length,e=this;if("string"!=typeof a)return this.pushStack(r(a).filter(function(){for(b=0;b1?r.uniqueSort(c):c},filter:function(a){return this.pushStack(E(this,a||[],!1))},not:function(a){return this.pushStack(E(this,a||[],!0))},is:function(a){return!!E(this,"string"==typeof a&&A.test(a)?r(a):a||[],!1).length}});var F,G=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,H=r.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||F,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:G.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof r?b[0]:b,r.merge(this,r.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),C.test(e[1])&&r.isPlainObject(b))for(e in b)r.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&(this[0]=f,this.length=1),this}return a.nodeType?(this[0]=a,this.length=1,this):r.isFunction(a)?void 0!==c.ready?c.ready(a):a(r):r.makeArray(a,this)};H.prototype=r.fn,F=r(d);var I=/^(?:parents|prev(?:Until|All))/,J={children:!0,contents:!0,next:!0,prev:!0};r.fn.extend({has:function(a){var b=r(a,this),c=b.length;return this.filter(function(){for(var a=0;a-1:1===c.nodeType&&r.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?r.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?i.call(r(a),this[0]):i.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(r.uniqueSort(r.merge(this.get(),r(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function K(a,b){while((a=a[b])&&1!==a.nodeType);return a}r.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return y(a,"parentNode")},parentsUntil:function(a,b,c){return y(a,"parentNode",c)},next:function(a){return K(a,"nextSibling")},prev:function(a){return K(a,"previousSibling")},nextAll:function(a){return y(a,"nextSibling")},prevAll:function(a){return y(a,"previousSibling")},nextUntil:function(a,b,c){return y(a,"nextSibling",c)},prevUntil:function(a,b,c){return y(a,"previousSibling",c)},siblings:function(a){return z((a.parentNode||{}).firstChild,a)},children:function(a){return z(a.firstChild)},contents:function(a){return B(a,"iframe")?a.contentDocument:(B(a,"template")&&(a=a.content||a),r.merge([],a.childNodes))}},function(a,b){r.fn[a]=function(c,d){var e=r.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=r.filter(d,e)),this.length>1&&(J[a]||r.uniqueSort(e),I.test(a)&&e.reverse()),this.pushStack(e)}});var L=/[^\x20\t\r\n\f]+/g;function M(a){var b={};return r.each(a.match(L)||[],function(a,c){b[c]=!0}),b}r.Callbacks=function(a){a="string"==typeof a?M(a):r.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=e||a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h-1)f.splice(c,1),c<=h&&h--}),this},has:function(a){return a?r.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||b||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j};function N(a){return a}function O(a){throw a}function P(a,b,c,d){var e;try{a&&r.isFunction(e=a.promise)?e.call(a).done(b).fail(c):a&&r.isFunction(e=a.then)?e.call(a,b,c):b.apply(void 0,[a].slice(d))}catch(a){c.apply(void 0,[a])}}r.extend({Deferred:function(b){var c=[["notify","progress",r.Callbacks("memory"),r.Callbacks("memory"),2],["resolve","done",r.Callbacks("once memory"),r.Callbacks("once memory"),0,"resolved"],["reject","fail",r.Callbacks("once memory"),r.Callbacks("once memory"),1,"rejected"]],d="pending",e={state:function(){return d},always:function(){return f.done(arguments).fail(arguments),this},"catch":function(a){return e.then(null,a)},pipe:function(){var a=arguments;return r.Deferred(function(b){r.each(c,function(c,d){var e=r.isFunction(a[d[4]])&&a[d[4]];f[d[1]](function(){var a=e&&e.apply(this,arguments);a&&r.isFunction(a.promise)?a.promise().progress(b.notify).done(b.resolve).fail(b.reject):b[d[0]+"With"](this,e?[a]:arguments)})}),a=null}).promise()},then:function(b,d,e){var f=0;function g(b,c,d,e){return function(){var h=this,i=arguments,j=function(){var a,j;if(!(b=f&&(d!==O&&(h=void 0,i=[a]),c.rejectWith(h,i))}};b?k():(r.Deferred.getStackHook&&(k.stackTrace=r.Deferred.getStackHook()),a.setTimeout(k))}}return r.Deferred(function(a){c[0][3].add(g(0,a,r.isFunction(e)?e:N,a.notifyWith)),c[1][3].add(g(0,a,r.isFunction(b)?b:N)),c[2][3].add(g(0,a,r.isFunction(d)?d:O))}).promise()},promise:function(a){return null!=a?r.extend(a,e):e}},f={};return r.each(c,function(a,b){var g=b[2],h=b[5];e[b[1]]=g.add,h&&g.add(function(){d=h},c[3-a][2].disable,c[0][2].lock),g.add(b[3].fire),f[b[0]]=function(){return f[b[0]+"With"](this===f?void 0:this,arguments),this},f[b[0]+"With"]=g.fireWith}),e.promise(f),b&&b.call(f,f),f},when:function(a){var b=arguments.length,c=b,d=Array(c),e=f.call(arguments),g=r.Deferred(),h=function(a){return function(c){d[a]=this,e[a]=arguments.length>1?f.call(arguments):c,--b||g.resolveWith(d,e)}};if(b<=1&&(P(a,g.done(h(c)).resolve,g.reject,!b),"pending"===g.state()||r.isFunction(e[c]&&e[c].then)))return g.then();while(c--)P(e[c],h(c),g.reject);return g.promise()}});var Q=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;r.Deferred.exceptionHook=function(b,c){a.console&&a.console.warn&&b&&Q.test(b.name)&&a.console.warn("jQuery.Deferred exception: "+b.message,b.stack,c)},r.readyException=function(b){a.setTimeout(function(){throw b})};var R=r.Deferred();r.fn.ready=function(a){return R.then(a)["catch"](function(a){r.readyException(a)}),this},r.extend({isReady:!1,readyWait:1,ready:function(a){(a===!0?--r.readyWait:r.isReady)||(r.isReady=!0,a!==!0&&--r.readyWait>0||R.resolveWith(d,[r]))}}),r.ready.then=R.then;function S(){d.removeEventListener("DOMContentLoaded",S), +a.removeEventListener("load",S),r.ready()}"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(r.ready):(d.addEventListener("DOMContentLoaded",S),a.addEventListener("load",S));var T=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===r.type(c)){e=!0;for(h in c)T(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,r.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(r(a),c)})),b))for(;h1,null,!0)},removeData:function(a){return this.each(function(){X.remove(this,a)})}}),r.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=W.get(a,b),c&&(!d||Array.isArray(c)?d=W.access(a,b,r.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=r.queue(a,b),d=c.length,e=c.shift(),f=r._queueHooks(a,b),g=function(){r.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return W.get(a,c)||W.access(a,c,{empty:r.Callbacks("once memory").add(function(){W.remove(a,[b+"queue",c])})})}}),r.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length\x20\t\r\n\f]+)/i,la=/^$|\/(?:java|ecma)script/i,ma={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};ma.optgroup=ma.option,ma.tbody=ma.tfoot=ma.colgroup=ma.caption=ma.thead,ma.th=ma.td;function na(a,b){var c;return c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[],void 0===b||b&&B(a,b)?r.merge([a],c):c}function oa(a,b){for(var c=0,d=a.length;c-1)e&&e.push(f);else if(j=r.contains(f.ownerDocument,f),g=na(l.appendChild(f),"script"),j&&oa(g),c){k=0;while(f=g[k++])la.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),o.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="",o.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var ra=d.documentElement,sa=/^key/,ta=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,ua=/^([^.]*)(?:\.(.+)|)/;function va(){return!0}function wa(){return!1}function xa(){try{return d.activeElement}catch(a){}}function ya(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)ya(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=wa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return r().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=r.guid++)),a.each(function(){r.event.add(this,b,e,d,c)})}r.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.get(a);if(q){c.handler&&(f=c,c=f.handler,e=f.selector),e&&r.find.matchesSelector(ra,e),c.guid||(c.guid=r.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return"undefined"!=typeof r&&r.event.triggered!==b.type?r.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(L)||[""],j=b.length;while(j--)h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n&&(l=r.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=r.event.special[n]||{},k=r.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&r.expr.match.needsContext.test(e),namespace:o.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),r.event.global[n]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.hasData(a)&&W.get(a);if(q&&(i=q.events)){b=(b||"").match(L)||[""],j=b.length;while(j--)if(h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n){l=r.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||r.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)r.event.remove(a,n+b[j],c,d,!0);r.isEmptyObject(i)&&W.remove(a,"handle events")}},dispatch:function(a){var b=r.event.fix(a),c,d,e,f,g,h,i=new Array(arguments.length),j=(W.get(this,"events")||{})[b.type]||[],k=r.event.special[b.type]||{};for(i[0]=b,c=1;c=1))for(;j!==this;j=j.parentNode||this)if(1===j.nodeType&&("click"!==a.type||j.disabled!==!0)){for(f=[],g={},c=0;c-1:r.find(e,this,null,[j]).length),g[e]&&f.push(d);f.length&&h.push({elem:j,handlers:f})}return j=this,i\x20\t\r\n\f]*)[^>]*)\/>/gi,Aa=/\s*$/g;function Ea(a,b){return B(a,"table")&&B(11!==b.nodeType?b:b.firstChild,"tr")?r(">tbody",a)[0]||a:a}function Fa(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function Ga(a){var b=Ca.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Ha(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(W.hasData(a)&&(f=W.access(a),g=W.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;c1&&"string"==typeof q&&!o.checkClone&&Ba.test(q))return a.each(function(e){var f=a.eq(e);s&&(b[0]=q.call(this,e,f.html())),Ja(f,b,c,d)});if(m&&(e=qa(b,a[0].ownerDocument,!1,a,d),f=e.firstChild,1===e.childNodes.length&&(e=f),f||d)){for(h=r.map(na(e,"script"),Fa),i=h.length;l")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=r.contains(a.ownerDocument,a);if(!(o.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||r.isXMLDoc(a)))for(g=na(h),f=na(a),d=0,e=f.length;d0&&oa(g,!i&&na(a,"script")),h},cleanData:function(a){for(var b,c,d,e=r.event.special,f=0;void 0!==(c=a[f]);f++)if(U(c)){if(b=c[W.expando]){if(b.events)for(d in b.events)e[d]?r.event.remove(c,d):r.removeEvent(c,d,b.handle);c[W.expando]=void 0}c[X.expando]&&(c[X.expando]=void 0)}}}),r.fn.extend({detach:function(a){return Ka(this,a,!0)},remove:function(a){return Ka(this,a)},text:function(a){return T(this,function(a){return void 0===a?r.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.appendChild(a)}})},prepend:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(r.cleanData(na(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null!=a&&a,b=null==b?a:b,this.map(function(){return r.clone(this,a,b)})},html:function(a){return T(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!Aa.test(a)&&!ma[(ka.exec(a)||["",""])[1].toLowerCase()]){a=r.htmlPrefilter(a);try{for(;c1)}});function _a(a,b,c,d,e){return new _a.prototype.init(a,b,c,d,e)}r.Tween=_a,_a.prototype={constructor:_a,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||r.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(r.cssNumber[c]?"":"px")},cur:function(){var a=_a.propHooks[this.prop];return a&&a.get?a.get(this):_a.propHooks._default.get(this)},run:function(a){var b,c=_a.propHooks[this.prop];return this.options.duration?this.pos=b=r.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):_a.propHooks._default.set(this),this}},_a.prototype.init.prototype=_a.prototype,_a.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=r.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){r.fx.step[a.prop]?r.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[r.cssProps[a.prop]]&&!r.cssHooks[a.prop]?a.elem[a.prop]=a.now:r.style(a.elem,a.prop,a.now+a.unit)}}},_a.propHooks.scrollTop=_a.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},r.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},r.fx=_a.prototype.init,r.fx.step={};var ab,bb,cb=/^(?:toggle|show|hide)$/,db=/queueHooks$/;function eb(){bb&&(d.hidden===!1&&a.requestAnimationFrame?a.requestAnimationFrame(eb):a.setTimeout(eb,r.fx.interval),r.fx.tick())}function fb(){return a.setTimeout(function(){ab=void 0}),ab=r.now()}function gb(a,b){var c,d=0,e={height:a};for(b=b?1:0;d<4;d+=2-b)c=ca[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function hb(a,b,c){for(var d,e=(kb.tweeners[b]||[]).concat(kb.tweeners["*"]),f=0,g=e.length;f1)},removeAttr:function(a){return this.each(function(){r.removeAttr(this,a)})}}),r.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?r.prop(a,b,c):(1===f&&r.isXMLDoc(a)||(e=r.attrHooks[b.toLowerCase()]||(r.expr.match.bool.test(b)?lb:void 0)),void 0!==c?null===c?void r.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=r.find.attr(a,b), +null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!o.radioValue&&"radio"===b&&B(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d=0,e=b&&b.match(L);if(e&&1===a.nodeType)while(c=e[d++])a.removeAttribute(c)}}),lb={set:function(a,b,c){return b===!1?r.removeAttr(a,c):a.setAttribute(c,c),c}},r.each(r.expr.match.bool.source.match(/\w+/g),function(a,b){var c=mb[b]||r.find.attr;mb[b]=function(a,b,d){var e,f,g=b.toLowerCase();return d||(f=mb[g],mb[g]=e,e=null!=c(a,b,d)?g:null,mb[g]=f),e}});var nb=/^(?:input|select|textarea|button)$/i,ob=/^(?:a|area)$/i;r.fn.extend({prop:function(a,b){return T(this,r.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[r.propFix[a]||a]})}}),r.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&r.isXMLDoc(a)||(b=r.propFix[b]||b,e=r.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=r.find.attr(a,"tabindex");return b?parseInt(b,10):nb.test(a.nodeName)||ob.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),o.optSelected||(r.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),r.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){r.propFix[this.toLowerCase()]=this});function pb(a){var b=a.match(L)||[];return b.join(" ")}function qb(a){return a.getAttribute&&a.getAttribute("class")||""}r.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).addClass(a.call(this,b,qb(this)))});if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).removeClass(a.call(this,b,qb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):r.isFunction(a)?this.each(function(c){r(this).toggleClass(a.call(this,c,qb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=r(this),f=a.match(L)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=qb(this),b&&W.set(this,"__className__",b),this.setAttribute&&this.setAttribute("class",b||a===!1?"":W.get(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+pb(qb(c))+" ").indexOf(b)>-1)return!0;return!1}});var rb=/\r/g;r.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=r.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,r(this).val()):a,null==e?e="":"number"==typeof e?e+="":Array.isArray(e)&&(e=r.map(e,function(a){return null==a?"":a+""})),b=r.valHooks[this.type]||r.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=r.valHooks[e.type]||r.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(rb,""):null==c?"":c)}}}),r.extend({valHooks:{option:{get:function(a){var b=r.find.attr(a,"value");return null!=b?b:pb(r.text(a))}},select:{get:function(a){var b,c,d,e=a.options,f=a.selectedIndex,g="select-one"===a.type,h=g?null:[],i=g?f+1:e.length;for(d=f<0?i:g?f:0;d-1)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),r.each(["radio","checkbox"],function(){r.valHooks[this]={set:function(a,b){if(Array.isArray(b))return a.checked=r.inArray(r(a).val(),b)>-1}},o.checkOn||(r.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var sb=/^(?:focusinfocus|focusoutblur)$/;r.extend(r.event,{trigger:function(b,c,e,f){var g,h,i,j,k,m,n,o=[e||d],p=l.call(b,"type")?b.type:b,q=l.call(b,"namespace")?b.namespace.split("."):[];if(h=i=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!sb.test(p+r.event.triggered)&&(p.indexOf(".")>-1&&(q=p.split("."),p=q.shift(),q.sort()),k=p.indexOf(":")<0&&"on"+p,b=b[r.expando]?b:new r.Event(p,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=q.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:r.makeArray(c,[b]),n=r.event.special[p]||{},f||!n.trigger||n.trigger.apply(e,c)!==!1)){if(!f&&!n.noBubble&&!r.isWindow(e)){for(j=n.delegateType||p,sb.test(j+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),i=h;i===(e.ownerDocument||d)&&o.push(i.defaultView||i.parentWindow||a)}g=0;while((h=o[g++])&&!b.isPropagationStopped())b.type=g>1?j:n.bindType||p,m=(W.get(h,"events")||{})[b.type]&&W.get(h,"handle"),m&&m.apply(h,c),m=k&&h[k],m&&m.apply&&U(h)&&(b.result=m.apply(h,c),b.result===!1&&b.preventDefault());return b.type=p,f||b.isDefaultPrevented()||n._default&&n._default.apply(o.pop(),c)!==!1||!U(e)||k&&r.isFunction(e[p])&&!r.isWindow(e)&&(i=e[k],i&&(e[k]=null),r.event.triggered=p,e[p](),r.event.triggered=void 0,i&&(e[k]=i)),b.result}},simulate:function(a,b,c){var d=r.extend(new r.Event,c,{type:a,isSimulated:!0});r.event.trigger(d,null,b)}}),r.fn.extend({trigger:function(a,b){return this.each(function(){r.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];if(c)return r.event.trigger(a,b,c,!0)}}),r.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(a,b){r.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),r.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),o.focusin="onfocusin"in a,o.focusin||r.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){r.event.simulate(b,a.target,r.event.fix(a))};r.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=W.access(d,b);e||d.addEventListener(a,c,!0),W.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=W.access(d,b)-1;e?W.access(d,b,e):(d.removeEventListener(a,c,!0),W.remove(d,b))}}});var tb=a.location,ub=r.now(),vb=/\?/;r.parseXML=function(b){var c;if(!b||"string"!=typeof b)return null;try{c=(new a.DOMParser).parseFromString(b,"text/xml")}catch(d){c=void 0}return c&&!c.getElementsByTagName("parsererror").length||r.error("Invalid XML: "+b),c};var wb=/\[\]$/,xb=/\r?\n/g,yb=/^(?:submit|button|image|reset|file)$/i,zb=/^(?:input|select|textarea|keygen)/i;function Ab(a,b,c,d){var e;if(Array.isArray(b))r.each(b,function(b,e){c||wb.test(a)?d(a,e):Ab(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==r.type(b))d(a,b);else for(e in b)Ab(a+"["+e+"]",b[e],c,d)}r.param=function(a,b){var c,d=[],e=function(a,b){var c=r.isFunction(b)?b():b;d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(null==c?"":c)};if(Array.isArray(a)||a.jquery&&!r.isPlainObject(a))r.each(a,function(){e(this.name,this.value)});else for(c in a)Ab(c,a[c],b,e);return d.join("&")},r.fn.extend({serialize:function(){return r.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=r.prop(this,"elements");return a?r.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!r(this).is(":disabled")&&zb.test(this.nodeName)&&!yb.test(a)&&(this.checked||!ja.test(a))}).map(function(a,b){var c=r(this).val();return null==c?null:Array.isArray(c)?r.map(c,function(a){return{name:b.name,value:a.replace(xb,"\r\n")}}):{name:b.name,value:c.replace(xb,"\r\n")}}).get()}});var Bb=/%20/g,Cb=/#.*$/,Db=/([?&])_=[^&]*/,Eb=/^(.*?):[ \t]*([^\r\n]*)$/gm,Fb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Gb=/^(?:GET|HEAD)$/,Hb=/^\/\//,Ib={},Jb={},Kb="*/".concat("*"),Lb=d.createElement("a");Lb.href=tb.href;function Mb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(L)||[];if(r.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Nb(a,b,c,d){var e={},f=a===Jb;function g(h){var i;return e[h]=!0,r.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Ob(a,b){var c,d,e=r.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&r.extend(!0,a,d),a}function Pb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}if(f)return f!==i[0]&&i.unshift(f),c[f]}function Qb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}r.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:tb.href,type:"GET",isLocal:Fb.test(tb.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Kb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":r.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Ob(Ob(a,r.ajaxSettings),b):Ob(r.ajaxSettings,a)},ajaxPrefilter:Mb(Ib),ajaxTransport:Mb(Jb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var e,f,g,h,i,j,k,l,m,n,o=r.ajaxSetup({},c),p=o.context||o,q=o.context&&(p.nodeType||p.jquery)?r(p):r.event,s=r.Deferred(),t=r.Callbacks("once memory"),u=o.statusCode||{},v={},w={},x="canceled",y={readyState:0,getResponseHeader:function(a){var b;if(k){if(!h){h={};while(b=Eb.exec(g))h[b[1].toLowerCase()]=b[2]}b=h[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return k?g:null},setRequestHeader:function(a,b){return null==k&&(a=w[a.toLowerCase()]=w[a.toLowerCase()]||a,v[a]=b),this},overrideMimeType:function(a){return null==k&&(o.mimeType=a),this},statusCode:function(a){var b;if(a)if(k)y.always(a[y.status]);else for(b in a)u[b]=[u[b],a[b]];return this},abort:function(a){var b=a||x;return e&&e.abort(b),A(0,b),this}};if(s.promise(y),o.url=((b||o.url||tb.href)+"").replace(Hb,tb.protocol+"//"),o.type=c.method||c.type||o.method||o.type,o.dataTypes=(o.dataType||"*").toLowerCase().match(L)||[""],null==o.crossDomain){j=d.createElement("a");try{j.href=o.url,j.href=j.href,o.crossDomain=Lb.protocol+"//"+Lb.host!=j.protocol+"//"+j.host}catch(z){o.crossDomain=!0}}if(o.data&&o.processData&&"string"!=typeof o.data&&(o.data=r.param(o.data,o.traditional)),Nb(Ib,o,c,y),k)return y;l=r.event&&o.global,l&&0===r.active++&&r.event.trigger("ajaxStart"),o.type=o.type.toUpperCase(),o.hasContent=!Gb.test(o.type),f=o.url.replace(Cb,""),o.hasContent?o.data&&o.processData&&0===(o.contentType||"").indexOf("application/x-www-form-urlencoded")&&(o.data=o.data.replace(Bb,"+")):(n=o.url.slice(f.length),o.data&&(f+=(vb.test(f)?"&":"?")+o.data,delete o.data),o.cache===!1&&(f=f.replace(Db,"$1"),n=(vb.test(f)?"&":"?")+"_="+ub++ +n),o.url=f+n),o.ifModified&&(r.lastModified[f]&&y.setRequestHeader("If-Modified-Since",r.lastModified[f]),r.etag[f]&&y.setRequestHeader("If-None-Match",r.etag[f])),(o.data&&o.hasContent&&o.contentType!==!1||c.contentType)&&y.setRequestHeader("Content-Type",o.contentType),y.setRequestHeader("Accept",o.dataTypes[0]&&o.accepts[o.dataTypes[0]]?o.accepts[o.dataTypes[0]]+("*"!==o.dataTypes[0]?", "+Kb+"; q=0.01":""):o.accepts["*"]);for(m in o.headers)y.setRequestHeader(m,o.headers[m]);if(o.beforeSend&&(o.beforeSend.call(p,y,o)===!1||k))return y.abort();if(x="abort",t.add(o.complete),y.done(o.success),y.fail(o.error),e=Nb(Jb,o,c,y)){if(y.readyState=1,l&&q.trigger("ajaxSend",[y,o]),k)return y;o.async&&o.timeout>0&&(i=a.setTimeout(function(){y.abort("timeout")},o.timeout));try{k=!1,e.send(v,A)}catch(z){if(k)throw z;A(-1,z)}}else A(-1,"No Transport");function A(b,c,d,h){var j,m,n,v,w,x=c;k||(k=!0,i&&a.clearTimeout(i),e=void 0,g=h||"",y.readyState=b>0?4:0,j=b>=200&&b<300||304===b,d&&(v=Pb(o,y,d)),v=Qb(o,v,y,j),j?(o.ifModified&&(w=y.getResponseHeader("Last-Modified"),w&&(r.lastModified[f]=w),w=y.getResponseHeader("etag"),w&&(r.etag[f]=w)),204===b||"HEAD"===o.type?x="nocontent":304===b?x="notmodified":(x=v.state,m=v.data,n=v.error,j=!n)):(n=x,!b&&x||(x="error",b<0&&(b=0))),y.status=b,y.statusText=(c||x)+"",j?s.resolveWith(p,[m,x,y]):s.rejectWith(p,[y,x,n]),y.statusCode(u),u=void 0,l&&q.trigger(j?"ajaxSuccess":"ajaxError",[y,o,j?m:n]),t.fireWith(p,[y,x]),l&&(q.trigger("ajaxComplete",[y,o]),--r.active||r.event.trigger("ajaxStop")))}return y},getJSON:function(a, b, c){return r.get(a,b,c,"json")},getScript:function(a, b){return r.get(a,void 0,b,"script")}}),r.each(["get","post"],function(a, b){r[b]=function(a, c, d, e){return r.isFunction(c)&&(e=e||d,d=c,c=void 0),r.ajax(r.extend({url:a,type:b,dataType:e,data:c,success:d},r.isPlainObject(a)&&a))}}),r._evalUrl=function(a){return r.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},r.fn.extend({wrapAll:function(a){var b;return this[0]&&(r.isFunction(a)&&(a=a.call(this[0])),b=r(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this},wrapInner:function(a){return r.isFunction(a)?this.each(function(b){r(this).wrapInner(a.call(this,b))}):this.each(function(){var b=r(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=r.isFunction(a);return this.each(function(c){r(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(a){return this.parent(a).not("body").each(function(){r(this).replaceWith(this.childNodes)}),this}}),r.expr.pseudos.hidden=function(a){return!r.expr.pseudos.visible(a)},r.expr.pseudos.visible=function(a){return!!(a.offsetWidth||a.offsetHeight||a.getClientRects().length)},r.ajaxSettings.xhr=function(){try{return new a.XMLHttpRequest}catch(b){}};var Rb={0:200,1223:204},Sb=r.ajaxSettings.xhr();o.cors=!!Sb&&"withCredentials"in Sb,o.ajax=Sb=!!Sb,r.ajaxTransport(function(b){var c,d;if(o.cors||Sb&&!b.crossDomain)return{send:function(e, f){var g,h=b.xhr();if(h.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(g in b.xhrFields)h[g]=b.xhrFields[g];b.mimeType&&h.overrideMimeType&&h.overrideMimeType(b.mimeType),b.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest");for(g in e)h.setRequestHeader(g,e[g]);c=function(a){return function(){c&&(c=d=h.onload=h.onerror=h.onabort=h.onreadystatechange=null,"abort"===a?h.abort():"error"===a?"number"!=typeof h.status?f(0,"error"):f(h.status,h.statusText):f(Rb[h.status]||h.status,h.statusText,"text"!==(h.responseType||"text")||"string"!=typeof h.responseText?{binary:h.response}:{text:h.responseText},h.getAllResponseHeaders()))}},h.onload=c(),d=h.onerror=c("error"),void 0!==h.onabort?h.onabort=d:h.onreadystatechange=function(){4===h.readyState&&a.setTimeout(function(){c&&d()})},c=c("abort");try{h.send(b.hasContent&&b.data||null)}catch(i){if(c)throw i}},abort:function(){c&&c()}}}),r.ajaxPrefilter(function(a){a.crossDomain&&(a.contents.script=!1)}),r.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return r.globalEval(a),a}}}),r.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),r.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(e, f){b=r(" + + + +
+ +
+
© 2018-2019.YOYLING.COM
+ + + + + + + + + \ No newline at end of file diff --git a/web/message.jsp b/web/message.jsp new file mode 100644 index 0000000..996949a --- /dev/null +++ b/web/message.jsp @@ -0,0 +1,90 @@ +<%@ 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" %> + + + + + +<% + //定义上传文件的最大字节 + int MAX_SIZE = 102400 * 102400; + //创建根路径的保存变量 + String rootPath; + //声明文件读入类 + DataInputStream in = null; + FileOutputStream fileOut = null; + //取得互联网程序的绝对地址 + String realPath = request.getSession().getServletContext().getRealPath("/"); + realPath = realPath.substring(0, realPath.indexOf("\\out")); +// out.print(realPath); + //创建文件的保存目录 + rootPath = realPath + "\\web\\upload\\"; + //取得客户端上传的数据类型 + String contentType = request.getContentType(); + try { + if (contentType.indexOf("multipart/form-data") >= 0) { + //读入上传数据 + 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数组里面 + while (totalBytesRead < formDataLength) { + byteRead = in.read(dataBytes, totalBytesRead, formDataLength); + totalBytesRead += byteRead; + } + //根据byte数组创建字符串 + 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("="); + //取得数据的分隔字符串 + String boundary = contentType.substring(lastIndex + 1, contentType.length()); + //创建保存路径的文件名 + String fileName = rootPath + saveFile; + int pos; + pos = file.indexOf("filename = \""); + pos = file.indexOf("\n", pos) + 1; + 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(); + } + //创建文件的输出类 + fileOut = new FileOutputStream(fileName); + //保存文件的数据 + fileOut.write(dataBytes, startPos, (endPos - startPos)); + fileOut.close(); + out.print("文件上传成功"); + } else { + String content = request.getContentType(); + out.print("上传的文件类型是" + content + "类型的,请上传目录mutipart/form-data类型的文件"); + } + } catch (Exception ex) { + throw new ServerException(ex.getMessage()); + } +%> + + \ No newline at end of file diff --git a/web/register.jsp b/web/register.jsp new file mode 100644 index 0000000..c58ce25 --- /dev/null +++ b/web/register.jsp @@ -0,0 +1,152 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + + + + + 注册页 + + + + + + +
+ + +
+
© 2018-2019.YOYLING.COM
+ + + + + + \ No newline at end of file diff --git a/web/upload2.jsp b/web/upload2.jsp new file mode 100644 index 0000000..37c4c0b --- /dev/null +++ b/web/upload2.jsp @@ -0,0 +1,16 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + 文件上传 + + +

文件上传

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

+ +
+ + \ No newline at end of file