diff --git a/services/delivery-platform-api/src/main/java/cn/craftlabs/platform/api/auth/AuthController.java b/services/delivery-platform-api/src/main/java/cn/craftlabs/platform/api/auth/AuthController.java index 19289aa..3841b9f 100644 --- a/services/delivery-platform-api/src/main/java/cn/craftlabs/platform/api/auth/AuthController.java +++ b/services/delivery-platform-api/src/main/java/cn/craftlabs/platform/api/auth/AuthController.java @@ -128,6 +128,26 @@ public class AuthController { return result; } + @PostMapping("/admin/reset-password") + public ResponseEntity resetPassword(@RequestBody Map body) { + String username = body.get("username"); + String newPassword = body.get("newPassword"); + if (username == null || newPassword == null || newPassword.length() < 6) { + throw new ResponseStatusException(org.springframework.http.HttpStatus.BAD_REQUEST, + newPassword == null || newPassword.length() < 6 ? "新密码至少6位" : "参数不完整"); + } + return ResponseEntity.ok().build(); + } + + @PostMapping("/admin/force-logout") + public ResponseEntity forceLogout(@RequestBody Map body) { + String username = body.get("username"); + if (username == null) { + throw new ResponseStatusException(org.springframework.http.HttpStatus.BAD_REQUEST, "username required"); + } + return ResponseEntity.ok().build(); + } + @PostMapping("/change-password") public ResponseEntity changePassword(@RequestBody Map body) { String oldPassword = body.get("oldPassword"); diff --git a/services/delivery-platform-api/src/main/java/cn/craftlabs/platform/api/persistence/customer/PlatformCustomer.java b/services/delivery-platform-api/src/main/java/cn/craftlabs/platform/api/persistence/customer/PlatformCustomer.java index 4479f16..a3bf056 100644 --- a/services/delivery-platform-api/src/main/java/cn/craftlabs/platform/api/persistence/customer/PlatformCustomer.java +++ b/services/delivery-platform-api/src/main/java/cn/craftlabs/platform/api/persistence/customer/PlatformCustomer.java @@ -30,6 +30,9 @@ public class PlatformCustomer { @TableField("customer_code") private String customerCode; + @TableField("owner_user_id") + private String ownerUserId; + @TableField("created_at") private OffsetDateTime createdAt; @@ -100,6 +103,14 @@ public class PlatformCustomer { this.customerCode = customerCode; } + public String getOwnerUserId() { + return ownerUserId; + } + + public void setOwnerUserId(String ownerUserId) { + this.ownerUserId = ownerUserId; + } + public OffsetDateTime getCreatedAt() { return createdAt; } 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 af01360..1b39aa3 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 @@ -36,6 +36,9 @@ public class PlatformProject { @TableField("project_manager") private String projectManager; + @TableField("owner_user_id") + private String ownerUserId; + public Long getId() { return id; } @@ -107,4 +110,12 @@ public class PlatformProject { public void setProjectManager(String projectManager) { this.projectManager = projectManager; } + + public String getOwnerUserId() { + return ownerUserId; + } + + public void setOwnerUserId(String ownerUserId) { + this.ownerUserId = ownerUserId; + } } diff --git a/services/delivery-platform-api/src/main/java/cn/craftlabs/platform/api/web/dto/CustomerRequest.java b/services/delivery-platform-api/src/main/java/cn/craftlabs/platform/api/web/dto/CustomerRequest.java index eae1648..486efc5 100644 --- a/services/delivery-platform-api/src/main/java/cn/craftlabs/platform/api/web/dto/CustomerRequest.java +++ b/services/delivery-platform-api/src/main/java/cn/craftlabs/platform/api/web/dto/CustomerRequest.java @@ -27,6 +27,9 @@ public class CustomerRequest { @Size(max = 64) private String customerCode; + @Size(max = 256) + private String ownerUserId; + public String getName() { return name; } @@ -82,4 +85,12 @@ public class CustomerRequest { public void setCustomerCode(String customerCode) { this.customerCode = customerCode; } + + public String getOwnerUserId() { + return ownerUserId; + } + + public void setOwnerUserId(String ownerUserId) { + this.ownerUserId = ownerUserId; + } } diff --git a/services/delivery-platform-api/src/main/java/cn/craftlabs/platform/api/web/dto/CustomerResponse.java b/services/delivery-platform-api/src/main/java/cn/craftlabs/platform/api/web/dto/CustomerResponse.java index 26ea1a2..e73d954 100644 --- a/services/delivery-platform-api/src/main/java/cn/craftlabs/platform/api/web/dto/CustomerResponse.java +++ b/services/delivery-platform-api/src/main/java/cn/craftlabs/platform/api/web/dto/CustomerResponse.java @@ -12,6 +12,7 @@ public class CustomerResponse { private String address; private String billingInfo; private String customerCode; + private String ownerUserId; private OffsetDateTime createdAt; private OffsetDateTime updatedAt; @@ -79,6 +80,14 @@ public class CustomerResponse { this.customerCode = customerCode; } + public String getOwnerUserId() { + return ownerUserId; + } + + public void setOwnerUserId(String ownerUserId) { + this.ownerUserId = ownerUserId; + } + public OffsetDateTime getCreatedAt() { return createdAt; } 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 9f8a7cd..59ff915 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 @@ -23,6 +23,9 @@ public class ProjectRequest { private String plannedEndDate; + @Size(max = 256) + private String ownerUserId; + public Long getCustomerId() { return customerId; } @@ -70,4 +73,12 @@ public class ProjectRequest { public void setPlannedEndDate(String plannedEndDate) { this.plannedEndDate = plannedEndDate; } + + public String getOwnerUserId() { + return ownerUserId; + } + + public void setOwnerUserId(String ownerUserId) { + this.ownerUserId = ownerUserId; + } } 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 6ebef44..18462a7 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 @@ -11,6 +11,7 @@ public class ProjectResponse { private String plannedStartDate; private String plannedEndDate; private String projectManager; + private String ownerUserId; private OffsetDateTime createdAt; private OffsetDateTime updatedAt; @@ -70,6 +71,14 @@ public class ProjectResponse { this.projectManager = projectManager; } + public String getOwnerUserId() { + return ownerUserId; + } + + public void setOwnerUserId(String ownerUserId) { + this.ownerUserId = ownerUserId; + } + public OffsetDateTime getCreatedAt() { return createdAt; } diff --git a/services/delivery-platform-api/src/main/resources/db/migration/V23__owner_fields.sql b/services/delivery-platform-api/src/main/resources/db/migration/V23__owner_fields.sql new file mode 100644 index 0000000..8ffc906 --- /dev/null +++ b/services/delivery-platform-api/src/main/resources/db/migration/V23__owner_fields.sql @@ -0,0 +1,2 @@ +ALTER TABLE platform_customer ADD COLUMN owner_user_id VARCHAR(256); +ALTER TABLE platform_project ADD COLUMN owner_user_id VARCHAR(256); diff --git a/web/delivery-platform-ui/src/router/index.js b/web/delivery-platform-ui/src/router/index.js index c6f718e..1ce10ee 100644 --- a/web/delivery-platform-ui/src/router/index.js +++ b/web/delivery-platform-ui/src/router/index.js @@ -200,6 +200,12 @@ const routes = [ component: () => import("../views/AuditSearchView.vue"), meta: { roles: ["SYS_ADMIN"], title: "审计日志" }, }, + { + path: "admin/params", + name: "system-params", + component: () => import("../views/SystemParamsView.vue"), + meta: { roles: ["SYS_ADMIN"], title: "系统参数" }, + }, ], }, { path: "/403", name: "forbidden", component: () => import("../views/ForbiddenView.vue") }, diff --git a/web/delivery-platform-ui/src/views/SystemParamsView.vue b/web/delivery-platform-ui/src/views/SystemParamsView.vue new file mode 100644 index 0000000..80beb40 --- /dev/null +++ b/web/delivery-platform-ui/src/views/SystemParamsView.vue @@ -0,0 +1,62 @@ + + +