diff --git a/backend/pom.xml b/backend/pom.xml
new file mode 100644
index 0000000..8996a9d
--- /dev/null
+++ b/backend/pom.xml
@@ -0,0 +1,92 @@
+
+
+ 4.0.0
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 3.2.3
+
+
+
+ com.innovation
+ innovation-platform
+ 1.0.0
+ innovation-platform
+ 高校创新创业项目孵化平台
+
+
+ 17
+ 3.5.5
+ 1.37.0
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.springframework.boot
+ spring-boot-starter-validation
+
+
+ org.springframework.boot
+ spring-boot-starter-aop
+
+
+ com.mysql
+ mysql-connector-j
+ runtime
+
+
+ com.baomidou
+ mybatis-plus-spring-boot3-starter
+ ${mybatis-plus.version}
+
+
+ cn.dev33
+ sa-token-spring-boot3-starter
+ ${sa-token.version}
+
+
+ org.projectlombok
+ lombok
+ true
+
+
+ cn.hutool
+ hutool-all
+ 5.8.25
+
+
+ com.github.xiaoymin
+ knife4j-openapi3-jakarta-spring-boot-starter
+ 4.4.0
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+ org.projectlombok
+ lombok
+
+
+
+
+
+
+
diff --git a/backend/src/main/java/com/innovation/platform/InnovationPlatformApplication.java b/backend/src/main/java/com/innovation/platform/InnovationPlatformApplication.java
new file mode 100644
index 0000000..cdc86b9
--- /dev/null
+++ b/backend/src/main/java/com/innovation/platform/InnovationPlatformApplication.java
@@ -0,0 +1,16 @@
+package com.innovation.platform;
+
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+/**
+ * 高校创新创业项目孵化平台启动类
+ */
+@SpringBootApplication
+@MapperScan("com.innovation.platform.mapper")
+public class InnovationPlatformApplication {
+ public static void main(String[] args) {
+ SpringApplication.run(InnovationPlatformApplication.class, args);
+ }
+}
diff --git a/backend/src/main/java/com/innovation/platform/common/PageResult.java b/backend/src/main/java/com/innovation/platform/common/PageResult.java
new file mode 100644
index 0000000..e6b70dd
--- /dev/null
+++ b/backend/src/main/java/com/innovation/platform/common/PageResult.java
@@ -0,0 +1,28 @@
+package com.innovation.platform.common;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import lombok.Data;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 分页结果
+ */
+@Data
+public class PageResult implements Serializable {
+ private List records;
+ private Long total;
+ private Long size;
+ private Long current;
+ private Long pages;
+
+ public static PageResult of(IPage page) {
+ PageResult result = new PageResult<>();
+ result.setRecords(page.getRecords());
+ result.setTotal(page.getTotal());
+ result.setSize(page.getSize());
+ result.setCurrent(page.getCurrent());
+ result.setPages(page.getPages());
+ return result;
+ }
+}
diff --git a/backend/src/main/java/com/innovation/platform/common/Result.java b/backend/src/main/java/com/innovation/platform/common/Result.java
new file mode 100644
index 0000000..b17e8e7
--- /dev/null
+++ b/backend/src/main/java/com/innovation/platform/common/Result.java
@@ -0,0 +1,56 @@
+package com.innovation.platform.common;
+
+import lombok.Data;
+import java.io.Serializable;
+
+/**
+ * 统一响应结果
+ */
+@Data
+public class Result implements Serializable {
+ private Integer code;
+ private String message;
+ private T data;
+ private Long timestamp;
+
+ public Result() {
+ this.timestamp = System.currentTimeMillis();
+ }
+
+ public static Result success() {
+ Result result = new Result<>();
+ result.setCode(200);
+ result.setMessage("操作成功");
+ return result;
+ }
+
+ public static Result success(T data) {
+ Result result = new Result<>();
+ result.setCode(200);
+ result.setMessage("操作成功");
+ result.setData(data);
+ return result;
+ }
+
+ public static Result success(String message, T data) {
+ Result result = new Result<>();
+ result.setCode(200);
+ result.setMessage(message);
+ result.setData(data);
+ return result;
+ }
+
+ public static Result error(String message) {
+ Result result = new Result<>();
+ result.setCode(500);
+ result.setMessage(message);
+ return result;
+ }
+
+ public static Result error(Integer code, String message) {
+ Result result = new Result<>();
+ result.setCode(code);
+ result.setMessage(message);
+ return result;
+ }
+}
diff --git a/backend/src/main/java/com/innovation/platform/entity/Achievement.java b/backend/src/main/java/com/innovation/platform/entity/Achievement.java
new file mode 100644
index 0000000..8bb9a47
--- /dev/null
+++ b/backend/src/main/java/com/innovation/platform/entity/Achievement.java
@@ -0,0 +1,30 @@
+package com.innovation.platform.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * 成果实体
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("achievement")
+public class Achievement extends BaseEntity {
+ private Long projectId;
+ private Integer achievementType;
+ private String achievementName;
+ private Integer achievementLevel;
+ private String authorNames;
+ private LocalDate publishTime;
+ private String publishOrg;
+ private String description;
+ private BigDecimal credit;
+ private Integer status;
+ private Long auditorId;
+ private LocalDateTime auditTime;
+ private String auditOpinion;
+}
diff --git a/backend/src/main/java/com/innovation/platform/entity/AchievementAttachment.java b/backend/src/main/java/com/innovation/platform/entity/AchievementAttachment.java
new file mode 100644
index 0000000..a7449cf
--- /dev/null
+++ b/backend/src/main/java/com/innovation/platform/entity/AchievementAttachment.java
@@ -0,0 +1,23 @@
+package com.innovation.platform.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 成果附件实体
+ */
+@Data
+@TableName("achievement_attachment")
+public class AchievementAttachment implements Serializable {
+ private Long id;
+ private Long achievementId;
+ private String fileName;
+ private String filePath;
+ private Long fileSize;
+ private String fileType;
+ private LocalDateTime createTime;
+ private Long createBy;
+ private Integer deleted;
+}
diff --git a/backend/src/main/java/com/innovation/platform/entity/BaseEntity.java b/backend/src/main/java/com/innovation/platform/entity/BaseEntity.java
new file mode 100644
index 0000000..422ec62
--- /dev/null
+++ b/backend/src/main/java/com/innovation/platform/entity/BaseEntity.java
@@ -0,0 +1,30 @@
+package com.innovation.platform.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 基础实体类
+ */
+@Data
+public class BaseEntity implements Serializable {
+ @TableId(type = IdType.AUTO)
+ private Long id;
+
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+
+ @TableField(fill = FieldFill.INSERT)
+ private Long createBy;
+
+ @TableField(fill = FieldFill.UPDATE)
+ private Long updateBy;
+
+ @TableLogic
+ private Integer deleted;
+}
diff --git a/backend/src/main/java/com/innovation/platform/entity/CreditAppeal.java b/backend/src/main/java/com/innovation/platform/entity/CreditAppeal.java
new file mode 100644
index 0000000..f52cb09
--- /dev/null
+++ b/backend/src/main/java/com/innovation/platform/entity/CreditAppeal.java
@@ -0,0 +1,25 @@
+package com.innovation.platform.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * 学分申诉实体
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("credit_appeal")
+public class CreditAppeal extends BaseEntity {
+ private Long creditDetailId;
+ private Long userId;
+ private String appealReason;
+ private String appealEvidence;
+ private Integer status;
+ private Long handlerId;
+ private LocalDateTime handleTime;
+ private String handleResult;
+ private BigDecimal adjustedCredit;
+}
diff --git a/backend/src/main/java/com/innovation/platform/entity/CreditDetail.java b/backend/src/main/java/com/innovation/platform/entity/CreditDetail.java
new file mode 100644
index 0000000..490e7eb
--- /dev/null
+++ b/backend/src/main/java/com/innovation/platform/entity/CreditDetail.java
@@ -0,0 +1,24 @@
+package com.innovation.platform.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import java.math.BigDecimal;
+
+/**
+ * 学分明细实体
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("credit_detail")
+public class CreditDetail extends BaseEntity {
+ private Long userId;
+ private Long projectId;
+ private Long achievementId;
+ private Integer creditSource;
+ private BigDecimal credit;
+ private BigDecimal coefficient;
+ private Long ruleId;
+ private String remark;
+ private Integer status;
+}
diff --git a/backend/src/main/java/com/innovation/platform/entity/CreditRule.java b/backend/src/main/java/com/innovation/platform/entity/CreditRule.java
new file mode 100644
index 0000000..520aa02
--- /dev/null
+++ b/backend/src/main/java/com/innovation/platform/entity/CreditRule.java
@@ -0,0 +1,24 @@
+package com.innovation.platform.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import java.math.BigDecimal;
+
+/**
+ * 学分规则实体
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("credit_rule")
+public class CreditRule extends BaseEntity {
+ private String ruleName;
+ private Integer ruleType;
+ private Integer targetType;
+ private Integer targetLevel;
+ private BigDecimal baseCredit;
+ private BigDecimal leaderCoefficient;
+ private BigDecimal memberCoefficient;
+ private String description;
+ private Integer status;
+}
diff --git a/backend/src/main/java/com/innovation/platform/entity/Project.java b/backend/src/main/java/com/innovation/platform/entity/Project.java
new file mode 100644
index 0000000..e4bb058
--- /dev/null
+++ b/backend/src/main/java/com/innovation/platform/entity/Project.java
@@ -0,0 +1,30 @@
+package com.innovation.platform.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+
+/**
+ * 项目实体
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("project")
+public class Project extends BaseEntity {
+ private String projectNo;
+ private String projectName;
+ private Integer projectType;
+ private Integer projectLevel;
+ private Long leaderId;
+ private Long advisorId;
+ private String description;
+ private String researchPlan;
+ private String expectedResult;
+ private BigDecimal budget;
+ private Integer status;
+ private LocalDate startTime;
+ private LocalDate endTime;
+ private String college;
+}
diff --git a/backend/src/main/java/com/innovation/platform/entity/ProjectAttachment.java b/backend/src/main/java/com/innovation/platform/entity/ProjectAttachment.java
new file mode 100644
index 0000000..e4b4f06
--- /dev/null
+++ b/backend/src/main/java/com/innovation/platform/entity/ProjectAttachment.java
@@ -0,0 +1,24 @@
+package com.innovation.platform.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 项目附件实体
+ */
+@Data
+@TableName("project_attachment")
+public class ProjectAttachment implements Serializable {
+ private Long id;
+ private Long projectId;
+ private String fileName;
+ private String filePath;
+ private Long fileSize;
+ private String fileType;
+ private Integer attachmentType;
+ private LocalDateTime createTime;
+ private Long createBy;
+ private Integer deleted;
+}
diff --git a/backend/src/main/java/com/innovation/platform/entity/ProjectMember.java b/backend/src/main/java/com/innovation/platform/entity/ProjectMember.java
new file mode 100644
index 0000000..37f3044
--- /dev/null
+++ b/backend/src/main/java/com/innovation/platform/entity/ProjectMember.java
@@ -0,0 +1,22 @@
+package com.innovation.platform.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 项目成员实体
+ */
+@Data
+@TableName("project_member")
+public class ProjectMember implements Serializable {
+ private Long id;
+ private Long projectId;
+ private Long userId;
+ private Integer memberOrder;
+ private Integer role;
+ private LocalDateTime joinTime;
+ private LocalDateTime createTime;
+ private Integer deleted;
+}
diff --git a/backend/src/main/java/com/innovation/platform/entity/Review.java b/backend/src/main/java/com/innovation/platform/entity/Review.java
new file mode 100644
index 0000000..49a898a
--- /dev/null
+++ b/backend/src/main/java/com/innovation/platform/entity/Review.java
@@ -0,0 +1,24 @@
+package com.innovation.platform.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * 评审实体
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("review")
+public class Review extends BaseEntity {
+ private Long projectId;
+ private Long reviewerId;
+ private Integer reviewType;
+ private BigDecimal score;
+ private String opinion;
+ private Integer result;
+ private Integer status;
+ private LocalDateTime reviewTime;
+}
diff --git a/backend/src/main/java/com/innovation/platform/entity/ReviewScoreItem.java b/backend/src/main/java/com/innovation/platform/entity/ReviewScoreItem.java
new file mode 100644
index 0000000..a795200
--- /dev/null
+++ b/backend/src/main/java/com/innovation/platform/entity/ReviewScoreItem.java
@@ -0,0 +1,22 @@
+package com.innovation.platform.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * 评审评分项实体
+ */
+@Data
+@TableName("review_score_item")
+public class ReviewScoreItem implements Serializable {
+ private Long id;
+ private Long reviewId;
+ private String itemName;
+ private BigDecimal itemScore;
+ private BigDecimal maxScore;
+ private String itemComment;
+ private LocalDateTime createTime;
+}
diff --git a/backend/src/main/java/com/innovation/platform/entity/StuInfo.java b/backend/src/main/java/com/innovation/platform/entity/StuInfo.java
new file mode 100644
index 0000000..c161aeb
--- /dev/null
+++ b/backend/src/main/java/com/innovation/platform/entity/StuInfo.java
@@ -0,0 +1,23 @@
+package com.innovation.platform.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import java.math.BigDecimal;
+
+/**
+ * 学生信息实体
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("stu_info")
+public class StuInfo extends BaseEntity {
+ private Long userId;
+ private String studentNo;
+ private String college;
+ private String major;
+ private String grade;
+ private String className;
+ private Long advisorId;
+ private BigDecimal totalCredit;
+}
diff --git a/backend/src/main/java/com/innovation/platform/entity/SysConfig.java b/backend/src/main/java/com/innovation/platform/entity/SysConfig.java
new file mode 100644
index 0000000..25c4087
--- /dev/null
+++ b/backend/src/main/java/com/innovation/platform/entity/SysConfig.java
@@ -0,0 +1,18 @@
+package com.innovation.platform.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 系统配置实体
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("sys_config")
+public class SysConfig extends BaseEntity {
+ private String configKey;
+ private String configValue;
+ private String configName;
+ private String description;
+}
diff --git a/backend/src/main/java/com/innovation/platform/entity/SysLog.java b/backend/src/main/java/com/innovation/platform/entity/SysLog.java
new file mode 100644
index 0000000..a64fbb4
--- /dev/null
+++ b/backend/src/main/java/com/innovation/platform/entity/SysLog.java
@@ -0,0 +1,25 @@
+package com.innovation.platform.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 系统日志实体
+ */
+@Data
+@TableName("sys_log")
+public class SysLog implements Serializable {
+ private Long id;
+ private Long userId;
+ private String username;
+ private String operation;
+ private String method;
+ private String params;
+ private String ip;
+ private Long time;
+ private Integer result;
+ private String errorMsg;
+ private LocalDateTime createTime;
+}
diff --git a/backend/src/main/java/com/innovation/platform/entity/SysUser.java b/backend/src/main/java/com/innovation/platform/entity/SysUser.java
new file mode 100644
index 0000000..dea753c
--- /dev/null
+++ b/backend/src/main/java/com/innovation/platform/entity/SysUser.java
@@ -0,0 +1,23 @@
+package com.innovation.platform.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 用户实体
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("sys_user")
+public class SysUser extends BaseEntity {
+ private String username;
+ private String password;
+ private String realName;
+ private Integer gender;
+ private String phone;
+ private String email;
+ private String avatar;
+ private Integer status;
+ private Integer roleType;
+}
diff --git a/backend/src/main/java/com/innovation/platform/entity/TeacherInfo.java b/backend/src/main/java/com/innovation/platform/entity/TeacherInfo.java
new file mode 100644
index 0000000..2f7d518
--- /dev/null
+++ b/backend/src/main/java/com/innovation/platform/entity/TeacherInfo.java
@@ -0,0 +1,19 @@
+package com.innovation.platform.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 教师信息实体
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("teacher_info")
+public class TeacherInfo extends BaseEntity {
+ private Long userId;
+ private String teacherNo;
+ private String college;
+ private String title;
+ private String researchField;
+}
diff --git a/backend/src/main/resources/application.yml b/backend/src/main/resources/application.yml
new file mode 100644
index 0000000..bdf32a6
--- /dev/null
+++ b/backend/src/main/resources/application.yml
@@ -0,0 +1,47 @@
+server:
+ port: 8080
+
+spring:
+ datasource:
+ driver-class-name: com.mysql.cj.jdbc.Driver
+ url: jdbc:mysql://localhost:3306/innovation_platform?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
+ username: root
+ password: root123456
+ jackson:
+ date-format: yyyy-MM-dd HH:mm:ss
+ time-zone: GMT+8
+
+mybatis-plus:
+ mapper-locations: classpath*:/mapper/**/*.xml
+ type-aliases-package: com.innovation.platform.entity
+ global-config:
+ db-config:
+ id-type: auto
+ logic-delete-field: deleted
+ logic-delete-value: 1
+ logic-not-delete-value: 0
+ configuration:
+ map-underscore-to-camel-case: true
+ log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+
+sa-token:
+ token-name: Authorization
+ timeout: 86400
+ active-timeout: -1
+ is-concurrent: true
+ is-share: true
+ token-style: uuid
+ is-log: true
+
+knife4j:
+ enable: true
+ openapi:
+ title: 高校创新创业项目孵化平台API
+ description: 高校创新创业项目孵化平台接口文档
+ version: v1.0.0
+ group:
+ default:
+ group-name: default
+ api-rule: package
+ api-rule-resources:
+ - com.innovation.platform.controller
diff --git a/frontend b/frontend
new file mode 160000
index 0000000..9d26c11
--- /dev/null
+++ b/frontend
@@ -0,0 +1 @@
+Subproject commit 9d26c118759ab7391c5dc031dc4b41b575d4a8ab