diff --git a/services/delivery-platform-api/src/main/java/cn/craftlabs/platform/api/persistence/project/PlatformProject.java b/services/delivery-platform-api/src/main/java/cn/craftlabs/platform/api/persistence/project/PlatformProject.java
index 9096a87..af01360 100644
--- a/services/delivery-platform-api/src/main/java/cn/craftlabs/platform/api/persistence/project/PlatformProject.java
+++ b/services/delivery-platform-api/src/main/java/cn/craftlabs/platform/api/persistence/project/PlatformProject.java
@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
+import java.time.LocalDate;
import java.time.OffsetDateTime;
@TableName("platform_project")
@@ -26,6 +27,15 @@ public class PlatformProject {
@TableField("updated_at")
private OffsetDateTime updatedAt;
+ @TableField("planned_start_date")
+ private LocalDate plannedStartDate;
+
+ @TableField("planned_end_date")
+ private LocalDate plannedEndDate;
+
+ @TableField("project_manager")
+ private String projectManager;
+
public Long getId() {
return id;
}
@@ -73,4 +83,28 @@ public class PlatformProject {
public void setUpdatedAt(OffsetDateTime updatedAt) {
this.updatedAt = updatedAt;
}
+
+ public LocalDate getPlannedStartDate() {
+ return plannedStartDate;
+ }
+
+ public void setPlannedStartDate(LocalDate plannedStartDate) {
+ this.plannedStartDate = plannedStartDate;
+ }
+
+ public LocalDate getPlannedEndDate() {
+ return plannedEndDate;
+ }
+
+ public void setPlannedEndDate(LocalDate plannedEndDate) {
+ this.plannedEndDate = plannedEndDate;
+ }
+
+ public String getProjectManager() {
+ return projectManager;
+ }
+
+ public void setProjectManager(String projectManager) {
+ this.projectManager = projectManager;
+ }
}
diff --git a/services/delivery-platform-api/src/main/java/cn/craftlabs/platform/api/service/ProjectService.java b/services/delivery-platform-api/src/main/java/cn/craftlabs/platform/api/service/ProjectService.java
index 72ff3d2..bf2cae0 100644
--- a/services/delivery-platform-api/src/main/java/cn/craftlabs/platform/api/service/ProjectService.java
+++ b/services/delivery-platform-api/src/main/java/cn/craftlabs/platform/api/service/ProjectService.java
@@ -14,6 +14,7 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import org.springframework.web.server.ResponseStatusException;
+import java.time.LocalDate;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.util.List;
@@ -53,6 +54,9 @@ public class ProjectService {
p.setCustomerId(request.getCustomerId());
p.setName(request.getName().trim());
p.setPhase(resolvePhase(request.getPhase()));
+ if (request.getPlannedStartDate() != null) p.setPlannedStartDate(LocalDate.parse(request.getPlannedStartDate()));
+ if (request.getPlannedEndDate() != null) p.setPlannedEndDate(LocalDate.parse(request.getPlannedEndDate()));
+ if (request.getProjectManager() != null) p.setProjectManager(request.getProjectManager().trim());
p.setCreatedAt(now);
p.setUpdatedAt(now);
projectMapper.insert(p);
@@ -80,6 +84,9 @@ public class ProjectService {
if (StringUtils.hasText(request.getPhase())) {
p.setPhase(request.getPhase().trim());
}
+ if (request.getPlannedStartDate() != null) p.setPlannedStartDate(LocalDate.parse(request.getPlannedStartDate()));
+ if (request.getPlannedEndDate() != null) p.setPlannedEndDate(LocalDate.parse(request.getPlannedEndDate()));
+ if (request.getProjectManager() != null) p.setProjectManager(request.getProjectManager().trim());
p.setUpdatedAt(OffsetDateTime.now(ZoneOffset.UTC));
projectMapper.updateById(p);
return toResponse(p);
@@ -104,6 +111,9 @@ public class ProjectService {
r.setCustomerId(p.getCustomerId());
r.setName(p.getName());
r.setPhase(p.getPhase());
+ r.setPlannedStartDate(p.getPlannedStartDate() != null ? p.getPlannedStartDate().toString() : null);
+ r.setPlannedEndDate(p.getPlannedEndDate() != null ? p.getPlannedEndDate().toString() : null);
+ r.setProjectManager(p.getProjectManager());
r.setCreatedAt(p.getCreatedAt());
r.setUpdatedAt(p.getUpdatedAt());
return r;
diff --git a/services/delivery-platform-api/src/main/java/cn/craftlabs/platform/api/web/dto/ProjectRequest.java b/services/delivery-platform-api/src/main/java/cn/craftlabs/platform/api/web/dto/ProjectRequest.java
index ba5c735..9f8a7cd 100644
--- a/services/delivery-platform-api/src/main/java/cn/craftlabs/platform/api/web/dto/ProjectRequest.java
+++ b/services/delivery-platform-api/src/main/java/cn/craftlabs/platform/api/web/dto/ProjectRequest.java
@@ -16,6 +16,13 @@ public class ProjectRequest {
@Size(max = 64)
private String phase;
+ @Size(max = 128)
+ private String projectManager;
+
+ private String plannedStartDate;
+
+ private String plannedEndDate;
+
public Long getCustomerId() {
return customerId;
}
@@ -39,4 +46,28 @@ public class ProjectRequest {
public void setPhase(String phase) {
this.phase = phase;
}
+
+ public String getProjectManager() {
+ return projectManager;
+ }
+
+ public void setProjectManager(String projectManager) {
+ this.projectManager = projectManager;
+ }
+
+ public String getPlannedStartDate() {
+ return plannedStartDate;
+ }
+
+ public void setPlannedStartDate(String plannedStartDate) {
+ this.plannedStartDate = plannedStartDate;
+ }
+
+ public String getPlannedEndDate() {
+ return plannedEndDate;
+ }
+
+ public void setPlannedEndDate(String plannedEndDate) {
+ this.plannedEndDate = plannedEndDate;
+ }
}
diff --git a/services/delivery-platform-api/src/main/java/cn/craftlabs/platform/api/web/dto/ProjectResponse.java b/services/delivery-platform-api/src/main/java/cn/craftlabs/platform/api/web/dto/ProjectResponse.java
index 3e8e5fc..6ebef44 100644
--- a/services/delivery-platform-api/src/main/java/cn/craftlabs/platform/api/web/dto/ProjectResponse.java
+++ b/services/delivery-platform-api/src/main/java/cn/craftlabs/platform/api/web/dto/ProjectResponse.java
@@ -8,6 +8,9 @@ public class ProjectResponse {
private Long customerId;
private String name;
private String phase;
+ private String plannedStartDate;
+ private String plannedEndDate;
+ private String projectManager;
private OffsetDateTime createdAt;
private OffsetDateTime updatedAt;
@@ -43,6 +46,30 @@ public class ProjectResponse {
this.phase = phase;
}
+ public String getPlannedStartDate() {
+ return plannedStartDate;
+ }
+
+ public void setPlannedStartDate(String plannedStartDate) {
+ this.plannedStartDate = plannedStartDate;
+ }
+
+ public String getPlannedEndDate() {
+ return plannedEndDate;
+ }
+
+ public void setPlannedEndDate(String plannedEndDate) {
+ this.plannedEndDate = plannedEndDate;
+ }
+
+ public String getProjectManager() {
+ return projectManager;
+ }
+
+ public void setProjectManager(String projectManager) {
+ this.projectManager = projectManager;
+ }
+
public OffsetDateTime getCreatedAt() {
return createdAt;
}
diff --git a/web/delivery-platform-ui/src/views/ProjectsView.vue b/web/delivery-platform-ui/src/views/ProjectsView.vue
index fadac51..8f2b7cc 100644
--- a/web/delivery-platform-ui/src/views/ProjectsView.vue
+++ b/web/delivery-platform-ui/src/views/ProjectsView.vue
@@ -85,6 +85,15 @@
+
+
+
+
+
+
+
+
+
取消
@@ -129,6 +138,9 @@ const form = reactive({
customerId: undefined,
name: "",
phase: "",
+ plannedStartDate: "",
+ plannedEndDate: "",
+ projectManager: "",
});
const rules = {
@@ -254,6 +266,9 @@ function openEdit(row) {
form.name = row.name ?? "";
const ph = row.phase;
form.phase = ph == null ? "" : String(ph);
+ form.plannedStartDate = row.plannedStartDate ?? "";
+ form.plannedEndDate = row.plannedEndDate ?? "";
+ form.projectManager = row.projectManager ?? "";
dialogVisible.value = true;
}
@@ -261,6 +276,9 @@ function resetForm() {
form.customerId = undefined;
form.name = "";
form.phase = "";
+ form.plannedStartDate = "";
+ form.plannedEndDate = "";
+ form.projectManager = "";
formRef.value?.resetFields?.();
}
@@ -277,6 +295,9 @@ async function submit() {
customerId: form.customerId,
name: form.name.trim(),
phase: form.phase,
+ plannedStartDate: form.plannedStartDate || null,
+ plannedEndDate: form.plannedEndDate || null,
+ projectManager: form.projectManager || null,
};
try {
if (editingId.value != null) {