From f1a38769f0d20f1aa659c23c44165446d93a10d9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E9=9B=B7=E5=AE=87?= <1299892569@qq.com>
Date: Tue, 9 Dec 2025 17:36:07 +0800
Subject: [PATCH] =?UTF-8?q?=E9=AB=98=E6=A0=A1=E5=AD=A6=E7=94=9F=E8=80=83?=
=?UTF-8?q?=E5=8B=A4=E7=B3=BB=E7=BB=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.idea/.gitignore | 8 +
.idea/compiler.xml | 18 +
.idea/dataSources.xml | 13 +
.../9b8fdef2-1a5d-4c09-a6ad-93b70e81cc04.xml | 661 +++++++
.../schema/information_schema.FNRwLQ.meta | 2 +
.../storage_v2/_src_/schema/mysql.osA4Bg.meta | 2 +
.../schema/performance_schema.kIw0nw.meta | 2 +
.idea/encodings.xml | 6 +
.idea/inspectionProfiles/Project_Default.xml | 97 ++
.idea/jarRepositories.xml | 30 +
.idea/misc.xml | 12 +
.idea/modules.xml | 8 +
.idea/smartfox_info.xml | 6 +
.idea/uiDesigner.xml | 124 ++
.idea/vcs.xml | 6 +
LICENSE | 201 +++
README.md | 30 +
Student-Attendance-Management-System.iml | 8 +
pom.xml | 73 +
src/main/java/com/lxq/DemoApplication.java | 16 +
.../Interceptor/InterceptorConfiguration.java | 28 +
.../com/lxq/Interceptor/UrlInterceptor.java | 53 +
src/main/java/com/lxq/Tools/PageTools.java | 63 +
src/main/java/com/lxq/Tools/TimeTools.java | 48 +
src/main/java/com/lxq/Tools/UserTools.java | 27 +
.../CourseApplicationController.java | 87 +
.../lxq/controller/CurriculumController.java | 78 +
.../com/lxq/controller/IndexController.java | 353 ++++
.../LeaveApplicationController.java | 79 +
.../com/lxq/controller/RecordController.java | 65 +
.../com/lxq/controller/UserController.java | 113 ++
.../lxq/model/dao/CourseApplicationDAO.java | 26 +
.../java/com/lxq/model/dao/CurriculumDAO.java | 27 +
.../lxq/model/dao/LeaveApplicationDAO.java | 26 +
.../java/com/lxq/model/dao/RecordDAO.java | 26 +
src/main/java/com/lxq/model/dao/UserDAO.java | 26 +
.../lxq/model/object/CourseApplication.java | 114 ++
.../java/com/lxq/model/object/Curriculum.java | 156 ++
.../lxq/model/object/LeaveApplication.java | 142 ++
src/main/java/com/lxq/model/object/Page.java | 77 +
.../java/com/lxq/model/object/Record.java | 142 ++
src/main/java/com/lxq/model/object/User.java | 88 +
.../service/CourseApplicationService.java | 213 +++
.../lxq/model/service/CurriculumService.java | 128 ++
.../service/LeaveApplicationService.java | 148 ++
.../com/lxq/model/service/RecordService.java | 142 ++
.../com/lxq/model/service/UserService.java | 88 +
src/main/resources/application.yml | 25 +
src/main/resources/banner.txt | 40 +
.../mapper/CourseApplicationMapper.xml | 122 ++
.../resources/mapper/CurriculumMapper.xml | 159 ++
.../mapper/LeaveApplicationMapper.xml | 153 ++
src/main/resources/mapper/RecordMapper.xml | 147 ++
src/main/resources/mapper/UserMapper.xml | 98 ++
src/main/resources/static/css/403.css | 67 +
src/main/resources/static/css/404.css | 638 +++++++
src/main/resources/static/css/System.css | 50 +
src/main/resources/static/css/button.css | 231 +++
.../resources/static/css/daterangepicker.css | 233 +++
.../resources/static/css/htmleaf-demo.css | 244 +++
src/main/resources/static/css/input.css | 111 ++
src/main/resources/static/css/laydate.css | 1 +
src/main/resources/static/css/layer.css | 1 +
src/main/resources/static/css/layui.css | 1 +
.../resources/static/css/login_styles.css | 213 +++
src/main/resources/static/css/menu.css | 118 ++
src/main/resources/static/css/normalize.css | 1 +
.../response_left_bootstrap-vertical-menu.css | 146 ++
src/main/resources/static/css/select.css | 55 +
src/main/resources/static/css/table.css | 109 ++
.../resources/static/file/visitorCount.txt | 1 +
...3xyIUuk_AApbUMYf0AEAARnLAI7jKEAClto863.jpg | Bin 0 -> 532152 bytes
src/main/resources/static/img/Lake.jpg | Bin 0 -> 1535639 bytes
src/main/resources/static/img/apic30454.jpg | Bin 0 -> 1743426 bytes
src/main/resources/static/img/apic31367.jpg | Bin 0 -> 841277 bytes
src/main/resources/static/img/apic31402.jpg | Bin 0 -> 222143 bytes
src/main/resources/static/img/bg.jpg | Bin 0 -> 97126 bytes
src/main/resources/static/img/bg2.jpg | Bin 0 -> 162542 bytes
src/main/resources/static/img/bg3.jpg | Bin 0 -> 320184 bytes
src/main/resources/static/img/bg4.jpg | Bin 0 -> 167919 bytes
src/main/resources/static/img/dribbble.svg | 5 +
src/main/resources/static/img/favicon.ico | Bin 0 -> 270398 bytes
src/main/resources/static/img/img.png | Bin 0 -> 1315967 bytes
src/main/resources/static/img/link.svg | 8 +
src/main/resources/static/img/linkedin.svg | 6 +
src/main/resources/static/img/logo_white.svg | 6 +
src/main/resources/static/img/zzpic17241.jpg | Bin 0 -> 2646817 bytes
.../resources/static/js/daterangepicker.js | 1542 +++++++++++++++++
src/main/resources/static/js/error.js | 4 +
.../static/js/errorjs/parallax.min.js | 2 +
.../resources/static/js/errorjs/script.js | 3 +
.../resources/static/js/jquery-1.11.2.min.js | 4 +
.../resources/static/js/jquery.gradientify.js | 186 ++
src/main/resources/static/js/layer.js | 487 ++++++
src/main/resources/static/js/layui.js | 5 +
src/main/resources/static/js/main-js.js | 1289 ++++++++++++++
src/main/resources/static/js/moment.min.js | 7 +
src/main/resources/static/js/parallax.min.js | 2 +
.../static/js/skin/default/icon-ext.png | Bin 0 -> 5911 bytes
.../resources/static/js/skin/default/icon.png | Bin 0 -> 11493 bytes
.../static/js/skin/default/loading-0.gif | Bin 0 -> 5793 bytes
.../static/js/skin/default/loading-1.gif | Bin 0 -> 701 bytes
.../static/js/skin/default/loading-2.gif | Bin 0 -> 1787 bytes
src/main/resources/static/js/skin/layer.css | 7 +
src/main/resources/static/js/skin/layer.js | 2 +
src/main/resources/templates/403.html | 11 +
src/main/resources/templates/base.html | 73 +
src/main/resources/templates/baseHeader.html | 28 +
.../templates/courseApplication.html | 256 +++
src/main/resources/templates/error.html | 73 +
src/main/resources/templates/index.html | 178 ++
.../resources/templates/leaveApplication.html | 239 +++
src/main/resources/templates/record.html | 229 +++
src/main/resources/templates/systemIndex.html | 217 +++
src/main/resources/templates/userUp.html | 213 +++
student-attendance-system.sql | 171 ++
target/classes/application.yml | 25 +
target/classes/banner.txt | 40 +
target/classes/com/lxq/DemoApplication.class | Bin 0 -> 800 bytes
.../InterceptorConfiguration.class | Bin 0 -> 2062 bytes
.../com/lxq/Interceptor/UrlInterceptor.class | Bin 0 -> 2121 bytes
target/classes/com/lxq/Tools/PageTools.class | Bin 0 -> 2342 bytes
target/classes/com/lxq/Tools/TimeTools.class | Bin 0 -> 2183 bytes
target/classes/com/lxq/Tools/UserTools.class | Bin 0 -> 1160 bytes
.../CourseApplicationController.class | Bin 0 -> 3474 bytes
.../lxq/controller/CurriculumController.class | Bin 0 -> 3000 bytes
.../com/lxq/controller/IndexController.class | Bin 0 -> 10345 bytes
.../LeaveApplicationController.class | Bin 0 -> 3174 bytes
.../com/lxq/controller/RecordController.class | Bin 0 -> 2561 bytes
.../com/lxq/controller/UserController.class | Bin 0 -> 4025 bytes
.../lxq/model/dao/CourseApplicationDAO.class | Bin 0 -> 891 bytes
.../com/lxq/model/dao/CurriculumDAO.class | Bin 0 -> 786 bytes
.../lxq/model/dao/LeaveApplicationDAO.class | Bin 0 -> 876 bytes
.../classes/com/lxq/model/dao/RecordDAO.class | Bin 0 -> 735 bytes
.../classes/com/lxq/model/dao/UserDAO.class | Bin 0 -> 703 bytes
.../lxq/model/object/CourseApplication.class | Bin 0 -> 2895 bytes
.../com/lxq/model/object/Curriculum.class | Bin 0 -> 3990 bytes
.../lxq/model/object/LeaveApplication.class | Bin 0 -> 3513 bytes
.../classes/com/lxq/model/object/Page.class | Bin 0 -> 2013 bytes
.../classes/com/lxq/model/object/Record.class | Bin 0 -> 3557 bytes
.../classes/com/lxq/model/object/User.class | Bin 0 -> 2276 bytes
.../service/CourseApplicationService.class | Bin 0 -> 6909 bytes
.../lxq/model/service/CurriculumService.class | Bin 0 -> 4610 bytes
.../service/LeaveApplicationService.class | Bin 0 -> 5807 bytes
.../com/lxq/model/service/RecordService.class | Bin 0 -> 4559 bytes
.../com/lxq/model/service/UserService.class | Bin 0 -> 2563 bytes
.../mapper/CourseApplicationMapper.xml | 122 ++
target/classes/mapper/CurriculumMapper.xml | 159 ++
.../classes/mapper/LeaveApplicationMapper.xml | 153 ++
target/classes/mapper/RecordMapper.xml | 147 ++
target/classes/mapper/UserMapper.xml | 98 ++
target/classes/static/css/403.css | 67 +
target/classes/static/css/404.css | 638 +++++++
target/classes/static/css/System.css | 50 +
target/classes/static/css/button.css | 231 +++
target/classes/static/css/daterangepicker.css | 233 +++
target/classes/static/css/htmleaf-demo.css | 244 +++
target/classes/static/css/input.css | 111 ++
target/classes/static/css/laydate.css | 1 +
target/classes/static/css/layer.css | 1 +
target/classes/static/css/layui.css | 1 +
target/classes/static/css/login_styles.css | 213 +++
target/classes/static/css/menu.css | 118 ++
target/classes/static/css/normalize.css | 1 +
.../response_left_bootstrap-vertical-menu.css | 146 ++
target/classes/static/css/select.css | 55 +
target/classes/static/css/table.css | 109 ++
target/classes/static/file/visitorCount.txt | 1 +
...3xyIUuk_AApbUMYf0AEAARnLAI7jKEAClto863.jpg | Bin 0 -> 532152 bytes
target/classes/static/img/Lake.jpg | Bin 0 -> 1535639 bytes
target/classes/static/img/apic30454.jpg | Bin 0 -> 1743426 bytes
target/classes/static/img/apic31367.jpg | Bin 0 -> 841277 bytes
target/classes/static/img/apic31402.jpg | Bin 0 -> 222143 bytes
target/classes/static/img/bg.jpg | Bin 0 -> 97126 bytes
target/classes/static/img/bg2.jpg | Bin 0 -> 162542 bytes
target/classes/static/img/bg3.jpg | Bin 0 -> 320184 bytes
target/classes/static/img/bg4.jpg | Bin 0 -> 167919 bytes
target/classes/static/img/dribbble.svg | 5 +
target/classes/static/img/favicon.ico | Bin 0 -> 270398 bytes
target/classes/static/img/img.png | Bin 0 -> 1315967 bytes
target/classes/static/img/link.svg | 8 +
target/classes/static/img/linkedin.svg | 6 +
target/classes/static/img/logo_white.svg | 6 +
target/classes/static/img/zzpic17241.jpg | Bin 0 -> 2646817 bytes
target/classes/static/js/daterangepicker.js | 1542 +++++++++++++++++
target/classes/static/js/error.js | 4 +
.../classes/static/js/errorjs/parallax.min.js | 2 +
target/classes/static/js/errorjs/script.js | 3 +
target/classes/static/js/jquery-1.11.2.min.js | 4 +
.../classes/static/js/jquery.gradientify.js | 186 ++
target/classes/static/js/layer.js | 487 ++++++
target/classes/static/js/layui.js | 5 +
target/classes/static/js/main-js.js | 1289 ++++++++++++++
target/classes/static/js/moment.min.js | 7 +
target/classes/static/js/parallax.min.js | 2 +
.../static/js/skin/default/icon-ext.png | Bin 0 -> 5911 bytes
.../classes/static/js/skin/default/icon.png | Bin 0 -> 11493 bytes
.../static/js/skin/default/loading-0.gif | Bin 0 -> 5793 bytes
.../static/js/skin/default/loading-1.gif | Bin 0 -> 701 bytes
.../static/js/skin/default/loading-2.gif | Bin 0 -> 1787 bytes
target/classes/static/js/skin/layer.css | 7 +
target/classes/static/js/skin/layer.js | 2 +
target/classes/templates/403.html | 11 +
target/classes/templates/base.html | 73 +
target/classes/templates/baseHeader.html | 28 +
.../classes/templates/courseApplication.html | 256 +++
target/classes/templates/error.html | 73 +
target/classes/templates/index.html | 178 ++
.../classes/templates/leaveApplication.html | 239 +++
target/classes/templates/record.html | 229 +++
target/classes/templates/systemIndex.html | 217 +++
target/classes/templates/userUp.html | 213 +++
212 files changed, 20149 insertions(+)
create mode 100644 .idea/.gitignore
create mode 100644 .idea/compiler.xml
create mode 100644 .idea/dataSources.xml
create mode 100644 .idea/dataSources/9b8fdef2-1a5d-4c09-a6ad-93b70e81cc04.xml
create mode 100644 .idea/dataSources/9b8fdef2-1a5d-4c09-a6ad-93b70e81cc04/storage_v2/_src_/schema/information_schema.FNRwLQ.meta
create mode 100644 .idea/dataSources/9b8fdef2-1a5d-4c09-a6ad-93b70e81cc04/storage_v2/_src_/schema/mysql.osA4Bg.meta
create mode 100644 .idea/dataSources/9b8fdef2-1a5d-4c09-a6ad-93b70e81cc04/storage_v2/_src_/schema/performance_schema.kIw0nw.meta
create mode 100644 .idea/encodings.xml
create mode 100644 .idea/inspectionProfiles/Project_Default.xml
create mode 100644 .idea/jarRepositories.xml
create mode 100644 .idea/misc.xml
create mode 100644 .idea/modules.xml
create mode 100644 .idea/smartfox_info.xml
create mode 100644 .idea/uiDesigner.xml
create mode 100644 .idea/vcs.xml
create mode 100644 LICENSE
create mode 100644 README.md
create mode 100644 Student-Attendance-Management-System.iml
create mode 100644 pom.xml
create mode 100644 src/main/java/com/lxq/DemoApplication.java
create mode 100644 src/main/java/com/lxq/Interceptor/InterceptorConfiguration.java
create mode 100644 src/main/java/com/lxq/Interceptor/UrlInterceptor.java
create mode 100644 src/main/java/com/lxq/Tools/PageTools.java
create mode 100644 src/main/java/com/lxq/Tools/TimeTools.java
create mode 100644 src/main/java/com/lxq/Tools/UserTools.java
create mode 100644 src/main/java/com/lxq/controller/CourseApplicationController.java
create mode 100644 src/main/java/com/lxq/controller/CurriculumController.java
create mode 100644 src/main/java/com/lxq/controller/IndexController.java
create mode 100644 src/main/java/com/lxq/controller/LeaveApplicationController.java
create mode 100644 src/main/java/com/lxq/controller/RecordController.java
create mode 100644 src/main/java/com/lxq/controller/UserController.java
create mode 100644 src/main/java/com/lxq/model/dao/CourseApplicationDAO.java
create mode 100644 src/main/java/com/lxq/model/dao/CurriculumDAO.java
create mode 100644 src/main/java/com/lxq/model/dao/LeaveApplicationDAO.java
create mode 100644 src/main/java/com/lxq/model/dao/RecordDAO.java
create mode 100644 src/main/java/com/lxq/model/dao/UserDAO.java
create mode 100644 src/main/java/com/lxq/model/object/CourseApplication.java
create mode 100644 src/main/java/com/lxq/model/object/Curriculum.java
create mode 100644 src/main/java/com/lxq/model/object/LeaveApplication.java
create mode 100644 src/main/java/com/lxq/model/object/Page.java
create mode 100644 src/main/java/com/lxq/model/object/Record.java
create mode 100644 src/main/java/com/lxq/model/object/User.java
create mode 100644 src/main/java/com/lxq/model/service/CourseApplicationService.java
create mode 100644 src/main/java/com/lxq/model/service/CurriculumService.java
create mode 100644 src/main/java/com/lxq/model/service/LeaveApplicationService.java
create mode 100644 src/main/java/com/lxq/model/service/RecordService.java
create mode 100644 src/main/java/com/lxq/model/service/UserService.java
create mode 100644 src/main/resources/application.yml
create mode 100644 src/main/resources/banner.txt
create mode 100644 src/main/resources/mapper/CourseApplicationMapper.xml
create mode 100644 src/main/resources/mapper/CurriculumMapper.xml
create mode 100644 src/main/resources/mapper/LeaveApplicationMapper.xml
create mode 100644 src/main/resources/mapper/RecordMapper.xml
create mode 100644 src/main/resources/mapper/UserMapper.xml
create mode 100644 src/main/resources/static/css/403.css
create mode 100644 src/main/resources/static/css/404.css
create mode 100644 src/main/resources/static/css/System.css
create mode 100644 src/main/resources/static/css/button.css
create mode 100644 src/main/resources/static/css/daterangepicker.css
create mode 100644 src/main/resources/static/css/htmleaf-demo.css
create mode 100644 src/main/resources/static/css/input.css
create mode 100644 src/main/resources/static/css/laydate.css
create mode 100644 src/main/resources/static/css/layer.css
create mode 100644 src/main/resources/static/css/layui.css
create mode 100644 src/main/resources/static/css/login_styles.css
create mode 100644 src/main/resources/static/css/menu.css
create mode 100644 src/main/resources/static/css/normalize.css
create mode 100644 src/main/resources/static/css/response_left_bootstrap-vertical-menu.css
create mode 100644 src/main/resources/static/css/select.css
create mode 100644 src/main/resources/static/css/table.css
create mode 100644 src/main/resources/static/file/visitorCount.txt
create mode 100644 src/main/resources/static/img/Cg-4V1Ru3xyIUuk_AApbUMYf0AEAARnLAI7jKEAClto863.jpg
create mode 100644 src/main/resources/static/img/Lake.jpg
create mode 100644 src/main/resources/static/img/apic30454.jpg
create mode 100644 src/main/resources/static/img/apic31367.jpg
create mode 100644 src/main/resources/static/img/apic31402.jpg
create mode 100644 src/main/resources/static/img/bg.jpg
create mode 100644 src/main/resources/static/img/bg2.jpg
create mode 100644 src/main/resources/static/img/bg3.jpg
create mode 100644 src/main/resources/static/img/bg4.jpg
create mode 100644 src/main/resources/static/img/dribbble.svg
create mode 100644 src/main/resources/static/img/favicon.ico
create mode 100644 src/main/resources/static/img/img.png
create mode 100644 src/main/resources/static/img/link.svg
create mode 100644 src/main/resources/static/img/linkedin.svg
create mode 100644 src/main/resources/static/img/logo_white.svg
create mode 100644 src/main/resources/static/img/zzpic17241.jpg
create mode 100644 src/main/resources/static/js/daterangepicker.js
create mode 100644 src/main/resources/static/js/error.js
create mode 100644 src/main/resources/static/js/errorjs/parallax.min.js
create mode 100644 src/main/resources/static/js/errorjs/script.js
create mode 100644 src/main/resources/static/js/jquery-1.11.2.min.js
create mode 100644 src/main/resources/static/js/jquery.gradientify.js
create mode 100644 src/main/resources/static/js/layer.js
create mode 100644 src/main/resources/static/js/layui.js
create mode 100644 src/main/resources/static/js/main-js.js
create mode 100644 src/main/resources/static/js/moment.min.js
create mode 100644 src/main/resources/static/js/parallax.min.js
create mode 100644 src/main/resources/static/js/skin/default/icon-ext.png
create mode 100644 src/main/resources/static/js/skin/default/icon.png
create mode 100644 src/main/resources/static/js/skin/default/loading-0.gif
create mode 100644 src/main/resources/static/js/skin/default/loading-1.gif
create mode 100644 src/main/resources/static/js/skin/default/loading-2.gif
create mode 100644 src/main/resources/static/js/skin/layer.css
create mode 100644 src/main/resources/static/js/skin/layer.js
create mode 100644 src/main/resources/templates/403.html
create mode 100644 src/main/resources/templates/base.html
create mode 100644 src/main/resources/templates/baseHeader.html
create mode 100644 src/main/resources/templates/courseApplication.html
create mode 100644 src/main/resources/templates/error.html
create mode 100644 src/main/resources/templates/index.html
create mode 100644 src/main/resources/templates/leaveApplication.html
create mode 100644 src/main/resources/templates/record.html
create mode 100644 src/main/resources/templates/systemIndex.html
create mode 100644 src/main/resources/templates/userUp.html
create mode 100644 student-attendance-system.sql
create mode 100644 target/classes/application.yml
create mode 100644 target/classes/banner.txt
create mode 100644 target/classes/com/lxq/DemoApplication.class
create mode 100644 target/classes/com/lxq/Interceptor/InterceptorConfiguration.class
create mode 100644 target/classes/com/lxq/Interceptor/UrlInterceptor.class
create mode 100644 target/classes/com/lxq/Tools/PageTools.class
create mode 100644 target/classes/com/lxq/Tools/TimeTools.class
create mode 100644 target/classes/com/lxq/Tools/UserTools.class
create mode 100644 target/classes/com/lxq/controller/CourseApplicationController.class
create mode 100644 target/classes/com/lxq/controller/CurriculumController.class
create mode 100644 target/classes/com/lxq/controller/IndexController.class
create mode 100644 target/classes/com/lxq/controller/LeaveApplicationController.class
create mode 100644 target/classes/com/lxq/controller/RecordController.class
create mode 100644 target/classes/com/lxq/controller/UserController.class
create mode 100644 target/classes/com/lxq/model/dao/CourseApplicationDAO.class
create mode 100644 target/classes/com/lxq/model/dao/CurriculumDAO.class
create mode 100644 target/classes/com/lxq/model/dao/LeaveApplicationDAO.class
create mode 100644 target/classes/com/lxq/model/dao/RecordDAO.class
create mode 100644 target/classes/com/lxq/model/dao/UserDAO.class
create mode 100644 target/classes/com/lxq/model/object/CourseApplication.class
create mode 100644 target/classes/com/lxq/model/object/Curriculum.class
create mode 100644 target/classes/com/lxq/model/object/LeaveApplication.class
create mode 100644 target/classes/com/lxq/model/object/Page.class
create mode 100644 target/classes/com/lxq/model/object/Record.class
create mode 100644 target/classes/com/lxq/model/object/User.class
create mode 100644 target/classes/com/lxq/model/service/CourseApplicationService.class
create mode 100644 target/classes/com/lxq/model/service/CurriculumService.class
create mode 100644 target/classes/com/lxq/model/service/LeaveApplicationService.class
create mode 100644 target/classes/com/lxq/model/service/RecordService.class
create mode 100644 target/classes/com/lxq/model/service/UserService.class
create mode 100644 target/classes/mapper/CourseApplicationMapper.xml
create mode 100644 target/classes/mapper/CurriculumMapper.xml
create mode 100644 target/classes/mapper/LeaveApplicationMapper.xml
create mode 100644 target/classes/mapper/RecordMapper.xml
create mode 100644 target/classes/mapper/UserMapper.xml
create mode 100644 target/classes/static/css/403.css
create mode 100644 target/classes/static/css/404.css
create mode 100644 target/classes/static/css/System.css
create mode 100644 target/classes/static/css/button.css
create mode 100644 target/classes/static/css/daterangepicker.css
create mode 100644 target/classes/static/css/htmleaf-demo.css
create mode 100644 target/classes/static/css/input.css
create mode 100644 target/classes/static/css/laydate.css
create mode 100644 target/classes/static/css/layer.css
create mode 100644 target/classes/static/css/layui.css
create mode 100644 target/classes/static/css/login_styles.css
create mode 100644 target/classes/static/css/menu.css
create mode 100644 target/classes/static/css/normalize.css
create mode 100644 target/classes/static/css/response_left_bootstrap-vertical-menu.css
create mode 100644 target/classes/static/css/select.css
create mode 100644 target/classes/static/css/table.css
create mode 100644 target/classes/static/file/visitorCount.txt
create mode 100644 target/classes/static/img/Cg-4V1Ru3xyIUuk_AApbUMYf0AEAARnLAI7jKEAClto863.jpg
create mode 100644 target/classes/static/img/Lake.jpg
create mode 100644 target/classes/static/img/apic30454.jpg
create mode 100644 target/classes/static/img/apic31367.jpg
create mode 100644 target/classes/static/img/apic31402.jpg
create mode 100644 target/classes/static/img/bg.jpg
create mode 100644 target/classes/static/img/bg2.jpg
create mode 100644 target/classes/static/img/bg3.jpg
create mode 100644 target/classes/static/img/bg4.jpg
create mode 100644 target/classes/static/img/dribbble.svg
create mode 100644 target/classes/static/img/favicon.ico
create mode 100644 target/classes/static/img/img.png
create mode 100644 target/classes/static/img/link.svg
create mode 100644 target/classes/static/img/linkedin.svg
create mode 100644 target/classes/static/img/logo_white.svg
create mode 100644 target/classes/static/img/zzpic17241.jpg
create mode 100644 target/classes/static/js/daterangepicker.js
create mode 100644 target/classes/static/js/error.js
create mode 100644 target/classes/static/js/errorjs/parallax.min.js
create mode 100644 target/classes/static/js/errorjs/script.js
create mode 100644 target/classes/static/js/jquery-1.11.2.min.js
create mode 100644 target/classes/static/js/jquery.gradientify.js
create mode 100644 target/classes/static/js/layer.js
create mode 100644 target/classes/static/js/layui.js
create mode 100644 target/classes/static/js/main-js.js
create mode 100644 target/classes/static/js/moment.min.js
create mode 100644 target/classes/static/js/parallax.min.js
create mode 100644 target/classes/static/js/skin/default/icon-ext.png
create mode 100644 target/classes/static/js/skin/default/icon.png
create mode 100644 target/classes/static/js/skin/default/loading-0.gif
create mode 100644 target/classes/static/js/skin/default/loading-1.gif
create mode 100644 target/classes/static/js/skin/default/loading-2.gif
create mode 100644 target/classes/static/js/skin/layer.css
create mode 100644 target/classes/static/js/skin/layer.js
create mode 100644 target/classes/templates/403.html
create mode 100644 target/classes/templates/base.html
create mode 100644 target/classes/templates/baseHeader.html
create mode 100644 target/classes/templates/courseApplication.html
create mode 100644 target/classes/templates/error.html
create mode 100644 target/classes/templates/index.html
create mode 100644 target/classes/templates/leaveApplication.html
create mode 100644 target/classes/templates/record.html
create mode 100644 target/classes/templates/systemIndex.html
create mode 100644 target/classes/templates/userUp.html
diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..811adef
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,8 @@
+# 默认忽略的文件
+/shelf/
+/workspace.xml
+# 数据源本地存储已忽略文件
+/../../../../../../:\Users\LI\Desktop\项目\.idea/dataSources/
+/dataSources.local.xml
+# 基于编辑器的 HTTP 客户端请求
+/httpRequests/
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
new file mode 100644
index 0000000..066329a
--- /dev/null
+++ b/.idea/compiler.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml
new file mode 100644
index 0000000..4f3dc4b
--- /dev/null
+++ b/.idea/dataSources.xml
@@ -0,0 +1,13 @@
+
+
+
+
+ mysql
+ true
+ true
+ com.mysql.jdbc.Driver
+ jdbc:mysql://localhost:3306/student-attendance-system?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
+ $ProjectFileDir$
+
+
+
\ No newline at end of file
diff --git a/.idea/dataSources/9b8fdef2-1a5d-4c09-a6ad-93b70e81cc04.xml b/.idea/dataSources/9b8fdef2-1a5d-4c09-a6ad-93b70e81cc04.xml
new file mode 100644
index 0000000..4952d2b
--- /dev/null
+++ b/.idea/dataSources/9b8fdef2-1a5d-4c09-a6ad-93b70e81cc04.xml
@@ -0,0 +1,661 @@
+
+
+
+
+
+ armscii8
+
+
+ armscii8
+ 1
+
+
+ ascii
+
+
+ ascii
+ 1
+
+
+ big5
+
+
+ big5
+ 1
+
+
+ binary
+ 1
+
+
+ cp1250
+
+
+ cp1250
+
+
+ cp1250
+
+
+ cp1250
+ 1
+
+
+ cp1250
+
+
+ cp1251
+
+
+ cp1251
+
+
+ cp1251
+ 1
+
+
+ cp1251
+
+
+ cp1251
+
+
+ cp1256
+
+
+ cp1256
+ 1
+
+
+ cp1257
+
+
+ cp1257
+ 1
+
+
+ cp1257
+
+
+ cp850
+
+
+ cp850
+ 1
+
+
+ cp852
+
+
+ cp852
+ 1
+
+
+ cp866
+
+
+ cp866
+ 1
+
+
+ cp932
+
+
+ cp932
+ 1
+
+
+ dec8
+
+
+ dec8
+ 1
+
+
+ eucjpms
+
+
+ eucjpms
+ 1
+
+
+ euckr
+
+
+ euckr
+ 1
+
+
+ gb2312
+
+
+ gb2312
+ 1
+
+
+ gbk
+
+
+ gbk
+ 1
+
+
+ geostd8
+
+
+ geostd8
+ 1
+
+
+ greek
+
+
+ greek
+ 1
+
+
+ hebrew
+
+
+ hebrew
+ 1
+
+
+ hp8
+
+
+ hp8
+ 1
+
+
+ keybcs2
+
+
+ keybcs2
+ 1
+
+
+ koi8r
+
+
+ koi8r
+ 1
+
+
+ koi8u
+
+
+ koi8u
+ 1
+
+
+ latin1
+
+
+ latin1
+
+
+ latin1
+
+
+ latin1
+
+
+ latin1
+
+
+ latin1
+
+
+ latin1
+
+
+ latin1
+ 1
+
+
+ latin2
+
+
+ latin2
+
+
+ latin2
+
+
+ latin2
+ 1
+
+
+ latin2
+
+
+ latin5
+
+
+ latin5
+ 1
+
+
+ latin7
+
+
+ latin7
+
+
+ latin7
+ 1
+
+
+ latin7
+
+
+ macce
+
+
+ macce
+ 1
+
+
+ macroman
+
+
+ macroman
+ 1
+
+
+ sjis
+
+
+ sjis
+ 1
+
+
+ swe7
+
+
+ swe7
+ 1
+
+
+ tis620
+
+
+ tis620
+ 1
+
+
+ ucs2
+
+
+ ucs2
+
+
+ ucs2
+
+
+ ucs2
+
+
+ ucs2
+
+
+ ucs2
+ 1
+
+
+ ucs2
+
+
+ ucs2
+
+
+ ucs2
+
+
+ ucs2
+
+
+ ucs2
+
+
+ ucs2
+
+
+ ucs2
+
+
+ ucs2
+
+
+ ucs2
+
+
+ ucs2
+
+
+ ucs2
+
+
+ ucs2
+
+
+ ucs2
+
+
+ ucs2
+
+
+ ucs2
+
+
+ ucs2
+
+
+ ucs2
+
+
+ ujis
+
+
+ ujis
+ 1
+
+
+ utf16
+
+
+ utf16
+
+
+ utf16
+
+
+ utf16
+
+
+ utf16
+
+
+ utf16
+ 1
+
+
+ utf16
+
+
+ utf16
+
+
+ utf16
+
+
+ utf16
+
+
+ utf16
+
+
+ utf16
+
+
+ utf16
+
+
+ utf16
+
+
+ utf16
+
+
+ utf16
+
+
+ utf16
+
+
+ utf16
+
+
+ utf16
+
+
+ utf16
+
+
+ utf16
+
+
+ utf16
+
+
+ utf32
+
+
+ utf32
+
+
+ utf32
+
+
+ utf32
+
+
+ utf32
+
+
+ utf32
+ 1
+
+
+ utf32
+
+
+ utf32
+
+
+ utf32
+
+
+ utf32
+
+
+ utf32
+
+
+ utf32
+
+
+ utf32
+
+
+ utf32
+
+
+ utf32
+
+
+ utf32
+
+
+ utf32
+
+
+ utf32
+
+
+ utf32
+
+
+ utf32
+
+
+ utf32
+
+
+ utf32
+
+
+ utf8
+
+
+ utf8
+
+
+ utf8
+
+
+ utf8
+
+
+ utf8
+
+
+ utf8
+ 1
+
+
+ utf8
+
+
+ utf8
+
+
+ utf8
+
+
+ utf8
+
+
+ utf8
+
+
+ utf8
+
+
+ utf8
+
+
+ utf8
+
+
+ utf8
+
+
+ utf8
+
+
+ utf8
+
+
+ utf8
+
+
+ utf8
+
+
+ utf8
+
+
+ utf8
+
+
+ utf8
+
+
+ utf8
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+ 1
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8_general_ci
+
+
+ utf8_general_ci
+
+
+ utf8_general_ci
+
+
+ utf8_general_ci
+
+
+ utf8_general_ci
+
+
+ 1
+ utf8_general_ci
+
+
+ utf8_general_ci
+
+
+ localhost
+
+
+
\ No newline at end of file
diff --git a/.idea/dataSources/9b8fdef2-1a5d-4c09-a6ad-93b70e81cc04/storage_v2/_src_/schema/information_schema.FNRwLQ.meta b/.idea/dataSources/9b8fdef2-1a5d-4c09-a6ad-93b70e81cc04/storage_v2/_src_/schema/information_schema.FNRwLQ.meta
new file mode 100644
index 0000000..1ff3db2
--- /dev/null
+++ b/.idea/dataSources/9b8fdef2-1a5d-4c09-a6ad-93b70e81cc04/storage_v2/_src_/schema/information_schema.FNRwLQ.meta
@@ -0,0 +1,2 @@
+#n:information_schema
+! [null, 0, null, null, -2147483648, -2147483648]
diff --git a/.idea/dataSources/9b8fdef2-1a5d-4c09-a6ad-93b70e81cc04/storage_v2/_src_/schema/mysql.osA4Bg.meta b/.idea/dataSources/9b8fdef2-1a5d-4c09-a6ad-93b70e81cc04/storage_v2/_src_/schema/mysql.osA4Bg.meta
new file mode 100644
index 0000000..86a53f1
--- /dev/null
+++ b/.idea/dataSources/9b8fdef2-1a5d-4c09-a6ad-93b70e81cc04/storage_v2/_src_/schema/mysql.osA4Bg.meta
@@ -0,0 +1,2 @@
+#n:mysql
+! [null, 0, null, null, -2147483648, -2147483648]
diff --git a/.idea/dataSources/9b8fdef2-1a5d-4c09-a6ad-93b70e81cc04/storage_v2/_src_/schema/performance_schema.kIw0nw.meta b/.idea/dataSources/9b8fdef2-1a5d-4c09-a6ad-93b70e81cc04/storage_v2/_src_/schema/performance_schema.kIw0nw.meta
new file mode 100644
index 0000000..9394db1
--- /dev/null
+++ b/.idea/dataSources/9b8fdef2-1a5d-4c09-a6ad-93b70e81cc04/storage_v2/_src_/schema/performance_schema.kIw0nw.meta
@@ -0,0 +1,2 @@
+#n:performance_schema
+! [null, 0, null, null, -2147483648, -2147483648]
diff --git a/.idea/encodings.xml b/.idea/encodings.xml
new file mode 100644
index 0000000..63e9001
--- /dev/null
+++ b/.idea/encodings.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
new file mode 100644
index 0000000..fa99c1b
--- /dev/null
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -0,0 +1,97 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
new file mode 100644
index 0000000..7628153
--- /dev/null
+++ b/.idea/jarRepositories.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..b784bbc
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..2eee8b7
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/smartfox_info.xml b/.idea/smartfox_info.xml
new file mode 100644
index 0000000..1c2584f
--- /dev/null
+++ b/.idea/smartfox_info.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml
new file mode 100644
index 0000000..e96534f
--- /dev/null
+++ b/.idea/uiDesigner.xml
@@ -0,0 +1,124 @@
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..94a25f7
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..261eeb9
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..83f9974
--- /dev/null
+++ b/README.md
@@ -0,0 +1,30 @@
+# Student Attendance Management System
+
+#### 介绍
+基于SSM的学生考勤管理系统,是本人的毕业设计,包含学生选课、请假管理,教师开课、签到管理。项目使用的jdk版本为 **JDK1.8** ,数据库为 **MySQL-5.x** 。
+
+#### 技术说明
+1. 前端技术:HTML5、JavaScript、CSS、Jquery、Thymeleaf。
+2. 后端技术:SpringBoot、SpringMVC、Mybatis。
+
+
+#### 安装教程
+
+1. 克隆项目到本地。
+2. 项目对应的 **SQL文件** 存放于项目根目录下,请将其配置到本地数据库中。
+3. 对于intellij idea的使用者,请修改项目配置的Maven主路径。
+4. - 请将jdk版本配置为 **1.8** 。
+ - 如果使用的数据库版本为 **8.x** ,请修改pom.xml中的 **MySQL数据库连接池** (mysql-connector-java)依赖项的版本,并修改application.yml中的项为 **spring.datasource.driver-class-name: com.mysql.cj.jdbc.Driver** 。
+5. 请修改application.yml中关于 **数据库** 以及 **项目启动端口号** 的配置。
+
+#### 使用说明
+
+1. 运行 **com.lxq** 包下的 **DemoApplication.java** 。
+
+#### 参与贡献
+
+1. Fork 本仓库
+2. 新建 Feat_YourID_xxx 分支
+3. 提交代码
+4. 新建 Pull Request
+
diff --git a/Student-Attendance-Management-System.iml b/Student-Attendance-Management-System.iml
new file mode 100644
index 0000000..1daccae
--- /dev/null
+++ b/Student-Attendance-Management-System.iml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..cfb08a4
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,73 @@
+
+
+ 4.0.0
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.4.1
+
+
+ com.lxq
+ Student-Attendance-Management-System
+ 1.0-SNAPSHOT
+ Student-Attendance-Management-System
+ Demo project for Spring Boot
+
+
+ 8
+
+
+
+ org.springframework.boot
+ spring-boot-starter-thymeleaf
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+ org.mybatis.spring.boot
+ mybatis-spring-boot-starter
+ 2.1.4
+
+
+
+ mysql
+ mysql-connector-java
+ 8.0.33
+ runtime
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+ org.junit.vintage
+ junit-vintage-engine
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-data-redis
+
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+ 2.7.0
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/lxq/DemoApplication.java b/src/main/java/com/lxq/DemoApplication.java
new file mode 100644
index 0000000..116df5f
--- /dev/null
+++ b/src/main/java/com/lxq/DemoApplication.java
@@ -0,0 +1,16 @@
+package com.lxq;
+
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+
+@MapperScan("com.lxq.model.dao")
+@SpringBootApplication
+public class DemoApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(DemoApplication.class, args);
+ }
+
+}
diff --git a/src/main/java/com/lxq/Interceptor/InterceptorConfiguration.java b/src/main/java/com/lxq/Interceptor/InterceptorConfiguration.java
new file mode 100644
index 0000000..9c591ad
--- /dev/null
+++ b/src/main/java/com/lxq/Interceptor/InterceptorConfiguration.java
@@ -0,0 +1,28 @@
+package com.lxq.Interceptor;
+
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+@Configuration
+/**
+ * 添加拦截器 用户信息校验
+ */
+public class InterceptorConfiguration implements WebMvcConfigurer {
+ @Override
+ public void addInterceptors(InterceptorRegistry registry) {
+// System.out.println("WebMvcConfigurer:addInterceptors被执行!!");
+ registry.addInterceptor(new UrlInterceptor())
+ .addPathPatterns("/**")
+ .excludePathPatterns("/static/**")
+ .excludePathPatterns("/");
+ }
+ //添加静态资源映射
+ @Override
+ public void addResourceHandlers(ResourceHandlerRegistry registry) {
+ //静态资源放行
+ registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
+
+ }
+}
diff --git a/src/main/java/com/lxq/Interceptor/UrlInterceptor.java b/src/main/java/com/lxq/Interceptor/UrlInterceptor.java
new file mode 100644
index 0000000..4989415
--- /dev/null
+++ b/src/main/java/com/lxq/Interceptor/UrlInterceptor.java
@@ -0,0 +1,53 @@
+package com.lxq.Interceptor;
+
+import com.lxq.model.object.User;
+import org.springframework.web.servlet.HandlerInterceptor;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+public class UrlInterceptor implements HandlerInterceptor {
+ //在业务处理器处理请求之前被调用。预处理,可以进行编码、安全控制、权限校验等处理;
+ @Override
+ public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception {
+// System.out.println("Intercepor:preHandle被执行!!");
+// System.out.println("preHandle:session1 "+request.getSession().getAttribute("users"));
+ //从Session中获取在线的用户
+ Object user = request.getSession().getAttribute("users");
+
+// System.out.println("preHandle:session2 "+request.getSession().getAttribute("users"));
+ String requestURI = request.getRequestURI();
+ System.out.println("requestURI:"+requestURI);
+
+ //访问以下url直接放行
+ if("/user/login".equals(requestURI)
+ || "/user/userRegister".equals(requestURI)
+ || "/user/outSignIn".equals(requestURI)
+ || "/error".equals(requestURI)
+ ){
+// System.out.println("请求放行!!");
+ return true;
+ }
+
+ //访问其他url需要判断是否登录
+ if (user == null) {
+ //请求转发
+// request.getRequestDispatcher("/").forward(request, response);
+ //重定向
+ response.sendRedirect("/");
+ return false;
+ } else {
+ String userLv = ((User)user).getUserLv();
+ //管理员访问其他URL跳转errorPage,防止管理员通过url进行非法访问
+ if ("0".equals(userLv) && (("/index/systemIndex".equals(requestURI))
+ || ("/index/recordIndex".equals(requestURI))
+ || ("/index/courseApplicationIndex".equals(requestURI))
+ || ("/index/leaveApplicationIndex".equals(requestURI)))
+ && (!"/index/userIndex".equals(requestURI))){
+
+ response.sendRedirect("/error");
+ }
+ return true;
+ }
+ }
+}
diff --git a/src/main/java/com/lxq/Tools/PageTools.java b/src/main/java/com/lxq/Tools/PageTools.java
new file mode 100644
index 0000000..6a900da
--- /dev/null
+++ b/src/main/java/com/lxq/Tools/PageTools.java
@@ -0,0 +1,63 @@
+package com.lxq.Tools;
+
+import com.lxq.model.object.Page;
+import org.springframework.stereotype.Component;
+import org.springframework.web.servlet.ModelAndView;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Component
+public class PageTools {
+
+ private Page page;
+ private int itemNum = 10;
+
+
+ public List PageHelper(List totalList, String pageNumber, ModelAndView mv) {
+ //分页后列表
+ List pageList = new ArrayList<>();
+ page = new Page();
+ int itemCount = totalList.size();
+ page.setItemNum(itemNum);
+ page.setDisplayPage(Integer.parseInt(pageNumber));
+ page.setPageCount(itemCount % page.getItemNum() != 0 ? itemCount / page.getItemNum() + 1 : itemCount / page.getItemNum());
+
+ int firstItem, lastItem = 0;
+ firstItem = (page.getDisplayPage() - 1) * page.getItemNum() + 1;
+ lastItem = firstItem + page.getItemNum() - 1;
+ if (lastItem > itemCount) {
+ lastItem = itemCount;
+ }
+
+ for (int i = firstItem; i <= lastItem; i++) {
+ pageList.add(totalList.get(i - 1));
+ }
+
+ //计算前一页和后一页页码
+ if (page.getPageCount() > 1) {
+ if (page.getDisplayPage() < page.getPageCount() && page.getDisplayPage() > 1) {
+ page.setPrevPage(page.getDisplayPage() - 1);
+ page.setNextPage(page.getDisplayPage() + 1);
+ }
+ if (page.getDisplayPage() == page.getPageCount()) {
+ page.setPrevPage(page.getDisplayPage() - 1);
+ page.setNextPage(-1);
+ }
+ if (page.getDisplayPage() == 1) {
+ page.setPrevPage(-1);
+ page.setNextPage(page.getDisplayPage() + 1);
+ }
+ } else {
+ page.setPrevPage(-1);
+ page.setNextPage(-1);
+ }
+
+ System.out.println(page.toString());
+ mv.addObject("pageInfo", page);
+
+ return pageList;
+ }
+
+
+}
diff --git a/src/main/java/com/lxq/Tools/TimeTools.java b/src/main/java/com/lxq/Tools/TimeTools.java
new file mode 100644
index 0000000..61cc7f1
--- /dev/null
+++ b/src/main/java/com/lxq/Tools/TimeTools.java
@@ -0,0 +1,48 @@
+package com.lxq.Tools;
+
+import org.springframework.stereotype.Component;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+
+@Component
+public class TimeTools {
+ //获取当前时间
+ public String getTime() {
+ Date date = new Date();
+ SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ return formatter.format(date);
+ }
+
+ //获取年月日
+ public String getTimeYMD() {
+ Date date = new Date();
+ SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
+ return formatter.format(date);
+ }
+
+
+ //通过当前时间 加上时间长度 获取一段时间
+ public List getTimeArr(String time, Integer length) {
+ List timeList = new ArrayList<>();
+ try {
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
+ Date date = simpleDateFormat.parse(time);
+ for (int i = 0; i < length; i++) {
+ Calendar cal = Calendar.getInstance();
+ cal.setTime(date);
+ cal.add(Calendar.DATE, i);
+ String timeString = simpleDateFormat.format(cal.getTime());
+ timeList.add(timeString);
+ }
+ } catch (ParseException e) {
+ e.printStackTrace();
+ }
+ return timeList;
+
+ }
+}
diff --git a/src/main/java/com/lxq/Tools/UserTools.java b/src/main/java/com/lxq/Tools/UserTools.java
new file mode 100644
index 0000000..b4b5cc1
--- /dev/null
+++ b/src/main/java/com/lxq/Tools/UserTools.java
@@ -0,0 +1,27 @@
+package com.lxq.Tools;
+
+import com.lxq.model.object.User;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.http.HttpServletRequest;
+
+/*
+ 从session中获取当前用户信息
+*/
+@Component
+public class UserTools {
+
+ public User getUserMessageForSeesion(HttpServletRequest request){
+ User user = null;
+ Object users = request.getSession().getAttribute("users");
+ try {
+ //获取当前用户
+ if (null != users) {
+ user = (User) request.getSession().getAttribute("users");
+ }
+ }catch (Exception e){
+ e.printStackTrace();
+ }
+ return user;
+ }
+}
diff --git a/src/main/java/com/lxq/controller/CourseApplicationController.java b/src/main/java/com/lxq/controller/CourseApplicationController.java
new file mode 100644
index 0000000..57179c1
--- /dev/null
+++ b/src/main/java/com/lxq/controller/CourseApplicationController.java
@@ -0,0 +1,87 @@
+package com.lxq.controller;
+
+import com.lxq.Tools.TimeTools;
+import com.lxq.Tools.UserTools;
+import com.lxq.model.object.CourseApplication;
+import com.lxq.model.object.User;
+import com.lxq.model.service.CourseApplicationService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.List;
+
+@Controller
+@RequestMapping("/courseApplication")
+public class CourseApplicationController {
+
+ @Autowired
+ private CourseApplicationService courseApplicationService;
+ @Autowired
+ private UserTools userTools;
+ @Autowired
+ private TimeTools timeTools;
+
+ //查询
+ @RequestMapping("/s")
+ @ResponseBody
+ public List get(CourseApplication courseApplication, HttpServletRequest request){
+ //封装申请的学生信息
+ User userMessageForSeesion = userTools.getUserMessageForSeesion(request);
+
+ //学生只允许 查询自己的
+ if("2".equals(userMessageForSeesion.getUserLv())){
+ courseApplication.setUserId(userMessageForSeesion.getUserId());
+ courseApplication.setState("同意");
+ }
+ return courseApplicationService.getAllCourseApplicationWithoutDelete(courseApplication);
+ }
+
+ //新增
+ @RequestMapping("/add")
+ @ResponseBody
+ public String add(@RequestBody CourseApplication courseApplication, HttpServletRequest request){
+ //封装申请的学生信息
+ User userMessageForSeesion = userTools.getUserMessageForSeesion(request);
+ courseApplication.setUserId(userMessageForSeesion.getUserId());
+ if (courseApplicationService.getCourseApplicationbyPrimary(courseApplication) != null){
+ return "false-has-double";
+ }
+ //添加时间
+ String timeYMD = timeTools.getTimeYMD();
+ courseApplication.setTime(timeYMD);
+ //设置状态
+ courseApplication.setState("申请");
+ return courseApplicationService.addCourseApplication(courseApplication);
+
+ }
+
+ //删除
+ @RequestMapping("/del")
+ @ResponseBody
+ public String del(@RequestBody CourseApplication courseApplication){
+ return courseApplicationService.delCourseApplication(courseApplication);
+
+ }
+
+ //更新
+ @RequestMapping("/up")
+ @ResponseBody
+ public String up(@RequestBody CourseApplication courseApplication, HttpServletRequest request){
+ //封装申请的学生信息
+ User userMessageForSeesion = userTools.getUserMessageForSeesion(request);
+
+ //学生只允许进行取消,和重新申请(权限操作)
+ if("2".equals(userMessageForSeesion.getUserLv())){
+ if("同意".equals(courseApplication.getState()) || "拒绝".equals(courseApplication.getState())){
+ return "false";
+ }
+ }
+ return courseApplicationService.updateCourseApplication(courseApplication);
+ }
+
+
+}
diff --git a/src/main/java/com/lxq/controller/CurriculumController.java b/src/main/java/com/lxq/controller/CurriculumController.java
new file mode 100644
index 0000000..b256eb1
--- /dev/null
+++ b/src/main/java/com/lxq/controller/CurriculumController.java
@@ -0,0 +1,78 @@
+package com.lxq.controller;
+
+import com.lxq.Tools.TimeTools;
+import com.lxq.Tools.UserTools;
+import com.lxq.model.object.Curriculum;
+import com.lxq.model.object.User;
+import com.lxq.model.service.CurriculumService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.List;
+
+@Controller
+@RequestMapping("/curriculum")
+public class CurriculumController {
+
+ @Autowired
+ private CurriculumService CurriculumService;
+ @Autowired
+ private UserTools userTools;
+ @Autowired
+ private TimeTools timeTools;
+
+ //查询
+ @RequestMapping("/s")
+ @ResponseBody
+ public List get(Curriculum Curriculum){
+ return CurriculumService.getAllCurriculum(Curriculum);
+ }
+
+ //添加课程
+ @RequestMapping("/add")
+ @ResponseBody
+ public String add(@RequestBody Curriculum curriculum, HttpServletRequest request){
+ //封装老师信息
+ User userMessageForSeesion = userTools.getUserMessageForSeesion(request);
+ //权限限制
+ if(!"1".equals(userMessageForSeesion.getUserLv())){
+ return "false";
+ }
+ curriculum.setTeacherId(userMessageForSeesion.getUserId());
+ curriculum.setJoinUserNum(0);
+
+ if (CurriculumService.getCurriculumbyPrimary(curriculum) != null){
+ return "false-has-double";
+ }
+ return CurriculumService.addCurriculum(curriculum);
+
+ }
+
+ //删除
+ @RequestMapping("/del")
+ @ResponseBody
+ public String del(@RequestBody Curriculum curriculum){
+ return CurriculumService.delCurriculum(curriculum);
+
+ }
+ //更新
+ @RequestMapping("/up")
+ @ResponseBody
+ public String up(@RequestBody Curriculum curriculum, HttpServletRequest request){
+ //封装老师信息
+ User userMessageForSeesion = userTools.getUserMessageForSeesion(request);
+ //权限限制
+ if(!"1".equals(userMessageForSeesion.getUserLv())){
+ return "false";
+ }
+ curriculum.setTeacherId(userMessageForSeesion.getUserId());
+
+ return CurriculumService.updateCurriculum(curriculum);
+ }
+
+
+}
diff --git a/src/main/java/com/lxq/controller/IndexController.java b/src/main/java/com/lxq/controller/IndexController.java
new file mode 100644
index 0000000..e0cfb6f
--- /dev/null
+++ b/src/main/java/com/lxq/controller/IndexController.java
@@ -0,0 +1,353 @@
+package com.lxq.controller;
+
+import com.lxq.Tools.PageTools;
+import com.lxq.Tools.UserTools;
+import com.lxq.model.object.*;
+import com.lxq.model.service.*;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.ArrayList;
+import java.util.List;
+
+@Controller
+@RequestMapping("/index")
+public class IndexController {
+ @Autowired
+ private UserTools userTools;
+ @Autowired
+ private PageTools pageTools;
+ @Autowired
+ private CurriculumService curriculumService;
+ @Autowired
+ private CourseApplicationService courseApplicationService;
+ @Autowired
+ private UserService userService;
+ @Autowired
+ private LeaveApplicationService leaveApplicationService;
+ @Autowired
+ private RecordService recordService;
+
+
+
+ //课程
+ @RequestMapping("/systemIndex")
+ public ModelAndView systemIndex(HttpServletRequest request, Curriculum curriculum , String userAccount , String pageNum) {
+
+ User userMessageForSeesion = userTools.getUserMessageForSeesion(request);
+ ModelAndView mv = new ModelAndView("systemIndex");
+ List curriculumFilter = new ArrayList<>();
+
+
+ //教师访问主页时,展示的是自己的课程信息
+ if ("1".equals(userMessageForSeesion.getUserLv())) {
+ curriculum.setTeacherId(userMessageForSeesion.getUserId());
+ List allCurriculum = curriculumService.getAllCurriculum(curriculum);
+
+ curriculumFilter = allCurriculum;
+ }
+
+ //学生主页时,展示的是所有课程信息
+ if ("2".equals(userMessageForSeesion.getUserLv())) {
+ List allCurriculum = curriculumService.getAllCurriculum(curriculum);
+ if (userAccount != null){
+ for (Curriculum curriculm:allCurriculum) {
+ if (curriculm.getTeacherMessage().getUserAccount().toLowerCase().contains(userAccount.toLowerCase())){
+ curriculumFilter.add(curriculm);
+ }
+ }
+ }else{
+ curriculumFilter = allCurriculum;
+ }
+ }
+
+
+ //分页
+ if (pageNum == null){
+ pageNum = "1";
+ }
+ //有数据才分页
+ if (curriculumFilter.size() > 0){
+ curriculumFilter = pageTools.PageHelper(curriculumFilter,pageNum,mv);
+ }else{
+ Page page = new Page(10,-1,0,-1,-1);
+ mv.addObject("pageInfo",page);
+ }
+
+ mv.addObject("curriculumList", curriculumFilter);
+ mv.addObject("active","systemIndex");
+
+ return mv;
+ }
+
+ //课程申请
+ @RequestMapping("/courseApplicationIndex")
+ public ModelAndView courseApplicationIndex(HttpServletRequest request, CourseApplication courseApplication, String curriculumName , String place , String userAccount , String pageNum) {
+ User userMessageForSeesion = userTools.getUserMessageForSeesion(request);
+ ModelAndView mv = new ModelAndView("/courseApplication");
+ List allCourseApplication = new ArrayList<>();
+ //教师访问主页时,展示的是他人申请的信息
+ if ("1".equals(userMessageForSeesion.getUserLv())) {
+ courseApplication.setTeacherId(userMessageForSeesion.getUserId());
+
+ }
+
+ //学生主页时,展示的是自己的课程申请
+ if ("2".equals(userMessageForSeesion.getUserLv())) {
+ courseApplication.setUserId(userMessageForSeesion.getUserId());
+ }
+
+ allCourseApplication = courseApplicationService.getAllCourseApplication(courseApplication);
+ List allCourseApplicationReturn = new ArrayList<>();
+ if (null != userAccount) {
+ //按用户账号筛选
+ if("1".equals(userMessageForSeesion.getUserLv())){
+ //老师按学生查找
+ for (CourseApplication courseApplicationSearch: allCourseApplication) {
+ if(courseApplicationSearch.getStudentMessage().getUserAccount().toLowerCase().contains(userAccount.toLowerCase())){
+
+ allCourseApplicationReturn.add(courseApplicationSearch);
+ }
+ }
+ }
+ if ("2".equals(userMessageForSeesion.getUserLv())){
+ //学生按老师查找
+ for (CourseApplication courseApplicationSearch: allCourseApplication) {
+ if(courseApplicationSearch.getTeacherMessage().getUserAccount().toLowerCase().contains(userAccount.toLowerCase())){
+
+ allCourseApplicationReturn.add(courseApplicationSearch);
+ }
+ }
+ }
+ }else if (null != curriculumName){
+ //按课程名筛选
+ for (CourseApplication courseApplicationSearch:allCourseApplication) {
+
+ if(courseApplicationSearch.getCurriculumMessage() != null && courseApplicationSearch.getCurriculumMessage().getCurriculumName().toLowerCase().contains(curriculumName.toLowerCase())){
+ allCourseApplicationReturn.add(courseApplicationSearch);
+ }
+ }
+ }else if (null != place){
+ //按授课地点筛选
+ for (CourseApplication courseApplicationSearch:allCourseApplication) {
+
+ if(courseApplicationSearch.getCurriculumMessage() != null && courseApplicationSearch.getCurriculumMessage().getPlace().toLowerCase().contains(place.toLowerCase())){
+ allCourseApplicationReturn.add(courseApplicationSearch);
+ }
+ }
+ }else{
+ allCourseApplicationReturn = allCourseApplication;
+ }
+
+ //分页
+ if (pageNum == null){
+ pageNum = "1";
+ }
+ //有东西才分页
+ if (allCourseApplicationReturn.size() > 0){
+ allCourseApplicationReturn = pageTools.PageHelper(allCourseApplicationReturn,pageNum,mv);
+ }else{
+ Page page = new Page(10,-1,0,-1,-1);
+ mv.addObject("pageInfo",page);
+ }
+
+ mv.addObject("active","courseApplicationIndex");
+ mv.addObject("courseApplicationList", allCourseApplicationReturn);
+ return mv;
+ }
+
+
+ //请假申请
+ @RequestMapping("/leaveApplicationIndex")
+ public ModelAndView leaveApplicationIndex(HttpServletRequest request, LeaveApplication leaveApplication, String curriculumName , String userAccount , String pageNum) {
+ User userMessageForSeesion = userTools.getUserMessageForSeesion(request);
+ ModelAndView mv = new ModelAndView("/leaveApplication");
+
+ //教师访问主页时,展示的是他人申请的信息
+ if ("1".equals(userMessageForSeesion.getUserLv())) {
+ leaveApplication.setTeacherId(userMessageForSeesion.getUserId());
+ }
+
+ //学生展示的是自己的请假申请
+ if ("2".equals(userMessageForSeesion.getUserLv())) {
+ leaveApplication.setUserId(userMessageForSeesion.getUserId());
+ }
+
+ List allLeaveApplication = leaveApplicationService.getAllLeaveApplication(leaveApplication);
+ List allLeaveApplicationReturn = new ArrayList<>();
+
+
+ if (null != userAccount) {
+ //按用户账号筛选
+ if("1".equals(userMessageForSeesion.getUserLv())){
+ //老师按学生查找
+ for (LeaveApplication leaveApplicationSearch: allLeaveApplication) {
+ if(leaveApplicationSearch.getStudentMessage().getUserAccount().toLowerCase().contains(userAccount.toLowerCase())){
+
+ allLeaveApplicationReturn.add(leaveApplicationSearch);
+ }
+ }
+ }
+ if ("2".equals(userMessageForSeesion.getUserLv())){
+ //学生按老师查找
+ for (LeaveApplication leaveApplicationSearch: allLeaveApplication) {
+ if(leaveApplicationSearch.getTeacherMessage().getUserAccount().toLowerCase().contains(userAccount.toLowerCase())){
+
+ allLeaveApplicationReturn.add(leaveApplicationSearch);
+ }
+ }
+ }
+ }else if (null != curriculumName){
+ //按课程名筛选
+ for (LeaveApplication leaveApplicationSearch:allLeaveApplication) {
+
+ if(leaveApplicationSearch.getCurriculumMessage() != null && leaveApplicationSearch.getCurriculumMessage().getCurriculumName().toLowerCase().contains(curriculumName.toLowerCase())){
+ allLeaveApplicationReturn.add(leaveApplicationSearch);
+ }
+ }
+ }else{
+ allLeaveApplicationReturn = allLeaveApplication;
+ }
+
+
+ //分页
+ if (pageNum == null){
+ pageNum = "1";
+ }
+ //有东西才分页
+ if (allLeaveApplicationReturn.size() > 0){
+ allLeaveApplicationReturn = pageTools.PageHelper(allLeaveApplicationReturn,pageNum,mv);
+ }else{
+ Page page = new Page(10,-1,0,-1,-1);
+ mv.addObject("pageInfo",page);
+ }
+
+
+ mv.addObject("active","leaveApplicationIndex");
+ mv.addObject("leaveApplicationList", allLeaveApplicationReturn);
+ return mv;
+ }
+
+
+ //用户主页
+ @RequestMapping("/userIndex")
+ public ModelAndView userIndex(HttpServletRequest request , User Search , String pageNum) {
+ User user = new User();
+ User userMessageForSeesion = userTools.getUserMessageForSeesion(request);
+ ModelAndView mv = new ModelAndView("/userUp");
+ List allUser = new ArrayList<>();
+ if("0".equals(userMessageForSeesion.getUserLv())){
+ //通过用户信息筛选用户
+ allUser = userService.getAllUser(Search);
+
+ //分页
+ if (pageNum == null){
+ pageNum = "1";
+ }
+ //有数据才分页
+ if (allUser.size() > 0){
+ allUser = pageTools.PageHelper(allUser,pageNum,mv);
+ }else{
+ Page page = new Page(10,-1,0,-1,-1);
+ mv.addObject("pageInfo",page);
+ }
+
+ }else{
+ user.setUserId(userMessageForSeesion.getUserId());
+ User userSearch = userService.getUser(user);
+ allUser.add(userSearch);
+ }
+ mv.addObject("active","userIndex");
+ mv.addObject("userList", allUser);
+ return mv;
+ }
+
+
+ //考勤主页
+ @RequestMapping("/recordIndex")
+ public ModelAndView recordIndex(HttpServletRequest request, Record record , String userAccount , String curriculumName , String pageNum) {
+ User userMessageForSeesion = userTools.getUserMessageForSeesion(request);
+ ModelAndView mv = new ModelAndView("/record");
+
+ if (record.getTime() != null){
+ if (!record.getTime().equals("")){
+ String[] split = record.getTime().split(" to ");
+ Integer min = Integer.parseInt(split[0].replaceAll("-",""));
+ Integer max = Integer.parseInt(split[1].replaceAll("-",""));
+ record.setTimeNumMax(max);
+ record.setTimeNumMin(min);
+
+ }
+ record.setTime(null);
+ }
+
+ //教师访问主页时,展示的是自己学生的考勤信息
+ if ("1".equals(userMessageForSeesion.getUserLv())) {
+ record.setTeacherId(userMessageForSeesion.getUserId());
+ }
+
+ //学生主页时,展示的是自己的考勤
+ if ("2".equals(userMessageForSeesion.getUserLv())) {
+ record.setUserId(userMessageForSeesion.getUserId());
+ }
+
+ List allRecord = recordService.getAllRecord(record);
+ List allRecordReturn = new ArrayList<>();
+
+
+ if (null != userAccount) {
+ //按用户账号筛选
+ if("1".equals(userMessageForSeesion.getUserLv())){
+ //老师按学生查找
+ for (Record recordSearch: allRecord) {
+ if(recordSearch.getStudentMessage().getUserAccount().toLowerCase().contains(userAccount.toLowerCase())){
+
+ allRecordReturn.add(recordSearch);
+ }
+ }
+ }
+ if ("2".equals(userMessageForSeesion.getUserLv())){
+ //学生按老师查找
+ for (Record recordSearch: allRecord) {
+ if(recordSearch.getTeacherMessage().getUserAccount().toLowerCase().contains(userAccount.toLowerCase())){
+
+ allRecordReturn.add(recordSearch);
+ }
+ }
+ }
+ }else if (null != curriculumName){
+ //按课程名筛选
+ for (Record recordSearch:allRecord) {
+ if(recordSearch.getCurriculumMessage() != null && recordSearch.getCurriculumMessage().getCurriculumName().toLowerCase().contains(curriculumName.toLowerCase())){
+ allRecordReturn.add(recordSearch);
+ }
+ }
+ }else{
+ allRecordReturn = allRecord;
+ }
+
+
+ //分页
+ if (pageNum == null){
+ pageNum = "1";
+ }
+ //有东西才分页
+ if (allRecordReturn.size() > 0){
+ allRecordReturn = pageTools.PageHelper(allRecordReturn,pageNum,mv);
+ }else{
+ Page page = new Page(10,-1,0,-1,-1);
+ mv.addObject("pageInfo",page);
+ }
+
+
+
+ mv.addObject("recordList", allRecordReturn);
+ mv.addObject("active","recordIndex");
+ return mv;
+ }
+
+
+}
diff --git a/src/main/java/com/lxq/controller/LeaveApplicationController.java b/src/main/java/com/lxq/controller/LeaveApplicationController.java
new file mode 100644
index 0000000..843aa38
--- /dev/null
+++ b/src/main/java/com/lxq/controller/LeaveApplicationController.java
@@ -0,0 +1,79 @@
+package com.lxq.controller;
+
+import com.lxq.Tools.TimeTools;
+import com.lxq.Tools.UserTools;
+import com.lxq.model.object.LeaveApplication;
+import com.lxq.model.object.User;
+import com.lxq.model.service.LeaveApplicationService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.List;
+
+@Controller
+@RequestMapping("/leaveApplication")
+public class LeaveApplicationController {
+
+ @Autowired
+ private LeaveApplicationService leaveApplicationService;
+ @Autowired
+ private UserTools userTools;
+ @Autowired
+ private TimeTools timeTools;
+
+ //查询
+ @RequestMapping("/s")
+ @ResponseBody
+ public List get(LeaveApplication leaveApplication){
+ return leaveApplicationService.getAllLeaveApplication(leaveApplication);
+ }
+
+ //新增
+ @RequestMapping("/add")
+ @ResponseBody
+ public String add(@RequestBody LeaveApplication leaveApplication, HttpServletRequest request){
+ //封装申请的学生信息
+ User userMessageForSeesion = userTools.getUserMessageForSeesion(request);
+ leaveApplication.setUserId(userMessageForSeesion.getUserId());
+ //封装申请时间
+ String timeYMD = timeTools.getTimeYMD();
+ leaveApplication.setTime(timeYMD);
+
+ if (leaveApplicationService.getLeaveApplicationbyPrimary(leaveApplication) != null){
+ return "false-has-double";
+ }
+
+ return leaveApplicationService.addLeaveApplication(leaveApplication);
+
+ }
+
+ //删除
+ @RequestMapping("/del")
+ @ResponseBody
+ public String del(@RequestBody LeaveApplication leaveApplication){
+ return leaveApplicationService.delLeaveApplication(leaveApplication);
+
+ }
+
+ //更新
+ @RequestMapping("/up")
+ @ResponseBody
+ public String up(@RequestBody LeaveApplication leaveApplication, HttpServletRequest request){
+
+ User userMessageForSeesion = userTools.getUserMessageForSeesion(request);
+
+ //学生只允许进行取消,和重新申请(权限操作)
+ if("2".equals(userMessageForSeesion.getUserLv())){
+ if("同意".equals(leaveApplication.getState()) || "拒绝".equals(leaveApplication.getState())){
+ return "false";
+ }
+ }
+ return leaveApplicationService.updateLeaveApplication(leaveApplication);
+ }
+
+
+}
diff --git a/src/main/java/com/lxq/controller/RecordController.java b/src/main/java/com/lxq/controller/RecordController.java
new file mode 100644
index 0000000..d57795a
--- /dev/null
+++ b/src/main/java/com/lxq/controller/RecordController.java
@@ -0,0 +1,65 @@
+package com.lxq.controller;
+
+import com.lxq.Tools.TimeTools;
+import com.lxq.Tools.UserTools;
+import com.lxq.model.object.Record;
+import com.lxq.model.object.User;
+import com.lxq.model.service.RecordService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.List;
+
+@Controller
+@RequestMapping("/record")
+public class RecordController {
+
+ @Autowired
+ private RecordService recordService;
+ @Autowired
+ private UserTools userTools;
+ @Autowired
+ private TimeTools timeTools;
+
+ //查询
+ @RequestMapping("/s")
+ @ResponseBody
+ public List get(Record Record, HttpServletRequest request){
+ //封装申请的学生信息
+ User userMessageForSeesion = userTools.getUserMessageForSeesion(request);
+
+ //学生只允许 查询自己的
+ if("2".equals(userMessageForSeesion.getUserLv())){
+ Record.setUserId(userMessageForSeesion.getUserId());
+ }
+ return recordService.getAllRecord(Record);
+ }
+
+ //删除
+ @RequestMapping("/del")
+ @ResponseBody
+ public String del(Record Record){
+ return recordService.delRecord(Record);
+
+ }
+
+ //更新
+ @RequestMapping("/up")
+ @ResponseBody
+ public String up(@RequestBody Record Record, HttpServletRequest request){
+ //封装申请的学生信息
+ User userMessageForSeesion = userTools.getUserMessageForSeesion(request);
+
+ //学生不允许操作
+ if("2".equals(userMessageForSeesion.getUserLv())){
+ return "false";
+ }
+ return recordService.updateRecord(Record);
+ }
+
+
+}
diff --git a/src/main/java/com/lxq/controller/UserController.java b/src/main/java/com/lxq/controller/UserController.java
new file mode 100644
index 0000000..1388a96
--- /dev/null
+++ b/src/main/java/com/lxq/controller/UserController.java
@@ -0,0 +1,113 @@
+package com.lxq.controller;
+
+import com.lxq.Tools.UserTools;
+import com.lxq.model.object.User;
+import com.lxq.model.service.UserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import javax.servlet.http.HttpServletRequest;
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.util.ArrayList;
+
+@Controller
+@RequestMapping("/user")
+public class UserController {
+
+ @Autowired
+ private UserService userService;
+ @Autowired
+ private UserTools userTools;
+
+
+ //用户登录
+ @RequestMapping("/login")
+ @ResponseBody
+ public String login(HttpServletRequest request, @RequestBody User user) {
+ User userSearch = userService.getUserByAccount(user);
+ if (userSearch == null){
+ return "false-account";
+ }else if (userSearch.getUserPw().equals(user.getUserPw())) {
+ //用于登录检查
+ request.getSession().setAttribute("users", userSearch);
+ //用于前端判断身份
+ request.getSession().setAttribute("userInfo",userSearch);
+
+ //更新访问量
+ try {
+ File file = new File("D:\\工作\\大学计算机\\code-workspace\\idea-workspace\\Student-Attendance-Management-System\\src\\main\\resources\\static\\file\\visitorCount.txt");
+ if (!file.exists()){
+ if(file.createNewFile()){
+ System.out.println("成功创建文件!");
+ }
+ }
+
+ FileReader read = new FileReader(file);
+ char[] ch = new char[1024];
+ int d = read.read(ch);
+ String str = new String(ch, 0, d);
+
+ int count = Integer.parseInt(str);
+ count = count + 1;
+ BufferedWriter output = new BufferedWriter(new FileWriter(file));
+ output.write(String.valueOf(count));
+ output.close();
+
+ }catch (Exception e){
+ e.printStackTrace();
+ }
+
+ if(userSearch.getUserLv().equals("0")){
+ return "true-admin";
+ }else{
+ return "true";
+ }
+ }else {
+ return "false-pw";
+ }
+// return "false";
+ }
+
+ //用户退出登录
+ @RequestMapping("/outSignIn")
+ @ResponseBody
+ public boolean outSignIn(HttpServletRequest request) {
+// request.getSession().invalidate();
+ request.getSession().setAttribute("users", null);
+ return true;
+ }
+
+ //用户注册
+ @RequestMapping("/userRegister")
+ @ResponseBody
+ public String userRegister(@RequestBody User user) {
+ if (userService.getUserByAccount(user) != null){
+ return "false-has-double";
+ }
+ //账号初始化昵称
+ user.setUserName(user.getUserAccount());
+ return userService.addUser(user);
+ }
+
+ //用户修改
+ @RequestMapping("/up")
+ @ResponseBody
+ public String up(@RequestBody User user) {
+ return userService.updateUser(user);
+ }
+
+ //用户删除
+ @RequestMapping("/del")
+ @ResponseBody
+ public String del(User user) {
+ return userService.delUser(user);
+ }
+
+
+}
diff --git a/src/main/java/com/lxq/model/dao/CourseApplicationDAO.java b/src/main/java/com/lxq/model/dao/CourseApplicationDAO.java
new file mode 100644
index 0000000..fe03f1b
--- /dev/null
+++ b/src/main/java/com/lxq/model/dao/CourseApplicationDAO.java
@@ -0,0 +1,26 @@
+package com.lxq.model.dao;
+
+import com.lxq.model.object.CourseApplication;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+
+@Repository
+@Mapper
+public interface CourseApplicationDAO {
+
+ //查询申请全部信息
+ List getAllCourseApplication(CourseApplication CourseApplication);
+ //查询申请信息
+ CourseApplication getCourseApplication(CourseApplication CourseApplication);
+ //增加申请信息
+ int addCourseApplication(CourseApplication CourseApplication);
+ //删除申请信息
+ int delCourseApplication(CourseApplication CourseApplication);
+ //修改申请信息
+ int updateCourseApplication(CourseApplication CourseApplication);
+
+ CourseApplication getCourseApplicationbyPrimary(CourseApplication CourseApplication);
+}
diff --git a/src/main/java/com/lxq/model/dao/CurriculumDAO.java b/src/main/java/com/lxq/model/dao/CurriculumDAO.java
new file mode 100644
index 0000000..70b974e
--- /dev/null
+++ b/src/main/java/com/lxq/model/dao/CurriculumDAO.java
@@ -0,0 +1,27 @@
+package com.lxq.model.dao;
+
+import com.lxq.model.object.Curriculum;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+
+@Repository
+@Mapper
+public interface CurriculumDAO {
+
+ //查询课程全部信息
+ List getAllCurriculum(Curriculum Curriculum);
+ //查询课程信息
+ Curriculum getCurriculum(Curriculum Curriculum);
+ //通过主键查找课程
+ Curriculum getCurriculumbyPrimary(Curriculum Curriculum);
+ //增加课程信息
+ int addCurriculum(Curriculum Curriculum);
+ //删除课程信息
+ int delCurriculum(Curriculum Curriculum);
+ //修改课程信息
+ int updateCurriculum(Curriculum Curriculum);
+
+}
diff --git a/src/main/java/com/lxq/model/dao/LeaveApplicationDAO.java b/src/main/java/com/lxq/model/dao/LeaveApplicationDAO.java
new file mode 100644
index 0000000..deb4e84
--- /dev/null
+++ b/src/main/java/com/lxq/model/dao/LeaveApplicationDAO.java
@@ -0,0 +1,26 @@
+package com.lxq.model.dao;
+
+import com.lxq.model.object.LeaveApplication;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+
+@Repository
+@Mapper
+public interface LeaveApplicationDAO {
+
+ //查询请假全部信息
+ List getAllLeaveApplication(LeaveApplication LeaveApplication);
+ //查询请假信息
+ LeaveApplication getLeaveApplication(LeaveApplication LeaveApplication);
+ //增加请假信息
+ int addLeaveApplication(LeaveApplication LeaveApplication);
+ //删除请假信息
+ int delLeaveApplication(LeaveApplication LeaveApplication);
+ //修改请假信息
+ int updateLeaveApplication(LeaveApplication LeaveApplication);
+
+ LeaveApplication getLeaveApplicationbyPrimary(LeaveApplication LeaveApplication);
+}
diff --git a/src/main/java/com/lxq/model/dao/RecordDAO.java b/src/main/java/com/lxq/model/dao/RecordDAO.java
new file mode 100644
index 0000000..8012832
--- /dev/null
+++ b/src/main/java/com/lxq/model/dao/RecordDAO.java
@@ -0,0 +1,26 @@
+package com.lxq.model.dao;
+
+import com.lxq.model.object.Record;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+
+@Repository
+@Mapper
+public interface RecordDAO {
+
+ //查询考勤全部信息
+ List getAllRecord(Record Record);
+ //查询考勤信息
+ Record getRecord(Record Record);
+ //增加考勤信息
+ int addRecord(Record Record);
+ //删除考勤信息
+ int delRecord(Record Record);
+ //修改考勤信息
+ int updateRecord(Record Record);
+
+ Record getRecordbyPrimary(Record record);
+}
diff --git a/src/main/java/com/lxq/model/dao/UserDAO.java b/src/main/java/com/lxq/model/dao/UserDAO.java
new file mode 100644
index 0000000..a1e06a2
--- /dev/null
+++ b/src/main/java/com/lxq/model/dao/UserDAO.java
@@ -0,0 +1,26 @@
+package com.lxq.model.dao;
+
+import com.lxq.model.object.User;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+
+@Repository
+@Mapper
+public interface UserDAO {
+
+ //查询用户全部信息
+ List getAllUser(User User);
+ //查询用户信息
+ User getUser(User User);
+ //增加用户信息
+ int addUser(User User);
+ //删除用户信息
+ int delUser(User User);
+ //修改用户信息
+ int updateUser(User User);
+
+ User getUserByAccount(User user);
+}
diff --git a/src/main/java/com/lxq/model/object/CourseApplication.java b/src/main/java/com/lxq/model/object/CourseApplication.java
new file mode 100644
index 0000000..ffa4145
--- /dev/null
+++ b/src/main/java/com/lxq/model/object/CourseApplication.java
@@ -0,0 +1,114 @@
+package com.lxq.model.object;
+
+
+//课程申请
+public class CourseApplication {
+ //唯一ID
+ private String id;
+ //学生ID
+ private String userId;
+ //教师ID
+ private String teacherId;
+ //课程ID
+ private String curriculumId;
+ //申请内容
+ private String content;
+ //申请状态
+ private String state;
+ //反馈备注
+ private String remarks;
+ //申请课程 时间
+ private String time;
+
+ private User studentMessage;
+ private User teacherMessage;
+ private Curriculum curriculumMessage;
+
+ public Curriculum getCurriculumMessage() {
+ return curriculumMessage;
+ }
+
+ public void setCurriculumMessage(Curriculum curriculumMessage) {
+ this.curriculumMessage = curriculumMessage;
+ }
+
+ public User getStudentMessage() {
+ return studentMessage;
+ }
+
+ public void setStudentMessage(User studentMessage) {
+ this.studentMessage = studentMessage;
+ }
+
+ public User getTeacherMessage() {
+ return teacherMessage;
+ }
+
+ public void setTeacherMessage(User teacherMessage) {
+ this.teacherMessage = teacherMessage;
+ }
+
+ public String getTime() {
+ return time;
+ }
+
+ public void setTime(String time) {
+ this.time = time;
+ }
+
+ public String getTeacherId() {
+ return teacherId;
+ }
+
+ public void setTeacherId(String teacherId) {
+ this.teacherId = teacherId;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getUserId() {
+ return userId;
+ }
+
+ public void setUserId(String userId) {
+ this.userId = userId;
+ }
+
+ public String getCurriculumId() {
+ return curriculumId;
+ }
+
+ public void setCurriculumId(String curriculumId) {
+ this.curriculumId = curriculumId;
+ }
+
+ public String getContent() {
+ return content;
+ }
+
+ public void setContent(String content) {
+ this.content = content;
+ }
+
+ public String getState() {
+ return state;
+ }
+
+ public void setState(String state) {
+ this.state = state;
+ }
+
+ public String getRemarks() {
+ return remarks;
+ }
+
+ public void setRemarks(String remarks) {
+ this.remarks = remarks;
+ }
+}
diff --git a/src/main/java/com/lxq/model/object/Curriculum.java b/src/main/java/com/lxq/model/object/Curriculum.java
new file mode 100644
index 0000000..108c7aa
--- /dev/null
+++ b/src/main/java/com/lxq/model/object/Curriculum.java
@@ -0,0 +1,156 @@
+package com.lxq.model.object;
+
+
+//课程
+public class Curriculum {
+ //课程ID
+ private Integer id;
+ //课程名称
+ private String curriculumName;
+ //地点
+ private String place;
+ //课程简介
+ private String introduce;
+ //课程开始时间
+ private String timeStart;
+ private Integer timeStartNum;
+ //课程结束时间
+ private String timeEnd;
+ private Integer timeEndNum;
+ //课程时长
+ private Integer timeLength;
+ //课程限定总人数
+ private Integer userNum;
+ //课程加入人数
+ private Integer joinUserNum;
+
+ //教师ID
+ private String teacherId;
+ //教师具体信息
+ private User teacherMessage;
+
+
+
+ public String getCurriculumName() {
+ return curriculumName;
+ }
+
+ public void setCurriculumName(String curriculumName) {
+ this.curriculumName = curriculumName;
+ }
+
+ public String getPlace() {
+ return place;
+ }
+
+ public void setPlace(String place) {
+ this.place = place;
+ }
+
+ public String getIntroduce() {
+ return introduce;
+ }
+
+ public void setIntroduce(String introduce) {
+ this.introduce = introduce;
+ }
+
+ public String getTimeStart() {
+ return timeStart;
+ }
+
+ public void setTimeStart(String timeStart) {
+ this.timeStart = timeStart;
+ }
+
+ public Integer getTimeStartNum() {
+ return timeStartNum;
+ }
+
+ public void setTimeStartNum(Integer timeStartNum) {
+ this.timeStartNum = timeStartNum;
+ }
+
+ public String getTimeEnd() {
+ return timeEnd;
+ }
+
+ public void setTimeEnd(String timeEnd) {
+ this.timeEnd = timeEnd;
+ }
+
+ public Integer getTimeEndNum() {
+ return timeEndNum;
+ }
+
+ public void setTimeEndNum(Integer timeEndNum) {
+ this.timeEndNum = timeEndNum;
+ }
+
+ public Integer getTimeLength() {
+ return timeLength;
+ }
+
+ public void setTimeLength(Integer timeLength) {
+ this.timeLength = timeLength;
+ }
+
+ public Integer getUserNum() {
+ return userNum;
+ }
+
+ public void setUserNum(Integer userNum) {
+ this.userNum = userNum;
+ }
+
+ public Integer getJoinUserNum() {
+ return joinUserNum;
+ }
+
+ public void setJoinUserNum(Integer joinUserNum) {
+ this.joinUserNum = joinUserNum;
+ }
+
+ public String getTeacherId() {
+ return teacherId;
+ }
+
+ public void setTeacherId(String teacherId) {
+ this.teacherId = teacherId;
+ }
+
+ public User getTeacherMessage() {
+ return teacherMessage;
+ }
+
+ public void setTeacherMessage(User teacherMessage) {
+ this.teacherMessage = teacherMessage;
+ }
+
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ @Override
+ public String toString() {
+ return "Curriculum{" +
+ "id=" + id +
+ ", curriculumName='" + curriculumName + '\'' +
+ ", place='" + place + '\'' +
+ ", introduce='" + introduce + '\'' +
+ ", timeStart='" + timeStart + '\'' +
+ ", timeStartNum=" + timeStartNum +
+ ", timeEnd='" + timeEnd + '\'' +
+ ", timeEndNum=" + timeEndNum +
+ ", timeLength=" + timeLength +
+ ", userNum=" + userNum +
+ ", joinUserNum=" + joinUserNum +
+ ", teacherId='" + teacherId + '\'' +
+ ", teacherMessage=" + teacherMessage +
+ '}';
+ }
+}
diff --git a/src/main/java/com/lxq/model/object/LeaveApplication.java b/src/main/java/com/lxq/model/object/LeaveApplication.java
new file mode 100644
index 0000000..ebae2b8
--- /dev/null
+++ b/src/main/java/com/lxq/model/object/LeaveApplication.java
@@ -0,0 +1,142 @@
+package com.lxq.model.object;
+
+
+//请假申请
+public class LeaveApplication {
+ //唯一ID
+ private String id;
+ //学生ID
+ private String userId;
+ //教师ID
+ private String teacherId;
+ //课程ID
+ private String curriculumId;
+ //申请内容
+ private String content;
+ //申请状态
+ private String state;
+ //反馈备注
+ private String remarks;
+ //申请请假 时间
+ private String time;
+
+ private String timeStart;
+ private String timeEnd;
+ private String timeLength;
+
+ private User studentMessage;
+ private User teacherMessage;
+ private Curriculum curriculumMessage;
+
+ public String getTimeLength() {
+ return timeLength;
+ }
+
+ public void setTimeLength(String timeLength) {
+ this.timeLength = timeLength;
+ }
+
+ public String getTimeStart() {
+ return timeStart;
+ }
+
+ public void setTimeStart(String timeStart) {
+ this.timeStart = timeStart;
+ }
+
+ public String getTimeEnd() {
+ return timeEnd;
+ }
+
+ public void setTimeEnd(String timeEnd) {
+ this.timeEnd = timeEnd;
+ }
+
+ public User getStudentMessage() {
+ return studentMessage;
+ }
+
+ public void setStudentMessage(User studentMessage) {
+ this.studentMessage = studentMessage;
+ }
+
+ public User getTeacherMessage() {
+ return teacherMessage;
+ }
+
+ public void setTeacherMessage(User teacherMessage) {
+ this.teacherMessage = teacherMessage;
+ }
+
+ public Curriculum getCurriculumMessage() {
+ return curriculumMessage;
+ }
+
+ public void setCurriculumMessage(Curriculum curriculumMessage) {
+ this.curriculumMessage = curriculumMessage;
+ }
+
+ public String getTime() {
+ return time;
+ }
+
+ public void setTime(String time) {
+ this.time = time;
+ }
+
+ public String getTeacherId() {
+ return teacherId;
+ }
+
+ public void setTeacherId(String teacherId) {
+ this.teacherId = teacherId;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getUserId() {
+ return userId;
+ }
+
+ public void setUserId(String userId) {
+ this.userId = userId;
+ }
+
+ public String getCurriculumId() {
+ return curriculumId;
+ }
+
+ public void setCurriculumId(String curriculumId) {
+ this.curriculumId = curriculumId;
+ }
+
+ public String getContent() {
+ return content;
+ }
+
+ public void setContent(String content) {
+ this.content = content;
+ }
+
+ public String getState() {
+ return state;
+ }
+
+ public void setState(String state) {
+ this.state = state;
+ }
+
+ public String getRemarks() {
+ return remarks;
+ }
+
+ public void setRemarks(String remarks) {
+ this.remarks = remarks;
+ }
+}
diff --git a/src/main/java/com/lxq/model/object/Page.java b/src/main/java/com/lxq/model/object/Page.java
new file mode 100644
index 0000000..16bae7a
--- /dev/null
+++ b/src/main/java/com/lxq/model/object/Page.java
@@ -0,0 +1,77 @@
+package com.lxq.model.object;
+
+public class Page {
+ //每页条数
+ private int ItemNum;
+ //总页数
+ private int pageCount;
+ //当前页码
+ private int displayPage;
+ //下一页码
+ private int nextPage;
+ //上一页码
+ private int prevPage;
+
+
+ public Page() {
+ }
+
+ public Page(int itemNum, int pageCount, int displayPage, int nextPage, int prevPage) {
+ ItemNum = itemNum;
+ this.pageCount = pageCount;
+ this.displayPage = displayPage;
+ this.nextPage = nextPage;
+ this.prevPage = prevPage;
+ }
+
+ public int getItemNum() {
+ return ItemNum;
+ }
+
+ public void setItemNum(int itemNum) {
+ ItemNum = itemNum;
+ }
+
+ public int getPageCount() {
+ return pageCount;
+ }
+
+ public void setPageCount(int pageCount) {
+ this.pageCount = pageCount;
+ }
+
+ public int getDisplayPage() {
+ return displayPage;
+ }
+
+ public void setDisplayPage(int displayPage) {
+ this.displayPage = displayPage;
+ }
+
+ public int getNextPage() {
+ return nextPage;
+ }
+
+ public void setNextPage(int nextPage) {
+ this.nextPage = nextPage;
+ }
+
+ public int getPrevPage() {
+ return prevPage;
+ }
+
+ public void setPrevPage(int prevPage) {
+ this.prevPage = prevPage;
+ }
+
+ @Override
+ public String toString() {
+ return "Page{" +
+ "ItemNum=" + ItemNum +
+ ", pageCount=" + pageCount +
+ ", displayPage=" + displayPage +
+ ", nextPage=" + nextPage +
+ ", prevPage=" + prevPage +
+ '}';
+ }
+}
diff --git a/src/main/java/com/lxq/model/object/Record.java b/src/main/java/com/lxq/model/object/Record.java
new file mode 100644
index 0000000..de1cc55
--- /dev/null
+++ b/src/main/java/com/lxq/model/object/Record.java
@@ -0,0 +1,142 @@
+package com.lxq.model.object;
+
+
+//考勤
+public class Record {
+ //唯一ID
+ private String id;
+ //学生ID
+ private String userId;
+ //教师ID
+ private String teacherId;
+ //课程ID
+ private String curriculumId;
+ //申请内容
+ private String content;
+ //申请状态
+ private String state;
+ //反馈备注
+ private String remarks;
+ //考勤日期
+ private String time;
+
+ private Integer timeNum;
+ private Integer timeNumMax;
+ private Integer timeNumMin;
+
+ private User studentMessage;
+ private User teacherMessage;
+ private Curriculum curriculumMessage;
+
+ public Integer getTimeNumMax() {
+ return timeNumMax;
+ }
+
+ public void setTimeNumMax(Integer timeNumMax) {
+ this.timeNumMax = timeNumMax;
+ }
+
+ public Integer getTimeNumMin() {
+ return timeNumMin;
+ }
+
+ public void setTimeNumMin(Integer timeNumMin) {
+ this.timeNumMin = timeNumMin;
+ }
+
+ public Integer getTimeNum() {
+ return timeNum;
+ }
+
+ public void setTimeNum(Integer timeNum) {
+ this.timeNum = timeNum;
+ }
+
+ public User getStudentMessage() {
+ return studentMessage;
+ }
+
+ public void setStudentMessage(User studentMessage) {
+ this.studentMessage = studentMessage;
+ }
+
+ public User getTeacherMessage() {
+ return teacherMessage;
+ }
+
+ public void setTeacherMessage(User teacherMessage) {
+ this.teacherMessage = teacherMessage;
+ }
+
+ public Curriculum getCurriculumMessage() {
+ return curriculumMessage;
+ }
+
+ public void setCurriculumMessage(Curriculum curriculumMessage) {
+ this.curriculumMessage = curriculumMessage;
+ }
+
+ public String getTime() {
+ return time;
+ }
+
+ public void setTime(String time) {
+ this.time = time;
+ }
+
+ public String getTeacherId() {
+ return teacherId;
+ }
+
+ public void setTeacherId(String teacherId) {
+ this.teacherId = teacherId;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getUserId() {
+ return userId;
+ }
+
+ public void setUserId(String userId) {
+ this.userId = userId;
+ }
+
+ public String getCurriculumId() {
+ return curriculumId;
+ }
+
+ public void setCurriculumId(String curriculumId) {
+ this.curriculumId = curriculumId;
+ }
+
+ public String getContent() {
+ return content;
+ }
+
+ public void setContent(String content) {
+ this.content = content;
+ }
+
+ public String getState() {
+ return state;
+ }
+
+ public void setState(String state) {
+ this.state = state;
+ }
+
+ public String getRemarks() {
+ return remarks;
+ }
+
+ public void setRemarks(String remarks) {
+ this.remarks = remarks;
+ }
+}
diff --git a/src/main/java/com/lxq/model/object/User.java b/src/main/java/com/lxq/model/object/User.java
new file mode 100644
index 0000000..f80d346
--- /dev/null
+++ b/src/main/java/com/lxq/model/object/User.java
@@ -0,0 +1,88 @@
+package com.lxq.model.object;
+
+//用户
+public class User {
+ //用户id
+ private String userId;
+ //用户账号
+ private String userAccount;
+ //用户昵称
+ private String userName;
+ //用户密码
+ private String userPw;
+ //用户级别
+ private String userLv;
+ //用户性别
+ private String userSex;
+ //用户手机
+ private String userIphone;
+
+ public String getUserId() {
+ return userId;
+ }
+
+ public void setUserId(String userId) {
+ this.userId = userId;
+ }
+
+ public String getUserAccount() {
+ return userAccount;
+ }
+
+ public void setUserAccount(String userAccount) {
+ this.userAccount = userAccount;
+ }
+
+ public String getUserName() {
+ return userName;
+ }
+
+ public void setUserName(String userName) {
+ this.userName = userName;
+ }
+
+ public String getUserPw() {
+ return userPw;
+ }
+
+ public void setUserPw(String userPw) {
+ this.userPw = userPw;
+ }
+
+ public String getUserLv() {
+ return userLv;
+ }
+
+ public void setUserLv(String userLv) {
+ this.userLv = userLv;
+ }
+
+ public String getUserSex() {
+ return userSex;
+ }
+
+ public void setUserSex(String userSex) {
+ this.userSex = userSex;
+ }
+
+ public String getUserIphone() {
+ return userIphone;
+ }
+
+ public void setUserIphone(String userIphone) {
+ this.userIphone = userIphone;
+ }
+
+ @Override
+ public String toString() {
+ return "User{" +
+ "userId='" + userId + '\'' +
+ ", userAccount='" + userAccount + '\'' +
+ ", userName='" + userName + '\'' +
+ ", userPw='" + userPw + '\'' +
+ ", userLv='" + userLv + '\'' +
+ ", userSex='" + userSex + '\'' +
+ ", userIphone='" + userIphone + '\'' +
+ '}';
+ }
+}
diff --git a/src/main/java/com/lxq/model/service/CourseApplicationService.java b/src/main/java/com/lxq/model/service/CourseApplicationService.java
new file mode 100644
index 0000000..531361d
--- /dev/null
+++ b/src/main/java/com/lxq/model/service/CourseApplicationService.java
@@ -0,0 +1,213 @@
+package com.lxq.model.service;
+
+import com.lxq.Tools.TimeTools;
+import com.lxq.model.dao.CourseApplicationDAO;
+import com.lxq.model.object.CourseApplication;
+import com.lxq.model.object.Curriculum;
+import com.lxq.model.object.Record;
+import com.lxq.model.object.User;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Service
+public class CourseApplicationService {
+ @Autowired
+ private CourseApplicationDAO CourseApplicationDAO;
+ @Autowired
+ private UserService userService;
+ @Autowired
+ private CurriculumService curriculumService;
+ @Autowired
+ private TimeTools timeTools;
+ @Autowired
+ private RecordService recordService;
+
+
+ //查询课程申请全部信息
+ public List getAllCourseApplication(CourseApplication CourseApplication){
+ List allCourseApplication = new ArrayList<>();
+ try{
+ List allCourseApplicationSearch = CourseApplicationDAO.getAllCourseApplication(CourseApplication);
+ for (CourseApplication courseApplication: allCourseApplicationSearch) {
+ //找学生信息
+ User student = new User();
+ student.setUserId(courseApplication.getUserId());
+ User userStudent = userService.getUser(student);
+ //找老师信息
+ User teacher = new User();
+ teacher.setUserId(courseApplication.getTeacherId());
+ User userTeacher = userService.getUser(teacher);
+ //找课程信息
+ Curriculum curriculum = new Curriculum();
+ curriculum.setId(Integer.parseInt(courseApplication.getCurriculumId()));
+ Curriculum curriculumSearch = curriculumService.getCurriculum(curriculum);
+
+ //学生信息
+ courseApplication.setStudentMessage(userStudent);
+ //老师信息
+ courseApplication.setTeacherMessage(userTeacher);
+ //课程信息
+ courseApplication.setCurriculumMessage(curriculumSearch);
+
+ allCourseApplication.add(courseApplication);
+
+ }
+ }catch (Exception e){
+ e.printStackTrace();
+ }
+ return allCourseApplication;
+ }
+
+ //查询课程申请全部信息
+ public List getAllCourseApplicationWithoutDelete(CourseApplication CourseApplication){
+ List allCourseApplication = new ArrayList<>();
+ try{
+ List allCourseApplicationSearch = CourseApplicationDAO.getAllCourseApplication(CourseApplication);
+ for (CourseApplication courseApplication: allCourseApplicationSearch) {
+ //找学生信息
+ User student = new User();
+ student.setUserId(courseApplication.getUserId());
+ User userStudent = userService.getUser(student);
+ //找老师信息
+ User teacher = new User();
+ teacher.setUserId(courseApplication.getTeacherId());
+ User userTeacher = userService.getUser(teacher);
+ //找课程信息
+ Curriculum curriculum = new Curriculum();
+ curriculum.setId(Integer.parseInt(courseApplication.getCurriculumId()));
+ Curriculum curriculumSearch = curriculumService.getCurriculum(curriculum);
+
+ //学生信息
+ courseApplication.setStudentMessage(userStudent);
+ //老师信息
+ courseApplication.setTeacherMessage(userTeacher);
+ //课程信息
+ courseApplication.setCurriculumMessage(curriculumSearch);
+ //如果课程没有被删除
+ if (curriculumSearch != null){
+ allCourseApplication.add(courseApplication);
+ }
+
+ }
+ }catch (Exception e){
+ e.printStackTrace();
+ }
+ return allCourseApplication;
+ }
+
+ //查询课程申请信息
+ public CourseApplication getCourseApplication(CourseApplication CourseApplication){
+ CourseApplication CourseApplicationSearch = null;
+ try{
+ CourseApplicationSearch = CourseApplicationDAO.getCourseApplication(CourseApplication);
+
+ User student = new User();
+ student.setUserId(CourseApplicationSearch.getUserId());
+ User userStudent = userService.getUser(student);
+
+ User teacher = new User();
+ teacher.setUserId(CourseApplicationSearch.getTeacherId());
+ User userTeacher = userService.getUser(teacher);
+
+ Curriculum curriculum = new Curriculum();
+ curriculum.setId(Integer.parseInt(CourseApplicationSearch.getCurriculumId()));
+ Curriculum curriculumSearch = curriculumService.getCurriculum(curriculum);
+
+ //学生信息
+ CourseApplicationSearch.setStudentMessage(userStudent);
+ //老师信息
+ CourseApplicationSearch.setTeacherMessage(userTeacher);
+ //课程信息
+ CourseApplicationSearch.setCurriculumMessage(curriculumSearch);
+ }catch (Exception e){
+ e.printStackTrace();
+ }
+ return CourseApplicationSearch;
+ }
+
+ //通过主键查找课程申请,主要用于验证是否存在相同课程申请
+ public CourseApplication getCourseApplicationbyPrimary(CourseApplication CourseApplication) {
+ CourseApplication CourseApplicationSearch = null;
+ try {
+ CourseApplicationSearch = CourseApplicationDAO.getCourseApplicationbyPrimary(CourseApplication);
+ }catch (Exception e){
+ e.printStackTrace();
+ }
+ return CourseApplicationSearch;
+ }
+
+ //增加课程申请信息
+ public String addCourseApplication(CourseApplication CourseApplication){
+ String isSuccess = "false";
+ try{
+ int resultNum = CourseApplicationDAO.addCourseApplication(CourseApplication);
+ if(resultNum>0){
+ isSuccess = "true";
+ }
+ }catch (Exception e){
+ e.printStackTrace();
+
+ }
+ return isSuccess;
+ }
+ //删除课程申请信息
+ public String delCourseApplication(CourseApplication CourseApplication){
+ String isSuccess = "false";
+ try{
+ int resultNum = CourseApplicationDAO.delCourseApplication(CourseApplication);
+ if(resultNum>0){
+ isSuccess = "true";
+ }
+ }catch (Exception e){
+ e.printStackTrace();
+ }
+ return isSuccess;
+ }
+
+ //修改课程申请信息
+ public String updateCourseApplication(CourseApplication CourseApplication){
+ String isSuccess = "false";
+ try{
+
+ if("同意".equals(CourseApplication.getState())){
+ //通过课程申请id查找课程申请信息
+ CourseApplication courseApplicationparam = new CourseApplication();
+ courseApplicationparam.setId(CourseApplication.getId());
+ CourseApplication courseApplicationSearch = CourseApplicationDAO.getCourseApplication(courseApplicationparam);
+
+ //通过课程id查找课程信息
+ Curriculum curriculum = new Curriculum();
+ curriculum.setId(Integer.parseInt(courseApplicationSearch.getCurriculumId()));
+ Curriculum curriculumSearch = curriculumService.getCurriculum(curriculum);
+
+ //添加考勤数据
+ List timeArr = timeTools.getTimeArr(curriculumSearch.getTimeStart(), curriculumSearch.getTimeLength());
+ for (String time: timeArr) {
+ Record record = new Record();
+ record.setUserId(courseApplicationSearch.getUserId());
+ record.setTeacherId(courseApplicationSearch.getTeacherId());
+ record.setCurriculumId(courseApplicationSearch.getCurriculumId());
+ record.setState("待打卡");
+ record.setTime(time);
+ record.setTimeNum(Integer.parseInt(time.replaceAll("-","")));
+ recordService.addRecord(record);
+ }
+
+ //更新课程人数
+ curriculumSearch.setJoinUserNum( curriculumSearch.getJoinUserNum()+1);
+ curriculumService.updateCurriculum(curriculumSearch);
+ }
+
+ int resultNum = CourseApplicationDAO.updateCourseApplication(CourseApplication);
+ if (resultNum>0){
+ isSuccess = "true";
+ }
+ }catch (Exception e){
+ e.printStackTrace();
+ }
+ return isSuccess;
+ }
+}
diff --git a/src/main/java/com/lxq/model/service/CurriculumService.java b/src/main/java/com/lxq/model/service/CurriculumService.java
new file mode 100644
index 0000000..b1a5720
--- /dev/null
+++ b/src/main/java/com/lxq/model/service/CurriculumService.java
@@ -0,0 +1,128 @@
+package com.lxq.model.service;
+
+import com.lxq.model.dao.CurriculumDAO;
+import com.lxq.model.object.Curriculum;
+import com.lxq.model.object.User;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class CurriculumService {
+ @Autowired
+ private CurriculumDAO CurriculumDAO;
+ @Autowired
+ private UserService userService;
+
+ //查询课程全部信息
+ public List getAllCurriculum(Curriculum Curriculum){
+ List allCurriculum = new ArrayList<>();
+ try{
+ List allCurriculumSearch = CurriculumDAO.getAllCurriculum(Curriculum);
+ //映射教师信息
+ if(null!= allCurriculumSearch){
+ Map teacherMap = new HashMap<>();
+ //取出所有"教师"用户
+ User user = new User();
+ user.setUserLv("1");
+ List teacherList = userService.getAllUser(user);
+
+ for (User teacher:teacherList) {
+ teacherMap.put(teacher.getUserId(),teacher);
+ }
+ for (Curriculum curriculum:allCurriculumSearch) {
+ curriculum.setTeacherMessage(teacherMap.get(curriculum.getTeacherId()));
+ allCurriculum.add(curriculum);
+ }
+
+ //数据库操作过于频繁
+// for (Curriculum curriculum: allCurriculumSearch) {
+// User user = new User();
+// user.setUserId(curriculum.getTeacherId());
+// User userSearch = userService.getUser(user);
+// curriculum.setTeacherMessage(userSearch);
+// allCurriculum.add(curriculum);
+// }
+ }
+ }catch (Exception e){
+ e.printStackTrace();
+ }
+ return allCurriculum;
+ }
+ //查询课程信息
+ public Curriculum getCurriculum(Curriculum Curriculum){
+ Curriculum CurriculumSearch = null;
+ try{
+ CurriculumSearch = CurriculumDAO.getCurriculum(Curriculum);
+ }catch (Exception e){
+ e.printStackTrace();
+ }
+ return CurriculumSearch;
+ }
+ //通过主键查找课程,主要用于验证是否存在相同课程
+ public Curriculum getCurriculumbyPrimary(Curriculum Curriculum) {
+ Curriculum curriculumSearch = null;
+ try {
+ curriculumSearch = CurriculumDAO.getCurriculumbyPrimary(Curriculum);
+ }catch (Exception e){
+ e.printStackTrace();
+ }
+ return curriculumSearch;
+ }
+ //增加课程信息
+ public String addCurriculum(Curriculum Curriculum){
+ String isSuccess = "false";
+ try{
+ //将时间转换成Int
+ String timeEnd = Curriculum.getTimeEnd();
+ String timeStart = Curriculum.getTimeStart();
+ Curriculum.setTimeEndNum(Integer.parseInt(timeEnd.replace("-","")));
+ Curriculum.setTimeStartNum(Integer.parseInt(timeStart.replace("-","")));
+ int resultNum = CurriculumDAO.addCurriculum(Curriculum);
+ if(resultNum>0){
+ isSuccess = "true";
+ }
+ }catch (Exception e){
+ e.printStackTrace();
+ }
+ return isSuccess;
+ }
+ //删除课程信息
+ public String delCurriculum(Curriculum Curriculum){
+ String isSuccess = "false";
+ try{
+ int resultNum = CurriculumDAO.delCurriculum(Curriculum);
+ if(resultNum>0){
+ isSuccess = "true";
+ }
+ }catch (Exception e){
+ e.printStackTrace();
+ }
+ return isSuccess;
+ }
+ //修改课程信息
+ public String updateCurriculum(Curriculum Curriculum){
+ String isSuccess = "false";
+ try{
+ //将时间转换成Int
+ String timeEnd = Curriculum.getTimeEnd();
+ String timeStart = Curriculum.getTimeStart();
+ Curriculum.setTimeEndNum(Integer.parseInt(timeEnd.replace("-","")));
+ Curriculum.setTimeStartNum(Integer.parseInt(timeStart.replace("-","")));
+
+ int resultNum = CurriculumDAO.updateCurriculum(Curriculum);
+ if(resultNum>0){
+ isSuccess = "true";
+ }
+ }catch (Exception e){
+ e.printStackTrace();
+
+ }
+ return isSuccess;
+ }
+
+}
diff --git a/src/main/java/com/lxq/model/service/LeaveApplicationService.java b/src/main/java/com/lxq/model/service/LeaveApplicationService.java
new file mode 100644
index 0000000..e1dfbff
--- /dev/null
+++ b/src/main/java/com/lxq/model/service/LeaveApplicationService.java
@@ -0,0 +1,148 @@
+package com.lxq.model.service;
+
+import com.lxq.Tools.TimeTools;
+import com.lxq.model.dao.LeaveApplicationDAO;
+import com.lxq.model.object.*;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Service
+public class LeaveApplicationService {
+ @Autowired
+ private LeaveApplicationDAO LeaveApplicationDAO;
+ @Autowired
+ private UserService userService;
+ @Autowired
+ private CurriculumService curriculumService;
+ @Autowired
+ private TimeTools timeTools;
+ @Autowired
+ private RecordService recordService;
+
+
+ //查询考勤申请全部信息
+ public List getAllLeaveApplication(LeaveApplication leaveApplication){
+ List allLeaveApplication = new ArrayList<>();
+ try{
+
+
+ List allLeaveApplicationSearch = LeaveApplicationDAO.getAllLeaveApplication(leaveApplication);
+ for (LeaveApplication LeaveApplication: allLeaveApplicationSearch) {
+
+ User student = new User();
+ student.setUserId(LeaveApplication.getUserId());
+ User userStudent = userService.getUser(student);
+
+ User teacher = new User();
+ teacher.setUserId(LeaveApplication.getTeacherId());
+ User userTeacher = userService.getUser(teacher);
+
+ Curriculum curriculum = new Curriculum();
+ curriculum.setId(Integer.parseInt(LeaveApplication.getCurriculumId()));
+ Curriculum curriculumSearch = curriculumService.getCurriculum(curriculum);
+
+ //学生信息
+ LeaveApplication.setStudentMessage(userStudent);
+ //老师信息
+ LeaveApplication.setTeacherMessage(userTeacher);
+ //课程信息
+ LeaveApplication.setCurriculumMessage(curriculumSearch);
+
+ allLeaveApplication.add(LeaveApplication);
+ }
+ }catch (Exception e){
+ e.printStackTrace();
+ }
+ return allLeaveApplication;
+ }
+ //查询考勤申请信息
+ public LeaveApplication getLeaveApplication(LeaveApplication leaveApplication){
+ LeaveApplication LeaveApplicationSearch = null;
+ try{
+ LeaveApplicationSearch = LeaveApplicationDAO.getLeaveApplication(leaveApplication);
+ }catch (Exception e){
+ e.printStackTrace();
+ }
+ return LeaveApplicationSearch;
+ }
+
+ //通过主键查找请假申请,主要用于验证是否存在相同请假申请
+ public LeaveApplication getLeaveApplicationbyPrimary(LeaveApplication leaveApplication) {
+ LeaveApplication LeaveApplicationSearch = null;
+ try {
+ LeaveApplicationSearch = LeaveApplicationDAO.getLeaveApplicationbyPrimary(leaveApplication);
+ }catch (Exception e){
+ e.printStackTrace();
+ }
+ return LeaveApplicationSearch;
+ }
+
+ //增加考勤申请信息
+ public String addLeaveApplication(LeaveApplication leaveApplication){
+ String isSuccess = "false";
+ try{
+ leaveApplication.setState("申请");
+ int resultNum = LeaveApplicationDAO.addLeaveApplication(leaveApplication);
+ if(resultNum>0){
+ isSuccess = "true";
+ }
+ }catch (Exception e){
+ e.printStackTrace();
+
+ }
+ return isSuccess;
+ }
+ //删除考勤申请信息
+ public String delLeaveApplication(LeaveApplication leaveApplication){
+ String isSuccess = "false";
+ try{
+ int resultNum = LeaveApplicationDAO.delLeaveApplication(leaveApplication);
+ if(resultNum>0){
+ isSuccess = "true";
+ }
+ }catch (Exception e){
+ e.printStackTrace();
+ }
+ return isSuccess;
+ }
+
+ //修改考勤申请信息
+ public String updateLeaveApplication(LeaveApplication leaveApplication){
+ String isSuccess = "false";
+ try{
+ //请假同意后,调整考勤数据
+ if("同意".equals(leaveApplication.getState())){
+ //通过请假id查找请假信息
+ LeaveApplication leaveApplicationParam = new LeaveApplication();
+ leaveApplicationParam.setId(leaveApplication.getId());
+ LeaveApplication leaveApplicationSearch = LeaveApplicationDAO.getLeaveApplication(leaveApplicationParam);
+
+ //设置请假时间段内的考勤状态为请假
+ List timeArr = timeTools.getTimeArr(leaveApplicationSearch.getTimeStart(), Integer.parseInt(leaveApplicationSearch.getTimeLength()));
+ for (String time: timeArr) {
+ Record record = new Record();
+ record.setUserId(leaveApplicationSearch.getUserId());
+ record.setTeacherId(leaveApplicationSearch.getTeacherId());
+ record.setCurriculumId(leaveApplicationSearch.getCurriculumId());
+ record.setTime(time);
+ Record recordSearch = recordService.getRecord(record);
+ recordSearch.setState("请假");
+ String s = recordService.updateRecord(recordSearch);
+
+ }
+ }
+
+ int resultNum = LeaveApplicationDAO.updateLeaveApplication(leaveApplication);
+ if (resultNum>0){
+ isSuccess = "true";
+ }
+ }catch (Exception e){
+ e.printStackTrace();
+
+ }
+ return isSuccess;
+ }
+}
diff --git a/src/main/java/com/lxq/model/service/RecordService.java b/src/main/java/com/lxq/model/service/RecordService.java
new file mode 100644
index 0000000..772b71a
--- /dev/null
+++ b/src/main/java/com/lxq/model/service/RecordService.java
@@ -0,0 +1,142 @@
+package com.lxq.model.service;
+
+import com.lxq.Tools.TimeTools;
+import com.lxq.model.dao.RecordDAO;
+import com.lxq.model.object.*;
+import com.lxq.model.object.Record;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Service
+public class RecordService {
+ @Autowired
+ private RecordDAO RecordDAO;
+ @Autowired
+ private UserService userService;
+ @Autowired
+ private CurriculumService curriculumService;
+ @Autowired
+ private TimeTools timeTools;
+ @Autowired
+ private RecordService recordService;
+
+
+ //查询全部考勤信息
+ public List getAllRecord(Record Record){
+ List allRecord = new ArrayList<>();
+ try{
+ List allRecordSearch = RecordDAO.getAllRecord(Record);
+ for (Record recordSearch: allRecordSearch) {
+ //找学生
+ User student = new User();
+ student.setUserId(recordSearch.getUserId());
+ User userStudent = userService.getUser(student);
+ //找老师
+ User teacher = new User();
+ teacher.setUserId(recordSearch.getTeacherId());
+ User userTeacher = userService.getUser(teacher);
+ //找课程
+ Curriculum curriculum = new Curriculum();
+ curriculum.setId(Integer.parseInt(recordSearch.getCurriculumId()));
+ Curriculum curriculumSearch = curriculumService.getCurriculum(curriculum);
+
+ //学生信息
+ recordSearch.setStudentMessage(userStudent);
+ //老师信息
+ recordSearch.setTeacherMessage(userTeacher);
+ //课程信息
+ recordSearch.setCurriculumMessage(curriculumSearch);
+ allRecord.add(recordSearch);
+ }
+ }catch (Exception e){
+ e.printStackTrace();
+ }
+ return allRecord;
+ }
+ //查询考勤信息
+ public Record getRecord(Record Record){
+ Record RecordSearch = null;
+ try{
+ RecordSearch = RecordDAO.getRecord(Record);
+
+ User student = new User();
+ student.setUserId(RecordSearch.getUserId());
+ User userStudent = userService.getUser(student);
+
+ User teacher = new User();
+ teacher.setUserId(RecordSearch.getTeacherId());
+ User userTeacher = userService.getUser(teacher);
+
+ Curriculum curriculum = new Curriculum();
+ curriculum.setId(Integer.parseInt(RecordSearch.getCurriculumId()));
+ Curriculum curriculumSearch = curriculumService.getCurriculum(curriculum);
+
+ //学生信息
+ RecordSearch.setStudentMessage(userStudent);
+ //老师信息
+ RecordSearch.setTeacherMessage(userTeacher);
+ //课程信息
+ RecordSearch.setCurriculumMessage(curriculumSearch);
+ }catch (Exception e){
+ e.printStackTrace();
+ }
+ return RecordSearch;
+ }
+
+ //通过主键查找考勤,主要用于验证是否存在相同考勤
+ public Record getRecordbyPrimary(Record Record) {
+ Record RecordSearch = null;
+ try {
+ RecordSearch = RecordDAO.getRecordbyPrimary(Record);
+ }catch (Exception e){
+ e.printStackTrace();
+ }
+ return RecordSearch;
+ }
+
+ //增加考勤信息
+ public String addRecord(Record Record){
+ String isSuccess = "false";
+ try{
+ int resultNum = RecordDAO.addRecord(Record);
+ if(resultNum>0){
+ isSuccess = "true";
+ }
+ }catch (Exception e){
+ e.printStackTrace();
+
+ }
+ return isSuccess;
+ }
+ //删除考勤信息
+ public String delRecord(Record Record){
+ String isSuccess = "false";
+ try{
+ int resultNum = RecordDAO.delRecord(Record);
+ if(resultNum>0){
+ isSuccess = "true";
+ }
+ }catch (Exception e){
+ e.printStackTrace();
+ }
+ return isSuccess;
+ }
+
+ //修改考勤信息
+ public String updateRecord(Record Record){
+ String isSuccess = "false";
+ try{
+ int resultNum = RecordDAO.updateRecord(Record);
+ if(resultNum>0){
+ isSuccess = "true";
+ }
+ }catch (Exception e){
+ e.printStackTrace();
+
+ }
+ return isSuccess;
+ }
+}
diff --git a/src/main/java/com/lxq/model/service/UserService.java b/src/main/java/com/lxq/model/service/UserService.java
new file mode 100644
index 0000000..e932765
--- /dev/null
+++ b/src/main/java/com/lxq/model/service/UserService.java
@@ -0,0 +1,88 @@
+package com.lxq.model.service;
+
+import com.lxq.model.dao.UserDAO;
+import com.lxq.model.object.User;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Service
+public class UserService {
+ @Autowired
+ private UserDAO userDAO;
+
+ //查询全部用户信息
+ public List getAllUser(User user){
+ List allUser = new ArrayList<>();
+ try{
+ allUser = userDAO.getAllUser(user);
+ }catch (Exception e){
+ e.printStackTrace();
+ }
+ return allUser;
+ }
+ //查询用户信息
+ public User getUser(User user){
+ User userSearch = null;
+ try{
+ userSearch = userDAO.getUser(user);
+ }catch (Exception e){
+ e.printStackTrace();
+ }
+ return userSearch;
+ }
+
+ //增加用户信息
+ public String addUser(User user){
+ String isSuccess = "false";
+ try{
+ int resultNum = userDAO.addUser(user);
+ if(resultNum>0){
+ isSuccess = "true";
+ }
+ }catch (Exception e){
+ e.printStackTrace();
+ }
+ return isSuccess;
+ }
+ //删除用户信息
+ public String delUser(User user){
+ String isSuccess = "false";
+ try{
+ int resultNum = userDAO.delUser(user);
+ if(resultNum>0){
+ isSuccess = "true";
+ }
+ }catch (Exception e){
+ e.printStackTrace();
+ }
+ return isSuccess;
+ }
+ //修改用户信息
+ public String updateUser(User user){
+ String isSuccess = "false";
+ try{
+ int resultNum = userDAO.updateUser(user);
+ if(resultNum>0){
+ isSuccess = "true";
+ }
+ }catch (Exception e){
+ e.printStackTrace();
+ return "error";
+ }
+ return isSuccess;
+ }
+
+ //通过Account查询用户信息
+ public User getUserByAccount(User user) {
+ User userSearch = null;
+ try {
+ userSearch = userDAO.getUserByAccount(user);
+ }catch (Exception e){
+ e.printStackTrace();
+ }
+ return userSearch;
+ }
+}
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
new file mode 100644
index 0000000..029f5a2
--- /dev/null
+++ b/src/main/resources/application.yml
@@ -0,0 +1,25 @@
+spring:
+ datasource:
+ url: jdbc:mysql://localhost:3306/student-attendance-system?useUnicode=true&characterEncoding=utf-8
+ username: root
+ password: 123456
+ driver-class-name: com.mysql.jdbc.Driver
+ thymeleaf:
+ prefix: classpath:/templates/
+ suffix: .html
+ mode: LEGACYHTML5
+ encoding: UTF-8
+ cache: false
+ servlet:
+ content-type: text/html
+mybatis:
+ #配置mapping所在的路径
+ mapper-locations: classpath:/mapper/*.xml
+ #配置映射类所在的路径
+ type-aliases-package: com.lxq.model.object
+
+ configuration:
+ log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+#项目启动端口
+server:
+ port: 8080
\ No newline at end of file
diff --git a/src/main/resources/banner.txt b/src/main/resources/banner.txt
new file mode 100644
index 0000000..2dd0125
--- /dev/null
+++ b/src/main/resources/banner.txt
@@ -0,0 +1,40 @@
+@###@#@#@@@@@@#52222222292X5&9X2X5X2X2X2X2259:s2X3hX22X222X23SXs,S323Gr,,;A#XrriX22i33h259
+@#M#####@@@ASSsSS2SSi5S5rs55rr;5iSSSiSs2i5S55is25s,s5SSSS5S2S:r5i5SSS@Br. iBi:;s5ii2255ih
+@#@###@@@#2r5525srXXX222is9XX25XX2X222;:X222r:rX35;;552222X;i92X32;i2X@@Mr rH2rSsir;;;::i
+@@MBH#MAXsiXrs2XS2iS2X2X2;;iX9;sXX222XX22223252X23X33rrX222s;32X23i55Si&@@@#A2riSSs5ss;s
+@####XsB9:rXsr2XXX5rr2GhGXX2GhG2&9hG&hGXX2XXXirSX5XSXXX2X2X55XX2X;,SX55siM@@@@#BHX5SX5222i
+@@##@9ss;;rhX9X9XG93SSiis;;;:::;,:;s;r52iXGA33ir;s2X5iS32X2S,:i325r52252i5s.,. ;2AB@#M###M
+@@@#MSSiiiX3h2XXs;;:;::,,,:,,,,.... .,:,;r2XA&&hhX3i;r3XX2XiSXs;2X2222299; ., ..,::r5S9G
+@@@@#Xi2GX2s;:::,,::::::::::,,,,.,.,,,.......,:;ss2XXA2;;sSX2X2XS22X225252h9 ::;;:.. .::,r
+@@@@Ms2hX;r;;;;:;:::::;;;::,,,,,:,,,,,,,:,:,:,,.,,,,:;S5XX33X525222222352532,rs;;::,::rirs
+@@@@9r@A:i;;;;:;;;;;::::::,,,,,,,,...,,,,:,::;:;:::,,::;rsi5532X2X2Xr;S2222X;,::::::,::;;r
+@@@@X:#r;ir:;;;;;:;::::::,,,,,,.... ....,,::::;:;:::::::;;;;riii22525ri22SXXXr:::,::::;;;r
+@@@@#A#rrs;;::::::,:,,:;:,,:,..........,,:,::;:::::;::,::::;rsiis5i5SX55i5iX25s::r;si5i5i5
+@@@@@@@s;;;,,,,,::,,:,::::::;:;rSSi;;;:,,,,,:::::::,:,,,,,:.;s2522533X&AMHM#S ;5h9HAAAB&h9
+@@@@@@@r;5XhXhSr;r:::::::;;;rrrs;;:,.,...,,..,::,... ..,:srr9@#@@@@@@#5sX9r. rX&AA3G92i3
+@@@@@@h,rsri5iS5X2Srrr;::,;;siiS5r;:::;::;sr;,. ,:;;2XAM#@@@@9B#M#HG3i: .;ssS25;..:,:,;;ri
+@@@@@#rr5ir::;r;;X9ir;,,:S9MBHhX5hG95X&A&&A@@@@@@@@@@@@@@@3r;;:,,rrr:. ;&G: :ihs:,::;;;;S
+@@hiHSsHrrr;r;r;rrSBH3A@@3:;rri5#@@@@A2S&92;:A@X,;iGMMAi;,,.,,,,;si22;;9r ..,,;:::;;r;;r
+@2 3#B:,h###A#&GH2 X@5SA@i :rsii535Ssrrr: 2@: ABH5r..,::;:::;;rs33G2M@@&i,.,::::;;rrr;s
+@M SAArs;;rr5S2S;,2#2s,;#G r:,,::;;;;:,:, A@r2hr,..,::,:::;r;r;rr;sBS:.;ii,,,,;;:;riiiS
+@@@, :s:;;;r;;,:; ,@A:. sBs .::;::,,,, . i@G.,. .,::::::;;;;;;r;;: :;.. .;;:,:;;;:rrrri
+##@@; ::::::;,,;#@5.,... ,sir:r;;;;;r252&AMs ,,::;:;;rrsrr;;;;:;;;. .,,,. ,5r;;;;;;:5
+#@@3 r;rXhS2XAAHH@@5,,. ,,;..:rrSGHG3sr;:, ..,,::;;r;r;sssrr;r;;;;,.., ...,sG; .;;;:9
+@#@B..ri22s;;;;;srr:,,: ,.... :r2XXi;,.,::;;;;r;;;r;r;rrrrr;r;;;;:. .,::;;irrr;r ,3
+#@@H,,;;::,,.:,;ss;rr;::;rr522329MMX;riGM#A3iirsiSiissrr;;;r;;;r;;;rriirsAMHGA3S,;A&r;: ,A
+#@B::rrrisiirrSS5riA@M33GA#@@@@BAi: ,;XAHAXrsiSisrrrr;;;;;;;;;r;r;rrSH#AHHhX;5Hs;:;,sM
+@#i,;irsiiSSs3##2r;i23h&BB95;. :iA@@MXr;r;rr;;r;rrrrrrrrr;r;rr2992S;;r3S;;;. S#
+#@A;rrSssriSiri2X3GSis99&3iriX&AMB#BMB@@@@@@&iiir;;;r;;;;;r;rrsrrrr;rrr;rri;;,,:2r::r:,:5B
+@@@@M325rSssri:.,:i@@@@H;;;rSS,r:.ir.2#3hGr;:;::;r;rrr;rrrrsrsssrrrsrrrisr::,:,2S,:;;; ;hA
+@HG@@#Aii5irrsSr;,.:;2@#BS. , rr5s:r: . .:;rrrrsssrssii5iSSSisrisrsS55;,::,SS::;;;..SHM
+@@#@@@BirSiisSis5isr:,:r2AXGX25Si;,,,:,,,;:;;rrsssrsrsriiS525255i5iii55S;::::iX;:;;;;.;&A#
+AABGHBhsriSiiSsiisiiir;;;;;;;;sr;:;:::::::;;rrrrrrsssrii55X22222XX223XS;;;;;S5;:;;;;::i9##
+MMBA32rrrsrssiiSiiiirrr;;;;;;;:;;:::,:::,::::::;:;;rrrriS252233hXhhΞ;;;;ssr;;;r;;.:2A#@
+MAXs5X5rsrrrssii52X2Xir,:;::;:,,:,,.,,:,,,:,::::;;;;si52X23X93h9hGGXs;;;rrr;r;;rr;,,rs9M@r
+BGhA@#5Srrrsri599h9#X:,::;:,::,:,..,::.,.,,;;rsiiX393Ghh3G393922is;;;r;r;;;;;s;,:irX9@@
+@@@@@@#52H2ssrrs5XhX&&HAr;;rr:;;;::::,:::;;ri293Gh&GG99X32XXX2XX2srr;;;;;;;;;;r;:.&2rGH@i.
+X2ir::. ,sH&HHAAhGGABMM@@@XriXiisr;;;;rS53hA&G9h3XX3X3XX2X23XXS5isrrr;;r;rrrrr:::3i;iH@M r
+,.,,:,;;:,,.:r5X&&A&AA&hBB r23552Ah&HBAG2322XX3X2X2X2X23X9X2iissrrrrrrrr;rrr;,;GS;5H#@; 2
+;.;r;;:;;;sr:;.:;:..,:,:rr ,Xi222A&HHA#@M3sBA92XXX23XX2X2X25ssrirrrssr;rrrss:,r3GrrAB@h ,A
+#;:;;;;;;;ri&B32GGhi;;;rrr::5XXs5&AhAGhH@M2A@Gh9GX22X25S5iiiisirssissrsriir,;i33rsAA#@; sB
+@H,rrr;;;;::;r;::;;;riiX;,Si ;52iXA&hG&Ah@HA#H3XX2X322iiiSi5SSiSS5S5sriSr:,:i3Ar:HAH#2 ,S#
\ No newline at end of file
diff --git a/src/main/resources/mapper/CourseApplicationMapper.xml b/src/main/resources/mapper/CourseApplicationMapper.xml
new file mode 100644
index 0000000..6a8ecc4
--- /dev/null
+++ b/src/main/resources/mapper/CourseApplicationMapper.xml
@@ -0,0 +1,122 @@
+
+
+
+
+
+
+
+
+
+
+
+ insert into course_application(teacherId,userId,curriculumId,content,state,remarks,time)
+ values(#{teacherId},#{userId},#{curriculumId},#{content},#{state},#{remarks},#{time})
+
+
+
+ delete from course_application
+ where id = #{id}
+
+
+
+ update course_application
+
+
+ teacherId = #{teacherId},
+
+
+ userId = #{userId},
+
+
+ curriculumId = #{curriculumId},
+
+
+ content = #{content},
+
+
+ state = #{state},
+
+
+ remarks = #{remarks},
+
+
+ time = #{time},
+
+
+ where id = #{id}
+
+
+
+
\ No newline at end of file
diff --git a/src/main/resources/mapper/CurriculumMapper.xml b/src/main/resources/mapper/CurriculumMapper.xml
new file mode 100644
index 0000000..f8a1765
--- /dev/null
+++ b/src/main/resources/mapper/CurriculumMapper.xml
@@ -0,0 +1,159 @@
+
+
+
+
+
+
+
+
+
+
+
+ insert into curriculum(teacherId,curriculumName,introduce,timeStart,timeEnd,timeStartNum,timeEndNum,timeLength,userNum,joinUserNum,place)
+ values(#{teacherId},#{curriculumName},#{introduce},#{timeStart},#{timeEnd},#{timeStartNum},#{timeEndNum},#{timeLength},#{userNum},#{joinUserNum},#{place})
+
+
+
+ delete from curriculum
+ where id = #{id}
+
+
+
+ update curriculum
+
+
+ curriculumName = #{curriculumName},
+
+
+ teacherId = #{teacherId},
+
+
+ introduce = #{introduce},
+
+
+ timeStart = #{timeStart},
+
+
+ timeEnd = #{timeEnd},
+
+
+ timeStartNum = #{timeStartNum},
+
+
+ timeEndNum = #{timeEndNum},
+
+
+ timeLength = #{timeLength},
+
+
+ userNum = #{userNum},
+
+
+ joinUserNum = #{joinUserNum},
+
+
+ place = #{place},
+
+
+ where id = #{id}
+
+
+
+
\ No newline at end of file
diff --git a/src/main/resources/mapper/LeaveApplicationMapper.xml b/src/main/resources/mapper/LeaveApplicationMapper.xml
new file mode 100644
index 0000000..7c87604
--- /dev/null
+++ b/src/main/resources/mapper/LeaveApplicationMapper.xml
@@ -0,0 +1,153 @@
+
+
+
+
+
+
+
+
+
+
+ insert into leave_application(teacherId,userId,curriculumId,content,state,remarks,time,timeStart,timeEnd,timeLength)
+ values(#{teacherId},#{userId},#{curriculumId},#{content},#{state},#{remarks},#{time},#{timeStart},#{timeEnd},#{timeLength})
+
+
+
+ delete from leave_application
+ where id = #{id}
+
+
+
+ update leave_application
+
+
+ teacherId = #{teacherId},
+
+
+ userId = #{userId},
+
+
+ curriculumId = #{curriculumId},
+
+
+ content = #{content},
+
+
+ state = #{state},
+
+
+ remarks = #{remarks},
+
+
+ timeStart = #{timeStart},
+
+
+ timeEnd = #{timeEnd},
+
+
+ timeLength = #{timeLength},
+
+
+ time = #{time},
+
+
+ where id = #{id}
+
+
+
+
\ No newline at end of file
diff --git a/src/main/resources/mapper/RecordMapper.xml b/src/main/resources/mapper/RecordMapper.xml
new file mode 100644
index 0000000..09e1c4f
--- /dev/null
+++ b/src/main/resources/mapper/RecordMapper.xml
@@ -0,0 +1,147 @@
+
+
+
+
+
+
+
+
+
+
+
+ insert into record(teacherId,userId,curriculumId,content,state,remarks,time,timeNum)
+ values(#{teacherId},#{userId},#{curriculumId},#{content},#{state},#{remarks},#{time},#{timeNum})
+
+
+
+ delete from record
+ where id = #{id}
+
+
+
+ update record
+
+
+ teacherId = #{teacherId},
+
+
+ userId = #{userId},
+
+
+ curriculumId = #{curriculumId},
+
+
+ content = #{content},
+
+
+ state = #{state},
+
+
+ remarks = #{remarks},
+
+
+ timeNum = #{timeNum},
+
+
+ time = #{time},
+
+
+ where id = #{id}
+
+
+
+
\ No newline at end of file
diff --git a/src/main/resources/mapper/UserMapper.xml b/src/main/resources/mapper/UserMapper.xml
new file mode 100644
index 0000000..2dc1db3
--- /dev/null
+++ b/src/main/resources/mapper/UserMapper.xml
@@ -0,0 +1,98 @@
+
+
+
+
+
+
+
+
+
+
+ insert into user(userAccount,userName,userPw,userLv,userSex,userIphone)
+ values(#{userAccount},#{userName},#{userPw},#{userLv},#{userSex},#{userIphone})
+
+
+
+ delete from user
+ where userAccount = #{userAccount}
+
+
+
+ update user
+
+
+ userName = #{userName},
+
+
+ userPw = #{userPw},
+
+
+ userLv = #{userLv},
+
+
+ userSex = #{userSex},
+
+
+ userIphone = #{userIphone},
+
+
+ where userId = #{userId}
+
+
+
+
\ No newline at end of file
diff --git a/src/main/resources/static/css/403.css b/src/main/resources/static/css/403.css
new file mode 100644
index 0000000..cadefe7
--- /dev/null
+++ b/src/main/resources/static/css/403.css
@@ -0,0 +1,67 @@
+body {
+ width: 100%;
+ height: 100vh;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ flex-direction: column;
+ family: "Poppins", sans-serif;
+ background-image: linear-gradient(45deg, #f6d200 25%, #181617 25%, #181617 50%, #f6d200 50%, #f6d200 75%, #181617 75%, #181617 100%);
+}
+
+h1 {
+ text-transform: uppercase;
+ background: repeating-linear-gradient(45deg, #f6d200, #f6d200 10px, #181617 10px, #181617 20px);
+ -webkit-background-clip: text;
+ -webkit-text-fill-color: transparent;
+ /*animation: move 5s ease infinite;*/
+ font-size: 384px;
+ margin: 0;
+ line-height: 0.7;
+ position: relative;
+}
+h1:before, h1:after {
+ content: "Caution";
+ background-color: #f6d200;
+ color: #181617;
+ border-radius: 10px;
+ font-size: 35px;
+ position: absolute;
+ padding: 31px;
+ text-transform: uppercase;
+ font-weight: bold;
+ -webkit-text-fill-color: #181617;
+ left: 50%;
+ top: 50%;
+ transform: translate(-50%, -50%) rotate(20deg);
+}
+h1:before {
+ content: "";
+ padding: 70px 130px;
+ background: repeating-linear-gradient(45deg, #f6d200, #f6d200 10px, #181617 10px, #181617 20px);
+ box-shadow: 0px 0px 10px #181617;
+}
+h1 span:before, h1 span:after {
+ content: "";
+ width: 8px;
+ height: 8px;
+ background: #757575;
+ color: #757575;
+ border-radius: 50%;
+ position: absolute;
+ bottom: 0;
+ margin: auto;
+ top: 20%;
+ z-index: 3;
+ box-shadow: 0px 60px 0 0px;
+}
+h1 span:before {
+ left: 37%;
+ transform: rotate(22deg);
+ top: -44%;
+}
+h1 span:after {
+ right: 34%;
+ transform: rotate(22deg);
+ top: 3%;
+}
\ No newline at end of file
diff --git a/src/main/resources/static/css/404.css b/src/main/resources/static/css/404.css
new file mode 100644
index 0000000..55bb314
--- /dev/null
+++ b/src/main/resources/static/css/404.css
@@ -0,0 +1,638 @@
+
+@import url("https://fonts.googleapis.com/css?family=Barlow+Condensed:300,400,500,600,700,800,900|Barlow:300,400,500,600,700,800,900&display=swap");
+
+*{margin:0;padding:0;}
+body{overflow:hidden;}
+
+.about {
+ position: fixed;
+ z-index: 10;
+ bottom: 10px;
+ right: 10px;
+ width: 40px;
+ height: 40px;
+ display: flex;
+ justify-content: flex-end;
+ align-items: flex-end;
+ transition: all 0.2s ease;
+}
+.about .bg_links {
+ width: 40px;
+ height: 40px;
+ border-radius: 100%;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ background-color: rgba(0, 0, 0, 0.2);
+ border-radius: 100%;
+ backdrop-filter: blur(5px);
+ position: absolute;
+}
+.about .logo {
+ width: 40px;
+ height: 40px;
+ z-index: 9;
+ background-image: url(/static/img/logo_white.svg);
+ background-size: 50%;
+ background-repeat: no-repeat;
+ background-position: 10px 7px;
+ opacity: 0.9;
+ transition: all 1s 0.2s ease;
+ bottom: 0;
+ right: 0;
+}
+.about .social {
+ opacity: 0;
+ right: 0;
+ bottom: 0;
+}
+.about .social .icon {
+ width: 100%;
+ height: 100%;
+ background-size: 20px;
+ background-repeat: no-repeat;
+ background-position: center;
+ background-color: transparent;
+ display: flex;
+ transition: all 0.2s ease, background-color 0.4s ease;
+ opacity: 0;
+ border-radius: 100%;
+}
+.about .social.portfolio {
+ transition: all 0.8s ease;
+}
+.about .social.portfolio .icon {
+ background-image: url(/static/img/link.svg);
+}
+.about .social.dribbble {
+ transition: all 0.3s ease;
+}
+.about .social.dribbble .icon {
+ background-image: url(/static/img/dribbble.svg);
+}
+.about .social.linkedin {
+ transition: all 0.8s ease;
+}
+.about .social.linkedin .icon {
+ background-image: url(/static/img/linkedin.svg);
+}
+.about:hover {
+ width: 105px;
+ height: 105px;
+ transition: all 0.6s cubic-bezier(0.64, 0.01, 0.07, 1.65);
+}
+.about:hover .logo {
+ opacity: 1;
+ transition: all 0.6s ease;
+}
+.about:hover .social {
+ opacity: 1;
+}
+.about:hover .social .icon {
+ opacity: 0.9;
+}
+.about:hover .social:hover {
+ background-size: 28px;
+}
+.about:hover .social:hover .icon {
+ background-size: 65%;
+ opacity: 1;
+}
+.about:hover .social.portfolio {
+ right: 0;
+ bottom: calc(100% - 40px);
+ transition: all 0.3s 0s cubic-bezier(0.64, 0.01, 0.07, 1.65);
+}
+.about:hover .social.portfolio .icon:hover {
+ background-color: #698fb7;
+}
+.about:hover .social.dribbble {
+ bottom: 45%;
+ right: 45%;
+ transition: all 0.3s 0.15s cubic-bezier(0.64, 0.01, 0.07, 1.65);
+}
+.about:hover .social.dribbble .icon:hover {
+ background-color: #ea4c89;
+}
+.about:hover .social.linkedin {
+ bottom: 0;
+ right: calc(100% - 40px);
+ transition: all 0.3s 0.25s cubic-bezier(0.64, 0.01, 0.07, 1.65);
+}
+.about:hover .social.linkedin .icon:hover {
+ background-color: #0077b5;
+}
+
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+p,
+ul,
+li,
+button,
+a,
+i,
+input,
+body {
+ margin: 0;
+ padding: 0;
+ list-style: none;
+ border: 0;
+ -webkit-tap-highlight-color: transparent;
+ text-decoration: none;
+ color: inherit;
+}
+h1:focus,
+h2:focus,
+h3:focus,
+h4:focus,
+h5:focus,
+h6:focus,
+p:focus,
+ul:focus,
+li:focus,
+button:focus,
+a:focus,
+i:focus,
+input:focus,
+body:focus {
+ outline: 0;
+}
+
+body {
+ margin: 0;
+ padding: 0;
+ height: auto;
+ font-family: "Barlow", sans-serif;
+ background: #695681;
+}
+
+.logo {
+ position: fixed;
+ z-index: 5;
+ bottom: 10px;
+ right: 10px;
+ width: 40px;
+ height: 40px;
+ border-radius: 100%;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ background: rgba(0, 0, 0, 0.1);
+ border-radius: 100%;
+ backdrop-filter: blur(5px);
+}
+.logo img {
+ width: 55%;
+ height: 55%;
+ transform: translateY(-1px);
+ opacity: 0.8;
+}
+
+nav .menu {
+ width: 100%;
+ height: 80px;
+ position: absolute;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ padding: 0 5%;
+ box-sizing: border-box;
+ z-index: 3;
+}
+nav .menu .website_name {
+ color: #695681;
+ font-weight: 600;
+ font-size: 20px;
+ letter-spacing: 1px;
+ background: white;
+ padding: 4px 8px;
+ border-radius: 2px;
+ opacity: 0.5;
+ transition: all 0.4s ease;
+ cursor: pointer;
+}
+nav .menu .website_name:hover {
+ opacity: 1;
+}
+nav .menu .menu_links {
+ transition: all 0.4s ease;
+ opacity: 0.5;
+}
+nav .menu .menu_links:hover {
+ opacity: 1;
+}
+@media screen and (max-width: 799px) {
+ nav .menu .menu_links {
+ display: none;
+ }
+}
+nav .menu .menu_links .link {
+ color: white;
+ text-transform: uppercase;
+ font-weight: 500;
+ margin-right: 50px;
+ letter-spacing: 2px;
+ position: relative;
+ transition: all 0.3s 0.2s ease;
+}
+nav .menu .menu_links .link:last-child {
+ margin-right: 0;
+}
+nav .menu .menu_links .link:before {
+ content: '';
+ position: absolute;
+ width: 0px;
+ height: 4px;
+ background: linear-gradient(90deg, #FFEDC0 0%, #FF9D87 100%);
+ bottom: -10px;
+ border-radius: 4px;
+ transition: all 0.4s cubic-bezier(0.82, 0.02, 0.13, 1.26);
+ left: 100%;
+}
+nav .menu .menu_links .link:hover {
+ opacity: 1;
+ color: #FB8A8A;
+}
+nav .menu .menu_links .link:hover:before {
+ width: 40px;
+ left: 0;
+}
+nav .menu .menu_icon {
+ width: 40px;
+ height: 40px;
+ position: relative;
+ display: none;
+ justify-content: center;
+ align-items: center;
+ cursor: pointer;
+}
+@media screen and (max-width: 799px) {
+ nav .menu .menu_icon {
+ display: flex;
+ }
+}
+nav .menu .menu_icon .icon {
+ width: 24px;
+ height: 2px;
+ background: white;
+ position: absolute;
+}
+nav .menu .menu_icon .icon:before, nav .menu .menu_icon .icon:after {
+ content: '';
+ width: 100%;
+ height: 100%;
+ background: inherit;
+ position: absolute;
+ transition: all 0.3s cubic-bezier(0.49, 0.04, 0, 1.55);
+}
+nav .menu .menu_icon .icon:before {
+ transform: translateY(-8px);
+}
+nav .menu .menu_icon .icon:after {
+ transform: translateY(8px);
+}
+nav .menu .menu_icon:hover .icon {
+ background: #FFEDC0;
+}
+nav .menu .menu_icon:hover .icon:before {
+ transform: translateY(-10px);
+}
+nav .menu .menu_icon:hover .icon:after {
+ transform: translateY(10px);
+}
+
+.wrapper {
+ display: grid;
+ grid-template-columns: 1fr;
+ justify-content: center;
+ align-items: center;
+ height: 100vh;
+ overflow-x: hidden;
+}
+.wrapper .container {
+ margin: 0 auto;
+ transition: all 0.4s ease;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ position: relative;
+}
+.wrapper .container .scene {
+ position: absolute;
+ width: 100vw;
+ height: 100vh;
+ vertical-align: middle;
+}
+.wrapper .container .one,
+.wrapper .container .two,
+.wrapper .container .three,
+.wrapper .container .circle,
+.wrapper .container .p404 {
+ width: 60%;
+ height: 60%;
+ top: 20% !important;
+ left: 20% !important;
+ min-width: 400px;
+ min-height: 400px;
+}
+.wrapper .container .one .content,
+.wrapper .container .two .content,
+.wrapper .container .three .content,
+.wrapper .container .circle .content,
+.wrapper .container .p404 .content {
+ width: 600px;
+ height: 600px;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ animation: content 0.8s cubic-bezier(1, 0.06, 0.25, 1) backwards;
+}
+@keyframes content {
+ 0% {
+ width: 0;
+ }
+}
+.wrapper .container .one .content .piece,
+.wrapper .container .two .content .piece,
+.wrapper .container .three .content .piece,
+.wrapper .container .circle .content .piece,
+.wrapper .container .p404 .content .piece {
+ width: 200px;
+ height: 80px;
+ display: flex;
+ position: absolute;
+ border-radius: 80px;
+ z-index: 1;
+ animation: pieceLeft 8s cubic-bezier(1, 0.06, 0.25, 1) infinite both;
+}
+@keyframes pieceLeft {
+ 50% {
+ left: 80%;
+ width: 10%;
+ }
+}
+@keyframes pieceRight {
+ 50% {
+ right: 80%;
+ width: 10%;
+ }
+}
+@media screen and (max-width: 799px) {
+ .wrapper .container .one,
+ .wrapper .container .two,
+ .wrapper .container .three,
+ .wrapper .container .circle,
+ .wrapper .container .p404 {
+ width: 90%;
+ height: 90%;
+ top: 5% !important;
+ left: 5% !important;
+ min-width: 280px;
+ min-height: 280px;
+ }
+}
+@media screen and (max-height: 660px) {
+ .wrapper .container .one,
+ .wrapper .container .two,
+ .wrapper .container .three,
+ .wrapper .container .circle,
+ .wrapper .container .p404 {
+ min-width: 280px;
+ min-height: 280px;
+ width: 60%;
+ height: 60%;
+ top: 20% !important;
+ left: 20% !important;
+ }
+}
+.wrapper .container .text {
+ width: 60%;
+ height: 40%;
+ min-width: 400px;
+ min-height: 500px;
+ position: absolute;
+ margin: 40px 0;
+ animation: text 0.6s 1.8s ease backwards;
+}
+@keyframes text {
+ 0% {
+ opacity: 0;
+ transform: translateY(40px);
+ }
+}
+@media screen and (max-width: 799px) {
+ .wrapper .container .text {
+ min-height: 400px;
+ height: 80%;
+ }
+}
+.wrapper .container .text article {
+ width: 400px;
+ position: absolute;
+ bottom: 0;
+ z-index: 4;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ text-align: center;
+ bottom: 0;
+ left: 50%;
+ transform: translateX(-50%);
+}
+@media screen and (max-width: 799px) {
+ .wrapper .container .text article {
+ width: 100%;
+ }
+}
+.wrapper .container .text article p {
+ color: white;
+ font-size: 18px;
+ letter-spacing: 0.6px;
+ margin-bottom: 40px;
+ text-shadow: 6px 6px 10px #32243E;
+}
+.wrapper .container .text article button {
+ height: 40px;
+ padding: 0 30px;
+ border-radius: 50px;
+ cursor: pointer;
+ box-shadow: 0px 15px 20px rgba(54, 24, 79, 0.5);
+ z-index: 3;
+ color: #695681;
+ background-color: white;
+ text-transform: uppercase;
+ font-weight: 600;
+ font-size: 12px;
+ transition: all 0.3s ease;
+}
+.wrapper .container .text article button:hover {
+ box-shadow: 0px 10px 10px -10px rgba(54, 24, 79, 0.5);
+ transform: translateY(5px);
+ background: #FB8A8A;
+ color: white;
+}
+.wrapper .container .p404 {
+ font-size: 200px;
+ font-weight: 700;
+ letter-spacing: 4px;
+ color: white;
+ display: flex !important;
+ justify-content: center;
+ align-items: center;
+ position: absolute;
+ z-index: 2;
+ animation: anime404 0.6s cubic-bezier(0.3, 0.8, 1, 1.05) both;
+ animation-delay: 1.2s;
+}
+@media screen and (max-width: 799px) {
+ .wrapper .container .p404 {
+ font-size: 100px;
+ }
+}
+@keyframes anime404 {
+ 0% {
+ opacity: 0;
+ transform: scale(10) skew(20deg, 20deg);
+ }
+}
+.wrapper .container .p404:nth-of-type(2) {
+ color: #36184F;
+ z-index: 1;
+ animation-delay: 1s;
+ filter: blur(10px);
+ opacity: 0.8;
+}
+.wrapper .container .circle {
+ position: absolute;
+}
+.wrapper .container .circle:before {
+ content: '';
+ position: absolute;
+ width: 800px;
+ height: 800px;
+ background-color: rgba(54, 24, 79, 0.2);
+ border-radius: 100%;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ box-shadow: inset 5px 20px 40px rgba(54, 24, 79, 0.25), inset 5px 0px 5px rgba(50, 36, 62, 0.3), inset 5px 5px 20px rgba(50, 36, 62, 0.25), 2px 2px 5px rgba(255, 255, 255, 0.2);
+ animation: circle 0.8s cubic-bezier(1, 0.06, 0.25, 1) backwards;
+}
+@keyframes circle {
+ 0% {
+ width: 0;
+ height: 0;
+ }
+}
+@media screen and (max-width: 799px) {
+ .wrapper .container .circle:before {
+ width: 400px;
+ height: 400px;
+ }
+}
+.wrapper .container .one .content:before {
+ content: '';
+ position: absolute;
+ width: 600px;
+ height: 600px;
+ background-color: rgba(54, 24, 79, 0.3);
+ border-radius: 100%;
+ box-shadow: inset 5px 20px 40px rgba(54, 24, 79, 0.25), inset 5px 0px 5px rgba(50, 36, 62, 0.3), inset 5px 5px 20px rgba(50, 36, 62, 0.25), 2px 2px 5px rgba(255, 255, 255, 0.2);
+ animation: circle 0.8s 0.4s cubic-bezier(1, 0.06, 0.25, 1) backwards;
+}
+@media screen and (max-width: 799px) {
+ .wrapper .container .one .content:before {
+ width: 300px;
+ height: 300px;
+ }
+}
+.wrapper .container .one .content .piece {
+ background: linear-gradient(90deg, #8077EA 13.7%, #EB73FF 94.65%);
+}
+.wrapper .container .one .content .piece:nth-child(1) {
+ right: 15%;
+ top: 18%;
+ height: 30px;
+ width: 120px;
+ animation-delay: 0.5s;
+ animation-name: pieceRight;
+}
+.wrapper .container .one .content .piece:nth-child(2) {
+ left: 15%;
+ top: 45%;
+ width: 150px;
+ height: 50px;
+ animation-delay: 1s;
+ animation-name: pieceLeft;
+}
+.wrapper .container .one .content .piece:nth-child(3) {
+ left: 10%;
+ top: 75%;
+ height: 20px;
+ width: 70px;
+ animation-delay: 1.5s;
+ animation-name: pieceLeft;
+}
+.wrapper .container .two .content .piece {
+ background: linear-gradient(90deg, #FFEDC0 0%, #FF9D87 100%);
+}
+.wrapper .container .two .content .piece:nth-child(1) {
+ left: 0%;
+ top: 25%;
+ height: 40px;
+ width: 120px;
+ animation-delay: 2s;
+ animation-name: pieceLeft;
+}
+.wrapper .container .two .content .piece:nth-child(2) {
+ right: 15%;
+ top: 35%;
+ width: 180px;
+ height: 50px;
+ animation-delay: 2.5s;
+ animation-name: pieceRight;
+}
+.wrapper .container .two .content .piece:nth-child(3) {
+ right: 10%;
+ top: 80%;
+ height: 20px;
+ width: 160px;
+ animation-delay: 3s;
+ animation-name: pieceRight;
+}
+.wrapper .container .three .content .piece {
+ background: #FB8A8A;
+}
+.wrapper .container .three .content .piece:nth-child(1) {
+ left: 25%;
+ top: 35%;
+ height: 20px;
+ width: 80px;
+ animation-name: pieceLeft;
+ animation-delay: 3.5s;
+}
+.wrapper .container .three .content .piece:nth-child(2) {
+ right: 10%;
+ top: 55%;
+ width: 140px;
+ height: 40px;
+ animation-name: pieceRight;
+ animation-delay: 4s;
+}
+.wrapper .container .three .content .piece:nth-child(3) {
+ left: 40%;
+ top: 68%;
+ height: 20px;
+ width: 80px;
+ animation-name: pieceLeft;
+ animation-delay: 4.5s;
+}
\ No newline at end of file
diff --git a/src/main/resources/static/css/System.css b/src/main/resources/static/css/System.css
new file mode 100644
index 0000000..8100a87
--- /dev/null
+++ b/src/main/resources/static/css/System.css
@@ -0,0 +1,50 @@
+f1 label {
+ color: #48a59f;
+}
+
+.layer-padding{
+ padding: 20px;
+ width: 580px;
+}
+.layer-padding f1{
+ display: block;
+}
+
+.add-search-div{
+ margin-top: 1%;
+ margin-left:10%;
+}
+.serach-div{
+ margin-top: 2%;
+}
+.layui-icon{
+ color: red;
+}
+/*定义滚动条高宽及背景 高宽分别对应横竖滚动条的尺寸*/
+::-webkit-scrollbar
+{
+ width: 16px;
+ height: 7px;
+ background-color: #F5F5F5;
+}
+
+/*定义滚动条轨道 内阴影+圆角*/
+::-webkit-scrollbar-track
+{
+ -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3);
+ border-radius: 10px;
+ background-color: #F5F5F5;
+}
+/*定义失去焦点滑块 内阴影+圆角*/
+::-webkit-scrollbar-thumb
+{
+ border-radius: 10px;
+ background-color: #b3b2b2;
+}
+/*定义滑块 内阴影+圆角*/
+::-webkit-scrollbar-thumb:hover
+{
+ border-radius: 10px;
+ -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,.3);
+ background-color: #7d7c7c;
+}
\ No newline at end of file
diff --git a/src/main/resources/static/css/button.css b/src/main/resources/static/css/button.css
new file mode 100644
index 0000000..bbcda9a
--- /dev/null
+++ b/src/main/resources/static/css/button.css
@@ -0,0 +1,231 @@
+
+
+button[name="cssbutton"] {
+ position: relative;
+ margin: 0;
+ padding: 5px 12px;
+ height: 60px;
+ width: 100px;
+ outline: none;
+ text-decoration: none;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ cursor: pointer;
+ text-transform: uppercase;
+ background-color: #ffffff;
+ border: 1px solid rgba(22, 76, 167, 0.6);
+ border-radius: 10px;
+ color: #1d89ff;
+ font-weight: 400;
+ font-size: 20px;
+ font-family: inherit;
+ z-index: 0;
+ overflow: hidden;
+ transition: all 0.3s cubic-bezier(0.02, 0.01, 0.47, 1);
+}
+button[name="cssbutton"] span {
+ color: #164ca7;
+ font-size: 12px;
+ font-weight: 500;
+ letter-spacing: 0.7px;
+}
+button[name="cssbutton"]:hover {
+ animation: rotate 0.7s ease-in-out both;
+}
+button[name="cssbutton"]:hover span {
+ animation: storm 0.7s ease-in-out both;
+ animation-delay: 0.06s;
+}
+
+
+
+button[name="layerbutton"] {
+ position: relative;
+ margin: 0 auto;
+ padding: 5px 12px;
+ height: 30px;
+ width: 150px;
+ outline: none;
+ text-decoration: none;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ cursor: pointer;
+ text-transform: uppercase;
+ background-color: #ffffff;
+ border: 1px solid rgba(22, 76, 167, 0.6);
+ border-radius: 10px;
+ color: #1d89ff;
+ font-weight: 400;
+ font-size: 20px;
+ font-family: inherit;
+ z-index: 0;
+ overflow: hidden;
+ transition: all 0.3s cubic-bezier(0.02, 0.01, 0.47, 1);
+}
+button[name="layerbutton"] span {
+ color: #164ca7;
+ font-size: 12px;
+ font-weight: 500;
+ letter-spacing: 0.7px;
+}
+button[name="layerbutton"]:hover {
+ animation: rotate 0.7s ease-in-out both;
+}
+button[name="layerbutton"]:hover span {
+ animation: storm 0.7s ease-in-out both;
+ animation-delay: 0.06s;
+}
+
+
+button[name="tablebutton"] {
+ position: relative;
+ margin: 0 auto;
+ padding: 5px 12px;
+ height: 25px;
+ outline: none;
+ text-decoration: none;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ cursor: pointer;
+ text-transform: uppercase;
+ background-color: #ffffff;
+ border: 1px solid rgba(22, 76, 167, 0.6);
+ border-radius: 10px;
+ color: #1d89ff;
+ font-weight: 400;
+ font-size: 20px;
+ font-family: inherit;
+ z-index: 0;
+ overflow: hidden;
+ transition: all 0.3s cubic-bezier(0.02, 0.01, 0.47, 1);
+}
+button[name="tablebutton"] span {
+ color: #164ca7;
+ font-size: 12px;
+ font-weight: 500;
+ letter-spacing: 0.7px;
+}
+button[name="tablebutton"]:hover {
+ animation: rotate 0.7s ease-in-out both;
+}
+button[name="tablebutton"]:hover span {
+ animation: storm 0.7s ease-in-out both;
+ animation-delay: 0.06s;
+}
+
+
+
+@keyframes rotate {
+ 0% {
+ transform: rotate(0deg) translate3d(0, 0, 0);
+ }
+ 25% {
+ transform: rotate(3deg) translate3d(0, 0, 0);
+ }
+ 50% {
+ transform: rotate(-3deg) translate3d(0, 0, 0);
+ }
+ 75% {
+ transform: rotate(1deg) translate3d(0, 0, 0);
+ }
+ 100% {
+ transform: rotate(0deg) translate3d(0, 0, 0);
+ }
+}
+@keyframes storm {
+ 0% {
+ transform: translate3d(0, 0, 0) translateZ(0);
+ }
+ 25% {
+ transform: translate3d(4px, 0, 0) translateZ(0);
+ }
+ 50% {
+ transform: translate3d(-3px, 0, 0) translateZ(0);
+ }
+ 75% {
+ transform: translate3d(2px, 0, 0) translateZ(0);
+ }
+ 100% {
+ transform: translate3d(0, 0, 0) translateZ(0);
+ }
+}
+.btn-pill:before, .btn-pill:after {
+ position: absolute;
+ right: 0;
+ bottom: 0;
+ width: 100px;
+ height: 100px;
+ border-radius: 50%;
+ background: #1d89ff;
+ content: "";
+ opacity: 0;
+ transition: transform 0.15s cubic-bezier(0.02, 0.01, 0.47, 1), opacity 0.15s cubic-bezier(0.02, 0.01, 0.47, 1);
+ z-index: -1;
+ transform: translate(100%, -25%) translate3d(0, 0, 0);
+}
+.btn-pill:hover:before, .btn-pill:hover:after {
+ opacity: 0.15;
+ transition: transform 0.2s cubic-bezier(0.02, 0.01, 0.47, 1), opacity 0.2s cubic-bezier(0.02, 0.01, 0.47, 1);
+}
+.btn-pill:hover:before {
+ transform: translate3d(50%, 0, 0) scale(0.9);
+}
+.btn-pill:hover:after {
+ transform: translate(50%, 0) scale(1.1);
+}
+
+.btn-shine {
+ border: 1px solid;
+ overflow: hidden;
+ position: relative;
+}
+.btn-shine span {
+ z-index: 20;
+}
+.btn-shine:after {
+ background: #38ef7d;
+ content: "";
+ height: 155px;
+ left: -75px;
+ opacity: 0.4;
+ position: absolute;
+ top: -50px;
+ transform: rotate(35deg);
+ transition: all 550ms cubic-bezier(0.19, 1, 0.22, 1);
+ width: 50px;
+ z-index: -10;
+}
+.btn-shine:hover:after {
+ left: 120%;
+ transition: all 550ms cubic-bezier(0.19, 1, 0.22, 1);
+}
+
+.btn-slide-line.center:after {
+ left: 50%;
+}
+.btn-slide-line:after {
+ position: absolute;
+ right: 0;
+ left: auto;
+ transition: 0.3s;
+ content: "";
+ width: 0;
+ bottom: 0;
+ height: 3px;
+ background: #164ca7;
+}
+.btn-slide-line:hover {
+ cursor: pointer;
+}
+.btn-slide-line:hover:after {
+ width: 100%;
+ left: 0;
+}
+
+.inspire a {
+ text-decoration: none;
+}
+
diff --git a/src/main/resources/static/css/daterangepicker.css b/src/main/resources/static/css/daterangepicker.css
new file mode 100644
index 0000000..d5485f8
--- /dev/null
+++ b/src/main/resources/static/css/daterangepicker.css
@@ -0,0 +1,233 @@
+.daterangepicker {
+ position: absolute;
+ color: inherit;
+ background: #fff;
+ border-radius: 4px;
+ width: 278px;
+ padding: 4px;
+ margin-top: 1px;
+ top: 100px;
+ left: 20px;
+ z-index: 999999999;
+ /* Calendars */ }
+ .daterangepicker:before, .daterangepicker:after {
+ position: absolute;
+ display: inline-block;
+ border-bottom-color: rgba(0, 0, 0, 0.2);
+ content: ''; }
+ .daterangepicker:before {
+ top: -7px;
+ border-right: 7px solid transparent;
+ border-left: 7px solid transparent;
+ border-bottom: 7px solid #ccc; }
+ .daterangepicker:after {
+ top: -6px;
+ border-right: 6px solid transparent;
+ border-bottom: 6px solid #fff;
+ border-left: 6px solid transparent; }
+ .daterangepicker.opensleft:before {
+ right: 9px; }
+ .daterangepicker.opensleft:after {
+ right: 10px; }
+ .daterangepicker.openscenter:before {
+ left: 0;
+ right: 0;
+ width: 0;
+ margin-left: auto;
+ margin-right: auto; }
+ .daterangepicker.openscenter:after {
+ left: 0;
+ right: 0;
+ width: 0;
+ margin-left: auto;
+ margin-right: auto; }
+ .daterangepicker.opensright:before {
+ left: 9px; }
+ .daterangepicker.opensright:after {
+ left: 10px; }
+ .daterangepicker.dropup {
+ margin-top: -5px; }
+ .daterangepicker.dropup:before {
+ top: initial;
+ bottom: -7px;
+ border-bottom: initial;
+ border-top: 7px solid #ccc; }
+ .daterangepicker.dropup:after {
+ top: initial;
+ bottom: -6px;
+ border-bottom: initial;
+ border-top: 6px solid #fff; }
+ .daterangepicker.dropdown-menu {
+ max-width: none;
+ z-index: 99999999; }
+ .daterangepicker.single .ranges, .daterangepicker.single .calendar {
+ float: none; }
+ .daterangepicker.show-calendar .calendar {
+ display: block; }
+ .daterangepicker .calendar {
+ display: none;
+ max-width: 270px;
+ margin: 4px; }
+ .daterangepicker .calendar.single .calendar-table {
+ border: none; }
+ .daterangepicker .calendar th, .daterangepicker .calendar td {
+ white-space: nowrap;
+ text-align: center;
+ min-width: 32px; }
+ .daterangepicker .calendar-table {
+ border: 1px solid #fff;
+ padding: 4px;
+ border-radius: 4px;
+ background: #fff; }
+ .daterangepicker table {
+ width: 100%;
+ margin: 0; }
+ .daterangepicker td, .daterangepicker th {
+ text-align: center;
+ width: 20px;
+ height: 20px;
+ border-radius: 4px;
+ border: 1px solid transparent;
+ white-space: nowrap;
+ cursor: pointer; }
+ .daterangepicker td.available:hover, .daterangepicker th.available:hover {
+ background: #eee; }
+ .daterangepicker td.week, .daterangepicker th.week {
+ font-size: 80%;
+ color: #ccc; }
+ .daterangepicker td.off, .daterangepicker td.off.in-range, .daterangepicker td.off.start-date, .daterangepicker td.off.end-date {
+ background-color: #fff;
+ border-color: transparent;
+ color: #999; }
+ .daterangepicker td.in-range {
+ background-color: #ebf4f8;
+ border-color: transparent;
+ color: #000;
+ border-radius: 0; }
+ .daterangepicker td.start-date {
+ border-radius: 4px 0 0 4px; }
+ .daterangepicker td.end-date {
+ border-radius: 0 4px 4px 0; }
+ .daterangepicker td.start-date.end-date {
+ border-radius: 4px; }
+ .daterangepicker td.active, .daterangepicker td.active:hover {
+ background-color: #357ebd;
+ border-color: transparent;
+ color: #fff; }
+ .daterangepicker th.month {
+ width: auto; }
+ .daterangepicker td.disabled, .daterangepicker option.disabled {
+ color: #999;
+ cursor: not-allowed;
+ text-decoration: line-through; }
+ .daterangepicker select.monthselect, .daterangepicker select.yearselect {
+ font-size: 12px;
+ padding: 1px;
+ height: auto;
+ margin: 0;
+ cursor: default; }
+ .daterangepicker select.monthselect {
+ margin-right: 2%;
+ width: 56%; }
+ .daterangepicker select.yearselect {
+ width: 40%; }
+ .daterangepicker select.hourselect, .daterangepicker select.minuteselect, .daterangepicker select.secondselect, .daterangepicker select.ampmselect {
+ width: 50px;
+ margin-bottom: 0; }
+ .daterangepicker .input-mini {
+ border: 1px solid #ccc;
+ border-radius: 4px;
+ color: #555;
+ height: 30px;
+ line-height: 30px;
+ display: block;
+ vertical-align: middle;
+ margin: 0 0 5px 0;
+ padding: 0 6px 0 28px;
+ width: 100%; }
+ .daterangepicker .input-mini.active {
+ border: 1px solid #08c;
+ border-radius: 4px; }
+ .daterangepicker .daterangepicker_input {
+ position: relative; }
+ .daterangepicker .daterangepicker_input i {
+ position: absolute;
+ left: 8px;
+ top: 8px; }
+ .daterangepicker .calendar-time {
+ text-align: center;
+ margin: 5px auto;
+ line-height: 30px;
+ position: relative;
+ padding-left: 28px; }
+ .daterangepicker .calendar-time select.disabled {
+ color: #ccc;
+ cursor: not-allowed; }
+
+.ranges {
+ font-size: 11px;
+ float: none;
+ margin: 4px;
+ text-align: left; }
+ .ranges ul {
+ list-style: none;
+ margin: 0 auto;
+ padding: 0;
+ width: 100%; }
+ .ranges li {
+ font-size: 13px;
+ background: #f5f5f5;
+ border: 1px solid #f5f5f5;
+ border-radius: 4px;
+ color: #08c;
+ padding: 3px 12px;
+ margin-bottom: 8px;
+ cursor: pointer; }
+ .ranges li:hover {
+ background: #08c;
+ border: 1px solid #08c;
+ color: #fff; }
+ .ranges li.active {
+ background: #08c;
+ border: 1px solid #08c;
+ color: #fff; }
+
+/* Larger Screen Styling */
+@media (min-width: 564px) {
+ .daterangepicker {
+ width: auto; }
+ .daterangepicker .ranges ul {
+ width: 160px; }
+ .daterangepicker.single .ranges ul {
+ width: 100%; }
+ .daterangepicker.single .calendar.left {
+ clear: none; }
+ .daterangepicker.single .ranges, .daterangepicker.single .calendar {
+ float: left; }
+ .daterangepicker .calendar.left {
+ clear: left;
+ margin-right: 0; }
+ .daterangepicker .calendar.left .calendar-table {
+ border-right: none;
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0; }
+ .daterangepicker .calendar.right {
+ margin-left: 0; }
+ .daterangepicker .calendar.right .calendar-table {
+ border-left: none;
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0; }
+ .daterangepicker .left .daterangepicker_input {
+ padding-right: 12px; }
+ .daterangepicker .calendar.left .calendar-table {
+ padding-right: 12px; }
+ .daterangepicker .ranges, .daterangepicker .calendar {
+ float: left; } }
+
+@media (min-width: 730px) {
+ .daterangepicker .ranges {
+ width: auto;
+ float: left; }
+ .daterangepicker .calendar.left {
+ clear: none; } }
+
diff --git a/src/main/resources/static/css/htmleaf-demo.css b/src/main/resources/static/css/htmleaf-demo.css
new file mode 100644
index 0000000..7823c04
--- /dev/null
+++ b/src/main/resources/static/css/htmleaf-demo.css
@@ -0,0 +1,244 @@
+
+[class^="icon-"], [class*=" icon-"] {
+ font-family: 'icomoon';
+ speak: none;
+ font-style: normal;
+ font-weight: normal;
+ font-variant: normal;
+ text-transform: none;
+ line-height: 1;
+
+ /* Better Font Rendering =========== */
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+body, html { font-size: 100%; padding: 0; margin: 0;}
+
+/* Reset */
+/**,
+*:after,
+*:before {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+*/
+/* Clearfix hack by Nicolas Gallagher: http://nicolasgallagher.com/micro-clearfix-hack/ */
+.clearfix:before,
+.clearfix:after {
+ content: " ";
+ display: table;
+}
+
+.clearfix:after {
+ clear: both;
+}
+
+body{
+ font-family: "Microsoft YaHei","Segoe UI", "Lucida Grande", Helvetica, Arial,sans-serif;
+}
+a{ color: rgba(255, 255, 255, 0.6);outline: none;text-decoration: none;-webkit-transition: 0.2s;transition: 0.2s;}
+a:hover,a:focus{color:#74777b;text-decoration: none;}
+.htmleaf-container{
+ margin-top: 5%;
+ /* margin: 5% auto; */
+ margin-left: 10%;
+ margin-right: 5%;
+}
+
+.bgcolor-1 { background: #f0efee; }
+.bgcolor-2 { background: #f9f9f9; }
+.bgcolor-3 { background: #e8e8e8; }/*light grey*/
+.bgcolor-4 { background: #2f3238; color: #fff; }/*Dark grey*/
+.bgcolor-5 { background: #df6659; color: #521e18; }/*pink1*/
+.bgcolor-6 { background: #2fa8ec; }/*sky blue*/
+.bgcolor-7 { background: #d0d6d6; }/*White tea*/
+.bgcolor-8 { background: #3d4444; color: #fff; }/*Dark grey2*/
+.bgcolor-9 { background: #ef3f52; color: #fff;}/*pink2*/
+.bgcolor-10{ background: #64448f; color: #fff;}/*Violet*/
+.bgcolor-11{ background: #3755ad; color: #fff;}/*dark blue*/
+.bgcolor-12{ background: #3498DB; color: #fff;}/*light blue*/
+.bgcolor-20{ background: #494A5F;color: #D5D6E2;}
+/* Header */
+.htmleaf-header{
+ padding: 1em 190px 1em;
+ letter-spacing: -1px;
+ text-align: center;
+ background: -webkit-linear-gradient(to right, rgb(44, 62, 80), rgb(166, 120, 136), rgb(196, 90, 84)); /* Chrome 10-25, Safari 5.1-6 */
+ background: linear-gradient(to right, rgb(44, 62, 80), rgb(166, 120, 136), rgb(196, 90, 84)); /* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */
+}
+.htmleaf-header h1 {
+ color: #D5D6E2;
+ font-weight: 600;
+ font-size: 2em;
+ line-height: 1;
+ margin-bottom: 0;
+}
+.htmleaf-header h1 span {
+ display: block;
+ font-size: 60%;
+ font-weight: 400;
+ padding: 0.8em 0 0.5em 0;
+ color: #c3c8cd;
+}
+/*nav*/
+.htmleaf-demo a{color: #fff;text-decoration: none;}
+.htmleaf-demo{width: 100%;padding-bottom: 1.2em;}
+.htmleaf-demo a{display: inline-block;margin: 0.5em;padding: 0.6em 1em;border: 3px solid #fff;font-weight: 700;}
+.htmleaf-demo a:hover{opacity: 0.6;}
+.htmleaf-demo a.current{background:#1d7db1;color: #fff; }
+/* Top Navigation Style */
+.htmleaf-links {
+ position: relative;
+ display: inline-block;
+ white-space: nowrap;
+ font-size: 1.5em;
+ text-align: center;
+}
+
+.htmleaf-links::after {
+ position: absolute;
+ top: 0;
+ left: 50%;
+ margin-left: -1px;
+ width: 2px;
+ height: 100%;
+ background: #dbdbdb;
+ content: '';
+ -webkit-transform: rotate3d(0,0,1,22.5deg);
+ transform: rotate3d(0,0,1,22.5deg);
+}
+
+.htmleaf-icon {
+ display: inline-block;
+ margin: 0.5em;
+ padding: 0em 0;
+ width: 1.5em;
+ text-decoration: none;
+}
+
+.htmleaf-icon span {
+ display: none;
+}
+
+.htmleaf-icon:before {
+ margin: 0 5px;
+ text-transform: none;
+ font-weight: normal;
+ font-style: normal;
+ font-variant: normal;
+ font-family: 'icomoon';
+ line-height: 1;
+ speak: none;
+ -webkit-font-smoothing: antialiased;
+}
+/* footer */
+.htmleaf-footer{width: 100%;padding-top: 10px;}
+.htmleaf-small{font-size: 0.8em;}
+.center{text-align: center;}
+/****/
+.related {
+ color: #fff;
+ background: #494A5F;
+ text-align: center;
+ font-size: 1.25em;
+ padding: 0.5em 0;
+ overflow: hidden;
+}
+
+.related > a {
+ vertical-align: top;
+ width: calc(100% - 20px);
+ max-width: 340px;
+ display: inline-block;
+ text-align: center;
+ margin: 20px 10px;
+ padding: 25px;
+ font-family: "Microsoft YaHei","宋体","Segoe UI", "Lucida Grande", Helvetica, Arial,sans-serif, FreeSans, Arimo;
+}
+.related a {
+ display: inline-block;
+ text-align: left;
+ margin: 20px auto;
+ padding: 10px 20px;
+ opacity: 0.8;
+ -webkit-transition: opacity 0.3s;
+ transition: opacity 0.3s;
+ -webkit-backface-visibility: hidden;
+}
+
+.related a:hover,
+.related a:active {
+ opacity: 1;
+}
+
+.related a img {
+ max-width: 100%;
+ opacity: 0.8;
+ border-radius: 4px;
+}
+.related a:hover img,
+.related a:active img {
+ opacity: 1;
+}
+.related h3{font-family: "Microsoft YaHei", sans-serif;font-size: 1.2em}
+.related a h3 {
+ font-size: 0.85em;
+ font-weight: 300;
+ margin-top: 0.15em;
+ color: #fff;
+}
+/* icomoon */
+.icon-htmleaf-home-outline:before {
+ content: "\e5000";
+}
+
+.icon-htmleaf-arrow-forward-outline:before {
+ content: "\e5001";
+}
+
+@media screen and (max-width: 1024px) {
+ .htmleaf-header {
+ padding: 2em 10% 2em;
+ }
+ .htmleaf-header h1 {
+ font-size:1.4em;
+ }
+ .htmleaf-links{font-size: 1.4em}
+}
+
+@media screen and (max-width: 960px) {
+ .htmleaf-header {
+ padding: 2em 10% 2em;
+ }
+ .htmleaf-header h1 {
+ font-size:1.2em;
+ }
+ .htmleaf-links{font-size: 1.2em}
+ .related h3{font-size: 1em;}
+ .related a h3 {
+ font-size: 0.8em;
+ }
+}
+
+@media screen and (max-width: 766px) {
+ .htmleaf-header h1 {
+ font-size:1.3em;
+ }
+ .htmleaf-links{font-size: 1.3em}
+}
+
+@media screen and (max-width: 640px) {
+ .htmleaf-header {
+ padding: 2em 10% 2em;
+ }
+ .htmleaf-header h1 {
+ font-size:1em;
+ }
+ .htmleaf-links{font-size: 1em}
+ .related h3{font-size: 0.8em;}
+ .related a h3 {
+ font-size: 0.6em;
+ }
+}
diff --git a/src/main/resources/static/css/input.css b/src/main/resources/static/css/input.css
new file mode 100644
index 0000000..5718ffc
--- /dev/null
+++ b/src/main/resources/static/css/input.css
@@ -0,0 +1,111 @@
+input[type="text"][name="cssinput"] {
+ box-sizing: border-box;
+ width: 100%;
+ height: calc(3em + 2px);
+ margin: 0 0 1em;
+ padding: 1em;
+ border: 1px solid #ccc;
+ border-radius: 10px;
+ background: #fff;
+ resize: none;
+ outline: none;
+}
+input[type="text"][name="cssinput"][required]:focus {
+ outline: none;
+ border-color: #07f;
+ box-shadow: 0 0 0 2px rgba(0,119,255,0.2);
+}
+input[type="text"][name="cssinput"][required]:focus + label[name="search_label"][placeholder]:before {
+ color: #00bafa;
+}
+input[type="text"][name="cssinput"][required]:focus + label[name="search_label"][placeholder]:before,
+input[type="text"][name="cssinput"][required]:valid + label[name="search_label"][placeholder]:before {
+ transition-duration: 0.2s;
+ transform: translate(0, -1.5em) scale(0.9, 0.9);
+}
+input[type="text"][name="cssinput"][required]:invalid + label[name="search_label"][placeholder][alt]:before {
+ content: attr(alt);
+}
+input[type="text"][name="cssinput"][required] + label[name="search_label"][placeholder] {
+ display: block;
+ pointer-events: none;
+ line-height: 1.25em;
+ margin-top: calc(-3em - 2px);
+ margin-bottom: calc((3em - 1em) + 2px);
+}
+input[type="text"][name="cssinput"][required] + label[name="search_label"][placeholder]:before {
+ content: attr(placeholder);
+ display: inline-block;
+ margin: 0 calc(1em + 2px);
+ padding: 0 2px;
+ color: #898989;
+ white-space: nowrap;
+ transition: 0.3s ease-in-out;
+ background-image: linear-gradient(to bottom, #fff, #fff);
+ background-size: 100% 5px;
+ background-repeat: no-repeat;
+ background-position: center;
+}
+
+
+textarea[name="layertext"] {
+ box-sizing: border-box;
+ width: 100%;
+ height: 5em;
+ padding: 1em;
+ border: 1px solid #ccc;
+ border-radius: 10px;
+ background: #fff;
+ resize: none;
+ outline: none;
+}
+textarea[name="layertext"]:focus {
+ outline: none;
+ border-color: #0077ff;
+ box-shadow: 0 0 0 2px rgba(0, 119, 255, 0.2);
+}
+input[name="layerinput" ] {
+ box-sizing: border-box;
+ width: 100%;
+ height: calc(3em + 2px);
+ padding: 1em;
+ border: 1px solid #ccc;
+ border-radius: 10px;
+ background: #fff;
+ resize: none;
+ outline: none;
+}
+input[name="layerinput" ]:focus {
+ outline: none;
+ border-color: #07f;
+ box-shadow: 0 0 0 2px rgba(0,119,255,0.2);
+}
+input[name="layerinput" ]:focus + label[name="search_label"][placeholder]:before,
+input[name="layerinput" ]:valid + label[name="search_label"][placeholder]:before {
+ transition-duration: 0.2s;
+ transform: translate(0, -1.5em) scale(0.9, 0.9);
+}
+input[name="layerinput" ]:invalid + label[name="search_label"][placeholder][alt]:before {
+ content: attr(alt);
+}
+input[name="layerinput" ] + label[name="search_label"][placeholder] {
+ display: block;
+ pointer-events: none;
+ line-height: 1.25em;
+ margin-top: calc(-3em - 2px);
+ margin-bottom: calc((3em - 1em) + 2px);
+}
+input[name="layerinput" ] + label[name="search_label"][placeholder]:before {
+ content: attr(placeholder);
+ display: inline-block;
+ margin: 0 calc(1em + 2px);
+ padding: 0 2px;
+ color: #898989;
+ white-space: nowrap;
+ transition: 0.3s ease-in-out;
+ background-image: linear-gradient(to bottom, #fff, #fff);
+ background-size: 100% 5px;
+ background-repeat: no-repeat;
+ background-position: center;
+}
+
diff --git a/src/main/resources/static/css/laydate.css b/src/main/resources/static/css/laydate.css
new file mode 100644
index 0000000..9f3064b
--- /dev/null
+++ b/src/main/resources/static/css/laydate.css
@@ -0,0 +1 @@
+.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:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;animation-name:laydate-downbit}.layui-laydate-main{width:272px}.layui-laydate-content td,.layui-laydate-header *,.layui-laydate-list li{transition-duration:.3s;-webkit-transition-duration:.3s}@keyframes laydate-downbit{0%{opacity:.3;transform:translate3d(0,-5px,0)}100%{opacity:1;transform:translate3d(0,0,0)}}.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-1 .layui-laydate-content,.layui-laydate-range .laydate-main-list-1 .layui-laydate-header{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:#B5FFF8}.laydate-selected:hover{background-color:#00F7DE!important}.layui-laydate-content td:hover,.layui-laydate-list li:hover{background-color:#eee;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/src/main/resources/static/css/layer.css b/src/main/resources/static/css/layer.css
new file mode 100644
index 0000000..db51f31
--- /dev/null
+++ b/src/main/resources/static/css/layer.css
@@ -0,0 +1 @@
+.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:50px;line-height:50px;border-bottom:1px solid #F0F0F0;font-size:14px;color:#333;overflow:hidden;border-radius:2px 2px 0 0}.layui-layer-setwin{position:absolute;right:15px;*right:0;top:17px;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:300px}.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:260px;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:300px;padding:0 20px;text-align:center;overflow:hidden;cursor:pointer}.layui-layer-tab .layui-layer-title span.layui-this{height:51px;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{background:0 0;box-shadow:none}.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-imgnext,.layui-layer-imgprev{position:fixed;top:50%;width:27px;_width:44px;height:44px;margin-top:-22px;outline:0;blr:expression(this.onFocus=this.blur())}.layui-layer-imgprev{left:30px;background-position:-5px -5px;_background-position:-70px -5px}.layui-layer-imgprev:hover{background-position:-33px -5px;_background-position:-120px -5px}.layui-layer-imgnext{right:30px;_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:fixed;left:0;right:0;bottom:0;width:100%;height:40px;line-height:40px;background-color:#000\9;filter:Alpha(opacity=60);background-color:rgba(2,0,0,.35);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/src/main/resources/static/css/layui.css b/src/main/resources/static/css/layui.css
new file mode 100644
index 0000000..9191bc1
--- /dev/null
+++ b/src/main/resources/static/css/layui.css
@@ -0,0 +1 @@
+.layui-inline,img{display:inline-block;vertical-align:middle}h1,h2,h3,h4,h5,h6{font-weight:400}a,body{color:#333}.layui-edge,.layui-header,.layui-inline,.layui-main{position:relative}.layui-edge,hr{height:0;overflow:hidden}.layui-layout-body,.layui-side,.layui-side-scroll{overflow-x: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-edge,.layui-elip,hr{overflow: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:1.6;color:rgba(0,0,0,.85);font:14px Helvetica Neue,Helvetica,PingFang SC,Tahoma,Arial,sans-serif}hr{line-height:0;margin:10px 0;padding:0;border:none!important;border-bottom:1px solid #eee!important;clear:both;background:0 0}a{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;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:#d2d2d2!important;cursor:not-allowed!important}.layui-circle{border-radius:100%}.layui-show{display:block!important}.layui-hide{display:none!important}.layui-show-v{visibility:visible!important}.layui-hide-v{visibility:hidden!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}.layui-side-scroll{position:relative;width:220px;height:100%}.layui-body{position:relative;left:200px;right:0;top:0;bottom:0;z-index:900;width:auto;box-sizing:border-box}.layui-layout-admin .layui-header{position:fixed;top:0;left:0;right:0;background-color:#23262E}.layui-layout-admin .layui-side{top:60px;width:200px;overflow-x:hidden}.layui-layout-admin .layui-body{position:absolute;top:60px;padding-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;z-index:990;height:44px;line-height:44px;padding:0 15px;box-shadow:-1px 0 4px rgb(0 0 0 / 12%);background-color:#FAFAFA}.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:1.6;border-left:5px solid #5FB878;border-radius:0 2px 2px 0;background-color:#FAFAFA}.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:15px}.layui-field-title .layui-field-box{padding:10px 0}.layui-progress{position:relative;height:6px;border-radius:20px;background-color:#eee}.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:#FAFAFA;cursor:pointer;font-size:14px;overflow:hidden}.layui-colla-content{display:none;padding:10px 15px;line-height:1.6;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-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{position:relative;border-width:1px;border-style:solid;border-radius:2px;box-shadow:1px 1px 4px rgb(0 0 0 / 8%);background-color:#fff;color:#666}.layui-bg-black,.layui-bg-blue,.layui-bg-cyan,.layui-bg-green,.layui-bg-orange,.layui-bg-red{color:#fff!important}.layui-panel-window{position:relative;padding:15px;border-radius:0;border-top:5px solid #eee;background-color:#fff}.layui-border,.layui-border-black,.layui-border-blue,.layui-border-cyan,.layui-border-green,.layui-border-orange,.layui-border-red{border-width:1px;border-style:solid}.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:#FAFAFA!important;color:#666!important}.layui-badge-rim,.layui-border,.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-panel,.layui-quote-nm,.layui-select,.layui-tab-bar,.layui-tab-card,.layui-tab-title,.layui-tab-title .layui-this:after,.layui-textarea{border-color:#eee}.layui-border{color:#666!important}.layui-border-red{border-color:#FF5722!important;color:#FF5722!important}.layui-border-orange{border-color:#FFB800!important;color:#FFB800!important}.layui-border-green{border-color:#009688!important;color:#009688!important}.layui-border-cyan{border-color:#2F4056!important;color:#2F4056!important}.layui-border-blue{border-color:#1E9FFF!important;color:#1E9FFF!important}.layui-border-black{border-color:#393D49!important;color:#393D49!important}.layui-timeline-item:before{background-color:#eee}.layui-text{line-height:1.6;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-left:5px!important;padding-right:5px!important}.layui-font-12{font-size:12px}.layui-font-14{font-size:14px}.layui-font-16{font-size:16px}.layui-font-18{font-size:18px}.layui-font-20{font-size:20px}.layui-font-red{color:#FF5722!important}.layui-font-orange{color:#FFB800!important}.layui-font-green{color:#009688!important}.layui-font-cyan{color:#2F4056!important}.layui-font-blue{color:#01AAED!important}.layui-font-black{color:#000!important}.layui-font-gray{color:#c2c2c2!important}.layui-btn{display:inline-block;height:38px;line-height:38px;padding:0 18px;border:1px solid transparent;background-color:#009688;color:#fff;white-space:nowrap;text-align:center;font-size:14px;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{padding:0 2px;vertical-align:middle\9;vertical-align:bottom}.layui-btn-primary{border-color:#d2d2d2;background:0 0;color:#666}.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-color:#eee;background-color:#FBFBFB;color:#d2d2d2;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-xs{height:22px;line-height:22px;padding:0 5px;font-size:12px}.layui-btn-xs i{font-size:12px!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:#d2d2d2;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 #d2d2d2}.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:#eee!important}.layui-input:focus,.layui-textarea:focus{border-color:#d2d2d2!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:#F6F6F6;-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!important}.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:#eee!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:#eee!important}.layui-checkbox-disbaled em{color:#d2d2d2!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:#c2c2c2}.layui-form-radio:hover *,.layui-form-radioed,.layui-form-radioed>i{color:#5FB878}.layui-radio-disbaled>i{color:#eee!important}.layui-radio-disbaled *{color:#c2c2c2!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 #eee}.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:#eee;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 #eee}.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:#FAFAFA}.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:#eee}.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-menu li,.layui-menu-body-title a:hover,.layui-menu-body-title>.layui-icon:hover{transition:all .3s}.layui-table-tool-panel li .layui-form-checkbox[lay-skin=primary]{width:100%;padding-left:28px}.layui-table-tool-panel li:hover{background-color:#F6F6F6}.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:#d2d2d2}.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-colorpicker-alpha-slider,.layui-colorpicker-side-slider,.layui-menu,.layui-menu *,.layui-nav{box-sizing:border-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-menu{position:relative;margin:5px 0;background-color:#fff}.layui-menu li,.layui-menu-body-title a{padding:5px 15px}.layui-menu li{position:relative;margin:1px 0;width:calc(100% + 1px);line-height:22px;color:rgba(0,0,0,.8);font-size:14px;white-space:nowrap;cursor:pointer}.layui-menu li:hover{background-color:#F6F6F6}.layui-menu-item-parent:hover>.layui-menu-body-panel{display:block;animation-name:layui-fadein;animation-duration:.3s;animation-fill-mode:both;animation-delay:.2s}.layui-menu-item-group .layui-menu-body-title,.layui-menu-item-parent .layui-menu-body-title{padding-right:25px}.layui-menu .layui-menu-item-divider:hover,.layui-menu .layui-menu-item-group:hover,.layui-menu .layui-menu-item-none:hover{background:0 0;cursor:default}.layui-menu .layui-menu-item-group>ul{margin:5px 0 -5px}.layui-menu .layui-menu-item-group>.layui-menu-body-title{color:rgba(0,0,0,.35);user-select:none}.layui-menu .layui-menu-item-none{color:rgba(0,0,0,.35);cursor:default;text-align:center}.layui-menu .layui-menu-item-divider{margin:5px 0;padding:0;height:0;line-height:0;border-bottom:1px solid #eee;overflow:hidden}.layui-menu .layui-menu-item-down:hover,.layui-menu .layui-menu-item-up:hover{cursor:pointer}.layui-menu .layui-menu-item-up>.layui-menu-body-title{color:rgba(0,0,0,.8)}.layui-menu .layui-menu-item-up>ul{visibility:hidden;height:0;overflow:hidden}.layui-menu .layui-menu-item-down:hover>.layui-menu-body-title>.layui-icon,.layui-menu .layui-menu-item-up>.layui-menu-body-title:hover>.layui-icon{color:rgba(0,0,0,1)}.layui-menu .layui-menu-item-down>ul{visibility:visible;height:auto}.layui-breadcrumb,.layui-tree-btnGroup{visibility:hidden}.layui-menu .layui-menu-item-checked,.layui-menu .layui-menu-item-checked2{background-color:#F6F6F6!important;color:#5FB878}.layui-menu .layui-menu-item-checked a,.layui-menu .layui-menu-item-checked2 a{color:#5FB878}.layui-menu .layui-menu-item-checked:after{position:absolute;right:0;top:0;bottom:0;border-right:3px solid #5FB878;content:""}.layui-menu-body-title{position:relative;overflow:hidden;text-overflow:ellipsis}.layui-menu-body-title a{display:block;margin:-5px -15px;color:rgba(0,0,0,.8)}.layui-menu-body-title>.layui-icon{position:absolute;right:0;top:0;font-size:14px}.layui-menu-body-title>.layui-icon-right{right:-1px}.layui-menu-body-panel{display:none;position:absolute;top:-7px;left:100%;z-index:1000;margin-left:13px;padding:5px 0}.layui-transfer-active,.layui-transfer-box{display:inline-block;vertical-align:middle}.layui-menu-body-panel:before{content:"";position:absolute;width:20px;left:-16px;top:0;bottom:0}.layui-menu-body-panel-left{left:auto;right:100%;margin:0 13px}.layui-menu-body-panel-left:before{left:auto;right:-16px}.layui-menu-lg li{line-height:32px}.layui-menu-lg .layui-menu-body-title a:hover,.layui-menu-lg li:hover{background:0 0;color:#5FB878}.layui-menu-lg li .layui-menu-body-panel{margin-left:14px}.layui-menu-lg li .layui-menu-body-panel-left{margin:0 15px}.layui-dropdown{position:absolute;left:-999999px;top:-999999px;z-index:66666666;margin:5px 0;min-width:100px}.layui-dropdown:before{content:"";position:absolute;width:100%;height:6px;left:0;top:-6px}.layui-transfer-box,.layui-transfer-header,.layui-transfer-search{border-width:0;border-style:solid;border-color:#eee}.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:#eee;color:#d2d2d2}.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:#F6F6F6;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}.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:-4px;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:#F6F6F6;color:#5FB878}.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:#eee;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:15px 0}.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:#FAFAFA}.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:first-child:before{display:block}.layui-timeline-item:last-child:before{display:none}.layui-timeline-content{padding-left:25px}.layui-timeline-title{position:relative;margin-bottom:10px;line-height:22px}.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:-5px 6px 0}.layui-nav .layui-badge{margin-top:-10px}.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:#eee;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 #eee;border-left-width:6px;background-color:#FAFAFA;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 #eee;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;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;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:#eee;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 #eee;border-radius:3px;font-size:16px;line-height:32px;position:absolute;right:0;top:-14px}.layui-slider-input-btn{position:absolute;top:0;right:0;width:20px;height:100%;border-left:1px solid #eee}.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 #eee}.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:33px}.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:.2s;-webkit-animation-fill-mode:both;animation-duration:.2s;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 .2s;-webkit-transition:all .2s}@-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,15px,0);opacity:.3}to{-webkit-transform:translate3d(0,0,0);opacity:1}}@keyframes layui-upbit{from{transform:translate3d(0,15px,0);opacity:.3}to{transform:translate3d(0,0,0);opacity:1}}.layui-anim-upbit{-webkit-animation-name:layui-upbit;animation-name:layui-upbit}@keyframes layui-down{0%{opacity:.3;transform:translate3d(0,-100%,0)}100%{opacity:1;transform:translate3d(0,0,0)}}.layui-anim-down{animation-name:layui-down}@keyframes layui-downbit{0%{opacity:.3;transform:translate3d(0,-5px,0)}100%{opacity:1;transform:translate3d(0,0,0)}}.layui-anim-downbit{animation-name:layui-downbit}@-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}@keyframes layui-scalesmall{0%{opacity:.3;transform:scale(1.5)}100%{opacity:1;transform:scale(1)}}.layui-anim-scalesmall{animation-name:layui-scalesmall}@keyframes layui-scalesmall-spring{0%{opacity:.3;transform:scale(1.5)}80%{opacity:.8;transform:scale(.9)}100%{opacity:1;transform:scale(1)}}.layui-anim-scalesmall-spring{animation-name:layui-scalesmall-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/src/main/resources/static/css/login_styles.css b/src/main/resources/static/css/login_styles.css
new file mode 100644
index 0000000..d67f38d
--- /dev/null
+++ b/src/main/resources/static/css/login_styles.css
@@ -0,0 +1,213 @@
+body{
+ margin:0;
+ /*color:#6a6f8c;
+ background: url(../img/bg4.jpg) no-repeat fixed center;*/
+ background-size: cover;
+ font:600 16px/18px 'Open Sans',sans-serif;
+}
+*,:after,:before{box-sizing:border-box}
+.clearfix:after,.clearfix:before{content:'';display:table}
+.clearfix:after{clear:both;display:block}
+a{color:inherit;text-decoration:none;}
+input, button {
+ outline: none;
+ border: none;
+}
+.login-wrap{
+ width:100%;
+ margin:auto;
+ max-width:525px;
+ min-height:670px;
+ position:relative;
+ border-radius: 20px;
+ background:url(../img/bg2.jpg) no-repeat center;
+ box-shadow:0 12px 15px 0 rgba(0,0,0,.24),0 17px 50px 0 rgba(0,0,0,.19);
+}
+.login-html{
+ width:100%;
+ height:100%;
+ position:absolute;
+ padding:90px 70px 50px 70px;
+ border-radius: 20px;
+ background:rgba(192,192,192,0.65);
+}
+.in-center{
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ -webkit-transform: translate(-50%, -50%);
+ -moz-transform: translate(-50%, -50%);
+ -ms-transform: translate(-50%, -50%);
+ -o-transform: translate(-50%, -50%);
+ transform: translate(-50%, -50%);
+}
+
+.login-html .sign-in-htm,
+.login-html .sign-up-htm{
+ top:0;
+ left:0;
+ right:0;
+ bottom:0;
+ position:absolute;
+ -webkit-transform:rotateY(180deg);
+ transform:rotateY(180deg);
+ -webkit-backface-visibility:hidden;
+ backface-visibility:hidden;
+ -webkit-transition:all .4s linear;
+ transition:all .4s linear;
+}
+.login-html .sign-in,
+.login-html .sign-up,
+.login-form .group .check{
+ display:none;
+}
+.login-html .tab,
+.login-form .group .label,
+.login-form .group .button{
+ text-transform:uppercase;
+}
+.login-html .tab{
+ font-size:22px;
+ margin-right:15px;
+ padding-bottom:5px;
+ margin:0 15px 10px 0;
+ display:inline-block;
+ border-bottom:2px solid transparent;
+}
+.login-html .sign-in:checked + .tab{
+ color: #469c7e;
+ border-color: #469c7e;
+}
+.login-html .sign-up:checked + .tab{
+ color: #d76466;
+ border-color: #d76466;
+}
+.login-form{
+ min-height:345px;
+ position:relative;
+ -webkit-perspective:1000px;
+ perspective:1000px;
+ -webkit-transform-style:preserve-3d;
+ transform-style:preserve-3d;
+}
+.login-form .group{
+ margin-bottom:15px;
+}
+.login-form .group .label{
+ width:100%;
+ color: #012957;
+ display:block;
+ font-size:13px;
+}
+.login-form .group .input{
+ width:100%;
+ color:black;
+ display:block;
+}
+.login-form .group .button,
+.login-form .group .reg_button{
+ width:100%;
+ color:#fff;
+ display:block;
+}
+.login-form .group .input,
+.login-form .group .button,
+.login-form .group .reg_button{
+ border:none;
+ padding:15px 20px;
+ border-radius:25px;
+ background:rgba(255,255,255,.1);
+}
+.login-form .group input[data-type="password"]{
+ text-security:circle;
+ -webkit-text-security:circle;
+}
+
+.login-form .group .reg_button{
+ background: #d76466;
+}
+.login-form .group .button{
+ background: #469c7e;
+}
+.login-form .group label .icon{
+ width:15px;
+ height:15px;
+ border-radius:2px;
+ position:relative;
+ display:inline-block;
+ background:rgba(255,255,255,.1);
+}
+.login-form .group label .icon:before,
+.login-form .group label .icon:after{
+ content:'';
+ width:10px;
+ height:2px;
+ background:#fff;
+ position:absolute;
+ -webkit-transition:all .2s ease-in-out 0s;
+ transition:all .2s ease-in-out 0s;
+}
+.login-form .group label .icon:before{
+ left:3px;
+ width:5px;
+ bottom:6px;
+ -webkit-transform:scale(0) rotate(0);
+ -ms-transform:scale(0) rotate(0);
+ transform:scale(0) rotate(0);
+}
+.login-form .group label .icon:after{
+ top:6px;
+ right:0;
+ -webkit-transform:scale(0) rotate(0);
+ -ms-transform:scale(0) rotate(0);
+ transform:scale(0) rotate(0);
+}
+.login-form .group .check:checked + label{
+ color:#fff;
+}
+.login-form .group .check:checked + label .icon{
+ background:#1161ee;
+}
+.login-form .group .check:checked + label .icon:before{
+ -webkit-transform:scale(1) rotate(45deg);
+ -ms-transform:scale(1) rotate(45deg);
+ transform:scale(1) rotate(45deg);
+}
+.login-form .group .check:checked + label .icon:after{
+ -webkit-transform:scale(1) rotate(-45deg);
+ -ms-transform:scale(1) rotate(-45deg);
+ transform:scale(1) rotate(-45deg);
+}
+.login-html .sign-in:checked + .tab + .sign-up + .tab + .login-form .sign-in-htm{
+ -webkit-transform:rotate(0);
+ -ms-transform:rotate(0);
+ transform:rotate(0);
+}
+.login-html .sign-up:checked + .tab + .login-form .sign-up-htm{
+ -webkit-transform:rotate(0);
+ -ms-transform:rotate(0);
+ transform:rotate(0);
+}
+.reg-hr{
+ height:2px;
+ margin:60px 0 50px 0;
+ /*background:rgba(0,0,0,0.5);*/
+ background: #cfb8b5;
+}
+.hr{
+ height:2px;
+ margin:60px 0 50px 0;
+ /*background:rgba(0,0,0,0.5);*/
+ background: #8dc4b2;
+}
+.foot-lnk{
+ text-align:center;
+}
+.select{
+ border-radius:30px;
+}
+ .login-form .sign-up-htm .radio .radio1:checked + .stu-radio,
+ .login-form .sign-up-htm .radio .radio2:checked + .tch-radio{
+ color: #d76466;
+ font-size:20px;
+}
diff --git a/src/main/resources/static/css/menu.css b/src/main/resources/static/css/menu.css
new file mode 100644
index 0000000..f1d6255
--- /dev/null
+++ b/src/main/resources/static/css/menu.css
@@ -0,0 +1,118 @@
+.top{
+ height: 40px;
+ text-align: right;
+ line-height: 40px;
+ background: linear-gradient(to right, rgb(44, 62, 80), rgb(166, 120, 136), rgb(196, 90, 84));
+ border-bottom: 2px solid #fff;
+ color: #fff;
+ padding-right: 38px;
+}
+.top_left{
+ float: left;
+ line-height: 120px;
+
+}
+.top_left img{
+ width: 300px;
+ height: 100px;
+}
+.top_right{
+ float: right;
+ height: 40px;
+ position: relative;
+}
+.top_right>div{
+ position: absolute;
+ top: 0;
+ right: 0;
+
+}
+.top_right ul{
+ margin-top: 8px;
+}
+.top_right ul a li{
+ margin-top: 3px;
+ border-right: 0px solid #fefefe;
+ width: 75px;
+ height: 13px;
+ font-size: 15px;
+ font-weight: bold;
+ color: #ffffff;
+
+}
+.top_right ul a{
+ float: left;
+ line-height: 13px;
+ text-decoration:none
+
+}
+.top_right ul a li:hover{
+ color: #ffffff;
+}
+.top_right ul a:last-child li{/*去掉最后的边框*/
+ border: none;
+}
+.show_list{
+ position: relative;
+}
+.show_list .move_list{
+ display: none;
+ z-index: 103;
+ top: 56px;
+ left: 0;
+ width: 100%;
+ background: #9d7484;
+ text-align: center;
+ border-radius: 10px;
+ cursor:pointer;
+}
+.show_list .move_list li{
+ padding: 10px 0;
+ width: auto;
+ height: auto;
+ color: #fff;
+}
+.top_right ul a .show_list{
+ padding-bottom: 20px;
+ border-right: none;
+}
+.show_list:hover .move_list{
+ display: block;
+}
+.top_right ul a:nth-child(3){
+ border-left: 1px solid #000;
+}
+.show_list .move_list li:hover{
+ color: white;
+ background: #685b6c;
+ border-radius: 10px;
+}
+
+em,i {
+ font-style: normal
+}
+li {
+ list-style: none
+}
+a{
+ font: 14px/24px Microsoft YaHei,Arial,\\5B8B\4F53,Arial Narrow;
+ letter-spacing: 1.2px;
+ color: #ffffff;
+ text-decoration: none
+}
+a:hover {
+ color: #ffffff;
+}
+
+img {
+ border: 0;
+ vertical-align: middle
+}
+input{
+ outline: none;
+}
+button {
+ cursor: pointer;
+ border:none;
+ outline: none;
+}
\ No newline at end of file
diff --git a/src/main/resources/static/css/normalize.css b/src/main/resources/static/css/normalize.css
new file mode 100644
index 0000000..77feb20
--- /dev/null
+++ b/src/main/resources/static/css/normalize.css
@@ -0,0 +1 @@
+article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block;}audio,canvas,video{display:inline-block;}audio:not([controls]){display:none;height:0;}[hidden]{display:none;}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;}body{margin:0;}a:focus{outline:thin dotted;}a:active,a:hover{outline:0;}h1{font-size:2em;margin:0.67em 0;}abbr[title]{border-bottom:1px dotted;}b,strong{font-weight:bold;}dfn{font-style:italic;}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0;}mark{background:#ff0;color:#000;}code,kbd,pre,samp{font-family:monospace,serif;font-size:1em;}pre{white-space:pre-wrap;}q{quotes:"\201C" "\201D" "\2018" "\2019";}small{font-size:80%;}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline;}sup{top:-0.5em;}sub{bottom:-0.25em;}img{border:0;}svg:not(:root){overflow:hidden;}figure{margin:0;}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em;}legend{border:0;padding:0;}button,input,select,textarea{font-family:inherit;font-size:100%;margin:0;}button,input{line-height:normal;}button,select{text-transform:none;}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer;}button[disabled],html input[disabled]{cursor:default;}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0;}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;}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0;}textarea{overflow:auto;vertical-align:top;}table{border-collapse:collapse;border-spacing:0;}
\ No newline at end of file
diff --git a/src/main/resources/static/css/response_left_bootstrap-vertical-menu.css b/src/main/resources/static/css/response_left_bootstrap-vertical-menu.css
new file mode 100644
index 0000000..9b5f0fb
--- /dev/null
+++ b/src/main/resources/static/css/response_left_bootstrap-vertical-menu.css
@@ -0,0 +1,146 @@
+.navbar-vertical-left {
+ position: fixed;
+ left: 0;
+ top: 0;
+ height: 100%;
+ width: 160px;
+ overflow: hidden;
+ border: none;
+ border-radius: 0px;
+ border-top-right-radius: 15px;
+ border-bottom-right-radius: 15px;
+ margin: 0;
+ z-index: 999;
+}
+
+.navbar-vertical-left ul.navbar-nav {
+ width: 100%;
+ height: 60%;
+ display: table;
+ margin: 0;
+}
+/*.navbar-vertical-left ul.active {*/
+/* background: #00adee;*/
+/*}*/
+
+.navbar-vertical-left ul.navbar-nav:before,
+.navbar-vertical-left ul.navbar-nav:after {
+ display: none;
+}
+
+
+.navbar-vertical-left ul.navbar-nav > li {
+ display: table-row;
+ float: none;
+}
+
+.navbar-vertical-left ul.navbar-nav > li > a {
+ display: table-cell;
+ vertical-align: middle;
+}
+
+.navbar-vertical-left ul.navbar-nav > li > a > i.fa {
+ margin-right: 20px;
+}
+
+/* Colors */
+
+.navbar-vertical-left {
+ background: -webkit-linear-gradient(to bottom, rgb(44, 62, 80) , rgb(76, 93, 119) , rgb(253, 116, 108)); /* Chrome 10-25, Safari 5.1-6 */
+ background: linear-gradient(to bottom, rgb(44, 62, 80), rgb(76, 93, 119), rgb(253, 116, 108)); /* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */
+
+ color: #ecf0f1;
+}
+
+.navbar-vertical-left ul.navbar-nav > li > a {
+ color: #ecf0f1;
+}
+
+.navbar-vertical-left ul.navbar-nav > li > a:hover,
+.navbar-vertical-left ul.navbar-nav > li > a:active {
+ background: #451440;
+}
+
+.navbar-vertical-left ul.navbar-nav > li > a.selected {
+ background: #d35400;
+}
+.navbar-vertical-left ul.navbar-nav li.active {
+ background: #60305b !important;
+}
+
+/* Animation */
+
+.navbar-vertical-left {
+ -webkit-transition: -webkit-transform .3s;
+ -moz-transition: -moz-transform .3s;
+ transition: transform .3s;
+
+ -webkit-transform: translateX(-100px);
+ -moz-transform: translateX(-100px);
+ transform: translateX(-100px);
+}
+.navbar-vertical-left:hover {
+ -webkit-transform: translateX(0px);
+ -moz-transform: translateX(0px);
+ transform: translateX(0px);
+}
+
+.navbar-vertical-left ul.navbar-nav {
+ -webkit-transition: -webkit-transform .3s;
+ -moz-transition: -moz-transform .3s;
+ transition: transform .3s;
+
+ -webkit-transform: translateX(100px);
+ -moz-transform: translateX(100px);
+ transform: translateX(100px);
+}
+
+.navbar-vertical-left:hover ul.navbar-nav {
+ -webkit-transform: translateX(0px);
+ -moz-transform: translateX(0px);
+ transform: translateX(0px);
+}
+
+/* Mobile */
+
+@media(max-width: 768px) {
+ .navbar-vertical-left {
+ position: fixed;
+ top: auto;
+ bottom: 0;
+ height: auto;
+ width: 100%;
+ border-top-right-radius: 0px;
+ border-bottom-right-radius: 0px;
+ }
+
+ .navbar-vertical-left,
+ .navbar-vertical-left ul.navbar-nav {
+ -webkit-transition: none;
+ -moz-transition: none;
+ transition: none;
+ -webkit-transform: none;
+ -moz-transform: none;
+ transform: none;
+ }
+
+ .navbar-vertical-left ul.navbar-nav > li {
+ display: table-cell;
+ }
+
+ .navbar-vertical-left ul.navbar-nav > li > a {
+ display: inline-block;
+ width: 100%;
+ text-align: center;
+ height: 50px;
+ line-height: 30px;
+ }
+
+ .navbar-vertical-left ul.navbar-nav > li > a > i.fa {
+ margin: 0;
+ }
+
+ .navbar-vertical-left ul.navbar-nav > li > a > span {
+ display: none;
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/static/css/select.css b/src/main/resources/static/css/select.css
new file mode 100644
index 0000000..907e0b7
--- /dev/null
+++ b/src/main/resources/static/css/select.css
@@ -0,0 +1,55 @@
+
+.select {
+ position: relative;
+ min-width: 100px;
+}
+.select svg {
+ position: absolute;
+ right: 12px;
+ top: calc(50% - 3px);
+ width: 10px;
+ height: 6px;
+ stroke-width: 2px;
+ stroke: #9098a9;
+ fill: none;
+ stroke-linecap: round;
+ stroke-linejoin: round;
+ pointer-events: none;
+}
+.select select {
+ -webkit-appearance: none;
+ padding: 7px 40px 7px 12px;
+ width: 100%;
+ border: 1px solid #e8eaed;
+ border-radius: 10px;
+ background: #fff;
+ box-shadow: 0 1px 3px -2px #9098a9;
+ cursor: pointer;
+ font-family: inherit;
+ font-size: 16px;
+ transition: all 150ms ease;
+}
+.select select:required:invalid {
+ color: #5a667f;
+}
+.select select option {
+ color: #223254;
+}
+.select select option[value=""][disabled] {
+ display: none;
+}
+.select select:focus {
+ outline: none;
+ border-color: #07f;
+ box-shadow: 0 0 0 2px rgba(0,119,255,0.2);
+}
+.select select:hover + svg {
+ stroke: #07f;
+}
+.sprites {
+ position: absolute;
+ width: 0;
+ height: 0;
+ pointer-events: none;
+ user-select: none;
+}
diff --git a/src/main/resources/static/css/table.css b/src/main/resources/static/css/table.css
new file mode 100644
index 0000000..6c618d3
--- /dev/null
+++ b/src/main/resources/static/css/table.css
@@ -0,0 +1,109 @@
+/* Table Styles */
+
+.table-wrapper{
+ margin: 10px 70px 70px;
+ box-shadow: 0px 35px 50px rgba( 0, 0, 0, 0.2 );
+ border-radius: 10px;
+}
+
+.fl-table {
+ border-radius: 5px;
+ font-size: 15px;
+ border: none;
+ border-collapse: collapse;
+ width: 100%;
+ max-width: 100%;
+ white-space: nowrap;
+ background-color: white;
+}
+
+.fl-table td, .fl-table th {
+ text-align: center;
+ padding: 8px;
+}
+
+.fl-table td {
+ border-right: 1px solid #f8f8f8;
+ font-size: 13px;
+}
+
+.fl-table thead th {
+ color: #ffffff;
+ background: #4FC3A1;
+}
+
+
+.fl-table thead th:nth-child(odd) {
+ color: #ffffff;
+ background: #324960;
+}
+
+.fl-table tr:nth-child(even) {
+ background: #F8F8F8;
+}
+
+/* Responsive */
+
+@media (max-width: 767px) {
+ .fl-table {
+ display: block;
+ width: 100%;
+ }
+ .table-wrapper:before{
+
+ display: block;
+ text-align: right;
+ font-size: 11px;
+ color: white;
+ padding: 0 0 10px;
+ }
+ .fl-table thead, .fl-table tbody, .fl-table thead th {
+ display: block;
+ }
+ .fl-table thead th:last-child{
+ border-bottom: none;
+ }
+ .fl-table thead {
+ float: left;
+ }
+ .fl-table tbody {
+ width: auto;
+ position: relative;
+ overflow-x: auto;
+ }
+ .fl-table td, .fl-table th {
+ padding: 20px .625em .625em .625em;
+ height: 60px;
+ vertical-align: middle;
+ box-sizing: border-box;
+ overflow-x: hidden;
+ overflow-y: auto;
+ width: 120px;
+ font-size: 13px;
+ text-overflow: ellipsis;
+ }
+ .fl-table thead th {
+ text-align: left;
+ border-bottom: 1px solid #f7f7f9;
+ }
+ .fl-table tbody tr {
+ display: table-cell;
+ }
+ .fl-table tbody tr:nth-child(odd) {
+ background: none;
+ }
+ .fl-table tr:nth-child(even) {
+ background: transparent;
+ }
+ .fl-table tr td:nth-child(odd) {
+ background: #F8F8F8;
+ border-right: 1px solid #E6E4E4;
+ }
+ .fl-table tr td:nth-child(even) {
+ border-right: 1px solid #E6E4E4;
+ }
+ .fl-table tbody td {
+ display: block;
+ text-align: center;
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/static/file/visitorCount.txt b/src/main/resources/static/file/visitorCount.txt
new file mode 100644
index 0000000..8306ec1
--- /dev/null
+++ b/src/main/resources/static/file/visitorCount.txt
@@ -0,0 +1 @@
+130
\ No newline at end of file
diff --git a/src/main/resources/static/img/Cg-4V1Ru3xyIUuk_AApbUMYf0AEAARnLAI7jKEAClto863.jpg b/src/main/resources/static/img/Cg-4V1Ru3xyIUuk_AApbUMYf0AEAARnLAI7jKEAClto863.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..858e70c9c5f69fc7d6bbd9cd9aed1f575a369caa
GIT binary patch
literal 532152
zcmb6AbyOQ)^#2P7f)t7r2o#4xC{A&A4-|JT1&S7TC{~IE2|-J62*tIyQ(QukAjOIm
zmr}G);NkQA-Df?&=eO=3_nw)xvsTW`IcJhtGyApQdp|5ZtO1^>DMOS27#J7;)yEC+
zumn&505LKD+aDX&3grNV|?V$%i@&rp1Hw=iu1i&Q00Fq!l
z^aJPt008deYB3%^|F4FD`M5?L+$VVWkNvNo0WdLuKul~*EG!@{5CfC=u^WIzf=&7Y
zhYy#GNlxdj#}g2LI61RCT(_VOj{+=U-8<#E{#)VW>2sE3LA^psMVorBh;J{29!I0a
z0AK?D|7Lp}4C8-hd+Ze_0bpWcU_EY+zY+!(=HtRJ0YDNg(iePk*knvPZ$bPX%;5#{
z@VZ`d9D%9dy6fOm3I!Hx&xb_-0q}8X5+Dgc25{yEWr#f??|`(bvd+Cxtc$#2$%RTL
z8J}i^q8|XiE~_%uz48O&O2s#p4A3XXCv;ikDQ6-?ePUD-LBBbEs{Jls-9O`|mt+3;
zS!zV)z!Ld8=*wZ7@*)W}$4+*0V*qmq0(v7J@0k=Xn
zc(O6^YOB4b&s=WvQ&-nX)r#~tzhO>r^oq9+-S(wo{18|wRip!a!3P`lA
z&K^YXBtBLmuGde;cTQhC(}42*W~Kh)=U{!cw5${iZ8b0c`>OX9(F1@u#mQyTl*!S^
zG!w_uKA;l_=E$&Vl#`0&SX?Wv{ba@2wEl9Lj{)$~QL{<)rs=yf#O*=XM}G|sDk=&);JpA{bHG`iFK>hj|St(1=c
zCS!m6Vj1U}hYZ{A8Fvwi+Dv!G5(fyWXt_>zT4AG3D+3#V@VP90zTm=j+>jWk>U)
zvklyai$Os#cig1Iuib`smKhd1u4djGsqS+NlpG#b2Xai`{J}Oxth4Zjq{x*woTmJ&+jXpp8McM+pem7m*DjP
z=*xhm(@S6bIilzIXlTOjHCD1{vjRMlqc3+3mHen!%*L?6z(L;Ny{582HPPN@0!IsU
z_D}zDUzf?m9H?YSjGn@t@e
zh~=ffap5uMWzYuGznA|rK}OTyN2EQ<*CZ{le|uRaQz|R=(a{Et9-|g~7yP|@Xs+JF
zSv=m45UWXflIv4IGB3x${fh`A_{yieS$@L4>DCkD8jACf{JB6GW6jJQu8SYsw(1hG
z+WbglAcQ<2MlM3NB>eLeR0#2v~u5gNcS9qKB}@7+3FnR@4vd+^A*m=9*tMQ
zPa^fotc*q$Xiije&+*Os1M25Re=6Toi`jrxyd%1;6nbS>fkx=&9y@1LJ}zK`ir
zAqcML7q}=p{?QDu9lb>7l}%TXjWx&9?l??1?vI~qY&Y{{yl=bv_`}IgNB~K^tq4mr
zcms525GDVD>o;^{Ver26r4=*oGaiBL$pB%3Et}+TknQRhS3w
zYxxx_3q^mnpcXN5Ej&u_D4de4`K9wvP+*3>{6qj7%@$9~Kp?zDVC2Td_WNoV!7B
zzg6ki{2EIT_eYjKuhDUyaFxk@e&7Op3GFon@K>!gd
zDC2#@x0Cr|1x7sh|E+^1%Ax7bVR%GPc-Hnh4KMf}O%c10Z`bQ8f&ZGw);x_Pgb=f3
z;)ln~Vi>JXu0!h=Io@3zAc_v6ts?@~nXEX8Wp<-KjgZsB72L+VDwM=0EaF!Hu|?9e
zJpf`E2Pi={Q1R9mE=2|M)vEtp)c<2+i~?U3PphGm>D}34QB+5YI8G42ky;@Tgsq8;
zmXE|wmiylgiD(&^vXCjtADJ;=6hA`DphkJ4YiRX@@i)6!y~Hf$li?J~C~Ojt^J@HM
zVL!Z8pkd>aEgZ#>p!9@Po+(+AFE0eWPOGo}ncfyZnX;<|rOcu%JCY1h9%0@{4bn3_
z{R?UKcprrDMhLx6w2gTm-ZPSKmgp~NQp~nu5W&F`q|F7=y+m^>qiS4`F&bc+L6Lzz
z;=26cQBl&NZE;r{6HI%8;5scUG!3B;Hrf6Y2W-B|7l>uZ>QwCW%p
zip?+oTXraE5h*fpU+1#)m~RycOgtY+dMS5^bg@N~FT6$?+&&SY``+{8vP@ESr61Fu@I;r*QVl+Zl(}S3#Awn
zws70#fMw3SU&QbKgj_HQl2lLfVzUMBwQlp4xx`;z>Y%v7GQGAbyyyfM6WO!WH+|z3
z`Bh+!IP9APhHINl#v}tpQe{sdtWZNQ1h2bTM4}ZC`uKl0l86>&V9@FYqc8`KcJX|SLE2aS9ZEW+DsL5D
zMmf=g`+=g{G0!yF_VAy)RcGbz_rlC__yZ|UfkHkIAgYV|t;3j-C~H{-H>ynX+BcDY7gBK*e#s*KRB^
z1EOn@N7_lY&=ch+K-^BOLpGR~0T@E%uHt0Krb7meQnhd7t)p9tvj=_2(NFS1n8KXs
zso&_Zcr7M8r$rb7P~avaJ|lD~Tv3y4fP|_%A;LYMk{X!EMh0_ARw%Rsc0L17+pT*U
zEVpV^`$Wafq*r;A?Wd<}S75)~c&7>Jq0PQxN+c?o;n_B}?g$(2sUPTYbC>Elc8Vzb
zC$x88+ZGk9r`FVgpjd@*$=1qk)sZ$u;_qedNXnf9eDAK`@d3^i2PXFDFRm56_2+O5*ro
zq#$e7n0>9^HZ${&ybA7ZYLR7T@cah>*m8=AC!@1ZQJLBd?a`x*1@MU%Q
zu|1t!3pM0U9~ZY1xU4<)OvgT3XIhIE9S!sY>EnI(g7U}==yiefBpNuu=?d%?kFHJ#
ze4K0C{g*{jn81yuKwj0`8)+Lq>fzuwI8D@1E#i6_DY`joefY|1`hW6fPSi$_3tU|X-wa33bYbn(=9UDbPmX5zMa+_jod-b7&wj1MXZtC;QVL(3
z=xI&0QvOnII25N5Uw@Hoc>qky))dh{yJtF|sMzBRLQcG_k46c+{=3vAjZa+Tv@UZb
zxPP2`Kn!d%Fe$Vw{P$19cd}JS(t}?#iDa3;<$iXCVz+bgV1ZvWJLBrNmb|~wmj?jp
zD(iV-I6b`h!sS<29@T2;me}wP4Xgt9r)cGzbQ9
z8Mud%v53?LBe%2y&b##>RU@H0dwz%y6yu~+$59kpTM^9+z`Q#0{HE!d(x$~6%N^wu
z-%vicW-o$}JZm;?Zq=A8=J0GiH{})IbUhr66J}mWeyGUdd|&d$~Cf_OD3zZs>8m;$lqwLqm1mq%zlOR_GrQRI*Ib?#NSw*Ju+9A~Edi
z|M3(55}WyZDa9dY8=}pyLwD)*Hgz>&%5e5Uj}$|Rpca95)Lss?6#eQSKFP~oDm$`g
z7-tcrA9?^-c5Q>1=u1yIZlq@sikK+>m@RZ4*ywpe-c3xn(Us#8Fm2&e>F*J|lWCU%
zS+r@t{8Sfg)Z!6f(-
z-CErcPAjg#k8cXx)0|6n7o0qY&~;5}ovy;~
ziR3>nDPx?#&D<#kl6@ZlkcxeFLpQ
z|AR~hdYLp#zY>!0Z!{aub>KD`LYx+0WV3DYXa)YpeRD4uxYWl}yDy!)*Ok@WQ3nSt
ztgNVRsc;778os$N0bAJ;i6QUl1I;SL`^tF&o6B6QeYidUHfse)kX}orDFY1XM_T|G
zrb$lp-R|*tZ%Qzr4Obd-t#qg{L96vd6~VhMWMAGi2eGDi-3FPIP5kK29A@Ib85Q%HPp5J7P(gcq`nO4MB=udK)e*B0D$LrO8tuIs?16^G
z4lSYXTsY4{=ES8H#v+E)aIu?@JMl6j2JZWF!kiAC@_)Rz_{R1OPPN99zQB_+lLek;
zM%5UVr8EMql0=N_;@vuDFzTP;BKG%uv#)f0_m!7-6*KczH`(f((yzNPMdux~r6U^g
zn2h29qUChbe^0>Kq8w9ddRW#q8{0x96;CO+Q>=#htM@TTSSdjj&Mh{<$PMMoza>Jl
zx<8gSJKa|!PscR(-ROl@KPC$QyN6q6xV#wA>x3o|yYdpBn4h_h4aoY9&zsUXb6-e|
z)+TxMT!ZR*de(xm6;;-vHbJ#=bO&$UTJv1N@p%XUEW|N9ekMjm2E?q63=^cXf|AOC3B1w=si|bi&pI+C`0a{sdc-
zidMB!k!AV|ZN8S~b{GqAD{@-Yhc3N~)2sJa%ZpFKxP|U!WPF?8K1qsb&+R+Wh*NI*
zEa}O>=m!&GQY2H9)985sXvnru;yiU>W%MAT(zP{GUanf0*=&@ZQBc7wQcfzrOpw6O
zYWXlDH;ltIaD?S4pdlW}E6co*Uc#jTs?;Wn-_prJ+SADnzE)(!bO#L4>J?uOKX;X@
z_Uz)`O}b7XR)GXDoR+y*o-z_g@m08dzmjU7`y+o?kaTrf*|?v)o|;(yvLO5_lI??n+lt~O-c^MAOYKsFnnvFFjtb+ALg
zVO9bvv_UF!NciagFaq;xVw8Zcs#)o7%*Myd!i>+}Y}yqW*v~Jh#b50UvCtPx7RVz@
z|4+A?8bk*^1qI-2eEaRqSJ7c=tyX_>B?0J7|;%61M~t);kt&5
zbfvr6W%&Pt1dqcDEXLg=(5cc}6NTQEvH=j5Y}Uw*Z^H%cP@K$Ui1
z#$1+x0`SjWUN8FgYhDsCh}zB`#5Lx^?Kw?$>v
ziy&auugQSB0o8_AzhDA1cc+Uv0|dJAZ?95#*bpipe!xiS(@K*L)U(!@wkwNGCg_;6
zJg^DeE2WMh4=2Mp^kg50LHS^$1w`jGot#j05@@p8?H#|wK@1qaO|S45TKY>)#+*K6
zuo9a^=15(t6hzbyCul`t84LqE#o4ZlHuUr7gxZ%lOJ6ijyVhLQ5^|8MP6j1IM(!fb
z`v>M(8Qh>c41&(9>7XbsE%&d3jI?%XM@n!7_l+2LJ`R=0YP>&tg%aLo
z)jJB?c}o9-T~xWei1L!N&af!=z*EJAXXfnDSEiJ^y#8L~gpiiGF-1Nl%UcjIjLq;k
zSvt_DjERGXNvD3UW`=*}te_uqoM7jK4i3K0v`ze9LpG
zT~TIiWew^?u?kLj?2AOS#)%rTxzl9d{FMhJ>4u06oxMpLq#H9_eBEEf8~7{3)G08Z
z!Za-^p}0g03X~eVKiPY;Kz~tNYhpMjgwPWD7T?8}a;6(IKyd*~fpyx~Xf&bOK*Dxpnu7}*pXkaU@_l3x@ZphU)E4Apcy8N7}_Ct+ky+x^mo1CJAa@4LlrWY;0`(ZK!H8@3&OtCy!49Oh7p;?Z{{J
zuWxx=VXHr=K%YO%40dE9%dwIY(n?G5XJtDghtji
zQP8FkD+uG3h4l;n?XRlQ#eZ1>yQ%^iuyEdIq18`tsN{Ln!5e3KEA_Lbsor=a`3|9(j3|;5S=#tSv|R0V}%%bYlfQCe9+^~;dHAd#Z3j4{ib#_?E%h)xDN|hfBYObv;rV}CSmn=L&
zA&OMLas1Zq$i0~PQ6kBU`4iyI@t4w&lS^8&ExvBlm4ri6>9*!;KL%ZyKz0Tou#*+O
zymO%4p90}KKZGr8hcB}YCp}qf33y5J_d_T&6YXX>v63sAyCJtIdd+$ziH`^iA3?Dc
zjl9grK6_gBDMRNVbB7xzr^rn1h;CrKhV`V;!!&{JWUJ8-&6G%WH%GzM-6ShyOCENF
z5-&+~7N68h98)%`{5bdl8Uvs=KvM
z?&T`WOmr2h%ox6j3CRgoFY_5{m=fgtM1hd1nv4mkTVFKsRNe>91bw-5s4{FZ1bn8L^h5hlNuB8W~_H@~4>>Bhj3M3Me`le6T}!bli*<
z;a_#~BU@e3*mrcLZO8aYn=9jV6JFqNu_5lgT8yjZXm2>#R#mJXxAzVztSY_-;Sp!h
zuHD?Ixtjx%#=1%G_5>SkN29UEW>}CI7A?lDUyarE`aSB+vp{=D3%bpaM*7RMU#qLA
z(dGKvBjp~ibDY+bHMg2yzf%Ue-;^{CgQwkup4v72@B*rMrm#vIjXu}@xdc7O)h=uj
z9RZe&l85!-1Vx>cTJPP7RX5@pK@ulc2z%14D3(9b^ob5jXkkG|90J`;e0EG7R+-MP
z^cG)5tL7RE=6SFsxIV{vt^`Q#Pf}SrFqMW{<{e0vy9k)o$2&e>n&QgzprDbkaSIDc
zi?9qk(CQ0~4b0Ot-!odQ`P7!MkfJ!3PbfM=ukZk1(iT(FOPi4CvwXqMV)-wWtn2u>
zQ$P-D|I%^yRG_JpUtvQ9VF1^!2LKG}$bd5LGEiy$-f80RIPWrVK~{30XI7OnFtN_X
zmnSb?r(1Ld+JQWB(R2pSWI2i;H}eH+x?A4;jpB1*x1bj@-u*MyZJ%2jo0%Qpcbc-7
zBU>AFB28rB
z1J&z)KVwoo3)Ngt`@UM~BE*<7h#EE;!Ci5vXsmGe;usCLR6O=;CfT2J7;WWg?WL8^NvwwV{XqEP4$b3u#CWVw{dadbQ+}*a@Dcj8
zT2f_>vAwd=we68NEtRIyLs{eJa}woi^qeJ^aY$@f=e{8kKFM`%*AJn58wN1NMwiN&
zy)w6R^`yLw+txncS%)dlQge11qF%ND*xkh>gXSIg@(8_i5#dZND9u)bD-rI`@V<}8xvREbe1xe1pd&H8v7IS79VWUwVi3Qy(iH~J0MQQpU
z(-DzZSYu79ODpEIw6MUI>6;R*c7$_K&_Pf|%mcvOLzTwuCtcZ>oL68@_ptu8iVCk5
z`n5S4xqp)WZzglp0%65%zT7~gq_65PGbQ23{_GTRP!oNKl7mHma#c7+ttKVCy{dDR
z?@Ac)%tn>qUVmE#LZozdGcDOvC37Sfwzl1Jer;lsiyapltQ@As1w
z^MO$HtdP(9ghD#@ai4#?=Qjnz2ZU~>e{3jjTLOMO28Go^h&S^>XXdR<-Wlj-SUBS3OoPBnV3S{M
zBs}qaH*fm+M)^sjYQvIBON&cV$-WzuLOhi^m6N;uB>vK=JHVjHbsMiT*S6W$m$|l#
zZ}>TY0PXH@b#&;Md6TMavw7h$z)5cQuDojbI9H=zDfCVdTmLS>m@}$Ed08|r?omS2
zkA}_UJ^<7b5CL|>I|$D_lJ|V*GuQ^}?}}H@V2whb4E2MZ;=p;Ol;GmOapSQW(xqEE
zH>v-OTy`tCO^4*0B1~GETe?-h4PW+lG%+u`0v-TqZ^oXb`QL`?aJl3zvZ^GFLRdX+
zrAcWsP(Skb
zj68K`Ker^FpibB7ngBNUt-Va+JG9gD*IBFL<*2F#&152389^TlQx&i$9x!24
zF|=Z69fDVkikOa
zpiNh*Ga7cLh=HOi25>;0$WwKe5E}T(VTH+bj8{dh
z2#(el+ffds+S{u6UMdh=sDXJ>?7+)ZStL4{&9{-nXa>tjRV6!Yjl@Br82m{C_Xd
zJW|ut6xV;(mZ-|6V;2h>fH0Nn>Yt+MoghS!Tq%2gNoEIFk
zvpfkD3_wv1@Ti&$frKZS(iCxQBbA!cRKeSEn5u0cOSHGH9Arf~NdM74%cehXwkiUT
z(6hcQ{OLsEczGm3$zF!F`p~tGm@KuT+&RCW1Gb`*?5p>^R=#U*yly7+lyrmE5v0;+6u$8%PNXSHx
zW~oa5J72&MF6=vR9O>K{KXAHLYMwq;Y=Qt!zw
z0l6y1m&E7U`t%$V)(z6f4U7nneZjY+NW+}ysL9Xk_>{WDRVJ{Esk;G#(1rk4S_OaM7lFBMb-}tlYn$}v9cM~sSH*Qb=`WeJciAr_PCWvu_67PY
zsa!sFnX4x*^9bB-H;TJv5q@-u#dH;W)T=VTvUai?k$;k6MolakF<
zExtr@WilFRvhtZvkqwZEFehGE{IjE~-foP%8pGdKILy74F*Qi%wgHa;GDXg4eV2pQ
zXs0T(u57LBBeJ)Q*yqG?%Nx5IzoOq%x>YsM1YmXdx~#>LEMwyA$*$`A^-9mq99jG5
zGIV-X%yyR0JRv#JmX$V1Zue4Y2Pt59$hYzFlC)JcI@454!k1QQM6W^xE8k|$uaO4J
z1lF4hK)=vL&2aJyRkfKa)(!H;E$9s;vBhjcpTd{7OWA;!3QxXO$}z(=T~Od*Tu@=K
zknxZ%@UzL%MIr0U^0q9q47usz_GqoPSr)As7dz1K1Hh%9_^k3oWI;`}cw&ec$
zcEVSB0^2WtzZq*~2O<3^FmzQM(V|bqMKEBjW{|P^giQL1+1Cm8GJqFoIAEP{)->X+kWB8!m)8`PrEwtD}q($Z_nf_>jY0U_p^RuQMLv+Rr1^O9=GITC*wZGpV
z4!C{U)#+NG_=T72F7fpN@F{m;hvAoboY04(DhML@<55cg)m-s>;LFTX?nu;Kn}rC|
z%S?m1vyaXb4*)0~XCHmZ%=&)j`GMJL-E>KU_mT35pE($LWZhe27zP&N90b`Ix0<4Gvgl0YfPQ8?-eR3oe_v5(5iSkIs_}Xo)
zB`+?RTgA3)FzZa-UB1BDc(1|n0#__u*g{1(H+?Z1BR;*FMM6KhIAB7?Y5(T?hJ?wy
z_eiB%nF9)WHr6PG=ZNn
z`*Kz{YP?|#=d0=aIWk`wxecGAt2fV>8gyS*X7-2z!>`z=02VE<;1J8kpTK>^5#IeF+mu=Os5d(
zqS7s&9#3|Lq22ip%Vl0w8}OP$>4h*~
zHbIb=#ZZrh=L0~0^5|VxW^qf_->(v(W+LDRz=t_(v-z#Du(yY=H@r_stA%KC)6ry_
z);!~{-@ZLuVCu5)7TLfZcucA*Id#E(?XSz;NcGA!L$~qF;+M_7#O>J|D{r$WFAYdJ
znlvG99;XJKL2JZv*9kUUflU!kGcMn^b$r!I9{q{xrWDQc%3~4xI{qbp{AaPhh%vhv
zYOkZq9NSp6y-|air4x!;UNjMSHpfyux2Kl9i8{3|hsr8qHF=h={2|k!(U!#@U3~0e
zB|9y~1Is3>B%kRw^I!|qR}7j?O(J(PUzYb$xF_-ipZwOMIabjXwF+s>ZuCb5U`nA+
zV~Zip^kOBt7L7)rwV;{8HL{=ocCoX2IAeppER%@Sdz|UE<^ERrqU!&)_VmnT%CXE+
z5?3>QPSEh)Yl5=tXXFso4MMtDg!nC&;=86(l=MN~d1cG-3l789*MHS({AcDvqZs-b
z^er3_@y*mkMHN|N?W79a<3TL|_^wL_aLCnpw>kU`lpcEeQz^=YK`%jw?^#fSxXM!x
z*Wfr$c3ZUeTJ0
zZl0Vuj}ZcKviD&ylvP&cS$*#s6aIy*R?93&Z91wH!0=n>8itnC-`i^oEpr_h(si7|
zU1sEqwVn|9%7DK6nkZIdgeNAwu#wragJZV^mDB3YK9v
z@c9;|Hg2n>)__cG8&UoM_A<6^~wq9=-L~l0{ivIjWPXt-ViFQOTI4!0Z+q->hDt4by
z9XsUL1OUUZeVvtUFt-R-*L09?0|p%fdWXsN=Qwf5=duEzgZ>5041&Z=VOV}b6--Rr
zp{m8u_rf@Q$_%WOMYzwNK<|rQPb}%?d>72H=%Xy{f%nJtCUNoDI8x$FNT*pLNmZ+L
z&=f0XcGu@jGt8s^qHNO;bsg|)p
zd6v&r+0Og*M{GOSC(C;82&f~NW;13aA$vzQ1{oUlvz65+>omnpAJ=V@dHu1&SZPmD
zVxe%y)QnxMUV%
zu4t`cJ|tq>m0!e?|2q$YP4FLY@+o(s$cbicA~<*=Sv`t%cKFvG#X0l;=nt8so$n9I
z84@z-hwHPYZpWV*EhlLgZbu8T*wNuX@~aSd{J-o(9(+pFW2)mPmH#rqj+7I^aX3wQNoKI^Q8wW?6*(i}R7RC{Fl!*nABYg#-aE=!asxAn#4PSlZUg~{aj
zk~;Kk;E$<9*urL@ptA*iEGnj06hMiQkF|*{Zc}U{=5!psg2q4@*OT7Z)%zz()U?Obt|S&tOzp_LnDGH@^M8U|8LAEhus7^(vc_Gx+YOqDo%_$Wz&_uo3c3FwC
zYy8hGYn6UDnO#%C1$@*~d|^Yjd1
zTY9VnhH2;X;|jiBxI|fkp&)xK-KRF79~mjb$pE?QVxqw$_@@c>kXa{9Pup0WbRtI>S3r28I(~q^kaK_1Ff#Gn
zcFG|4oszDqm|#F5w>Ak6co>NN{bf9YMLXase-+IyOZ+nKG20U3dOJRTGIDqvPAKTn
zV(4DE5-y1_IeIOXt>w;YOURT+d8-2{H8UHngGhReuE4W#WZo*YSRH4?axO-aW<#;y
z2zKq=I*1|b5~wXA6YSjX<=GBwu#rq%n@pUw*~0&jtt~cuGi}<)3YN#AV8a+G9R6F-
zTLC;amkf4nnVMaw8_gX%)wBxzt^Hl-olz^}36!!>ax+`|QA>JF^-YI>^Br8V76!I!WcTy(keF_
z5=lKI&ua3-xTQzmU@+2XG04a)Op1&}@+&EDph(;3MwR729ot3Aqb~DoSy?90yI?0)@jaPyLG
zUw4?+%3emtnCHuH=aRs#zit;aS_0bU0aY7>uN%F6f;$o?at@A=dXu(9haw`;gvHp
zd5GX9%nlXkcac94AvR>tjA>`3&*lH(W*QM3EP{}=~}GDpN0^uOqZzdy_s
z;ri2&7x-D$l;k%XS#n4!W^F_)9{3wBkp4U;%u8)BAb)7)?6QpKSr3vjY1qt_@&RDL
zM)!m6bC3=^LRXcYqvd6q!UCFKPNDOK=S~;9;(Ay?GCdnLC_1=n77Xu4W)o@PG~2!N
z5q+!nr)N7a-d6XLVr`Ht=4ZN!mjd`!FWJ2z{Po~eEXIFe)Ne@z(7<{Xnbw2HZ
z;($;;0kxh#-a^pg<~`≦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