Compare commits

...

No commits in common. 'main' and 'chx' have entirely different histories.

8
.idea/.gitignore vendored

@ -0,0 +1,8 @@
# 默认忽略的文件
/shelf/
/workspace.xml
# 基于编辑器的 HTTP 客户端请求
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

@ -0,0 +1,11 @@
<component name="ArtifactManager">
<artifact name="ExamSphere:jar">
<output-path>$PROJECT_DIR$/out/artifacts/ExamSphere_jar</output-path>
<root id="root">
<element id="archive" name="ExamSphere.jar">
<element id="module-output" name="main" />
</element>
<element id="library" level="project" name="ExamSphere_jar2" />
</root>
</artifact>
</component>

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<annotationProcessing>
<profile default="true" name="Default" enabled="true" />
</annotationProcessing>
</component>
</project>

@ -0,0 +1,9 @@
<component name="libraryTable">
<library name="ExamSphere_jar">
<CLASSES>
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar.zip!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

@ -0,0 +1,84 @@
<component name="libraryTable">
<library name="ExamSphere_jar2">
<CLASSES>
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/spring-plugin-metadata-1.2.0.RELEASE.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/ExamSphere.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/springfox-swagger-ui-2.9.2.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/springfox-schema-2.9.2.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/spring-context-5.3.23.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/jackson-databind-2.13.4.2.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/spring-aop-5.3.23.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/spring-tx-5.3.23.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/jackson-core-2.13.4.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/logback-core-1.2.11.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/mapstruct-1.2.0.Final.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/classmate-1.5.1.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/springfox-swagger2-2.9.2.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/swagger-annotations-1.5.20.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/jackson-annotations-2.13.4.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/mybatis-plus-annotation-3.5.4.1.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/tomcat-embed-el-9.0.68.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/spring-expression-5.3.23.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/mybatis-3.5.13.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/hutool-all-5.7.20.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/jackson-datatype-jdk8-2.13.4.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/spring-jcl-5.3.23.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/slf4j-api-1.7.36.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/springfox-swagger-common-2.9.2.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/spring-boot-devtools-2.6.13.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/log4j-to-slf4j-2.17.2.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/springfox-spring-web-2.9.2.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/tomcat-embed-websocket-9.0.68.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/spring-core-5.3.23.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/swagger-bootstrap-ui-1.9.6.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/byte-buddy-1.11.22.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/commons-codec-1.15.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/spring-boot-starter-jdbc-2.6.13.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/javassist-3.25.0-GA.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/spring-boot-2.6.13.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/spring-boot-starter-tomcat-2.6.13.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/spring-webmvc-5.3.23.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/logback-classic-1.2.11.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/spring-jdbc-5.3.23.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/jbcrypt-0.4.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/mybatis-plus-spring-boot-autoconfigure-3.5.4.1.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/jsqlparser-4.6.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/mybatis-plus-3.5.4.1.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/jul-to-slf4j-1.7.36.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/mybatis-plus-boot-starter-3.5.4.1.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/easy-captcha-1.6.2.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/velocity-1.7.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/commons-collections-3.2.1.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/mybatis-spring-2.1.1.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/spring-boot-starter-logging-2.6.13.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/mybatis-plus-generator-3.5.1.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/lombok-1.18.24.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/springfox-core-2.9.2.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/spring-boot-autoconfigure-2.6.13.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/java-jwt-3.10.3.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/jakarta.annotation-api-1.3.5.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/spring-beans-5.3.23.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/mybatis-plus-core-3.5.4.1.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/jackson-datatype-jsr310-2.13.4.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/swagger-models-1.5.20.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/mybatis-plus-extension-3.5.4.1.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/spring-web-5.3.23.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/spring-boot-starter-json-2.6.13.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/HikariCP-4.0.3.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/guava-20.0.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/spring-boot-starter-2.6.13.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/tomcat-embed-core-9.0.68.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/log4j-api-2.17.2.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/jackson-module-parameter-names-2.13.4.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/mysql-connector-j-8.0.31.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/freemarker-2.3.30.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/spring-boot-starter-web-2.6.13.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/snakeyaml-1.29.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/spring-plugin-core-1.2.0.RELEASE.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/springfox-spi-2.9.2.jar!/" />
<root url="jar://$PROJECT_DIR$/ExamSphere/out/artifacts/ExamSphere_jar/commons-lang-2.4.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="1.8 (2)" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>

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

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

@ -56,9 +56,9 @@
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>swagger-bootstrap-ui</artifactId>
<version>1.9.6</version>
<groupId>com.github.xiaoymin</groupId>
<artifactId>swagger-bootstrap-ui</artifactId>
<version>1.9.6</version>
</dependency>
<dependency>
@ -76,11 +76,6 @@
<artifactId>freemarker</artifactId>
<version>2.3.30</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>io.jsonwebtoken</groupId>-->
<!-- <artifactId>jjwt</artifactId>-->
<!-- <version>0.9.1</version>-->
<!-- </dependency>-->
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
@ -104,11 +99,6 @@
<version>0.4</version>
</dependency>
<dependency>
<groupId>com.exam</groupId>
<artifactId>ExamSphere</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
@ -150,7 +140,7 @@
<version>${spring-boot.version}</version>
<configuration>
<mainClass>com.exam.examsphere.ExamSphereApplication</mainClass>
<skip>true</skip>
<!-- <skip>true</skip> -->
</configuration>
<executions>
<execution>
@ -163,5 +153,4 @@
</plugin>
</plugins>
</build>
</project>

@ -0,0 +1,33 @@
Manifest-Version: 1.0
Main-Class: com.exam.examsphere.ExamSphereApplication
Class-Path: spring-plugin-metadata-1.2.0.RELEASE.jar ExamSphere.jar spri
ngfox-swagger-ui-2.9.2.jar springfox-schema-2.9.2.jar spring-context-5.
3.23.jar jackson-databind-2.13.4.2.jar spring-aop-5.3.23.jar spring-tx-
5.3.23.jar jackson-core-2.13.4.jar logback-core-1.2.11.jar mapstruct-1.
2.0.Final.jar classmate-1.5.1.jar springfox-swagger2-2.9.2.jar swagger-
annotations-1.5.20.jar jackson-annotations-2.13.4.jar mybatis-plus-anno
tation-3.5.4.1.jar tomcat-embed-el-9.0.68.jar spring-expression-5.3.23.
jar mybatis-3.5.13.jar hutool-all-5.7.20.jar jackson-datatype-jdk8-2.13
.4.jar spring-jcl-5.3.23.jar slf4j-api-1.7.36.jar springfox-swagger-com
mon-2.9.2.jar spring-boot-devtools-2.6.13.jar log4j-to-slf4j-2.17.2.jar
springfox-spring-web-2.9.2.jar tomcat-embed-websocket-9.0.68.jar sprin
g-core-5.3.23.jar swagger-bootstrap-ui-1.9.6.jar byte-buddy-1.11.22.jar
commons-codec-1.15.jar spring-boot-starter-jdbc-2.6.13.jar javassist-3
.25.0-GA.jar spring-boot-2.6.13.jar spring-boot-starter-tomcat-2.6.13.j
ar spring-webmvc-5.3.23.jar logback-classic-1.2.11.jar spring-jdbc-5.3.
23.jar jbcrypt-0.4.jar mybatis-plus-spring-boot-autoconfigure-3.5.4.1.j
ar jsqlparser-4.6.jar mybatis-plus-3.5.4.1.jar jul-to-slf4j-1.7.36.jar
mybatis-plus-boot-starter-3.5.4.1.jar easy-captcha-1.6.2.jar velocity-1
.7.jar commons-collections-3.2.1.jar mybatis-spring-2.1.1.jar spring-bo
ot-starter-logging-2.6.13.jar mybatis-plus-generator-3.5.1.jar lombok-1
.18.24.jar springfox-core-2.9.2.jar spring-boot-autoconfigure-2.6.13.ja
r java-jwt-3.10.3.jar jakarta.annotation-api-1.3.5.jar spring-beans-5.3
.23.jar mybatis-plus-core-3.5.4.1.jar jackson-datatype-jsr310-2.13.4.ja
r swagger-models-1.5.20.jar mybatis-plus-extension-3.5.4.1.jar spring-w
eb-5.3.23.jar spring-boot-starter-json-2.6.13.jar HikariCP-4.0.3.jar gu
ava-20.0.jar spring-boot-starter-2.6.13.jar tomcat-embed-core-9.0.68.ja
r log4j-api-2.17.2.jar jackson-module-parameter-names-2.13.4.jar mysql-
connector-j-8.0.31.jar freemarker-2.3.30.jar spring-boot-starter-web-2.
6.13.jar snakeyaml-1.29.jar spring-plugin-core-1.2.0.RELEASE.jar spring
fox-spi-2.9.2.jar commons-lang-2.4.jar

@ -14,7 +14,7 @@ public class CorsConfig {
public CorsFilter corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration corsConfiguration = new CorsConfiguration();
corsConfiguration.addAllowedOrigin("http://localhost:5173/"); // 1 设置访问源地址
corsConfiguration.addAllowedOrigin("http://47.115.225.58:5173/"); // 1 设置访问源地址
corsConfiguration.addAllowedHeader("*"); // 2 设置访问源请求头
corsConfiguration.addAllowedMethod("*"); // 3 设置访问源请求方法
corsConfiguration.setMaxAge(MAX_AGE);

@ -1,22 +1,23 @@
package com.exam.examsphere.config;
import com.exam.examsphere.config.interceptor.JwtInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(jwtInterceptor())
.addPathPatterns("/**")//拦截所有请求通过判断token是否合法决定是否需要登录
.excludePathPatterns("/user/login","/user/register","/doc.html","/swagger-resources/**","/captcha","/file/upload","/file/download");
}
@Bean
public JwtInterceptor jwtInterceptor() {
return new JwtInterceptor();
}
}
// package com.exam.examsphere.config;
//
// import com.exam.examsphere.config.interceptor.JwtInterceptor;
// import org.springframework.context.annotation.Bean;
// import org.springframework.context.annotation.Configuration;
// import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
// import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
// @Configuration
//
//
// public class InterceptorConfig implements WebMvcConfigurer {
// @Override
// public void addInterceptors(InterceptorRegistry registry) {
// registry.addInterceptor(jwtInterceptor())
// .addPathPatterns("/**")//拦截所有请求通过判断token是否合法决定是否需要登录
// .excludePathPatterns("/user/login","/user/register","/doc.html","/swagger-resources/**","/captcha");
// }
//
// @Bean
// public JwtInterceptor jwtInterceptor() {
// return new JwtInterceptor();
// }
// }

@ -39,7 +39,7 @@ public class FileController {
file.transferTo(dest);
// 返回文件访问路径
String fileUrl = "http://localhost:8080/file/download?name=" + fileName;
String fileUrl = "http://47.115.225.58:8080/file/download?name=" + fileName;
return Result.success(fileUrl);
} catch (Exception e) {
e.printStackTrace();

@ -56,7 +56,7 @@ import org.springframework.web.bind.annotation.RestController;
Question byId = questionService.getById(id);
list.add(byId);
}
return Result.success(list);
return new Result<>().success(list);
}
@GetMapping("/getQuestionsByIds")

@ -11,9 +11,7 @@ public class ExamDTO {
private String img;
private LocalDateTime startTime;
private LocalDateTime endTime;
private String questionIds;
private Integer total;
private Long userId;
private String status;
private String teacherName;
}

@ -20,22 +20,29 @@ public class Exam implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty("主键ID")
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
@ApiModelProperty("考试标题")
private String title;
@ApiModelProperty("封面图")
private String img;
@ApiModelProperty("考试开始时间")
private LocalDateTime startTime;
@ApiModelProperty("考试结束时间")
private LocalDateTime endTime;
@ApiModelProperty("试题列表")
private String questionIds;
@ApiModelProperty("考试总分")
private Integer total;
@ApiModelProperty("用户ID")
private Integer userId;
private String status;
}

@ -18,12 +18,12 @@ import java.util.List;
public interface ExamMapper extends BaseMapper<Exam> {
void insertAnswer(Answer answer);
@Select("SELECT e.id, e.title, e.img, e.start_time, e.end_time, e.user_id, e.status,u.username AS teacherName " +
@Select("SELECT e.id, e.title, e.img, e.start_time, e.end_time, e.user_id, u.username AS teacherName " +
"FROM exam e " +
"LEFT JOIN user u ON e.user_id = u.id")
List<ExamDTO> findAllWithTeacherName();
@Select("SELECT e.id, e.title, e.img, e.start_time, e.end_time,e.question_ids,e.total,e.user_id, e.status,u.username AS teacherName " +
@Select("SELECT e.id, e.title, e.img, e.start_time, e.end_time,e.total,e.user_id, u.username AS teacherName " +
"FROM exam e " +
"LEFT JOIN user u ON e.user_id = u.id " +
"WHERE e.id = #{id}")

@ -10,9 +10,7 @@ import com.exam.examsphere.mapper.UserMapper;
import com.exam.examsphere.service.IUserService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.exam.examsphere.utils.TokenUtils;
import jdk.nashorn.internal.parser.Token;
import org.mindrot.jbcrypt.BCrypt;
import org.omg.CORBA.UserException;
import org.springframework.stereotype.Service;
/**

@ -18,7 +18,6 @@ import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.Date;
import static jdk.nashorn.internal.runtime.regexp.joni.Config.log;
@Component
public class TokenUtils {
@Autowired

@ -1,33 +1,33 @@
Manifest-Version: 1.0
Main-Class: com.exam.examsphere.ExamSphereApplication
Class-Path: tomcat-embed-core-9.0.68.jar byte-buddy-1.11.22.jar guava-20
.0.jar mybatis-spring-2.1.1.jar snakeyaml-1.29.jar spring-core-5.3.23.j
ar mybatis-plus-generator-3.5.1.jar freemarker-2.3.30.jar spring-plugin
-core-1.2.0.RELEASE.jar mybatis-plus-3.5.4.1.jar springfox-schema-2.9.2
.jar mapstruct-1.2.0.Final.jar commons-collections-3.2.1.jar HikariCP-4
.0.3.jar log4j-to-slf4j-2.17.2.jar tomcat-embed-el-9.0.68.jar springfox
-spi-2.9.2.jar mysql-connector-j-8.0.31.jar jackson-core-2.13.4.jar slf
4j-api-1.7.36.jar commons-lang-2.4.jar hutool-all-5.7.20.jar spring-web
mvc-5.3.23.jar jbcrypt-0.4.jar spring-boot-starter-jdbc-2.6.13.jar spri
ng-expression-5.3.23.jar springfox-spring-web-2.9.2.jar jackson-databin
d-2.13.4.2.jar easy-captcha-1.6.2.jar spring-boot-starter-tomcat-2.6.13
.jar mybatis-3.5.13.jar jsqlparser-4.6.jar spring-boot-starter-web-2.6.
13.jar swagger-annotations-1.5.20.jar springfox-swagger-ui-2.9.2.jar ve
locity-1.7.jar swagger-bootstrap-ui-1.9.6.jar jakarta.annotation-api-1.
3.5.jar spring-web-5.3.23.jar spring-boot-starter-logging-2.6.13.jar sp
ring-boot-2.6.13.jar mybatis-plus-boot-starter-3.5.4.1.jar spring-tx-5.
3.23.jar spring-aop-5.3.23.jar springfox-swagger2-2.9.2.jar jackson-dat
atype-jsr310-2.13.4.jar springfox-swagger-common-2.9.2.jar mybatis-plus
-extension-3.5.4.1.jar classmate-1.5.1.jar springfox-core-2.9.2.jar myb
atis-plus-core-3.5.4.1.jar tomcat-embed-websocket-9.0.68.jar spring-jcl
-5.3.23.jar java-jwt-3.10.3.jar swagger-models-1.5.20.jar jackson-annot
ations-2.13.4.jar spring-beans-5.3.23.jar spring-plugin-metadata-1.2.0.
RELEASE.jar commons-codec-1.15.jar mybatis-plus-annotation-3.5.4.1.jar
mybatis-plus-spring-boot-autoconfigure-3.5.4.1.jar javassist-3.25.0-GA.
jar jackson-datatype-jdk8-2.13.4.jar logback-classic-1.2.11.jar spring-
boot-autoconfigure-2.6.13.jar spring-context-5.3.23.jar jul-to-slf4j-1.
7.36.jar lombok-1.18.24.jar spring-jdbc-5.3.23.jar logback-core-1.2.11.
jar spring-boot-devtools-2.6.13.jar log4j-api-2.17.2.jar spring-boot-st
arter-2.6.13.jar spring-boot-starter-json-2.6.13.jar jackson-module-par
ameter-names-2.13.4.jar
Class-Path: mybatis-spring-2.1.1.jar swagger-bootstrap-ui-1.9.6.jar spri
ngfox-swagger-ui-2.9.2.jar HikariCP-4.0.3.jar commons-codec-1.15.jar to
mcat-embed-el-9.0.68.jar slf4j-api-1.7.36.jar easy-captcha-1.6.2.jar gu
ava-20.0.jar springfox-spi-2.9.2.jar spring-boot-starter-2.6.13.jar spr
ing-boot-devtools-2.6.13.jar jackson-datatype-jsr310-2.13.4.jar spring-
plugin-core-1.2.0.RELEASE.jar spring-core-5.3.23.jar lombok-1.18.24.jar
mybatis-plus-extension-3.5.4.1.jar mysql-connector-j-8.0.31.jar mybati
s-plus-spring-boot-autoconfigure-3.5.4.1.jar jackson-module-parameter-n
ames-2.13.4.jar spring-jdbc-5.3.23.jar springfox-schema-2.9.2.jar swagg
er-models-1.5.20.jar mapstruct-1.2.0.Final.jar spring-context-5.3.23.ja
r mybatis-plus-core-3.5.4.1.jar spring-beans-5.3.23.jar swagger-annotat
ions-1.5.20.jar logback-classic-1.2.11.jar spring-tx-5.3.23.jar jackson
-databind-2.13.4.2.jar mybatis-3.5.13.jar spring-boot-starter-web-2.6.1
3.jar mybatis-plus-3.5.4.1.jar mybatis-plus-annotation-3.5.4.1.jar tomc
at-embed-core-9.0.68.jar spring-web-5.3.23.jar byte-buddy-1.11.22.jar s
pring-boot-starter-jdbc-2.6.13.jar springfox-swagger2-2.9.2.jar jsqlpar
ser-4.6.jar spring-aop-5.3.23.jar spring-boot-autoconfigure-2.6.13.jar
commons-lang-2.4.jar freemarker-2.3.30.jar springfox-spring-web-2.9.2.j
ar jakarta.annotation-api-1.3.5.jar mybatis-plus-boot-starter-3.5.4.1.j
ar jackson-datatype-jdk8-2.13.4.jar spring-webmvc-5.3.23.jar log4j-to-s
lf4j-2.17.2.jar logback-core-1.2.11.jar jackson-annotations-2.13.4.jar
classmate-1.5.1.jar hutool-all-5.7.20.jar snakeyaml-1.29.jar spring-boo
t-2.6.13.jar log4j-api-2.17.2.jar spring-jcl-5.3.23.jar tomcat-embed-we
bsocket-9.0.68.jar jackson-core-2.13.4.jar spring-plugin-metadata-1.2.0
.RELEASE.jar spring-boot-starter-tomcat-2.6.13.jar java-jwt-3.10.3.jar
spring-boot-starter-json-2.6.13.jar javassist-3.25.0-GA.jar commons-col
lections-3.2.1.jar jul-to-slf4j-1.7.36.jar velocity-1.7.jar spring-boot
-starter-logging-2.6.13.jar mybatis-plus-generator-3.5.1.jar springfox-
swagger-common-2.9.2.jar springfox-core-2.9.2.jar spring-expression-5.3
.23.jar jbcrypt-0.4.jar

@ -1,4 +1,3 @@
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
@ -9,3 +8,4 @@ spring:
restart:
enabled: true
additional-paths: src/main/java

@ -1,11 +1,9 @@
spring:
profiles:
active: dev
active: prod
mvc:
pathmatch:
matching-strategy: ant_path_matcher
main:
allow-bean-definition-overriding: true
mybatis-plus:
configuration:
mapper-locations: classpath*:/mapper/**mapper.xml

Binary file not shown.

After

Width:  |  Height:  |  Size: 89 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 832 KiB

Before

Width:  |  Height:  |  Size: 205 KiB

After

Width:  |  Height:  |  Size: 205 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

Before

Width:  |  Height:  |  Size: 178 KiB

After

Width:  |  Height:  |  Size: 178 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 170 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 170 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

@ -0,0 +1 @@
.cold-transport[data-v-6e40bc0c]{display:flex;justify-content:space-between;gap:16px;padding:20px}.card[data-v-6e40bc0c]{width:48%;border:1px solid #ddd;border-radius:8px;overflow:hidden;box-shadow:0 4px 8px #0000001a;background:#fff;transition:transform .3s ease}.card[data-v-6e40bc0c]:hover{transform:translateY(-5px)}.card-image[data-v-6e40bc0c]{width:100%;height:180px;object-fit:cover}.card-content[data-v-6e40bc0c]{padding:16px}.card-content h3[data-v-6e40bc0c]{font-size:18px;margin-bottom:8px;color:#333}.card-content p[data-v-6e40bc0c]{font-size:14px;color:#666;line-height:1.6}

@ -0,0 +1 @@
import{_ as a,o as t,c as s,D as d}from"./index-C_wsH6hR.js";const e="/11.jpg",o="/12.png",r={name:"ColdTransport"},n={class:"cold-transport"};function i(v,c,p,_,l,b){return t(),s("div",n,c[0]||(c[0]=[d('<div class="card" data-v-6e40bc0c><img src="'+e+'" alt="通知" class="card-image" data-v-6e40bc0c><div class="card-content" data-v-6e40bc0c><h3 data-v-6e40bc0c>通知</h3><p data-v-6e40bc0c> 通知通知通知通知通知通知通知通知通知通知通知通知通知 </p></div></div><div class="card" data-v-6e40bc0c><img src="'+o+'" alt="通知" class="card-image" data-v-6e40bc0c><div class="card-content" data-v-6e40bc0c><h3 data-v-6e40bc0c>通知</h3><p data-v-6e40bc0c> 通知通知通知通知通知通知通知通知通知通知通知通知通知 </p></div></div>',2)]))}const f=a(r,[["render",i],["__scopeId","data-v-6e40bc0c"]]);export{f as default};

@ -0,0 +1 @@
import{_ as t,o as s,c as d,D as c}from"./index-C_wsH6hR.js";const o="/21.png",r="/22.png",e={name:"ColdTransport"},n={class:"cold-transport"};function i(v,a,p,_,l,m){return s(),d("div",n,a[0]||(a[0]=[c('<div class="card" data-v-a34393a2><img src="'+o+'" alt="通知" class="card-image" data-v-a34393a2><div class="card-content" data-v-a34393a2><h3 data-v-a34393a2>通知</h3><p data-v-a34393a2> 通知通知通知通知通知通知通知通知通知通知通知通知通知通知通知通知通知 </p></div></div><div class="card" data-v-a34393a2><img src="'+r+'" alt="通知" class="card-image" data-v-a34393a2><div class="card-content" data-v-a34393a2><h3 data-v-a34393a2>通知</h3><p data-v-a34393a2> 通知通知通知通知通知通知通知通知通知通知通知通知通知通知通知通知通知 </p></div></div>',2)]))}const g=t(e,[["render",i],["__scopeId","data-v-a34393a2"]]);export{g as default};

@ -0,0 +1 @@
.cold-transport[data-v-a34393a2]{display:flex;justify-content:space-between;gap:16px;padding:20px}.card[data-v-a34393a2]{width:48%;border:1px solid #ddd;border-radius:8px;overflow:hidden;box-shadow:0 4px 8px #0000001a;background:#fff;transition:transform .3s ease}.card[data-v-a34393a2]:hover{transform:translateY(-5px)}.card-image[data-v-a34393a2]{width:100%;height:180px;object-fit:cover}.card-content[data-v-a34393a2]{padding:16px}.card-content h3[data-v-a34393a2]{font-size:18px;margin-bottom:8px;color:#333}.card-content p[data-v-a34393a2]{font-size:14px;color:#666;line-height:1.6}

@ -0,0 +1 @@
import{_ as d,o as t,c as s,D as c}from"./index-C_wsH6hR.js";const o="/31.jpg",r="/32.png",e={name:"ColdTransport"},n={class:"cold-transport"};function i(v,a,p,_,l,m){return t(),s("div",n,a[0]||(a[0]=[c('<div class="card" data-v-1568d758><img src="'+o+'" alt="通知" class="card-image" data-v-1568d758><div class="card-content" data-v-1568d758><h3 data-v-1568d758>通知</h3><p data-v-1568d758> 通知通知通知通知通知通知通知通知通知通知通知通知通知通知通知通知 </p></div></div><div class="card" data-v-1568d758><img src="'+r+'" alt="通知" class="card-image" data-v-1568d758><div class="card-content" data-v-1568d758><h3 data-v-1568d758>通知</h3><p data-v-1568d758> 通知通知通知通知通知通知通知通知通知通知通知通知通知通知通知通知 </p></div></div>',2)]))}const g=d(e,[["render",i],["__scopeId","data-v-1568d758"]]);export{g as default};

@ -0,0 +1 @@
.cold-transport[data-v-1568d758]{display:flex;justify-content:space-between;gap:16px;padding:20px}.card[data-v-1568d758]{width:48%;border:1px solid #ddd;border-radius:8px;overflow:hidden;box-shadow:0 4px 8px #0000001a;background:#fff;transition:transform .3s ease}.card[data-v-1568d758]:hover{transform:translateY(-5px)}.card-image[data-v-1568d758]{width:100%;height:180px;object-fit:cover}.card-content[data-v-1568d758]{padding:16px}.card-content h3[data-v-1568d758]{font-size:18px;margin-bottom:8px;color:#333}.card-content p[data-v-1568d758]{font-size:14px;color:#666;line-height:1.6}

@ -0,0 +1 @@
.cold-transport[data-v-db2c9a8d]{display:flex;justify-content:space-between;gap:16px;padding:20px}.card[data-v-db2c9a8d]{width:48%;border:1px solid #ddd;border-radius:8px;overflow:hidden;box-shadow:0 4px 8px #0000001a;background:#fff;transition:transform .3s ease}.card[data-v-db2c9a8d]:hover{transform:translateY(-5px)}.card-image[data-v-db2c9a8d]{width:100%;height:180px;object-fit:cover}.card-content[data-v-db2c9a8d]{padding:16px}.card-content h3[data-v-db2c9a8d]{font-size:18px;margin-bottom:8px;color:#333}.card-content p[data-v-db2c9a8d]{font-size:14px;color:#666;line-height:1.6}

@ -0,0 +1 @@
import{_ as d,o as c,c as t,D as s}from"./index-C_wsH6hR.js";const o="/41.png",r="/42.jpg",e={name:"ColdTransport"},n={class:"cold-transport"};function i(v,a,p,_,l,b){return c(),t("div",n,a[0]||(a[0]=[s('<div class="card" data-v-db2c9a8d><img src="'+o+'" alt="通知" class="card-image" data-v-db2c9a8d><div class="card-content" data-v-db2c9a8d><h3 data-v-db2c9a8d>通知</h3><p data-v-db2c9a8d> 通知通知通知通知通知通知通知通知通知通知通知通知通知通知通知通知通知通知通知通知 </p></div></div><div class="card" data-v-db2c9a8d><img src="'+r+'" alt="通知" class="card-image" data-v-db2c9a8d><div class="card-content" data-v-db2c9a8d><h3 data-v-db2c9a8d>通知</h3><p data-v-db2c9a8d> 通知通知通知通知通知通知通知通知通知通知通知通知通知通知通知通知通知通知通知通知 </p></div></div>',2)]))}const f=d(e,[["render",i],["__scopeId","data-v-db2c9a8d"]]);export{f as default};

@ -0,0 +1 @@
.marking-container[data-v-0a346698]{max-width:900px;margin:20px auto;padding:20px;background:#f9f9f9;border-radius:8px;box-shadow:0 4px 12px #0000001a}

@ -0,0 +1 @@
import{_ as b,u as f,i as k,m as h,a as n,o as _,c as x,d as w,b as e,w as r,e as v,k as y}from"./index-C_wsH6hR.js";import{r as C}from"./request-B_OZoDD8.js";const M={class:"marking-container"},g={__name:"MarkList",setup(p){const l=f(),s=k([]),i=async()=>{await C.get("http://localhost:8080/answer").then(o=>{o.data.code=="200"&&(s.value=o.data.data)})},u=(o,t)=>{l.push({name:"MarkExam",query:{examId:o,userId:t}})};return h(()=>{i()}),(o,t)=>{const a=n("el-table-column"),m=n("el-button"),d=n("el-table");return _(),x("div",M,[t[1]||(t[1]=w("h2",null,"试卷批改列表",-1)),e(d,{data:s.value,stripe:"",style:{width:"100%"}},{default:r(()=>[e(a,{prop:"name",label:"试卷名称",width:"180"}),e(a,{prop:"studentName",label:"学生姓名",width:"180"}),e(a,{prop:"submitTime",label:"提交时间",width:"180"}),e(a,{prop:"score",label:"分数"}),e(a,{prop:"isScore",label:"是否评分"}),e(a,{label:"操作"},{default:r(({row:c})=>[e(m,{type:"primary",onClick:L=>u(c.examId,c.userId)},{default:r(()=>t[0]||(t[0]=[v("改卷")])),_:2},1032,["onClick"])]),_:1})]),_:1},8,["data"])])}}},B=b(g,[["__scopeId","data-v-0a346698"]]),I={__name:"Correct",setup(p){return(l,s)=>(_(),y(B))}};export{I as default};

@ -0,0 +1 @@
import{h as k,u as V,i as m,r as v,a as i,o as U,c as q,d as u,b as o,w as r,e as w,E as d,_ as L}from"./index-C_wsH6hR.js";import{r as N}from"./request-B_OZoDD8.js";const R={class:"auth-page"},S={class:"auth-container"},B={style:{display:"flex","align-items":"center"}},D=["src"],E=k({__name:"Login",setup($){const f=V(),c=m(),n=m(Date.now().toString()),g=m(`http://localhost:8080/captcha?key=${n.value}`),t=v({username:"",password:"",verificationCode:"",avatar:""}),x=v({username:[{required:!0,message:"请输入用户名",trigger:"blur"},{min:3,max:8,message:"用户名长度需为 3-8 个字符",trigger:"blur"}],password:[{required:!0,message:"请输入密码",trigger:"blur"},{min:3,max:8,message:"密码长度需为 3-8 个字符",trigger:"blur"}],verificationCode:[{required:!0,message:"请输入验证码",trigger:"blur"}]}),p=()=>{n.value=Date.now().toString(),g.value=`http://localhost:8080/captcha?key=${n.value}`},C=()=>{c.value&&c.value.validate(_=>{_?N({url:`http://localhost:8080/user/login?key=${n.value}`,method:"post",data:{username:t.username,password:t.password,verificationCode:t.verificationCode}}).then(e=>{if(e.data.code=="200"){const s=e.data.data;localStorage.setItem("user",JSON.stringify(s)),d.success("登录成功");const a=s.role;f.push(a=="student"?"/student/home":a=="teacher"?"/teacher/firstpage":"/admin/firstpage")}else d.error(e.data.msg||"登录失败"),p()}).catch(()=>{d.error("登录失败,请稍后重试"),p()}):d.warning("请填写完整信息")})},b=()=>{f.push("/register")};return(_,e)=>{const s=i("el-input"),a=i("el-form-item"),h=i("el-button"),y=i("el-form");return U(),q("div",R,[u("div",S,[e[5]||(e[5]=u("h2",null,"登录",-1)),o(y,{model:t,rules:x,ref_key:"ruleFormRef",ref:c},{default:r(()=>[o(a,{prop:"username"},{default:r(()=>[o(s,{modelValue:t.username,"onUpdate:modelValue":e[0]||(e[0]=l=>t.username=l),placeholder:"请输入用户名","prefix-icon":"User",clearable:""},null,8,["modelValue"])]),_:1}),o(a,{prop:"password"},{default:r(()=>[o(s,{modelValue:t.password,"onUpdate:modelValue":e[1]||(e[1]=l=>t.password=l),type:"password",placeholder:"请输入密码","prefix-icon":"Lock",clearable:"","show-password":""},null,8,["modelValue"])]),_:1}),o(a,{prop:"captcha"},{default:r(()=>[u("div",B,[o(s,{modelValue:t.verificationCode,"onUpdate:modelValue":e[2]||(e[2]=l=>t.verificationCode=l),placeholder:"请输入验证码","prefix-icon":"CircleCheck",style:{width:"150px"},clearable:""},null,8,["modelValue"]),u("img",{src:g.value,alt:"验证码",style:{height:"38px",cursor:"pointer","margin-left":"10px"},onClick:p},null,8,D)])]),_:1}),o(a,null,{default:r(()=>[o(h,{type:"primary",block:"",onClick:C},{default:r(()=>e[3]||(e[3]=[w("登录")])),_:1}),o(h,{type:"text",onClick:b},{default:r(()=>e[4]||(e[4]=[w("没有账号?去注册")])),_:1})]),_:1})]),_:1},8,["model","rules"])])])}}}),T=L(E,[["__scopeId","data-v-be74a8eb"]]);export{T as default};

@ -0,0 +1 @@
.auth-page[data-v-be74a8eb]{position:absolute;top:0;right:0;bottom:0;left:0;width:100vw;height:100vh;overflow:hidden;display:flex;justify-content:center;align-items:center;background:url(/assets/%E8%83%8C%E6%99%AF2-Cxhvf9PD.jpg) no-repeat center center;background-size:cover}.auth-container[data-v-be74a8eb]{max-width:400px;margin:50px auto;padding:20px;border-radius:10px;background-color:#fff;box-shadow:0 4px 10px #0000001a}h2[data-v-be74a8eb]{text-align:center;color:#333;margin-bottom:20px}

@ -0,0 +1 @@
.exam-marking[data-v-ff91658e]{width:1000px;margin:30px auto;padding:20px;background:#f9f9f9;border-radius:8px;box-shadow:0 4px 12px #0000001a;line-height:1.5}.answer-item[data-v-ff91658e]{margin-bottom:20px}.exam-details h2[data-v-ff91658e]{text-align:center;color:#333;font-size:24px}.exam-details h3[data-v-ff91658e]{margin-top:20px;color:#555;font-size:18px}.score-summary[data-v-ff91658e]{margin-top:-25px;display:flex;justify-content:center;align-items:center;gap:20px}.exam-item[data-v-ff91658e]{margin-bottom:20px;padding:15px;border-radius:8px;box-shadow:0 2px 6px #0000001a}.exam-item[data-v-ff91658e]:last-child{margin-bottom:0}.question-info[data-v-ff91658e]{display:flex;justify-content:center;align-items:center;margin-bottom:15px;text-align:center}.question-name[data-v-ff91658e]{font-size:18px;color:#333;text-align:center}.options[data-v-ff91658e]{margin-top:10px}.option[data-v-ff91658e]{display:flex;justify-content:center;align-items:center;font-size:16px}.score-answer-row[data-v-ff91658e]{margin-top:15px}.score-row[data-v-ff91658e]{text-align:left}.answer-row[data-v-ff91658e]{text-align:right}.center-text[data-v-ff91658e]{text-align:center}span[data-v-ff91658e]{font-weight:700}.correct[data-v-ff91658e]{color:#28a745;font-weight:700}.incorrect[data-v-ff91658e]{color:#dc3545;font-weight:700}

@ -0,0 +1 @@
import{r as y}from"./request-B_OZoDD8.js";import{_ as U,x as j,i as S,y as $,m as F,a as m,o as l,c as d,d as s,t as r,e as f,b as u,F as A,j as V,w as c,E as b,k as I,s as E}from"./index-C_wsH6hR.js";const T={class:"exam-marking"},z={class:"score-summary"},D={class:"question-info"},J={class:"question-name"},O={class:"options"},R={class:"correct"},G={key:1},H={__name:"MarkExam",setup(K){const x=j(),i=S([]),p=S([]),_=x.query.examId,v=x.query.userId,g=$(()=>i.value.reduce((n,e)=>n+Number(e.userScore||0),0)),L=async()=>{await y.get(`http://localhost:8080/answer/${_}/student/${v}`).then(n=>{n.data.code=="200"&&(i.value=n.data.data)})},N=async()=>{y.get(`http://localhost:8080/exam/${_}`).then(n=>{n.data.code=="200"&&(p.value=n.data.data)})},B=async()=>{const n=i.value.map(o=>({id:o.id,name:o.name,type:o.type,options:o.options,answer:o.answer,score:o.score||10,userId:null,user:null,userScore:o.userScore||0,userAnswers:o.userAnswers})),e={examId:_,userId:v,answers:JSON.stringify(n)};await y.post("http://localhost:8080/exam/submit-scores",e).then(o=>{o.data.code=="200"?b.success("评分成功"):b.error("评分失败")})};return F(()=>{L(),N()}),(n,e)=>{const o=m("el-input"),w=m("el-col"),k=m("el-row"),C=m("el-button");return l(),d("div",T,[e[6]||(e[6]=s("h2",null,"批改试卷",-1)),s("h3",null,r(p.value.title),1),s("div",z,[s("h4",null,"总分:"+r(p.value.total||0),1),s("h4",null,[e[1]||(e[1]=f("总得分:")),u(o,{readonly:"",modelValue:g.value,"onUpdate:modelValue":e[0]||(e[0]=t=>g.value=t),style:{display:"inline-block",width:"50px"}},null,8,["modelValue"])])]),e[7]||(e[7]=s("h3",null,"答题详情:",-1)),(l(!0),d(A,null,V(i.value,(t,h)=>(l(),d("div",{key:h,class:"exam-item"},[s("div",D,[s("p",J,[s("strong",null,r(h+1)+". "+r(t.name),1)])]),s("div",O,[u(k,{gutter:20},{default:c(()=>[(l(!0),d(A,null,V(t.options,(a,M)=>(l(),I(w,{key:M,span:6,class:E(["option",{correct:t.correctAnswer.includes(a[0]),incorrect:t.userAnswers.includes(a[0])&&!t.correctAnswer.includes(a[0])}])},{default:c(()=>[f(r(a),1)]),_:2},1032,["class"]))),128))]),_:2},1024)]),u(k,{gutter:20,class:"score-answer-row"},{default:c(()=>[u(w,{span:12,class:"answer-row"},{default:c(()=>[s("p",null,[e[2]||(e[2]=s("strong",null,"用户答案:",-1)),s("span",{class:E(t.userAnswers.sort().join("")==t.correctAnswer?"correct":"incorrect")},r(t.userAnswers.sort().join("")),3)]),s("p",null,[e[3]||(e[3]=s("strong",null,"正确答案:",-1)),s("span",R,r(t.correctAnswer),1)])]),_:2},1024),u(w,{span:12,class:"score-row"},{default:c(()=>[s("p",null,[s("strong",null,"分值:"+r(t.score),1)]),s("p",null,[e[4]||(e[4]=s("strong",null,"得分:",-1)),t.type=="主观题"?(l(),I(o,{key:0,modelValue:t.userScore,"onUpdate:modelValue":a=>t.userScore=a,type:"number",min:"0",max:t.score,style:{width:"50px","margin-left":"5px"}},null,8,["modelValue","onUpdate:modelValue","max"])):(l(),d("span",G,r(t.userScore),1))])]),_:2},1024)]),_:2},1024)]))),128)),u(C,{type:"primary",onClick:B},{default:c(()=>e[5]||(e[5]=[f("提交评分")])),_:1})])}}},W=U(H,[["__scopeId","data-v-ff91658e"]]);export{W as default};

@ -0,0 +1 @@
.auth-page[data-v-569def5a]{position:absolute;top:0;right:0;bottom:0;left:0;width:100vw;height:100vh;overflow:hidden;display:flex;justify-content:center;align-items:center;background:url(/assets/%E8%83%8C%E6%99%AF2-Cxhvf9PD.jpg) no-repeat center center;background-size:cover}.auth-container[data-v-569def5a]{max-width:400px;margin:0 auto;padding:20px;box-shadow:0 4px 12px #0000001a;border-radius:10px;background-color:#fff}h2[data-v-569def5a]{text-align:center;color:#333;margin-bottom:1.5em}.el-form-item[data-v-569def5a]{margin-bottom:1em}

@ -0,0 +1 @@
import{h as y,u as R,i as c,r as w,a,o as P,c as U,d as b,b as o,w as r,e as n,E as d,_ as q}from"./index-C_wsH6hR.js";import{r as E}from"./request-B_OZoDD8.js";const h={class:"auth-page"},B={class:"auth-container"},N=y({__name:"Register",setup(F){const g=R(),i=c(),m=c("student"),s=w({username:"",password:"",confirmPassword:"",role:""}),V=w({username:[{required:!0,message:"请输入用户名",trigger:"blur"},{min:3,max:8,message:"长度在3到8个字符",trigger:"blur"}],password:[{required:!0,message:"请输入密码",trigger:"blur"},{min:3,max:8,message:"长度在3到8个字符",trigger:"blur"}],confirmPassword:[{required:!0,message:"请再次输入密码",trigger:"blur"},{validator:(p,e,t)=>{e!==s.password?t(new Error("两次输入的密码不一致")):t()},trigger:"blur"}]}),v=()=>{i.value&&i.value.validate(p=>{p?E({url:"http://localhost:8080/user/register",method:"post",data:{username:s.username,password:s.password,role:m.value}}).then(e=>{e.data.code=="200"?(d.success("注册成功,请登录"),g.push("/login")):d.error(e.data.msg)}).catch(()=>{d.error("注册失败,请重试")}):d.warning("请检查输入的字段")})},x=()=>{g.push("/login")};return(p,e)=>{const t=a("el-input"),u=a("el-form-item"),f=a("el-radio"),k=a("el-radio-group"),_=a("el-button"),C=a("el-form");return P(),U("div",h,[b("div",B,[e[9]||(e[9]=b("h2",null,"注册",-1)),o(C,{model:s,rules:V,ref_key:"ruleFormRef",ref:i},{default:r(()=>[o(u,{prop:"username"},{default:r(()=>[o(t,{modelValue:s.username,"onUpdate:modelValue":e[0]||(e[0]=l=>s.username=l),placeholder:"请输入用户名","prefix-icon":"User",clearable:""},null,8,["modelValue"])]),_:1}),o(u,{prop:"password"},{default:r(()=>[o(t,{"show-password":"",modelValue:s.password,"onUpdate:modelValue":e[1]||(e[1]=l=>s.password=l),type:"password",placeholder:"请输入密码","prefix-icon":"Lock",clearable:""},null,8,["modelValue"])]),_:1}),o(u,{prop:"confirmPassword"},{default:r(()=>[o(t,{"show-password":"",modelValue:s.confirmPassword,"onUpdate:modelValue":e[2]||(e[2]=l=>s.confirmPassword=l),type:"password",placeholder:"请再次输入密码","prefix-icon":"CircleCheck",clearable:""},null,8,["modelValue"])]),_:1}),o(k,{modelValue:m.value,"onUpdate:modelValue":e[3]||(e[3]=l=>m.value=l)},{default:r(()=>[o(f,{label:"student"},{default:r(()=>e[4]||(e[4]=[n("学生")])),_:1}),o(f,{label:"teacher"},{default:r(()=>e[5]||(e[5]=[n("教师")])),_:1}),o(f,{label:"admin"},{default:r(()=>e[6]||(e[6]=[n("管理员")])),_:1})]),_:1},8,["modelValue"]),o(u,null,{default:r(()=>[o(_,{type:"primary",block:"",onClick:v},{default:r(()=>e[7]||(e[7]=[n("注册")])),_:1}),o(_,{type:"text",onClick:x},{default:r(()=>e[8]||(e[8]=[n("已有账号?去登录")])),_:1})]),_:1})]),_:1},8,["model","rules"])])])}}}),I=q(N,[["__scopeId","data-v-569def5a"]]);export{I as default};

@ -0,0 +1 @@
import{_ as j,r as q,i as v,a as _,o as r,c as f,d as s,b as i,w as l,l as H,F as M,j as U,e as d,t as g,k as S,g as C,E as b}from"./index-C_wsH6hR.js";import{r as V}from"./request-B_OZoDD8.js";const J={class:"discussion-area"},O={class:"comment-list"},Y={class:"comment-header"},A=["src"],G={class:"comment-body"},K={class:"comment-info"},P={class:"time"},Q={class:"content"},W={class:"comment-actions"},X={key:0,class:"child-comments"},Z={class:"child-content"},tt=["src"],et={style:{"margin-right":"5px"}},st={class:"content"},nt={class:"time"},ot={class:"child-actions"},at={slot:"footer",class:"dialog-footer"},lt={__name:"discussion",setup(rt){const m=q(localStorage.getItem("user")?JSON.parse(localStorage.getItem("user")):null),I=v([]),y=v({username:m.username,content:""}),k=v(!1),p=v(""),D=v(null),F=v(""),N=n=>{const t=new Date(n),c=t.getFullYear(),o=String(t.getMonth()+1).padStart(2,"0"),u=String(t.getDate()).padStart(2,"0"),x=String(t.getHours()).padStart(2,"0"),$=String(t.getMinutes()).padStart(2,"0"),w=String(t.getSeconds()).padStart(2,"0");return`${c}-${o}-${u} ${x}:${$}:${w}`},h=async()=>{const n=await V.get("http://localhost:8080/comment");n.data.code=="200"&&(I.value=R(n.data.data))},R=n=>{const t={},c=[];return n.forEach(o=>{o.children=[],t[o.id]=o,o.parentId===null?c.push(o):t[o.parentId]&&t[o.parentId].children.push(o)}),c},z=async()=>{y.value.content.trim()&&await V.post("http://localhost:8080/comment",y.value).then(n=>{n.data.code=="200"&&(y.value.content="",b.success("发表成功"),h())})},B=(n,t)=>{k.value=!0,D.value=n,F.value=t,p.value=`@${t}`},L=async()=>{p.value.trim()&&await V.post("http://localhost:8080/comment",{username:m.username,content:p.value,parentId:D.value}).then(n=>{n.data.code=="200"&&(b.success("回复成功"),p.value="",k.value=!1,h())})},E=async n=>{await V.delete(`http://localhost:8080/comment/${n}`).then(t=>{t.data.code=="200"&&(b.success("删除成功"),h())})};return h(),(n,t)=>{const c=_("el-input"),o=_("el-form-item"),u=_("el-button"),x=_("el-form"),$=_("el-card"),w=_("el-dialog");return r(),f("div",J,[t[12]||(t[12]=s("h2",null,"讨论区",-1)),i(x,{onSubmit:H(z,["prevent"]),class:"comment-form"},{default:l(()=>[i(o,null,{default:l(()=>[i(c,{modelValue:y.value.content,"onUpdate:modelValue":t[0]||(t[0]=e=>y.value.content=e),placeholder:"请输入评论内容",type:"textarea",rows:"3"},null,8,["modelValue"])]),_:1}),i(o,null,{default:l(()=>[i(u,{type:"success",onClick:z,class:"submit-button"},{default:l(()=>t[4]||(t[4]=[d("发表")])),_:1})]),_:1})]),_:1}),t[13]||(t[13]=s("div",{class:"divider"},null,-1)),s("div",O,[(r(!0),f(M,null,U(I.value,e=>(r(),f("div",{key:e.id,class:"comment-item"},[i($,{class:"comment-card"},{default:l(()=>[s("div",Y,[s("img",{class:"avatar",src:e.avatar,alt:"avatar"},null,8,A),s("div",G,[s("div",K,[s("strong",null,g(e.username),1),s("span",P,g(N(e.time)),1)]),s("p",Q,g(e.content),1),s("div",W,[e.username!=m.username?(r(),S(u,{key:0,type:"text",size:"small",onClick:a=>B(e.id,e.username)},{default:l(()=>t[5]||(t[5]=[d(" 回复 ")])),_:2},1032,["onClick"])):C("",!0),e.username==m.username?(r(),S(u,{key:1,type:"text",size:"small",onClick:a=>E(e.id)},{default:l(()=>t[6]||(t[6]=[d(" 删除 ")])),_:2},1032,["onClick"])):C("",!0)])])]),e.children.length>0?(r(),f("div",X,[(r(!0),f(M,null,U(e.children,a=>(r(),f("div",{key:a.id,class:"child-comment"},[s("div",Z,[s("img",{class:"avatar",src:a.avatar},null,8,tt),s("div",et,[s("strong",null,g(a.username),1),t[7]||(t[7]=d(":"))]),s("div",st,g(a.content),1),s("span",nt,g(N(a.time)),1),s("div",ot,[a.username!=m.username?(r(),S(u,{key:0,type:"text",size:"small",onClick:T=>B(a.parentId,a.username)},{default:l(()=>t[8]||(t[8]=[d(" 回复 ")])),_:2},1032,["onClick"])):C("",!0),a.username==m.username?(r(),S(u,{key:1,type:"text",size:"small",onClick:T=>E(a.id)},{default:l(()=>t[9]||(t[9]=[d(" 删除 ")])),_:2},1032,["onClick"])):C("",!0)])])]))),128))])):C("",!0)]),_:2},1024)]))),128))]),i(w,{title:"回复评论",modelValue:k.value,"onUpdate:modelValue":t[3]||(t[3]=e=>k.value=e),width:"500px"},{default:l(()=>[i(c,{type:"textarea",modelValue:p.value,"onUpdate:modelValue":t[1]||(t[1]=e=>p.value=e),placeholder:"请输入回复内容",rows:"4"},null,8,["modelValue"]),s("div",at,[i(u,{onClick:t[2]||(t[2]=e=>k.value=!1)},{default:l(()=>t[10]||(t[10]=[d("取消")])),_:1}),i(u,{type:"primary",onClick:L},{default:l(()=>t[11]||(t[11]=[d("回复")])),_:1})])]),_:1},8,["modelValue"])])}}},dt=j(lt,[["__scopeId","data-v-a39c764b"]]);export{dt as default};

@ -0,0 +1 @@
.discussion-area[data-v-a39c764b]{width:800px;margin:0 auto;padding:20px;background-color:#fff;border-radius:8px;box-shadow:0 4px 12px #0000001a}h2[data-v-a39c764b]{text-align:center;font-size:24px;color:#333;margin-bottom:20px}.divider[data-v-a39c764b]{height:2px;background:#f0f0f0;margin:20px 0}.comment-form[data-v-a39c764b]{margin-bottom:20px}.submit-button[data-v-a39c764b]{display:block;margin:0 auto;width:120px}.comment-list[data-v-a39c764b]{margin-top:20px}.comment-item[data-v-a39c764b]{margin-bottom:15px}.comment-card[data-v-a39c764b]{padding:10px 15px;background-color:#fff;border-radius:8px;box-shadow:0 2px 6px #0000001a}.comment-header[data-v-a39c764b]{display:flex;align-items:flex-start}.avatar[data-v-a39c764b]{width:40px;height:40px;border-radius:50%;margin-right:10px}.comment-body[data-v-a39c764b]{flex:1}.comment-info[data-v-a39c764b]{display:flex;justify-content:space-between;font-size:14px;color:#666;margin-bottom:5px}.content[data-v-a39c764b]{font-size:14px;color:#333;width:450px;text-align:left}.comment-actions[data-v-a39c764b]{margin-top:10px;display:flex;flex-direction:row;justify-content:flex-end}.child-comments[data-v-a39c764b]{margin-top:10px;padding-left:20px}.child-comment[data-v-a39c764b]{padding:5px 10px;background-color:#f4f4f4;border-radius:4px;margin-bottom:5px}.child-content[data-v-a39c764b]{display:flex;justify-content:flex-start;font-size:13px;color:#555;word-wrap:break-word;overflow-wrap:break-word}.child-actions[data-v-a39c764b]{margin-top:5px}

File diff suppressed because one or more lines are too long

@ -0,0 +1 @@
import{r as x}from"./request-B_OZoDD8.js";import{_ as S,x as j,i as p,y as q,m as C,o as l,c as d,d as s,t as r,F as g,j as h,b as i,w as o,k as E,e as _,s as A,f as n,z as w,A as k}from"./index-C_wsH6hR.js";const I={class:"exam-details"},L={class:"score-summary"},V={class:"question-info"},z={class:"question-name"},F={class:"options"},R={class:"correct"},$={__name:"examAnswers",setup(b){const y=j(),f=p(y.params.examId),m=p([]),u=p({}),B=q(()=>m.value.reduce((a,e)=>a+e.userScore,0));return C(()=>{x.get(`http://localhost:8080/answer/details/${f.value}`).then(a=>{a.data.code=="200"&&(m.value=a.data.data)}),x.get(`http://localhost:8080/exam/${f.value}`).then(a=>{a.data.code=="200"&&(u.value=a.data.data)})}),(a,e)=>(l(),d("div",I,[s("h2",null,r(u.value.title),1),s("h4",null,"出卷老师:"+r(u.value.teacherName),1),s("div",L,[s("h4",null,"总分:"+r(u.value.total||0),1),s("h4",null,"总得分:"+r(B.value),1)]),e[4]||(e[4]=s("h3",null,"答题详情:",-1)),(l(!0),d(g,null,h(m.value,(t,v)=>(l(),d("div",{key:v,class:"exam-item"},[s("div",V,[s("p",z,[s("strong",null,r(v+1)+". "+r(t.name),1)])]),s("div",F,[i(n(k),{gutter:20},{default:o(()=>[(l(!0),d(g,null,h(t.options,(c,N)=>(l(),E(n(w),{key:N,span:6,class:A(["option",{correct:t.correctAnswer.includes(c[0]),incorrect:t.userAnswers.includes(c[0])&&!t.correctAnswer.includes(c[0])}])},{default:o(()=>[_(r(c),1)]),_:2},1032,["class"]))),128))]),_:2},1024)]),i(n(k),{gutter:20,class:"score-answer-row"},{default:o(()=>[i(n(w),{span:12,class:"answer-row"},{default:o(()=>[s("p",null,[e[0]||(e[0]=s("strong",null,"用户答案:",-1)),s("span",{class:A(t.userAnswers.sort().join("")==t.correctAnswer?"correct":"incorrect")},r(t.userAnswers.sort().join("")),3)]),s("p",null,[e[1]||(e[1]=s("strong",null,"正确答案:",-1)),s("span",R,r(t.correctAnswer),1)])]),_:2},1024),i(n(w),{span:12,class:"score-row"},{default:o(()=>[s("p",null,[e[2]||(e[2]=s("strong",null,"分值:",-1)),_(" "+r(t.score),1)]),s("p",null,[e[3]||(e[3]=s("strong",null,"得分:",-1)),_(" "+r(t.userScore),1)])]),_:2},1024)]),_:2},1024)]))),128))]))}},T=S($,[["__scopeId","data-v-1d4ddf2d"]]);export{T as default};

@ -0,0 +1 @@
.exam-details[data-v-1d4ddf2d]{max-width:900px;margin:30px auto;padding:20px;background:#f9f9f9;border-radius:8px;box-shadow:0 4px 12px #0000001a}.exam-details h2[data-v-1d4ddf2d]{text-align:center;color:#333;font-size:24px}.exam-details h3[data-v-1d4ddf2d]{margin-top:20px;color:#555;font-size:18px}.score-summary[data-v-1d4ddf2d]{margin-top:-25px;display:flex;justify-content:center;gap:20px}.exam-item[data-v-1d4ddf2d]{margin-bottom:20px;padding:15px;border-radius:8px;box-shadow:0 2px 6px #0000001a}.exam-item[data-v-1d4ddf2d]:last-child{margin-bottom:0}.question-info[data-v-1d4ddf2d]{display:flex;justify-content:center;align-items:center;margin-bottom:15px;text-align:center}.question-name[data-v-1d4ddf2d]{font-size:18px;color:#333;text-align:center}.options[data-v-1d4ddf2d]{margin-top:10px}.option[data-v-1d4ddf2d]{display:flex;justify-content:center;align-items:center;font-size:16px}.score-answer-row[data-v-1d4ddf2d]{margin-top:15px}.score-row[data-v-1d4ddf2d]{text-align:left}.answer-row[data-v-1d4ddf2d]{text-align:right}.center-text[data-v-1d4ddf2d]{text-align:center}span[data-v-1d4ddf2d]{font-weight:700}.correct[data-v-1d4ddf2d]{color:#28a745;font-weight:700}.incorrect[data-v-1d4ddf2d]{color:#dc3545;font-weight:700}

@ -0,0 +1 @@
.exam-container[data-v-e5f24125]{display:flex;flex-direction:row;align-items:flex-start;justify-content:center;position:relative}.exam-detail[data-v-e5f24125]{flex:1;max-width:800px;margin:50px auto;padding:30px;background-color:#f9f9f9;border-radius:10px;box-shadow:0 4px 10px #0000001a;height:350px}.option-row[data-v-e5f24125]{display:block!important;text-align:left}.answer-card[data-v-e5f24125]{position:fixed;top:50%;right:0;transform:translateY(-50%);background:#fff;border-left:1px solid #ddd;border-radius:10px 0 0 10px;box-shadow:-2px 4px 10px #0000001a;width:60px;transition:all .3s}.answer-card.expanded[data-v-e5f24125]{width:200px}.card-header[data-v-e5f24125]{display:flex;align-items:center;padding:10px;cursor:pointer;font-weight:700}.card-body[data-v-e5f24125]{display:flex;flex-wrap:wrap;padding:10px}.card-item[data-v-e5f24125]{width:40px;height:40px;margin:5px;text-align:center;line-height:40px;border:1px solid #ddd;border-radius:50%;background:#f5f5f5;cursor:pointer;transition:background .3s,transform .2s}.card-item[data-v-e5f24125]:hover{background:#e6f7ff;transform:scale(1.1)}.card-item.answered[data-v-e5f24125]{background:#d9f7be;border-color:#b7eb8f}

File diff suppressed because one or more lines are too long

@ -0,0 +1 @@
import{_ as x,i as u,u as F,a as t,o as m,k as w,w as o,b as e,d as c,c as y,j as V,F as j}from"./index-C_wsH6hR.js";const B=["src"],C={__name:"firstpage",setup(P){const i=u("first"),p=F();function d(r){console.log("Tab clicked:",r.name);const n={first:{name:"FirstPage1"},second:{name:"FirstPage2"},third:{name:"FirstPage3"},fourth:{name:"FirstPage4"}}[r.props.name];n&&p.push(n)}const f=[{id:1,src:"/1.jpg"},{id:2,src:"/2.jpg"},{id:3,src:"/3.png"}];return u([{title:"建议建议建议建议建议建议建议建议...",image:"f1.png"},{title:"建议建议建议建议建议建议建议建议...",image:"f1.png"},{title:"建议建议建议建议建议建议建议建议...",image:"f1.png"},{title:"建议建议建议建议建议建议建议建议...",image:"f1.png"}]),(r,a)=>{const n=t("el-carousel-item"),g=t("el-carousel"),_=t("el-main"),s=t("el-tab-pane"),h=t("el-tabs"),b=t("router-view"),v=t("el-footer"),k=t("el-container");return m(),w(k,{style:{height:"1600px"}},{default:o(()=>[e(_,{style:{height:"500px"}},{default:o(()=>[c("div",null,[e(g,{"indicator-position":"none",height:"450px",autoplay:""},{default:o(()=>[(m(),y(j,null,V(f,l=>e(n,{key:l.id},{default:o(()=>[c("img",{src:l.src,alt:"image",style:{width:"100%",height:"100%","object-fit":"cover"}},null,8,B)]),_:2},1024)),64))]),_:1})])]),_:1}),a[1]||(a[1]=c("h1",null,"通知",-1)),e(_,null,{default:o(()=>[e(h,{modelValue:i.value,"onUpdate:modelValue":a[0]||(a[0]=l=>i.value=l),class:"header",onTabClick:d},{default:o(()=>[e(s,{label:"通知1",name:"first"}),e(s,{label:"通知2",name:"second"}),e(s,{label:"通知3",name:"third"}),e(s,{label:"通知4",name:"fourth"})]),_:1},8,["modelValue"]),e(b)]),_:1}),e(v)]),_:1})}}},R=x(C,[["__scopeId","data-v-511c61c1"]]);export{R as default};

@ -0,0 +1 @@
.header[data-v-511c61c1]{text-align:center}.el-header[data-v-511c61c1],.el-footer[data-v-511c61c1]{background-color:#b3c0d1;color:#333;text-align:center;line-height:60px}.el-main[data-v-511c61c1]{background-color:#e9eef3;color:#333;text-align:center;line-height:160px}.news-section[data-v-511c61c1]{padding:20px;max-width:1200px;margin:0 auto}.foot[data-v-511c61c1]{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px}.foot h2[data-v-511c61c1]{font-size:24px;font-weight:700}.view-all-btn[data-v-511c61c1]{border:1px solid #ccc;border-radius:4px;padding:5px 10px;background-color:#fff;cursor:pointer;transition:background-color .3s ease}.view-all-btn[data-v-511c61c1]:hover{background-color:#f0f0f0}.news-container[data-v-511c61c1]{display:grid;grid-template-columns:1fr 1fr;gap:16px}.news-item[data-v-511c61c1]{display:flex;flex-direction:column;border:1px solid #ddd;border-radius:8px;overflow:hidden;background:#fff;transition:transform .3s ease}.news-item[data-v-511c61c1]:hover{transform:translateY(-5px)}.news-image[data-v-511c61c1]{width:100%;height:200px;object-fit:cover}.news-item.large .news-image[data-v-511c61c1]{width:100%;height:200px}.news-content[data-v-511c61c1]{padding:10px;font-size:14px;color:#333;display:flex;align-items:center}.news-item.large .news-content[data-v-511c61c1]{padding:10px 20px;font-size:16px}

@ -0,0 +1 @@
.page[data-v-0cee3746]{display:flex;flex-direction:column;width:100%;background-color:#fff;line-height:20px}.block-view[data-v-0cee3746]{width:100%;display:flex;flex-direction:column;padding:20px}.top[data-v-0cee3746]{display:flex;flex-direction:row;justify-content:flex-start;color:gray}.express-view[data-v-0cee3746]{display:flex;flex-direction:column;width:100%;background-color:#fff3;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.notification-item[data-v-0cee3746]{margin:10px 0}.notification-card[data-v-0cee3746]{padding:15px;border:1px solid #e0e0e0;border-radius:5px;background-color:#f9f9f9}.notification-time[data-v-0cee3746]{font-size:small;color:gray;text-align:right}

@ -0,0 +1 @@
import{_ as w,i as x,a as s,o as l,k as i,w as e,b as t,e as p,c as g,j as k,d as m,t as n,F as v}from"./index-C_wsH6hR.js";const B={__name:"firstpage",setup(D){const d=x([{title:"通知 1",content:"这是第一条系统通知,提醒大家关注相关事项。",timestamp:new Date().toLocaleString()},{title:"通知 2",content:"这是第二条通知,调整了考试安排,请大家知悉。",timestamp:new Date().toLocaleString()},{title:"通知 3",content:"系统维护通知,将于周末进行维护,请提前做好准备。",timestamp:new Date().toLocaleString()}]);return(L,c)=>{const r=s("el-text"),_=s("el-col"),a=s("el-row"),u=s("el-card");return l(),i(a,{class:"page"},{default:e(()=>[t(a,{class:"block-view"},{default:e(()=>[t(a,{class:"top"},{default:e(()=>[t(_,null,{default:e(()=>[t(r,{class:"mx-1"},{default:e(()=>c[0]||(c[0]=[p("系统通知")])),_:1})]),_:1})]),_:1}),t(a,{class:"express-view"},{default:e(()=>[(l(!0),g(v,null,k(d.value,(o,f)=>(l(),i(_,{key:f,class:"notification-item"},{default:e(()=>[t(u,{class:"notification-card"},{default:e(()=>[m("h3",null,n(o.title),1),m("p",null,n(o.content),1),t(r,{class:"notification-time"},{default:e(()=>[p(n(o.timestamp),1)]),_:2},1024)]),_:2},1024)]),_:2},1024))),128))]),_:1})]),_:1})]),_:1})}}},N=w(B,[["__scopeId","data-v-0cee3746"]]);export{N as default};

@ -0,0 +1 @@
import{r as x}from"./request-B_OZoDD8.js";import{_ as A,i as m,m as J,a as u,o as b,c as y,d as k,b as l,w as n,k as $,e as D,E as c}from"./index-C_wsH6hR.js";const F={class:"manual-exam"},L=["src"],H={class:"demo-pagination-block"},K={__name:"handCreate",setup(O){const a=m({title:"",questionIds:[],total:0,startTime:"",endTime:"",img:""}),v=m([]),C=m(""),i=m(1),p=m(6),V=m(0),_=()=>{x.get("http://localhost:8080/question/page?pageNum="+i.value+"&pageSize="+p.value+"&keyword="+C.value).then(t=>{t.data.code=="200"&&(v.value=t.data.data.records,V.value=t.data.data.total)}).catch(t=>console.error(t))},T=t=>{console.log(p),p.value=t,_()},q=t=>{console.log(i),i.value=t,_()};J(()=>{_()});const z=()=>{a.value.total=a.value.questionIds.reduce((t,e)=>{const s=v.value.find(g=>g.id===e);return t+((s==null?void 0:s.score)||0)},0)},I=async()=>{const t={title:a.value.title,questionIds:a.value.questionIds.join(","),total:a.value.total,startTime:a.value.startTime,endTime:a.value.endTime,img:a.value.img};(await x.post("http://localhost:8080/exam",t)).data.code=="200"?c.success("手动组卷成功!"):c.error("手动组卷失败!")},U=t=>{t&&t.data?(a.value.img=t.data,c.success("头像上传成功")):c.error("上传失败,请联系管理员")},N=t=>{const e=t.type==="image/jpeg"||t.type==="image/png",s=t.size/1024/1024<2;return e||c.error("上传头像图片只能是 JPG/PNG 格式!"),s||c.error("上传头像图片大小不能超过 2MB!"),e&&s};return(t,e)=>{const s=u("Plus"),g=u("el-icon"),P=u("el-upload"),d=u("el-form-item"),f=u("el-input"),h=u("el-date-picker"),w=u("el-row"),S=u("el-checkbox"),r=u("el-table-column"),B=u("el-table"),E=u("el-pagination"),M=u("el-button"),G=u("el-form");return b(),y("div",F,[e[11]||(e[11]=k("h2",null,"手动组卷",-1)),l(G,{model:a.value,"label-width":"100px"},{default:n(()=>[l(d,{label:"封面图"},{default:n(()=>[l(P,{class:"avatar-uploader",action:"http://localhost:8080/file/upload","show-file-list":!1,"on-success":U,"before-upload":N},{default:n(()=>[a.value.img?(b(),y("img",{key:0,width:"100px",height:"100px",src:a.value.img,class:"avatar"},null,8,L)):(b(),$(g,{key:1,class:"avatar-uploader-icon"},{default:n(()=>[l(s)]),_:1}))]),_:1})]),_:1}),l(w,null,{default:n(()=>[l(d,{label:"试卷标题"},{default:n(()=>[l(f,{modelValue:a.value.title,"onUpdate:modelValue":e[0]||(e[0]=o=>a.value.title=o),placeholder:"请输入试卷标题"},null,8,["modelValue"])]),_:1}),l(d,{label:"开始时间"},{default:n(()=>[l(h,{modelValue:a.value.startTime,"onUpdate:modelValue":e[1]||(e[1]=o=>a.value.startTime=o),type:"datetime",placeholder:"请选择开始时间"},null,8,["modelValue"])]),_:1}),l(d,{label:"结束时间"},{default:n(()=>[l(h,{modelValue:a.value.endTime,"onUpdate:modelValue":e[2]||(e[2]=o=>a.value.endTime=o),type:"datetime",placeholder:"请选择结束时间"},null,8,["modelValue"])]),_:1})]),_:1}),l(w,null,{default:n(()=>[l(d,{label:"选中题目"},{default:n(()=>[l(f,{modelValue:a.value.questionIds,"onUpdate:modelValue":e[3]||(e[3]=o=>a.value.questionIds=o),readonly:""},null,8,["modelValue"])]),_:1}),l(d,{label:"总分"},{default:n(()=>[l(f,{modelValue:a.value.total,"onUpdate:modelValue":e[4]||(e[4]=o=>a.value.total=o),readonly:""},null,8,["modelValue"])]),_:1})]),_:1}),l(d,{label:"题目列表"},{default:n(()=>[l(B,{data:v.value,border:""},{default:n(()=>[l(r,{width:"70"},{default:n(({row:o})=>[l(S,{modelValue:a.value.questionIds,"onUpdate:modelValue":e[5]||(e[5]=j=>a.value.questionIds=j),label:o.id,onChange:z},null,8,["modelValue","label"])]),_:1}),l(r,{prop:"name",label:"题目内容"}),l(r,{prop:"options",label:"题目选项"}),l(r,{prop:"answer",label:"答案"}),l(r,{prop:"type",label:"题型",width:"100"}),l(r,{prop:"score",label:"分值",width:"80"}),l(r,{prop:"teacherName",label:"出题人",width:"80"})]),_:1},8,["data"]),k("div",H,[l(E,{"current-page":i.value,"onUpdate:currentPage":e[6]||(e[6]=o=>i.value=o),"page-size":p.value,"onUpdate:pageSize":e[7]||(e[7]=o=>p.value=o),"page-sizes":[2,4,6,8],layout:"total, sizes, prev, pager, next, jumper",total:V.value,onSizeChange:e[8]||(e[8]=o=>T(p.value)),onCurrentChange:e[9]||(e[9]=o=>q(i.value))},null,8,["current-page","page-size","total"])])]),_:1}),l(d,null,{default:n(()=>[l(M,{type:"primary",onClick:I},{default:n(()=>e[10]||(e[10]=[D("提交")])),_:1})]),_:1})]),_:1},8,["model"])])}}},W=A(K,[["__scopeId","data-v-3474cb30"]]);export{W as default};

@ -0,0 +1 @@
.manual-exam[data-v-3474cb30]{width:1000px;margin:0 auto;padding:20px;background-color:#fff;border-radius:8px;box-shadow:0 4px 12px #0000001a}h2[data-v-3474cb30]{text-align:center;font-size:24px;color:#333;margin-bottom:20px}.avatar-uploader .el-upload[data-v-3474cb30]{border:1px dashed var(--el-border-color);border-radius:6px;cursor:pointer;position:relative;overflow:hidden;transition:var(--el-transition-duration-fast)}.avatar-uploader .el-upload[data-v-3474cb30]:hover{border-color:var(--el-color-primary)}.avatar-uploader .avatar[data-v-3474cb30]{width:100px;height:100px;display:block}.el-icon.avatar-uploader-icon[data-v-3474cb30]{font-size:28px;color:#8c939d;width:100px;height:100px;text-align:center;border:#8c939d solid 1px}

File diff suppressed because one or more lines are too long

@ -0,0 +1 @@
.all{height:100%;width:100%;min-width:1440px;min-height:100%;display:flex;flex-direction:row;justify-content:center}.part1 p{font-size:14px;text-decoration:underline}.part2 p{text-indent:2em;text-align:left}.announcement-card{height:100%;overflow-y:auto;padding:20px}.announcement-title{font-size:20px;font-weight:700}.announcement-content{margin-top:10px}.announcement-heading{font-size:16px;font-weight:700;color:#333}.announcement-message{color:#666;font-size:14px}::-webkit-scrollbar{display:none}

@ -0,0 +1 @@
.common-layout[data-v-f010c594]{position:absolute;top:0;right:0;bottom:0;left:0;background-color:#eff1f4}.el-header[data-v-f010c594],.el-footer[data-v-f010c594],.el-aside[data-v-f010c594],.el-menu[data-v-f010c594]{background-color:#6e899e;color:#fff}.el-container[data-v-f010c594]{height:100%}.el-main[data-v-f010c594]{height:100%;background:url(/assets/%E8%83%8C%E6%99%AF2-Cxhvf9PD.jpg) no-repeat center center;background-size:cover}.el-menu-item[data-v-f010c594]{background-color:#6e899e}.el-button[data-v-f010c594]{position:absolute;right:20px;top:15px}.el-header[data-v-f010c594]{padding:0 20px;display:flex;flex-direction:row;justify-content:center}.el-menu-horizontal[data-v-f010c594]{background-color:transparent;display:flex;align-items:center;border:none}.logo[data-v-f010c594]{font-size:30px;color:#fff;margin-right:20px}.title[data-v-f010c594],.user-info[data-v-f010c594]{display:flex;align-items:center;border:0px}.user-name[data-v-f010c594]{font-size:16px;color:#fff}.exit[data-v-f010c594]{margin-left:15px}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -0,0 +1 @@
.common-layout{position:absolute;top:0;right:0;bottom:0;left:0}.el-container{height:100%}.el-header{padding:0 20px;background-color:#6d7993;display:flex;flex-direction:row;justify-content:center}.el-menu-horizontal{background-color:transparent;display:flex;align-items:center;border:none}.logo{font-size:30px;color:#fff;margin-right:20px}.el-menu-item{color:#cee3eb;font-size:16px}.el-menu-item:hover{background-color:#b2cbd2}.title,.user-info{display:flex;align-items:center;border:0px}.user-name{font-size:16px;color:#fff}.el-main{height:100%;background:url(/assets/%E8%83%8C%E6%99%AF2-Cxhvf9PD.jpg) no-repeat center center;background-size:cover}.exit{margin-left:15px}

@ -0,0 +1 @@
import{u as k,r as h,a as s,o as m,c,b as e,w as t,d as i,e as n,f as u,g as C,t as E,E as N}from"./index-C_wsH6hR.js";import"./request-B_OZoDD8.js";import{u as b}from"./user-Bk7shoKN.js";const V={class:"common-layout"},B={class:"title"},I={class:"user-info"},j=["src"],R={__name:"index",setup(z){const a=b(),p=k(),d=h(localStorage.getItem("user")?JSON.parse(localStorage.getItem("user")):null),f=()=>{p.push("/login"),localStorage.removeItem("user"),N.success("退出成功")};return(D,o)=>{const _=s("el-text"),r=s("el-menu-item"),l=s("router-link"),x=s("el-menu"),g=s("el-row"),v=s("el-header"),w=s("router-view"),y=s("el-main"),S=s("el-container");return m(),c("div",V,[e(S,null,{default:t(()=>[e(v,null,{default:t(()=>[e(g,{type:"flex",justify:"space-between",align:"middle",style:{"min-width":"1440px"}},{default:t(()=>[i("div",B,[e(x,{"default-active":"1",class:"el-menu-horizontal"},{default:t(()=>[e(_,{class:"logo"},{default:t(()=>o[0]||(o[0]=[n("ExamSphere")])),_:1}),e(l,{to:"/student/home"},{default:t(()=>[e(r,{index:"1"},{default:t(()=>o[1]||(o[1]=[n(" 首页")])),_:1})]),_:1}),e(l,{to:"/student/myExam"},{default:t(()=>[e(r,{index:"2"},{default:t(()=>o[2]||(o[2]=[n("我的考试")])),_:1})]),_:1}),e(l,{to:"/student/myScore"},{default:t(()=>[e(r,{index:"3"},{default:t(()=>o[3]||(o[3]=[n("我的成绩")])),_:1})]),_:1}),e(l,{to:"/student/discussion"},{default:t(()=>[e(r,{index:"4"},{default:t(()=>o[4]||(o[4]=[n("讨论区")])),_:1})]),_:1}),e(l,{to:"/student/personalCenter"},{default:t(()=>[e(r,{index:"5"},{default:t(()=>o[5]||(o[5]=[n("个人中心")])),_:1})]),_:1})]),_:1})]),i("div",I,[d.avatar||u(a).user.avatar?(m(),c("img",{key:0,src:u(a).user.avatar?u(a).user.avatar:d.avatar,style:{width:"40px",height:"40px","border-radius":"40px","margin-right":"10px"}},null,8,j)):C("",!0),e(_,{class:"user-name"},{default:t(()=>[n(E(u(a).user.username?u(a).user.username:d.username),1)]),_:1}),i("button",{onClick:f,class:"exit"},"退出")])]),_:1})]),_:1}),e(y,null,{default:t(()=>[e(w)]),_:1})]),_:1})])}}};export{R as default};

@ -0,0 +1 @@
import{_ as j,u as z,r as D,a as n,o as g,c as v,b as e,w as t,d as l,e as d,f as r,g as J,t as M,E as O}from"./index-C_wsH6hR.js";import"./request-B_OZoDD8.js";import{u as R}from"./user-Bk7shoKN.js";const T={class:"common-layout"},U={class:"title"},q={class:"user-info"},A=["src"],F={__name:"index",setup(G){const u=R(),y=z(),i=D(localStorage.getItem("user")?JSON.parse(localStorage.getItem("user")):null),w=()=>{y.push("/login"),localStorage.removeItem("user"),O.success("退出成功")};return(H,o)=>{const c=n("el-text"),f=n("el-menu"),p=n("el-row"),S=n("el-header"),_=n("el-icon"),s=n("el-menu-item"),a=n("router-link"),m=n("el-sub-menu"),b=n("location"),k=n("el-menu-item-group"),N=n("document"),C=n("icon-menu"),E=n("el-col"),I=n("el-aside"),V=n("router-view"),B=n("el-main"),x=n("el-container");return g(),v("div",T,[e(x,null,{default:t(()=>[e(S,null,{default:t(()=>[e(p,{type:"flex",justify:"space-between",align:"middle",style:{"min-width":"1440px"}},{default:t(()=>[l("div",U,[e(f,{"default-active":"1",class:"el-menu-horizontal"},{default:t(()=>[e(c,{class:"logo"},{default:t(()=>o[0]||(o[0]=[d("ExamSphere")])),_:1})]),_:1})]),l("div",q,[i.avatar||r(u).user.avatar?(g(),v("img",{key:0,src:r(u).user.avatar?r(u).user.avatar:i.avatar,style:{width:"40px",height:"40px","border-radius":"40px","margin-right":"10px"}},null,8,A)):J("",!0),e(c,{class:"user-name"},{default:t(()=>[d(M(r(u).user.username?r(u).user.username:i.username),1)]),_:1}),l("button",{onClick:w,class:"exit"},"退出")])]),_:1})]),_:1}),e(x,null,{default:t(()=>[e(I,{width:"200px",class:"el-aside"},{default:t(()=>[e(p,{class:"tac"},{default:t(()=>[e(E,null,{default:t(()=>[e(f,{"default-active":"2",class:"el-menu-vertical-demo"},{default:t(()=>[e(m,{index:"1"},{title:t(()=>[e(_),o[1]||(o[1]=l("span",{style:{color:"#cdd1d3"}},"首页和通知",-1))]),default:t(()=>[e(a,{to:"/admin/firstpage"},{default:t(()=>[e(s,{index:"2-1"},{default:t(()=>o[2]||(o[2]=[d("首页")])),_:1})]),_:1}),e(m,{index:"2-2"},{title:t(()=>o[3]||(o[3]=[l("span",{style:{color:"#cdd1d3"}},"通知",-1)])),default:t(()=>[e(a,{to:"/admin/notice"},{default:t(()=>[e(s,{index:"2-2-1"},{default:t(()=>o[4]||(o[4]=[d("通知管理")])),_:1})]),_:1})]),_:1})]),_:1}),e(m,{index:"2"},{title:t(()=>[e(_,null,{default:t(()=>[e(b)]),_:1}),o[5]||(o[5]=l("span",{style:{color:"#cdd1d3"}},"用户管理",-1))]),default:t(()=>[e(k,null,{default:t(()=>[e(a,{to:"/admin/student-info"},{default:t(()=>[e(s,{index:"1-1",style:{color:"#cdd1d3"}},{default:t(()=>o[6]||(o[6]=[d("学生管理")])),_:1})]),_:1}),e(a,{to:"/admin/teacher-info"},{default:t(()=>[e(s,{index:"1-2",style:{color:"#cdd1d3"}},{default:t(()=>o[7]||(o[7]=[d("教师管理")])),_:1})]),_:1})]),_:1})]),_:1}),e(a,{to:"/admin/myinfo"},{default:t(()=>[e(s,{index:"3"},{default:t(()=>[e(_,null,{default:t(()=>[e(N)]),_:1}),o[8]||(o[8]=l("span",{style:{color:"#cdd1d3"}},"我的资料",-1))]),_:1})]),_:1}),e(a,{to:"/admin/information"},{default:t(()=>[e(s,{index:"4"},{default:t(()=>[e(_,null,{default:t(()=>[e(C)]),_:1}),o[9]||(o[9]=l("span",{style:{color:"#cdd1d3"}},"用户反馈与建议",-1))]),_:1})]),_:1})]),_:1})]),_:1})]),_:1})]),_:1}),e(B,null,{default:t(()=>[e(V)]),_:1})]),_:1})]),_:1})])}}},Q=j(F,[["__scopeId","data-v-a8d71bd3"]]);export{Q as default};

@ -0,0 +1 @@
.common-layout[data-v-a8d71bd3]{position:absolute;top:0;right:0;bottom:0;left:0}.el-container[data-v-a8d71bd3]{height:100%}.el-header[data-v-a8d71bd3],.el-footer[data-v-a8d71bd3]{background-color:#47484c;color:#fff;text-align:center;line-height:60px}.header-avatar[data-v-a8d71bd3]{display:flex;justify-content:flex-end;align-items:center;padding-right:20px}.avatar[data-v-a8d71bd3]{width:40px;height:40px;border-radius:50%;object-fit:cover}.el-aside[data-v-a8d71bd3]{background-color:#2d2e36;color:#fff;text-align:center}.el-main[data-v-a8d71bd3]{height:100%;background:url(/assets/%E8%83%8C%E6%99%AF2-Cxhvf9PD.jpg) no-repeat center center;background-size:cover}.el-menu[data-v-a8d71bd3]{background-color:#2d2e36}.el-menu-item[data-v-a8d71bd3]{background-color:#2d2e36;transition:background-color .3s ease,color .3s ease}.el-menu-item[data-v-a8d71bd3]:hover{background-color:#fba414;color:#fff}.el-menu-item[disabled][data-v-a8d71bd3]{background-color:#2d2e36;pointer-events:none}.el-header[data-v-a8d71bd3]{padding:0 20px;display:flex;flex-direction:row;justify-content:center}.el-menu-horizontal[data-v-a8d71bd3]{background-color:transparent;display:flex;align-items:center;border:none}.logo[data-v-a8d71bd3]{font-size:30px;color:#fff;margin-right:20px}.title[data-v-a8d71bd3],.user-info[data-v-a8d71bd3]{display:flex;align-items:center;border:0px}.user-name[data-v-a8d71bd3]{font-size:16px;color:#fff}.exit[data-v-a8d71bd3]{margin-left:15px}

@ -0,0 +1 @@
import{_ as D,u as U,r as H,a as l,o as x,c as y,b as e,w as t,d as a,e as r,f as i,g as j,t as q,E as z}from"./index-C_wsH6hR.js";import"./request-B_OZoDD8.js";import{u as A}from"./user-Bk7shoKN.js";const J={class:"common-layout"},M={class:"title"},O={class:"user-info"},R=["src"],T={__name:"index",setup(F){const u=A(),v=U(),f=H(localStorage.getItem("user")?JSON.parse(localStorage.getItem("user")):null),g=()=>{v.push("/login"),localStorage.removeItem("user"),z.success("退出成功")};return(_,o)=>{const c=l("el-text"),m=l("el-menu"),w=l("el-row"),S=l("el-header"),h=l("House"),d=l("el-icon"),n=l("router-link"),s=l("el-menu-item"),p=l("el-sub-menu"),k=l("Document"),C=l("CircleCheck"),I=l("Setting"),b=l("User"),N=l("el-aside"),E=l("router-view"),V=l("el-main"),B=l("el-container");return x(),y("div",J,[e(S,null,{default:t(()=>[e(w,{type:"flex",justify:"space-between",align:"middle",style:{"min-width":"1440px"}},{default:t(()=>[a("div",M,[e(m,{"default-active":"1",class:"el-menu-horizontal"},{default:t(()=>[e(c,{class:"logo"},{default:t(()=>o[0]||(o[0]=[r("ExamSphere")])),_:1})]),_:1})]),a("div",O,[f.avatar||i(u).user.avatar?(x(),y("img",{key:0,src:i(u).user.avatar?i(u).user.avatar:f.avatar,style:{width:"40px",height:"40px","border-radius":"40px","margin-right":"10px"}},null,8,R)):j("",!0),e(c,{class:"user-name"},{default:t(()=>[r(q(i(u).user.username?i(u).user.username:f.username),1)]),_:1}),a("button",{onClick:g,class:"exit"},"退出")])]),_:1})]),_:1}),e(B,null,{default:t(()=>[e(N,{width:"200px",class:"el-aside"},{default:t(()=>[e(m,{"default-active":_.activeIndex,class:"el-menu-vertical-demo",onSelect:_.updateActiveIndex},{default:t(()=>[e(p,{index:"1"},{title:t(()=>[e(d,null,{default:t(()=>[e(h,{style:{color:"white"}})]),_:1}),o[1]||(o[1]=a("span",{style:{color:"#fff"}},"首页和通知",-1))]),default:t(()=>[e(s,{index:"1-1"},{default:t(()=>[e(n,{to:"/teacher/firstpage",style:{color:"#fff"}},{default:t(()=>o[2]||(o[2]=[r("首页")])),_:1})]),_:1}),e(s,{index:"1-2"},{default:t(()=>[e(n,{to:"/teacher/notice",style:{color:"#fff"}},{default:t(()=>o[3]||(o[3]=[r("发送通知")])),_:1})]),_:1})]),_:1}),e(p,{index:"2"},{title:t(()=>[e(d,null,{default:t(()=>[e(k,{style:{color:"white"}})]),_:1}),o[4]||(o[4]=a("span",{style:{color:"#fff"}},"试题组卷",-1))]),default:t(()=>[e(s,{index:"2-1"},{default:t(()=>[e(n,{to:"/teacher/questions",style:{color:"#fff"}},{default:t(()=>o[5]||(o[5]=[r("试题管理")])),_:1})]),_:1}),e(s,{index:"2-2"},{default:t(()=>[e(n,{to:"/teacher/random",style:{color:"#fff"}},{default:t(()=>o[6]||(o[6]=[r("随机组卷")])),_:1})]),_:1}),e(s,{index:"2-3"},{default:t(()=>[e(n,{to:"/teacher/hand",style:{color:"#fff"}},{default:t(()=>o[7]||(o[7]=[r("手动组卷")])),_:1})]),_:1})]),_:1}),e(s,{index:"3"},{default:t(()=>[e(n,{to:"/teacher/cor"},{default:t(()=>[e(d,null,{default:t(()=>[e(C,{style:{color:"white"}})]),_:1}),o[8]||(o[8]=a("span",{style:{color:"#fff"}},"试卷批改",-1))]),_:1})]),_:1}),e(s,{index:"4"},{default:t(()=>[e(n,{to:"/teacher/student-info"},{default:t(()=>[e(d,null,{default:t(()=>[e(I,{style:{color:"white"}})]),_:1}),o[9]||(o[9]=a("span",{style:{color:"#fff"}},"学生管理",-1))]),_:1})]),_:1}),e(s,{index:"5"},{default:t(()=>[e(n,{to:"/teacher/myInfo"},{default:t(()=>[e(d,null,{default:t(()=>[e(b,{style:{color:"white"}})]),_:1}),o[10]||(o[10]=a("span",{style:{color:"#fff"}},"个人中心",-1))]),_:1})]),_:1})]),_:1},8,["default-active","onSelect"])]),_:1}),e(V,null,{default:t(()=>[e(E)]),_:1})]),_:1})])}}},P=D(T,[["__scopeId","data-v-f010c594"]]);export{P as default};

@ -0,0 +1 @@
import{_ as r,i as _,a as o,o as p,k as u,w as a,b as e,d}from"./index-C_wsH6hR.js";const i={__name:"information",setup(f){const n=_([{username:"张三",feedback:"非常好用的系统!",timestamp:new Date().toLocaleString()},{username:"李四",feedback:"希望增加更多功能。",timestamp:new Date().toLocaleString()},{username:"王五",feedback:"界面设计很友好,使用简单。",timestamp:new Date().toLocaleString()}]);return(b,s)=>{const c=o("el-col"),t=o("el-row"),l=o("el-table-column"),m=o("el-table");return p(),u(t,{class:"page"},{default:a(()=>[e(t,{class:"block-view"},{default:a(()=>[e(t,{class:"top"},{default:a(()=>[e(c,null,{default:a(()=>s[0]||(s[0]=[d("h3",{class:"title"},"用户反馈与建议",-1)])),_:1})]),_:1}),e(t,{class:"feedback-list"},{default:a(()=>[e(m,{data:n.value,stripe:!0,border:!0,style:{width:"100%"}},{default:a(()=>[e(l,{prop:"username",label:"用户","class-name":"column-username"}),e(l,{prop:"feedback",label:"反馈内容","class-name":"column-feedback"}),e(l,{prop:"timestamp",label:"提交时间","class-name":"column-timestamp"})]),_:1},8,["data"])]),_:1})]),_:1})]),_:1})}}},w=r(i,[["__scopeId","data-v-231be1a5"]]);export{w as default};

@ -0,0 +1 @@
.page[data-v-35a4ec97]{display:flex;flex-direction:column;width:100%;background-color:#fff;line-height:20px}.block-view[data-v-35a4ec97]{width:100%;display:flex;flex-direction:column;padding:20px}.top[data-v-35a4ec97]{display:flex;flex-direction:row;justify-content:flex-start;padding:20px;color:gray}.feedback-list[data-v-35a4ec97]{margin-top:20px}.el-table[data-v-35a4ec97]{width:100%}.hover-effect[data-v-35a4ec97]{position:relative;overflow:hidden}.hover-effect[data-v-35a4ec97]:after{content:"";position:absolute;left:0;top:0;height:100%;width:100%;background-color:#a9a9a9;transform:scaleX(0);transform-origin:left;transition:transform .3s ease;z-index:0}.hover-effect[data-v-35a4ec97]:hover:after{transform:scaleX(1)}.hover-effect[data-v-35a4ec97]:hover{color:#fff;position:relative;z-index:1}

@ -0,0 +1 @@
import{_,i as m,a as o,o as f,k as p,w as a,b as e,d}from"./index-C_wsH6hR.js";const u={__name:"information",setup(i){const c=m([{username:"张三",feedback:"关于XXX的思考角度",timestamp:new Date().toLocaleString()},{username:"李四",feedback:"此题的其他做法",timestamp:new Date().toLocaleString()},{username:"王五",feedback:"对于XX的步骤简化",timestamp:new Date().toLocaleString()}]);return(b,s)=>{const n=o("el-col"),t=o("el-row"),l=o("el-table-column"),r=o("el-table");return f(),p(t,{class:"page"},{default:a(()=>[e(t,{class:"block-view"},{default:a(()=>[e(t,{class:"top"},{default:a(()=>[e(n,null,{default:a(()=>s[0]||(s[0]=[d("h2",null,"用户反馈与建议",-1)])),_:1})]),_:1}),e(t,{class:"feedback-list"},{default:a(()=>[e(r,{data:c.value,style:{width:"100%"}},{default:a(()=>[e(l,{prop:"username",label:"用户","class-name":"hover-effect"}),e(l,{prop:"feedback",label:"反馈内容","class-name":"hover-effect"}),e(l,{prop:"timestamp",label:"提交时间","class-name":"hover-effect"})]),_:1},8,["data"])]),_:1})]),_:1})]),_:1})}}},w=_(u,[["__scopeId","data-v-35a4ec97"]]);export{w as default};

@ -0,0 +1 @@
.page[data-v-231be1a5]{display:flex;flex-direction:column;width:100%;background-color:#f9f9f9;padding:20px;border-radius:8px;box-shadow:0 2px 10px #0000001a}.block-view[data-v-231be1a5]{width:100%;display:flex;flex-direction:column;background-color:#fff;padding:20px;border-radius:5px;box-shadow:0 2px 5px #0000001a}.top[data-v-231be1a5]{display:flex;flex-direction:row;justify-content:flex-start;padding-bottom:15px;background-color:#cdd1d3}.title[data-v-231be1a5]{font-size:20px;font-weight:700;color:#333;background-color:#cdd1d3}.feedback-list[data-v-231be1a5]{margin-top:20px}.el-table[data-v-231be1a5]{width:100%;background-color:#fff}.column-username[data-v-231be1a5],.column-feedback[data-v-231be1a5],.column-timestamp[data-v-231be1a5]{color:#555}.el-table th[data-v-231be1a5]{background-color:#f0f0f0;color:#333;font-weight:700}.el-table td[data-v-231be1a5]{padding:12px}.el-table tr[data-v-231be1a5]:hover{background-color:#f9f9f9}.el-table tr[data-v-231be1a5]:nth-child(odd){background-color:#f7f7f7}

@ -0,0 +1 @@
.exam-list[data-v-4e62b156]{max-width:1200px;margin:30px auto;padding:20px;background:#fff;box-shadow:0 0 10px #0000001a;border-radius:8px}.exam-list h2[data-v-4e62b156]{text-align:center;color:#333}.exam-card-container[data-v-4e62b156]{display:flex;flex-wrap:wrap;flex-direction:row;justify-content:center}.exam-card[data-v-4e62b156]{max-width:250px;margin:10px}

@ -0,0 +1 @@
import{_ as $,u as b,i as f,m as N,E as B,a as x,o,c as i,d as a,F as r,j as C,b as T,w as S,t as d,e as l}from"./index-C_wsH6hR.js";import{r as w}from"./request-B_OZoDD8.js";const M={class:"exam-list"},F={class:"exam-card-container"},I=["src"],L={style:{"text-align":"left"}},V={style:{display:"flex","align-items":"flex-start"}},q={style:{display:"flex","align-items":"flex-start"}},j={__name:"myExam",setup(H){const E=b(),u=f([]),p=f([]),_=t=>{const e=new Date(t),n=e.getFullYear(),c=String(e.getMonth()+1).padStart(2,"0"),s=String(e.getDate()).padStart(2,"0"),m=String(e.getHours()).padStart(2,"0"),v=String(e.getMinutes()).padStart(2,"0"),D=String(e.getSeconds()).padStart(2,"0");return`${n}-${c}-${s} ${m}:${v}:${D}`},g=t=>{const e=new Date,n=new Date(t);return e>n},y=t=>{const e=new Date,n=new Date(t);return e<n},h=t=>p.value.some(e=>e.examId==t),k=t=>{E.push({name:"ExamDetail",query:{id:t.id,title:t.title,startTime:t.startTime,endTime:t.endTime}})};return N(()=>{w.get("http://localhost:8080/exam").then(t=>{t.data.code=="200"?u.value=t.data.data:B.error("获取考试列表失败")}),w.get("http://localhost:8080/answer/findByUserId").then(t=>{t.data.code=="200"&&(p.value=t.data.data)})}),(t,e)=>{const n=x("el-button"),c=x("el-card");return o(),i("div",M,[e[2]||(e[2]=a("h2",null,"考试列表",-1)),a("div",F,[(o(!0),i(r,null,C(u.value,(s,m)=>(o(),i("div",{key:m,class:"exam-card"},[T(c,{style:{"max-width":"250px"},span:6},{default:S(()=>[a("img",{src:s.img,style:{height:"130px",width:"auto"}},null,8,I),a("div",L,[a("div",null,"考试名称:"+d(s.title),1),a("div",null,"出卷老师:"+d(s.teacherName),1),a("div",V,[e[0]||(e[0]=a("div",{style:{width:"100px"}},"开始时间:",-1)),a("div",null,d(_(s.startTime)),1)]),a("div",q,[e[1]||(e[1]=a("div",{style:{width:"100px"}},"结束时间:",-1)),a("div",null,d(_(s.endTime)),1)])]),T(n,{type:"primary",disabled:g(s.endTime)||y(s.startTime)||h(s.id),onClick:v=>k(s)},{default:S(()=>[y(s.startTime)?(o(),i(r,{key:0},[l("考试未开始")],64)):g(s.endTime)?(o(),i(r,{key:1},[l("考试已结束")],64)):h(s.id)?(o(),i(r,{key:2},[l("已考试")],64)):(o(),i(r,{key:3},[l("开始考试")],64))]),_:2},1032,["disabled","onClick"])]),_:2},1024)]))),128))])])}}},U=$(j,[["__scopeId","data-v-4e62b156"]]);export{U as default};

File diff suppressed because one or more lines are too long

@ -0,0 +1 @@
.grades[data-v-b6d3bf8a]{max-width:800px;height:auto;margin:20px auto;padding:20px;background:#fff;box-shadow:0 0 10px #0000001a;border-radius:8px}.grades h2[data-v-b6d3bf8a]{text-align:center;color:#333}.passed[data-v-b6d3bf8a]{color:#28a745}.not-passed[data-v-b6d3bf8a]{color:#dc3545}.chart-container[data-v-b6d3bf8a]{max-width:800px;margin:20px auto;height:400px}

@ -0,0 +1 @@
import{h as A,u as F,i as V,r as $,E as d,a as s,o as f,c as y,b as o,w as t,d as c,e as u,k as q,t as z,f as O,F as R}from"./index-C_wsH6hR.js";import{b as T}from"./element-china-area-data-BVDNhPol.js";import{r as x}from"./request-B_OZoDD8.js";import{u as H}from"./user-Bk7shoKN.js";const K=["src"],h=A({__name:"myinfo",setup(Q){const k=H(),w=F(),p=V(!1),i=V(!1),l=$({username:"",gender:"",address:[],mobile:"",avatar:"",email:""});x.get("http://localhost:8080/user/info").then(a=>{if(a.data.code=="200"){const e=a.data.data;l.username=e.username,l.gender=e.gender,l.address=e.address?e.address.split(" "):[],l.mobile=e.mobile,l.avatar=e.avatar,l.email=e.email}}).catch(a=>{console.error("请求用户信息失败:",a),d.error("请求用户信息失败,请检查网络连接或联系管理员。")});const C=()=>{i.value=!0},S=()=>{x.post("http://localhost:8080/user",{username:l.username,gender:l.gender,address:l.address.join(" "),mobile:l.mobile,email:l.email,avatar:l.avatar}).then(a=>{if(a.data.code=="200"){let e=JSON.parse(localStorage.getItem("user")||"{}");e.avatar=l.avatar,k.setUser(l),d.success("个人信息保存成功")}else d.error("个人信息保存失败")}).catch(a=>{console.error("保存信息失败:",a),d.error("保存信息失败,请稍后再试")}),i.value=!1},U=()=>{p.value=!0},N=()=>{w.push("/login"),localStorage.removeItem("user"),d.success("退出成功")},P=a=>{a&&a.data?(l.avatar=a.data,d.success("头像上传成功")):d.error("上传失败,请联系管理员")},B=a=>{const e=a.type==="image/jpeg"||a.type==="image/png",n=a.size/1024/1024<2;return e||d.error("上传头像图片只能是 JPG/PNG 格式!"),n||d.error("上传头像图片大小不能超过 2MB!"),e&&n};return(a,e)=>{const n=s("el-button"),D=s("el-col"),_=s("el-row"),G=s("Plus"),j=s("el-icon"),E=s("el-upload"),I=s("el-text"),g=s("el-radio"),J=s("el-radio-group"),m=s("el-form-item"),L=s("el-cascader"),v=s("el-input"),M=s("el-form"),b=s("el-dialog");return f(),y(R,null,[o(_,{class:"top",justify:"space-between"},{default:t(()=>[e[9]||(e[9]=c("h2",null,"个人信息",-1)),o(D,{span:6},{default:t(()=>[o(n,{type:"danger",onClick:U},{default:t(()=>e[8]||(e[8]=[u("注销账号")])),_:1})]),_:1})]),_:1}),o(_,{class:"body"},{default:t(()=>[o(E,{class:"avatar-uploader",action:"http://localhost:8080/file/upload","show-file-list":!1,"on-success":P,"before-upload":B},{default:t(()=>[l.avatar?(f(),y("img",{key:0,width:"100px",height:"100px",src:l.avatar,class:"avatar"},null,8,K)):(f(),q(j,{key:1,class:"avatar-uploader-icon"},{default:t(()=>[o(G)]),_:1}))]),_:1}),o(I,{class:"phone"},{default:t(()=>[u(z(l.username),1)]),_:1}),o(M,{"label-width":"auto",style:{"max-width":"600px"}},{default:t(()=>[o(m,{label:"性别"},{default:t(()=>[o(J,{modelValue:l.gender,"onUpdate:modelValue":e[0]||(e[0]=r=>l.gender=r)},{default:t(()=>[o(g,{label:"男"},{default:t(()=>e[10]||(e[10]=[u("男")])),_:1}),o(g,{label:"女"},{default:t(()=>e[11]||(e[11]=[u("女")])),_:1})]),_:1},8,["modelValue"])]),_:1}),o(m,{label:"地区"},{default:t(()=>[o(L,{options:O(T),modelValue:l.address,"onUpdate:modelValue":e[1]||(e[1]=r=>l.address=r),placeholder:"请选择地区",props:{checkStrictly:!0}},null,8,["options","modelValue"])]),_:1}),o(m,{label:"绑定手机"},{default:t(()=>[o(v,{modelValue:l.mobile,"onUpdate:modelValue":e[2]||(e[2]=r=>l.mobile=r),placeholder:"请输入手机号"},null,8,["modelValue"])]),_:1}),o(m,{label:"绑定邮箱"},{default:t(()=>[o(v,{modelValue:l.email,"onUpdate:modelValue":e[3]||(e[3]=r=>l.email=r),placeholder:"请输入邮箱"},null,8,["modelValue"])]),_:1}),o(m,{style:{"margin-top":"30px"}},{default:t(()=>[o(n,{onClick:C,style:{"margin-left":"100px"}},{default:t(()=>e[12]||(e[12]=[u("保存信息")])),_:1})]),_:1})]),_:1}),o(b,{modelValue:p.value,"onUpdate:modelValue":e[5]||(e[5]=r=>p.value=r),title:"确认注销",width:"500px","custom-class":"custom-dialog"},{footer:t(()=>[o(n,{onClick:e[4]||(e[4]=r=>p.value=!1)},{default:t(()=>e[13]||(e[13]=[u("取消")])),_:1}),o(n,{type:"danger",onClick:N},{default:t(()=>e[14]||(e[14]=[u("确认注销")])),_:1})]),default:t(()=>[e[15]||(e[15]=c("span",null,"确定要注销账号吗?",-1))]),_:1},8,["modelValue"]),o(b,{modelValue:i.value,"onUpdate:modelValue":e[7]||(e[7]=r=>i.value=r),title:"确认保存",width:"500px"},{footer:t(()=>[o(n,{onClick:e[6]||(e[6]=r=>i.value=!1)},{default:t(()=>e[16]||(e[16]=[u("取消")])),_:1}),o(n,{type:"primary",onClick:S},{default:t(()=>e[17]||(e[17]=[u("确认")])),_:1})]),default:t(()=>[e[18]||(e[18]=c("span",null,"信息已修改,是否保存更改?",-1))]),_:1},8,["modelValue"])]),_:1})],64)}}});export{h as default};

@ -0,0 +1 @@
import{h as A,u as F,i as V,r as $,E as d,a as s,o as f,c as y,b as o,w as t,d as c,e as u,k as q,t as z,f as O,F as R}from"./index-C_wsH6hR.js";import{b as T}from"./element-china-area-data-BVDNhPol.js";import{r as x}from"./request-B_OZoDD8.js";import{u as H}from"./user-Bk7shoKN.js";const K=["src"],h=A({__name:"myinfo",setup(Q){const k=H(),w=F(),p=V(!1),i=V(!1),l=$({username:"",gender:"",address:[],mobile:"",avatar:"",email:""});x.get("http://localhost:8080/user/info").then(a=>{if(a.data.code=="200"){const e=a.data.data;l.username=e.username,l.gender=e.gender,l.address=e.address?e.address.split(" "):[],l.mobile=e.mobile,l.avatar=e.avatar,l.email=e.email}}).catch(a=>{console.error("请求用户信息失败:",a),d.error("请求用户信息失败,请检查网络连接或联系管理员。")});const C=()=>{i.value=!0},S=()=>{x.post("http://localhost:8080/user",{username:l.username,gender:l.gender,address:l.address.join(" "),mobile:l.mobile,email:l.email,avatar:l.avatar}).then(a=>{if(a.data.code=="200"){let e=JSON.parse(localStorage.getItem("user")||"{}");e.avatar=l.avatar,k.setUser(l),d.success("个人信息保存成功")}else d.error("个人信息保存失败")}).catch(a=>{console.error("保存信息失败:",a),d.error("保存信息失败,请稍后再试")}),i.value=!1},U=()=>{p.value=!0},N=()=>{w.push("/login"),localStorage.removeItem("user"),d.success("退出成功")},P=a=>{a&&a.data?(l.avatar=a.data,d.success("头像上传成功")):d.error("上传失败,请联系管理员")},B=a=>{const e=a.type==="image/jpeg"||a.type==="image/png",n=a.size/1024/1024<2;return e||d.error("上传头像图片只能是 JPG/PNG 格式!"),n||d.error("上传头像图片大小不能超过 2MB!"),e&&n};return(a,e)=>{const n=s("el-button"),D=s("el-col"),_=s("el-row"),G=s("Plus"),j=s("el-icon"),E=s("el-upload"),I=s("el-text"),g=s("el-radio"),J=s("el-radio-group"),m=s("el-form-item"),L=s("el-cascader"),v=s("el-input"),M=s("el-form"),b=s("el-dialog");return f(),y(R,null,[o(_,{class:"top",justify:"space-between"},{default:t(()=>[e[9]||(e[9]=c("h2",null,"个人信息",-1)),o(D,{span:6},{default:t(()=>[o(n,{type:"danger",onClick:U},{default:t(()=>e[8]||(e[8]=[u("注销账号")])),_:1})]),_:1})]),_:1}),o(_,{class:"body"},{default:t(()=>[o(E,{class:"avatar-uploader",action:"http://localhost:8080/file/upload","show-file-list":!1,"on-success":P,"before-upload":B},{default:t(()=>[l.avatar?(f(),y("img",{key:0,width:"100px",height:"100px",src:l.avatar,class:"avatar"},null,8,K)):(f(),q(j,{key:1,class:"avatar-uploader-icon"},{default:t(()=>[o(G)]),_:1}))]),_:1}),o(I,{class:"phone"},{default:t(()=>[u(z(l.username),1)]),_:1}),o(M,{"label-width":"auto",style:{"max-width":"600px"}},{default:t(()=>[o(m,{label:"性别"},{default:t(()=>[o(J,{modelValue:l.gender,"onUpdate:modelValue":e[0]||(e[0]=r=>l.gender=r)},{default:t(()=>[o(g,{label:"男"},{default:t(()=>e[10]||(e[10]=[u("男")])),_:1}),o(g,{label:"女"},{default:t(()=>e[11]||(e[11]=[u("女")])),_:1})]),_:1},8,["modelValue"])]),_:1}),o(m,{label:"地区"},{default:t(()=>[o(L,{options:O(T),modelValue:l.address,"onUpdate:modelValue":e[1]||(e[1]=r=>l.address=r),placeholder:"请选择地区",props:{checkStrictly:!0}},null,8,["options","modelValue"])]),_:1}),o(m,{label:"绑定手机"},{default:t(()=>[o(v,{modelValue:l.mobile,"onUpdate:modelValue":e[2]||(e[2]=r=>l.mobile=r),placeholder:"请输入手机号"},null,8,["modelValue"])]),_:1}),o(m,{label:"绑定邮箱"},{default:t(()=>[o(v,{modelValue:l.email,"onUpdate:modelValue":e[3]||(e[3]=r=>l.email=r),placeholder:"请输入邮箱"},null,8,["modelValue"])]),_:1}),o(m,{style:{"margin-top":"30px"}},{default:t(()=>[o(n,{onClick:C,style:{"margin-left":"100px"}},{default:t(()=>e[12]||(e[12]=[u("保存信息")])),_:1})]),_:1})]),_:1}),o(b,{modelValue:p.value,"onUpdate:modelValue":e[5]||(e[5]=r=>p.value=r),title:"确认注销",width:"500px","custom-class":"custom-dialog"},{footer:t(()=>[o(n,{onClick:e[4]||(e[4]=r=>p.value=!1)},{default:t(()=>e[13]||(e[13]=[u("取消")])),_:1}),o(n,{type:"danger",onClick:N},{default:t(()=>e[14]||(e[14]=[u("确认注销")])),_:1})]),default:t(()=>[e[15]||(e[15]=c("span",null,"确定要注销账号吗?",-1))]),_:1},8,["modelValue"]),o(b,{modelValue:i.value,"onUpdate:modelValue":e[7]||(e[7]=r=>i.value=r),title:"确认保存",width:"500px"},{footer:t(()=>[o(n,{onClick:e[6]||(e[6]=r=>i.value=!1)},{default:t(()=>e[16]||(e[16]=[u("取消")])),_:1}),o(n,{type:"primary",onClick:S},{default:t(()=>e[17]||(e[17]=[u("确认")])),_:1})]),default:t(()=>[e[18]||(e[18]=c("span",null,"信息已修改,是否保存更改?",-1))]),_:1},8,["modelValue"])]),_:1})],64)}}});export{h as default};

@ -0,0 +1 @@
import{_ as S,i as v,a as i,o as b,k as x,w as o,b as l,e as _,t as $,E as u}from"./index-C_wsH6hR.js";const B={__name:"notice",setup(L){const a=v([]),t=v({title:"",content:""}),d=v(!1),r=v(null),y=()=>{t.value.title&&t.value.content?(a.value.push({id:Date.now(),title:t.value.title,content:t.value.content,timestamp:new Date().toLocaleString()}),u.success("通知发布成功!"),w()):u.error("请填写完整的通知信息!")},g=n=>{t.value.title=n.title,t.value.content=n.content,d.value=!0,r.value=n.id},N=()=>{if(t.value.title&&t.value.content&&r.value){const n=a.value.findIndex(e=>e.id===r.value);n>-1?(a.value[n].title=t.value.title,a.value[n].content=t.value.content,a.value[n].timestamp=new Date().toLocaleString(),u.success("通知更新成功!"),w()):u.error("更新失败,通知未找到!")}else u.error("请填写完整的通知信息!")},V=n=>{const e=a.value.findIndex(f=>f.id===n);e>-1?(a.value.splice(e,1),u.success("通知删除成功!")):u.error("删除失败,通知未找到!")},w=()=>{t.value.title="",t.value.content="",d.value=!1,r.value=null};return(n,e)=>{const f=i("el-text"),C=i("el-col"),c=i("el-row"),k=i("el-input"),m=i("el-button"),p=i("el-table-column"),D=i("el-table"),I=i("el-alert");return b(),x(c,{class:"page"},{default:o(()=>[l(c,{class:"block-view"},{default:o(()=>[l(c,{class:"top"},{default:o(()=>[l(C,null,{default:o(()=>[l(f,{class:"mx-1"},{default:o(()=>e[3]||(e[3]=[_("系统通知管理")])),_:1})]),_:1})]),_:1}),l(c,{class:"publish"},{default:o(()=>[l(k,{placeholder:"输入通知标题",modelValue:t.value.title,"onUpdate:modelValue":e[0]||(e[0]=s=>t.value.title=s),class:"notification-input",clearable:""},null,8,["modelValue"]),l(k,{type:"textarea",placeholder:"输入通知内容",modelValue:t.value.content,"onUpdate:modelValue":e[1]||(e[1]=s=>t.value.content=s),class:"notification-input",clearable:""},null,8,["modelValue"]),l(m,{type:"primary",onClick:e[2]||(e[2]=s=>d.value?N():y())},{default:o(()=>[_($(d.value?"保存编辑":"发布通知"),1)]),_:1})]),_:1}),a.value.length>0?(b(),x(c,{key:0,class:"notice-list"},{default:o(()=>[l(D,{data:a.value,style:{width:"100%"}},{default:o(()=>[l(p,{prop:"title",label:"通知标题"}),l(p,{prop:"content",label:"通知内容"}),l(p,{prop:"timestamp",label:"时间"}),l(p,{label:"操作"},{default:o(s=>[l(m,{onClick:E=>g(s.row),type:"text"},{default:o(()=>e[4]||(e[4]=[_("编辑")])),_:2},1032,["onClick"]),l(m,{onClick:E=>V(s.row.id),type:"text",style:{color:"red"}},{default:o(()=>e[5]||(e[5]=[_("删除")])),_:2},1032,["onClick"])]),_:1})]),_:1},8,["data"])]),_:1})):(b(),x(I,{key:1,title:"暂无通知",type:"info"}))]),_:1})]),_:1})}}},F=S(B,[["__scopeId","data-v-7b29c2b8"]]);export{F as default};

@ -0,0 +1 @@
import{_ as B,i as v,a as s,o as b,k as w,w as o,b as e,d as E,e as x,t as S,E as c}from"./index-C_wsH6hR.js";const $={__name:"notice",setup(L){const a=v([]),l=v({title:"",content:""}),d=v(!1),r=v(null),k=()=>{l.value.title&&l.value.content?(a.value.push({id:Date.now(),title:l.value.title,content:l.value.content,timestamp:new Date().toLocaleString()}),c.success("通知发布成功!"),y()):c.error("请填写完整的通知信息!")},N=n=>{l.value.title=n.title,l.value.content=n.content,d.value=!0,r.value=n.id},V=()=>{if(l.value.title&&l.value.content&&r.value){const n=a.value.findIndex(t=>t.id===r.value);n>-1?(a.value[n].title=l.value.title,a.value[n].content=l.value.content,a.value[n].timestamp=new Date().toLocaleString(),c.success("通知更新成功!"),y()):c.error("更新失败,通知未找到!")}else c.error("请填写完整的通知信息!")},C=n=>{const t=a.value.findIndex(f=>f.id===n);t>-1?(a.value.splice(t,1),c.success("通知删除成功!")):c.error("删除失败,通知未找到!")},y=()=>{l.value.title="",l.value.content="",d.value=!1,r.value=null};return(n,t)=>{const f=s("el-text"),p=s("el-col"),u=s("el-row"),g=s("el-input"),m=s("el-button"),z=s("el-card"),_=s("el-table-column"),D=s("el-table"),I=s("el-alert");return b(),w(u,{class:"page"},{default:o(()=>[e(u,{class:"block-view"},{default:o(()=>[e(u,{class:"top"},{default:o(()=>[e(p,null,{default:o(()=>[e(f,{class:"mx-1"},{default:o(()=>t[3]||(t[3]=[E("h2",null,"系统通知管理",-1)])),_:1})]),_:1})]),_:1}),e(z,{class:"publish",shadow:"hover"},{default:o(()=>[e(u,{gutter:"{20}",style:{display:"flex"}},{default:o(()=>[e(p,{span:20,class:"center-col"},{default:o(()=>[e(g,{placeholder:"请输入通知标题",modelValue:l.value.title,"onUpdate:modelValue":t[0]||(t[0]=i=>l.value.title=i),clearable:"",size:"medium",class:"notification-input"},null,8,["modelValue"])]),_:1}),e(p),e(p,{span:24,class:"center-col"},{default:o(()=>[e(g,{type:"textarea",placeholder:"请输入通知内容",modelValue:l.value.content,"onUpdate:modelValue":t[1]||(t[1]=i=>l.value.content=i),clearable:"",size:"large",class:"notification-input"},null,8,["modelValue"])]),_:1})]),_:1}),e(m,{type:"primary",onClick:t[2]||(t[2]=i=>d.value?V():k()),class:"submit-btn",size:"large"},{default:o(()=>[x(S(d.value?"保存编辑":"发布通知"),1)]),_:1})]),_:1}),a.value.length>0?(b(),w(u,{key:0,class:"notice-list"},{default:o(()=>[e(D,{data:a.value,stripe:"",style:{width:"100%"},border:""},{default:o(()=>[e(_,{prop:"title",label:"通知标题",width:"220"}),e(_,{prop:"content",label:"通知内容"}),e(_,{prop:"timestamp",label:"发布时间",width:"180"}),e(_,{label:"操作",width:"180"},{default:o(i=>[e(m,{onClick:h=>N(i.row),type:"text",icon:"el-icon-edit",size:"small",class:"edit-btn"},{default:o(()=>t[4]||(t[4]=[x("编辑")])),_:2},1032,["onClick"]),e(m,{onClick:h=>C(i.row.id),type:"text",icon:"el-icon-delete",size:"small",class:"delete-btn"},{default:o(()=>t[5]||(t[5]=[x("删除")])),_:2},1032,["onClick"])]),_:1})]),_:1},8,["data"])]),_:1})):(b(),w(I,{key:1,title:"暂无通知",type:"info","show-icon":""}))]),_:1})]),_:1})}}},F=B($,[["__scopeId","data-v-64401559"]]);export{F as default};

@ -0,0 +1 @@
.page[data-v-7b29c2b8]{display:flex;flex-direction:column;width:100%;background-color:#fff;line-height:20px}.block-view[data-v-7b29c2b8]{width:100%;display:flex;flex-direction:column;padding:20px}.top[data-v-7b29c2b8]{display:flex;flex-direction:row;justify-content:flex-start;color:gray}.publish[data-v-7b29c2b8]{margin-bottom:20px}.notification-input[data-v-7b29c2b8]{margin-bottom:10px;width:100%}.notice-list[data-v-7b29c2b8]{margin-top:20px}

@ -0,0 +1 @@
.page[data-v-64401559]{display:flex;flex-direction:column;width:100%;background-color:#f9f9f9;line-height:20px}.block-view[data-v-64401559]{display:flex;flex-direction:column;padding:20px;background-color:#fff;border-radius:8px;box-shadow:0 4px 6px #0000001a}.top[data-v-64401559]{color:#333;margin-bottom:20px}.publish[data-v-64401559]{margin-bottom:30px;background-color:#fafafa;padding:20px;border-radius:8px;box-shadow:0 2px 4px #0000001a}.notification-input[data-v-64401559]{margin-bottom:10px;width:100%;background-color:#f5f5f5}.submit-btn[data-v-64401559]{width:100%}.notice-list[data-v-64401559]{margin-top:20px}.el-button[data-v-64401559]{font-size:14px}.edit-btn[data-v-64401559],.delete-btn[data-v-64401559]{transition:color .3s}.edit-btn[data-v-64401559]:hover{color:#409eff}.delete-btn[data-v-64401559]:hover{color:#f56c6c}.el-table[data-v-64401559]{border-radius:8px;overflow:hidden}.el-table th[data-v-64401559]{background-color:#f2f2f2}.el-table .cell[data-v-64401559]{white-space:normal}.el-alert[data-v-64401559]{margin-top:20px}.center-col[data-v-64401559]{display:flex;justify-content:center;align-items:center;height:70px;width:100%}

@ -0,0 +1 @@
import{h as A,u as F,i as V,r as $,E as d,a as s,o as f,c as y,b as o,w as t,d as c,e as u,k as q,t as z,f as O,F as R}from"./index-C_wsH6hR.js";import{b as T}from"./element-china-area-data-BVDNhPol.js";import{r as x}from"./request-B_OZoDD8.js";import{u as H}from"./user-Bk7shoKN.js";const K=["src"],h=A({__name:"personalCenter",setup(Q){const k=H(),C=F(),p=V(!1),i=V(!1),l=$({username:"",gender:"",address:[],mobile:"",avatar:"",email:""});x.get("http://localhost:8080/user/info").then(a=>{if(a.data.code=="200"){const e=a.data.data;l.username=e.username,l.gender=e.gender,l.address=e.address?e.address.split(" "):[],l.mobile=e.mobile,l.avatar=e.avatar,l.email=e.email}}).catch(a=>{console.error("请求用户信息失败:",a),d.error("请求用户信息失败,请检查网络连接或联系管理员。")});const w=()=>{i.value=!0},S=()=>{x.post("http://localhost:8080/user",{username:l.username,gender:l.gender,address:l.address.join(" "),mobile:l.mobile,email:l.email,avatar:l.avatar}).then(a=>{if(a.data.code=="200"){let e=JSON.parse(localStorage.getItem("user")||"{}");e.avatar=l.avatar,k.setUser(l),d.success("个人信息保存成功")}else d.error("个人信息保存失败")}).catch(a=>{console.error("保存信息失败:",a),d.error("保存信息失败,请稍后再试")}),i.value=!1},U=()=>{p.value=!0},N=()=>{C.push("/login"),localStorage.removeItem("user"),d.success("退出成功")},P=a=>{a&&a.data?(l.avatar=a.data,d.success("头像上传成功")):d.error("上传失败,请联系管理员")},B=a=>{const e=a.type==="image/jpeg"||a.type==="image/png",n=a.size/1024/1024<2;return e||d.error("上传头像图片只能是 JPG/PNG 格式!"),n||d.error("上传头像图片大小不能超过 2MB!"),e&&n};return(a,e)=>{const n=s("el-button"),D=s("el-col"),_=s("el-row"),G=s("Plus"),j=s("el-icon"),E=s("el-upload"),I=s("el-text"),g=s("el-radio"),J=s("el-radio-group"),m=s("el-form-item"),L=s("el-cascader"),v=s("el-input"),M=s("el-form"),b=s("el-dialog");return f(),y(R,null,[o(_,{class:"top",justify:"space-between"},{default:t(()=>[e[9]||(e[9]=c("h2",null,"个人信息",-1)),o(D,{span:6},{default:t(()=>[o(n,{type:"danger",onClick:U},{default:t(()=>e[8]||(e[8]=[u("注销账号")])),_:1})]),_:1})]),_:1}),o(_,{class:"body"},{default:t(()=>[o(E,{class:"avatar-uploader",action:"http://localhost:8080/file/upload","show-file-list":!1,"on-success":P,"before-upload":B},{default:t(()=>[l.avatar?(f(),y("img",{key:0,width:"100px",height:"100px",src:l.avatar,class:"avatar"},null,8,K)):(f(),q(j,{key:1,class:"avatar-uploader-icon"},{default:t(()=>[o(G)]),_:1}))]),_:1}),o(I,{class:"phone"},{default:t(()=>[u(z(l.username),1)]),_:1}),o(M,{"label-width":"auto",style:{"max-width":"600px"}},{default:t(()=>[o(m,{label:"性别"},{default:t(()=>[o(J,{modelValue:l.gender,"onUpdate:modelValue":e[0]||(e[0]=r=>l.gender=r)},{default:t(()=>[o(g,{label:"男"},{default:t(()=>e[10]||(e[10]=[u("男")])),_:1}),o(g,{label:"女"},{default:t(()=>e[11]||(e[11]=[u("女")])),_:1})]),_:1},8,["modelValue"])]),_:1}),o(m,{label:"地区"},{default:t(()=>[o(L,{options:O(T),modelValue:l.address,"onUpdate:modelValue":e[1]||(e[1]=r=>l.address=r),placeholder:"请选择地区",props:{checkStrictly:!0}},null,8,["options","modelValue"])]),_:1}),o(m,{label:"绑定手机"},{default:t(()=>[o(v,{modelValue:l.mobile,"onUpdate:modelValue":e[2]||(e[2]=r=>l.mobile=r),placeholder:"请输入手机号"},null,8,["modelValue"])]),_:1}),o(m,{label:"绑定邮箱"},{default:t(()=>[o(v,{modelValue:l.email,"onUpdate:modelValue":e[3]||(e[3]=r=>l.email=r),placeholder:"请输入邮箱"},null,8,["modelValue"])]),_:1}),o(m,{style:{"margin-top":"30px"}},{default:t(()=>[o(n,{onClick:w,style:{"margin-left":"100px"}},{default:t(()=>e[12]||(e[12]=[u("保存信息")])),_:1})]),_:1})]),_:1}),o(b,{modelValue:p.value,"onUpdate:modelValue":e[5]||(e[5]=r=>p.value=r),title:"确认注销",width:"500px","custom-class":"custom-dialog"},{footer:t(()=>[o(n,{onClick:e[4]||(e[4]=r=>p.value=!1)},{default:t(()=>e[13]||(e[13]=[u("取消")])),_:1}),o(n,{type:"danger",onClick:N},{default:t(()=>e[14]||(e[14]=[u("确认注销")])),_:1})]),default:t(()=>[e[15]||(e[15]=c("span",null,"确定要注销账号吗?",-1))]),_:1},8,["modelValue"]),o(b,{modelValue:i.value,"onUpdate:modelValue":e[7]||(e[7]=r=>i.value=r),title:"确认保存",width:"500px"},{footer:t(()=>[o(n,{onClick:e[6]||(e[6]=r=>i.value=!1)},{default:t(()=>e[16]||(e[16]=[u("取消")])),_:1}),o(n,{type:"primary",onClick:S},{default:t(()=>e[17]||(e[17]=[u("确认")])),_:1})]),default:t(()=>[e[18]||(e[18]=c("span",null,"信息已修改,是否保存更改?",-1))]),_:1},8,["modelValue"])]),_:1})],64)}}});export{h as default};

@ -0,0 +1 @@
.top{background-color:#fff;height:50px;flex-wrap:nowrap;justify-content:space-between;align-items:center;border-radius:5px;margin-bottom:15px;padding-left:15px}.body{background-color:#fff;display:flex;flex-direction:column;justify-content:center;align-items:center;line-height:0px;height:90vh}.phone{margin-top:20px;font-size:14px;margin-bottom:20px}.avatar-uploader .el-upload{border:1px dashed var(--el-border-color);border-radius:6px;cursor:pointer;position:relative;overflow:hidden;transition:var(--el-transition-duration-fast)}.avatar-uploader .el-upload:hover{border-color:var(--el-color-primary)}.avatar-uploader .avatar{width:100px;height:100px;display:block}.el-icon.avatar-uploader-icon{font-size:28px;color:#8c939d;width:100px;height:100px;text-align:center}

File diff suppressed because one or more lines are too long

@ -0,0 +1 @@
.search-bar[data-v-ca16366d]{width:100%;padding:20px 30px;display:flex;justify-content:flex-start;align-items:center;gap:20px}.search-input[data-v-ca16366d]{width:300px}.demo-pagination-block+.demo-pagination-block[data-v-ca16366d]{margin-top:10px}.avatar-img[data-v-ca16366d]{width:100px;height:100px}

@ -0,0 +1 @@
import{r as U}from"./request-B_OZoDD8.js";import{_ as B,i as E,a as o,o as d,c,d as v,b as l,w as a,k as g,F as N,j as G,t as F,e as M,E as s}from"./index-C_wsH6hR.js";const j={class:"random-exam"},A=["src"],J={__name:"randomCreate",setup(L){const e=E({title:"",typeCounts:{单选题:0,多选题:0,填空题:0,主观题:0},startTime:"",endTime:"",img:""}),V=async()=>{const n={title:e.value.title,typeCounts:e.value.typeCounts,startTime:e.value.startTime,endTime:e.value.endTime,img:e.value.img};try{const t=await U.post("http://localhost:8080/exam/random",n);t.data.code=="200"?s.success("随机组卷成功!"):s.error(t.data.msg||"随机组卷失败!")}catch(t){console.error("提交失败:",t),s.error("随机组卷失败!")}},y=n=>{n&&n.data?(e.value.img=n.data,s.success("头像上传成功")):s.error("上传失败,请联系管理员")},b=n=>{const t=n.type==="image/jpeg"||n.type==="image/png",m=n.size/1024/1024<2;return t||s.error("上传头像图片只能是 JPG/PNG 格式!"),m||s.error("上传头像图片大小不能超过 2MB!"),t&&m};return(n,t)=>{const m=o("Plus"),x=o("el-icon"),C=o("el-upload"),r=o("el-form-item"),T=o("el-input"),p=o("el-date-picker"),_=o("el-row"),f=o("el-col"),h=o("el-input-number"),k=o("el-button"),w=o("el-form");return d(),c("div",j,[t[4]||(t[4]=v("h2",null,"随机组卷",-1)),l(w,{model:e.value,"label-width":"120px"},{default:a(()=>[l(r,{label:"封面图"},{default:a(()=>[l(C,{class:"avatar-uploader",action:"http://localhost:8080/file/upload","show-file-list":!1,"on-success":y,"before-upload":b},{default:a(()=>[e.value.img?(d(),c("img",{key:0,width:"100px",height:"100px",src:e.value.img,class:"avatar"},null,8,A)):(d(),g(x,{key:1,class:"avatar-uploader-icon"},{default:a(()=>[l(m)]),_:1}))]),_:1})]),_:1}),l(_,null,{default:a(()=>[l(r,{label:"试卷标题"},{default:a(()=>[l(T,{modelValue:e.value.title,"onUpdate:modelValue":t[0]||(t[0]=u=>e.value.title=u),placeholder:"请输入试卷标题"},null,8,["modelValue"])]),_:1}),l(r,{label:"开始时间"},{default:a(()=>[l(p,{modelValue:e.value.startTime,"onUpdate:modelValue":t[1]||(t[1]=u=>e.value.startTime=u),type:"datetime",placeholder:"请选择开始时间"},null,8,["modelValue"])]),_:1}),l(r,{label:"结束时间"},{default:a(()=>[l(p,{modelValue:e.value.endTime,"onUpdate:modelValue":t[2]||(t[2]=u=>e.value.endTime=u),type:"datetime",placeholder:"请选择结束时间"},null,8,["modelValue"])]),_:1})]),_:1}),l(r,{label:"题目设置"},{default:a(()=>[(d(!0),c(N,null,G(e.value.typeCounts,(u,i)=>(d(),g(_,{gutter:20,key:i},{default:a(()=>[l(f,{span:8},{default:a(()=>[v("span",null,F(i)+"",1)]),_:2},1024),l(f,{span:8},{default:a(()=>[l(h,{modelValue:e.value.typeCounts[i],"onUpdate:modelValue":P=>e.value.typeCounts[i]=P,min:0,placeholder:"题目数量"},null,8,["modelValue","onUpdate:modelValue"])]),_:2},1024)]),_:2},1024))),128))]),_:1}),l(r,null,{default:a(()=>[l(k,{type:"primary",onClick:V},{default:a(()=>t[3]||(t[3]=[M("提交")])),_:1})]),_:1})]),_:1},8,["model"])])}}},z=B(J,[["__scopeId","data-v-88e21f76"]]);export{z as default};

@ -0,0 +1 @@
.random-exam[data-v-88e21f76]{width:600px;margin:0 auto;padding:20px;background-color:#fff;border-radius:8px;box-shadow:0 4px 12px #0000001a;height:600px}h2[data-v-88e21f76]{text-align:center;font-size:24px;color:#333;margin-bottom:20px}.el-form-item[data-v-88e21f76]{margin-bottom:20px}.el-input-number[data-v-88e21f76]{width:100%}.avatar-uploader .el-upload[data-v-88e21f76]{border:1px dashed var(--el-border-color);border-radius:6px;cursor:pointer;position:relative;overflow:hidden;transition:var(--el-transition-duration-fast)}.avatar-uploader .el-upload[data-v-88e21f76]:hover{border-color:var(--el-color-primary)}.avatar-uploader .avatar[data-v-88e21f76]{width:100px;height:100px;display:block}.el-icon.avatar-uploader-icon[data-v-88e21f76]{font-size:28px;color:#8c939d;width:100px;height:100px;text-align:center;border:#8c939d solid 1px}

File diff suppressed because one or more lines are too long

@ -0,0 +1 @@
.search-bar[data-v-f3a05954]{width:100%;padding:20px 30px;display:flex;justify-content:flex-start;align-items:center;gap:20px}.search-input[data-v-f3a05954]{width:300px}.demo-pagination-block+.demo-pagination-block[data-v-f3a05954]{margin-top:10px}.avatar-img[data-v-f3a05954]{width:100px;height:100px}

@ -0,0 +1 @@
.search-bar[data-v-37ba2419]{width:100%;padding:20px 30px;display:flex;justify-content:flex-start;align-items:center;gap:20px}.search-input[data-v-37ba2419]{width:300px}.demo-pagination-block+.demo-pagination-block[data-v-37ba2419]{margin-top:10px}.avatar-img[data-v-37ba2419]{width:100px;height:100px}

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

Loading…
Cancel
Save