educational

main
GuoDong 4 months ago
parent f20dbcff6a
commit 6eba0224dd

@ -0,0 +1,68 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="src" path="src/main/java"/>
<classpathentry kind="src" path="src/main/resources"/>
<classpathentry kind="src" path="src/test/java"/>
<classpathentry kind="src" path="src/test/resources"/>
<classpathentry kind="src" path="target/generated-sources/annotations"/>
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.springframework:spring-context-support:4.3.17.RELEASE"/>
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.springframework:spring-beans:4.3.17.RELEASE"/>
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.springframework:spring-context:4.3.17.RELEASE"/>
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.springframework:spring-core:4.3.17.RELEASE"/>
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: commons-logging:commons-logging:1.2"/>
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.springframework:spring-webmvc:4.3.17.RELEASE"/>
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.springframework:spring-aop:4.3.17.RELEASE"/>
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.springframework:spring-expression:4.3.17.RELEASE"/>
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.springframework:spring-web:4.3.17.RELEASE"/>
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.springframework:spring-jdbc:4.3.17.RELEASE"/>
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.springframework:spring-tx:4.3.17.RELEASE"/>
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.springframework:spring-test:4.3.17.RELEASE"/>
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.mybatis:mybatis:3.4.6"/>
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.mybatis:mybatis-spring:1.3.2"/>
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: mysql:mysql-connector-java:5.1.38"/>
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: com.alibaba:druid:1.1.5"/>
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: javax.servlet:javax.servlet-api:3.1.0"/>
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: javax.servlet.jsp:javax.servlet.jsp-api:2.3.1"/>
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: javax.servlet:jstl:1.2"/>
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: com.sun.mail:javax.mail:1.6.1"/>
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: javax.activation:activation:1.1"/>
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: com.fasterxml.jackson.core:jackson-databind:2.9.5"/>
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: com.fasterxml.jackson.core:jackson-annotations:2.9.0"/>
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: com.fasterxml.jackson.core:jackson-core:2.9.5"/>
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.thymeleaf:thymeleaf-spring5:3.0.9.RELEASE"/>
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.slf4j:slf4j-api:1.7.25"/>
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.thymeleaf:thymeleaf:3.0.11.RELEASE"/>
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: ognl:ognl:3.1.12"/>
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.javassist:javassist:3.20.0-GA"/>
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.attoparser:attoparser:2.0.5.RELEASE"/>
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.unbescape:unbescape:1.1.6.RELEASE"/>
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.apache.commons:commons-lang3:3.5"/>
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: commons-codec:commons-codec:1.10"/>
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: commons-fileupload:commons-fileupload:1.3.3"/>
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: commons-io:commons-io:2.2"/>
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.apache.logging.log4j:log4j-api:2.9.1"/>
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.apache.logging.log4j:log4j-core:2.9.1"/>
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: junit:junit:4.12"/>
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.hamcrest:hamcrest-core:1.3"/>
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: com.github.pagehelper:pagehelper-spring-boot-starter:1.2.5"/>
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.springframework.boot:spring-boot-starter:2.0.1.RELEASE"/>
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.springframework.boot:spring-boot:2.0.1.RELEASE"/>
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.springframework.boot:spring-boot-autoconfigure:2.0.1.RELEASE"/>
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.springframework.boot:spring-boot-starter-logging:2.0.1.RELEASE"/>
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: ch.qos.logback:logback-classic:1.2.3"/>
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: ch.qos.logback:logback-core:1.2.3"/>
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.apache.logging.log4j:log4j-to-slf4j:2.10.0"/>
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.slf4j:jul-to-slf4j:1.7.25"/>
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: javax.annotation:javax.annotation-api:1.3.2"/>
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.yaml:snakeyaml:1.19"/>
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.mybatis.spring.boot:mybatis-spring-boot-starter:1.3.2"/>
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.springframework.boot:spring-boot-starter-jdbc:1.5.10.RELEASE"/>
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.apache.tomcat:tomcat-jdbc:8.5.27"/>
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.apache.tomcat:tomcat-juli:8.5.27"/>
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:1.3.2"/>
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: com.github.pagehelper:pagehelper-spring-boot-autoconfigure:1.2.5"/>
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: com.github.pagehelper:pagehelper:5.1.4"/>
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Maven: com.github.jsqlparser:jsqlparser:1.0"/>
<classpathentry kind="output" path="target/classes"/>
</classpath>

8
.idea/.gitignore vendored

@ -0,0 +1,8 @@
# Default ignored files
/shelf/
/workspace.xml
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml
# Editor-based HTTP Client requests
/httpRequests/

@ -0,0 +1,6 @@
<component name="ArtifactManager">
<artifact type="war" name="educational">
<output-path>$PROJECT_DIR$/target/classes/artifacts/educational</output-path>
<root id="archive" name="educational.war" />
</artifact>
</component>

@ -0,0 +1,13 @@
<?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="educational" />
</profile>
</annotationProcessing>
</component>
</project>

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

@ -0,0 +1,40 @@
<?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="http://maven.aliyun.com/nexus/content/groups/public/" />
</remote-repository>
<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="caih-snapshots" />
<option name="name" value="caih-snapshots" />
<option name="url" value="http://maven.aliyun.com/nexus/content/groups/public/" />
</remote-repository>
<remote-repository>
<option name="id" value="caih-central" />
<option name="name" value="caih-central" />
<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="caih-release" />
<option name="name" value="caih-release" />
<option name="url" value="http://maven.aliyun.com/nexus/content/groups/public/" />
</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>
</component>
</project>

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="MaterialThemeProjectNewConfig">
<option name="metadata">
<MTProjectMetadataState>
<option name="migrated" value="true" />
<option name="pristineConfig" value="false" />
<option name="userId" value="58c25dad:19116cf1688:-7ffe" />
</MTProjectMetadataState>
</option>
</component>
</project>

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="FrameworkDetectionExcludesConfiguration">
<file type="web" url="file://$PROJECT_DIR$" />
</component>
<component name="MavenProjectsManager">
<option name="originalFiles">
<list>
<option value="$PROJECT_DIR$/pom.xml" />
</list>
</option>
<option name="workspaceImportForciblyTurnedOn" value="true" />
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/target/classes" />
</component>
</project>

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

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>educational</name>
<comment/>
<projects/>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments/>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
</projectDescription>

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src/main/webapp"/>
<classpathentry excluding="**/bower_components/*|**/node_modules/*|**/*.min.js" kind="src" path="target/m2e-wtp/web-resources"/>
<classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.JRE_CONTAINER"/>
<classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.WebProject">
<attributes>
<attribute name="hide" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.baseBrowserLibrary"/>
<classpathentry kind="output" path=""/>
</classpath>

@ -0,0 +1,6 @@
eclipse.preferences.version=1
encoding//src/main/java=UTF-8
encoding//src/main/resources=UTF-8
encoding//src/test/java=UTF-8
encoding//src/test/resources=UTF-8
encoding/<project>=UTF-8

@ -0,0 +1,11 @@
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
org.eclipse.jdt.core.compiler.compliance=1.8
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
org.eclipse.jdt.core.compiler.release=disabled
org.eclipse.jdt.core.compiler.source=1.8

@ -0,0 +1,4 @@
activeProfiles=
eclipse.preferences.version=1
resolveWorkspaceProjects=true
version=1

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?><project-modules id="moduleCoreId" project-version="1.5.0">
<wb-module deploy-name="educational-1.0-SNAPSHOT">
<wb-resource deploy-path="/" source-path="/target/m2e-wtp/web-resources"/>
<wb-resource deploy-path="/" source-path="/src/main/webapp" tag="defaultRootSource"/>
<wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/>
<wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/resources"/>
<property name="context-root" value="educational"/>
<property name="java-output-path" value="/educational/target/classes"/>
</wb-module>
</project-modules>

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<faceted-project>
<fixed facet="wst.jsdt.web"/>
<installed facet="java" version="1.8"/>
<installed facet="jst.web" version="2.5"/>
<installed facet="wst.jsdt.web" version="1.0"/>
</faceted-project>

@ -0,0 +1 @@
org.eclipse.wst.jsdt.launching.baseBrowserLibrary

@ -0,0 +1,2 @@
disabled=06target
eclipse.preferences.version=1

@ -1,2 +0,0 @@
# course_selection_master

@ -0,0 +1,143 @@
/*
Navicat Premium Data Transfer
Source Server : localhostMySql
Source Server Type : MySQL
Source Server Version : 50729
Source Host : localhost:3306
Source Schema : demo
Target Server Type : MySQL
Target Server Version : 50729
File Encoding : 65001
Date: 22/06/2021 17:35:11
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for article
-- ----------------------------
DROP TABLE IF EXISTS `article`;
CREATE TABLE `article` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '标题',
`type` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '分类',
`content` longtext CHARACTER SET utf8 COLLATE utf8_general_ci NULL,
`create_time` datetime(0) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 11 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of article
-- ----------------------------
INSERT INTO `article` VALUES (1, 'as', '0', 'askdghjgahsjdhj%3Cbr%3E%E7%A2%8D%E4%BA%8B%E7%9A%84%E5%AE%B6%E4%BC%99%E5%99%B6%E5%95%A5%E7%9A%84%E8%84%9A%E5%90%8E%E8%B7%9F%C2%A0%E6%8E%A5%E5%8F%A3%E7%9C%8B%E5%93%88%E7%9A%841KHJ%EF%BC%8C%C2%A0ASKDJH%C2%A0B%C2%A0%C2%A0NDSA%C2%A0AS%2CJKBD%C2%A0K%2CGHJGH%C2%A0%C2%A0%3Cbr%3EAS%3Cbr%3EDS%C2%A0A%3Cbr%3ED\'%3Cbr%3EAS\'%3Cbr%3E%C2%A0D%3Cbr%3E\'AD%C2%A0\'%3Cbr%3EAS%3Cbr%3E\'D%C2%A0%C2%A0%C2%A0SADJHKJ%C2%A0HGASD%C2%A0SDA%C2%A0JHG%E7%A9%BA%E5%86%9B%E8%81%94%E5%90%88%E9%98%BF%E6%96%AF%E8%BE%BE%E5%85%8B%E4%BA%A4%E6%8D%A2%E6%9C%BA%E5%8D%A1%E6%B2%B3%E4%B8%8A%E7%9A%84%E7%BB%99askdghjgahsjdhj%3Cbr%3E%E7%A2%8D%E4%BA%8B%E7%9A%84%E5%AE%B6%E4%BC%99%E5%99%B6%E5%95%A5%E7%9A%84%E8%84%9A%E5%90%8E%E8%B7%9F%C2%A0%E6%8E%A5%E5%8F%A3%E7%9C%8B%E5%93%88%E7%9A%84KHJ%EF%BC%8C%C2%A0ASKDJH%C2%A0B%C2%A0%C2%A0NDSA%C2%A0AS%2CJKBD%C2%A0K%2CGHJGH%C2%A0%C2%A0%3Cbr%3EAS%3Cbr%3EDS%C2%A0A%3Cbr%3ED\'%3Cbr%3EAS\'%3Cbr%3E%C2%A0D%3Cbr%3E\'AD%C2%A0\'%3Cbr%3EAS%3Cbr%3E\'D%C2%A0%C2%A0%C2%A0SADJHKJ%C2%A0HGASD%C2%A0SDA%C2%A0JHG%E7%A9%BA%E5%86%9B%E8%81%94%E5%90%88%E9%98%BF%E6%96%AF%E8%BE%BE%E5%85%8B%E4%BA%A4%E6%8D%A2%E6%9C%BA%E5%8D%A1%E6%B2%B3%E4%B8%8A%E7%9A%84%E7%BB%992222', '2021-06-21 19:35:58');
INSERT INTO `article` VALUES (3, '下拉框默认选中', '1', '可以用<s:select>标签这个是struts2的标签。\n\n1、使用html中的select标签比较麻烦一下因为想要设置默认的那么就需要selected=\"selected\"标签如果想实现的话可以使用c:if标签判断一下<c:if<p>test=\"&#36;{sessionScope.zhicheng==\'\'}\">selected=\"selected\"</c:if>当然这样的每一个option都判断一下有点麻烦另外可以用<s:select>标签这个是struts2的标签。\n\n2、select是html的一个标签与页面是否是jsp无关option默认选中添加一个属性<p>selected<p>即可,<option<p>selected=\"selected\">Mercedes</option>在遍历的时候<option<p>value=\"1\"<p><c:if<p>test=\"${item.CONTRACT_HAB<p>eq<p>1}\">selected=\"selected\"</c:if>>H</option>\n\n做一个判断即可添加你想要的那一个年份为默认选中。', '2021-06-22 11:35:01');
INSERT INTO `article` VALUES (4, '1', '3', '首先,你应该已经安装了<p>Java<p>的<p>JDK<p>了如果没有安装JDK请跳转到此网址http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html\n\n笔者安装的是<p>jdk-8u91-windows-x64\n\n接下来主要讲怎么配置<p>Java<p>的环境变量,也是为了以后哪天自己忘记了做个备份\n\nwin10的Java环境变量配置和其他的windows版本稍有不同\n\n在电脑桌面<p>右键点击<p>“此电脑”的“属性”选项', '2021-06-22 11:59:42');
INSERT INTO `article` VALUES (5, '12', '3', '213123213asa<p>S\n\'ASDD,<p>MNASDFJ.F<p>ASF\nDSF\n<p>DSF\n<p>\n', '2021-06-22 12:03:10');
INSERT INTO `article` VALUES (6, '123', '2', '首先,你应该已经安装了<p>Java<p>的<p>JDK<p>了如果没有安装JDK请跳转到此网址http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html\n\n笔者安装的是<p>jdk-8u91-windows-x64\n\n接下来主要讲怎么配置<p>Java<p>的环境变量,也是为了以后哪天自己忘记了做个备份\n\nwin10的Java环境变量配置和其他的windows版本稍有不同\n\n在电脑桌面<p>右键点击<p>“此电脑”的“属性”选项', '2021-06-22 12:12:02');
INSERT INTO `article` VALUES (7, '终于我也到了和Eclipse说再见的时候难说再见', '4', '首先,你应该已经安装了 Java 的 JDK 了如果没有安装JDK请跳转到此网址http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html\n\n笔者安装的是 jdk-8u91-windows-x64\n\n接下来主要讲怎么配置 Java 的环境变量,也是为了以后哪天自己忘记了做个备份\n\nwin10的Java环境变量配置和其他的windows版本稍有不同\n\n在电脑桌面 右键点击 “此电脑”的“属性”选项', '2021-06-22 12:13:08');
INSERT INTO `article` VALUES (8, '阿斯顿阿斯顿发撒', '3', 'asdasdjhj ash, d\nasdf mbavbvbgfhj \nasd hsASDMH GHJMGASDGHJ HGSDAKJKJDFHJ Jjhaskdh是很久很久啊说过的话 \n\n \n 都是 的撒都没机会尴尬和技术的价格弘法大师 ', '2021-06-22 12:14:57');
INSERT INTO `article` VALUES (9, 'ASJDJAHKSDHAdjh的结婚', '3', '12123', '2021-06-22 14:47:37');
INSERT INTO `article` VALUES (10, '1212312', '0', 'sdklj h\nasd\nd \nsad\n as\nd\n asd\n as\ndasdd ,j,anksf jkhhjdfsa jf\nsdf,jkbhaksfhj ghjklasflhj ljafd撒地方代付链接你看发的撒娇你看 ', '2021-06-22 16:59:59');
-- ----------------------------
-- Table structure for book
-- ----------------------------
DROP TABLE IF EXISTS `book`;
CREATE TABLE `book` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`jiage` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`zhekou` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of book
-- ----------------------------
INSERT INTO `book` VALUES (2, '小李飞刀', '50', '0.1');
-- ----------------------------
-- Table structure for emp
-- ----------------------------
DROP TABLE IF EXISTS `emp`;
CREATE TABLE `emp` (
`empno` int(11) NOT NULL AUTO_INCREMENT,
`ename` varchar(120) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`job` varchar(120) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`sal` double(7, 2) NULL DEFAULT NULL,
`dept` varchar(120) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`empno`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 7945 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of emp
-- ----------------------------
INSERT INTO `emp` VALUES (6, '方文山', '填词人', 3500.00, '音乐俱乐部');
INSERT INTO `emp` VALUES (7, 'CLARK', 'MANAGER', 2450.00, '10');
INSERT INTO `emp` VALUES (8, 'SCOTT', 'ANALYST', 3000.00, '20');
INSERT INTO `emp` VALUES (9, 'KING', 'PRESIDENT', 5000.00, '10');
INSERT INTO `emp` VALUES (10, 'TURNER', 'SALESMAN', 1500.00, '30');
INSERT INTO `emp` VALUES (11, 'ADAMS', 'CLERK', 1100.00, '20');
INSERT INTO `emp` VALUES (12, 'JAMES', 'CLERK', 950.00, '30');
INSERT INTO `emp` VALUES (13, 'FORD', 'ANALYST', 3000.00, '20');
INSERT INTO `emp` VALUES (14, 'MILLER', 'CLERK', 1300.00, '10');
INSERT INTO `emp` VALUES (7935, '李世民', '总管', 15000.00, '财务部');
INSERT INTO `emp` VALUES (7936, '程咬金', '项目经理', 20000.00, '开发部');
INSERT INTO `emp` VALUES (7937, '秦琼', '主任', 12000.00, '风控部');
INSERT INTO `emp` VALUES (7938, '李嘉诚', '会计', 1200.00, '财务部');
INSERT INTO `emp` VALUES (7939, '马化腾', 'Java开发', 12000.00, '研发部');
INSERT INTO `emp` VALUES (7940, '裴元庆', '开发工程师', 3000.00, '开发部');
INSERT INTO `emp` VALUES (7942, '林俊杰', '音乐创作人', 3500.00, '音乐俱乐部');
INSERT INTO `emp` VALUES (7943, '马云', 'CEO', 1500.00, '财务部');
-- ----------------------------
-- Table structure for shoucang
-- ----------------------------
DROP TABLE IF EXISTS `shoucang`;
CREATE TABLE `shoucang` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`article_id` int(11) NULL DEFAULT NULL,
`user_id` int(11) NULL DEFAULT NULL,
`create_time` datetime(0) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 9 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '收藏表' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of shoucang
-- ----------------------------
INSERT INTO `shoucang` VALUES (1, 1, 1, '2021-06-22 11:04:16');
INSERT INTO `shoucang` VALUES (2, 3, 1, '2021-06-22 12:54:57');
INSERT INTO `shoucang` VALUES (3, 4, 1, '2021-06-22 14:44:15');
INSERT INTO `shoucang` VALUES (4, 7, 5, '2021-06-22 14:47:50');
INSERT INTO `shoucang` VALUES (5, 1, 5, '2021-06-22 15:39:52');
INSERT INTO `shoucang` VALUES (6, 3, 2, '2021-06-22 16:59:09');
INSERT INTO `shoucang` VALUES (7, 7, 1, '2021-06-22 17:23:12');
INSERT INTO `shoucang` VALUES (8, 8, 1, '2021-06-22 17:30:50');
-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '用户名',
`password` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '密码',
`phone` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`email` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`type` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '角色',
`create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES (1, 'aa123', '123', '21352', '22323', NULL, NULL);
INSERT INTO `user` VALUES (2, 'admin', '123456', NULL, NULL, 'admin', '2021-06-22 15:20:10');
INSERT INTO `user` VALUES (5, '123', '123', '15777031180', '308144593@qq.com', NULL, '2021-06-22 14:46:22');
SET FOREIGN_KEY_CHECKS = 1;

File diff suppressed because one or more lines are too long

@ -0,0 +1,75 @@
<?xml version="1.0" encoding="UTF-8"?>
<component LANGUAGE_LEVEL="JDK_1_8" inheritJdk="true">
<output-test url="file://$MODULE_DIR$/target/test-classes"/>
<contentEntry url="file://$MODULE_DIR$">
<testFolder url="file://$MODULE_DIR$/src/test/java"/>
<testFolder url="file://$MODULE_DIR$/src/test/resources"/>
<excludeFolder url="file://$MODULE_DIR$/target"/>
</contentEntry>
<lib name="Maven: org.springframework:spring-test:4.3.17.RELEASE" scope="TEST"/>
<lib name="Maven: javax.servlet:javax.servlet-api:3.1.0" scope="PROVIDED"/>
<lib name="Maven: javax.servlet.jsp:javax.servlet.jsp-api:2.3.1" scope="PROVIDED"/>
<lib name="Maven: junit:junit:4.12" scope="TEST"/>
<lib name="Maven: org.hamcrest:hamcrest-core:1.3" scope="TEST"/>
<lib name="Maven: org.yaml:snakeyaml:1.19" scope="RUNTIME"/>
<levels>
<level name="Maven: org.springframework:spring-context-support:4.3.17.RELEASE" value="project"/>
<level name="Maven: org.springframework:spring-beans:4.3.17.RELEASE" value="project"/>
<level name="Maven: org.springframework:spring-context:4.3.17.RELEASE" value="project"/>
<level name="Maven: org.springframework:spring-core:4.3.17.RELEASE" value="project"/>
<level name="Maven: commons-logging:commons-logging:1.2" value="project"/>
<level name="Maven: org.springframework:spring-webmvc:4.3.17.RELEASE" value="project"/>
<level name="Maven: org.springframework:spring-aop:4.3.17.RELEASE" value="project"/>
<level name="Maven: org.springframework:spring-expression:4.3.17.RELEASE" value="project"/>
<level name="Maven: org.springframework:spring-web:4.3.17.RELEASE" value="project"/>
<level name="Maven: org.springframework:spring-jdbc:4.3.17.RELEASE" value="project"/>
<level name="Maven: org.springframework:spring-tx:4.3.17.RELEASE" value="project"/>
<level name="Maven: org.springframework:spring-test:4.3.17.RELEASE" value="project"/>
<level name="Maven: org.mybatis:mybatis:3.4.6" value="project"/>
<level name="Maven: org.mybatis:mybatis-spring:1.3.2" value="project"/>
<level name="Maven: mysql:mysql-connector-java:5.1.38" value="project"/>
<level name="Maven: com.alibaba:druid:1.1.5" value="project"/>
<level name="Maven: javax.servlet:javax.servlet-api:3.1.0" value="project"/>
<level name="Maven: javax.servlet.jsp:javax.servlet.jsp-api:2.3.1" value="project"/>
<level name="Maven: javax.servlet:jstl:1.2" value="project"/>
<level name="Maven: com.sun.mail:javax.mail:1.6.1" value="project"/>
<level name="Maven: javax.activation:activation:1.1" value="project"/>
<level name="Maven: com.fasterxml.jackson.core:jackson-databind:2.9.5" value="project"/>
<level name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.9.0" value="project"/>
<level name="Maven: com.fasterxml.jackson.core:jackson-core:2.9.5" value="project"/>
<level name="Maven: org.thymeleaf:thymeleaf-spring5:3.0.9.RELEASE" value="project"/>
<level name="Maven: org.slf4j:slf4j-api:1.7.25" value="project"/>
<level name="Maven: org.thymeleaf:thymeleaf:3.0.11.RELEASE" value="project"/>
<level name="Maven: ognl:ognl:3.1.12" value="project"/>
<level name="Maven: org.javassist:javassist:3.20.0-GA" value="project"/>
<level name="Maven: org.attoparser:attoparser:2.0.5.RELEASE" value="project"/>
<level name="Maven: org.unbescape:unbescape:1.1.6.RELEASE" value="project"/>
<level name="Maven: org.apache.commons:commons-lang3:3.5" value="project"/>
<level name="Maven: commons-codec:commons-codec:1.10" value="project"/>
<level name="Maven: commons-fileupload:commons-fileupload:1.3.3" value="project"/>
<level name="Maven: commons-io:commons-io:2.2" value="project"/>
<level name="Maven: org.apache.logging.log4j:log4j-api:2.9.1" value="project"/>
<level name="Maven: org.apache.logging.log4j:log4j-core:2.9.1" value="project"/>
<level name="Maven: junit:junit:4.12" value="project"/>
<level name="Maven: org.hamcrest:hamcrest-core:1.3" value="project"/>
<level name="Maven: com.github.pagehelper:pagehelper-spring-boot-starter:1.2.5" value="project"/>
<level name="Maven: org.springframework.boot:spring-boot-starter:2.0.1.RELEASE" value="project"/>
<level name="Maven: org.springframework.boot:spring-boot:2.0.1.RELEASE" value="project"/>
<level name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.0.1.RELEASE" value="project"/>
<level name="Maven: org.springframework.boot:spring-boot-starter-logging:2.0.1.RELEASE" value="project"/>
<level name="Maven: ch.qos.logback:logback-classic:1.2.3" value="project"/>
<level name="Maven: ch.qos.logback:logback-core:1.2.3" value="project"/>
<level name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.10.0" value="project"/>
<level name="Maven: org.slf4j:jul-to-slf4j:1.7.25" value="project"/>
<level name="Maven: javax.annotation:javax.annotation-api:1.3.2" value="project"/>
<level name="Maven: org.yaml:snakeyaml:1.19" value="project"/>
<level name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-starter:1.3.2" value="project"/>
<level name="Maven: org.springframework.boot:spring-boot-starter-jdbc:1.5.10.RELEASE" value="project"/>
<level name="Maven: org.apache.tomcat:tomcat-jdbc:8.5.27" value="project"/>
<level name="Maven: org.apache.tomcat:tomcat-juli:8.5.27" value="project"/>
<level name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:1.3.2" value="project"/>
<level name="Maven: com.github.pagehelper:pagehelper-spring-boot-autoconfigure:1.2.5" value="project"/>
<level name="Maven: com.github.pagehelper:pagehelper:5.1.4" value="project"/>
<level name="Maven: com.github.jsqlparser:jsqlparser:1.0" value="project"/>
</levels>
</component>

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<module version="4">
<component name="EclipseModuleManager">
<conelement value="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER" />
<src_description expected_position="0">
<src_folder value="file://$MODULE_DIR$/src/main/java" expected_position="0" />
<src_folder value="file://$MODULE_DIR$/src/main/resources" expected_position="1" />
<src_folder value="file://$MODULE_DIR$/src/test/java" expected_position="2" />
<src_folder value="file://$MODULE_DIR$/src/test/resources" expected_position="3" />
</src_description>
</component>
<component name="FacetManager">
<facet type="Spring" name="Spring">
<configuration />
</facet>
</component>
</module>

@ -0,0 +1,94 @@
/*
Navicat Premium Data Transfer
Source Server : localMySQL
Source Server Type : MySQL
Source Server Version : 50729
Source Host : localhost:3306
Source Schema : educational
Target Server Type : MySQL
Target Server Version : 50729
File Encoding : 65001
Date: 29/12/2024 21:45:32
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for course
-- ----------------------------
DROP TABLE IF EXISTS `course`;
CREATE TABLE `course` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '课程名称',
`course_no` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '课程编号',
`teacher_id` int(11) NULL DEFAULT NULL COMMENT '任课老师id',
`remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '课程简介',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 12 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '课程表' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of course
-- ----------------------------
INSERT INTO `course` VALUES (1, 'JavaWeb实战23', 'No00123', 100026, 'java实战课21');
INSERT INTO `course` VALUES (6, 'servlet实战', 'No002', 100001, 'servlet实战演示');
INSERT INTO `course` VALUES (7, '高音训练课', '0003', 100001, '111111');
INSERT INTO `course` VALUES (8, 'java', '003', 100001, '2');
INSERT INTO `course` VALUES (9, '周杰伦音乐课', 'N0999', 100026, '');
INSERT INTO `course` VALUES (10, '跳舞课', '123', 100028, '1111');
INSERT INTO `course` VALUES (11, '游泳课', 'YY-001', 100026, '1111');
-- ----------------------------
-- Table structure for course_selection
-- ----------------------------
DROP TABLE IF EXISTS `course_selection`;
CREATE TABLE `course_selection` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`course_id` int(11) NULL DEFAULT NULL COMMENT '课程id',
`student_id` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '学生id',
`scores` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '分数',
`create_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '选择时间',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 34 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '课程选择表' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of course_selection
-- ----------------------------
INSERT INTO `course_selection` VALUES (30, 1, '100029', NULL, '2024-12-29 20:46:21');
INSERT INTO `course_selection` VALUES (31, 6, '100029', '88', '2024-12-29 21:19:51');
INSERT INTO `course_selection` VALUES (32, 11, '100030', '11', '2024-12-29 21:22:18');
INSERT INTO `course_selection` VALUES (33, 6, '100030', NULL, '2024-12-29 20:58:44');
-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`username` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`password` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`sex` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '性别 1男 2女',
`real_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '真实姓名',
`age` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '年龄',
`role_id` int(11) NOT NULL COMMENT '角色Id 3管理员 2老师 1学生',
`phone` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`createdate` datetime(0) NULL DEFAULT NULL,
`remark` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`id`, `username`) USING BTREE,
UNIQUE INDEX `phone`(`phone`) USING BTREE,
INDEX `id`(`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 100031 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES (100001, 'admin', 'admin', '1', '詹姆斯', '402', 3, '18802290129', '2021-06-01 18:20:51', '系统管理员12');
INSERT INTO `user` VALUES (100026, 'user11', '111111', '1', '甪里1', '201', 2, '15555555551', '2024-12-29 14:31:00', '1');
INSERT INTO `user` VALUES (100028, 'user2', '123456', '1', '安东尼', '40', 2, '15788888888', '2024-12-29 18:08:43', '安东尼');
INSERT INTO `user` VALUES (100029, 'student1', '123456', '1', '李元芳', '18', 1, '13244444444', '2024-12-29 19:37:46', '1');
INSERT INTO `user` VALUES (100030, 'student2', '123456', '1', '狄仁杰', '22', 1, '12222222222', '2024-12-29 20:53:22', '1');
SET FOREIGN_KEY_CHECKS = 1;

@ -0,0 +1,178 @@
<?xml version="1.0" encoding="UTF-8"?>
<eclipse-userlibraries>
<library name="Maven: javax.servlet:jstl:1.2">
<archive path="E:/apache-maven-3.5.0/repository/javax/servlet/jstl/1.2/jstl-1.2.jar" />
</library>
<library name="Maven: com.sun.mail:javax.mail:1.6.1">
<archive path="E:/apache-maven-3.5.0/repository/com/sun/mail/javax.mail/1.6.1/javax.mail-1.6.1.jar" />
</library>
<library name="Maven: javax.servlet:javax.servlet-api:3.1.0">
<archive path="E:/apache-maven-3.5.0/repository/javax/servlet/javax.servlet-api/3.1.0/javax.servlet-api-3.1.0.jar" />
</library>
<library name="Maven: javax.servlet.jsp:javax.servlet.jsp-api:2.3.1">
<archive path="E:/apache-maven-3.5.0/repository/javax/servlet/jsp/javax.servlet.jsp-api/2.3.1/javax.servlet.jsp-api-2.3.1.jar" />
</library>
<library name="Maven: commons-codec:commons-codec:1.10">
<archive path="E:/apache-maven-3.5.0/repository/commons-codec/commons-codec/1.10/commons-codec-1.10.jar" />
</library>
<library name="Maven: commons-fileupload:commons-fileupload:1.3.3">
<archive path="E:/apache-maven-3.5.0/repository/commons-fileupload/commons-fileupload/1.3.3/commons-fileupload-1.3.3.jar" />
</library>
<library name="Maven: com.fasterxml.jackson.core:jackson-databind:2.9.5">
<archive path="E:/apache-maven-3.5.0/repository/com/fasterxml/jackson/core/jackson-databind/2.9.5/jackson-databind-2.9.5.jar" />
</library>
<library name="Maven: org.apache.commons:commons-lang3:3.5">
<archive path="E:/apache-maven-3.5.0/repository/org/apache/commons/commons-lang3/3.5/commons-lang3-3.5.jar" />
</library>
<library name="Maven: junit:junit:4.12">
<archive path="E:/apache-maven-3.5.0/repository/junit/junit/4.12/junit-4.12.jar" />
</library>
<library name="Maven: com.github.pagehelper:pagehelper-spring-boot-starter:1.2.5">
<archive path="E:/apache-maven-3.5.0/repository/com/github/pagehelper/pagehelper-spring-boot-starter/1.2.5/pagehelper-spring-boot-starter-1.2.5.jar" />
</library>
<library name="Maven: org.apache.logging.log4j:log4j-api:2.9.1">
<archive path="E:/apache-maven-3.5.0/repository/org/apache/logging/log4j/log4j-api/2.9.1/log4j-api-2.9.1.jar" />
</library>
<library name="Maven: org.apache.logging.log4j:log4j-core:2.9.1">
<archive path="E:/apache-maven-3.5.0/repository/org/apache/logging/log4j/log4j-core/2.9.1/log4j-core-2.9.1.jar" />
</library>
<library name="Maven: org.springframework:spring-webmvc:4.3.17.RELEASE">
<archive path="E:/apache-maven-3.5.0/repository/org/springframework/spring-webmvc/4.3.17.RELEASE/spring-webmvc-4.3.17.RELEASE.jar" />
</library>
<library name="Maven: org.springframework:spring-context-support:4.3.17.RELEASE">
<archive path="E:/apache-maven-3.5.0/repository/org/springframework/spring-context-support/4.3.17.RELEASE/spring-context-support-4.3.17.RELEASE.jar" />
</library>
<library name="Maven: org.springframework:spring-test:4.3.17.RELEASE">
<archive path="E:/apache-maven-3.5.0/repository/org/springframework/spring-test/4.3.17.RELEASE/spring-test-4.3.17.RELEASE.jar" />
</library>
<library name="Maven: org.springframework:spring-jdbc:4.3.17.RELEASE">
<archive path="E:/apache-maven-3.5.0/repository/org/springframework/spring-jdbc/4.3.17.RELEASE/spring-jdbc-4.3.17.RELEASE.jar" />
</library>
<library name="Maven: mysql:mysql-connector-java:5.1.38">
<archive path="E:/apache-maven-3.5.0/repository/mysql/mysql-connector-java/5.1.38/mysql-connector-java-5.1.38.jar" />
</library>
<library name="Maven: com.alibaba:druid:1.1.5">
<archive path="E:/apache-maven-3.5.0/repository/com/alibaba/druid/1.1.5/druid-1.1.5.jar" />
</library>
<library name="Maven: org.mybatis:mybatis:3.4.6">
<archive path="E:/apache-maven-3.5.0/repository/org/mybatis/mybatis/3.4.6/mybatis-3.4.6.jar" />
</library>
<library name="Maven: org.mybatis:mybatis-spring:1.3.2">
<archive path="E:/apache-maven-3.5.0/repository/org/mybatis/mybatis-spring/1.3.2/mybatis-spring-1.3.2.jar" />
</library>
<library name="Maven: org.springframework:spring-core:4.3.17.RELEASE">
<archive path="E:/apache-maven-3.5.0/repository/org/springframework/spring-core/4.3.17.RELEASE/spring-core-4.3.17.RELEASE.jar" />
</library>
<library name="Maven: org.springframework:spring-beans:4.3.17.RELEASE">
<archive path="E:/apache-maven-3.5.0/repository/org/springframework/spring-beans/4.3.17.RELEASE/spring-beans-4.3.17.RELEASE.jar" />
</library>
<library name="Maven: org.springframework:spring-web:4.3.17.RELEASE">
<archive path="E:/apache-maven-3.5.0/repository/org/springframework/spring-web/4.3.17.RELEASE/spring-web-4.3.17.RELEASE.jar" />
</library>
<library name="Maven: org.springframework:spring-aop:4.3.17.RELEASE">
<archive path="E:/apache-maven-3.5.0/repository/org/springframework/spring-aop/4.3.17.RELEASE/spring-aop-4.3.17.RELEASE.jar" />
</library>
<library name="Maven: com.fasterxml.jackson.core:jackson-core:2.9.5">
<archive path="E:/apache-maven-3.5.0/repository/com/fasterxml/jackson/core/jackson-core/2.9.5/jackson-core-2.9.5.jar" />
</library>
<library name="Maven: javax.activation:activation:1.1">
<archive path="E:/apache-maven-3.5.0/repository/javax/activation/activation/1.1/activation-1.1.jar" />
</library>
<library name="Maven: org.springframework.boot:spring-boot:2.0.1.RELEASE">
<archive path="E:/apache-maven-3.5.0/repository/org/springframework/boot/spring-boot/2.0.1.RELEASE/spring-boot-2.0.1.RELEASE.jar" />
</library>
<library name="Maven: org.hamcrest:hamcrest-core:1.3">
<archive path="E:/apache-maven-3.5.0/repository/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar" />
</library>
<library name="Maven: ch.qos.logback:logback-core:1.2.3">
<archive path="E:/apache-maven-3.5.0/repository/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3.jar" />
</library>
<library name="Maven: org.springframework.boot:spring-boot-starter-logging:2.0.1.RELEASE">
<archive path="E:/apache-maven-3.5.0/repository/org/springframework/boot/spring-boot-starter-logging/2.0.1.RELEASE/spring-boot-starter-logging-2.0.1.RELEASE.jar" />
</library>
<library name="Maven: javax.annotation:javax.annotation-api:1.3.2">
<archive path="E:/apache-maven-3.5.0/repository/javax/annotation/javax.annotation-api/1.3.2/javax.annotation-api-1.3.2.jar" />
</library>
<library name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.10.0">
<archive path="E:/apache-maven-3.5.0/repository/org/apache/logging/log4j/log4j-to-slf4j/2.10.0/log4j-to-slf4j-2.10.0.jar" />
</library>
<library name="Maven: org.apache.tomcat:tomcat-jdbc:8.5.27">
<archive path="E:/apache-maven-3.5.0/repository/org/apache/tomcat/tomcat-jdbc/8.5.27/tomcat-jdbc-8.5.27.jar" />
</library>
<library name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-starter:1.3.2">
<archive path="E:/apache-maven-3.5.0/repository/org/mybatis/spring/boot/mybatis-spring-boot-starter/1.3.2/mybatis-spring-boot-starter-1.3.2.jar" />
</library>
<library name="Maven: com.github.pagehelper:pagehelper:5.1.4">
<archive path="E:/apache-maven-3.5.0/repository/com/github/pagehelper/pagehelper/5.1.4/pagehelper-5.1.4.jar" />
</library>
<library name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:1.3.2">
<archive path="E:/apache-maven-3.5.0/repository/org/mybatis/spring/boot/mybatis-spring-boot-autoconfigure/1.3.2/mybatis-spring-boot-autoconfigure-1.3.2.jar" />
</library>
<library name="Maven: commons-logging:commons-logging:1.2">
<archive path="E:/apache-maven-3.5.0/repository/commons-logging/commons-logging/1.2/commons-logging-1.2.jar" />
</library>
<library name="Maven: org.springframework:spring-context:4.3.17.RELEASE">
<archive path="E:/apache-maven-3.5.0/repository/org/springframework/spring-context/4.3.17.RELEASE/spring-context-4.3.17.RELEASE.jar" />
</library>
<library name="Maven: org.springframework:spring-tx:4.3.17.RELEASE">
<archive path="E:/apache-maven-3.5.0/repository/org/springframework/spring-tx/4.3.17.RELEASE/spring-tx-4.3.17.RELEASE.jar" />
</library>
<library name="Maven: org.springframework:spring-expression:4.3.17.RELEASE">
<archive path="E:/apache-maven-3.5.0/repository/org/springframework/spring-expression/4.3.17.RELEASE/spring-expression-4.3.17.RELEASE.jar" />
</library>
<library name="Maven: commons-io:commons-io:2.2">
<archive path="E:/apache-maven-3.5.0/repository/commons-io/commons-io/2.2/commons-io-2.2.jar" />
</library>
<library name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.9.0">
<archive path="E:/apache-maven-3.5.0/repository/com/fasterxml/jackson/core/jackson-annotations/2.9.0/jackson-annotations-2.9.0.jar" />
</library>
<library name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.0.1.RELEASE">
<archive path="E:/apache-maven-3.5.0/repository/org/springframework/boot/spring-boot-autoconfigure/2.0.1.RELEASE/spring-boot-autoconfigure-2.0.1.RELEASE.jar" />
</library>
<library name="Maven: org.springframework.boot:spring-boot-starter:2.0.1.RELEASE">
<archive path="E:/apache-maven-3.5.0/repository/org/springframework/boot/spring-boot-starter/2.0.1.RELEASE/spring-boot-starter-2.0.1.RELEASE.jar" />
</library>
<library name="Maven: org.slf4j:slf4j-api:1.7.25">
<archive path="E:/apache-maven-3.5.0/repository/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25.jar" />
</library>
<library name="Maven: ch.qos.logback:logback-classic:1.2.3">
<archive path="E:/apache-maven-3.5.0/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar" />
</library>
<library name="Maven: org.yaml:snakeyaml:1.19">
<archive path="E:/apache-maven-3.5.0/repository/org/yaml/snakeyaml/1.19/snakeyaml-1.19.jar" />
</library>
<library name="Maven: org.slf4j:jul-to-slf4j:1.7.25">
<archive path="E:/apache-maven-3.5.0/repository/org/slf4j/jul-to-slf4j/1.7.25/jul-to-slf4j-1.7.25.jar" />
</library>
<library name="Maven: org.apache.tomcat:tomcat-juli:8.5.27">
<archive path="E:/apache-maven-3.5.0/repository/org/apache/tomcat/tomcat-juli/8.5.27/tomcat-juli-8.5.27.jar" />
</library>
<library name="Maven: org.springframework.boot:spring-boot-starter-jdbc:1.5.10.RELEASE">
<archive path="E:/apache-maven-3.5.0/repository/org/springframework/boot/spring-boot-starter-jdbc/1.5.10.RELEASE/spring-boot-starter-jdbc-1.5.10.RELEASE.jar" />
</library>
<library name="Maven: com.github.jsqlparser:jsqlparser:1.0">
<archive path="E:/apache-maven-3.5.0/repository/com/github/jsqlparser/jsqlparser/1.0/jsqlparser-1.0.jar" />
</library>
<library name="Maven: com.github.pagehelper:pagehelper-spring-boot-autoconfigure:1.2.5">
<archive path="E:/apache-maven-3.5.0/repository/com/github/pagehelper/pagehelper-spring-boot-autoconfigure/1.2.5/pagehelper-spring-boot-autoconfigure-1.2.5.jar" />
</library>
<library name="Maven: org.thymeleaf:thymeleaf-spring5:3.0.9.RELEASE">
<archive path="E:/apache-maven-3.5.0/repository/org/thymeleaf/thymeleaf-spring5/3.0.9.RELEASE/thymeleaf-spring5-3.0.9.RELEASE.jar" />
</library>
<library name="Maven: ognl:ognl:3.1.12">
<archive path="E:/apache-maven-3.5.0/repository/ognl/ognl/3.1.12/ognl-3.1.12.jar" />
</library>
<library name="Maven: org.attoparser:attoparser:2.0.5.RELEASE">
<archive path="E:/apache-maven-3.5.0/repository/org/attoparser/attoparser/2.0.5.RELEASE/attoparser-2.0.5.RELEASE.jar" />
</library>
<library name="Maven: org.thymeleaf:thymeleaf:3.0.11.RELEASE">
<archive path="E:/apache-maven-3.5.0/repository/org/thymeleaf/thymeleaf/3.0.11.RELEASE/thymeleaf-3.0.11.RELEASE.jar" />
</library>
<library name="Maven: org.javassist:javassist:3.20.0-GA">
<archive path="E:/apache-maven-3.5.0/repository/org/javassist/javassist/3.20.0-GA/javassist-3.20.0-GA.jar" />
</library>
<library name="Maven: org.unbescape:unbescape:1.1.6.RELEASE">
<archive path="E:/apache-maven-3.5.0/repository/org/unbescape/unbescape/1.1.6.RELEASE/unbescape-1.1.6.RELEASE.jar" />
</library>
</eclipse-userlibraries>

@ -0,0 +1,190 @@
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>educational</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
<!-- dependency version -->
<spring.version>4.3.17.RELEASE</spring.version>
</properties>
<dependencies>
<!-- spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
<scope>test</scope>
</dependency>
<!-- mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.2</version>
</dependency>
<!-- jdbc -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.17</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.5</version>
</dependency>
<!-- servlet&jsp -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- email -->
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.1</version>
</dependency>
<!-- json -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.5</version>
</dependency>
<!--导入Thymeleaf模板引擎 -->
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf-spring5</artifactId>
<version>3.0.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf</artifactId>
<version>3.0.11.RELEASE</version>
</dependency>
<!-- apache commons -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.5</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.10</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.3</version>
</dependency>
<!-- logging -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.9.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.9.1</version>
</dependency>
<!-- test -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- springboot分页插件 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.5</version>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>${basedir}/src/main/resources</directory>
<!--<filtering>true</filtering>-->
</resource>
</resources>
<plugins>
<!-- Maven compiler begin -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
</plugin>
<!-- /Maven compiler end -->
<!-- Tomcat web server begin -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<path>/</path>
<uriEncoding>${project.build.sourceEncoding}</uriEncoding>
</configuration>
</plugin>
<!-- /Tomcat web server end -->
</plugins>
</build>
</project>

@ -0,0 +1,157 @@
package org.example.common;
import java.awt.*;
import java.awt.geom.QuadCurve2D;
import java.awt.image.BufferedImage;
import java.util.Random;
/**
*
* Created by liangshishen.
*/
public class CaptchaUtil {
// 随机数对象
private static final Random random = new Random(System.nanoTime());
// 验证码的大小
private static int width = 108, height = 40;
// 验证码随机字符数组
private static char[] charArray = "3456789ABCDEFGHJKMNPQRSTUVWXYabcdefghjkmnpqrstuvwxy".toCharArray();
// 验证码字体数组
private static Font[] RANDOM_FONT = new Font[]{
new Font("nyala", Font.BOLD, 38),
new Font("Arial", Font.BOLD, 32),
new Font("Bell MT", Font.BOLD, 32),
new Font("Credit valley", Font.BOLD, 34),
new Font("Impact", Font.BOLD, 32),
new Font(Font.MONOSPACED, Font.BOLD, 40)
};
public static Captcha createCaptcha() {
String randomString = getRandomString();
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
drawGraphic(randomString, image);
return new Captcha(randomString, image);
}
/*
*
*/
private static String getRandomString() {
char[] randomChars = new char[4];
for (int i = 0; i < randomChars.length; i++) {
randomChars[i] = charArray[random.nextInt(charArray.length)];
}
return String.valueOf(randomChars);
}
private static void drawGraphic(String randomString, BufferedImage image) {
// 获取图形上下文
Graphics2D g = image.createGraphics();
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR);
// 图形抗锯齿
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
// 字体抗锯齿
g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
// 设定背景色
g.setColor(getRandomColor(210, 250));
g.fillRect(0, 0, width, height);
Color color = null;
// 画蛋蛋,有蛋的生活才精彩
// for (int i = 0; i < 10; i++) {
// color = getRandomColor(120, 200);
// g.setColor(color);
// g.drawOval(random.nextInt(width), random.nextInt(height), 5 + random.nextInt(10), 5 + random.nextInt(10));
// color = null;
// }
// 绘制小字符背景
for (int i = 0; i < 20; i++) {
color = getRandomColor(120, 200);
g.setColor(color);
String rand = String.valueOf(charArray[random.nextInt(charArray.length)]);
g.drawString(rand, random.nextInt(width), random.nextInt(height));
color = null;
}
// 设定字体
g.setFont(RANDOM_FONT[random.nextInt(RANDOM_FONT.length)]);
// 绘制验证码
for (int i = 0; i < randomString.length(); i++) {
// 旋转度数 最好小于45度
int degree = random.nextInt(28);
if (i % 2 == 0) {
degree = degree * (-1);
}
// 定义坐标
int x = 22 * i, y = 21;
// 旋转区域
g.rotate(Math.toRadians(degree), x, y);
// 设定字体颜色
color = getRandomColor(20, 130);
g.setColor(color);
// 将认证码显示到图象中
g.drawString(String.valueOf(randomString.charAt(i)), x + 8, y + 10);
// 旋转之后,必须旋转回来
g.rotate(-Math.toRadians(degree), x, y);
}
// 图片中间曲线使用上面缓存的color
g.setColor(color);
// width是线宽float型
BasicStroke bs = new BasicStroke(3);
g.setStroke(bs);
// 画出曲线
QuadCurve2D.Double curve = new QuadCurve2D.Double(0d, random.nextInt(height - 8) + 4, width / 2, height / 2, width, random.nextInt(height - 8) + 4);
g.draw(curve);
// 销毁图像
g.dispose();
}
/*
*
*/
private static Color getRandomColor(int fc, int bc) {
Random random = new Random();
if (fc > 255)
fc = 255;
if (bc > 255)
bc = 255;
int r = fc + random.nextInt(bc - fc);
int g = fc + random.nextInt(bc - fc);
int b = fc + random.nextInt(bc - fc);
return new Color(r, g, b);
}
/*
*
*/
public static class Captcha {
private String code;
private BufferedImage image;
private Captcha(String code, BufferedImage image) {
this.code = code;
this.image = image;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public BufferedImage getImage() {
return image;
}
public void setImage(BufferedImage image) {
this.image = image;
}
}
}

@ -0,0 +1,95 @@
package org.example.common.page;
import org.example.utils.StringUtils;
//导入了 StringUtils 工具类,用于字符串处理
/**
*
*
* @author ruoyi
*/
//PageDomain 类用于存储分页数据
public class PageDomain
{
/** 当前记录起始索引 */
private Integer pageNum;
/** 每页显示记录数 */
private Integer pageSize;
/** 排序列 */
private String orderByColumn;
/** 排序的方向desc或者asc升序 */
private String isAsc = "asc";
/** 排序的方向desc或者asc */
private String isDesc = "desc";
private Integer page;
private Integer limit;
public String getOrderBy()
{
if (StringUtils.isEmpty(orderByColumn))
{
return "";
}
return StringUtils.toUnderScoreCase(orderByColumn) + " " + isAsc;
}
public Integer getPageNum()
{
return pageNum;
}
public void setPageNum(Integer pageNum)
{
this.pageNum = pageNum;
}
public Integer getPageSize()
{
return pageSize;
}
public void setPageSize(Integer pageSize)
{
this.pageSize = pageSize;
}
public String getOrderByColumn()
{
return orderByColumn;
}
public void setOrderByColumn(String orderByColumn)
{
this.orderByColumn = orderByColumn;
}
public String getIsAsc()
{
return isAsc;
}
public void setIsAsc(String isAsc)
{
this.isAsc = isAsc;
}
public Integer getPage() {
return page;
}
public void setPage(Integer page) {
this.page = page;
}
public Integer getLimit() {
return limit;
}
public void setLimit(Integer limit) {
this.limit = limit;
}
}

@ -0,0 +1,108 @@
package org.example.common.page;
import java.io.Serializable;
import java.util.List;
/**
*
*
* @author ruoyi
*/
public class TableDataInfo implements Serializable
{
// 这是 serialVersionUID它是用来验证序列化和反序列化版本的一种机制。
// 如果在反序列化时版本不一致,会抛出 InvalidClassException。这里给定了一个版本号 1L。
private static final long serialVersionUID = 1L;
/** 总记录数 */
private long total;
/** 列表数据 */
private List<?> rows;
/** 消息状态码 */
private int code;
/** 消息内容 */
private String msg;
private Integer count;
private List<?> data;
/**
*
*/
public TableDataInfo()
{
}
/**
*
*
* @param list
* @param total
*/
public TableDataInfo(List<?> list, int total)
{
this.rows = list;
this.total = total;
}
public long getTotal()
{
return total;
}
public void setTotal(long total)
{
this.total = total;
}
public List<?> getRows()
{
return rows;
}
public void setRows(List<?> rows)
{
this.rows = rows;
}
public int getCode()
{
return code;
}
public void setCode(int code)
{
this.code = code;
}
public String getMsg()
{
return msg;
}
public void setMsg(String msg)
{
this.msg = msg;
}
public Integer getCount() {
return count;
}
public void setCount(Integer count) {
this.count = count;
}
public List<?> getData() {
return data;
}
public void setData(List<?> data) {
this.data = data;
}
}

@ -0,0 +1,65 @@
package org.example.controller;
import com.github.pagehelper.PageInfo;
import org.example.common.page.TableDataInfo;
import org.example.utils.ServletUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.util.List;
/**
* web
*
* @author ruoyi
*/
public class BaseController
{
protected final Logger logger = LoggerFactory.getLogger(this.getClass());
/**
* request
*/
public HttpServletRequest getRequest()
{
return ServletUtils.getRequest();
}
/**
* response
*/
public HttpServletResponse getResponse()
{
return ServletUtils.getResponse();
}
/**
* session
*/
public HttpSession getSession()
{
return getRequest().getSession();
}
/**
*
*/
protected TableDataInfo getDataTable(List<?> list)
{
/**
* bootstraplayui
*/
TableDataInfo rspData = new TableDataInfo();
rspData.setCode(0);
rspData.setRows(list);
rspData.setData(list);//layui
rspData.setCount(1);//layui
rspData.setMsg("");//layui
rspData.setTotal(new PageInfo(list).getTotal());
return rspData;
}
}

@ -0,0 +1,141 @@
package org.example.controller;
import com.github.pagehelper.PageInfo;
import org.example.domain.Course;
import org.example.domain.CourseSelection;
import org.example.domain.Result;
import org.example.domain.User;
import org.example.service.ICourseService;
import org.example.service.ISelectionService;
import org.example.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpSession;
import java.util.Map;
import static org.example.domain.Result.toAjax;
import static org.example.utils.LayuiTableDateFormat.LayuiTableDateFormat;
/**
* Controller
*
*/
@Controller
@RequestMapping("/course")
public class CourseController extends BaseController
{
private String prefix = "course";
@Autowired
private ICourseService courseService;
@Autowired
private IUserService userService;
@Autowired
private ISelectionService selectionService;
@GetMapping("/list")
public String course()
{
return prefix + "/list";
}
@GetMapping("/myList")
public String myList()
{
return prefix + "/myList";
}
/**
*
*/
@RequestMapping("/getList")
@ResponseBody
public Map<String,Object> list(Course course, HttpSession session) {
PageInfo<Course> pageInfo = courseService.selectCourseList(course);
// 是否已选 根据当前用户判断
pageInfo.getList().forEach(item ->{
// 根据当前用户ID 和课程ID去查记录表 如果有数据,说明已选,反之未选择
Long id = item.getId();
CourseSelection selection = new CourseSelection();
selection.setCourseId(id);
selection.setStudentId( Long.valueOf(session.getAttribute("uid").toString()));
// 根据当前用户ID 和课程ID去查记录表
PageInfo<CourseSelection> courseSelectionPageInfo = selectionService.selectCourseSelectionList(selection);
// 判断是否有数据
item.setSelected(courseSelectionPageInfo.getTotal() > 0);
});
return LayuiTableDateFormat(pageInfo.getList(),pageInfo.getTotal());
}
/**
*
*/
@GetMapping("/add")
public String add(ModelMap mmap)
{
User teacher = new User();
teacher.setRoleId("2");
PageInfo<User> userPageInfo = userService.selectUserList(teacher);
mmap.put("teacher",userPageInfo.getList());
return prefix + "/add";
}
/**
*
*/
@PostMapping("/add")
@ResponseBody
public Result addSave(Course course) {
Course course1 = new Course();
course1.setName(course.getName());
PageInfo<Course> rolePageInfo = courseService.selectCourseList(course1);
if(rolePageInfo.getTotal()>0){
return Result.error("课程名称已存在!");
}
return toAjax(courseService.insertCourse(course));
}
/**
*
*/
@GetMapping("/edit/{id}")
public String edit(@PathVariable("id") Long id, ModelMap mmap) {
Course course = courseService.selectCourseById(id);
mmap.put("course", course);
User teacher = new User();
teacher.setRoleId("2");
PageInfo<User> userPageInfo = userService.selectUserList(teacher);
mmap.put("teacher",userPageInfo.getList());
return prefix + "/edit";
}
/**
*
*/
@PostMapping("/edit")
@ResponseBody
public Result editSave(Course course)
{
return toAjax(courseService.updateCourse(course));
}
/**
*
*/
@PostMapping( "/remove")
@ResponseBody
public Result remove(String ids)
{
return toAjax(courseService.deleteCourseByIds(ids));
}
}

@ -0,0 +1,124 @@
package org.example.controller;
import com.github.pagehelper.PageInfo;
import org.example.domain.CourseSelection;
import org.example.domain.Result;
import org.example.service.ISelectionService;
import org.example.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpSession;
import java.util.Map;
import static org.example.domain.Result.toAjax;
import static org.example.utils.LayuiTableDateFormat.LayuiTableDateFormat;
/**
* Controller
*/
@Controller
@RequestMapping("/selection")
public class CourseSelectionController extends BaseController
{
private String prefix = "selection";
@Autowired
private ISelectionService selectionService;
@Autowired
private IUserService userService;
@GetMapping("/list")
public String selection()
{
return prefix + "/list";
}
@GetMapping("/myList")
public String myList()
{
return prefix + "/myList";
}
/**
*
*/
@RequestMapping("/getList")
@ResponseBody
public Map<String,Object> list(CourseSelection selection, HttpSession session) {
PageInfo<CourseSelection> pageInfo = selectionService.selectCourseSelectionList(selection);
return LayuiTableDateFormat(pageInfo.getList(),pageInfo.getTotal());
}
/**
*
*/
@PostMapping("/add")
@ResponseBody
public Result addSave(CourseSelection selection, HttpSession session) {
CourseSelection params = new CourseSelection();
params.setStudentId(Long.valueOf(session.getAttribute("uid").toString()));
PageInfo<CourseSelection> rolePageInfo = selectionService.selectCourseSelectionList(params);
if(rolePageInfo.getTotal()>0){
return Result.error("此课程你已选择!");
}
return toAjax(selectionService.insertCourseSelection(selection));
}
/**
* /
*/
@PostMapping("/handleSelect")
@ResponseBody
public Result handleSelect(String id,Boolean selected, HttpSession session) {
CourseSelection selection = new CourseSelection();
selection.setStudentId(Long.valueOf(session.getAttribute("uid").toString()));
selection.setCourseId(Long.valueOf(id));
PageInfo<CourseSelection> rolePageInfo = selectionService.selectCourseSelectionList(selection);
if(selected){
// 如果已选的 那就是删除
rolePageInfo.getList().forEach(item ->{
toAjax(selectionService.deleteCourseSelectionByIds(item.getId().toString()));
});
return toAjax(1);
}else {
// 未选 新增
if(rolePageInfo.getTotal()>0){
return Result.error("此课程你已选择!");
}
return toAjax(selectionService.insertCourseSelection(selection));
}
}
/**
*
*/
@PostMapping("/edit")
@ResponseBody
public Result editSave(CourseSelection selection)
{
return toAjax(selectionService.updateCourseSelection(selection));
}
/**
*
*/
@PostMapping( "/remove")
@ResponseBody
public Result remove(String ids)
{
return toAjax(selectionService.deleteCourseSelectionByIds(ids));
}
}

@ -0,0 +1,37 @@
package org.example.controller;
import com.github.pagehelper.PageInfo;
import org.example.domain.User;
import org.example.service.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpSession;
@Controller
@RequestMapping("main")
public class IndexController {
@Autowired
private IUserService userService;
@RequestMapping({"","index"})
public String showIndex(ModelMap mmap, HttpSession session){
Object user = session.getAttribute("user");
mmap.put("user",(User) user);
return "include/index";
}
@RequestMapping("/welcome")
public String showWelcome(ModelMap mmap, HttpSession session){
//用户数量
PageInfo<User> pageInfo = userService.selectUserList(new User());
mmap.put("userTotal",pageInfo.getTotal());
return "include/welcome";
}
}

@ -0,0 +1,283 @@
package org.example.controller;
import java.io.IOException;
import java.util.Date;
import java.util.Map;
import com.github.pagehelper.PageInfo;
import org.example.common.CaptchaUtil;
import org.example.domain.ResponseResult;
import org.example.domain.Result;
import org.example.utils.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.*;
import org.example.domain.User;
import org.example.service.IUserService;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import static org.example.common.CaptchaUtil.createCaptcha;
import static org.example.utils.LayuiTableDateFormat.LayuiTableDateFormat;
/**
* Controller
*
*/
@Controller
@RequestMapping("/user")
public class UserController extends BaseController
{
private String prefix = "user";
@Autowired
private IUserService userService;
@GetMapping("/list")
public String list()
{
return prefix + "/list";
}
/**
*
*/
@RequestMapping("/getList")
@ResponseBody
public Map<String, Object> list(User user, HttpServletRequest request) {
PageInfo<User> pageInfo = userService.selectUserList(user);
return LayuiTableDateFormat(pageInfo.getList(),pageInfo.getTotal());
}
/**
*
*/
@GetMapping("/add")
public String add() {
return prefix + "/add";
}
@PostMapping("/add")
@ResponseBody
public Result addSave(User user) {
user.setCreatedate(new Date());
String phone =user.getPhone();
String username =user.getUsername();
if(StringUtils.isBlank(username)){
return Result.error("账号不能!");
}
if(StringUtils.isBlank(phone)){
return Result.error("手机不能为空!");
}
// 根据手机号校验当前数据库是否已经存在
User user1 = new User();
user1.setPhone(phone);
PageInfo<User> pageInfo = userService.selectUserList(user1);
if(pageInfo.getTotal()>0){
return Result.error("该手机号已经被注册!");
}
// 根据用户名查找当前数据库是否已经存在
user1.setPhone(null);
user1.setUsername(username);
pageInfo = userService.selectUserList(user1);
if(pageInfo.getTotal()>0){
return Result.error(username+"已经存在!");
}
return Result.toAjax(userService.insertUser(user));
}
/**
*
*/
@GetMapping("/edit/{id}")
public String edit(@PathVariable("id") int id, ModelMap mmap) {
User user = userService.selectUserById(id);
mmap.put("user", user);
return prefix + "/edit";
}
/**
*
*/
@PostMapping("/edit")
@ResponseBody
public Result editSave(User user) {
return Result.toAjax(userService.updateUser(user));
}
/**
*
*/
@GetMapping("/reset/{id}")
public String reset(@PathVariable("id") int id, ModelMap mmap) {
User user = userService.selectUserById(id);
mmap.put("user", user);
return prefix + "/resetPassword";
}
/**
*
*/
@GetMapping("/reset")
public Result handleReset(User user) {
return Result.toAjax(userService.handleReset(user));
}
/**
*
*/
@PostMapping( "/remove")
@ResponseBody
public Result remove(String ids)
{
return Result.toAjax(userService.deleteUserByIds(ids));
}
/**
*
* @param session
* @return
*/
@RequestMapping(value = "/handle_login", method = RequestMethod.POST)
@ResponseBody
public Result handleLogin(User user, HttpSession session) {
User user1 = userService.login(user.getUsername(), user.getPassword());
System.out.println(user1);
if(StringUtils.isNotNull(user1)){
//将用户信息封装到session中
session.setAttribute("user", user1);
session.setAttribute("uid", user1.getId());
session.setAttribute("username", user1.getUsername());
session.setAttribute("role", user1.getRoleId());
ResponseResult<User> rr = new ResponseResult<User>();
rr.setData(user1);
return Result.success("登录成功!");
}else{
return Result.error("用户或密码错误");
}
}
/**
*
* @param session
* @param request
* @return
*/
@RequestMapping(value = "/handle_reg", method = RequestMethod.POST)
@ResponseBody
public Result handleReg(User user, HttpSession session, HttpServletRequest request) {
String phone =user.getPhone();
String username =user.getUsername();
if(StringUtils.isBlank(username)){
return Result.error("账号!");
}
if(StringUtils.isBlank(phone)){
return Result.error("手机不能为空!");
}
User user1 = new User();
user1.setPhone(phone);
PageInfo<User> pageInfo = userService.selectUserList(user1);
if(pageInfo.getTotal()>0){
return Result.error("该手机号已经被注册!");
}
user.setCreatedate(new Date());
user.setRoleId("1");//默认是学生
user.setRemark("前端注册的用户");
// 调用业务层对象的User reg(User user)方法
User reg = userService.reg(user);
if(reg ==null){
return Result.error("账号已存在!");
}
return Result.success();
}
/**
* 退
* @param user
* @param session
*/
@RequestMapping(value ="/exit",method=RequestMethod.POST)
@ResponseBody
public Result exit(User user,HttpSession session){
session.removeAttribute("uid");
session.removeAttribute("user");
session.removeAttribute("username");
return new Result();
}
/**
*
* @param response
* @return
* @throws ServletException
* @throws IOException
*/
@RequestMapping("/getCaptcha")
@ResponseBody
public Result getCaptcha(HttpServletResponse response,HttpServletRequest request) throws ServletException, IOException{
CaptchaUtil.Captcha captcha = createCaptcha();
String code =captcha.getCode();
request.getSession().setAttribute("captcha",code);
request.getSession().setAttribute("codeTime", new Date().getTime());
System.out.println("captcha="+code);
try {
ImageIO.write(captcha.getImage(),"jpg", getResponse().getOutputStream());
} catch (IOException e) {
e.printStackTrace();
}
return Result.success(code);
}
/**
* @param checkCode
*/
@RequestMapping(value = "/verify")
@ResponseBody
public Result checkcode(HttpServletRequest request, String checkCode) {
HttpSession session = request.getSession();
// 获得验证码对象
Object cko = session.getAttribute("captcha");
System.out.println("cko="+cko+",captcha="+checkCode);
if (cko == null) {
request.setAttribute("errorMsg", "请输入验证码!");
return Result.error("请输入验证码!");
}
String captcha = cko.toString();
// 判断验证码输入是否正确
if (StringUtils.isEmpty(checkCode) || captcha == null || !(checkCode.equalsIgnoreCase(captcha))) {
request.setAttribute("errorMsg", "验证码错误!");
return Result.error("验证码错误,请重新输入!");
} else {
// 验证码有效时长为1分钟
Date now = new Date();
Long codeTime = Long.valueOf(session.getAttribute("codeTime") + "");
if ((now.getTime() - codeTime) / 1000 / 60 > 2) {
request.setAttribute("errorMsg", "验证码已失效,请重新输入!");
return Result.error("验证码已失效,请重新输入!");
} else {
// 在这里可以处理自己需要的事务,比如验证登陆等
return Result.success();
}
}
}
}

@ -0,0 +1,120 @@
package org.example.domain;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.io.Serializable;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
public class BaseEntity implements Serializable
{
private static final long serialVersionUID = 1L;
/** 搜索值 */
private String searchValue;
/** 创建者 */
private String createBy;
/** 创建时间 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
/** 更新者 */
private String updateBy;
/** 更新时间 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
/** 备注 */
private String remark;
private Long count;
/** 请求参数 */
private Map<String, Object> params;
public String getSearchValue()
{
return searchValue;
}
public void setSearchValue(String searchValue)
{
this.searchValue = searchValue;
}
public String getCreateBy()
{
return createBy;
}
public void setCreateBy(String createBy)
{
this.createBy = createBy;
}
public Date getCreateTime()
{
return createTime;
}
public void setCreateTime(Date createTime)
{
this.createTime = createTime;
}
public String getUpdateBy()
{
return updateBy;
}
public void setUpdateBy(String updateBy)
{
this.updateBy = updateBy;
}
public Date getUpdateTime()
{
return updateTime;
}
public Long getCount() {
return count;
}
public void setCount(Long count) {
this.count = count;
}
public void setUpdateTime(Date updateTime)
{
this.updateTime = updateTime;
}
public String getRemark()
{
return remark;
}
public void setRemark(String remark)
{
this.remark = remark;
}
public Map<String, Object> getParams()
{
if (params == null)
{
params = new HashMap<>();
}
return params;
}
public void setParams(Map<String, Object> params)
{
this.params = params;
}
}

@ -0,0 +1,89 @@
package org.example.domain;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
/**
*
*
*/
public class Course extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** id */
private Long id;
/** 课程名称 */
private String name;
/** 课程编号 */
private String courseNo;
/** 任课老师ID */
private Long teacherId;
private User teacher;
private Boolean selected;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCourseNo() {
return courseNo;
}
public void setCourseNo(String courseNo) {
this.courseNo = courseNo;
}
public Long getTeacherId() {
return teacherId;
}
public void setTeacherId(Long teacherId) {
this.teacherId = teacherId;
}
public User getTeacher() {
return teacher;
}
public void setTeacher(User teacher) {
this.teacher = teacher;
}
public Boolean getSelected() {
return selected;
}
public void setSelected(Boolean selected) {
this.selected = selected;
}
@Override
public String toString() {
return "Course{" +
"id=" + id +
", name='" + name + '\'' +
", courseNo='" + courseNo + '\'' +
", teacherId=" + teacherId +
", teacher=" + teacher +
", selected=" + selected +
'}';
}
}

@ -0,0 +1,98 @@
package org.example.domain;
/**
*
*
*/
public class CourseSelection extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** id */
private Long id;
/** 课程Id*/
private Long courseId;
private Course course;
private Long studentId;
private User student;
/** 分数 */
private String scores;
/**
*
*/
private Boolean selected;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Long getCourseId() {
return courseId;
}
public void setCourseId(Long courseId) {
this.courseId = courseId;
}
public Course getCourse() {
return course;
}
public void setCourse(Course course) {
this.course = course;
}
public Long getStudentId() {
return studentId;
}
public void setStudentId(Long studentId) {
this.studentId = studentId;
}
public User getStudent() {
return student;
}
public void setStudent(User student) {
this.student = student;
}
public String getScores() {
return scores;
}
public void setScores(String scores) {
this.scores = scores;
}
public Boolean getSelected() {
return selected;
}
public void setSelected(Boolean selected) {
this.selected = selected;
}
@Override
public String toString() {
return "CourseSelection{" +
"id=" + id +
", courseId='" + courseId + '\'' +
", course=" + course +
", studentId=" + studentId +
", student=" + student +
", scores='" + scores + '\'' +
", selected=" + selected +
'}';
}
}

@ -0,0 +1,49 @@
package org.example.domain;
public class ResponseResult<T> {
private Integer state = 0;
private String message;
private T data;
public ResponseResult() {
super();
}
public ResponseResult(Integer state, String message) {
super();
this.state = state;
this.message = message;
}
public ResponseResult(Integer state, Exception e) {
super();
this.state = state;
this.message = e.getMessage();
}
public Integer getState() {
return state;
}
public void setState(Integer state) {
this.state = state;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
}

@ -0,0 +1,217 @@
package org.example.domain;
import org.example.utils.StringUtils;
import java.util.HashMap;
public class Result extends HashMap<String, Object>
{
private static final long serialVersionUID = 1L;
/** 状态码 */
public static final String CODE_TAG = "code";
/** 返回内容 */
public static final String MSG_TAG = "msg";
/** 数据对象 */
public static final String DATA_TAG = "data";
/**
*
*/
public enum Type
{
/** 成功 */
SUCCESS(0),
/** 警告 */
WARN(301),
/** 错误 */
ERROR(500);
private final int value;
Type(int value)
{
this.value = value;
}
public int value()
{
return this.value;
}
}
/**
* Result 使
*/
public Result()
{
}
/**
* Result
*
* @param type
* @param msg
*/
public Result(Type type, String msg)
{
super.put(CODE_TAG, type.value);
super.put(MSG_TAG, msg);
}
/**
* Result
*
* @param type
* @param msg
* @param data
*/
public Result(Type type, String msg, Object data)
{
super.put(CODE_TAG, type.value);
super.put(MSG_TAG, msg);
if (StringUtils.isNotNull(data))
{
super.put(DATA_TAG, data);
}
}
/**
* 便
*
* @param key
* @param value
* @return
*/
@Override
public Result put(String key, Object value)
{
super.put(key, value);
return this;
}
/**
*
*
* @return
*/
public static Result success()
{
return Result.success("操作成功");
}
/**
*
*
* @return
*/
public static Result success(Object data)
{
return Result.success("操作成功", data);
}
/**
*
*
* @param msg
* @return
*/
public static Result success(String msg)
{
return Result.success(msg, null);
}
/**
*
*
* @param msg
* @param data
* @return
*/
public static Result success(String msg, Object data)
{
return new Result(Type.SUCCESS, msg, data);
}
/**
*
*
* @param msg
* @return
*/
public static Result warn(String msg)
{
return Result.warn(msg, null);
}
/**
*
*
* @param msg
* @param data
* @return
*/
public static Result warn(String msg, Object data)
{
return new Result(Type.WARN, msg, data);
}
/**
*
*
* @return
*/
public static Result error()
{
return Result.error("操作失败");
}
/**
*
*
* @param msg
* @return
*/
public static Result error(String msg)
{
return Result.error(msg, null);
}
/**
*
*
* @param msg
* @param data
* @return
*/
public static Result error(String msg, Object data)
{
return new Result(Type.ERROR, msg, data);
}
public boolean isSuccess(){
Object o=this.get(Result.CODE_TAG);
if(o!=null){
int code=(Integer) o;
if(code== Type.SUCCESS.value){
return true;
}
}
return false;
}
/**
*
*
* @param rows
* @return
*/
public static Result toAjax(int rows)
{
return rows > 0 ? success() : error();
}
}

@ -0,0 +1,143 @@
package org.example.domain;
import java.util.Date;
/**
* user
*
*/
public class User extends BaseEntity
{
private static final long serialVersionUID = 1L;
private Integer id;
/** 用户名 */
private String username;
/** 密码 */
private String password;
/** 角色id */
private String roleId;
/** 真实姓名 */
private String realName;
/** 电话 */
private String phone;
/** 年龄 */
private String age;
/** 性别 */
private String sex;
/** 创建时间 */
private Date createdate;
/** 密码 */
private String oldPassword;
public void setId(Integer id)
{
this.id = id;
}
public Integer getId()
{
return id;
}
public void setUsername(String username)
{
this.username = username;
}
public String getUsername()
{
return username;
}
public void setPassword(String password)
{
this.password = password;
}
public String getPassword()
{
return password;
}
public void setRoleId(String roleId)
{
this.roleId = roleId;
}
public String getRoleId()
{
return roleId;
}
public void setPhone(String phone)
{
this.phone = phone;
}
public String getPhone()
{
return phone;
}
public void setCreatedate(Date createdate)
{
this.createdate = createdate;
}
public Date getCreatedate()
{
return createdate;
}
public String getRealName() {
return realName;
}
public void setRealName(String realName) {
this.realName = realName;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getOldPassword() {
return oldPassword;
}
public void setOldPassword(String oldPassword) {
this.oldPassword = oldPassword;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
", roleId='" + roleId + '\'' +
", realName='" + realName + '\'' +
", phone='" + phone + '\'' +
", age='" + age + '\'' +
", sex='" + sex + '\'' +
", createdate=" + createdate +
", oldPassword='" + oldPassword + '\'' +
'}';
}
}

@ -0,0 +1,90 @@
package org.example.filter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.example.service.impl.UserServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
public class HtmlAccessFilter implements Filter {
@Autowired
private UserServiceImpl userService;
/**
* 访html
*/
private List<String> accessibleHtml;
public void init(FilterConfig arg0)
throws ServletException {
// 初始化方法
System.out.println("HtmlAccessFilter.init()");
// 穷举允许直接访问的html文件
accessibleHtml = new ArrayList<String>();
accessibleHtml.add("register.html");
accessibleHtml.add("login.html");
accessibleHtml.add("index.html");
System.out.println("允许直接访问的html文件");
System.out.println(accessibleHtml);
}
public void doFilter(ServletRequest arg0,
ServletResponse arg1, FilterChain filterChain)
throws IOException, ServletException {
// 执行过滤的方法
System.out.println("HtmlAccessFilter.doFilter()");
// 获取当前访问时的页面
HttpServletRequest request = (HttpServletRequest) arg0;
String uri = request.getRequestURI();
System.out.println("\turi=" + uri);
String[] pathArray = uri.split("/");
String file = pathArray[pathArray.length - 1];
System.out.println("\tfile=" + file);
HttpServletResponse response= (HttpServletResponse) arg1;
// 判断当前页面是否直接放行
if (accessibleHtml.contains(file)) {
System.out.println("\t【放行】");
// 继续执行过滤器链中后续的其它过滤器
filterChain.doFilter(arg0, arg1);
return;
}
System.out.println("\t【拦截】");
// 判断是否登录
HttpSession session = request.getSession();
if (session.getAttribute("uid") != null) {
// session中有uid即已登录则放行
System.out.println("\t已经登录放行");
filterChain.doFilter(arg0, arg1);
return;
}else {
// 此次访问的html不在白名单中并且没有登录
// 重定向到登录页
String loginURI = request.getContextPath() + "/index.html";
System.out.println("\t未登录重定向到" + loginURI);
response.sendRedirect(loginURI);
}
}
public void destroy() {
// 销毁方法
System.out.println("HtmlAccessFilter.destroy()");
}
}

@ -0,0 +1,54 @@
package org.example.interceptor;
import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
public class LoginInterceptor
implements HandlerInterceptor {
public boolean preHandle(
HttpServletRequest request,
HttpServletResponse response,
Object handler)
throws Exception {
System.out.println("LoginInterceptor.preHandle()");
//登录拦截器的目标:
//如果登录了,正常访问
//如果没登录,拦截,重定向到登录页
HttpSession session
= request.getSession();
System.out.println("session.getAttribute(\"username\")=" + session.getAttribute("username"));
if (session.getAttribute("username") == null) {
//Session中没有登录的用户信息
//即:用户没有登录
//则:重定向到登录页
String loginURI = request.getContextPath() + "/login.html";
response.sendRedirect(loginURI);
//拦截
return false;
} else {
//放行
return true;
}
}
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
System.out.println("LoginInterceptor.postHandle()");
}
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
System.out.println("LoginInterceptor.afterCompletion()");
}
}

@ -0,0 +1,59 @@
package org.example.mapper;
import org.example.domain.Course;
import java.util.List;
/**
* Mapper
*/
public interface CourseMapper
{
/**
*
*
* @param id ID
* @return
*/
public Course selectCourseById(Long id);
/**
*
*
* @param course
* @return
*/
public List<Course> selectCourseList(Course course);
/**
*
*
* @param course
* @return
*/
public int insertCourse(Course course);
/**
*
*
* @param course
* @return
*/
public int updateCourse(Course course);
/**
*
*
* @param id ID
* @return
*/
public int deleteCourseById(Long id);
/**
*
*
* @param ids ID
* @return
*/
public int deleteCourseByIds(String[] ids);
}

@ -0,0 +1,53 @@
package org.example.mapper;
import org.example.domain.CourseSelection;
import java.util.List;
/**
* Mapper
*/
public interface SelectionMapper
{
/**
*
*
* @param id ID
* @return
*/
public CourseSelection selectCourseSelectionById(Long id);
/**
*
*
* @param selection
* @return
*/
public List<CourseSelection> selectCourseSelectionList(CourseSelection selection);
/**
*
*
* @param selection
* @return
*/
public int insertCourseSelection(CourseSelection selection);
/**
*
*
* @param id ID
* @return
*/
public int deleteCourseSelectionById(Long id);
/**
*
*
* @param ids ID
* @return
*/
public int deleteCourseSelectionByIds(String[] ids);
int updateCourseSelection(CourseSelection selection);
}

@ -0,0 +1,67 @@
package org.example.mapper;
import java.util.List;
import org.example.domain.User;
/**
* Mapper
*
*/
public interface UserMapper
{
/**
*
*
* @param id ID
* @return
*/
public User selectUserById(Integer id);
/**
*
*
* @param username username
* @return
*/
public User selectUserByUsername(String username);
/**
*
*
* @param user
* @return
*/
public List<User> selectUserList(User user);
/**
*
*
* @param user
* @return
*/
public int insertUser(User user);
/**
*
*
* @param user
* @return
*/
public int updateUser(User user);
/**
*
*
* @param id ID
* @return
*/
public int deleteUserById(Integer id);
/**
*
*
* @param ids ID
* @return
*/
public int deleteUserByIds(String[] ids);
}

@ -0,0 +1,61 @@
package org.example.service;
import com.github.pagehelper.PageInfo;
import org.example.domain.Course;
/**
* Service
*
* @author sumucheng
* @date 2021-07-07
*/
public interface ICourseService
{
/**
*
*
* @param id ID
* @return
*/
public Course selectCourseById(Long id);
/**
*
*
* @param course
* @return
*/
public PageInfo<Course> selectCourseList(Course course);
/**
*
*
* @param course
* @return
*/
public int insertCourse(Course course);
/**
*
*
* @param course
* @return
*/
public int updateCourse(Course course);
/**
*
*
* @param ids ID
* @return
*/
public int deleteCourseByIds(String ids);
/**
*
*
* @param id ID
* @return
*/
public int deleteCourseById(Long id);
}

@ -0,0 +1,53 @@
package org.example.service;
import com.github.pagehelper.PageInfo;
import org.example.domain.CourseSelection;
/**
* Service
*
*/
public interface ISelectionService
{
/**
*
*
* @param id ID
* @return
*/
public CourseSelection selectCourseSelectionById(Long id);
/**
*
*
* @param selection
* @return
*/
public PageInfo<CourseSelection> selectCourseSelectionList(CourseSelection selection);
/**
*
*
* @param selection
* @return
*/
public int insertCourseSelection(CourseSelection selection);
/**
*
*
* @param ids ID
* @return
*/
public int deleteCourseSelectionByIds(String ids);
/**
*
*
* @param id ID
* @return
*/
public int deleteCourseSelectionById(Long id);
int updateCourseSelection(CourseSelection selection);
}

@ -0,0 +1,84 @@
package org.example.service;
import java.util.List;
import com.github.pagehelper.PageInfo;
import org.example.domain.Result;
import org.example.domain.User;
import org.example.service.xe.PasswordNotMatchException;
import org.example.service.xe.UserNotFoundException;
/**
* Service
*
*/
public interface IUserService
{
/**
*
*
* @param id ID
* @return
*/
public User selectUserById(int id);
/**
*
*
* @param user
* @return
*/
public PageInfo<User> selectUserList(User user);
/**
*
*
* @param user
* @return
*/
public int insertUser(User user);
/**
*
*
* @param user
* @return
*/
public int updateUser(User user);
/**
*
*
* @param ids ID
* @return
*/
public int deleteUserByIds(String ids);
/**
*
*
* @param id ID
* @return
*/
public int deleteUserById(int id);
/**
*
* @param username
* @param password
* @return
*/
User login(String username, String password);
/**
*
* @param user
* @return
*/
User reg(User user);
/**
*
*/
public int handleReset(User user);
}

@ -0,0 +1,112 @@
package org.example.service.impl;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.example.domain.Course;
import org.example.mapper.CourseMapper;
import org.example.service.ICourseService;
import org.example.utils.Convert;
import org.example.utils.ServletUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
/**
* Service
*/
@Service
public class CourseServiceImpl implements ICourseService
{
@Autowired
private CourseMapper courseMapper;
/**
*
*
* @param id ID
* @return
*/
@Override
public Course selectCourseById(Long id)
{
return courseMapper.selectCourseById(id);
}
/**
*
*
* @param course
* @return
*/
@Override
public PageInfo<Course> selectCourseList(Course course) {
Integer pageNum = ServletUtils.getParameterToInt("page");//从request获取page
Integer pageSize = ServletUtils.getParameterToInt("limit");//从request获取limit
List<Course> courses = new ArrayList<>();
if (pageNum != null) {
//分页查询
if (pageNum <= 0) { pageNum = 1; }
if (pageSize <= 0) { pageSize = 10; }
Page page = PageHelper.startPage(pageNum, pageSize);
courses = courseMapper.selectCourseList(course);
} else {
//普通查询
courses = courseMapper.selectCourseList(course);
}
//封装
PageInfo info = new PageInfo<>(courses);
return info;
}
/**
*
*
* @param Course
* @return
*/
@Override
public int insertCourse(Course course)
{
return courseMapper.insertCourse(course);
}
/**
*
*
* @param course
* @return
*/
@Override
public int updateCourse(Course course)
{
return courseMapper.updateCourse(course);
}
/**
*
*
* @param ids ID
* @return
*/
@Override
public int deleteCourseByIds(String ids)
{
return courseMapper.deleteCourseByIds(Convert.toStrArray(ids));
}
/**
*
*
* @param id ID
* @return
*/
@Override
public int deleteCourseById(Long id)
{
return courseMapper.deleteCourseById(id);
}
}

@ -0,0 +1,105 @@
package org.example.service.impl;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.example.domain.CourseSelection;
import org.example.mapper.SelectionMapper;
import org.example.service.ISelectionService;
import org.example.utils.Convert;
import org.example.utils.ServletUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
/**
* Service
*/
@Service
public class SelectionServiceImpl implements ISelectionService
{
@Autowired
private SelectionMapper selectionMapper;
/**
*
*
* @param id ID
* @return
*/
@Override
public CourseSelection selectCourseSelectionById(Long id)
{
return selectionMapper.selectCourseSelectionById(id);
}
/**
*
*
* @param CourseSelection
* @return
*/
@Override
public PageInfo<CourseSelection> selectCourseSelectionList(CourseSelection CourseSelection) {
Integer pageNum = ServletUtils.getParameterToInt("page");//从request获取page
Integer pageSize = ServletUtils.getParameterToInt("limit");//从request获取limit
List<CourseSelection> CourseSelections = new ArrayList<>();
if (pageNum != null) {
//分页查询
if (pageNum <= 0) { pageNum = 1; }
if (pageSize <= 0) { pageSize = 10; }
Page page = PageHelper.startPage(pageNum, pageSize);
CourseSelections = selectionMapper.selectCourseSelectionList(CourseSelection);
} else {
//普通查询
CourseSelections = selectionMapper.selectCourseSelectionList(CourseSelection);
}
//封装
PageInfo info = new PageInfo<>(CourseSelections);
return info;
}
/**
*
*
* @param CourseSelection
* @return
*/
@Override
public int insertCourseSelection(CourseSelection CourseSelection)
{
return selectionMapper.insertCourseSelection(CourseSelection);
}
/**
*
*
* @param ids ID
* @return
*/
@Override
public int deleteCourseSelectionByIds(String ids)
{
return selectionMapper.deleteCourseSelectionByIds(Convert.toStrArray(ids));
}
/**
*
*
* @param id ID
* @return
*/
@Override
public int deleteCourseSelectionById(Long id)
{
return selectionMapper.deleteCourseSelectionById(id);
}
@Override
public int updateCourseSelection(CourseSelection selection) {
return selectionMapper.updateCourseSelection(selection);
}
}

@ -0,0 +1,168 @@
package org.example.service.impl;
import java.util.ArrayList;
import java.util.List;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.example.domain.Result;
import org.example.service.xe.PasswordNotMatchException;
import org.example.service.xe.UserNotFoundException;
import org.example.utils.ServletUtils;
import org.example.utils.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.example.mapper.UserMapper;
import org.example.domain.User;
import org.example.service.IUserService;
import org.springframework.transaction.annotation.Transactional;
/**
* Service
*
*/
@Service
@Transactional(rollbackFor = { RuntimeException.class, Exception.class })
public class UserServiceImpl implements IUserService
{
@Autowired
private UserMapper userMapper;
/**
*
*
* @param id ID
* @return
*/
@Override
public User selectUserById(int id)
{
return userMapper.selectUserById(id);
}
/**
*
*
* @param user
* @return
*/
@Override
public PageInfo<User> selectUserList(User user) {
Integer pageNum = ServletUtils.getParameterToInt("page");//从request获取page
Integer pageSize = ServletUtils.getParameterToInt("limit");//从request获取limit
List<User> users = new ArrayList<>();
if (pageNum != null) {
//分页查询
if (pageNum <= 0) { pageNum = 1; }
if (pageSize <= 0) { pageSize = 10; }
Page page = PageHelper.startPage(pageNum, pageSize);
users = userMapper.selectUserList(user);
} else {
//普通查询
users = userMapper.selectUserList(user);
}
//封装
PageInfo info = new PageInfo<>(users);
return info;
}
/**
*
*
* @param user
* @return
*/
@Override
public int insertUser(User user)
{
return userMapper.insertUser(user);
}
/**
*
*
* @param user
* @return
*/
@Override
public int updateUser(User user)
{
return userMapper.updateUser(user);
}
/**
*
*
* @param ids ID
* @return
*/
@Override
public int deleteUserByIds(String ids)
{
return userMapper.deleteUserByIds(StringUtils.toStrArray(ids));
}
/**
*
*
* @param id ID
* @return
*/
@Override
public int deleteUserById(int id)
{
return userMapper.deleteUserById(id);
}
@Override
public User login(String username, String password) {
// 根据用户名查询用户信息
User user = getUserByUsername(username);
// 判断是否查询到用户信息
if (user != null) {
// 判断以上加密密码与数据库的是否匹配
if (user.getPassword().equals(password)) {
// 是:登录成功,返回查询到的对象
user.setPassword(null);
return user;
}
}
return null;
}
/**
*
* @param user
* @return
*/
public User reg(User user) {
// 根据用户名查询用户信息
User result = getUserByUsername(user.getUsername());
// 判断是否查询到数据
if (result == null) {
// 为空:用户名可用,执行注册
System.out.println("实现层user=" + user);
Integer rows = userMapper.insertUser(user);
// 返回
return user;
}
else {
// 不为空用户名已经被占用抛出UsernameConflictException
return null;
}
}
@Override
public int handleReset(User user) {
return 0;
}
public User getUserByUsername(String username) {
return userMapper.selectUserByUsername(username);
}
}

@ -0,0 +1,28 @@
package org.example.service.xe;
public class InsertDataException
extends ServiceException {
private static final long serialVersionUID = -7724774432291553025L;
public InsertDataException() {
super();
}
public InsertDataException(String arg0, Throwable arg1, boolean arg2, boolean arg3) {
super(arg0, arg1, arg2, arg3);
}
public InsertDataException(String arg0, Throwable arg1) {
super(arg0, arg1);
}
public InsertDataException(String arg0) {
super(arg0);
}
public InsertDataException(Throwable arg0) {
super(arg0);
}
}

@ -0,0 +1,29 @@
package org.example.service.xe;
public class PasswordNotMatchException
extends ServiceException {
private static final long serialVersionUID = 1903639604855086304L;
public PasswordNotMatchException() {
super();
}
public PasswordNotMatchException(String message, Throwable cause, boolean enableSuppression,
boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}
public PasswordNotMatchException(String message, Throwable cause) {
super(message, cause);
}
public PasswordNotMatchException(String message) {
super(message);
}
public PasswordNotMatchException(Throwable cause) {
super(cause);
}
}

@ -0,0 +1,29 @@
package org.example.service.xe;
public class ServiceException extends
RuntimeException {
private static final long serialVersionUID
= 980104530291206274L;
public ServiceException() {
super();
}
public ServiceException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}
public ServiceException(String message, Throwable cause) {
super(message, cause);
}
public ServiceException(String message) {
super(message);
}
public ServiceException(Throwable cause) {
super(cause);
}
}

@ -0,0 +1,28 @@
package org.example.service.xe;
public class UpdateDataException
extends ServiceException {
private static final long serialVersionUID = -6297755064668856332L;
public UpdateDataException() {
super();
}
public UpdateDataException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}
public UpdateDataException(String message, Throwable cause) {
super(message, cause);
}
public UpdateDataException(String message) {
super(message);
}
public UpdateDataException(Throwable cause) {
super(cause);
}
}

@ -0,0 +1,29 @@
package org.example.service.xe;
public class UploadAvatarException
extends ServiceException {
private static final long serialVersionUID = 3317600089395187358L;
public UploadAvatarException() {
super();
}
public UploadAvatarException(String message, Throwable cause, boolean enableSuppression,
boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}
public UploadAvatarException(String message, Throwable cause) {
super(message, cause);
}
public UploadAvatarException(String message) {
super(message);
}
public UploadAvatarException(Throwable cause) {
super(cause);
}
}

@ -0,0 +1,28 @@
package org.example.service.xe;
public class UserNotFoundException
extends ServiceException {
private static final long serialVersionUID = 5156778717593377564L;
public UserNotFoundException() {
super();
}
public UserNotFoundException(String arg0, Throwable arg1, boolean arg2, boolean arg3) {
super(arg0, arg1, arg2, arg3);
}
public UserNotFoundException(String arg0, Throwable arg1) {
super(arg0, arg1);
}
public UserNotFoundException(String arg0) {
super(arg0);
}
public UserNotFoundException(Throwable arg0) {
super(arg0);
}
}

@ -0,0 +1,28 @@
package org.example.service.xe;
public class UsernameConflictException
extends ServiceException {
private static final long serialVersionUID = -4106401894279090959L;
public UsernameConflictException() {
super();
}
public UsernameConflictException(String arg0, Throwable arg1, boolean arg2, boolean arg3) {
super(arg0, arg1, arg2, arg3);
}
public UsernameConflictException(String arg0, Throwable arg1) {
super(arg0, arg1);
}
public UsernameConflictException(String arg0) {
super(arg0);
}
public UsernameConflictException(Throwable arg0) {
super(arg0);
}
}

@ -0,0 +1,998 @@
package org.example.utils;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.nio.ByteBuffer;
import java.nio.charset.Charset;
import java.text.NumberFormat;
import java.util.Set;
/**
*
*
* @author ruoyi
*/
public class Convert
{
/**
* <br>
* null<br>
*
*
* @param value
* @param defaultValue
* @return
*/
public static String toStr(Object value, String defaultValue)
{
if (null == value)
{
return defaultValue;
}
if (value instanceof String)
{
return (String) value;
}
return value.toString();
}
/**
* <br>
* <code>null</code><code>null</code><br>
*
*
* @param value
* @return
*/
public static String toStr(Object value)
{
return toStr(value, null);
}
/**
* <br>
* null<br>
*
*
* @param value
* @param defaultValue
* @return
*/
public static Character toChar(Object value, Character defaultValue)
{
if (null == value)
{
return defaultValue;
}
if (value instanceof Character)
{
return (Character) value;
}
final String valueStr = toStr(value, null);
return StringUtils.isEmpty(valueStr) ? defaultValue : valueStr.charAt(0);
}
/**
* <br>
* <code>null</code><code>null</code><br>
*
*
* @param value
* @return
*/
public static Character toChar(Object value)
{
return toChar(value, null);
}
/**
* byte<br>
* <code>null</code><br>
*
*
* @param value
* @param defaultValue
* @return
*/
public static Byte toByte(Object value, Byte defaultValue)
{
if (value == null)
{
return defaultValue;
}
if (value instanceof Byte)
{
return (Byte) value;
}
if (value instanceof Number)
{
return ((Number) value).byteValue();
}
final String valueStr = toStr(value, null);
if (StringUtils.isEmpty(valueStr))
{
return defaultValue;
}
try
{
return Byte.parseByte(valueStr);
}
catch (Exception e)
{
return defaultValue;
}
}
/**
* byte<br>
* <code>null</code><code>null</code><br>
*
*
* @param value
* @return
*/
public static Byte toByte(Object value)
{
return toByte(value, null);
}
/**
* Short<br>
* <code>null</code><br>
*
*
* @param value
* @param defaultValue
* @return
*/
public static Short toShort(Object value, Short defaultValue)
{
if (value == null)
{
return defaultValue;
}
if (value instanceof Short)
{
return (Short) value;
}
if (value instanceof Number)
{
return ((Number) value).shortValue();
}
final String valueStr = toStr(value, null);
if (StringUtils.isEmpty(valueStr))
{
return defaultValue;
}
try
{
return Short.parseShort(valueStr.trim());
}
catch (Exception e)
{
return defaultValue;
}
}
/**
* Short<br>
* <code>null</code><code>null</code><br>
*
*
* @param value
* @return
*/
public static Short toShort(Object value)
{
return toShort(value, null);
}
/**
* Number<br>
* <br>
*
*
* @param value
* @param defaultValue
* @return
*/
public static Number toNumber(Object value, Number defaultValue)
{
if (value == null)
{
return defaultValue;
}
if (value instanceof Number)
{
return (Number) value;
}
final String valueStr = toStr(value, null);
if (StringUtils.isEmpty(valueStr))
{
return defaultValue;
}
try
{
return NumberFormat.getInstance().parse(valueStr);
}
catch (Exception e)
{
return defaultValue;
}
}
/**
* Number<br>
* <code>null</code><br>
*
*
* @param value
* @return
*/
public static Number toNumber(Object value)
{
return toNumber(value, null);
}
/**
* int<br>
* <br>
*
*
* @param value
* @param defaultValue
* @return
*/
public static Integer toInt(Object value, Integer defaultValue)
{
if (value == null)
{
return defaultValue;
}
if (value instanceof Integer)
{
return (Integer) value;
}
if (value instanceof Number)
{
return ((Number) value).intValue();
}
final String valueStr = toStr(value, null);
if (StringUtils.isEmpty(valueStr))
{
return defaultValue;
}
try
{
return Integer.parseInt(valueStr.trim());
}
catch (Exception e)
{
return defaultValue;
}
}
/**
* int<br>
* <code>null</code><code>null</code><br>
*
*
* @param value
* @return
*/
public static Integer toInt(Object value)
{
return toInt(value, null);
}
/**
* Integer<br>
*
* @param str
* @return
*/
public static Integer[] toIntArray(String str)
{
return toIntArray(",", str);
}
/**
* Long<br>
*
* @param str
* @return
*/
public static Long[] toLongArray(String str)
{
return toLongArray(",", str);
}
/**
* Integer<br>
*
* @param split
* @param split
* @return
*/
public static Integer[] toIntArray(String split, String str)
{
if (StringUtils.isEmpty(str))
{
return new Integer[] {};
}
String[] arr = str.split(split);
final Integer[] ints = new Integer[arr.length];
for (int i = 0; i < arr.length; i++)
{
final Integer v = toInt(arr[i], 0);
ints[i] = v;
}
return ints;
}
/**
* Long<br>
*
* @param split
* @param str
* @return
*/
public static Long[] toLongArray(String split, String str)
{
if (StringUtils.isEmpty(str))
{
return new Long[] {};
}
String[] arr = str.split(split);
final Long[] longs = new Long[arr.length];
for (int i = 0; i < arr.length; i++)
{
final Long v = toLong(arr[i], null);
longs[i] = v;
}
return longs;
}
/**
* String<br>
*
* @param str
* @return
*/
public static String[] toStrArray(String str)
{
return toStrArray(",", str);
}
/**
* String<br>
*
* @param split
* @param split
* @return
*/
public static String[] toStrArray(String split, String str)
{
return str.split(split);
}
/**
* long<br>
* <br>
*
*
* @param value
* @param defaultValue
* @return
*/
public static Long toLong(Object value, Long defaultValue)
{
if (value == null)
{
return defaultValue;
}
if (value instanceof Long)
{
return (Long) value;
}
if (value instanceof Number)
{
return ((Number) value).longValue();
}
final String valueStr = toStr(value, null);
if (StringUtils.isEmpty(valueStr))
{
return defaultValue;
}
try
{
// 支持科学计数法
return new BigDecimal(valueStr.trim()).longValue();
}
catch (Exception e)
{
return defaultValue;
}
}
/**
* long<br>
* <code>null</code><code>null</code><br>
*
*
* @param value
* @return
*/
public static Long toLong(Object value)
{
return toLong(value, null);
}
/**
* double<br>
* <br>
*
*
* @param value
* @param defaultValue
* @return
*/
public static Double toDouble(Object value, Double defaultValue)
{
if (value == null)
{
return defaultValue;
}
if (value instanceof Double)
{
return (Double) value;
}
if (value instanceof Number)
{
return ((Number) value).doubleValue();
}
final String valueStr = toStr(value, null);
if (StringUtils.isEmpty(valueStr))
{
return defaultValue;
}
try
{
// 支持科学计数法
return new BigDecimal(valueStr.trim()).doubleValue();
}
catch (Exception e)
{
return defaultValue;
}
}
/**
* double<br>
* <code>null</code><br>
*
*
* @param value
* @return
*/
public static Double toDouble(Object value)
{
return toDouble(value, null);
}
/**
* Float<br>
* <br>
*
*
* @param value
* @param defaultValue
* @return
*/
public static Float toFloat(Object value, Float defaultValue)
{
if (value == null)
{
return defaultValue;
}
if (value instanceof Float)
{
return (Float) value;
}
if (value instanceof Number)
{
return ((Number) value).floatValue();
}
final String valueStr = toStr(value, null);
if (StringUtils.isEmpty(valueStr))
{
return defaultValue;
}
try
{
return Float.parseFloat(valueStr.trim());
}
catch (Exception e)
{
return defaultValue;
}
}
/**
* Float<br>
* <code>null</code><br>
*
*
* @param value
* @return
*/
public static Float toFloat(Object value)
{
return toFloat(value, null);
}
/**
* boolean<br>
* Stringtruefalseyesokno1,0 <br>
*
*
* @param value
* @param defaultValue
* @return
*/
public static Boolean toBool(Object value, Boolean defaultValue)
{
if (value == null)
{
return defaultValue;
}
if (value instanceof Boolean)
{
return (Boolean) value;
}
String valueStr = toStr(value, null);
if (StringUtils.isEmpty(valueStr))
{
return defaultValue;
}
valueStr = valueStr.trim().toLowerCase();
switch (valueStr)
{
case "true":
return true;
case "false":
return false;
case "yes":
return true;
case "ok":
return true;
case "no":
return false;
case "1":
return true;
case "0":
return false;
default:
return defaultValue;
}
}
/**
* boolean<br>
* <code>null</code><br>
*
*
* @param value
* @return
*/
public static Boolean toBool(Object value)
{
return toBool(value, null);
}
/**
* Enum<br>
* <br>
*
* @param clazz EnumClass
* @param value
* @param defaultValue
* @return Enum
*/
public static <E extends Enum<E>> E toEnum(Class<E> clazz, Object value, E defaultValue)
{
if (value == null)
{
return defaultValue;
}
if (clazz.isAssignableFrom(value.getClass()))
{
@SuppressWarnings("unchecked")
E myE = (E) value;
return myE;
}
final String valueStr = toStr(value, null);
if (StringUtils.isEmpty(valueStr))
{
return defaultValue;
}
try
{
return Enum.valueOf(clazz, valueStr);
}
catch (Exception e)
{
return defaultValue;
}
}
/**
* Enum<br>
* <code>null</code><br>
*
* @param clazz EnumClass
* @param value
* @return Enum
*/
public static <E extends Enum<E>> E toEnum(Class<E> clazz, Object value)
{
return toEnum(clazz, value, null);
}
/**
* BigInteger<br>
* <br>
*
*
* @param value
* @param defaultValue
* @return
*/
public static BigInteger toBigInteger(Object value, BigInteger defaultValue)
{
if (value == null)
{
return defaultValue;
}
if (value instanceof BigInteger)
{
return (BigInteger) value;
}
if (value instanceof Long)
{
return BigInteger.valueOf((Long) value);
}
final String valueStr = toStr(value, null);
if (StringUtils.isEmpty(valueStr))
{
return defaultValue;
}
try
{
return new BigInteger(valueStr);
}
catch (Exception e)
{
return defaultValue;
}
}
/**
* BigInteger<br>
* <code>null</code><br>
*
*
* @param value
* @return
*/
public static BigInteger toBigInteger(Object value)
{
return toBigInteger(value, null);
}
/**
* BigDecimal<br>
* <br>
*
*
* @param value
* @param defaultValue
* @return
*/
public static BigDecimal toBigDecimal(Object value, BigDecimal defaultValue)
{
if (value == null)
{
return defaultValue;
}
if (value instanceof BigDecimal)
{
return (BigDecimal) value;
}
if (value instanceof Long)
{
return new BigDecimal((Long) value);
}
if (value instanceof Double)
{
return new BigDecimal((Double) value);
}
if (value instanceof Integer)
{
return new BigDecimal((Integer) value);
}
final String valueStr = toStr(value, null);
if (StringUtils.isEmpty(valueStr))
{
return defaultValue;
}
try
{
return new BigDecimal(valueStr);
}
catch (Exception e)
{
return defaultValue;
}
}
/**
* BigDecimal<br>
* <br>
*
*
* @param value
* @return
*/
public static BigDecimal toBigDecimal(Object value)
{
return toBigDecimal(value, null);
}
/**
* <br>
* 1ByteByteBuffer 2Arrays.toString
*
* @param obj
* @return
*/
public static String utf8Str(Object obj)
{
return str(obj, Charset.forName("UTF-8"));
}
/**
* <br>
* 1ByteByteBuffer 2Arrays.toString
*
* @param obj
* @param charsetName
* @return
*/
public static String str(Object obj, String charsetName)
{
return str(obj, Charset.forName(charsetName));
}
/**
* <br>
* 1ByteByteBuffer 2Arrays.toString
*
* @param obj
* @param charset
* @return
*/
public static String str(Object obj, Charset charset)
{
if (null == obj)
{
return null;
}
if (obj instanceof String)
{
return (String) obj;
}
else if (obj instanceof byte[] || obj instanceof Byte[])
{
return str((Byte[]) obj, charset);
}
else if (obj instanceof ByteBuffer)
{
return str((ByteBuffer) obj, charset);
}
return obj.toString();
}
/**
* byte
*
* @param bytes byte
* @param charset
* @return
*/
public static String str(byte[] bytes, String charset)
{
return str(bytes, StringUtils.isEmpty(charset) ? Charset.defaultCharset() : Charset.forName(charset));
}
/**
*
*
* @param data
* @param charset
* @return
*/
public static String str(byte[] data, Charset charset)
{
if (data == null)
{
return null;
}
if (null == charset)
{
return new String(data);
}
return new String(data, charset);
}
/**
* byteBuffer
*
* @param data
* @param charset 使
* @return
*/
public static String str(ByteBuffer data, String charset)
{
if (data == null)
{
return null;
}
return str(data, Charset.forName(charset));
}
/**
* byteBuffer
*
* @param data
* @param charset 使
* @return
*/
public static String str(ByteBuffer data, Charset charset)
{
if (null == charset)
{
charset = Charset.defaultCharset();
}
return charset.decode(data).toString();
}
// ----------------------------------------------------------------------- 全角半角转换
/**
*
*
* @param input String.
* @return .
*/
public static String toSBC(String input)
{
return toSBC(input, null);
}
/**
*
*
* @param input String
* @param notConvertSet
* @return .
*/
public static String toSBC(String input, Set<Character> notConvertSet)
{
char c[] = input.toCharArray();
for (int i = 0; i < c.length; i++)
{
if (null != notConvertSet && notConvertSet.contains(c[i]))
{
// 跳过不替换的字符
continue;
}
if (c[i] == ' ')
{
c[i] = '\u3000';
}
else if (c[i] < '\177')
{
c[i] = (char) (c[i] + 65248);
}
}
return new String(c);
}
/**
*
*
* @param input String.
* @return
*/
public static String toDBC(String input)
{
return toDBC(input, null);
}
/**
*
*
* @param text
* @param notConvertSet
* @return
*/
public static String toDBC(String text, Set<Character> notConvertSet)
{
char c[] = text.toCharArray();
for (int i = 0; i < c.length; i++)
{
if (null != notConvertSet && notConvertSet.contains(c[i]))
{
// 跳过不替换的字符
continue;
}
if (c[i] == '\u3000')
{
c[i] = ' ';
}
else if (c[i] > '\uFF00' && c[i] < '\uFF5F')
{
c[i] = (char) (c[i] - 65248);
}
}
String returnString = new String(c);
return returnString;
}
/**
*
*
* @param n
* @return
*/
public static String digitUppercase(double n)
{
String[] fraction = { "角", "分" };
String[] digit = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };
String[][] unit = { { "元", "万", "亿" }, { "", "拾", "佰", "仟" } };
String head = n < 0 ? "负" : "";
n = Math.abs(n);
String s = "";
for (int i = 0; i < fraction.length; i++)
{
s += (digit[(int) (Math.floor(n * 10 * Math.pow(10, i)) % 10)] + fraction[i]).replaceAll("(零.)+", "");
}
if (s.length() < 1)
{
s = "整";
}
int integerPart = (int) Math.floor(n);
for (int i = 0; i < unit[0].length && integerPart > 0; i++)
{
String p = "";
for (int j = 0; j < unit[1].length && n > 0; j++)
{
p = digit[integerPart % 10] + unit[1][j] + p;
integerPart = integerPart / 10;
}
s = p.replaceAll("(零.)*零$", "").replaceAll("^$", "零") + unit[0][i] + s;
}
return head + s.replaceAll("(零.)*零元", "元").replaceFirst("(零.)+", "").replaceAll("(零.)+", "零").replaceAll("^整$", "零元整");
}
}

@ -0,0 +1,24 @@
package org.example.utils;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* layui
* @Version 1.0
*/
public class LayuiTableDateFormat {
public static Map<String,Object> LayuiTableDateFormat(List<?> list,Long count){
Map<String, Object> map = new HashMap<String, Object>();
map.put("code", 0);
map.put("msg", "' '");
map.put("data", list);
map.put("count",count);
return map;
}
}

@ -0,0 +1,165 @@
package org.example.utils;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
/**
*
*
* @author ruoyi
*/
public class ServletUtils
{
/**
*
*/
private final static String[] agent = { "Android", "iPhone", "iPod", "iPad", "Windows Phone", "MQQBrowser" };
/**
* String
*/
public static String getParameter(String name)
{
return getRequest().getParameter(name);
}
/**
* String
*/
public static String getParameter(String name, String defaultValue)
{
return Convert.toStr(getRequest().getParameter(name), defaultValue);
}
/**
* Integer
*/
public static Integer getParameterToInt(String name)
{
return Convert.toInt(getRequest().getParameter(name));
}
/**
* Integer
*/
public static Integer getParameterToInt(String name, Integer defaultValue)
{
return Convert.toInt(getRequest().getParameter(name), defaultValue);
}
/**
* request
*/
public static HttpServletRequest getRequest()
{
return getRequestAttributes().getRequest();
}
/**
* response
*/
public static HttpServletResponse getResponse()
{
return getRequestAttributes().getResponse();
}
/**
* session
*/
public static HttpSession getSession()
{
return getRequest().getSession();
}
public static ServletRequestAttributes getRequestAttributes()
{
RequestAttributes attributes = RequestContextHolder.getRequestAttributes();
return (ServletRequestAttributes) attributes;
}
/**
*
*
* @param response
* @param string
* @return null
*/
public static String renderString(HttpServletResponse response, String string)
{
try
{
response.setContentType("application/json");
response.setCharacterEncoding("utf-8");
response.getWriter().print(string);
}
catch (IOException e)
{
e.printStackTrace();
}
return null;
}
/**
* Ajax
*
* @param request
*/
public static boolean isAjaxRequest(HttpServletRequest request)
{
String accept = request.getHeader("accept");
if (accept != null && accept.indexOf("application/json") != -1)
{
return true;
}
String xRequestedWith = request.getHeader("X-Requested-With");
if (xRequestedWith != null && xRequestedWith.indexOf("XMLHttpRequest") != -1)
{
return true;
}
String uri = request.getRequestURI();
if (StringUtils.inStringIgnoreCase(uri, ".json", ".xml"))
{
return true;
}
String ajax = request.getParameter("__ajax");
if (StringUtils.inStringIgnoreCase(ajax, "json", "xml"))
{
return true;
}
return false;
}
/**
* User-Agent
*/
public static boolean checkAgentIsMobile(String ua)
{
boolean flag = false;
if (!ua.contains("Windows NT") || (ua.contains("Windows NT") && ua.contains("compatible; MSIE 9.0;")))
{
// 排除 苹果桌面系统
if (!ua.contains("Windows NT") && !ua.contains("Macintosh"))
{
for (String item : agent)
{
if (ua.contains(item))
{
flag = true;
break;
}
}
}
}
return flag;
}
}

@ -0,0 +1,35 @@
package org.example.utils;
/**
* sql
*
* @author ruoyi
*/
public class SqlUtil
{
/**
* 线
*/
public static String SQL_PATTERN = "[a-zA-Z0-9_\\ \\,\\.]+";
/**
*
*/
public static String escapeOrderBySql(String value)
{
if (StringUtils.isNotEmpty(value) && !isValidOrderBySql(value))
{
throw new RuntimeException("参数不符合规范,不能进行查询");
}
return value;
}
/**
* order by
*/
public static boolean isValidOrderBySql(String value)
{
return value.matches(SQL_PATTERN);
}
}

@ -0,0 +1,410 @@
package org.example.utils;
import java.util.Collection;
import java.util.Map;
/**
*
*
* @author ruoyi
*/
public class StringUtils extends org.apache.commons.lang3.StringUtils
{
/** 空字符串 */
private static final String NULLSTR = "";
/** 下划线 */
private static final char SEPARATOR = '_';
/**
*
*
* @param value defaultValue value
* @return value
*/
public static <T> T nvl(T value, T defaultValue)
{
return value != null ? value : defaultValue;
}
/**
* * Collection ListSetQueue
*
* @param coll Collection
* @return true false
*/
public static boolean isEmpty(Collection<?> coll)
{
return isNull(coll) || coll.isEmpty();
}
/**
* * CollectionListSetQueue
*
* @param coll Collection
* @return true false
*/
public static boolean isNotEmpty(Collection<?> coll)
{
return !isEmpty(coll);
}
/**
* *
*
* @param objects
** @return true false
*/
public static boolean isEmpty(Object[] objects)
{
return isNull(objects) || (objects.length == 0);
}
/**
* *
*
* @param objects
* @return true false
*/
public static boolean isNotEmpty(Object[] objects)
{
return !isEmpty(objects);
}
/**
* * Map
*
* @param map Map
* @return true false
*/
public static boolean isEmpty(Map<?, ?> map)
{
return isNull(map) || map.isEmpty();
}
/**
* * Map
*
* @param map Map
* @return true false
*/
public static boolean isNotEmpty(Map<?, ?> map)
{
return !isEmpty(map);
}
/**
* *
*
* @param str String
* @return true false
*/
public static boolean isEmpty(String str)
{
return isNull(str) || NULLSTR.equals(str.trim());
}
/**
* *
*
* @param str String
* @return true false
*/
public static boolean isNotEmpty(String str)
{
return !isEmpty(str);
}
/**
* *
*
* @param object Object
* @return true false
*/
public static boolean isNull(Object object)
{
return object == null;
}
/**
* *
*
* @param object Object
* @return true false
*/
public static boolean isNotNull(Object object)
{
return !isNull(object);
}
/**
* * Java
*
* @param object
* @return true false
*/
public static boolean isArray(Object object)
{
return isNotNull(object) && object.getClass().isArray();
}
/**
*
*/
public static String trim(String str)
{
return (str == null ? "" : str.trim());
}
/**
*
*
* @param str
* @param start
* @return
*/
public static String substring(final String str, int start)
{
if (str == null)
{
return NULLSTR;
}
if (start < 0)
{
start = str.length() + start;
}
if (start < 0)
{
start = 0;
}
if (start > str.length())
{
return NULLSTR;
}
return str.substring(start);
}
/**
*
*
* @param str
* @param start
* @param end
* @return
*/
public static String substring(final String str, int start, int end)
{
if (str == null)
{
return NULLSTR;
}
if (end < 0)
{
end = str.length() + end;
}
if (start < 0)
{
start = str.length() + start;
}
if (end > str.length())
{
end = str.length();
}
if (start > end)
{
return NULLSTR;
}
if (start < 0)
{
start = 0;
}
if (end < 0)
{
end = 0;
}
return str.substring(start, end);
}
/**
* 线
*/
public static String toUnderScoreCase(String str)
{
if (str == null)
{
return null;
}
StringBuilder sb = new StringBuilder();
// 前置字符是否大写
boolean preCharIsUpperCase = true;
// 当前字符是否大写
boolean curreCharIsUpperCase = true;
// 下一字符是否大写
boolean nexteCharIsUpperCase = true;
for (int i = 0; i < str.length(); i++)
{
char c = str.charAt(i);
if (i > 0)
{
preCharIsUpperCase = Character.isUpperCase(str.charAt(i - 1));
}
else
{
preCharIsUpperCase = false;
}
curreCharIsUpperCase = Character.isUpperCase(c);
if (i < (str.length() - 1))
{
nexteCharIsUpperCase = Character.isUpperCase(str.charAt(i + 1));
}
if (preCharIsUpperCase && curreCharIsUpperCase && !nexteCharIsUpperCase)
{
sb.append(SEPARATOR);
}
else if ((i != 0 && !preCharIsUpperCase) && curreCharIsUpperCase)
{
sb.append(SEPARATOR);
}
sb.append(Character.toLowerCase(c));
}
return sb.toString();
}
/**
*
*
* @param str
* @param strs
* @return true
*/
public static boolean inStringIgnoreCase(String str, String... strs)
{
if (str != null && strs != null)
{
for (String s : strs)
{
if (str.equalsIgnoreCase(trim(s)))
{
return true;
}
}
}
return false;
}
/**
* 线线 HELLO_WORLD->HelloWorld
*
* @param name 线
* @return
*/
public static String convertToCamelCase(String name)
{
StringBuilder result = new StringBuilder();
// 快速检查
if (name == null || name.isEmpty())
{
// 没必要转换
return "";
}
else if (!name.contains("_"))
{
// 不含下划线,仅将首字母大写
return name.substring(0, 1).toUpperCase() + name.substring(1);
}
// 用下划线将原始字符串分割
String[] camels = name.split("_");
for (String camel : camels)
{
// 跳过原始字符串中开头、结尾的下换线或双重下划线
if (camel.isEmpty())
{
continue;
}
// 首字母大写
result.append(camel.substring(0, 1).toUpperCase());
result.append(camel.substring(1).toLowerCase());
}
return result.toString();
}
/**
*
* user_name->userName
*/
public static String toCamelCase(String s)
{
if (s == null)
{
return null;
}
if (s.indexOf(SEPARATOR) == -1)
{
return s;
}
s = s.toLowerCase();
StringBuilder sb = new StringBuilder(s.length());
boolean upperCase = false;
for (int i = 0; i < s.length(); i++)
{
char c = s.charAt(i);
if (c == SEPARATOR)
{
upperCase = true;
}
else if (upperCase)
{
sb.append(Character.toUpperCase(c));
upperCase = false;
}
else
{
sb.append(c);
}
}
return sb.toString();
}
@SuppressWarnings("unchecked")
public static <T> T cast(Object obj)
{
return (T) obj;
}
/**
* String<br>
*
* @param split
* @param split
* @return
*/
public static String[] toStrArray(String split, String str)
{
return str.split(split);
}
/**
* String<br>
*
* @param str
* @return
*/
public static String[] toStrArray(String str)
{
return toStrArray(",", str);
}
}

@ -0,0 +1,8 @@
### mysql database
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/educational?useSSL=false&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&serverTimezone=GMT%2B8
jdbc.username=root
jdbc.password=123456
### druid datasource
jdbc.initialSize=2
jdbc.maxActive=20

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="OFF">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
</Appenders>
<Loggers>
<!-- mybatis show sql -->
<Logger name="org.example.mapper" level="debug" additivity="false">
<AppenderRef ref="Console"/>
</Logger>
<Root level="error">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>

@ -0,0 +1,72 @@
<?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="org.example.mapper.CourseMapper">
<resultMap type="Course" id="CourseResult">
<result property="id" column="id" />
<result property="name" column="name" />
<result property="courseNo" column="course_no" />
<result property="teacherId" column="teacher_id" />
<result property="remark" column="remark" />
<association property="teacher" column="teacher_id" select="org.example.mapper.UserMapper.selectUserById"/>
</resultMap>
<sql id="selectCourseVo">
select id, name, course_no, teacher_id, remark from course
</sql>
<select id="selectCourseList" parameterType="Course" resultMap="CourseResult">
<include refid="selectCourseVo"/>
<where>
<if test="name != null and name != ''"> and name like concat('%', #{name}, '%')</if>
<if test="teacherId != null and teacherId != ''"> and teacher_id = #{teacherId}</if>
</where>
order by id desc
</select>
<select id="selectCourseById" parameterType="Long" resultMap="CourseResult">
<include refid="selectCourseVo"/>
where id = #{id}
</select>
<insert id="insertCourse" parameterType="Course" useGeneratedKeys="true" keyProperty="id">
insert into course
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="name != null and name != ''">name,</if>
<if test="courseNo != null and courseNo != ''">course_no,</if>
<if test="teacherId != null and teacherId != ''">teacher_id,</if>
<if test="remark != null">remark,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="name != null and name != ''">#{name},</if>
<if test="courseNo != null and courseNo != ''">#{courseNo},</if>
<if test="teacherId != null and teacherId != ''">#{teacherId},</if>
<if test="remark != null">#{remark},</if>
</trim>
</insert>
<update id="updateCourse" parameterType="Course">
update course
<trim prefix="SET" suffixOverrides=",">
<if test="name != null and name != ''">name = #{name},</if>
<if test="courseNo != null and courseNo != ''">course_no = #{courseNo},</if>
<if test="teacherId != null and teacherId != ''">teacher_id = #{teacherId},</if>
<if test="remark != null">remark = #{remark},</if>
</trim>
where id = #{id}
</update>
<delete id="deleteCourseById" parameterType="Long">
delete from Course where id = #{id}
</delete>
<delete id="deleteCourseByIds" parameterType="String">
delete from Course where id in
<foreach item="id" collection="array" open="(" separator="," close=")">
#{id}
</foreach>
</delete>
</mapper>

@ -0,0 +1,66 @@
<?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="org.example.mapper.SelectionMapper">
<resultMap type="CourseSelection" id="SelectionResult">
<result property="id" column="id" />
<result property="courseId" column="course_id" />
<result property="studentId" column="student_id" />
<result property="scores" column="scores" />
<result property="createTime" column="create_time" />
<association property="course" column="course_id" select="org.example.mapper.CourseMapper.selectCourseById"/>
<association property="student" column="student_id" select="org.example.mapper.UserMapper.selectUserById"/>
</resultMap>
<sql id="selectSelectionVo">
select id, course_id, student_id, scores, create_time from course_selection
</sql>
<update id="updateCourseSelection" parameterType="CourseSelection">
update course_selection set scores = #{scores} where id = #{id}
</update>
<select id="selectCourseSelectionList" parameterType="CourseSelection" resultMap="SelectionResult">
<include refid="selectSelectionVo"/>
<where>
<if test="courseId != null "> and course_id = #{courseId}</if>
<if test="studentId != null and studentId != ''"> and student_id = #{studentId}</if>
</where>
order by course_id desc, id
</select>
<select id="selectCourseSelectionById" parameterType="Long" resultMap="SelectionResult">
<include refid="selectSelectionVo"/>
where id = #{id}
</select>
<insert id="insertCourseSelection" parameterType="CourseSelection" useGeneratedKeys="true" keyProperty="id">
insert into course_selection
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="courseId != null and courseId != ''">course_id,</if>
<if test="studentId != null and studentId != ''">student_id,</if>
<if test="scores != null and scores != ''">scores,</if>
<if test="remark != null">remark,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="courseId != null and courseId != ''">#{courseId},</if>
<if test="studentId != null and studentId != ''">#{studentId},</if>
<if test="scores != null and scores != ''">#{scores},</if>
<if test="remark != null">#{remark},</if>
</trim>
</insert>
<delete id="deleteCourseSelectionById" parameterType="Long">
delete from course_selection where id = #{id}
</delete>
<delete id="deleteCourseSelectionByIds" parameterType="String">
delete from course_selection where id in
<foreach item="id" collection="array" open="(" separator="," close=")">
#{id}
</foreach>
</delete>
</mapper>

@ -0,0 +1,106 @@
<?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="org.example.mapper.UserMapper">
<resultMap type="User" id="UserResult">
<result property="id" column="id" />
<result property="username" column="username" />
<result property="password" column="password" />
<result property="roleId" column="role_id" />
<result property="phone" column="phone" />
<result property="createdate" column="createdate" />
<result property="remark" column="remark" />
<result property="realName" column="real_name" />
<result property="age" column="age" />
<result property="sex" column="sex" />
</resultMap>
<sql id="selectUserVo">
select id, username, password, role_id, phone, createdate, remark, real_name, age, sex from user
</sql>
<select id="selectUserList" parameterType="User" resultMap="UserResult">
<include refid="selectUserVo"/>
<where>
<if test="username != null and username != ''"> and username = #{username}</if>
<if test="realName != null and realName != ''"> and real_name like concat('%',#{realName},'%')</if>
<if test="sex != null and sex != ''"> and sex = #{sex}</if>
<if test="password != null and password != ''"> and password = #{password}</if>
<if test="roleId != null "> and role_id = #{roleId}</if>
<if test="phone != null and phone != ''"> and phone like concat('%', #{phone}, '%')</if>
<if test="createdate != null "> and createdate = #{createdate}</if>
</where>
order by id desc
</select>
<select id="selectUserById" parameterType="Integer" resultMap="UserResult">
<include refid="selectUserVo"/>
where id = #{id}
order by createdate desc
</select>
<select id="selectUserByUsername" parameterType="String" resultMap="UserResult">
<include refid="selectUserVo"/>
where username = #{username}
</select>
<insert id="insertUser" parameterType="User" useGeneratedKeys="true" keyProperty="id">
insert into user
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="username != null">username,</if>
<if test="password != null and password != ''">password,</if>
<if test="roleId != null">role_id,</if>
<if test="phone != null and phone != ''">phone,</if>
<if test="createdate != null">createdate,</if>
<if test="remark != null">remark,</if>
<if test="realName != null">real_name,</if>
<if test="sex != null">sex,</if>
<if test="age != null">age,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="username != null">#{username},</if>
<if test="password != null and password != ''">#{password},</if>
<if test="roleId != null">#{roleId},</if>
<if test="phone != null and phone != ''">#{phone},</if>
<if test="createdate != null">#{createdate},</if>
<if test="remark != null">#{remark},</if>
<if test="realName != null">#{realName},</if>
<if test="sex != null">#{sex},</if>
<if test="age != null">#{age},</if>
</trim>
</insert>
<update id="updateUser" parameterType="User">
update user
<trim prefix="SET" suffixOverrides=",">
<if test="username != null">username = #{username},</if>
<if test="password != null and password != ''">password = #{password},</if>
<if test="roleId != null">role_id = #{roleId},</if>
<if test="phone != null and phone != ''">phone = #{phone},</if>
<if test="createdate != null">createdate = #{createdate},</if>
<if test="remark != null">remark = #{remark},</if>
<if test="realName != null">real_name = #{realName},</if>
<if test="sex != null">sex = #{sex},</if>
<if test="age != null">age = #{age},</if>
</trim>
where id = #{id}
</update>
<delete id="deleteUserById" parameterType="Integer">
delete from user where id = #{id}
</delete>
<delete id="deleteUserByIds" parameterType="String">
delete from user where id in
<foreach item="id" collection="array" open="(" separator="," close=")">
#{id}
</foreach>
</delete>
</mapper>

@ -0,0 +1,73 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
<!-- 导入数据库配置文件 -->
<context:property-placeholder location="classpath:db.properties"/>
<!-- 配置 Druid数据源 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
<property name="driverClassName" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<property name="initialSize" value="${jdbc.initialSize}"/>
<property name="maxActive" value="${jdbc.maxActive}"/>
</bean>
<!-- 配置 SqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 指定数据源 -->
<property name="dataSource" ref="dataSource"/>
<!-- 指定mapper映射xml文件路径 -->
<property name="mapperLocations" value="classpath:mapper/*.xml"/>
<!-- 指定实体类别名包 -->
<property name="typeAliasesPackage" value="org.example.domain"/>
<!-- MyBatis的一些配置 -->
<property name="configuration">
<bean class="org.apache.ibatis.session.Configuration">
<!-- 下划线转为驼峰命名created_time -> createdTime -->
<property name="mapUnderscoreToCamelCase" value="true"/>
<!-- 设置日志实现用于打印日志显示SQL -->
<property name="logImpl" value="org.apache.ibatis.logging.log4j2.Log4j2Impl"/>
</bean>
</property>
<property name="plugins">
<array>
<bean class="com.github.pagehelper.PageInterceptor">
<property name="properties">
<!--使用下面的方式配置参数,一行配置一个 -->
<value>
helperDialect=mysql
reasonable=true
supportMethodsArguments=true
params=count=countSql
</value>
</property>
</bean>
</array>
</property>
</bean>
<!-- 扫描mapper映射接口让它们自动装配 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="org.example.mapper"/>
</bean>
<!-- 事务管理器 -->
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- 启用注解式事务 -->
<tx:annotation-driven transaction-manager="txManager"/>
</beans>

@ -0,0 +1,82 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- 启用组件扫描和自动装配 -->
<context:component-scan base-package="org.example.controller"/>
<!-- 启用Spring MVC注解编程模式 -->
<mvc:annotation-driven/>
<!-- 配置拦截器链 -->
<!-- 配置拦截器链 -->
<mvc:interceptors>
<!-- 配置第1个拦截器 -->
<mvc:interceptor>
<!-- 1. 拦截的路径 -->
<mvc:mapping path="/user/**" />
<mvc:mapping path="/uploadfile/**" />
<mvc:mapping path="/role/**" />
<mvc:mapping path="/dept/**" />
<mvc:mapping path="/notice/**" />
<mvc:mapping path="/job/**" />
<mvc:mapping path="/employee/**" />
<mvc:mapping path="/main/**" />
<!-- 2. 例外的路径,不拦截的路径,即白名单 -->
<mvc:exclude-mapping path="/user/handle_reg.do" />
<mvc:exclude-mapping path="/user/login.do" />
<mvc:exclude-mapping path="/user/handle_login.do" />
<mvc:exclude-mapping path="/user/getCaptcha.do" />
<mvc:exclude-mapping path="/user/verify.do" />
<mvc:exclude-mapping path="/user/exit.do" />
<!-- 3. 指定拦截器类 -->
<bean class="org.example.interceptor.LoginInterceptor" />
</mvc:interceptor>
</mvc:interceptors>
<!--配置模板引擎-->
<bean id="springResourceTemplateResolver" class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver">
<property name="prefix" value="/WEB-INF/templates/"/>
<property name="suffix" value=".html"/>
<!--解决页面的中文乱码-->
<property name="characterEncoding" value="UTF-8"/>
<property name="order" value="1"/>
<property name="templateMode" value="HTML5"/>
<property name="cacheable" value="false"/>
</bean>
<bean id="springTemplateEngine" class="org.thymeleaf.spring5.SpringTemplateEngine">
<property name="templateResolver" ref="springResourceTemplateResolver"/>
</bean>
<!-- 配置thymeleaf视图解析器 -->
<bean id="thymeleafViewResolver" class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
<property name="templateEngine" ref="springTemplateEngine"/>
<property name="characterEncoding" value="UTF-8"/>
</bean>
<!-- 启用JSP视图解析器 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/"/>
<property name="suffix" value=".html"/>
</bean>
<!-- 启用文件上传解析器 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- the maximum file size in bytes : 10m -->
<property name="maxUploadSize" value="10485760"/>
<property name="defaultEncoding" value="UTF-8"/>
</bean>
</beans>

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 启用组件扫描和自动装配 -->
<context:component-scan base-package="org.example.service"/>
</beans>

@ -0,0 +1,116 @@
<!DOCTYPE html>
<html class="x-admin-sm" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>教务管理系统</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<link rel="stylesheet" th:href="@{/static/css/font.css}">
<link rel="stylesheet" th:href="@{/static/css/xadmin.css}">
<link href="https://cdn.bootcdn.net/ajax/libs/font-awesome/6.1.1/css/all.css" rel="stylesheet">
<script type="text/javascript" th:src="@{/static/lib/layui/layui.js}" charset="utf-8"></script>
<script type="text/javascript" th:src="@{/static/js/xadmin.js}"></script>
<script th:inline="javascript" type="text/javascript">var ctx =[[${#httpServletRequest.getContextPath()}]];</script>
<!-- 让IE8/9支持媒体查询从而兼容栅格 -->
<!--[if lt IE 9]>
<script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
<script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
<![endif]-->
</head>
<body>
<div class="layui-fluid">
<div class="layui-row">
<form class="layui-form" name="dataForm" id="dataForm">
<div class="layui-form-item">
<label for="name" class="layui-form-label">
<span class="x-red">*</span>课程名称:
</label>
<div class="layui-input-inline">
<input type="text" id="name" name="name" required="" lay-verify="required" autocomplete="off" class="layui-input">
</div>
<label for="courseNo" class="layui-form-label">
<span class="x-red">*</span>课程编码:
</label>
<div class="layui-input-inline">
<input type="text" id="courseNo" name="courseNo" lay-verify="required" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label for="courseNo" class="layui-form-label">
<span class="x-red">*</span>任教老师:
</label>
<div class="layui-input-inline">
<select id="roleId" name="teacherId" lay-verify="required">
<option value="">请选择</option>
<option th:each="items:${teacher}" th:value="${items.id}" th:text="${items.realName}"></option>
</select>
</div>
</div>
<div class="layui-form-item layui-form-text">
<label for="remark" class="layui-form-label">备注</label>
<div class="layui-input-block" style="width: 75%">
<textarea placeholder="请输入内容" id="remark" name="remark" class="layui-textarea"></textarea>
</div>
</div>
<div style="text-align: center;">
<input type="button" lay-filter="submit" class="layui-btn" id ="submit" lay-submit="" value="添加"/>
<input type="button" class="layui-btn" id ="gb" value="关闭"/>
</div>
</form>
</div>
</div>
<script>layui.use(['form', 'layer'],
function() {
$ = layui.jquery;
var form = layui.form,
layer = layui.layer;
//自定义验证规则
form.verify({
content: function(value){
layedit.sync(editIndex);
}
});
//监听提交
form.on("submit(submit)", function (data) {
const url = ctx+"/course/add.do";
$.ajax({
"url":url,
"data":data.field,
"type":"post",
"dataType":"json",
"success":function(res){
//后台操作成功
if(res.code ==0){
layer.alert("添加成功!", {
icon: 6
},
function() {
//关闭当前frame
xadmin.close();
// 可以对父窗口进行刷新
xadmin.father_reload();
});
}else{
layer.alert(res.msg+",请联系系统管理人员!", {icon: 5});
}
}
});
return false;
});
//监听关闭
$("#gb").on('click',function(){
xadmin.del_tab();
})
});
</script>
</body>
</html>

@ -0,0 +1,116 @@
<!DOCTYPE html>
<html class="x-admin-sm" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>教务管理系统</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width,room-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi" />
<link rel="stylesheet" th:href="@{/static/css/font.css}">
<link rel="stylesheet" th:href="@{/static/css/xadmin.css}">
<script type="text/javascript" th:src="@{/static/lib/layui/layui.js}" charset="utf-8"></script>
<script type="text/javascript" th:src="@{/static/js/xadmin.js}"></script>
<script th:inline="javascript" type="text/javascript">var ctx =[[${#httpServletRequest.getContextPath()}]];</script>
<!-- 让IE8/9支持媒体查询从而兼容栅格 -->
<!--[if lt IE 9]>
<script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
<script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
<![endif]-->
</head>
<body>
<div class="layui-fluid">
<div class="layui-row">
<form class="layui-form" name="dataForm" id="dataForm">
<input type="text" id="id" name="id" th:value="${course.id}" hidden>
<div class="layui-form-item">
<label for="name" class="layui-form-label">
<span class="x-red">*</span>课程名称:
</label>
<div class="layui-input-inline">
<input type="text" id="name" name="name" th:value="${course.name}" lay-verify="required" autocomplete="off" class="layui-input">
</div>
<label for="courseNo" class="layui-form-label">
<span class="x-red">*</span>课程编号:
</label>
<div class="layui-input-inline">
<input type="text" id="courseNo" name="courseNo" th:value="${course.courseNo}" lay-verify="required" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label for="courseNo" class="layui-form-label">
<span class="x-red">*</span>任教老师:
</label>
<div class="layui-input-inline">
<select id="roleId" name="teacherId" lay-verify="required">
<option value="">请选择</option>
<option th:each="items:${teacher}" th:value="${items.id}" th:text="${items.realName}" th:selected="${course.teacherId == items.id}"></option>
</select>
</div>
</div>
<div class="layui-form-item layui-form-text">
<label for="remark" class="layui-form-label">备注</label>
<div class="layui-input-block" style="width: 75%">
<textarea placeholder="请输入内容" id="remark" name="remark" th:text="${course.remark}" class="layui-textarea"></textarea>
</div>
</div>
<div style="text-align: center;">
<input type="button" lay-filter="submit" class="layui-btn" id ="submit" lay-submit="" value="确定"/>
<input type="button" class="layui-btn" id ="gb" value="关闭"/>
</div>
</form>
</div>
</div>
<script>layui.use(['form', 'layer'],
function() {
$ = layui.jquery;
var form = layui.form,
layer = layui.layer;
//自定义验证规则
form.verify({
content: function(value){
layedit.sync(editIndex);
}
});
//监听提交
form.on("submit(submit)", function (data) {
/*var data = $("#dataForm").serialize();*/
const url = ctx+"/course/edit.do";
$.ajax({
"url":url,
"data":data.field,
"type":"post",
"dataType":"json",
"success":function(res){
//后台操作成功
if(res.code ==0){
layer.alert("修改成功!", {
icon: 6
},
function() {
//关闭当前frame
xadmin.close();
// 可以对父窗口进行刷新
xadmin.father_reload();
});
}else{
layer.alert(res.msg+",请联系系统管理人员!", {icon: 5});
}
}
});
return false;
});
//监听关闭
$("#gb").on('click',function(){
xadmin.father_reload();
})
});
</script>
</body>
</html>

@ -0,0 +1,181 @@
<!DOCTYPE html>
<html class="x-admin-sm" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>教务管理系统</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi" />
<link rel="stylesheet" th:href="@{/static/css/font.css}">
<link rel="stylesheet" th:href="@{/static/css/xadmin.css}">
<script type="text/javascript" th:src="@{/static/lib/layui/layui.js}" charset="utf-8"></script>
<script type="text/javascript" th:src="@{/static/js/xadmin.js}"></script>
<script th:inline="javascript" type="text/javascript">var ctx =[[${#httpServletRequest.getContextPath()}]];</script>
</head>
<body>
<div class="x-nav">
<span class="layui-breadcrumb">
<a href="">首页</a>
<a href="">课程信息管理</a>
<a>
<cite>课程信息列表</cite></a>
</span>
<a class="layui-btn layui-btn-small" style="line-height:1.6em;margin-top:3px;float:right" onclick="location.reload()" title="刷新">
<i class="layui-icon layui-icon-refresh" style="line-height:30px"></i>
</a>
</div>
<div class="layui-fluid">
<div class="layui-row layui-col-space15">
<div class="layui-col-md12">
<div class="layui-card">
<div class="layui-card-body ">
<form class="layui-form layui-form-item">
<label class="layui-form-label" style="font-size: 15px">课程名称:</label>
<div class="layui-input-inline">
<input type="text" name="name" id="name" placeholder="请输入课程名称" autocomplete="off" class="layui-input">
</div>
<label class="layui-form-label" style="font-size: 15px">课程编码:</label>
<div class="layui-input-inline">
<input type="text" name="courseNo" id="courseNo" placeholder="请输入课程编码" autocomplete="off" class="layui-input">
</div>
<div class="layui-inline demoTable">
<input type="button" class="layui-btn layui-icon layui-icon-search layuiadmin-button-btn" data-type="select" value="查询" />
</div>
</form>
</div>
<div class="layui-card-header" th:if="${session.user.roleId == '3'}"><!--(管理员)-->
<button class="layui-btn" onclick="xadmin.open('添加课程信息','./add.do',700,500)">
<i class="layui-icon"></i>添加</button></div>
<div class="layui-card-body ">
<table id="demo" lay-filter="test"></table>
</div>
</div>
</div>
</div>
</div>
</body>
<script type="text/html" id="barDemo" hidden>
<div >
<div class="logo">
{{# if(d.selected == false ){ }}
<a th:if="${session.user.roleId == '1'}" class="layui-btn layui-btn-normal layui-btn-xs" lay-event="xz">选择课程</a>
{{# } else { }}
<a th:if="${session.user.roleId == '1'}" class="layui-btn layui-btn-danger layui-btn-xs" lay-event="xz">取消选择</a>
{{# } }}
<a th:if="${session.user.roleId == '3'}" class="layui-btn layui-btn-primary layui-btn-xs" id = "btn1" lay-event="edit">编辑</a>
<a th:if="${session.user.roleId == '3'}" class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del" >删除</a>
</div>
</div>
</script>
<script>layui.use(['laydate', 'form','table'],
function() {
var table = layui.table;
var util = layui.util;
//第一个实例
table.render({
elem: '#demo'
,height: 'full-280'
,url: ctx+'/course/getList.do' //数据接口
,page: true //开启分页
,even:false//若不开启隔行背景,不设置该参数即可
,title:'课程列表'
,cols: [
[ //表头 // {field: 'id', title: 'ID', width:80, sort: true, fixed: 'left'}
{field: 'name', title: '课程名称', width:180,fixed: 'left'}
,{field: 'courseNo', title: '课程编号', width:180,}
,{field: 'teacher.username', title: '任课老师', width:180,templet: function (d){
return d.teacher?.realName || ''
}}
,{field: 'remark', title: '描述'}
,{fixed: 'right', title: '操作', width:320, align:'center', toolbar: '#barDemo'}
]
],id:"selectAll"
});
//监听事件
table.on('tool(test)', function (obj){
var data = obj.data;
// 选择课程/取消选择
if(obj.event === 'xz'){
var message = data.selected ? "确定取消选择该课程吗?" : '确定选择该课程吗';
layer.confirm(message,
function(index) {
$.ajax({
"url":ctx+"/selection/handleSelect.do",
"data":{
id:data.id,
selected: data.selected
},
"type":"post",
"dataType":"json",
"success":function(res){
layer.close(index);
table.reload('selectAll');//重载表格(等值刷新)
}
});
});
}
//跳转编辑页面
if(obj.event === 'edit'){
xadmin.open('编辑课程信息',ctx+'/course/edit/'+obj.data.id+'.do',800,500)
}
//删除
if(obj.event === 'del'){
var message = "确定要删除吗?";
layer.confirm(message,
function(index) {
//捉到所有被选中的,发异步进行删除
$.ajax({
"url":ctx+"/course/remove.do",
"data":{
ids:data.id
},
"type":"post",
"dataType":"json",
"success":function(res){
layer.close(index);
table.reload('selectAll');//重载表格(等值刷新)
}
});
});
}
})
//监听行单击事件双击事件为rowDouble
table.on('rowDouble(test)', function(obj) {
var data = obj.data;
xadmin.open('编辑课程信息',ctx+'/course/edit/'+obj.data.id+'.do',800,500)
})
//查询
var active = {
select: function () {
/*layer.load(1);*/
table.reload('selectAll', {
where: {
name: $("#name").val(),
courseNo: $("#courseNo").val(),
}
, page: {
curr: 1//重新从第一页开始查询
}
});
}
};
$('.demoTable .layui-btn').on('click', function () {
var type = $(this).data('type');
active[type] ? active[type].call(this) : '';
});
});
</script>
</html>

@ -0,0 +1,177 @@
<!DOCTYPE html>
<html class="x-admin-sm" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>教务管理系统</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi" />
<link rel="stylesheet" th:href="@{/static/css/font.css}">
<link rel="stylesheet" th:href="@{/static/css/xadmin.css}">
<script type="text/javascript" th:src="@{/static/lib/layui/layui.js}" charset="utf-8"></script>
<script type="text/javascript" th:src="@{/static/js/xadmin.js}"></script>
<script th:inline="javascript" type="text/javascript">var ctx =[[${#httpServletRequest.getContextPath()}]];</script>
</head>
<body>
<div class="x-nav">
<span class="layui-breadcrumb">
<a href="">首页</a>
<a href="">课程信息管理</a>
<a>
<cite>课程信息列表</cite></a>
</span>
<a class="layui-btn layui-btn-small" style="line-height:1.6em;margin-top:3px;float:right" onclick="location.reload()" title="刷新">
<i class="layui-icon layui-icon-refresh" style="line-height:30px"></i>
</a>
</div>
<div class="layui-fluid">
<div class="layui-row layui-col-space15">
<div class="layui-col-md12">
<div class="layui-card">
<div class="layui-card-body ">
<form class="layui-form layui-form-item">
<label class="layui-form-label" style="font-size: 15px">课程名称:</label>
<div class="layui-input-inline">
<input type="text" name="name" id="name" placeholder="请输入课程名称" autocomplete="off" class="layui-input">
</div>
<label class="layui-form-label" style="font-size: 15px">课程编码:</label>
<div class="layui-input-inline">
<input type="text" name="courseNo" id="courseNo" placeholder="请输入课程编码" autocomplete="off" class="layui-input">
</div>
<div class="layui-inline demoTable">
<input type="button" class="layui-btn layui-icon layui-icon-search layuiadmin-button-btn" data-type="select" value="查询" />
</div>
</form>
</div>
<div class="layui-card-header" th:if="${session.user.roleId == '3'}"><!--(管理员)-->
<button class="layui-btn" onclick="xadmin.open('添加课程信息','./add.do',700,500)">
<i class="layui-icon"></i>添加</button></div>
<div class="layui-card-body ">
<table id="demo" lay-filter="test"></table>
</div>
</div>
</div>
</div>
</div>
</body>
<script type="text/html" id="barDemo" hidden>
<div >
<div class="logo">
{{# if(d.selected == false ){ }}
<a th:if="${session.user.roleId == '1'}" class="layui-btn layui-btn-normal layui-btn-xs" lay-event="xz">选择课程</a>
{{# } else { }}
<a th:if="${session.user.roleId == '1'}" class="layui-btn layui-btn-danger layui-btn-xs" lay-event="xz">取消选择</a>
{{# } }}
<a th:if="${session.user.roleId == '3'}" class="layui-btn layui-btn-primary layui-btn-xs" id = "btn1" lay-event="edit">编辑</a>
<a th:if="${session.user.roleId == '3'}" class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del" >删除</a>
</div>
</div>
</script>
<script>layui.use(['laydate', 'form','table'],
function() {
var table = layui.table;
var util = layui.util;
var uid = [[${session.uid}]]
//第一个实例
table.render({
elem: '#demo'
,height: 'full-280'
,url: ctx+'/course/getList.do' //数据接口
,where: { teacherId: uid}//加上参数*/
,page: true //开启分页
,even:false//若不开启隔行背景,不设置该参数即可
,title:'课程列表'
,cols: [
[ //表头 // {field: 'id', title: 'ID', width:80, sort: true, fixed: 'left'}
{field: 'name', title: '课程名称', width:180,fixed: 'left'}
,{field: 'courseNo', title: '课程编号', width:180,}
,{field: 'teacher.username', title: '任课老师', width:180,templet: function (d){
return d.teacher?.realName || ''
}}
,{field: 'remark', title: '描述'}
]
],id:"selectAll"
});
//监听事件
table.on('tool(test)', function (obj){
var data = obj.data;
// 选择课程/取消选择
if(obj.event === 'xz'){
var message = data.selected ? "确定取消选择该课程吗?" : '确定选择该课程吗';
layer.confirm(message,
function(index) {
$.ajax({
"url":ctx+"/selection/handleSelect.do",
"data":{
id:data.id,
selected: data.selected
},
"type":"post",
"dataType":"json",
"success":function(res){
layer.close(index);
table.reload('selectAll');//重载表格(等值刷新)
}
});
});
}
//跳转编辑页面
if(obj.event === 'edit'){
xadmin.open('编辑课程信息',ctx+'/course/edit/'+obj.data.id+'.do',800,500)
}
//删除
if(obj.event === 'del'){
var message = "确定要删除吗?";
layer.confirm(message,
function(index) {
//捉到所有被选中的,发异步进行删除
$.ajax({
"url":ctx+"/course/remove.do",
"data":{
ids:data.id
},
"type":"post",
"dataType":"json",
"success":function(res){
layer.close(index);
table.reload('selectAll');//重载表格(等值刷新)
}
});
});
}
})
//查询
var active = {
select: function () {
/*layer.load(1);*/
table.reload('selectAll', {
where: {
name: $("#name").val(),
courseNo: $("#courseNo").val(),
}
, page: {
curr: 1//重新从第一页开始查询
}
});
}
};
$('.demoTable .layui-btn').on('click', function () {
var type = $(this).data('type');
active[type] ? active[type].call(this) : '';
});
});
</script>
</html>

@ -0,0 +1,178 @@
<!doctype html>
<html class="x-admin-sm" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>教务管理系统</title>
<meta name="renderer" content="webkit|ie-comp|ie-stand">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta http-equiv="Cache-Control" content="no-siteapp" />
<link rel="stylesheet" th:href="@{/static/css/font.css}">
<link rel="stylesheet" th:href="@{/static/css/xadmin.css}">
<script type="text/javascript" th:src="@{/static/js/jquery.min.js}"></script>
<script type="text/javascript" th:src="@{/static/lib/layui/layui.js}" charset="utf-8"></script>
<script type="text/javascript" th:src="@{/static/js/xadmin.js}"></script>
<script th:inline="javascript" type="text/javascript">var ctx =[[${#httpServletRequest.getContextPath()}]];</script>
<!-- 让IE8/9支持媒体查询从而兼容栅格 -->
<!--[if lt IE 9]>
<script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
<script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
<![endif]-->
</head>
<body class="index">
<!-- 顶部开始 -->
<div class="container">
<div class="logo">
<a href="./index.do">教务管理系统</a></div>
<div class="left_open">
<a><i title="展开左侧栏" class="iconfont">&#xe699;</i></a>
</div>
<ul class="layui-nav right" lay-filter="">
<li class="layui-nav-item">
<a href="javascript:;"th:text="${session.username}" ></a>
<dl class="layui-nav-child">
<!-- 二级菜单 -->
<dd>
<a href="javascript:;" th:onclick="|xadmin.open('修改密码',ctx+'/user/reset/'+${session.uid}+'.do',700,300)|"/>修改密码</a></dd>
<dd>
<a href="javascript:void (0)" onclick="exit()">退出</a></dd>
</dl>
</li>
</ul>
</div>
<!-- 顶部结束 -->
<!-- 中部开始 -->
<!-- 左侧菜单开始 -->
<div class="left-nav">
<div id="side-nav">
<ul id="nav">
<li th:if="${session.user.roleId == '3'}">
<a href="javascript:;">
<i class="layui-icon left-nav-li" lay-tips="用户管理" style="font-size: 18px; color: #1E9FFF;">&#xe770;</i>
<cite>用户管理</cite>
<i class="iconfont nav_right">&#xe656;</i></a>
<ul class="sub-menu">
<li>
<a onclick="xadmin.add_tab('用户管理',ctx+'/user/list.do')">
<i class="layui-icon">&#xe66f;</i>
<cite>用户管理</cite></a>
</li>
</ul>
</li>
<li th:if="${session.user.roleId == '3'}">
<a href="javascript:;">
<i class="layui-icon left-nav-li" lay-tips="课程管理">&#xe632;</i>
<cite>课程管理</cite>
<i class="iconfont nav_right">&#xe656</i></a>
<ul class="sub-menu">
<li>
<a onclick="xadmin.add_tab('课程信息',ctx+'/course/list.do')">
<i class="layui-icon">&#xe632;</i>
<cite>课程信息</cite></a>
</li>
</ul>
</li>
<li>
<a href="javascript:;">
<i class="iconfont left-nav-li" lay-tips="选课管理">&#xe723;</i>
<cite>选课管理</cite>
<i class="iconfont nav_right">&#xe656;</i></a>
<ul class="sub-menu" th:if="${session.user.roleId == '2'}">
<li>
<a onclick="xadmin.add_tab('我的课程',ctx+'/course/myList.do')">
<i class="layui-icon">&#xe66f;</i>
<cite>我的课程</cite></a>
</li>
</ul>
<ul class="sub-menu" th:if="${session.user.roleId == '1'}">
<li>
<a onclick="xadmin.add_tab('课程信息',ctx+'/course/list.do')">
<i class="layui-icon">&#xe632;</i>
<cite>课程信息</cite></a>
</li>
</ul>
<ul class="sub-menu" th:if="${session.user.roleId == '1'}">
<li>
<a onclick="xadmin.add_tab('我的课程',ctx+'/selection/myList.do')">
<i class="layui-icon">&#xe66f;</i>
<cite>我的课程</cite></a>
</li>
</ul>
<ul class="sub-menu" th:if="${session.user.roleId == '2' || session.user.roleId == '3'}">
<li>
<a onclick="xadmin.add_tab('选课记录',ctx+'/selection/list.do')">
<i class="layui-icon">&#xe66f;</i>
<cite>选课记录</cite></a>
</li>
</ul>
</li>
<li>
<a href="javascript:;">
<i class="iconfont left-nav-li" lay-tips="系统管理">&#xe723;</i>
<cite>系统管理</cite>
<i class="iconfont nav_right">&#xe656;</i></a>
<ul class="sub-menu">
<li>
<a onclick="exit()"><cite>退出</cite></a>
</li>
</ul>
</li>
</ul>
</div>
</div>
<!-- <div class="x-slide_left"></div> -->
<!-- 左侧菜单结束 -->
<!-- 右侧主体开始 -->
<div class="page-content">
<div class="layui-tab tab" lay-filter="xbs_tab" lay-allowclose="false">
<ul class="layui-tab-title">
<li class="home">
<i class="layui-icon">&#xe68e;</i>首页</li></ul>
<div class="layui-unselect layui-form-select layui-form-selected" id="tab_right">
<dl>
<dd data-type="this">关闭当前</dd>
<dd data-type="other">关闭其它</dd>
<dd data-type="all">关闭全部</dd>
</dl>
</div>
<div class="layui-tab-content">
<div class="layui-tab-item layui-show">
<iframe src="./welcome.do" frameborder="0" scrolling="yes" class="x-iframe"></iframe>
</div>
</div>
<div id="tab_show"></div>
</div>
</div>
<div class="page-content-bg"></div>
<style id="theme_style"></style>
<!-- 右侧主体结束 -->
<!-- 中部结束 -->
</body>
<script>
// let index = 0;
// if(index === 0){
// index ++;
// location.reload();
// }
//退出
function exit() {
$.ajax({
"url":ctx+"/user/exit.do",
"data":"",
"type":"post",
"dataType":"json",
"success":function(res){
xadmin.layuiTabClose();
location.href ="../login.html";
}
});
}
</script>
</html>

@ -0,0 +1,179 @@
<!DOCTYPE html>
<html class="x-admin-sm" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>欢迎</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<link rel="stylesheet" th:href="@{/static/css/font.css}">
<link rel="stylesheet" th:href="@{/static/css/xadmin.css}">
<script type="text/javascript" th:src="@{/static/js/jquery.min.js}"></script>
<script type="text/javascript" th:src="@{/static/lib/layui/layui.js}" charset="utf-8"></script>
<script type="text/javascript" th:src="@{/static/js/xadmin.js}"></script>
<script th:inline="javascript" type="text/javascript">var ctx =[[${#httpServletRequest.getContextPath()}]];</script>
<!-- 让IE8/9支持媒体查询从而兼容栅格 -->
<!--[if lt IE 9]>
<script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
<script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
<![endif]-->
</head>
<body>
<div class="layui-fluid">
<div class="layui-row layui-col-space15">
<div class="layui-col-md12">
<div class="layui-card">
<div class="layui-card-body ">
<blockquote class="layui-elem-quote">欢迎:<span class="x-red" style="font-size: 18px" th:text="${session.username}"></span>!
当前时间:<span> [[${#dates.format(new java.util.Date().getTime(), 'yyyy-MM-dd hh:mm:ss')}]] </span>
</blockquote>
</div>
</div>
</div>
<div class="layui-col-md12">
<div class="layui-card">
<div class="layui-card-header">数据统计</div>
<div class="layui-card-body ">
<ul class="layui-row layui-col-space10 layui-this x-admin-carousel x-admin-backlog">
<li class="layui-col-md2 layui-col-xs6">
<a href="" class="x-admin-backlog-body">
<h3>用户数</h3>
<p>
<cite>110</cite></p>
</a>
</li>
<li class="layui-col-md2 layui-col-xs6">
<a href="javascript:;" class="x-admin-backlog-body">
<h3>老师</h3>
<p>
<cite>10</cite></p>
</a>
</li>
<li class="layui-col-md2 layui-col-xs6">
<a href="javascript:;" class="x-admin-backlog-body">
<h3>学生</h3>
<p>
<cite>50</cite></p>
</a>
</li>
<li class="layui-col-md2 layui-col-xs6">
<a href="" class="x-admin-backlog-body">
<h3>课程数</h3>
<p>
<cite>50</cite></p>
</a>
</li>
</ul>
</div>
</div>
</div>
<div class="layui-col-sm6 layui-col-md3">
<div class="layui-card">
<div class="layui-card-header">下载
<span class="layui-badge layui-bg-cyan layuiadmin-badge"></span></div>
<div class="layui-card-body ">
<p class="layuiadmin-big-font">33,555</p>
<p>新下载
<span class="layuiadmin-span-color">10%
<i class="layui-inline layui-icon layui-icon-face-smile-b"></i></span>
</p>
</div>
</div>
</div>
<div class="layui-col-sm6 layui-col-md3">
<div class="layui-card">
<div class="layui-card-header">下载
<span class="layui-badge layui-bg-cyan layuiadmin-badge"></span></div>
<div class="layui-card-body ">
<p class="layuiadmin-big-font">33,555</p>
<p>新下载
<span class="layuiadmin-span-color">10%
<i class="layui-inline layui-icon layui-icon-face-smile-b"></i></span>
</p>
</div>
</div>
</div>
<div class="layui-col-sm6 layui-col-md3">
<div class="layui-card">
<div class="layui-card-header">下载
<span class="layui-badge layui-bg-cyan layuiadmin-badge"></span></div>
<div class="layui-card-body ">
<p class="layuiadmin-big-font">33,555</p>
<p>新下载
<span class="layuiadmin-span-color">10%
<i class="layui-inline layui-icon layui-icon-face-smile-b"></i></span>
</p>
</div>
</div>
</div>
<div class="layui-col-sm6 layui-col-md3">
<div class="layui-card">
<div class="layui-card-header">下载
<span class="layui-badge layui-bg-cyan layuiadmin-badge"></span></div>
<div class="layui-card-body ">
<p class="layuiadmin-big-font">33,555</p>
<p>新下载
<span class="layuiadmin-span-color">10%
<i class="layui-inline layui-icon layui-icon-face-smile-b"></i></span>
</p>
</div>
</div>
</div>
<div class="layui-col-md12">
<div class="layui-card">
<div class="layui-card-header">系统信息</div>
<div class="layui-card-body ">
<table class="layui-table">
<tbody>
<tr>
<th>系统名称</th>
<td>教务管理系统</td></tr>
<tr>
<th>系统版本</th>
<td>v1.0</td></tr>
<tr>
<th>操作系统</th>
<td>windows</td></tr>
<tr>
<th>运行环境</th>
<td>Apache/2.4.23 (Win62) Tomcat/9.0 </td></tr>
<tr>
<th>JAVA版本</th>
<td>1.8</td></tr>
<tr>
<th>MYSQL版本</th>
<td>5.8</td></tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="layui-col-md12">
<div class="layui-card">
<div class="layui-card-header">开发者信息</div>
<div class="layui-card-body ">
<table class="layui-table">
<tbody>
<tr>
<th>开发者</th>
<td></td>
</tr>
<tr>
<th>介绍</th>
<td></td></tr>
</tbody>
</table>
</div>
</div>
</div>
<style id="welcome_style"></style>
<div class="layui-col-md12">
<blockquote class="layui-elem-quote layui-quote-nm">感谢layui,百度Echarts,jquery,本系统由x-admin提供技术支持。</blockquote></div>
</div>
</div>
</div>
</body>
</html>

@ -0,0 +1,116 @@
<!DOCTYPE html>
<html class="x-admin-sm" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>教务管理系统</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<link rel="stylesheet" th:href="@{/static/css/font.css}">
<link rel="stylesheet" th:href="@{/static/css/xadmin.css}">
<link href="https://cdn.bootcdn.net/ajax/libs/font-awesome/6.1.1/css/all.css" rel="stylesheet">
<script type="text/javascript" th:src="@{/static/lib/layui/layui.js}" charset="utf-8"></script>
<script type="text/javascript" th:src="@{/static/js/xadmin.js}"></script>
<script th:inline="javascript" type="text/javascript">var ctx =[[${#httpServletRequest.getContextPath()}]];</script>
<!-- 让IE8/9支持媒体查询从而兼容栅格 -->
<!--[if lt IE 9]>
<script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
<script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
<![endif]-->
</head>
<body>
<div class="layui-fluid">
<div class="layui-row">
<form class="layui-form" name="dataForm" id="dataForm">
<div class="layui-form-item">
<label for="name" class="layui-form-label">
<span class="x-red">*</span>课程名称:
</label>
<div class="layui-input-inline">
<input type="text" id="name" name="name" required="" lay-verify="required" autocomplete="off" class="layui-input">
</div>
<label for="courseNo" class="layui-form-label">
<span class="x-red">*</span>课程编码:
</label>
<div class="layui-input-inline">
<input type="text" id="courseNo" name="courseNo" lay-verify="required" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label for="courseNo" class="layui-form-label">
<span class="x-red">*</span>任教老师:
</label>
<div class="layui-input-inline">
<select id="roleId" name="teacherId" lay-verify="required">
<option value="">请选择</option>
<option th:each="items:${teacher}" th:value="${items.id}" th:text="${items.realName}"></option>
</select>
</div>
</div>
<div class="layui-form-item layui-form-text">
<label for="remark" class="layui-form-label">备注</label>
<div class="layui-input-block" style="width: 75%">
<textarea placeholder="请输入内容" id="remark" name="remark" class="layui-textarea"></textarea>
</div>
</div>
<div style="text-align: center;">
<input type="button" lay-filter="submit" class="layui-btn" id ="submit" lay-submit="" value="添加"/>
<input type="button" class="layui-btn" id ="gb" value="关闭"/>
</div>
</form>
</div>
</div>
<script>layui.use(['form', 'layer'],
function() {
$ = layui.jquery;
var form = layui.form,
layer = layui.layer;
//自定义验证规则
form.verify({
content: function(value){
layedit.sync(editIndex);
}
});
//监听提交
form.on("submit(submit)", function (data) {
const url = ctx+"/course/add.do";
$.ajax({
"url":url,
"data":data.field,
"type":"post",
"dataType":"json",
"success":function(res){
//后台操作成功
if(res.code ==0){
layer.alert("添加成功!", {
icon: 6
},
function() {
//关闭当前frame
xadmin.close();
// 可以对父窗口进行刷新
xadmin.father_reload();
});
}else{
layer.alert(res.msg+",请联系系统管理人员!", {icon: 5});
}
}
});
return false;
});
//监听关闭
$("#gb").on('click',function(){
xadmin.del_tab();
})
});
</script>
</body>
</html>

@ -0,0 +1,116 @@
<!DOCTYPE html>
<html class="x-admin-sm" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>教务管理系统</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width,room-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi" />
<link rel="stylesheet" th:href="@{/static/css/font.css}">
<link rel="stylesheet" th:href="@{/static/css/xadmin.css}">
<script type="text/javascript" th:src="@{/static/lib/layui/layui.js}" charset="utf-8"></script>
<script type="text/javascript" th:src="@{/static/js/xadmin.js}"></script>
<script th:inline="javascript" type="text/javascript">var ctx =[[${#httpServletRequest.getContextPath()}]];</script>
<!-- 让IE8/9支持媒体查询从而兼容栅格 -->
<!--[if lt IE 9]>
<script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
<script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
<![endif]-->
</head>
<body>
<div class="layui-fluid">
<div class="layui-row">
<form class="layui-form" name="dataForm" id="dataForm">
<input type="text" id="id" name="id" th:value="${course.id}" hidden>
<div class="layui-form-item">
<label for="name" class="layui-form-label">
<span class="x-red">*</span>课程名称:
</label>
<div class="layui-input-inline">
<input type="text" id="name" name="name" th:value="${course.name}" lay-verify="required" autocomplete="off" class="layui-input">
</div>
<label for="courseNo" class="layui-form-label">
<span class="x-red">*</span>课程编号:
</label>
<div class="layui-input-inline">
<input type="text" id="courseNo" name="courseNo" th:value="${course.courseNo}" lay-verify="required" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label for="courseNo" class="layui-form-label">
<span class="x-red">*</span>任教老师:
</label>
<div class="layui-input-inline">
<select id="roleId" name="teacherId" lay-verify="required">
<option value="">请选择</option>
<option th:each="items:${teacher}" th:value="${items.id}" th:text="${items.realName}" th:selected="${course.teacherId == items.id}"></option>
</select>
</div>
</div>
<div class="layui-form-item layui-form-text">
<label for="remark" class="layui-form-label">备注</label>
<div class="layui-input-block" style="width: 75%">
<textarea placeholder="请输入内容" id="remark" name="remark" th:text="${course.remark}" class="layui-textarea"></textarea>
</div>
</div>
<div style="text-align: center;">
<input type="button" lay-filter="submit" class="layui-btn" id ="submit" lay-submit="" value="确定"/>
<input type="button" class="layui-btn" id ="gb" value="关闭"/>
</div>
</form>
</div>
</div>
<script>layui.use(['form', 'layer'],
function() {
$ = layui.jquery;
var form = layui.form,
layer = layui.layer;
//自定义验证规则
form.verify({
content: function(value){
layedit.sync(editIndex);
}
});
//监听提交
form.on("submit(submit)", function (data) {
/*var data = $("#dataForm").serialize();*/
const url = ctx+"/course/edit.do";
$.ajax({
"url":url,
"data":data.field,
"type":"post",
"dataType":"json",
"success":function(res){
//后台操作成功
if(res.code ==0){
layer.alert("修改成功!", {
icon: 6
},
function() {
//关闭当前frame
xadmin.close();
// 可以对父窗口进行刷新
xadmin.father_reload();
});
}else{
layer.alert(res.msg+",请联系系统管理人员!", {icon: 5});
}
}
});
return false;
});
//监听关闭
$("#gb").on('click',function(){
xadmin.father_reload();
})
});
</script>
</body>
</html>

@ -0,0 +1,173 @@
<!DOCTYPE html>
<html class="x-admin-sm" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>教务管理系统</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi" />
<link rel="stylesheet" th:href="@{/static/css/font.css}">
<link rel="stylesheet" th:href="@{/static/css/xadmin.css}">
<script type="text/javascript" th:src="@{/static/lib/layui/layui.js}" charset="utf-8"></script>
<script type="text/javascript" th:src="@{/static/js/xadmin.js}"></script>
<script th:inline="javascript" type="text/javascript">var ctx =[[${#httpServletRequest.getContextPath()}]];</script>
</head>
<body>
<div class="x-nav">
<span class="layui-breadcrumb">
<a href="">首页</a>
<a href="">课程信息管理</a>
<a>
<cite>课程信息列表</cite></a>
</span>
<a class="layui-btn layui-btn-small" style="line-height:1.6em;margin-top:3px;float:right" onclick="location.reload()" title="刷新">
<i class="layui-icon layui-icon-refresh" style="line-height:30px"></i>
</a>
</div>
<div class="layui-fluid">
<div class="layui-row layui-col-space15">
<div class="layui-col-md12">
<div class="layui-card">
<div class="layui-card-body ">
<table id="demo" lay-filter="test"></table>
</div>
</div>
</div>
</div>
</div>
</body>
<script type="text/html" id="barDemo" hidden>
<div >
<div class="logo">
<a th:if="${session.user.roleId == '2'}" class="layui-btn layui-btn-normal layui-btn-xs" lay-event="df" >打分</a>
<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del" >退课</a>
</div>
</div>
</script>
<script>layui.use(['laydate', 'form','table'],
function() {
var table = layui.table;
var util = layui.util;
//第一个实例
table.render({
elem: '#demo'
,height: 'full-180'
,url: ctx+'/selection/getList.do' //数据接口
,page: true //开启分页
,even:false//若不开启隔行背景,不设置该参数即可
,title:'课程列表'
,cols: [
[ //表头 // {field: 'id', title: 'ID', width:80, sort: true, fixed: 'left'}
{field: 'name', title: '课程名称', width:180,fixed: 'left',templet: function (d){
return d.course?.name || ''
}}
,{field: 'courseNo', title: '课程编号', width:180,templet: function (d){
return d.course?.courseNo || ''
}}
,{field: 'teacher.realName', title: '任课老师', width:180,templet: function (d){
return d.course?.teacher?.realName || ''
}}
,{field: 'teacher.realName', title: '选课学生', width:180,templet: function (d){
return d.student?.realName || ''
}}
,{field: 'createdate', title: '选择时间', width: 180,templet:function(d){return util.toDateString(d.createdate, "yyyy-MM-dd HH:mm:ss");}}
,{field: 'remark', title: '描述',templet: function (d){
return d.course?.remark
}}
,{field: 'teacher.realName', title: '分数', width:100,templet: function (d){
return d.scores ? d.scores :''
}}
,{fixed: 'right', title: '操作', width:220, align:'center', toolbar: '#barDemo'}
]
],id:"selectAll"
});
//监听事件
table.on('tool(test)', function (obj){
var data = obj.data;
//跳转编辑页面
if(obj.event === 'df'){
layer.prompt(function(value, index, elem){
if(!Number.isFinite(+value)){
layer.alert("请输入数字类型!", {icon: 5});
return;
}
const url = ctx+"/selection/edit.do";
$.ajax({
"url":url,
"data": {
id: data.id,
scores: value
},
"type":"post",
"dataType":"json",
"success":function(res){
//后台操作成功
if(res.code ==0){
layer.close(index);
table.reload('selectAll');//重载表格(等值刷新)
}else{
layer.alert(res.msg+",请联系系统管理人员!", {icon: 5});
}
}
});
layer.close(index);
});
}
//删除
if(obj.event === 'del'){
var message = "确定要退课吗?";
layer.confirm(message,
function(index) {
//捉到所有被选中的,发异步进行删除
$.ajax({
"url":ctx+"/selection/remove.do",
"data":{
ids:data.id
},
"type":"post",
"dataType":"json",
"success":function(res){
layer.close(index);
table.reload('selectAll');//重载表格(等值刷新)
}
});
});
}
})
//查询
var active = {
select: function () {
/*layer.load(1);*/
table.reload('selectAll', {
where: {
name: $("#name").val(),
courseNo: $("#courseNo").val(),
}
, page: {
curr: 1//重新从第一页开始查询
}
});
}
};
$('.demoTable .layui-btn').on('click', function () {
var type = $(this).data('type');
active[type] ? active[type].call(this) : '';
});
});
</script>
</html>

@ -0,0 +1,139 @@
<!DOCTYPE html>
<html class="x-admin-sm" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>教务管理系统</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi" />
<link rel="stylesheet" th:href="@{/static/css/font.css}">
<link rel="stylesheet" th:href="@{/static/css/xadmin.css}">
<script type="text/javascript" th:src="@{/static/lib/layui/layui.js}" charset="utf-8"></script>
<script type="text/javascript" th:src="@{/static/js/xadmin.js}"></script>
<script th:inline="javascript" type="text/javascript">var ctx =[[${#httpServletRequest.getContextPath()}]];</script>
</head>
<body>
<div class="x-nav">
<span class="layui-breadcrumb">
<a href="">首页</a>
<a href="">课程信息管理</a>
<a>
<cite>课程信息列表</cite></a>
</span>
<a class="layui-btn layui-btn-small" style="line-height:1.6em;margin-top:3px;float:right" onclick="location.reload()" title="刷新">
<i class="layui-icon layui-icon-refresh" style="line-height:30px"></i>
</a>
</div>
<div class="layui-fluid">
<div class="layui-row layui-col-space15">
<div class="layui-col-md12">
<div class="layui-card">
<div class="layui-card-body ">
<table id="demo" lay-filter="test"></table>
</div>
</div>
</div>
</div>
</div>
</body>
<script type="text/html" id="barDemo" hidden>
<div >
<div class="logo">
<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del" >退课</a>
</div>
</div>
</script>
<script>layui.use(['laydate', 'form','table'],
function() {
var table = layui.table;
var util = layui.util;
var uid = [[${session.uid}]]
//第一个实例
table.render({
elem: '#demo'
,height: 'full-180'
,url: ctx+'/selection/getList.do' //数据接口
,where: { studentId: uid}//加上参数*/
,page: true //开启分页
,even:false//若不开启隔行背景,不设置该参数即可
,title:'课程列表'
,cols: [
[ //表头 // {field: 'id', title: 'ID', width:80, sort: true, fixed: 'left'}
{field: 'name', title: '课程名称', width:180,fixed: 'left',templet: function (d){
return d.course?.name || ''
}}
,{field: 'courseNo', title: '课程编号', width:180,templet: function (d){
return d.course?.courseNo || ''
}}
,{field: 'teacher.realName', title: '任课老师', width:180,templet: function (d){
return d.course?.teacher?.realName || ''
}}
,{field: 'remark', title: '描述',templet: function (d){
return d.course?.remark || ''
}}
,{fixed: 'right', title: '操作', width:220, align:'center', toolbar: '#barDemo'}
]
],id:"selectAll"
});
//监听事件
table.on('tool(test)', function (obj){
var data = obj.data;
//跳转编辑页面
if(obj.event === 'edit'){
xadmin.open('编辑课程信息',ctx+'/selection/edit/'+obj.data.id+'.do',800,500)
}
//删除
if(obj.event === 'del'){
var message = "确定要退课吗?";
layer.confirm(message,
function(index) {
//捉到所有被选中的,发异步进行删除
$.ajax({
"url":ctx+"/selection/remove.do",
"data":{
ids:data.id
},
"type":"post",
"dataType":"json",
"success":function(res){
layer.close(index);
table.reload('selectAll');//重载表格(等值刷新)
}
});
});
}
})
//查询
var active = {
select: function () {
/*layer.load(1);*/
table.reload('selectAll', {
where: {
name: $("#name").val(),
courseNo: $("#courseNo").val(),
}
, page: {
curr: 1//重新从第一页开始查询
}
});
}
};
$('.demoTable .layui-btn').on('click', function () {
var type = $(this).data('type');
active[type] ? active[type].call(this) : '';
});
});
</script>
</html>

@ -0,0 +1,162 @@
<!DOCTYPE html>
<html class="x-admin-sm" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>教务管理系统</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi" />
<link rel="stylesheet" th:href="@{/static/css/font.css}">
<link rel="stylesheet" th:href="@{/static/css/xadmin.css}">
<link href="https://cdn.bootcdn.net/ajax/libs/font-awesome/6.1.1/css/all.css" rel="stylesheet">
<script type="text/javascript" th:src="@{/static/lib/layui/layui.js}" charset="utf-8"></script>
<script type="text/javascript" th:src="@{/static/js/xadmin.js}"></script>
<script th:inline="javascript" type="text/javascript">var ctx =[[${#httpServletRequest.getContextPath()}]];</script>
<!-- 让IE8/9支持媒体查询从而兼容栅格 -->
<!--[if lt IE 9]>
<script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
<script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
<![endif]-->
</head>
<body>
<div class="layui-fluid">
<div class="layui-row">
<form class="layui-form" name="dataForm" id="dataForm">
<div class="layui-form-item">
<label for="username" class="layui-form-label">
<span class="x-red">*</span>用户名:
</label>
<div class="layui-input-inline">
<input type="text" id="username" name="username" required="" lay-verify="required|username" autocomplete="off" class="layui-input">
</div>
<label for="password" class="layui-form-label">
<span class="x-red">*</span>密码:
</label>
<div class="layui-input-inline">
<input type="password" id="password" name="password" value="123456" required="required|password" lay-verify="password"
autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label for="username" class="layui-form-label">
<span class="x-red">*</span>真实姓名:
</label>
<div class="layui-input-inline">
<input type="text" id="realName " name="realName" required="" lay-verify="required|realName" autocomplete="off" class="layui-input">
</div>
<label for="password" class="layui-form-label">
<span class="x-red">*</span>性别:
</label>
<div class="layui-input-inline">
<select id="roleId" name="sex" lay-verify="required">
<option value="1"></option>
<option value="2"></option>
</select>
</div>
</div>
<div class="layui-form-item">
<label for="phone" class="layui-form-label">
<span class="x-red">*</span>电话:
</label>
<div class="layui-input-inline">
<input type="text" id="phone" name="phone" required="" lay-verify="phone" maxlength="11" autocomplete="off" class="layui-input">
</div>
<label for="roleId" class="layui-form-label">
<span class="x-red">*</span> 用户角色:
</label>
<div class="layui-input-inline">
<select id="roleId" name="roleId" lay-verify="required|roleId">
<option value="">请选择角色</option>
<option value="1">学生</option>
<option value="2">老师</option>
<option value="3">管理员</option>
</select>
</div>
</div>
<div class="layui-form-item">
<label for="phone" class="layui-form-label">
年龄:
</label>
<div class="layui-input-inline">
<input type="number" id="age" name="age" maxlength="11" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item layui-form-text">
<label for="remark" class="layui-form-label">备注</label>
<div class="layui-input-block" style="width: 75%">
<textarea placeholder="请输入内容" id="remark" name="remark" class="layui-textarea"></textarea>
</div>
</div>
<div style="text-align: center;">
<input type="button" lay-filter="submit" class="layui-btn" id ="submit" lay-submit="" value="添加"/>
<input type="button" class="layui-btn" id ="gb" value="关闭"/>
</div>
</form>
</div>
</div>
<script>layui.use(['form', 'layer'],
function() {
$ = layui.jquery;
var form = layui.form,
layer = layui.layer;
//自定义验证规则
form.verify({
username: function(value){
if(value.length < 3){
return '用户名至少得3个字符啊';
return false;
}
}
,password: [
/^[\S]{5,12}$/
,'密码必须5到12位且不能出现空格'
]
,content: function(value){
layedit.sync(editIndex);
}
});
//监听提交
form.on("submit(submit)", function (data) {
const url = ctx+"/user/add.do";
$.ajax({
"url":url,
"data":data.field,
"type":"post",
"dataType":"json",
"success":function(res){
//后台操作成功
if(res.code ==0){
layer.alert("添加成功!", {
icon: 6
},
function() {
//关闭当前frame
xadmin.close();
// 可以对父窗口进行刷新
xadmin.father_reload();
});
}else{
layer.alert(res.msg+",请联系系统管理人员!", {icon: 5});
}
}
});
return false;
});
//监听关闭
$("#gb").on('click',function(){
xadmin.del_tab();
})
});
</script>
</body>
</html>

@ -0,0 +1,159 @@
<!DOCTYPE html>
<html class="x-admin-sm" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>教务管理系统</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width,room-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi" />
<link rel="stylesheet" th:href="@{/static/css/font.css}">
<link rel="stylesheet" th:href="@{/static/css/xadmin.css}">
<script type="text/javascript" th:src="@{/static/lib/layui/layui.js}" charset="utf-8"></script>
<script type="text/javascript" th:src="@{/static/js/xadmin.js}"></script>
<script th:inline="javascript" type="text/javascript">var ctx =[[${#httpServletRequest.getContextPath()}]];</script>
<!-- 让IE8/9支持媒体查询从而兼容栅格 -->
<!--[if lt IE 9]>
<script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
<script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
<![endif]-->
</head>
<body>
<div class="layui-fluid">
<div class="layui-row">
<form class="layui-form" name="dataForm" id="dataForm">
<input type="text" id="id" name="id" th:value="${user.id}" hidden>
<div class="layui-form-item">
<label for="username" class="layui-form-label">
<span class="x-red">*</span>用户名:
</label>
<div class="layui-input-inline">
<input type="text" id="username" name="username" th:value="${user.username}" required="" lay-verify="required|username" autocomplete="off" class="layui-input">
</div>
<label for="password" class="layui-form-label">
<span class="x-red">*</span>密码:
</label>
<div class="layui-input-inline">
<input type="password" id="password" name="password" th:value="${user.password}" required="required|password" lay-verify="password"
autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label for="username" class="layui-form-label">
<span class="x-red">*</span>真实姓名:
</label>
<div class="layui-input-inline">
<input type="text" id="realName " name="realName" th:value="${user.realName}" required="" lay-verify="required|realName" autocomplete="off" class="layui-input">
</div>
<label for="password" class="layui-form-label">
<span class="x-red">*</span>性别:
</label>
<div class="layui-input-inline">
<select id="roleId" name="sex" lay-verify="required">
<option value="1" th:selected="${user.sex =='1'}"></option>
<option value="2" th:selected="${user.sex =='2'}"></option>
</select>
</div>
</div>
<div class="layui-form-item">
<label for="phone" class="layui-form-label">
<span class="x-red">*</span>电话:
</label>
<div class="layui-input-inline">
<input type="text" id="phone" name="phone" th:value="${user.phone}" required="" lay-verify="phone" maxlength="11" autocomplete="off" class="layui-input">
</div>
<label for="roleId" class="layui-form-label">
<span class="x-red">*</span> 用户角色:
</label>
<div class="layui-input-inline">
<select id="roleId" name="roleId" lay-verify="required|roleId">
<option value="1" th:selected="${user.roleId =='1'}">学生</option>
<option value="2" th:selected="${user.roleId =='2'}">老师</option>
<option value="3" th:selected="${user.roleId =='3'}">管理员</option>
</select>
</div>
</div>
<div class="layui-form-item">
<label for="phone" class="layui-form-label">
年龄:
</label>
<div class="layui-input-inline">
<input type="number" id="age" name="age" th:value="${user.age}" maxlength="11" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item layui-form-text">
<label for="remark" class="layui-form-label">备注</label>
<div class="layui-input-block" style="width: 75%">
<textarea placeholder="请输入内容" id="remark" name="remark" th:text="${user.remark}" class="layui-textarea"></textarea>
</div>
</div>
<div style="text-align: center;">
<input type="button" lay-filter="submit" class="layui-btn" id ="submit" lay-submit="" value="确定"/>
<input type="button" class="layui-btn" id ="gb" value="关闭"/>
</div>
</form>
</div>
</div>
<script>layui.use(['form', 'layer'],
function() {
$ = layui.jquery;
var form = layui.form,
layer = layui.layer;
//自定义验证规则
form.verify({
username: function(value){
if(value.length < 3){
return '用户名至少得3个字符啊';
return false;
}
}
,password: [
/^[\S]{5,12}$/
,'密码必须5到12位且不能出现空格'
]
,content: function(value){
layedit.sync(editIndex);
}
});
//监听提交
form.on("submit(submit)", function (data) {
/*var data = $("#dataForm").serialize();*/
const url = ctx+"/user/edit.do";
$.ajax({
"url":url,
"data":data.field,
"type":"post",
"dataType":"json",
"success":function(res){
//后台操作成功
if(res.code ==0){
layer.alert("修改成功!", {
icon: 6
},
function() {
//关闭当前frame
xadmin.close();
// 可以对父窗口进行刷新
xadmin.father_reload();
});
}else{
layer.alert(res.msg+",请联系系统管理人员!", {icon: 5});
}
}
});
return false;
});
//监听关闭
$("#gb").on('click',function(){
xadmin.father_reload();
})
});
</script>
</body>
</html>

@ -0,0 +1,161 @@
<!DOCTYPE html>
<html class="x-admin-sm" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>教务管理系统</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi" />
<link rel="stylesheet" th:href="@{/static/css/font.css}">
<link rel="stylesheet" th:href="@{/static/css/xadmin.css}">
<script type="text/javascript" th:src="@{/static/lib/layui/layui.js}" charset="utf-8"></script>
<script type="text/javascript" th:src="@{/static/js/xadmin.js}"></script>
<script th:inline="javascript" type="text/javascript">var ctx =[[${#httpServletRequest.getContextPath()}]];</script>
</head>
<body>
<div class="x-nav">
<span class="layui-breadcrumb">
<a href="">首页</a>
<a href="">用户信息管理</a>
<a>
<cite>用户信息列表</cite></a>
</span>
<a class="layui-btn layui-btn-small" style="line-height:1.6em;margin-top:3px;float:right" onclick="location.reload()" title="刷新">
<i class="layui-icon layui-icon-refresh" style="line-height:30px"></i>
</a>
</div>
<div class="layui-fluid">
<div class="layui-row layui-col-space15">
<div class="layui-col-md12">
<div class="layui-card">
<div class="layui-card-body ">
<form class="layui-form layui-form-item">
<label class="layui-form-label" style="font-size: 15px">真实姓名:</label>
<div class="layui-input-inline">
<input type="text" name="realName" id="realName" placeholder="请输入真实姓名" autocomplete="off" class="layui-input">
</div>
<label class="layui-form-label" style="font-size: 15px">手机号:</label>
<div class="layui-input-inline">
<input type="text" name="phone" id="phone" placeholder="请输入手机号" autocomplete="off" class="layui-input">
</div>
<div class="layui-inline demoTable">
<input type="button" class="layui-btn layui-icon layui-icon-search layuiadmin-button-btn" data-type="select" value="查询" />
</div>
</form>
</div>
<div class="layui-card-header"><!--后勤处(相当于管理员)-->
<button class="layui-btn" onclick="xadmin.open('添加用户信息','./add.do',700,600)">
<i class="layui-icon"></i>添加</button></div>
<div class="layui-card-body ">
<table id="demo" lay-filter="test"></table>
</div>
</div>
</div>
</div>
</div>
</body>
<script type="text/html" id="barDemo" hidden>
<div >
<div class="logo">
<a class="layui-btn layui-btn-primary layui-btn-xs" id = "btn1" lay-event="edit">编辑</a>
<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del" >删除</a>
</div>
</div>
</script>
<script>layui.use(['laydate', 'form','table'],
function() {
var table = layui.table;
var util = layui.util;
//第一个实例
table.render({
elem: '#demo'
,height: 'full-280'
,url: ctx+'/user/getList.do' //数据接口
,page: true //开启分页
,even:false//若不开启隔行背景,不设置该参数即可
,title:'用户列表'
,cols: [
[ //表头 // {field: 'id', title: 'ID', width:80, sort: true, fixed: 'left'}
{field: 'username', title: '用户名', width:177,fixed: 'left'}
,{field: 'roleId', title: '角色', width:150,templet:function (d) {
return d.roleId == '1' ? '学生' : d.roleId == '2' ? '老师' : '管理员'
}}
,{field: 'realName', title: '真实姓名', width:120 }
,{field: 'sex', title: '性别', width:120,templet:function (d) {
return d.sex == '1' ? '男': '女'
} }
,{field: 'age', title: '年龄', width:120 }
,{field: 'phone', title: '电话', width:150 }
,{field: 'remark', title: '描述'}
,{field: 'createdate', title: '创建时间', width: 180,templet:function(d){return util.toDateString(d.createdate, "yyyy-MM-dd HH:mm:ss");}}
,{fixed: 'right', title: '操作', width:220, align:'center', toolbar: '#barDemo'}
]
],id:"selectAll"
});
//监听事件
table.on('tool(test)', function (obj){
var data = obj.data;
//跳转编辑页面
if(obj.event === 'edit'){
xadmin.open('编辑用户信息',ctx+'/user/edit/'+obj.data.id+'.do',800,600)
}
//删除
if(obj.event === 'del'){
var message = "确定要删除吗?";
layer.confirm(message,
function(index) {
//捉到所有被选中的,发异步进行删除
$.ajax({
"url":ctx+"/user/remove.do",
"data":{
ids:data.id
},
"type":"post",
"dataType":"json",
"success":function(res){
layer.close(index);
table.reload('selectAll');//重载表格(等值刷新)
}
});
});
}
})
//监听行单击事件双击事件为rowDouble
table.on('rowDouble(test)', function(obj) {
var data = obj.data;
xadmin.open('编辑用户信息',ctx+'/user/edit/'+obj.data.id+'.do',800,600)
})
//查询
var active = {
select: function () {
/*layer.load(1);*/
table.reload('selectAll', {
where: {
realName: $("#realName").val(),
phone: $("#phone").val(),
}
, page: {
curr: 1//重新从第一页开始查询
}
});
}
};
$('.demoTable .layui-btn').on('click', function () {
var type = $(this).data('type');
active[type] ? active[type].call(this) : '';
});
});
</script>
</html>

@ -0,0 +1,125 @@
<!DOCTYPE html>
<html class="x-admin-sm" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>教务管理系统</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width,room-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi" />
<link rel="stylesheet" th:href="@{/static/css/font.css}">
<link rel="stylesheet" th:href="@{/static/css/xadmin.css}">
<script type="text/javascript" th:src="@{/static/lib/layui/layui.js}" charset="utf-8"></script>
<script type="text/javascript" th:src="@{/static/js/xadmin.js}"></script>
<script th:inline="javascript" type="text/javascript">var ctx =[[${#httpServletRequest.getContextPath()}]];</script>
<!-- 让IE8/9支持媒体查询从而兼容栅格 -->
<!--[if lt IE 9]>
<script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
<script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
<![endif]-->
</head>
<body>
<div class="layui-fluid">
<div class="layui-row">
<form class="layui-form" name="dataForm" id="dataForm">
<input type="text" id="id" name="id" th:value="${user.id}" hidden>
<input type="text" id="old" name="old" th:value="${user.password}" hidden>
<div class="layui-form-item">
<label for="username" class="layui-form-label">
<span class="x-red">*</span>用户名:
</label>
<div class="layui-input-inline">
<input type="text" id="username" name="username" th:value="${user.username}" disabled required="" lay-verify="required|username" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label for="password" class="layui-form-label">
<span class="x-red">*</span>原密码:
</label>
<div class="layui-input-inline">
<input type="password" id="oldPassword" name="oldPassword" required="required"
autocomplete="off" class="layui-input">
</div>
<label for="password" class="layui-form-label">
<span class="x-red">*</span>现密码:
</label>
<div class="layui-input-inline">
<input type="password" id="password" name="password" required="required|password" lay-verify="password"
autocomplete="off" class="layui-input">
</div>
</div>
<div style="text-align: center;">
<input type="button" lay-filter="submit" class="layui-btn" id ="submit" lay-submit="" value="确定"/>
<input type="button" class="layui-btn" id ="gb" value="关闭"/>
</div>
</form>
</div>
</div>
<script>layui.use(['form', 'layer'],
function() {
$ = layui.jquery;
var form = layui.form,
layer = layui.layer;
//自定义验证规则
form.verify({
username: function(value){
if(value.length < 3){
return '用户名至少得3个字符啊';
return false;
}
}
,password: [
/^[\S]{5,12}$/
,'密码必须5到12位且不能出现空格'
]
,content: function(value){
layedit.sync(editIndex);
}
});
//监听提交
form.on("submit(submit)", function (data) {
const old = $('#old').val();
const oldPassword = $('#oldPassword').val();
if(old !== oldPassword){
layer.alert('输入的原密码不正确!');
return false
}
const url = ctx+"/user/edit.do";
$.ajax({
"url":url,
"data":data.field,
"type":"post",
"dataType":"json",
"success":function(res){
//后台操作成功
if(res.code ==0){
layer.alert("修改密码成功!", {
icon: 6,
},
function() {
//关闭当前frame
xadmin.close();
// 可以对父窗口进行刷新
xadmin.father_reload();
});
}else{
layer.alert(res.msg+",请联系系统管理人员!", {icon: 5});
}
}
});
return false;
});
//监听关闭
$("#gb").on('click',function(){
xadmin.father_reload();
})
});
</script>
</body>
</html>

@ -0,0 +1,59 @@
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- 声明 Spring Web 请求上下文监听器 -->
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
<!-- 声明 Spring MVC 前端控制器 -->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-*.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<filter>
<filter-name>HtmlAccessFilter</filter-name>
<filter-class>org.example.filter.HtmlAccessFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HtmlAccessFilter</filter-name>
<url-pattern>*.html</url-pattern>
</filter-mapping>
<!-- 将所有以.do结尾的请求交给DispatcherServlet来处理 -->
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<!-- 声明字符集编码过滤器 -->
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 时间单位为分钟 -->
<session-config>
<session-timeout>300</session-timeout>
</session-config>
</web-app>

@ -0,0 +1,38 @@
.middle {margin-top: 20px;overflow:hidden;}
.middle .fl {width: 200px;background: #ebebeb;padding-top: 17px;margin-bottom: -9999px;padding-bottom: 10049px;}
.middle .fl h1 {padding-bottom: 10px;border-bottom: 1px dashed #9e9e9e;font-size: 16px;margin-bottom: 10px;}
.middle .fl ul li dl dt {font-size: 15px;color: #ff5500;height: 37px;line-height: 37px;padding-left: 24px;}
.middle .fl ul li dl dd {height: 36px;line-height: 36px;padding-left: 24px;}
.middle .fl ul li dl dd a {font-size: 15px;text-decoration: none;color: #555555;}
.middle .fl ul li dl dd:hover {background: #f7f7f7;background-image: url(../img/hong.jpg);background-repeat: no-repeat;}
.middle .fl ul li dl .current {background: #f7f7f7;background-image: url(../img/hong.jpg);background-repeat: no-repeat;}
.middle .fr {width: 840px;}
.middle .fr .m_f_t {height: 60px;border-bottom: 1px solid #dddddd;line-height: 60px;font-size: 16px;}
.middle .fr .m_f_t .place {color: #888888;font-size: 16px;}
.middle .fr .con {margin-top: 20px;}
.middle .fr .con p {font-size: 14px;color:#555555;line-height: 30px;}
.hot {margin-top: 90px;margin-bottom: 40px;}
.hot .title {font-size: 16px;font-weight: bold;padding-bottom: 10px;border-bottom: 2px solid #000000}
.hot .content {padding-top: 14px;}
.hot .content ul li {padding: 0 20px 10px 20px;width: 175px;border-right: 1px dashed #aaaaaa;float: left;}
.hot .content ul li:last-child {border-right: 0;}
.hot .content ul li .pic {width: 166px;height: 128px;overflow: hidden;}
.hot .content ul li .pic img {width: 166px;}
.hot .content ul li .price {font-size: 15px;color: #ff5500;font-weight: bold;margin: 10px 0;}
.hot .content ul li .goumai {width: 110px;height: 35px;border: 1px solid #ff5500;display: block;line-height: 35px;text-align: center;font-size: 16px;color: #ff5500;border-radius: 20px;margin-left: 30px;}

File diff suppressed because it is too large Load Diff

@ -0,0 +1,91 @@
/*轮播图*/
.index_banner{float:left;position:relative;width:100%;height:452px;overflow:hidden;margin-top: -7px;}
.index_banner ul li{position:absolute;float:left;width:100%;min-width:1000px;height:485px;text-align:center;overflow:hidden;}
.index_banner ul li a{display:block;height:100%;}
.index_banner .btnBg{position:absolute;width:100%;height:17px;left:0;bottom:10px;}
.index_banner .btn{margin:0 auto;width:1000px;height:17px;text-align:center;}
#focus ul{position:absolute;float:left;width:100%;}
#focus .btn span{display:inline-block;width:10px;height:10px;font-size:0;margin-left:5px;cursor:pointer;background: #ffffff;border-radius: 10px;}
#focus .btn span.on{background: #ff9900}
#focus .preNext{width:45px;height:100px;margin-top:-50px;cursor:pointer;position:absolute;top:50%;}
#focus .pre{left:20%;background:url(../img/prev.png) no-repeat 0 0;}
#focus .next{right:20%;background:url(../img/next.png) no-repeat 0 0;}
/*中间部分*/
.middle {padding: 20px 0;}
.middle .fl ul li {float: left;width: 115px;text-align: center;margin-right: 30px;}
.middle .fl ul li p {font-size: 16px;margin-top: 10px;}
.middle .fr {width: 440px;height: 75px;background: #f9e7d5;padding: 20px 0 20px 20px;}
.middle .fr p {height: 40px;font-size: 16px;padding-left: 40px;line-height: 40px;}
.middle .fr .one {background: url(../img/tubiao.png) no-repeat;background-position: 0 50%;}
.middle .fr .one a {position: relative;width: 21px;height: 26px;margin-right: 20px;}
.middle .fr .one a img {margin-top:5px;position: absolute;}
.middle .fr .one span {color: #9e9892;font-size: 16px;}
.middle .fr .two {background: url(../img/tubiao1.png) no-repeat;background-position: 0 50%;}
.middle .fr .two i {font-family: "04b_08";font-size: 22px;}
/*商品介绍一大块*/
.product {width: 100%;background: #f5f5f5;padding-bottom: 65px;}
.product .up .crazy {width: 195px;height: 50px;background: #ff9a02;padding-left: 70px;line-height: 50px;font-size: 18px;color: #ffffff;background-img: url(../img/naozhong.png);background-repeat: no-repeat;background-position: 12% 50%;}
.product .down {margin-top: 20px;}
.product .down .fl {border-radius:0;border:1px solid #fff;-webkit-box-shadow:0 0 10px rgba(63, 63, 63, .5);-moz-box-shadow:0 0 10px rgba(63, 63, 63, .5);box-shadow:0 0 10px rgba(63, 63, 63, .5);background: #ffffff}
.product .down .fl ul li {float: left;padding: 20px 10px 10px 10px;width: 345.5px;line-height: 20px;border-right: 2px solid #d9d9d9}
.product .down .fl ul li .pic {text-align: center;height: 195px;width: 222px;overflow: hidden;margin: 0 auto;}
.product .down .fl ul li .pic img {width: 222px;}
.product .down .fl ul li:last-child {border-right:none;}
.product .down .fl ul li p {margin-top: 20px;height: 40px;overflow: hidden}
.product .down .fl ul li p a {color: #555555}
.product .down .fl ul li div {height: 20px;line-height: 20px;}
.product .down .fl ul li div .one {color: #ff5e21;font-size: 16px;font-weight: bold;float: left;}
.product .down .fl ul li div .two {font-size: 12px;float: right;text-decoration: line-through;color: #888888}
.product .down .fr {width: 315px;padding: 10px; border-radius:0;border:1px solid #fff;-webkit-box-shadow:0 0 10px rgba(63, 63, 63, .5);-moz-box-shadow:0 0 10px rgba(63, 63, 63, .5);box-shadow:0 0 10px rgba(63, 63, 63, .5);background: #ffffff}
.product .down .fr .f_one {border-bottom: 1px solid #dddddd;padding-bottom: 7px;}
.product .down .fr .f_one span {font-size: 18px;font-weight: bold}
.product .down .fr .f_one a {float: right;margin-top: 10px;color: #999999}
.product .down .fr .f_two {margin-top: 12px;}
.product .down .fr .f_two ul li {height: 30px;overflow: hidden;line-height: 30px;}
.product .down .fr .f_two ul li a {font-size: 13px;}
.product .down .fr .f_two ul li a span{font-size: 13px;}
/*商品介绍-----正式*/
.floor {height: 480px;margin-top: 50px;position: relative}
.floor .left {width: 240px;float: left;}
.floor .left .start {padding-top: 150px;height: 50px;line-height: 30px;color: #ffffff;font-size: 24px;text-align: center;}
.floor .left .second {padding-left: 28px;height: 270px;overflow: hidden;padding-top: 10px;}
.floor .left .second ul li {float: left;width: 100px;height: 40px;line-height: 40px;overflow: hidden;}
.floor .left .second ul li a {font-size: 16px;color: #ffffff}
.floor .zhongbu {width: 579px;float: left;background: #ffffff;position: relative;border-right: 1px solid #eeeeee}
.floor .zhongbu ul li {float: left;width: 289.5px;height: 215px;padding: 15px 0 10px 0;text-align: center;}
.floor .zhongbu ul li h1 {font-size: 18px;}
.floor .zhongbu ul li p {font-size: 14px;color: #999999}
.floor .zhongbu ul li .pic {height: 165px;width: 180px;height: 144px;margin: 20px 0 0 60px;text-align: center;}
.floor .zhongbu ul li .pic img {width: 180px;}
.floor .zhongbu .heng {width: 100%;height: 1px;background: #eeeeee;position: absolute;top: 240px;left: 0;}
.floor .zhongbu .shu {height: 100%;width: 1px;background: #eeeeee;position: absolute;top: 0;left: 290px;}
.floor .right {width: 220px;float: left;background: #ffffff;padding: 12px 20px 0 20px;}
.floor .right h1 {font-size: 18px;text-align: center;}
.floor .right ul li {padding: 17.5px 10px;border-bottom: 1px solid #eeeeee;}
.floor .right ul li dl dt {float: left;width: 75px;height: 75px;}
.floor .right ul li dl dt img {width: 75px;height: 75px;}
.floor .right ul li dl dd {float: left;width: 125px;}
.floor .right ul li dl .xiangxi {height: 40px;line-height: 20px;margin-top: 10px;}
.floor .right ul li dl .xiangxi a {color: #555555}
.floor .right ul li dl .fl {color: #ff9a02}
.floor .right ul li dl .fr {text-decoration: line-through;color:#888888}
.floor .floor_one {width: 54px;height: 81px;background: url(../img/floor1.png) no-repeat;position: absolute;top: -25px;left:20px;}
.floor .floor_two {width: 54px;height: 81px;background: url(../img/floor2.png) no-repeat;position: absolute;top: -25px;left:20px;}
.floor .floor_three {width: 54px;height: 81px;background: url(../img/floor3.png) no-repeat;position: absolute;top: -25px;left:20px;}
.floor .floor_four {width: 54px;height: 81px;background: url(../img/floor4.png) no-repeat;position: absolute;top: -25px;left:20px;}
.floor .floor_five {width: 54px;height: 81px;background: url(../img/floor5.png) no-repeat;position: absolute;top: -25px;left:20px;}

@ -0,0 +1,43 @@
.content {background: #f5f5f5;padding-top: 20px;padding-bottom: 20px;}
.content .fenlei {background: #ffffff;border: 1px solid #eeeeee;}
.content .fenlei .left {width: 50px;height: 44px;line-height: 44px;font-size: 14px;padding-left: 20px;float: left;color: #888888}
.content .fenlei .right {float: left;width: 1000px;}
.content .fenlei .right ul li {height: 44px;line-height: 44px;margin: 0 10px;float: left;}
.content .fenlei .right ul li a {font-size: 14px;color: #888888}
.place {height: 44px;border: 1px solid #eeeeee;background: #ffffff;padding-left: 20px;width: 1060px;margin:20px auto 0 auto;font-size: 14px;line-height: 44px;color: #656762;position: relative}
.place .check {font-size: 13px;font-weight: bold;color: #6a6667;margin: 0 20px;}
.place .number {color: #fd5401;font-size: 13px;font-weight: bold;margin: 0 5px;}
.place .biaoqian {border: 1px solid #dddddd;cursor: pointer;text-decoration: none;width: 57px;height: 25px;line-height: 25px;text-align: center;}
.place .biaoqian:hover {background: #ff5500;color: #ffffff;border: 1px solid #ff5500}
.place .pa1 {position: absolute;right: 170px;top: 10px;}
.place .pa2 {position: absolute;right: 100px;top: 10px;}
.place .pa3 {position: absolute;right: 30px;top: 10px;}
.product {margin:20px auto 0 auto;width: 1100px;}
.product ul li {float: left;width: 233px;height: 308px;background: #ffffff;margin: 0 10px;padding: 20px 10px 0 10px;border: 1px solid #eeeeee;margin-bottom: 20px;}
.product ul li .pic {margin-bottom: 20px;width: 230px;height: 220px;text-align: center;}
.product ul li img {width: 230px;}
.product ul li .one {height: 18px;overflow: hidden;margin-bottom: 10px;}
.product ul li .one a {color: #666666;}
.product ul li .real {color: #fe5500;font-size: 20px;margin-right: 20px;}
.product ul li .wrong {text-decoration: line-through;color: #888888;}
.page {text-align: center;height: 40px;line-height: 40px;}
.page a {padding: 5px 10px;border: 1px solid #dddddd;background: #ffffff;text-decoration: none;margin-right: 5px;}
.page a:hover {color: #ffffff;background: #fe5500;border: 1px solid #fe5500;}

@ -0,0 +1,78 @@
* {margin: 0;padding: 0;outline: 0;font-size: 12px;font-family:"微软雅黑";}
a {text-decoration: none;color: #000000;}
a:hover {text-decoration: underline}
ul {list-style-type: none;}
img {border: none;}
.fl {float: left;}
.fr {float: right;}
.clear {clear: both}
.wt1080 {width: 1080px;margin: 0 auto;}
/*顶部*/
.top {width: 100%;background: url(../image/bg1.jpg) repeat-x;height: 36px;line-height: 36px;}
.top ul li {float: left;height: 36px;background: url(../image/daohang.png) no-repeat;background-position: 100% 50%;padding-left: 10px;padding-right: 20px;}
.top ul li span {display: block;height: 36px;}
.top ul li .personal {border-radius:0;border:1px solid #fff;-webkit-box-shadow:0 0 10px rgba(63, 63, 63, .5);-moz-box-shadow:0 0 10px rgba(63, 63, 63, .5);box-shadow:0 0 10px rgba(63, 63, 63, .5);background: #ffffff;display: none;position: absolute;width: 70px;text-align: center;}
.top ul li .personal dl dd {height: 30px;line-height: 30px;}
.top ul li .shop {background: url(../image/shop.png) no-repeat;padding-left: 25px;background-position: 0 50%;}
.top ul li .shop a {color: #ff9900;font-weight: bold}
.top ul li .phone {padding-left: 25px;background: url(../image/phone.png) no-repeat;background-position: 0 50%;}
.top ul li .phone2 {background: url(../image/phone2.png) no-repeat;height: 36px;background-position: 0 50%;padding-left: 20px;font-size: 18px;font-weight: bold}
/*搜索logo*/
.header {padding: 25px 0;}
.header .search {margin-left: 130px;margin-top: 10px;}
.header .search .a_search {width: 300px;height: 31px; border: 2px solid #ff9900;font-size: 15px;padding-left: 10px;line-height: 31px;}
.header .search .b_search {width: 45px;height: 35px;background: url(../image/sousuo.png) no-repeat;display: block;cursor: pointer}
.header .search p {margin-top: 7px;}
.header .search p .current {color: red;}
.header .my_shop {width: 82px;height: 38px;background: #ff9900;margin-top: 10px;border-radius: 5px;line-height: 38px;color: #ffffff;font-size: 14px; background-image:url(../image/shop1.png);background-position: 15% 50%;background-repeat: no-repeat;padding-left: 45px;position: relative}
.header .my_shop span {background: red;color: #ffffff;position: absolute;font-size: 16px;border-radius: 25px;width: 25px;height: 25px;line-height: 25px;text-align: center;top: -12.5px;right: 20px;}
/*导航*/
.nav {border-bottom: 4px solid #ff9900;width: 100%;height: 40px;}
.nav ul li {float: left;height: 50px;line-height: 40px;padding: 0 45px;position: relative;}
.nav ul li .current {color: #ff9900;}
.nav ul li a span {font-size: 16px;}
.nav ul li a:hover {color: #ff9900;text-decoration: none;}
.nav ul li .details {width: 600px;padding: 0 10px;position: absolute;margin-left: -50px;background: #fff; box-shadow: 0 3px 10px rgba(0,0,0,.3);border: 1px solid #ccc;border-width: 0 1px 1px 1px;margin-top: 2px;z-index: 10000;display: none;}
.nav ul li .details .item{display: inline-block;padding: 0;margin: 0 25px 10px 0;vertical-align: top;width: 270px;height: auto;line-height: normal;overflow: hidden;}
.nav ul li .details .item p {height: 34px;line-height: 34px;font-weight: bold;border-bottom: 1px solid #EAEAEA;padding-left: 8px;}
.nav ul li .details .item p a {font-size: 15px;}
.nav ul li .details .item .ctgnamebox {}
.nav ul li .details .item .ctgnamebox a {display: inline-block;height: 14px;line-height: 14px;padding: 0 8px 0 10px;margin-top: 12px;border-right: 1px solid #CCC;font-size: 13px;color: #666;}
.nav ul li .details .item .ctgnamebox .current {color: red}
.nav ul li .details .item .ctgnamebox a:hover {text-decoration: underline}
/*保障底部*/
.baozhang {width: 100%;background: #ff9900;text-align:center;}
.baozhang ul {padding-left: 0;}
.baozhang ul li {text-align: center;width: 130px;padding: 15px 0;margin-right: 40px;display: inline-block;}
.baozhang ul li p {font-size: 16px;color: #ffffff;margin-top: 20px;}
/*底部*/
.footer {width: 100%;background: #ffffff;}
.footer .a_footer {padding: 25px 10px 15px 0;height: 138px;}
.footer .a_footer .left {width: 355px;float: left;}
.footer .a_footer .left .lianxi {margin-top: 25px;position: relative}
.footer .a_footer .left .lianxi img {margin-right: 10px;}
.footer .a_footer .left .lianxi span {position: absolute;top: 0;font-weight: bold;font-size: 18px;margin-left: 10px;}
.footer .a_footer .right {float: left;}
.footer .a_footer .right ul li {border-left: 1px solid #eaeaea;padding-left: 12px;float: left;margin-right: 30px;}
.footer .a_footer .right ul li dl dt {margin-bottom: 10px;}
.footer .a_footer .right ul li dl dt a{font-size: 18px;}
.footer .a_footer .right ul li dl dd {margin-bottom: 10px;}
.footer .a_footer .right ul li dl dd a {color: #555555}
.footer .weixin {position:absolute;right: 0;top: 25px;}
.footer .beian {text-align: center;height: 40px;line-height: 40px;border-top: 1px solid #eaeaea}

@ -0,0 +1,534 @@
@charset "utf-8";
@import url(../layui-v2.6.6/layui/css/layui.css);
*{
margin: 0px;
padding: 0px;
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
}
a{
text-decoration: none;
}
html{
width: 100%;
height: 100%;
overflow-x:hidden;
overflow-y:auto;
}
body{
width: 100%;
min-height: 100%;
background: #f1f1f1;
/*background: #fff;*/
}
.x-red{
color: red;
}
.layui-form-switch{
margin-top: 0px;
}
.layui-input:focus, .layui-textarea:focus {
border-color: #189f92!important;
}
.layui-fluid{
padding:15px;
}
.x-nav{
padding: 0 20px;
position: relative;
z-index: 99;
border-bottom: 1px solid #e5e5e5;
line-height: 39px;
height: 39px;
overflow: hidden;
background: #fff;
}
.page{
text-align: center;
}
.page a{
display: inline-block;
background: #fff;
color: #888;
padding: 5px;
min-width: 15px;
border: 1px solid #E2E2E2;
}
.page span{
display: inline-block;
padding: 5px;
min-width: 15px;
border: 1px solid #E2E2E2;
}
.page span.current{
display: inline-block;
background: #009688;
color: #fff;
padding: 5px;
min-width: 15px;
border: 1px solid #009688;
}
.page .pagination li{
display: inline-block;
margin-right: 5px;
text-align: center;
}
.page .pagination li.active span{
background: #009688;
color: #fff;
border: 1px solid #009688;
}
/*登录样式*/
/*头部*/
.container{
width: 100%;
height: 45px;
background-color: #222;
}
.container a,.layui-nav .layui-nav-item a{
color: #fff;
}
.container .logo a{
background-color: rgba(0,0,0,0);
}
.container .logo a{
float: left;
font-size: 18px;
padding-left: 20px;
line-height: 45px;
width: 200px;
}
.container .right{
background-color:rgba(0,0,0,0);
float: right;
}
.container .left_open{
height: 45px;
float: left;
margin-left: 10px;
}
.container .left_open i{
display: block;
background: rgba(255,255,255,0.1);
width: 32px;
height: 32px;
line-height: 32px;
border-radius: 3px;
text-align: center;
margin-top: 7px;
cursor: pointer;
}
.container .left_open i:hover{
background: rgba(255,255,255,0.3);
}
.container .left{
background-color:rgba(0,0,0,0);
float: left;
}
.container .layui-nav-item{
line-height: 45px;
}
.container .layui-nav-more{
top: 20px;
}
.container .layui-nav-child{
top: 50px;
}
.container .layui-nav-child i{
margin-right: 10px;
}
.layui-nav .layui-nav-item a{
cursor: pointer;
}
.layui-nav .layui-nav-child a{
color: #333;
cursor: pointer;
}
.left-nav{
position: absolute;
top: 45px;
bottom: 0px;
/*bottom: 42px;*/
left: 0;
z-index: 2;
padding-top: 10px;
background-color: #EEEEEE;
width: 220px;
max-width: 220px;
overflow: auto;
overflow-x:hidden;
overflow: hidden;
/*width: 0px;*/
}
#side-nav{
width: 220px;
}
.left-nav #nav li:hover > a{
/*color: blue;*/
}
.left-nav #nav .current{
background-color: rgba(0, 0, 0, 0.3);
}
.left-nav #nav li a{
font-size: 14px;
padding: 10px 15px 10px 15px;
display: block;
cursor: pointer;
border-left: 4px solid transparent;
transition: all 0.3s;
}
.left-nav a:hover{
background: #009688 !important;
color: #fff;
border-color: #04564e !important;
}
.left-nav a.active{
background: #009688 !important;
color: #fff;
border-color: #04564e !important;
}
.left-nav #nav li a cite{
font-size: 14px;
}
.left-nav #nav li .sub-menu{
display: none;
}
.left-nav #nav li .opened{
display: block;
}
.left-nav #nav li .opened:hover{
/*background: #fff ;*/
}
.left-nav #nav li .opened .current{
}
.left-nav #nav li .sub-menu li:hover{
/*color: blue;*/
/*background: #fff ;*/
}
.left-nav #nav li .sub-menu li a{
padding: 12px 15px 12px 30px;
font-size: 14px;
cursor: pointer;
}
.left-nav #nav li .sub-menu li .sub-menu li a{
padding-left: 45px;
}
/*.left-nav #nav li .sub-menu li a:hover{
color: #148cf1;
}*/
.left-nav #nav li .sub-menu li a i{
font-size: 12px;
}
.left-nav #nav li a i{
padding-right: 10px;
line-height: 14px;
}
.left-nav #nav li .nav_right{
float: right;
font-size: 16px;
}
.x-slide_left {
width: 17px;
height: 61px;
background: url(../images/icon.png) 0 0 no-repeat;
position: absolute;
top: 200px;
left: 220px;
cursor: pointer;
z-index: 3;
}
.page-content{
position: absolute;
top: 45px;
right: 0;
/*bottom: 42px;*/
bottom: 0px;
left: 220px;
overflow: hidden;
z-index: 1;
}
.page-content-bg{
position: absolute;
top: 45px;
right: 0;
/*bottom: 42px;*/
bottom: 0px;
left: 220px;
background: rgba(0,0,0,0.5);
overflow: hidden;
z-index: 100;
display: none;
}
.page-content .tab{
height: 100%;
width: 100%;
/*background: #EFEEF0;*/
margin: 0px;
}
.page-content .layui-tab-title{
/*padding-top: 5px;*/
height: 35px;
background: #EFEEF0 ;
position: relative;
z-index: 100;
}
.page-content .layui-tab-title li.home i{
padding-right: 5px;
}
.page-content .layui-tab-title li.home .layui-tab-close{
display: none;
}
.page-content .layui-tab-title li{
line-height: 35px;
}
.page-content .layui-tab-title .layui-this:after{
height: 36px;
}
.page-content .layui-tab-title li .layui-tab-close{
border-radius: 50%;
}
.page-content .layui-tab-title .layui-this{
background: #fff ;
}
.page-content .layui-tab-bar{
height:34px;
line-height: 35px;
}
.page-content .layui-tab-content{
position: absolute;
top: 36px;
bottom: 0px;
width: 100%;
padding: 0px;
overflow: hidden;
}
.page-content .layui-tab-content .layui-tab-item{
width: 100%;
height: 100%;
}
.page-content .layui-tab-content .layui-tab-item iframe{
width: 100%;
height: 100%;
}
.x-admin-carousel,.layui-carousel,.x-admin-carousel>[carousel-item]>* {
background-color:#fff
}
.x-admin-backlog .x-admin-backlog-body {
display:block;
padding:10px 15px;
background-color:#f8f8f8;
color:#999;
border-radius:2px;
transition:all .3s;
-webkit-transition:all .3s
}
.x-admin-backlog-body h3 {
padding-bottom:10px;
font-size:12px
}
.x-admin-backlog-body p cite {
font-style:normal;
font-size:30px;
font-weight:300;
color:#009688
}
.x-admin-backlog-body:hover {
background-color:#CFCFCF;
color:#888
}
.layui-table td, .layui-table th{
min-width: 80px;
}
table th, table td {
word-break: break-all;
}
/*404页面样式*/
.fly-panel {
margin-bottom: 15px;
border-radius: 2px;
/*background-color: #fff;*/
box-shadow: 0 1px 2px 0 rgba(0,0,0,.05);
}
.fly-none {
min-height: 600px;
text-align: center;
padding-top: 50px;
color: #999;
}
.fly-none .layui-icon {
line-height: 300px;
font-size: 300px;
color: #393D49;
}
.fly-none p {
margin-top: 50px;
padding: 0 15px;
font-size: 20px;
color: #999;
font-weight: 300;
}
#tab_right{
display: none;
width: 80px;
position: absolute;
top: 35px;
left: 0px;
}
#tab_right dl{
top: 0px;
}
#tab_show{
position: absolute;
top: 36px;
bottom: 0px;
width: 100%;
background:rgb(255, 255, 255,0);
padding: 0px;
overflow: hidden;
display: none;
}
@media screen and (max-width: 768px){
.fast-add{
display: none;
}
.layui-nav .to-index{
display: none;
}
.container .logo a{
width: 140px;
}
.container .left_open {
/*float: right;*/
}
.left-nav{
width: 60px;
}
.left-nav #nav li a i{
font-size: 18px;
}
.left-nav cite,.left-nav .nav_right{
display: none;
}
.page-content{
left: 60px;
}
.page-content .layui-tab-content .layui-tab-item{
-webkit-overflow-scrolling: touch;
overflow-y: scroll;
}
.x-so input.layui-input{
width: 100%;
margin: 10px;
}
}
/*精细版样式*/
.x-admin-sm{
font-size: 12px;
}
.x-admin-sm body{
font-size: 12px;
}
/*登录页面样式*/
.x-admin-sm .login input[type=submit],.x-admin-sm .login input[type=button]{
font-size: 14px;
}
.x-admin-sm .login input[type=text],
.x-admin-sm .login input[type=file],
.x-admin-sm .login input[type=password],
.x-admin-sm .login input[type=email], .x-admin-sm select {
font-size: 12px;
}
.x-admin-sm .login .message{
font-size: 14px;
}
.x-admin-sm .layui-table td, .x-admin-sm .layui-table th{
font-size: 12px;
}
.x-admin-sm .layui-elem-field legend{
font-size: 18px;
}
.x-admin-sm .x-admin-backlog-body p cite{
font-size: 24px;
}
.x-admin-sm .left-nav #nav li a cite{
font-size: 12px;
}
.x-admin-sm .iconfont{
font-size: 14px;
}
.x-admin-sm .layui-tab-title li{
font-size: 12px;
}
.x-admin-sm .layui-icon{
font-size: 14px;
}
.x-admin-sm .layui-nav *{
font-size: 12px;
}
.x-admin-sm .layui-breadcrumb>*{
font-size: 12px;
}
.x-admin-sm .layui-btn,.x-admin-sm .layui-btn-xs,.x-admin-sm .layui-btn-sm{
font-size: 12px;
}
.x-admin-sm .layui-laydate{
font-size: 12px;
}
.x-admin-sm .layui-btn{
height: 30px;
line-height: 30px;
padding: 0 10px;
}
.x-admin-sm .layui-btn-lg{
height: 38px;
line-height: 38px;
padding: 0 18px;
font-size: 14px;
}
.x-admin-sm .layui-layer-title,.x-admin-sm .layui-layer-dialog .layui-layer-content{
font-size: 12px;
}
.x-admin-sm .layui-input,.x-admin-sm .layui-select,.x-admin-sm .layui-textarea{
height: 30px;
}
.x-admin-sm .layui-form-pane .layui-form-label{
height: 30px;
line-height: 14px;
}
.x-admin-sm .layui-form-checkbox span{
font-size: 12px;
}
.x-admin-sm .fly-none .layui-icon {
line-height: 300px;
font-size: 300px;
color: #393D49;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 213 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 186 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

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

Loading…
Cancel
Save