高校学生考勤系统

This commit is contained in:
雷宇 2025-12-09 17:36:07 +08:00
commit f1a38769f0
212 changed files with 20149 additions and 0 deletions

8
.idea/.gitignore vendored Normal file
View File

@ -0,0 +1,8 @@
# 默认忽略的文件
/shelf/
/workspace.xml
# 数据源本地存储已忽略文件
/../../../../../../:\Users\LI\Desktop\项目\.idea/dataSources/
/dataSources.local.xml
# 基于编辑器的 HTTP 客户端请求
/httpRequests/

18
.idea/compiler.xml Normal file
View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<annotationProcessing>
<profile name="Maven default annotation processors profile" enabled="true">
<sourceOutputDir name="target/generated-sources/annotations" />
<sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
<outputRelativeToContentRoot value="true" />
<module name="Student-Attendance-Management-System" />
</profile>
</annotationProcessing>
</component>
<component name="JavacSettings">
<option name="ADDITIONAL_OPTIONS_OVERRIDE">
<module name="Student-Attendance-Management-System" options="-parameters" />
</option>
</component>
</project>

13
.idea/dataSources.xml Normal file
View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="DataSourceManagerImpl" format="xml" multifile-model="true">
<data-source source="LOCAL" name="student-attendance-system@localhost" uuid="9b8fdef2-1a5d-4c09-a6ad-93b70e81cc04">
<driver-ref>mysql</driver-ref>
<synchronize>true</synchronize>
<configured-by-url>true</configured-by-url>
<jdbc-driver>com.mysql.jdbc.Driver</jdbc-driver>
<jdbc-url>jdbc:mysql://localhost:3306/student-attendance-system?useUnicode=true&amp;characterEncoding=utf-8&amp;useSSL=true&amp;serverTimezone=UTC</jdbc-url>
<working-dir>$ProjectFileDir$</working-dir>
</data-source>
</component>
</project>

View File

@ -0,0 +1,661 @@
<?xml version="1.0" encoding="UTF-8"?>
<dataSource name="student-attendance-system@localhost">
<database-model serializer="dbm" dbms="MYSQL" family-id="MYSQL" format-version="4.53">
<root id="1"/>
<collation id="2" parent="1" name="armscii8_bin">
<Charset>armscii8</Charset>
</collation>
<collation id="3" parent="1" name="armscii8_general_ci">
<Charset>armscii8</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="4" parent="1" name="ascii_bin">
<Charset>ascii</Charset>
</collation>
<collation id="5" parent="1" name="ascii_general_ci">
<Charset>ascii</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="6" parent="1" name="big5_bin">
<Charset>big5</Charset>
</collation>
<collation id="7" parent="1" name="big5_chinese_ci">
<Charset>big5</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="8" parent="1" name="binary">
<Charset>binary</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="9" parent="1" name="cp1250_bin">
<Charset>cp1250</Charset>
</collation>
<collation id="10" parent="1" name="cp1250_croatian_ci">
<Charset>cp1250</Charset>
</collation>
<collation id="11" parent="1" name="cp1250_czech_cs">
<Charset>cp1250</Charset>
</collation>
<collation id="12" parent="1" name="cp1250_general_ci">
<Charset>cp1250</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="13" parent="1" name="cp1250_polish_ci">
<Charset>cp1250</Charset>
</collation>
<collation id="14" parent="1" name="cp1251_bin">
<Charset>cp1251</Charset>
</collation>
<collation id="15" parent="1" name="cp1251_bulgarian_ci">
<Charset>cp1251</Charset>
</collation>
<collation id="16" parent="1" name="cp1251_general_ci">
<Charset>cp1251</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="17" parent="1" name="cp1251_general_cs">
<Charset>cp1251</Charset>
</collation>
<collation id="18" parent="1" name="cp1251_ukrainian_ci">
<Charset>cp1251</Charset>
</collation>
<collation id="19" parent="1" name="cp1256_bin">
<Charset>cp1256</Charset>
</collation>
<collation id="20" parent="1" name="cp1256_general_ci">
<Charset>cp1256</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="21" parent="1" name="cp1257_bin">
<Charset>cp1257</Charset>
</collation>
<collation id="22" parent="1" name="cp1257_general_ci">
<Charset>cp1257</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="23" parent="1" name="cp1257_lithuanian_ci">
<Charset>cp1257</Charset>
</collation>
<collation id="24" parent="1" name="cp850_bin">
<Charset>cp850</Charset>
</collation>
<collation id="25" parent="1" name="cp850_general_ci">
<Charset>cp850</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="26" parent="1" name="cp852_bin">
<Charset>cp852</Charset>
</collation>
<collation id="27" parent="1" name="cp852_general_ci">
<Charset>cp852</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="28" parent="1" name="cp866_bin">
<Charset>cp866</Charset>
</collation>
<collation id="29" parent="1" name="cp866_general_ci">
<Charset>cp866</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="30" parent="1" name="cp932_bin">
<Charset>cp932</Charset>
</collation>
<collation id="31" parent="1" name="cp932_japanese_ci">
<Charset>cp932</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="32" parent="1" name="dec8_bin">
<Charset>dec8</Charset>
</collation>
<collation id="33" parent="1" name="dec8_swedish_ci">
<Charset>dec8</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="34" parent="1" name="eucjpms_bin">
<Charset>eucjpms</Charset>
</collation>
<collation id="35" parent="1" name="eucjpms_japanese_ci">
<Charset>eucjpms</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="36" parent="1" name="euckr_bin">
<Charset>euckr</Charset>
</collation>
<collation id="37" parent="1" name="euckr_korean_ci">
<Charset>euckr</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="38" parent="1" name="gb2312_bin">
<Charset>gb2312</Charset>
</collation>
<collation id="39" parent="1" name="gb2312_chinese_ci">
<Charset>gb2312</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="40" parent="1" name="gbk_bin">
<Charset>gbk</Charset>
</collation>
<collation id="41" parent="1" name="gbk_chinese_ci">
<Charset>gbk</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="42" parent="1" name="geostd8_bin">
<Charset>geostd8</Charset>
</collation>
<collation id="43" parent="1" name="geostd8_general_ci">
<Charset>geostd8</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="44" parent="1" name="greek_bin">
<Charset>greek</Charset>
</collation>
<collation id="45" parent="1" name="greek_general_ci">
<Charset>greek</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="46" parent="1" name="hebrew_bin">
<Charset>hebrew</Charset>
</collation>
<collation id="47" parent="1" name="hebrew_general_ci">
<Charset>hebrew</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="48" parent="1" name="hp8_bin">
<Charset>hp8</Charset>
</collation>
<collation id="49" parent="1" name="hp8_english_ci">
<Charset>hp8</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="50" parent="1" name="keybcs2_bin">
<Charset>keybcs2</Charset>
</collation>
<collation id="51" parent="1" name="keybcs2_general_ci">
<Charset>keybcs2</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="52" parent="1" name="koi8r_bin">
<Charset>koi8r</Charset>
</collation>
<collation id="53" parent="1" name="koi8r_general_ci">
<Charset>koi8r</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="54" parent="1" name="koi8u_bin">
<Charset>koi8u</Charset>
</collation>
<collation id="55" parent="1" name="koi8u_general_ci">
<Charset>koi8u</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="56" parent="1" name="latin1_bin">
<Charset>latin1</Charset>
</collation>
<collation id="57" parent="1" name="latin1_danish_ci">
<Charset>latin1</Charset>
</collation>
<collation id="58" parent="1" name="latin1_general_ci">
<Charset>latin1</Charset>
</collation>
<collation id="59" parent="1" name="latin1_general_cs">
<Charset>latin1</Charset>
</collation>
<collation id="60" parent="1" name="latin1_german1_ci">
<Charset>latin1</Charset>
</collation>
<collation id="61" parent="1" name="latin1_german2_ci">
<Charset>latin1</Charset>
</collation>
<collation id="62" parent="1" name="latin1_spanish_ci">
<Charset>latin1</Charset>
</collation>
<collation id="63" parent="1" name="latin1_swedish_ci">
<Charset>latin1</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="64" parent="1" name="latin2_bin">
<Charset>latin2</Charset>
</collation>
<collation id="65" parent="1" name="latin2_croatian_ci">
<Charset>latin2</Charset>
</collation>
<collation id="66" parent="1" name="latin2_czech_cs">
<Charset>latin2</Charset>
</collation>
<collation id="67" parent="1" name="latin2_general_ci">
<Charset>latin2</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="68" parent="1" name="latin2_hungarian_ci">
<Charset>latin2</Charset>
</collation>
<collation id="69" parent="1" name="latin5_bin">
<Charset>latin5</Charset>
</collation>
<collation id="70" parent="1" name="latin5_turkish_ci">
<Charset>latin5</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="71" parent="1" name="latin7_bin">
<Charset>latin7</Charset>
</collation>
<collation id="72" parent="1" name="latin7_estonian_cs">
<Charset>latin7</Charset>
</collation>
<collation id="73" parent="1" name="latin7_general_ci">
<Charset>latin7</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="74" parent="1" name="latin7_general_cs">
<Charset>latin7</Charset>
</collation>
<collation id="75" parent="1" name="macce_bin">
<Charset>macce</Charset>
</collation>
<collation id="76" parent="1" name="macce_general_ci">
<Charset>macce</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="77" parent="1" name="macroman_bin">
<Charset>macroman</Charset>
</collation>
<collation id="78" parent="1" name="macroman_general_ci">
<Charset>macroman</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="79" parent="1" name="sjis_bin">
<Charset>sjis</Charset>
</collation>
<collation id="80" parent="1" name="sjis_japanese_ci">
<Charset>sjis</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="81" parent="1" name="swe7_bin">
<Charset>swe7</Charset>
</collation>
<collation id="82" parent="1" name="swe7_swedish_ci">
<Charset>swe7</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="83" parent="1" name="tis620_bin">
<Charset>tis620</Charset>
</collation>
<collation id="84" parent="1" name="tis620_thai_ci">
<Charset>tis620</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="85" parent="1" name="ucs2_bin">
<Charset>ucs2</Charset>
</collation>
<collation id="86" parent="1" name="ucs2_czech_ci">
<Charset>ucs2</Charset>
</collation>
<collation id="87" parent="1" name="ucs2_danish_ci">
<Charset>ucs2</Charset>
</collation>
<collation id="88" parent="1" name="ucs2_esperanto_ci">
<Charset>ucs2</Charset>
</collation>
<collation id="89" parent="1" name="ucs2_estonian_ci">
<Charset>ucs2</Charset>
</collation>
<collation id="90" parent="1" name="ucs2_general_ci">
<Charset>ucs2</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="91" parent="1" name="ucs2_general_mysql500_ci">
<Charset>ucs2</Charset>
</collation>
<collation id="92" parent="1" name="ucs2_hungarian_ci">
<Charset>ucs2</Charset>
</collation>
<collation id="93" parent="1" name="ucs2_icelandic_ci">
<Charset>ucs2</Charset>
</collation>
<collation id="94" parent="1" name="ucs2_latvian_ci">
<Charset>ucs2</Charset>
</collation>
<collation id="95" parent="1" name="ucs2_lithuanian_ci">
<Charset>ucs2</Charset>
</collation>
<collation id="96" parent="1" name="ucs2_persian_ci">
<Charset>ucs2</Charset>
</collation>
<collation id="97" parent="1" name="ucs2_polish_ci">
<Charset>ucs2</Charset>
</collation>
<collation id="98" parent="1" name="ucs2_roman_ci">
<Charset>ucs2</Charset>
</collation>
<collation id="99" parent="1" name="ucs2_romanian_ci">
<Charset>ucs2</Charset>
</collation>
<collation id="100" parent="1" name="ucs2_sinhala_ci">
<Charset>ucs2</Charset>
</collation>
<collation id="101" parent="1" name="ucs2_slovak_ci">
<Charset>ucs2</Charset>
</collation>
<collation id="102" parent="1" name="ucs2_slovenian_ci">
<Charset>ucs2</Charset>
</collation>
<collation id="103" parent="1" name="ucs2_spanish2_ci">
<Charset>ucs2</Charset>
</collation>
<collation id="104" parent="1" name="ucs2_spanish_ci">
<Charset>ucs2</Charset>
</collation>
<collation id="105" parent="1" name="ucs2_swedish_ci">
<Charset>ucs2</Charset>
</collation>
<collation id="106" parent="1" name="ucs2_turkish_ci">
<Charset>ucs2</Charset>
</collation>
<collation id="107" parent="1" name="ucs2_unicode_ci">
<Charset>ucs2</Charset>
</collation>
<collation id="108" parent="1" name="ujis_bin">
<Charset>ujis</Charset>
</collation>
<collation id="109" parent="1" name="ujis_japanese_ci">
<Charset>ujis</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="110" parent="1" name="utf16_bin">
<Charset>utf16</Charset>
</collation>
<collation id="111" parent="1" name="utf16_czech_ci">
<Charset>utf16</Charset>
</collation>
<collation id="112" parent="1" name="utf16_danish_ci">
<Charset>utf16</Charset>
</collation>
<collation id="113" parent="1" name="utf16_esperanto_ci">
<Charset>utf16</Charset>
</collation>
<collation id="114" parent="1" name="utf16_estonian_ci">
<Charset>utf16</Charset>
</collation>
<collation id="115" parent="1" name="utf16_general_ci">
<Charset>utf16</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="116" parent="1" name="utf16_hungarian_ci">
<Charset>utf16</Charset>
</collation>
<collation id="117" parent="1" name="utf16_icelandic_ci">
<Charset>utf16</Charset>
</collation>
<collation id="118" parent="1" name="utf16_latvian_ci">
<Charset>utf16</Charset>
</collation>
<collation id="119" parent="1" name="utf16_lithuanian_ci">
<Charset>utf16</Charset>
</collation>
<collation id="120" parent="1" name="utf16_persian_ci">
<Charset>utf16</Charset>
</collation>
<collation id="121" parent="1" name="utf16_polish_ci">
<Charset>utf16</Charset>
</collation>
<collation id="122" parent="1" name="utf16_roman_ci">
<Charset>utf16</Charset>
</collation>
<collation id="123" parent="1" name="utf16_romanian_ci">
<Charset>utf16</Charset>
</collation>
<collation id="124" parent="1" name="utf16_sinhala_ci">
<Charset>utf16</Charset>
</collation>
<collation id="125" parent="1" name="utf16_slovak_ci">
<Charset>utf16</Charset>
</collation>
<collation id="126" parent="1" name="utf16_slovenian_ci">
<Charset>utf16</Charset>
</collation>
<collation id="127" parent="1" name="utf16_spanish2_ci">
<Charset>utf16</Charset>
</collation>
<collation id="128" parent="1" name="utf16_spanish_ci">
<Charset>utf16</Charset>
</collation>
<collation id="129" parent="1" name="utf16_swedish_ci">
<Charset>utf16</Charset>
</collation>
<collation id="130" parent="1" name="utf16_turkish_ci">
<Charset>utf16</Charset>
</collation>
<collation id="131" parent="1" name="utf16_unicode_ci">
<Charset>utf16</Charset>
</collation>
<collation id="132" parent="1" name="utf32_bin">
<Charset>utf32</Charset>
</collation>
<collation id="133" parent="1" name="utf32_czech_ci">
<Charset>utf32</Charset>
</collation>
<collation id="134" parent="1" name="utf32_danish_ci">
<Charset>utf32</Charset>
</collation>
<collation id="135" parent="1" name="utf32_esperanto_ci">
<Charset>utf32</Charset>
</collation>
<collation id="136" parent="1" name="utf32_estonian_ci">
<Charset>utf32</Charset>
</collation>
<collation id="137" parent="1" name="utf32_general_ci">
<Charset>utf32</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="138" parent="1" name="utf32_hungarian_ci">
<Charset>utf32</Charset>
</collation>
<collation id="139" parent="1" name="utf32_icelandic_ci">
<Charset>utf32</Charset>
</collation>
<collation id="140" parent="1" name="utf32_latvian_ci">
<Charset>utf32</Charset>
</collation>
<collation id="141" parent="1" name="utf32_lithuanian_ci">
<Charset>utf32</Charset>
</collation>
<collation id="142" parent="1" name="utf32_persian_ci">
<Charset>utf32</Charset>
</collation>
<collation id="143" parent="1" name="utf32_polish_ci">
<Charset>utf32</Charset>
</collation>
<collation id="144" parent="1" name="utf32_roman_ci">
<Charset>utf32</Charset>
</collation>
<collation id="145" parent="1" name="utf32_romanian_ci">
<Charset>utf32</Charset>
</collation>
<collation id="146" parent="1" name="utf32_sinhala_ci">
<Charset>utf32</Charset>
</collation>
<collation id="147" parent="1" name="utf32_slovak_ci">
<Charset>utf32</Charset>
</collation>
<collation id="148" parent="1" name="utf32_slovenian_ci">
<Charset>utf32</Charset>
</collation>
<collation id="149" parent="1" name="utf32_spanish2_ci">
<Charset>utf32</Charset>
</collation>
<collation id="150" parent="1" name="utf32_spanish_ci">
<Charset>utf32</Charset>
</collation>
<collation id="151" parent="1" name="utf32_swedish_ci">
<Charset>utf32</Charset>
</collation>
<collation id="152" parent="1" name="utf32_turkish_ci">
<Charset>utf32</Charset>
</collation>
<collation id="153" parent="1" name="utf32_unicode_ci">
<Charset>utf32</Charset>
</collation>
<collation id="154" parent="1" name="utf8_bin">
<Charset>utf8</Charset>
</collation>
<collation id="155" parent="1" name="utf8_czech_ci">
<Charset>utf8</Charset>
</collation>
<collation id="156" parent="1" name="utf8_danish_ci">
<Charset>utf8</Charset>
</collation>
<collation id="157" parent="1" name="utf8_esperanto_ci">
<Charset>utf8</Charset>
</collation>
<collation id="158" parent="1" name="utf8_estonian_ci">
<Charset>utf8</Charset>
</collation>
<collation id="159" parent="1" name="utf8_general_ci">
<Charset>utf8</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="160" parent="1" name="utf8_general_mysql500_ci">
<Charset>utf8</Charset>
</collation>
<collation id="161" parent="1" name="utf8_hungarian_ci">
<Charset>utf8</Charset>
</collation>
<collation id="162" parent="1" name="utf8_icelandic_ci">
<Charset>utf8</Charset>
</collation>
<collation id="163" parent="1" name="utf8_latvian_ci">
<Charset>utf8</Charset>
</collation>
<collation id="164" parent="1" name="utf8_lithuanian_ci">
<Charset>utf8</Charset>
</collation>
<collation id="165" parent="1" name="utf8_persian_ci">
<Charset>utf8</Charset>
</collation>
<collation id="166" parent="1" name="utf8_polish_ci">
<Charset>utf8</Charset>
</collation>
<collation id="167" parent="1" name="utf8_roman_ci">
<Charset>utf8</Charset>
</collation>
<collation id="168" parent="1" name="utf8_romanian_ci">
<Charset>utf8</Charset>
</collation>
<collation id="169" parent="1" name="utf8_sinhala_ci">
<Charset>utf8</Charset>
</collation>
<collation id="170" parent="1" name="utf8_slovak_ci">
<Charset>utf8</Charset>
</collation>
<collation id="171" parent="1" name="utf8_slovenian_ci">
<Charset>utf8</Charset>
</collation>
<collation id="172" parent="1" name="utf8_spanish2_ci">
<Charset>utf8</Charset>
</collation>
<collation id="173" parent="1" name="utf8_spanish_ci">
<Charset>utf8</Charset>
</collation>
<collation id="174" parent="1" name="utf8_swedish_ci">
<Charset>utf8</Charset>
</collation>
<collation id="175" parent="1" name="utf8_turkish_ci">
<Charset>utf8</Charset>
</collation>
<collation id="176" parent="1" name="utf8_unicode_ci">
<Charset>utf8</Charset>
</collation>
<collation id="177" parent="1" name="utf8mb4_bin">
<Charset>utf8mb4</Charset>
</collation>
<collation id="178" parent="1" name="utf8mb4_czech_ci">
<Charset>utf8mb4</Charset>
</collation>
<collation id="179" parent="1" name="utf8mb4_danish_ci">
<Charset>utf8mb4</Charset>
</collation>
<collation id="180" parent="1" name="utf8mb4_esperanto_ci">
<Charset>utf8mb4</Charset>
</collation>
<collation id="181" parent="1" name="utf8mb4_estonian_ci">
<Charset>utf8mb4</Charset>
</collation>
<collation id="182" parent="1" name="utf8mb4_general_ci">
<Charset>utf8mb4</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="183" parent="1" name="utf8mb4_hungarian_ci">
<Charset>utf8mb4</Charset>
</collation>
<collation id="184" parent="1" name="utf8mb4_icelandic_ci">
<Charset>utf8mb4</Charset>
</collation>
<collation id="185" parent="1" name="utf8mb4_latvian_ci">
<Charset>utf8mb4</Charset>
</collation>
<collation id="186" parent="1" name="utf8mb4_lithuanian_ci">
<Charset>utf8mb4</Charset>
</collation>
<collation id="187" parent="1" name="utf8mb4_persian_ci">
<Charset>utf8mb4</Charset>
</collation>
<collation id="188" parent="1" name="utf8mb4_polish_ci">
<Charset>utf8mb4</Charset>
</collation>
<collation id="189" parent="1" name="utf8mb4_roman_ci">
<Charset>utf8mb4</Charset>
</collation>
<collation id="190" parent="1" name="utf8mb4_romanian_ci">
<Charset>utf8mb4</Charset>
</collation>
<collation id="191" parent="1" name="utf8mb4_sinhala_ci">
<Charset>utf8mb4</Charset>
</collation>
<collation id="192" parent="1" name="utf8mb4_slovak_ci">
<Charset>utf8mb4</Charset>
</collation>
<collation id="193" parent="1" name="utf8mb4_slovenian_ci">
<Charset>utf8mb4</Charset>
</collation>
<collation id="194" parent="1" name="utf8mb4_spanish2_ci">
<Charset>utf8mb4</Charset>
</collation>
<collation id="195" parent="1" name="utf8mb4_spanish_ci">
<Charset>utf8mb4</Charset>
</collation>
<collation id="196" parent="1" name="utf8mb4_swedish_ci">
<Charset>utf8mb4</Charset>
</collation>
<collation id="197" parent="1" name="utf8mb4_turkish_ci">
<Charset>utf8mb4</Charset>
</collation>
<collation id="198" parent="1" name="utf8mb4_unicode_ci">
<Charset>utf8mb4</Charset>
</collation>
<schema id="199" parent="1" name="hotal">
<CollationName>utf8_general_ci</CollationName>
</schema>
<schema id="200" parent="1" name="information_schema">
<CollationName>utf8_general_ci</CollationName>
</schema>
<schema id="201" parent="1" name="mysql">
<CollationName>utf8_general_ci</CollationName>
</schema>
<schema id="202" parent="1" name="performance_schema">
<CollationName>utf8_general_ci</CollationName>
</schema>
<schema id="203" parent="1" name="project">
<CollationName>utf8_general_ci</CollationName>
</schema>
<schema id="204" parent="1" name="student-attendance-system">
<Current>1</Current>
<CollationName>utf8_general_ci</CollationName>
</schema>
<schema id="205" parent="1" name="test">
<CollationName>utf8_general_ci</CollationName>
</schema>
<user id="206" parent="1" name="root">
<Host>localhost</Host>
</user>
</database-model>
</dataSource>

View File

@ -0,0 +1,2 @@
#n:information_schema
!<md> [null, 0, null, null, -2147483648, -2147483648]

View File

@ -0,0 +1,2 @@
#n:mysql
!<md> [null, 0, null, null, -2147483648, -2147483648]

View File

@ -0,0 +1,2 @@
#n:performance_schema
!<md> [null, 0, null, null, -2147483648, -2147483648]

6
.idea/encodings.xml Normal file
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding">
<file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
</component>
</project>

View File

@ -0,0 +1,97 @@
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<option name="myName" value="Project Default" />
<inspection_tool class="AliAccessStaticViaInstance" enabled="false" level="BLOCKER" enabled_by_default="false" />
<inspection_tool class="AliArrayNamingShouldHaveBracket" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AliControlFlowStatementWithoutBraces" enabled="false" level="BLOCKER" enabled_by_default="false" />
<inspection_tool class="AliDeprecation" enabled="false" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="AliEqualsAvoidNull" enabled="false" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="AliLongLiteralsEndingWithLowercaseL" enabled="false" level="BLOCKER" enabled_by_default="false" />
<inspection_tool class="AliMissingOverrideAnnotation" enabled="false" level="BLOCKER" enabled_by_default="false" />
<inspection_tool class="AliWrapperTypeEquality" enabled="false" level="BLOCKER" enabled_by_default="false" />
<inspection_tool class="AlibabaAbstractClassShouldStartWithAbstractNaming" enabled="false" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="AlibabaAbstractMethodOrInterfaceMethodMustUseJavadoc" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AlibabaAvoidApacheBeanUtilsCopy" enabled="false" level="BLOCKER" enabled_by_default="false" />
<inspection_tool class="AlibabaAvoidCallStaticSimpleDateFormat" enabled="false" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="AlibabaAvoidCommentBehindStatement" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AlibabaAvoidComplexCondition" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AlibabaAvoidConcurrentCompetitionRandom" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AlibabaAvoidDoubleOrFloatEqualCompare" enabled="false" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="AlibabaAvoidManuallyCreateThread" enabled="false" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="AlibabaAvoidMissUseOfMathRandom" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AlibabaAvoidNegationOperator" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AlibabaAvoidNewDateGetTime" enabled="false" level="BLOCKER" enabled_by_default="false" />
<inspection_tool class="AlibabaAvoidPatternCompileInMethod" enabled="false" level="BLOCKER" enabled_by_default="false" />
<inspection_tool class="AlibabaAvoidReturnInFinally" enabled="false" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="AlibabaAvoidStartWithDollarAndUnderLineNaming" enabled="false" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="AlibabaAvoidUseTimer" enabled="false" level="BLOCKER" enabled_by_default="false" />
<inspection_tool class="AlibabaBigDecimalAvoidDoubleConstructor" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AlibabaBooleanPropertyShouldNotStartWithIs" enabled="false" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="AlibabaClassCastExceptionWithSubListToArrayList" enabled="false" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="AlibabaClassCastExceptionWithToArray" enabled="false" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="AlibabaClassMustHaveAuthor" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AlibabaClassNamingShouldBeCamel" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AlibabaCollectionInitShouldAssignCapacity" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AlibabaCommentsMustBeJavadocFormat" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AlibabaConcurrentExceptionWithModifyOriginSubList" enabled="false" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="AlibabaConstantFieldShouldBeUpperCase" enabled="false" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="AlibabaCountDownShouldInFinally" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AlibabaDontModifyInForeachCircle" enabled="false" level="BLOCKER" enabled_by_default="false" />
<inspection_tool class="AlibabaEnumConstantsMustHaveComment" enabled="false" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="AlibabaExceptionClassShouldEndWithException" enabled="false" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="AlibabaIbatisMethodQueryForList" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AlibabaLockShouldWithTryFinally" enabled="false" level="BLOCKER" enabled_by_default="false" />
<inspection_tool class="AlibabaLowerCamelCaseVariableNaming" enabled="false" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="AlibabaMethodReturnWrapperType" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AlibabaMethodTooLong" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AlibabaPackageNaming" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AlibabaPojoMustOverrideToString" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AlibabaPojoMustUsePrimitiveField" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AlibabaPojoNoDefaultValue" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AlibabaRemoveCommentedCode" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AlibabaServiceOrDaoClassShouldEndWithImpl" enabled="false" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="AlibabaStringConcat" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AlibabaSwitchStatement" enabled="false" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="AlibabaTestClassShouldEndWithTestNaming" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AlibabaThreadLocalShouldRemove" enabled="false" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="AlibabaThreadPoolCreation" enabled="false" level="BLOCKER" enabled_by_default="false" />
<inspection_tool class="AlibabaThreadShouldSetName" enabled="false" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="AlibabaTransactionMustHaveRollback" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AlibabaUndefineMagicConstant" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AlibabaUnsupportedExceptionWithModifyAsList" enabled="false" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="AlibabaUseQuietReferenceNotation" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AlibabaUseRightCaseForDateFormat" enabled="false" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="JavaDoc" enabled="true" level="WARNING" enabled_by_default="true">
<option name="TOP_LEVEL_CLASS_OPTIONS">
<value>
<option name="ACCESS_JAVADOC_REQUIRED_FOR" value="none" />
<option name="REQUIRED_TAGS" value="" />
</value>
</option>
<option name="INNER_CLASS_OPTIONS">
<value>
<option name="ACCESS_JAVADOC_REQUIRED_FOR" value="none" />
<option name="REQUIRED_TAGS" value="" />
</value>
</option>
<option name="METHOD_OPTIONS">
<value>
<option name="ACCESS_JAVADOC_REQUIRED_FOR" value="none" />
<option name="REQUIRED_TAGS" value="@return@param@throws or @exception" />
</value>
</option>
<option name="FIELD_OPTIONS">
<value>
<option name="ACCESS_JAVADOC_REQUIRED_FOR" value="none" />
<option name="REQUIRED_TAGS" value="" />
</value>
</option>
<option name="IGNORE_DEPRECATED" value="false" />
<option name="IGNORE_JAVADOC_PERIOD" value="true" />
<option name="IGNORE_DUPLICATED_THROWS" value="false" />
<option name="IGNORE_POINT_TO_ITSELF" value="false" />
<option name="myAdditionalJavadocTags" value="date" />
</inspection_tool>
<inspection_tool class="MapOrSetKeyShouldOverrideHashCodeEquals" enabled="false" level="CRITICAL" enabled_by_default="false" />
</profile>
</component>

30
.idea/jarRepositories.xml Normal file
View File

@ -0,0 +1,30 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="RemoteRepositoriesConfiguration">
<remote-repository>
<option name="id" value="central" />
<option name="name" value="Central Repository" />
<option name="url" value="https://repo.maven.apache.org/maven2" />
</remote-repository>
<remote-repository>
<option name="id" value="central" />
<option name="name" value="Central Repository" />
<option name="url" value="http://maven.aliyun.com/nexus/content/groups/public/" />
</remote-repository>
<remote-repository>
<option name="id" value="central" />
<option name="name" value="Maven Central repository" />
<option name="url" value="https://repo1.maven.org/maven2" />
</remote-repository>
<remote-repository>
<option name="id" value="jboss.community" />
<option name="name" value="JBoss Community repository" />
<option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
</remote-repository>
<remote-repository>
<option name="id" value="central" />
<option name="name" value="Central Repository" />
<option name="url" value="https://maven.aliyun.com/repository/public" />
</remote-repository>
</component>
</project>

12
.idea/misc.xml Normal file
View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="MavenProjectsManager">
<option name="originalFiles">
<list>
<option value="$PROJECT_DIR$/pom.xml" />
</list>
</option>
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="1.8" project-jdk-type="JavaSDK" />
</project>

8
.idea/modules.xml Normal file
View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/Student-Attendance-Management-System.iml" filepath="$PROJECT_DIR$/Student-Attendance-Management-System.iml" />
</modules>
</component>
</project>

6
.idea/smartfox_info.xml Normal file
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="SmartFoxProjectConfig">
<option name="projectInspectionClosed" value="true" />
</component>
</project>

124
.idea/uiDesigner.xml Normal file
View File

@ -0,0 +1,124 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Palette2">
<group name="Swing">
<item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
</item>
<item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
</item>
<item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.png" removable="false" auto-create-binding="false" can-attach-label="true">
<default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
</item>
<item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
<initial-values>
<property name="text" value="Button" />
</initial-values>
</item>
<item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="RadioButton" />
</initial-values>
</item>
<item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="CheckBox" />
</initial-values>
</item>
<item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
<initial-values>
<property name="text" value="Label" />
</initial-values>
</item>
<item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
</item>
<item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
</item>
<item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
<preferred-size width="-1" height="20" />
</default-constraints>
</item>
<item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
</item>
<item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
</item>
</group>
</component>
</project>

6
.idea/vcs.xml Normal file
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>

201
LICENSE Normal file
View File

@ -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.

30
README.md Normal file
View File

@ -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

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<module version="4">
<component name="FacetManager">
<facet type="Spring" name="Spring">
<configuration />
</facet>
</component>
</module>

73
pom.xml Normal file
View File

@ -0,0 +1,73 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.1</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.lxq</groupId>
<artifactId>Student-Attendance-Management-System</artifactId>
<version>1.0-SNAPSHOT</version>
<name>Student-Attendance-Management-System</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.4</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--集成redis-->
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.7.0</version>
</plugin>
</plugins>
</build>
</project>

View File

@ -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);
}
}

View File

@ -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/");
}
}

View File

@ -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;
}
}
}

View File

@ -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;
}
}

View File

@ -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<String> getTimeArr(String time, Integer length) {
List<String> 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;
}
}

View File

@ -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;
}
}

View File

@ -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<CourseApplication> 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);
}
}

View File

@ -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<Curriculum> 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);
}
}

View File

@ -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<Curriculum> curriculumFilter = new ArrayList<>();
//教师访问主页时展示的是自己的课程信息
if ("1".equals(userMessageForSeesion.getUserLv())) {
curriculum.setTeacherId(userMessageForSeesion.getUserId());
List<Curriculum> allCurriculum = curriculumService.getAllCurriculum(curriculum);
curriculumFilter = allCurriculum;
}
//学生主页时展示的是所有课程信息
if ("2".equals(userMessageForSeesion.getUserLv())) {
List<Curriculum> 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<CourseApplication> 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<CourseApplication> 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<LeaveApplication> allLeaveApplication = leaveApplicationService.getAllLeaveApplication(leaveApplication);
List<LeaveApplication> 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<User> 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<Record> allRecord = recordService.getAllRecord(record);
List<Record> 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;
}
}

View File

@ -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<LeaveApplication> 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);
}
}

View File

@ -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<Record> 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);
}
}

View File

@ -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);
}
}

View File

@ -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<CourseApplication> getAllCourseApplication(CourseApplication CourseApplication);
//查询申请信息
CourseApplication getCourseApplication(CourseApplication CourseApplication);
//增加申请信息
int addCourseApplication(CourseApplication CourseApplication);
//删除申请信息
int delCourseApplication(CourseApplication CourseApplication);
//修改申请信息
int updateCourseApplication(CourseApplication CourseApplication);
CourseApplication getCourseApplicationbyPrimary(CourseApplication CourseApplication);
}

View File

@ -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<Curriculum> getAllCurriculum(Curriculum Curriculum);
//查询课程信息
Curriculum getCurriculum(Curriculum Curriculum);
//通过主键查找课程
Curriculum getCurriculumbyPrimary(Curriculum Curriculum);
//增加课程信息
int addCurriculum(Curriculum Curriculum);
//删除课程信息
int delCurriculum(Curriculum Curriculum);
//修改课程信息
int updateCurriculum(Curriculum Curriculum);
}

View File

@ -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<LeaveApplication> getAllLeaveApplication(LeaveApplication LeaveApplication);
//查询请假信息
LeaveApplication getLeaveApplication(LeaveApplication LeaveApplication);
//增加请假信息
int addLeaveApplication(LeaveApplication LeaveApplication);
//删除请假信息
int delLeaveApplication(LeaveApplication LeaveApplication);
//修改请假信息
int updateLeaveApplication(LeaveApplication LeaveApplication);
LeaveApplication getLeaveApplicationbyPrimary(LeaveApplication LeaveApplication);
}

View File

@ -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<Record> getAllRecord(Record Record);
//查询考勤信息
Record getRecord(Record Record);
//增加考勤信息
int addRecord(Record Record);
//删除考勤信息
int delRecord(Record Record);
//修改考勤信息
int updateRecord(Record Record);
Record getRecordbyPrimary(Record record);
}

View File

@ -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<User> getAllUser(User User);
//查询用户信息
User getUser(User User);
//增加用户信息
int addUser(User User);
//删除用户信息
int delUser(User User);
//修改用户信息
int updateUser(User User);
User getUserByAccount(User user);
}

View File

@ -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;
}
}

View File

@ -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 +
'}';
}
}

View File

@ -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;
}
}

View File

@ -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 +
'}';
}
}

View File

@ -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;
}
}

View File

@ -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 + '\'' +
'}';
}
}

View File

@ -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<CourseApplication> getAllCourseApplication(CourseApplication CourseApplication){
List<CourseApplication> allCourseApplication = new ArrayList<>();
try{
List<CourseApplication> 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<CourseApplication> getAllCourseApplicationWithoutDelete(CourseApplication CourseApplication){
List<CourseApplication> allCourseApplication = new ArrayList<>();
try{
List<CourseApplication> 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<String> 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;
}
}

View File

@ -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<Curriculum> getAllCurriculum(Curriculum Curriculum){
List<Curriculum> allCurriculum = new ArrayList<>();
try{
List<Curriculum> allCurriculumSearch = CurriculumDAO.getAllCurriculum(Curriculum);
//映射教师信息
if(null!= allCurriculumSearch){
Map<String,User> teacherMap = new HashMap<>();
//取出所有"教师"用户
User user = new User();
user.setUserLv("1");
List<User> 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;
}
}

View File

@ -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<LeaveApplication> getAllLeaveApplication(LeaveApplication leaveApplication){
List<LeaveApplication> allLeaveApplication = new ArrayList<>();
try{
List<LeaveApplication> 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<String> 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;
}
}

View File

@ -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<Record> getAllRecord(Record Record){
List<Record> allRecord = new ArrayList<>();
try{
List<Record> 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;
}
}

View File

@ -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<User> getAllUser(User user){
List<User> 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;
}
}

View File

@ -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

View File

@ -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&Xi;;;;;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#

View File

@ -0,0 +1,122 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.lxq.model.dao.CourseApplicationDAO">
<select id="getAllCourseApplication" resultType="com.lxq.model.object.CourseApplication">
select * from course_application
<where>
<if test="id !=null">
and id = #{id}
</if>
<if test="time !=null">
and time = #{time}
</if>
<if test="teacherId !=null">
and teacherId = #{teacherId}
</if>
<if test="userId !=null">
and userId = #{userId}
</if>
<if test="curriculumId !=null">
and curriculumId = #{curriculumId}
</if>
<if test="state !=null">
and state = #{state}
</if>
<if test="content !=null">
and content like CONCAT('%', #{content}, '%')
</if>
<if test="remarks !=null">
and remarks like CONCAT('%', #{remarks}, '%')
</if>
</where>
</select>
<select id="getCourseApplication" resultType="com.lxq.model.object.CourseApplication">
select * from course_application
<where>
<if test="id !=null">
and id = #{id}
</if>
<if test="time !=null">
and time = #{time}
</if>
<if test="teacherId !=null">
and teacherId = #{teacherId}
</if>
<if test="userId !=null">
and userId = #{userId}
</if>
<if test="curriculumId !=null">
and curriculumId = #{curriculumId}
</if>
<if test="state !=null">
and state = #{state}
</if>
<if test="content !=null">
and content like CONCAT('%', #{content}, '%')
</if>
<if test="remarks !=null">
and remarks like CONCAT('%', #{remarks}, '%')
</if>
</where>
</select>
<select id="getCourseApplicationbyPrimary" resultType="com.lxq.model.object.CourseApplication">
select * from course_application
<where>
<if test="teacherId !=null">
and teacherId = #{teacherId}
</if>
<if test="userId !=null">
and userId = #{userId}
</if>
<if test="curriculumId !=null">
and curriculumId = #{curriculumId}
</if>
</where>
</select>
<insert id="addCourseApplication" parameterType="com.lxq.model.object.CourseApplication">
insert into course_application(teacherId,userId,curriculumId,content,state,remarks,time)
values(#{teacherId},#{userId},#{curriculumId},#{content},#{state},#{remarks},#{time})
</insert>
<delete id="delCourseApplication" parameterType="com.lxq.model.object.CourseApplication">
delete from course_application
where id = #{id}
</delete>
<update id="updateCourseApplication" parameterType="com.lxq.model.object.CourseApplication">
update course_application
<set>
<if test="teacherId !=null">
teacherId = #{teacherId},
</if>
<if test="userId !=null">
userId = #{userId},
</if>
<if test="curriculumId !=null">
curriculumId = #{curriculumId},
</if>
<if test="content !=null">
content = #{content},
</if>
<if test="state !=null">
state = #{state},
</if>
<if test="remarks !=null">
remarks = #{remarks},
</if>
<if test="time !=null">
time = #{time},
</if>
</set>
where id = #{id}
</update>
</mapper>

View File

@ -0,0 +1,159 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.lxq.model.dao.CurriculumDAO">
<select id="getAllCurriculum" resultType="com.lxq.model.object.Curriculum">
select * from curriculum
<where>
<if test="id !=null">
and id = #{id}
</if>
<if test="curriculumName !=null">
and curriculumName like CONCAT('%', #{curriculumName}, '%')
</if>
<if test="introduce !=null">
and introduce like CONCAT('%', #{introduce}, '%')
</if>
<if test="place !=null">
and place like CONCAT('%', #{place}, '%')
</if>
<if test="teacherId !=null">
and teacherId like CONCAT('%', #{teacherId}, '%')
</if>
<if test="timeStart !=null">
and timeStart = #{timeStart}
</if>
<if test="timeEndNum !=null">
and timeEndNum = #{timeEndNum}
</if>
<if test="timeStartNum !=null">
and timeStartNum = #{timeStartNum}
</if>
<if test="timeEnd !=null">
and timeEnd = #{timeEnd}
</if>
<if test="timeLength !=null">
and timeLength = #{timeLength}
</if>
<if test="userNum !=null">
and userNum = #{userNum}
</if>
<if test="joinUserNum !=null">
and joinUserNum = #{joinUserNum}
</if>
</where>
ORDER BY `curriculum`.`joinUserNum` ASC
</select>
<select id="getCurriculum" resultType="com.lxq.model.object.Curriculum">
select * from curriculum
<where>
<if test="id !=null">
and id = #{id}
</if>
<if test="teacherId !=null">
and teacherId like CONCAT('%', #{teacherId}, '%')
</if>
<if test="curriculumName !=null">
and curriculumName like CONCAT('%', #{curriculumName}, '%')
</if>
<if test="place !=null">
and place like CONCAT('%', #{place}, '%')
</if>
<if test="introduce !=null">
and introduce like CONCAT('%', #{introduce}, '%')
</if>
<if test="timeStart !=null">
and timeStart = #{timeStart}
</if>
<if test="timeEndNum !=null">
and timeEndNum = #{timeEndNum}
</if>
<if test="timeStartNum !=null">
and timeStartNum = #{timeStartNum}
</if>
<if test="timeEnd !=null">
and timeEnd = #{timeEnd}
</if>
<if test="timeLength !=null">
and timeLength = #{timeLength}
</if>
<if test="userNum !=null">
and userNum = #{userNum}
</if>
<if test="joinUserNum !=null">
and joinUserNum = #{joinUserNum}
</if>
</where>
ORDER BY `curriculum`.`joinUserNum` ASC
</select>
<select id="getCurriculumbyPrimary" resultType="com.lxq.model.object.Curriculum">
select * from curriculum
<where>
<if test="teacherId !=null">
and teacherId = #{teacherId}
</if>
<if test="curriculumName !=null">
and curriculumName = #{curriculumName}
</if>
</where>
ORDER BY `curriculum`.`joinUserNum` ASC
</select>
<insert id="addCurriculum" parameterType="com.lxq.model.object.Curriculum">
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})
</insert>
<delete id="delCurriculum" parameterType="com.lxq.model.object.Curriculum">
delete from curriculum
where id = #{id}
</delete>
<update id="updateCurriculum" parameterType="com.lxq.model.object.Curriculum">
update curriculum
<set>
<if test="curriculumName !=null">
curriculumName = #{curriculumName},
</if>
<if test="teacherId !=null">
teacherId = #{teacherId},
</if>
<if test="introduce !=null">
introduce = #{introduce},
</if>
<if test="timeStart !=null">
timeStart = #{timeStart},
</if>
<if test="timeEnd !=null">
timeEnd = #{timeEnd},
</if>
<if test="timeStartNum !=null">
timeStartNum = #{timeStartNum},
</if>
<if test="timeEndNum !=null">
timeEndNum = #{timeEndNum},
</if>
<if test="timeLength !=null">
timeLength = #{timeLength},
</if>
<if test="userNum !=null">
userNum = #{userNum},
</if>
<if test="joinUserNum !=null">
joinUserNum = #{joinUserNum},
</if>
<if test="place !=null">
place = #{place},
</if>
</set>
where id = #{id}
</update>
</mapper>

View File

@ -0,0 +1,153 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.lxq.model.dao.LeaveApplicationDAO">
<select id="getAllLeaveApplication" resultType="com.lxq.model.object.LeaveApplication">
select * from leave_application
<where>
<if test="id !=null">
and id = #{id}
</if>
<if test="time !=null">
and time = #{time}
</if>
<if test="teacherId !=null">
and teacherId = #{teacherId}
</if>
<if test="userId !=null">
and userId = #{userId}
</if>
<if test="curriculumId !=null">
and curriculumId = #{curriculumId}
</if>
<if test="state !=null">
and state = #{state}
</if>
<if test="timeStart !=null">
and timeStart = #{timeStart}
</if>
<if test="timeEnd !=null">
and timeEnd = #{timeEnd}
</if>
<if test="timeLength !=null">
and timeLength = #{timeLength}
</if>
<if test="content !=null">
and content like CONCAT(CONCAT('%', #{content}, '%')
</if>
<if test="remarks !=null">
and remarks like CONCAT('%', #{remarks}, '%')
</if>
</where>
</select>
<select id="getLeaveApplication" resultType="com.lxq.model.object.LeaveApplication">
select * from leave_application
<where>
<if test="id !=null">
and id = #{id}
</if>
<if test="time !=null">
and time = #{time}
</if>
<if test="teacherId !=null">
and teacherId = #{teacherId}
</if>
<if test="userId !=null">
and userId = #{userId}
</if>
<if test="curriculumId !=null">
and curriculumId = #{curriculumId}
</if>
<if test="state !=null">
and state = #{state}
</if>
<if test="timeStart !=null">
and timeStart = #{timeStart}
</if>
<if test="timeEnd !=null">
and timeEnd = #{timeEnd}
</if>
<if test="timeLength !=null">
and timeLength = #{timeLength}
</if>
<if test="content !=null">
and content like CONCAT('%', #{content}, '%')
</if>
<if test="remarks !=null">
and remarks like CONCAT(CONCAT('%', #{remarks}, '%')
</if>
</where>
</select>
<select id="getLeaveApplicationbyPrimary" resultType="com.lxq.model.object.LeaveApplication">
select * from leave_application
<where>
<if test="teacherId !=null">
and teacherId = #{teacherId}
</if>
<if test="userId !=null">
and userId = #{userId}
</if>
<if test="curriculumId !=null">
and curriculumId = #{curriculumId}
</if>
<if test="timeStart !=null">
and timeStart = #{timeStart}
</if>
<if test="timeEnd !=null">
and timeEnd = #{timeEnd}
</if>
</where>
</select>
<insert id="addLeaveApplication" parameterType="com.lxq.model.object.LeaveApplication">
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})
</insert>
<delete id="delLeaveApplication" parameterType="com.lxq.model.object.LeaveApplication">
delete from leave_application
where id = #{id}
</delete>
<update id="updateLeaveApplication" parameterType="com.lxq.model.object.LeaveApplication">
update leave_application
<set>
<if test="teacherId !=null">
teacherId = #{teacherId},
</if>
<if test="userId !=null">
userId = #{userId},
</if>
<if test="curriculumId !=null">
curriculumId = #{curriculumId},
</if>
<if test="content !=null">
content = #{content},
</if>
<if test="state !=null">
state = #{state},
</if>
<if test="remarks !=null">
remarks = #{remarks},
</if>
<if test="timeStart !=null">
timeStart = #{timeStart},
</if>
<if test="timeEnd !=null">
timeEnd = #{timeEnd},
</if>
<if test="timeLength !=null">
timeLength = #{timeLength},
</if>
<if test="time !=null">
time = #{time},
</if>
</set>
where id = #{id}
</update>
</mapper>

View File

@ -0,0 +1,147 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.lxq.model.dao.RecordDAO">
<select id="getAllRecord" resultType="com.lxq.model.object.Record">
select * from record
<where>
<if test="id !=null">
and id = #{id}
</if>
<if test="time !=null">
and time = #{time}
</if>
<if test="teacherId !=null">
and teacherId = #{teacherId}
</if>
<if test="userId !=null">
and userId = #{userId}
</if>
<if test="curriculumId !=null">
and curriculumId = #{curriculumId}
</if>
<if test="state !=null">
and state like CONCAT('%', #{state}, '%')
</if>
<if test="timeNum !=null">
and timeNum = #{timeNum}
</if>
<if test="timeNumMax !=null">
and timeNum <![CDATA[ <= ]]> #{timeNumMax}
</if>
<if test="timeNumMin !=null">
and timeNum <![CDATA[ >= ]]> #{timeNumMin}
</if>
<if test="content !=null">
and content like CONCAT('%', #{content}, '%')
</if>
<if test="remarks !=null">
and remarks like CONCAT('%', #{remarks}, '%')
</if>
</where>
</select>
<select id="getRecord" resultType="com.lxq.model.object.Record">
select * from record
<where>
<if test="id !=null">
and id = #{id}
</if>
<if test="time !=null">
and time = #{time}
</if>
<if test="teacherId !=null">
and teacherId = #{teacherId}
</if>
<if test="userId !=null">
and userId = #{userId}
</if>
<if test="curriculumId !=null">
and curriculumId = #{curriculumId}
</if>
<if test="state !=null">
and state = #{state}
</if>
<if test="timeNum !=null">
and timeNum = #{timeNum}
</if>
<if test="timeNumMax !=null">
and timeNum <![CDATA[ <= ]]> #{timeNumMax}
</if>
<if test="timeNumMin !=null">
and timeNum <![CDATA[ >= ]]> #{timeNumMin}
</if>
<if test="content !=null">
and content like CONCAT('%', #{content}, '%')
</if>
<if test="remarks !=null">
and remarks like CONCAT('%', #{remarks}, '%')
</if>
</where>
</select>
<select id="getRecordbyPrimary" resultType="com.lxq.model.object.Record">
select * from record
<where>
<if test="time !=null">
and time = #{time}
</if>
<if test="teacherId !=null">
and teacherId = #{teacherId}
</if>
<if test="userId !=null">
and userId = #{userId}
</if>
<if test="curriculumId !=null">
and curriculumId = #{curriculumId}
</if>
</where>
</select>
<insert id="addRecord" parameterType="com.lxq.model.object.Record">
insert into record(teacherId,userId,curriculumId,content,state,remarks,time,timeNum)
values(#{teacherId},#{userId},#{curriculumId},#{content},#{state},#{remarks},#{time},#{timeNum})
</insert>
<delete id="delRecord" parameterType="com.lxq.model.object.Record">
delete from record
where id = #{id}
</delete>
<update id="updateRecord" parameterType="com.lxq.model.object.Record">
update record
<set>
<if test="teacherId !=null">
teacherId = #{teacherId},
</if>
<if test="userId !=null">
userId = #{userId},
</if>
<if test="curriculumId !=null">
curriculumId = #{curriculumId},
</if>
<if test="content !=null">
content = #{content},
</if>
<if test="state !=null">
state = #{state},
</if>
<if test="remarks !=null">
remarks = #{remarks},
</if>
<if test="timeNum !=null">
timeNum = #{timeNum},
</if>
<if test="time !=null">
time = #{time},
</if>
</set>
where id = #{id}
</update>
</mapper>

View File

@ -0,0 +1,98 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.lxq.model.dao.UserDAO">
<select id="getAllUser" resultType="com.lxq.model.object.User">
select * from user
<where>
<if test="userId !=null">
and userId = #{userId}
</if>
<if test="userAccount !=null">
and userAccount like CONCAT('%', #{userAccount}, '%')
</if>
<if test="userName !=null">
and userName like CONCAT('%', #{userName}, '%')
</if>
<if test="userPw !=null">
and userPw = #{userPw}
</if>
<if test="userLv !=null">
and userLv = #{userLv}
</if>
<if test="userSex !=null">
and userSex = #{userSex}
</if>
<if test="userIphone !=null">
and userIphone like CONCAT('%', #{userIphone}, '%')
</if>
</where>
</select>
<select id="getUser" resultType="com.lxq.model.object.User">
select * from user
<where>
<if test="userId !=null">
and userId = #{userId}
</if>
<if test="userAccount !=null">
and userAccount = #{userAccount}
</if>
<if test="userName !=null">
and userName like CONCAT('%', #{userName}, '%')
</if>
<if test="userPw !=null">
and userPw = #{userPw}
</if>
<if test="userLv !=null">
and userLv = #{userLv}
</if>
<if test="userSex !=null">
and userSex = #{userSex}
</if>
<if test="userIphone !=null">
and userIphone like CONCAT('%', #{userIphone}, '%')
</if>
</where>
</select>
<select id="getUserByAccount" resultType="com.lxq.model.object.User">
select * from user where userAccount = #{userAccount}
</select>
<insert id="addUser" parameterType="com.lxq.model.object.User">
insert into user(userAccount,userName,userPw,userLv,userSex,userIphone)
values(#{userAccount},#{userName},#{userPw},#{userLv},#{userSex},#{userIphone})
</insert>
<delete id="delUser" parameterType="com.lxq.model.object.User">
delete from user
where userAccount = #{userAccount}
</delete>
<update id="updateUser" parameterType="com.lxq.model.object.User">
update user
<set>
<if test="userName !=null">
userName = #{userName},
</if>
<if test="userPw !=null">
userPw = #{userPw},
</if>
<if test="userLv !=null">
userLv = #{userLv},
</if>
<if test="userSex !=null">
userSex = #{userSex},
</if>
<if test="userIphone !=null">
userIphone = #{userIphone},
</if>
</set>
where userId = #{userId}
</update>
</mapper>

View File

@ -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%;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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; } }

View File

@ -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;
}
}

View File

@ -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;
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;}

View File

@ -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;
}
}

View File

@ -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;
}

View File

@ -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;
}
}

View File

@ -0,0 +1 @@
130

Binary file not shown.

After

Width:  |  Height:  |  Size: 520 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 822 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 217 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 159 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 313 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 KiB

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" baseProfile="full" width="24" height="24" viewBox="0 0 24.00 24.00" enable-background="new 0 0 24.00 24.00" xml:space="preserve">
<path fill="#ffffff" fill-opacity="1" stroke-width="0.2" stroke-linejoin="round" d="M 16.4156,18.4171C 16.02,16.48 15.5222,14.7333 14.9756,13.1744C 15.4822,13.102 16.0134,13.0607 16.5756,13.0607L 16.5956,13.0607L 16.5978,13.0607L 16.5978,13.0607C 17.5289,13.0607 18.5511,13.1765 19.66,13.4285C 19.2756,15.4913 18.0822,17.268 16.4156,18.4171 Z M 12,19.8025C 10.2644,19.8025 8.66222,19.2282 7.36445,18.2647C 7.64001,17.81 8.23335,16.938 9.17557,16.0362C 10.1445,15.1073 11.4822,14.1513 13.2289,13.5822C 13.8222,15.2467 14.36,17.1496 14.7689,19.2913C 13.9067,19.6198 12.9756,19.8025 12,19.8025 Z M 4.19779,12.0005C 4.19779,11.9638 4.20001,11.9262 4.20224,11.8878C 4.42446,11.896 4.70888,11.9033 5.05334,11.9033L 5.05556,11.9033C 6.62446,11.8929 9.36223,11.7618 12.1378,10.886C 12.2889,11.2165 12.4378,11.5609 12.5867,11.9187C 10.7333,12.5385 9.27333,13.5258 8.19334,14.5091C 7.15555,15.4558 6.45335,16.3931 6.04221,17.0193C 4.89557,15.6598 4.19779,13.9134 4.19779,12.0005 Z M 8.55334,5.01155C 9.09557,5.65133 10.18,7.05799 11.3378,9.2549C 8.98224,9.95599 6.61112,10.1204 5.17557,10.12C 5.13556,10.12 5.09557,10.12 5.05556,10.1196L 5.05334,10.1196C 4.81112,10.1196 4.60444,10.116 4.4311,10.1105C 4.99111,7.87068 6.52445,6.01556 8.55334,5.01155 Z M 12,4.19845C 13.84,4.19845 15.5289,4.84179 16.8645,5.91289C 15.8422,7.13712 14.4911,8.02424 13.0333,8.65022C 12.0089,6.66867 11.0178,5.25113 10.3422,4.38446C 10.8778,4.26578 11.4311,4.19845 12,4.19845 Z M 18.1267,7.18467C 19.1022,8.42355 19.7133,9.95778 19.7911,11.6331C 18.6622,11.3938 17.5956,11.2771 16.6,11.2771L 16.6,11.2767L 16.5933,11.2767C 15.7933,11.2767 15.0422,11.3493 14.3333,11.4749C 14.16,11.0531 13.9867,10.6482 13.8111,10.2602C 15.3889,9.56824 16.9022,8.58357 18.1267,7.18467 Z M 12,1.99999C 6.47556,2.00046 2.00001,6.47734 2.00001,12.0005C 2.00001,17.5227 6.47556,22 12,22C 17.5222,22 22,17.5227 22,12.0005C 22,6.47734 17.5222,2.00046 12,1.99999 Z "/>
</svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 264 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!--Generated by IJSVG (https://github.com/iconjar/IJSVG)-->
<g stroke-linecap="round" stroke-width="2" stroke="#FFF" fill="none" stroke-linejoin="round">
<path d="M10,13l-2.69032e-08,-3.59665e-08c1.65403,2.21125 4.78747,2.66297 6.99872,1.00893c0.191404,-0.143172 0.372295,-0.299884 0.541282,-0.468932l3,-3l2.12649e-07,-2.20172e-07c1.91839,-1.98626 1.86338,-5.15161 -0.122882,-7.07c-1.93762,-1.87141 -5.0095,-1.87141 -6.94712,4.25299e-07l-1.72,1.71"/>
<path d="M14,11l-5.64091e-08,-7.54125e-08c-1.65403,-2.21125 -4.78747,-2.66297 -6.99872,-1.00893c-0.191404,0.143172 -0.372295,0.299884 -0.541282,0.468932l-3,3l-1.02237e-07,1.05854e-07c-1.91839,1.98626 -1.86338,5.15161 0.122882,7.07c1.93762,1.87141 5.0095,1.87141 6.94712,-2.04474e-07l1.71,-1.71"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 945 B

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!--Generated by IJSVG (https://github.com/iconjar/IJSVG)-->
<path d="M0,0h24v24h-24Z" fill="none"/>
<path fill="#ffffff" d="M6.94,5l1.15814e-08,-2.34374e-05c-0.000539341,1.10457 -0.896407,1.99956 -2.00098,1.99902c-1.10457,-0.000539341 -1.99956,-0.896407 -1.99902,-2.00098l-1.16667e-08,2.36123e-05c0.000539244,-1.10457 0.896407,-1.99956 2.00098,-1.99902c1.10457,0.000539244 1.99956,0.896407 1.99902,2.00098Zm0.06,3.48h-4v12.52h4v-12.52Zm6.32,0h-3.98v12.52h3.94v-6.57c0,-3.66 4.77,-4 4.77,0v6.57h3.95v-7.93c0,-6.17 -7.06,-5.94 -8.72,-2.91l0.04,-1.68Z"/>
</svg>

After

Width:  |  Height:  |  Size: 728 B

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="176.669px" height="202.261px" viewBox="0 0 176.669 202.261" enable-background="new 0 0 176.669 202.261" xml:space="preserve">
<path fill="#FFFFFF" d="M172.389,196.708c0.08-0.093,0.162-0.186,0.239-0.282c0.118-0.147,0.229-0.298,0.336-0.449 c0.08-0.112,0.16-0.225,0.235-0.34c0.091-0.141,0.176-0.283,0.26-0.428c0.08-0.139,0.161-0.277,0.234-0.421 c0.065-0.127,0.126-0.257,0.187-0.387c0.076-0.164,0.15-0.33,0.219-0.501c0.047-0.118,0.089-0.238,0.132-0.359 c0.064-0.181,0.126-0.363,0.18-0.55c0.036-0.123,0.066-0.248,0.097-0.373c0.045-0.182,0.089-0.362,0.123-0.548 c0.028-0.15,0.048-0.302,0.069-0.452c0.021-0.161,0.047-0.321,0.061-0.485c0.019-0.192,0.024-0.387,0.03-0.581 c0.003-0.102,0.015-0.201,0.015-0.304c0-0.026-0.003-0.053-0.003-0.079c-0.002-0.216-0.018-0.432-0.033-0.646 c-0.009-0.113-0.012-0.229-0.022-0.341c-0.021-0.19-0.056-0.38-0.087-0.569c-0.023-0.138-0.041-0.276-0.069-0.411 c-0.029-0.139-0.07-0.275-0.106-0.413c-0.047-0.184-0.092-0.368-0.147-0.547c-0.03-0.091-0.067-0.18-0.099-0.27 c-0.078-0.223-0.158-0.444-0.252-0.658c-0.031-0.072-0.069-0.142-0.103-0.213c-0.106-0.229-0.216-0.454-0.339-0.674 c-0.01-0.017-0.017-0.036-0.027-0.054l-38.103-67.116c8.611-12.145,13.546-26.909,13.546-42.574 c0-40.556-32.994-73.549-73.55-73.549c-23.13,0-44.457,10.567-58.505,28.992C7.065,44.03,1.864,59.438,1.864,75.683v114.565 c0,5.455,4.421,9.879,9.877,9.879h153.186c0.026,0,0.053-0.004,0.08-0.004c0.217-0.002,0.434-0.018,0.65-0.033 c0.112-0.008,0.224-0.011,0.334-0.022c0.197-0.021,0.392-0.056,0.588-0.09c0.131-0.021,0.263-0.038,0.392-0.065 c0.148-0.031,0.296-0.075,0.444-0.114c0.172-0.045,0.346-0.086,0.514-0.14c0.104-0.033,0.207-0.076,0.311-0.113 c0.208-0.074,0.415-0.147,0.616-0.235c0.086-0.037,0.17-0.082,0.255-0.122c0.213-0.101,0.426-0.203,0.63-0.317 c0.021-0.012,0.042-0.021,0.063-0.032c0.08-0.046,0.152-0.099,0.231-0.146c0.176-0.107,0.352-0.215,0.52-0.331 c0.131-0.091,0.255-0.188,0.38-0.284c0.124-0.096,0.248-0.189,0.368-0.29c0.144-0.121,0.279-0.249,0.415-0.377 c0.092-0.088,0.186-0.175,0.275-0.267C172.13,197.002,172.261,196.856,172.389,196.708z M32.615,43.104 C42.896,29.621,58.494,21.889,75.41,21.889c29.661,0,53.794,24.132,53.794,53.794c0,8.06-1.787,15.793-5.036,22.765L97.713,51.849 c-2.692-4.746-8.724-6.405-13.468-3.713c-3.203,1.817-5,5.16-5,8.599c0,1.652,0.414,3.327,1.287,4.868l30.761,54.183 c-5.358,4.797-11.729,8.569-18.865,10.947c-5.175,1.723-7.972,7.314-6.249,12.494c1.723,5.176,7.316,7.973,12.492,6.248 c8.352-2.781,15.938-6.957,22.545-12.211l26.745,47.107H21.616V75.683C21.616,63.803,25.421,52.537,32.615,43.104z"/>
</svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 MiB

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,4 @@
// Parallax Code
var scene = document.getElementById('scene');
var parallax = new Parallax(scene);

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,3 @@
// Parallax Code
var scene = document.getElementById('scene');
var parallax = new Parallax(scene);

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,186 @@
/* Modernizr 2.8.3 (Custom Build) | MIT & BSD
* Build: http://modernizr.com/download/#-cssgradients-prefixes
*/
;window.Modernizr=function(a,b,c){function u(a){i.cssText=a}function v(a,b){return u(l.join(a+";")+(b||""))}function w(a,b){return typeof a===b}function x(a,b){return!!~(""+a).indexOf(b)}function y(a,b,d){for(var e in a){var f=b[a[e]];if(f!==c)return d===!1?a[e]:w(f,"function")?f.bind(d||b):f}return!1}var d="2.8.3",e={},f=b.documentElement,g="modernizr",h=b.createElement(g),i=h.style,j,k={}.toString,l=" -webkit- -moz- -o- -ms- ".split(" "),m={},n={},o={},p=[],q=p.slice,r,s={}.hasOwnProperty,t;!w(s,"undefined")&&!w(s.call,"undefined")?t=function(a,b){return s.call(a,b)}:t=function(a,b){return b in a&&w(a.constructor.prototype[b],"undefined")},Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!="function")throw new TypeError;var d=q.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,g=c.apply(f,d.concat(q.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(q.call(arguments)))};return e}),m.cssgradients=function(){var a="background-image:",b="gradient(linear,left top,right bottom,from(#9f9),to(white));",c="linear-gradient(left top,#9f9, white);";return u((a+"-webkit- ".split(" ").join(b+a)+l.join(c+a)).slice(0,-a.length)),x(i.backgroundImage,"gradient")};for(var z in m)t(m,z)&&(r=z.toLowerCase(),e[r]=m[z](),p.push((e[r]?"":"no-")+r));return e.addTest=function(a,b){if(typeof a=="object")for(var d in a)t(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return e;b=typeof b=="function"?b():b,typeof enableClasses!="undefined"&&enableClasses&&(f.className+=" "+(b?"":"no-")+a),e[a]=b}return e},u(""),h=j=null,e._version=d,e._prefixes=l,e}(this,this.document);
/**
* jQuery Gradientify plugin 1.0.0
*
* Provides animating CSS gradients.
* Based on http://opticalcortex.com/animating-css-gradients/ by Mike Byrne.
*
* @author Codefog <http://codefog.pl>
* @author Kamil Kuzminski <kamil.kuzminski@codefog.pl>
* @license MIT License
* @see http://opticalcortex.com/animating-css-gradients/
*/
(function ($, window, document, undefined) {
'use strict';
// Create the defaults once
var pluginName = 'gradientify',
defaults = {
angle: '0deg', // Gradient angle
fps: 60, // Frames per second
gradients: {}, // Gradients
transition_time: 8 // Transition time
};
// The actual plugin constructor
function Plugin(element, options) {
this.element = element;
this.settings = $.extend({}, defaults, options);
this._defaults = defaults;
this._name = pluginName;
this.init();
}
// Avoid Plugin.prototype conflicts
$.extend(Plugin.prototype, {
init: function () {
// Return if the browser does not support CSS gradients
if (!Modernizr.cssgradients) {
return;
}
// Where we are in the gradients array
this.currentIndex = 0;
// What index of the gradients array is next
this.nextIndex = 1;
// Steps counter
this.steps_count = 0;
// Total amount of steps
this.steps_total = Math.round(this.settings.transition_time * this.settings.fps);
// How much to alter each rgb value
this.rgb_steps = {
start: [0, 0, 0],
stop: [0, 0, 0]
};
// The current rgb values, gets altered by rgb steps on each interval
this.rgb_values = {
start: [0, 0, 0],
stop: [0, 0, 0]
};
// For looping through adding styles
this.prefixes = ['-webkit-', '-moz-', '-o-', '-ms-', ''];
// Color helpers
this.color1 = null;
this.color2 = null;
// Initial step calculation
this.calculateSteps();
// Launch the timer
setInterval(function() {
this.updateGradient.apply(this);
}.bind(this), Math.round(1000 / this.settings.fps));
},
/**
* Set next current and next index of gradients array
*
* @param {int} num
*
* @returns {int}
*/
setNext: function (num) {
return (num + 1 < this.settings.gradients.length) ? num + 1 : 0;
},
/**
* Work out how big each rgb step is
*
* @param {int} a
* @param {int} b
*
* @return {int}
*/
calculateStepSize: function (a, b) {
return (a - b) / this.steps_total;
},
/**
* Populate the rgb_values and rgb_steps objects
*/
calculateSteps: function () {
for (var key in this.rgb_values) {
if (this.rgb_values.hasOwnProperty(key)) {
for (var i = 0; i < 3; i++) {
this.rgb_values[key][i] = this.settings.gradients[this.currentIndex][key][i];
this.rgb_steps[key][i] = this.calculateStepSize(this.settings.gradients[this.nextIndex][key][i], this.rgb_values[key][i]);
}
}
}
},
/**
* Update current RGB values, update DOM element with new CSS background
*/
updateGradient: function () {
var i;
// Update the current RGB values
for (var key in this.rgb_values) {
if (this.rgb_values.hasOwnProperty(key)) {
for (i = 0; i < 3; i++) {
this.rgb_values[key][i] += this.rgb_steps[key][i];
}
}
}
// Generate CSS RGB values
var t_color1 = 'rgb(' + (this.rgb_values.start[0] | 0) + ',' + (this.rgb_values.start[1] | 0) + ',' + (this.rgb_values.start[2] | 0) + ')';
var t_color2 = 'rgb(' + (this.rgb_values.stop[0] | 0) + ',' + (this.rgb_values.stop[1] | 0) + ',' + (this.rgb_values.stop[2] | 0) + ')';
// Has anything changed on this iteration?
if (t_color1 != this.color1 || t_color2 != this.color2) {
// Update cols strings
this.color1 = t_color1;
this.color2 = t_color2;
// Update DOM element style attribute
$(this.element).css('background-image', '-webkit-gradient(linear, left bottom, right top, from(' + this.color1 + '), to(' + this.color2 + '))');
for (i = 0; i < 4; i++) {
$(this.element).css('background-image', this.prefixes[i] + 'linear-gradient(' + this.settings.angle + ', ' + this.color1 + ', ' + this.color2 + ')');
}
}
// We did another step
this.steps_count++;
// Did we do too many steps?
if (this.steps_count > this.steps_total) {
// Reset steps count
this.steps_count = 0;
// Set new indexes
this.currentIndex = this.setNext(this.currentIndex);
this.nextIndex = this.setNext(this.nextIndex);
// Calculate steps
this.calculateSteps();
}
}
});
// A really lightweight plugin wrapper around the constructor,
// preventing against multiple instantiations
$.fn[pluginName] = function (options) {
return this.each(function () {
if (!$.data(this, 'plugin_' + pluginName)) {
$.data(this, 'plugin_' + pluginName, new Plugin(this, options));
}
});
};
})(jQuery, window, document);

View File

@ -0,0 +1,487 @@
/*! layer-v2.4 弹层组件 License LGPL http://layer.layui.com/ By 贤心 */
;!function (a, b) {
"use strict";
var c, d, e = {
getPath: function () {
var a = document.scripts, b = a[a.length - 1], c = b.src;
if (!b.getAttribute("merge")) return c.substring(0, c.lastIndexOf("/") + 1)
}(),
enter: function (a) {
13 === a.keyCode && a.preventDefault()
},
config: {},
end: {},
btn: ["&#x786E;&#x5B9A;", "&#x53D6;&#x6D88;"],
type: ["dialog", "page", "iframe", "loading", "tips"]
}, f = {
v: "2.4", ie6: !!a.ActiveXObject && !a.XMLHttpRequest, index: 0, path: e.getPath, config: function (a, b) {
var d = 0;
return a = a || {}, f.cache = e.config = c.extend(e.config, a), f.path = e.config.path || f.path, "string" == typeof a.extend && (a.extend = [a.extend]), f.use("skin/layer.css", a.extend && a.extend.length > 0 ? function g() {
var c = a.extend;
f.use(c[c[d] ? d : d - 1], d < c.length ? function () {
return ++d, g
}() : b)
}() : b), this
}, use: function (a, b, d) {
var e = c("head")[0], a = a.replace(/\s/g, ""), g = /\.css$/.test(a),
h = document.createElement(g ? "link" : "script"), i = "layui_layer_" + a.replace(/\.|\//g, "");
return f.path ? (g && (h.rel = "stylesheet"), h[g ? "href" : "src"] = /^http:\/\//.test(a) ? a : f.path + a, h.id = i, c("#" + i)[0] || e.appendChild(h), function j() {
(g ? 1989 === parseInt(c("#" + i).css("width")) : f[d || i]) ? function () {
b && b();
try {
g || e.removeChild(h)
} catch (a) {
}
}() : setTimeout(j, 100)
}(), this) : void 0
}, ready: function (a, b) {
var d = "function" == typeof a;
return d && (b = a), f.config(c.extend(e.config, function () {
return d ? {} : {path: a}
}()), b), this
}, alert: function (a, b, d) {
var e = "function" == typeof b;
return e && (d = b), f.open(c.extend({content: a, yes: d}, e ? {} : b))
}, confirm: function (a, b, d, g) {
var h = "function" == typeof b;
return h && (g = d, d = b), f.open(c.extend({content: a, btn: e.btn, yes: d, btn2: g}, h ? {} : b))
}, msg: function (a, d, g) {
var i = "function" == typeof d, j = e.config.skin, k = (j ? j + " " + j + "-msg" : "") || "layui-layer-msg",
l = h.anim.length - 1;
return i && (g = d), f.open(c.extend({
content: a,
time: 3e3,
shade: !1,
skin: k,
title: !1,
closeBtn: !1,
btn: !1,
end: g
}, i && !e.config.skin ? {skin: k + " layui-layer-hui", shift: l} : function () {
return d = d || {}, (-1 === d.icon || d.icon === b && !e.config.skin) && (d.skin = k + " " + (d.skin || "layui-layer-hui")), d
}()))
}, load: function (a, b) {
return f.open(c.extend({type: 3, icon: a || 0, shade: .01}, b))
}, tips: function (a, b, d) {
return f.open(c.extend({
type: 4,
content: [a, b],
closeBtn: !1,
time: 3e3,
shade: !1,
fix: !1,
maxWidth: 210
}, d))
}
}, g = function (a) {
var b = this;
b.index = ++f.index, b.config = c.extend({}, b.config, e.config, a), b.creat()
};
g.pt = g.prototype;
var h = ["layui-layer", ".layui-layer-title", ".layui-layer-main", ".layui-layer-dialog", "layui-layer-iframe", "layui-layer-content", "layui-layer-btn", "layui-layer-close"];
h.anim = ["layer-anim", "layer-anim-01", "layer-anim-02", "layer-anim-03", "layer-anim-04", "layer-anim-05", "layer-anim-06"], g.pt.config = {
type: 0,
shade: .3,
fix: !0,
move: h[1],
title: "&#x4FE1;&#x606F;",
offset: "auto",
area: "auto",
closeBtn: 1,
time: 0,
zIndex: 19891014,
maxWidth: 360,
shift: 0,
icon: -1,
scrollbar: !0,
tips: 2
}, g.pt.vessel = function (a, b) {
var c = this, d = c.index, f = c.config, g = f.zIndex + d, i = "object" == typeof f.title,
j = f.maxmin && (1 === f.type || 2 === f.type),
k = f.title ? '<div class="layui-layer-title" style="' + (i ? f.title[1] : "") + '">' + (i ? f.title[0] : f.title) + "</div>" : "";
return f.zIndex = g, b([f.shade ? '<div class="layui-layer-shade" id="layui-layer-shade' + d + '" times="' + d + '" style="' + ("z-index:" + (g - 1) + "; background-color:" + (f.shade[1] || "#000") + "; opacity:" + (f.shade[0] || f.shade) + "; filter:alpha(opacity=" + (100 * f.shade[0] || 100 * f.shade) + ");") + '"></div>' : "", '<div class="' + h[0] + (" layui-layer-" + e.type[f.type]) + (0 != f.type && 2 != f.type || f.shade ? "" : " layui-layer-border") + " " + (f.skin || "") + '" id="' + h[0] + d + '" type="' + e.type[f.type] + '" times="' + d + '" showtime="' + f.time + '" conType="' + (a ? "object" : "string") + '" style="z-index: ' + g + "; width:" + f.area[0] + ";height:" + f.area[1] + (f.fix ? "" : ";position:absolute;") + '">' + (a && 2 != f.type ? "" : k) + '<div id="' + (f.id || "") + '" class="layui-layer-content' + (0 == f.type && -1 !== f.icon ? " layui-layer-padding" : "") + (3 == f.type ? " layui-layer-loading" + f.icon : "") + '">' + (0 == f.type && -1 !== f.icon ? '<i class="layui-layer-ico layui-layer-ico' + f.icon + '"></i>' : "") + (1 == f.type && a ? "" : f.content || "") + '</div><span class="layui-layer-setwin">' + function () {
var a = j ? '<a class="layui-layer-min" href="javascript:;"><cite></cite></a><a class="layui-layer-ico layui-layer-max" href="javascript:;"></a>' : "";
return f.closeBtn && (a += '<a class="layui-layer-ico ' + h[7] + " " + h[7] + (f.title ? f.closeBtn : 4 == f.type ? "1" : "2") + '" href="javascript:;"></a>'), a
}() + "</span>" + (f.btn ? function () {
var a = "";
"string" == typeof f.btn && (f.btn = [f.btn]);
for (var b = 0, c = f.btn.length; c > b; b++) a += '<a class="' + h[6] + b + '">' + f.btn[b] + "</a>";
return '<div class="' + h[6] + '">' + a + "</div>"
}() : "") + "</div>"], k), c
}, g.pt.creat = function () {
var a = this, b = a.config, g = a.index, i = b.content, j = "object" == typeof i;
if (!c("#" + b.id)[0]) {
switch ("string" == typeof b.area && (b.area = "auto" === b.area ? ["", ""] : [b.area, ""]), b.type) {
case 0:
b.btn = "btn" in b ? b.btn : e.btn[0], f.closeAll("dialog");
break;
case 2:
var i = b.content = j ? b.content : [b.content || "http://layer.layui.com", "auto"];
b.content = '<iframe scrolling="' + (b.content[1] || "auto") + '" allowtransparency="true" id="' + h[4] + g + '" name="' + h[4] + g + '" onload="this.className=\'\';" class="layui-layer-load" frameborder="0" src="' + b.content[0] + '"></iframe>';
break;
case 3:
b.title = !1, b.closeBtn = !1, -1 === b.icon && 0 === b.icon, f.closeAll("loading");
break;
case 4:
j || (b.content = [b.content, "body"]), b.follow = b.content[1], b.content = b.content[0] + '<i class="layui-layer-TipsG"></i>', b.title = !1, b.tips = "object" == typeof b.tips ? b.tips : [b.tips, !0], b.tipsMore || f.closeAll("tips")
}
a.vessel(j, function (d, e) {
c("body").append(d[0]), j ? function () {
2 == b.type || 4 == b.type ? function () {
c("body").append(d[1])
}() : function () {
i.parents("." + h[0])[0] || (i.show().addClass("layui-layer-wrap").wrap(d[1]), c("#" + h[0] + g).find("." + h[5]).before(e))
}()
}() : c("body").append(d[1]), a.layero = c("#" + h[0] + g), b.scrollbar || h.html.css("overflow", "hidden").attr("layer-full", g)
}).auto(g), 2 == b.type && f.ie6 && a.layero.find("iframe").attr("src", i[0]), c(document).off("keydown", e.enter).on("keydown", e.enter), a.layero.on("keydown", function (a) {
c(document).off("keydown", e.enter)
}), 4 == b.type ? a.tips() : a.offset(), b.fix && d.on("resize", function () {
a.offset(), (/^\d+%$/.test(b.area[0]) || /^\d+%$/.test(b.area[1])) && a.auto(g), 4 == b.type && a.tips()
}), b.time <= 0 || setTimeout(function () {
f.close(a.index)
}, b.time), a.move().callback(), h.anim[b.shift] && a.layero.addClass(h.anim[b.shift])
}
}, g.pt.auto = function (a) {
function b(a) {
a = g.find(a), a.height(i[1] - j - k - 2 * (0 | parseFloat(a.css("padding"))))
}
var e = this, f = e.config, g = c("#" + h[0] + a);
"" === f.area[0] && f.maxWidth > 0 && (/MSIE 7/.test(navigator.userAgent) && f.btn && g.width(g.innerWidth()), g.outerWidth() > f.maxWidth && g.width(f.maxWidth));
var i = [g.innerWidth(), g.innerHeight()], j = g.find(h[1]).outerHeight() || 0,
k = g.find("." + h[6]).outerHeight() || 0;
switch (f.type) {
case 2:
b("iframe");
break;
default:
"" === f.area[1] ? f.fix && i[1] >= d.height() && (i[1] = d.height(), b("." + h[5])) : b("." + h[5])
}
return e
}, g.pt.offset = function () {
var a = this, b = a.config, c = a.layero, e = [c.outerWidth(), c.outerHeight()],
f = "object" == typeof b.offset;
a.offsetTop = (d.height() - e[1]) / 2, a.offsetLeft = (d.width() - e[0]) / 2, f ? (a.offsetTop = b.offset[0], a.offsetLeft = b.offset[1] || a.offsetLeft) : "auto" !== b.offset && (a.offsetTop = b.offset, "rb" === b.offset && (a.offsetTop = d.height() - e[1], a.offsetLeft = d.width() - e[0])), b.fix || (a.offsetTop = /%$/.test(a.offsetTop) ? d.height() * parseFloat(a.offsetTop) / 100 : parseFloat(a.offsetTop), a.offsetLeft = /%$/.test(a.offsetLeft) ? d.width() * parseFloat(a.offsetLeft) / 100 : parseFloat(a.offsetLeft), a.offsetTop += d.scrollTop(), a.offsetLeft += d.scrollLeft()), c.css({
top: a.offsetTop,
left: a.offsetLeft
})
}, g.pt.tips = function () {
var a = this, b = a.config, e = a.layero, f = [e.outerWidth(), e.outerHeight()], g = c(b.follow);
g[0] || (g = c("body"));
var i = {width: g.outerWidth(), height: g.outerHeight(), top: g.offset().top, left: g.offset().left},
j = e.find(".layui-layer-TipsG"), k = b.tips[0];
b.tips[1] || j.remove(), i.autoLeft = function () {
i.left + f[0] - d.width() > 0 ? (i.tipLeft = i.left + i.width - f[0], j.css({
right: 12,
left: "auto"
})) : i.tipLeft = i.left
}, i.where = [function () {
i.autoLeft(), i.tipTop = i.top - f[1] - 10, j.removeClass("layui-layer-TipsB").addClass("layui-layer-TipsT").css("border-right-color", b.tips[1])
}, function () {
i.tipLeft = i.left + i.width + 10, i.tipTop = i.top, j.removeClass("layui-layer-TipsL").addClass("layui-layer-TipsR").css("border-bottom-color", b.tips[1])
}, function () {
i.autoLeft(), i.tipTop = i.top + i.height + 10, j.removeClass("layui-layer-TipsT").addClass("layui-layer-TipsB").css("border-right-color", b.tips[1])
}, function () {
i.tipLeft = i.left - f[0] - 10, i.tipTop = i.top, j.removeClass("layui-layer-TipsR").addClass("layui-layer-TipsL").css("border-bottom-color", b.tips[1])
}], i.where[k - 1](), 1 === k ? i.top - (d.scrollTop() + f[1] + 16) < 0 && i.where[2]() : 2 === k ? d.width() - (i.left + i.width + f[0] + 16) > 0 || i.where[3]() : 3 === k ? i.top - d.scrollTop() + i.height + f[1] + 16 - d.height() > 0 && i.where[0]() : 4 === k && f[0] + 16 - i.left > 0 && i.where[1](), e.find("." + h[5]).css({
"background-color": b.tips[1],
"padding-right": b.closeBtn ? "30px" : ""
}), e.css({left: i.tipLeft - (b.fix ? d.scrollLeft() : 0), top: i.tipTop - (b.fix ? d.scrollTop() : 0)})
}, g.pt.move = function () {
var a = this, b = a.config, e = {
setY: 0, moveLayer: function () {
var a = e.layero, b = parseInt(a.css("margin-left")), c = parseInt(e.move.css("left"));
0 === b || (c -= b), "fixed" !== a.css("position") && (c -= a.parent().offset().left, e.setY = 0), a.css({
left: c,
top: parseInt(e.move.css("top")) - e.setY
})
}
}, f = a.layero.find(b.move);
return b.move && f.attr("move", "ok"), f.css({cursor: b.move ? "move" : "auto"}), c(b.move).on("mousedown", function (a) {
if (a.preventDefault(), "ok" === c(this).attr("move")) {
e.ismove = !0, e.layero = c(this).parents("." + h[0]);
var f = e.layero.offset().left, g = e.layero.offset().top, i = e.layero.outerWidth() - 6,
j = e.layero.outerHeight() - 6;
c("#layui-layer-moves")[0] || c("body").append('<div id="layui-layer-moves" class="layui-layer-moves" style="left:' + f + "px; top:" + g + "px; width:" + i + "px; height:" + j + 'px; z-index:2147483584"></div>'), e.move = c("#layui-layer-moves"), b.moveType && e.move.css({visibility: "hidden"}), e.moveX = a.pageX - e.move.position().left, e.moveY = a.pageY - e.move.position().top, "fixed" !== e.layero.css("position") || (e.setY = d.scrollTop())
}
}), c(document).mousemove(function (a) {
if (e.ismove) {
var c = a.pageX - e.moveX, f = a.pageY - e.moveY;
if (a.preventDefault(), !b.moveOut) {
e.setY = d.scrollTop();
var g = d.width() - e.move.outerWidth(), h = e.setY;
0 > c && (c = 0), c > g && (c = g), h > f && (f = h), f > d.height() - e.move.outerHeight() + e.setY && (f = d.height() - e.move.outerHeight() + e.setY)
}
e.move.css({left: c, top: f}), b.moveType && e.moveLayer(), c = f = g = h = null
}
}).mouseup(function () {
try {
e.ismove && (e.moveLayer(), e.move.remove(), b.moveEnd && b.moveEnd()), e.ismove = !1
} catch (a) {
e.ismove = !1
}
}), a
}, g.pt.callback = function () {
function a() {
var a = g.cancel && g.cancel(b.index, d);
a === !1 || f.close(b.index)
}
var b = this, d = b.layero, g = b.config;
b.openLayer(), g.success && (2 == g.type ? d.find("iframe").on("load", function () {
g.success(d, b.index)
}) : g.success(d, b.index)), f.ie6 && b.IE6(d), d.find("." + h[6]).children("a").on("click", function () {
var a = c(this).index();
if (0 === a) g.yes ? g.yes(b.index, d) : g.btn1 ? g.btn1(b.index, d) : f.close(b.index); else {
var e = g["btn" + (a + 1)] && g["btn" + (a + 1)](b.index, d);
e === !1 || f.close(b.index)
}
}), d.find("." + h[7]).on("click", a), g.shadeClose && c("#layui-layer-shade" + b.index).on("click", function () {
f.close(b.index)
}), d.find(".layui-layer-min").on("click", function () {
var a = g.min && g.min(d);
a === !1 || f.min(b.index, g)
}), d.find(".layui-layer-max").on("click", function () {
c(this).hasClass("layui-layer-maxmin") ? (f.restore(b.index), g.restore && g.restore(d)) : (f.full(b.index, g), setTimeout(function () {
g.full && g.full(d)
}, 100))
}), g.end && (e.end[b.index] = g.end)
}, e.reselect = function () {
c.each(c("select"), function (a, b) {
var d = c(this);
d.parents("." + h[0])[0] || 1 == d.attr("layer") && c("." + h[0]).length < 1 && d.removeAttr("layer").show(), d = null
})
}, g.pt.IE6 = function (a) {
function b() {
a.css({top: f + (e.config.fix ? d.scrollTop() : 0)})
}
var e = this, f = a.offset().top;
b(), d.scroll(b), c("select").each(function (a, b) {
var d = c(this);
d.parents("." + h[0])[0] || "none" === d.css("display") || d.attr({layer: "1"}).hide(), d = null
})
}, g.pt.openLayer = function () {
var a = this;
f.zIndex = a.config.zIndex, f.setTop = function (a) {
var b = function () {
f.zIndex++, a.css("z-index", f.zIndex + 1)
};
return f.zIndex = parseInt(a[0].style.zIndex), a.on("mousedown", b), f.zIndex
}
}, e.record = function (a) {
var b = [a.width(), a.height(), a.position().top, a.position().left + parseFloat(a.css("margin-left"))];
a.find(".layui-layer-max").addClass("layui-layer-maxmin"), a.attr({area: b})
}, e.rescollbar = function (a) {
h.html.attr("layer-full") == a && (h.html[0].style.removeProperty ? h.html[0].style.removeProperty("overflow") : h.html[0].style.removeAttribute("overflow"), h.html.removeAttr("layer-full"))
}, a.layer = f, f.getChildFrame = function (a, b) {
return b = b || c("." + h[4]).attr("times"), c("#" + h[0] + b).find("iframe").contents().find(a)
}, f.getFrameIndex = function (a) {
return c("#" + a).parents("." + h[4]).attr("times")
}, f.iframeAuto = function (a) {
if (a) {
var b = f.getChildFrame("html", a).outerHeight(), d = c("#" + h[0] + a),
e = d.find(h[1]).outerHeight() || 0, g = d.find("." + h[6]).outerHeight() || 0;
d.css({height: b + e + g}), d.find("iframe").css({height: b})
}
}, f.iframeSrc = function (a, b) {
c("#" + h[0] + a).find("iframe").attr("src", b)
}, f.style = function (a, b) {
var d = c("#" + h[0] + a), f = d.attr("type"), g = d.find(h[1]).outerHeight() || 0,
i = d.find("." + h[6]).outerHeight() || 0;
(f === e.type[1] || f === e.type[2]) && (d.css(b), f === e.type[2] && d.find("iframe").css({height: parseFloat(b.height) - g - i}))
}, f.min = function (a, b) {
var d = c("#" + h[0] + a), g = d.find(h[1]).outerHeight() || 0;
e.record(d), f.style(a, {
width: 180,
height: g,
overflow: "hidden"
}), d.find(".layui-layer-min").hide(), "page" === d.attr("type") && d.find(h[4]).hide(), e.rescollbar(a)
}, f.restore = function (a) {
var b = c("#" + h[0] + a), d = b.attr("area").split(",");
b.attr("type");
f.style(a, {
width: parseFloat(d[0]),
height: parseFloat(d[1]),
top: parseFloat(d[2]),
left: parseFloat(d[3]),
overflow: "visible"
}), b.find(".layui-layer-max").removeClass("layui-layer-maxmin"), b.find(".layui-layer-min").show(), "page" === b.attr("type") && b.find(h[4]).show(), e.rescollbar(a)
}, f.full = function (a) {
var b, g = c("#" + h[0] + a);
e.record(g), h.html.attr("layer-full") || h.html.css("overflow", "hidden").attr("layer-full", a), clearTimeout(b), b = setTimeout(function () {
var b = "fixed" === g.css("position");
f.style(a, {
top: b ? 0 : d.scrollTop(),
left: b ? 0 : d.scrollLeft(),
width: d.width(),
height: d.height()
}), g.find(".layui-layer-min").hide()
}, 100)
}, f.title = function (a, b) {
var d = c("#" + h[0] + (b || f.index)).find(h[1]);
d.html(a)
}, f.close = function (a) {
var b = c("#" + h[0] + a), d = b.attr("type");
if (b[0]) {
if (d === e.type[1] && "object" === b.attr("conType")) {
b.children(":not(." + h[5] + ")").remove();
for (var g = 0; 2 > g; g++) b.find(".layui-layer-wrap").unwrap().hide()
} else {
if (d === e.type[2]) try {
var i = c("#" + h[4] + a)[0];
i.contentWindow.document.write(""), i.contentWindow.close(), b.find("." + h[5])[0].removeChild(i)
} catch (j) {
}
b[0].innerHTML = "", b.remove()
}
c("#layui-layer-moves, #layui-layer-shade" + a).remove(), f.ie6 && e.reselect(), e.rescollbar(a), c(document).off("keydown", e.enter), "function" == typeof e.end[a] && e.end[a](), delete e.end[a]
}
}, f.closeAll = function (a) {
c.each(c("." + h[0]), function () {
var b = c(this), d = a ? b.attr("type") === a : 1;
d && f.close(b.attr("times")), d = null
})
};
var i = f.cache || {}, j = function (a) {
return i.skin ? " " + i.skin + " " + i.skin + "-" + a : ""
};
f.prompt = function (a, b) {
a = a || {}, "function" == typeof a && (b = a);
var d,
e = 2 == a.formType ? '<textarea class="layui-layer-input">' + (a.value || "") + "</textarea>" : function () {
return '<input type="' + (1 == a.formType ? "password" : "text") + '" class="layui-layer-input" value="' + (a.value || "") + '">'
}();
return f.open(c.extend({
btn: ["&#x786E;&#x5B9A;", "&#x53D6;&#x6D88;"],
content: e,
skin: "layui-layer-prompt" + j("prompt"),
success: function (a) {
d = a.find(".layui-layer-input"), d.focus()
},
yes: function (c) {
var e = d.val();
"" === e ? d.focus() : e.length > (a.maxlength || 500) ? f.tips("&#x6700;&#x591A;&#x8F93;&#x5165;" + (a.maxlength || 500) + "&#x4E2A;&#x5B57;&#x6570;", d, {tips: 1}) : b && b(e, c, d)
}
}, a))
}, f.tab = function (a) {
a = a || {};
var b = a.tab || {};
return f.open(c.extend({
type: 1, skin: "layui-layer-tab" + j("tab"), title: function () {
var a = b.length, c = 1, d = "";
if (a > 0) for (d = '<span class="layui-layer-tabnow">' + b[0].title + "</span>"; a > c; c++) d += "<span>" + b[c].title + "</span>";
return d
}(), content: '<ul class="layui-layer-tabmain">' + function () {
var a = b.length, c = 1, d = "";
if (a > 0) for (d = '<li class="layui-layer-tabli xubox_tab_layer">' + (b[0].content || "no content") + "</li>"; a > c; c++) d += '<li class="layui-layer-tabli">' + (b[c].content || "no content") + "</li>";
return d
}() + "</ul>", success: function (b) {
var d = b.find(".layui-layer-title").children(), e = b.find(".layui-layer-tabmain").children();
d.on("mousedown", function (b) {
b.stopPropagation ? b.stopPropagation() : b.cancelBubble = !0;
var d = c(this), f = d.index();
d.addClass("layui-layer-tabnow").siblings().removeClass("layui-layer-tabnow"), e.eq(f).show().siblings().hide(), "function" == typeof a.change && a.change(f)
})
}
}, a))
}, f.photos = function (b, d, e) {
function g(a, b, c) {
var d = new Image;
return d.src = a, d.complete ? b(d) : (d.onload = function () {
d.onload = null, b(d)
}, void (d.onerror = function (a) {
d.onerror = null, c(a)
}))
}
var h = {};
if (b = b || {}, b.photos) {
var i = b.photos.constructor === Object, k = i ? b.photos : {}, l = k.data || [], m = k.start || 0;
if (h.imgIndex = (0 | m) + 1, b.img = b.img || "img", i) {
if (0 === l.length) return f.msg("&#x6CA1;&#x6709;&#x56FE;&#x7247;")
} else {
var n = c(b.photos), o = function () {
l = [], n.find(b.img).each(function (a) {
var b = c(this);
b.attr("layer-index", a), l.push({
alt: b.attr("alt"),
pid: b.attr("layer-pid"),
src: b.attr("layer-src") || b.attr("src"),
thumb: b.attr("src")
})
})
};
if (o(), 0 === l.length) return;
if (d || n.on("click", b.img, function () {
var a = c(this), d = a.attr("layer-index");
f.photos(c.extend(b, {photos: {start: d, data: l, tab: b.tab}, full: b.full}), !0), o()
}), !d) return
}
h.imgprev = function (a) {
h.imgIndex--, h.imgIndex < 1 && (h.imgIndex = l.length), h.tabimg(a)
}, h.imgnext = function (a, b) {
h.imgIndex++, h.imgIndex > l.length && (h.imgIndex = 1, b) || h.tabimg(a)
}, h.keyup = function (a) {
if (!h.end) {
var b = a.keyCode;
a.preventDefault(), 37 === b ? h.imgprev(!0) : 39 === b ? h.imgnext(!0) : 27 === b && f.close(h.index)
}
}, h.tabimg = function (a) {
l.length <= 1 || (k.start = h.imgIndex - 1, f.close(h.index), f.photos(b, !0, a))
}, h.event = function () {
h.bigimg.hover(function () {
h.imgsee.show()
}, function () {
h.imgsee.hide()
}), h.bigimg.find(".layui-layer-imgprev").on("click", function (a) {
a.preventDefault(), h.imgprev()
}), h.bigimg.find(".layui-layer-imgnext").on("click", function (a) {
a.preventDefault(), h.imgnext()
}), c(document).on("keyup", h.keyup)
}, h.loadi = f.load(1, {shade: "shade" in b ? !1 : .9, scrollbar: !1}), g(l[m].src, function (d) {
f.close(h.loadi), h.index = f.open(c.extend({
type: 1,
area: function () {
var e = [d.width, d.height], f = [c(a).width() - 50, c(a).height() - 50];
return !b.full && e[0] > f[0] && (e[0] = f[0], e[1] = e[0] * d.height / d.width), [e[0] + "px", e[1] + "px"]
}(),
title: !1,
shade: .9,
shadeClose: !0,
closeBtn: !1,
move: ".layui-layer-phimg img",
moveType: 1,
scrollbar: !1,
moveOut: !0,
shift: 5 * Math.random() | 0,
skin: "layui-layer-photos" + j("photos"),
content: '<div class="layui-layer-phimg"><img src="' + l[m].src + '" alt="' + (l[m].alt || "") + '" layer-pid="' + l[m].pid + '"><div class="layui-layer-imgsee">' + (l.length > 1 ? '<span class="layui-layer-imguide"><a href="javascript:;" class="layui-layer-iconext layui-layer-imgprev"></a><a href="javascript:;" class="layui-layer-iconext layui-layer-imgnext"></a></span>' : "") + '<div class="layui-layer-imgbar" style="display:' + (e ? "block" : "") + '"><span class="layui-layer-imgtit"><a href="javascript:;">' + (l[m].alt || "") + "</a><em>" + h.imgIndex + "/" + l.length + "</em></span></div></div></div>",
success: function (a, c) {
h.bigimg = a.find(".layui-layer-phimg"), h.imgsee = a.find(".layui-layer-imguide,.layui-layer-imgbar"), h.event(a), b.tab && b.tab(l[m], a)
},
end: function () {
h.end = !0, c(document).off("keyup", h.keyup)
}
}, b))
}, function () {
f.close(h.loadi), f.msg("&#x5F53;&#x524D;&#x56FE;&#x7247;&#x5730;&#x5740;&#x5F02;&#x5E38;<br>&#x662F;&#x5426;&#x7EE7;&#x7EED;&#x67E5;&#x770B;&#x4E0B;&#x4E00;&#x5F20;&#xFF1F;", {
time: 3e4,
btn: ["&#x4E0B;&#x4E00;&#x5F20;", "&#x4E0D;&#x770B;&#x4E86;"],
yes: function () {
l.length > 1 && h.imgnext(!0, !0)
}
})
})
}
}, e.run = function () {
c = jQuery, d = c(a), h.html = c("html"), f.open = function (a) {
var b = new g(a);
return b.index
}
}, "function" == typeof define ? define(function () {
return e.run(), f
}) : function () {
e.run(), f.use("skin/layer.css")
}()
}(window);

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Some files were not shown because too many files have changed in this diff Show More