From 422df0609563006fdebeb37b587df5ca0152dadb Mon Sep 17 00:00:00 2001 From: wkc <978997012@qq.com> Date: Thu, 26 Feb 2026 16:38:09 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E6=B7=BB=E5=8A=A0=E5=89=8D=E5=90=8E?= =?UTF-8?q?=E7=AB=AF=E5=88=86=E7=A6=BB=E7=9A=84=E5=AE=9E=E6=96=BD=E8=AE=A1?= =?UTF-8?q?=E5=88=92=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...6-create-project-backend-implementation.md | 943 ++++++++++++++++++ ...-create-project-frontend-implementation.md | 881 ++++++++++++++++ .../ScreenShot_2026-02-26_162233_965.png | Bin 0 -> 65893 bytes 3 files changed, 1824 insertions(+) create mode 100644 doc/plans/2026-02-26-create-project-backend-implementation.md create mode 100644 doc/plans/2026-02-26-create-project-frontend-implementation.md create mode 100644 doc/创建项目功能/ScreenShot_2026-02-26_162233_965.png diff --git a/doc/plans/2026-02-26-create-project-backend-implementation.md b/doc/plans/2026-02-26-create-project-backend-implementation.md new file mode 100644 index 0000000..a33ccfd --- /dev/null +++ b/doc/plans/2026-02-26-create-project-backend-implementation.md @@ -0,0 +1,943 @@ +# 创建项目功能 - 后端实施计划 + +> **For Claude:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task. + +**目标:** 实现创建项目功能的后端接口,包括数据库表、实体类、DTO/VO、Mapper、Service、Controller + +**架构:** 基于若依框架 + MyBatis Plus,采用分层架构(Controller -> Service -> Mapper) + +**技术栈:** Spring Boot 3.5.8, MyBatis Plus 3.5.10, MySQL 8.2.0, SpringDoc OpenAPI 2.8.14 + +--- + +## 前置条件 + +- MySQL 数据库已启动 +- 后端项目已启动 +- 已有 admin 账号和测试权限 +- 数据库连接配置正确 + +--- + +## Task 1: 创建数据库表和字典数据 + +**文件:** +- Create: `sql/ccdi_project.sql` + +**Step 1: 创建 SQL 脚本文件** + +创建文件 `sql/ccdi_project.sql`,内容如下: + +```sql +-- 创建项目表 +CREATE TABLE `ccdi_project` ( + `project_id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '项目ID', + `project_name` VARCHAR(100) NOT NULL COMMENT '项目名称', + `project_desc` VARCHAR(500) DEFAULT NULL COMMENT '项目描述', + `config_type` VARCHAR(20) NOT NULL DEFAULT 'default' COMMENT '配置方式:default-全局默认,custom-自定义', + `project_status` CHAR(1) NOT NULL DEFAULT '0' COMMENT '项目状态:0-进行中,1-已完成,2-已归档', + `target_count` INT NOT NULL DEFAULT 0 COMMENT '目标人数', + `high_risk_count` INT NOT NULL DEFAULT 0 COMMENT '高风险人数', + `medium_risk_count` INT NOT NULL DEFAULT 0 COMMENT '中风险人数', + `low_risk_count` INT NOT NULL DEFAULT 0 COMMENT '低风险人数', + `create_by` VARCHAR(64) DEFAULT '' COMMENT '创建者', + `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_by` VARCHAR(64) DEFAULT '' COMMENT '更新者', + `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `remark` VARCHAR(500) DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`project_id`), + INDEX `idx_project_name` (`project_name`), + INDEX `idx_project_status` (`project_status`), + INDEX `idx_create_time` (`create_time`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='纪检初核项目表'; + +-- 插入项目状态字典 +INSERT INTO sys_dict_type (dict_name, dict_type, status, create_by, create_time, remark) +VALUES ('项目状态', 'ccdi_project_status', '0', 'admin', NOW(), '纪检初核项目状态'); + +INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time) +VALUES +(1, '进行中', '0', 'ccdi_project_status', '', 'primary', 'Y', '0', 'admin', NOW()), +(2, '已完成', '1', 'ccdi_project_status', '', 'success', 'N', '0', 'admin', NOW()), +(3, '已归档', '2', 'ccdi_project_status', '', 'info', 'N', '0', 'admin', NOW()); + +-- 插入配置方式字典 +INSERT INTO sys_dict_type (dict_name, dict_type, status, create_by, create_time, remark) +VALUES ('配置方式', 'ccdi_config_type', '0', 'admin', NOW(), '项目配置方式'); + +INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time) +VALUES +(1, '全局默认模型参数配置', 'default', 'ccdi_config_type', '', 'primary', 'Y', '0', 'admin', NOW()), +(2, '自定义项目规则参数配置', 'custom', 'ccdi_config_type', '', 'warning', 'N', '0', 'admin', NOW()); + +-- 插入菜单权限 +INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, menu_type, visible, status, perms, icon, create_by, create_time) +VALUES ('纪检初核管理', 0, 1, 'ccdi', NULL, 'M', '0', '0', '', 'monitor', 'admin', NOW()); + +SET @parent_id = LAST_INSERT_ID(); + +INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, menu_type, visible, status, perms, icon, create_by, create_time) +VALUES ('项目管理', @parent_id, 1, 'project', 'ccdiProject/index', 'C', '0', '0', 'ccdi:project:list', 'project', 'admin', NOW()); + +SET @menu_id = LAST_INSERT_ID(); + +INSERT INTO sys_menu (menu_name, parent_id, order_num, menu_type, visible, status, perms, create_by, create_time) +VALUES +('创建项目', @menu_id, 1, 'F', '0', '0', 'ccdi:project:add', 'admin', NOW()), +('编辑项目', @menu_id, 2, 'F', '0', '0', 'ccdi:project:edit', 'admin', NOW()), +('删除项目', @menu_id, 3, 'F', '0', '0', 'ccdi:project:remove', 'admin', NOW()), +('查询项目', @menu_id, 4, 'F', '0', '0', 'ccdi:project:query', 'admin', NOW()); + +-- 为管理员角色分配权限 +INSERT INTO sys_role_menu (role_id, menu_id) +SELECT 1, menu_id FROM sys_menu WHERE perms LIKE 'ccdi:project:%' OR perms = 'ccdi:project:list'; +``` + +**Step 2: 执行 SQL 脚本** + +运行命令连接数据库并执行脚本: + +```bash +mysql -h -u -p ccdi < sql/ccdi_project.sql +``` + +预期输出:无错误,表创建成功 + +**Step 3: 验证数据库表** + +连接数据库验证表是否创建成功: + +```bash +mysql -h -u -p -e "USE ccdi; SHOW TABLES LIKE 'ccdi_project'; DESC ccdi_project;" +``` + +预期输出:显示 `ccdi_project` 表及其字段结构 + +**Step 4: 验证字典数据** + +验证字典数据是否插入成功: + +```bash +mysql -h -u -p -e "USE ccdi; SELECT * FROM sys_dict_type WHERE dict_type IN ('ccdi_project_status', 'ccdi_config_type'); SELECT * FROM sys_dict_data WHERE dict_type IN ('ccdi_project_status', 'ccdi_config_type');" +``` + +预期输出:显示新插入的字典类型和数据 + +**Step 5: 提交代码** + +```bash +git add sql/ccdi_project.sql +git commit -m "feat: 添加项目表和字典数据SQL脚本" +``` + +--- + +## Task 2: 创建实体类 CcdiProject + +**文件:** +- Create: `ruoyi-info-collection/src/main/java/com/ruoyi/info/collection/domain/CcdiProject.java` + +**Step 1: 创建实体类** + +创建文件 `ruoyi-info-collection/src/main/java/com/ruoyi/info/collection/domain/CcdiProject.java`: + +```java +package com.ruoyi.info.collection.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.util.Date; + +/** + * 纪检初核项目实体类 + * + * @author ruoyi + */ +@Data +@TableName("ccdi_project") +public class CcdiProject { + /** 项目ID */ + @TableId(type = IdType.AUTO) + private Long projectId; + + /** 项目名称 */ + private String projectName; + + /** 项目描述 */ + private String projectDesc; + + /** 配置方式:default-全局默认,custom-自定义 */ + private String configType; + + /** 项目状态:0-进行中,1-已完成,2-已归档 */ + private String projectStatus; + + /** 目标人数 */ + private Integer targetCount; + + /** 高风险人数 */ + private Integer highRiskCount; + + /** 中风险人数 */ + private Integer mediumRiskCount; + + /** 低风险人数 */ + private Integer lowRiskCount; + + /** 创建者 */ + private String createBy; + + /** 创建时间 */ + private Date createTime; + + /** 更新者 */ + private String updateBy; + + /** 更新时间 */ + private Date updateTime; + + /** 备注 */ + private String remark; +} +``` + +**Step 2: 验证编译** + +```bash +cd ruoyi-info-collection && mvn clean compile +``` + +预期输出:BUILD SUCCESS + +**Step 3: 提交代码** + +```bash +git add ruoyi-info-collection/src/main/java/com/ruoyi/info/collection/domain/CcdiProject.java +git commit -m "feat: 添加项目实体类" +``` + +--- + +## Task 3: 创建 DTO - CcdiProjectSaveDTO + +**文件:** +- Create: `ruoyi-info-collection/src/main/java/com/ruoyi/info/collection/domain/dto/CcdiProjectSaveDTO.java` + +**Step 1: 创建 DTO 目录(如果不存在)** + +```bash +mkdir -p ruoyi-info-collection/src/main/java/com/ruoyi/info/collection/domain/dto +``` + +**Step 2: 创建 DTO 类** + +创建文件 `ruoyi-info-collection/src/main/java/com/ruoyi/info/collection/domain/dto/CcdiProjectSaveDTO.java`: + +```java +package com.ruoyi.info.collection.domain.dto; + +import lombok.Data; + +import jakarta.validation.constraints.NotBlank; +import org.hibernate.validator.constraints.Length; + +/** + * 项目保存DTO + * + * @author ruoyi + */ +@Data +public class CcdiProjectSaveDTO { + /** 项目名称(必填) */ + @NotBlank(message = "项目名称不能为空") + @Length(max = 100, message = "项目名称长度不能超过100个字符") + private String projectName; + + /** 项目描述(可选) */ + @Length(max = 500, message = "项目描述长度不能超过500个字符") + private String projectDesc; + + /** 配置方式(必填):default-全局默认,custom-自定义 */ + @NotBlank(message = "配置方式不能为空") + private String configType; +} +``` + +**Step 3: 验证编译** + +```bash +cd ruoyi-info-collection && mvn clean compile +``` + +预期输出:BUILD SUCCESS + +**Step 4: 提交代码** + +```bash +git add ruoyi-info-collection/src/main/java/com/ruoyi/info/collection/domain/dto/CcdiProjectSaveDTO.java +git commit -m "feat: 添加项目保存DTO" +``` + +--- + +## Task 4: 创建 VO - CcdiProjectVO + +**文件:** +- Create: `ruoyi-info-collection/src/main/java/com/ruoyi/info/collection/domain/vo/CcdiProjectVO.java` + +**Step 1: 创建 VO 目录(如果不存在)** + +```bash +mkdir -p ruoyi-info-collection/src/main/java/com/ruoyi/info/collection/domain/vo +``` + +**Step 2: 创建 VO 类** + +创建文件 `ruoyi-info-collection/src/main/java/com/ruoyi/info/collection/domain/vo/CcdiProjectVO.java`: + +```java +package com.ruoyi.info.collection.domain.vo; + +import lombok.Data; + +import java.util.Date; + +/** + * 项目VO + * + * @author ruoyi + */ +@Data +public class CcdiProjectVO { + /** 项目ID */ + private Long projectId; + + /** 项目名称 */ + private String projectName; + + /** 项目描述 */ + private String projectDesc; + + /** 配置方式 */ + private String configType; + + /** 项目状态 */ + private String projectStatus; + + /** 目标人数 */ + private Integer targetCount; + + /** 高风险人数 */ + private Integer highRiskCount; + + /** 中风险人数 */ + private Integer mediumRiskCount; + + /** 低风险人数 */ + private Integer lowRiskCount; + + /** 创建时间 */ + private Date createTime; + + /** 创建者 */ + private String createBy; +} +``` + +**Step 3: 验证编译** + +```bash +cd ruoyi-info-collection && mvn clean compile +``` + +预期输出:BUILD SUCCESS + +**Step 4: 提交代码** + +```bash +git add ruoyi-info-collection/src/main/java/com/ruoyi/info/collection/domain/vo/CcdiProjectVO.java +git commit -m "feat: 添加项目VO" +``` + +--- + +## Task 5: 创建查询 DTO - CcdiProjectQueryDTO + +**文件:** +- Create: `ruoyi-info-collection/src/main/java/com/ruoyi/info/collection/domain/dto/CcdiProjectQueryDTO.java` + +**Step 1: 创建查询 DTO 类** + +创建文件 `ruoyi-info-collection/src/main/java/com/ruoyi/info/collection/domain/dto/CcdiProjectQueryDTO.java`: + +```java +package com.ruoyi.info.collection.domain.dto; + +import lombok.Data; + +/** + * 项目查询DTO + * + * @author ruoyi + */ +@Data +public class CcdiProjectQueryDTO { + /** 项目名称 */ + private String projectName; + + /** 项目状态 */ + private String projectStatus; +} +``` + +**Step 2: 验证编译** + +```bash +cd ruoyi-info-collection && mvn clean compile +``` + +预期输出:BUILD SUCCESS + +**Step 3: 提交代码** + +```bash +git add ruoyi-info-collection/src/main/java/com/ruoyi/info/collection/domain/dto/CcdiProjectQueryDTO.java +git commit -m "feat: 添加项目查询DTO" +``` + +--- + +## Task 6: 创建 Mapper 接口 + +**文件:** +- Create: `ruoyi-info-collection/src/main/java/com/ruoyi/info/collection/mapper/CcdiProjectMapper.java` + +**Step 1: 创建 Mapper 接口** + +创建文件 `ruoyi-info-collection/src/main/java/com/ruoyi/info/collection/mapper/CcdiProjectMapper.java`: + +```java +package com.ruoyi.info.collection.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.info.collection.domain.CcdiProject; +import com.ruoyi.info.collection.domain.dto.CcdiProjectQueryDTO; +import com.ruoyi.info.collection.domain.vo.CcdiProjectVO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + * 项目Mapper接口 + * + * @author ruoyi + */ +@Mapper +public interface CcdiProjectMapper extends BaseMapper { + /** + * 分页查询项目列表 + * + * @param page 分页对象 + * @param queryDTO 查询条件 + * @return 分页结果 + */ + Page selectProjectPage(Page page, @Param("queryDTO") CcdiProjectQueryDTO queryDTO); +} +``` + +**Step 2: 验证编译** + +```bash +cd ruoyi-info-collection && mvn clean compile +``` + +预期输出:BUILD SUCCESS + +**Step 3: 提交代码** + +```bash +git add ruoyi-info-collection/src/main/java/com/ruoyi/info/collection/mapper/CcdiProjectMapper.java +git commit -m "feat: 添加项目Mapper接口" +``` + +--- + +## Task 7: 创建 Mapper XML 文件 + +**文件:** +- Create: `ruoyi-info-collection/src/main/resources/mapper/info/collection/CcdiProjectMapper.xml` + +**Step 1: 创建 Mapper 目录(如果不存在)** + +```bash +mkdir -p ruoyi-info-collection/src/main/resources/mapper/info/collection +``` + +**Step 2: 创建 XML 文件** + +创建文件 `ruoyi-info-collection/src/main/resources/mapper/info/collection/CcdiProjectMapper.xml`: + +```xml + + + + + + + + + + + + + + + + + + + + + +``` + +**Step 3: 验证编译** + +```bash +cd ruoyi-info-collection && mvn clean compile +``` + +预期输出:BUILD SUCCESS + +**Step 4: 提交代码** + +```bash +git add ruoyi-info-collection/src/main/resources/mapper/info/collection/CcdiProjectMapper.xml +git commit -m "feat: 添加项目Mapper XML配置" +``` + +--- + +## Task 8: 创建 Service 接口 + +**文件:** +- Create: `ruoyi-info-collection/src/main/java/com/ruoyi/info/collection/service/ICcdiProjectService.java` + +**Step 1: 创建 Service 接口** + +创建文件 `ruoyi-info-collection/src/main/java/com/ruoyi/info/collection/service/ICcdiProjectService.java`: + +```java +package com.ruoyi.info.collection.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.info.collection.domain.dto.CcdiProjectQueryDTO; +import com.ruoyi.info.collection.domain.dto.CcdiProjectSaveDTO; +import com.ruoyi.info.collection.domain.vo.CcdiProjectVO; + +/** + * 项目Service接口 + * + * @author ruoyi + */ +public interface ICcdiProjectService { + /** + * 创建项目 + * + * @param dto 项目保存DTO + * @return 项目VO + */ + CcdiProjectVO createProject(CcdiProjectSaveDTO dto); + + /** + * 更新项目 + * + * @param dto 项目更新DTO + * @return 项目VO + */ + CcdiProjectVO updateProject(CcdiProjectSaveDTO dto); + + /** + * 删除项目 + * + * @param projectId 项目ID + * @return 是否成功 + */ + boolean deleteProject(Long projectId); + + /** + * 查询项目详情 + * + * @param projectId 项目ID + * @return 项目VO + */ + CcdiProjectVO getProjectById(Long projectId); + + /** + * 分页查询项目列表 + * + * @param page 分页对象 + * @param queryDTO 查询条件 + * @return 分页结果 + */ + Page selectProjectPage(Page page, CcdiProjectQueryDTO queryDTO); +} +``` + +**Step 2: 验证编译** + +```bash +cd ruoyi-info-collection && mvn clean compile +``` + +预期输出:BUILD SUCCESS + +**Step 3: 提交代码** + +```bash +git add ruoyi-info-collection/src/main/java/com/ruoyi/info/collection/service/ICcdiProjectService.java +git commit -m "feat: 添加项目Service接口" +``` + +--- + +## Task 9: 创建 Service 实现类 + +**文件:** +- Create: `ruoyi-info-collection/src/main/java/com/ruoyi/info/collection/service/impl/CcdiProjectServiceImpl.java` + +**Step 1: 创建 Service 实现目录(如果不存在)** + +```bash +mkdir -p ruoyi-info-collection/src/main/java/com/ruoyi/info/collection/service/impl +``` + +**Step 2: 创建 Service 实现类** + +创建文件 `ruoyi-info-collection/src/main/java/com/ruoyi/info/collection/service/impl/CcdiProjectServiceImpl.java`: + +```java +package com.ruoyi.info.collection.service.impl; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.info.collection.domain.CcdiProject; +import com.ruoyi.info.collection.domain.dto.CcdiProjectQueryDTO; +import com.ruoyi.info.collection.domain.dto.CcdiProjectSaveDTO; +import com.ruoyi.info.collection.domain.vo.CcdiProjectVO; +import com.ruoyi.info.collection.mapper.CcdiProjectMapper; +import com.ruoyi.info.collection.service.ICcdiProjectService; +import jakarta.annotation.Resource; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; + +/** + * 项目Service实现类 + * + * @author ruoyi + */ +@Service +public class CcdiProjectServiceImpl implements ICcdiProjectService { + + @Resource + private CcdiProjectMapper projectMapper; + + @Override + public CcdiProjectVO createProject(CcdiProjectSaveDTO dto) { + CcdiProject project = new CcdiProject(); + BeanUtils.copyProperties(dto, project); + + // 设置默认值 + project.setProjectStatus("0"); // 进行中 + project.setTargetCount(0); + project.setHighRiskCount(0); + project.setMediumRiskCount(0); + project.setLowRiskCount(0); + + projectMapper.insert(project); + + CcdiProjectVO vo = new CcdiProjectVO(); + BeanUtils.copyProperties(project, vo); + return vo; + } + + @Override + public CcdiProjectVO updateProject(CcdiProjectSaveDTO dto) { + // TODO: 实现更新逻辑 + return null; + } + + @Override + public boolean deleteProject(Long projectId) { + return projectMapper.deleteById(projectId) > 0; + } + + @Override + public CcdiProjectVO getProjectById(Long projectId) { + CcdiProject project = projectMapper.selectById(projectId); + if (project == null) { + return null; + } + CcdiProjectVO vo = new CcdiProjectVO(); + BeanUtils.copyProperties(project, vo); + return vo; + } + + @Override + public Page selectProjectPage(Page page, CcdiProjectQueryDTO queryDTO) { + return projectMapper.selectProjectPage(page, queryDTO); + } +} +``` + +**Step 3: 验证编译** + +```bash +cd ruoyi-info-collection && mvn clean compile +``` + +预期输出:BUILD SUCCESS + +**Step 4: 提交代码** + +```bash +git add ruoyi-info-collection/src/main/java/com/ruoyi/info/collection/service/impl/CcdiProjectServiceImpl.java +git commit -m "feat: 添加项目Service实现类" +``` + +--- + +## Task 10: 创建 Controller + +**文件:** +- Create: `ruoyi-info-collection/src/main/java/com/ruoyi/info/collection/controller/CcdiProjectController.java` + +**Step 1: 创建 Controller 类** + +创建文件 `ruoyi-info-collection/src/main/java/com/ruoyi/info/collection/controller/CcdiProjectController.java`: + +```java +package com.ruoyi.info.collection.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.PageDomain; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.core.page.TableSupport; +import com.ruoyi.info.collection.domain.dto.CcdiProjectQueryDTO; +import com.ruoyi.info.collection.domain.dto.CcdiProjectSaveDTO; +import com.ruoyi.info.collection.domain.vo.CcdiProjectVO; +import com.ruoyi.info.collection.service.ICcdiProjectService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +/** + * 纪检初核项目管理Controller + * + * @author ruoyi + */ +@RestController +@RequestMapping("/ccdi/project") +@Tag(name = "纪检初核项目管理") +public class CcdiProjectController extends BaseController { + + @Resource + private ICcdiProjectService projectService; + + /** + * 创建项目 + */ + @PostMapping + @Operation(summary = "创建项目") + @PreAuthorize("@ss.hasPermi('ccdi:project:add')") + public AjaxResult createProject(@Validated @RequestBody CcdiProjectSaveDTO dto) { + CcdiProjectVO vo = projectService.createProject(dto); + return AjaxResult.success("项目创建成功", vo); + } + + /** + * 更新项目 + */ + @PutMapping + @Operation(summary = "更新项目") + @PreAuthorize("@ss.hasPermi('ccdi:project:edit')") + public AjaxResult updateProject(@Validated @RequestBody CcdiProjectSaveDTO dto) { + CcdiProjectVO vo = projectService.updateProject(dto); + return AjaxResult.success("项目更新成功", vo); + } + + /** + * 删除项目 + */ + @DeleteMapping("/{projectId}") + @Operation(summary = "删除项目") + @PreAuthorize("@ss.hasPermi('ccdi:project:remove')") + public AjaxResult deleteProject(@PathVariable Long projectId) { + boolean success = projectService.deleteProject(projectId); + return success ? AjaxResult.success("项目删除成功") : AjaxResult.error("项目删除失败"); + } + + /** + * 查询项目详情 + */ + @GetMapping("/{projectId}") + @Operation(summary = "查询项目详情") + @PreAuthorize("@ss.hasPermi('ccdi:project:query')") + public AjaxResult getProject(@PathVariable Long projectId) { + CcdiProjectVO vo = projectService.getProjectById(projectId); + return AjaxResult.success(vo); + } + + /** + * 查询项目列表(分页) + */ + @GetMapping("/list") + @Operation(summary = "查询项目列表") + @PreAuthorize("@ss.hasPermi('ccdi:project:list')") + public TableDataInfo listProject(CcdiProjectQueryDTO queryDTO) { + PageDomain pageDomain = TableSupport.buildPageRequest(); + Page page = new Page<>(pageDomain.getPageNum(), pageDomain.getPageSize()); + Page result = projectService.selectProjectPage(page, queryDTO); + return getDataTable(result.getRecords(), result.getTotal()); + } +} +``` + +**Step 2: 验证编译** + +```bash +cd ruoyi-info-collection && mvn clean compile +``` + +预期输出:BUILD SUCCESS + +**Step 3: 提交代码** + +```bash +git add ruoyi-info-collection/src/main/java/com/ruoyi/info/collection/controller/CcdiProjectController.java +git commit -m "feat: 添加项目Controller" +``` + +--- + +## Task 11: 启动后端并测试接口 + +**Step 1: 启动后端服务** + +```bash +cd ruoyi-admin && mvn spring-boot:run +``` + +预期输出:Spring Boot 启动成功日志,端口 8080 + +**Step 2: 获取测试 Token** + +使用测试接口获取 Token: + +```bash +curl -X POST "http://localhost:8080/login/test?username=admin&password=admin123" +``` + +预期输出:返回包含 token 的 JSON 响应 + +**Step 3: 测试创建项目接口** + +使用 Token 测试创建项目接口: + +```bash +curl -X POST "http://localhost:8080/ccdi/project" \ + -H "Authorization: Bearer " \ + -H "Content-Type: application/json" \ + -d '{ + "projectName": "测试项目1", + "projectDesc": "这是测试项目描述", + "configType": "default" + }' +``` + +预期输出:返回成功响应,包含项目 ID 和创建的项目信息 + +**Step 4: 测试查询项目列表接口** + +```bash +curl -X GET "http://localhost:8080/ccdi/project/list?pageNum=1&pageSize=10" \ + -H "Authorization: Bearer " +``` + +预期输出:返回分页数据,包含刚才创建的项目 + +**Step 5: 使用 Swagger 测试** + +访问 Swagger UI 进行接口测试: + +```bash +# 浏览器打开 +http://localhost:8080/swagger-ui/index.html +``` + +预期结果:在 Swagger UI 中可以看到项目管理的所有接口,并进行测试 + +--- + +## Task 12: 提交最终代码 + +**Step 1: 检查所有文件** + +```bash +git status +``` + +预期输出:所有后端文件已提交 + +**Step 2: 推送到远程仓库** + +```bash +git push origin dev +``` + +预期输出:推送成功 + +--- + +## 完成检查清单 + +- [ ] 数据库表 `ccdi_project` 创建成功 +- [ ] 字典数据 `ccdi_project_status` 和 `ccdi_config_type` 插入成功 +- [ ] 菜单权限配置成功 +- [ ] 实体类 `CcdiProject` 创建并编译通过 +- [ ] DTO `CcdiProjectSaveDTO` 创建并编译通过 +- [ ] VO `CcdiProjectVO` 创建并编译通过 +- [ ] Mapper 接口和 XML 创建并编译通过 +- [ ] Service 接口和实现类创建并编译通过 +- [ ] Controller 创建并编译通过 +- [ ] 后端服务启动成功 +- [ ] 创建项目接口测试通过 +- [ ] 查询项目列表接口测试通过 +- [ ] Swagger 文档显示正确 +- [ ] 所有代码已提交到 git + +--- + +**后端实施计划完成!** diff --git a/doc/plans/2026-02-26-create-project-frontend-implementation.md b/doc/plans/2026-02-26-create-project-frontend-implementation.md new file mode 100644 index 0000000..417919e --- /dev/null +++ b/doc/plans/2026-02-26-create-project-frontend-implementation.md @@ -0,0 +1,881 @@ +# 创建项目功能 - 前端实施计划 + +> **For Claude:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task. + +**目标:** 实现创建项目功能的前端界面,包括弹窗表单、项目列表展示、API调用 + +**架构:** 基于 Vue 2.6.12 + Element UI 2.15.14,采用组件化开发 + +**技术栈:** Vue.js 2.6.12, Element UI 2.15.14, Axios 0.28.1 + +--- + +## 前置条件 + +- 后端接口已部署并测试通过 +- 前端项目依赖已安装 +- 已有测试账号(admin/admin123) +- 后端服务运行在 http://localhost:8080 + +--- + +## Task 1: 更新 API 接口文件 + +**文件:** +- Modify: `ruoyi-ui/src/api/ccdiProject.js` + +**Step 1: 备份原文件** + +```bash +cp ruoyi-ui/src/api/ccdiProject.js ruoyi-ui/src/api/ccdiProject.js.bak +``` + +**Step 2: 修改 API 文件** + +将 `ruoyi-ui/src/api/ccdiProject.js` 修改为以下内容: + +```javascript +import request from '@/utils/request' + +// 创建初核项目 +export function createProject(data) { + return request({ + url: '/ccdi/project', + method: 'post', + data: data + }) +} + +// 查询初核项目列表(分页) +export function listProject(query) { + return request({ + url: '/ccdi/project/list', + method: 'get', + params: query + }) +} + +// 查询初核项目详细 +export function getProject(projectId) { + return request({ + url: '/ccdi/project/' + projectId, + method: 'get' + }) +} + +// 修改初核项目 +export function updateProject(data) { + return request({ + url: '/ccdi/project', + method: 'put', + data: data + }) +} + +// 删除初核项目 +export function delProject(projectId) { + return request({ + url: '/ccdi/project/' + projectId, + method: 'delete' + }) +} + +// Mock数据:获取项目列表(保留用于测试) +export function getMockProjectList() { + return Promise.resolve({ + code: 200, + total: 3, + rows: [ + { + projectId: 1, + projectName: '2024年Q1初核', + projectDesc: '2024年第一季度纪检初核排查工作', + createTime: '2024-01-01', + projectStatus: '0', + configType: 'default', + targetCount: 500, + highRiskCount: 5, + mediumRiskCount: 10, + lowRiskCount: 0 + }, + { + projectId: 2, + projectName: '2023年Q4初核', + projectDesc: '2023年第四季度纪检初核排查工作', + createTime: '2023-10-01', + projectStatus: '1', + configType: 'custom', + targetCount: 480, + highRiskCount: 8, + mediumRiskCount: 15, + lowRiskCount: 0 + }, + { + projectId: 3, + projectName: '2023年Q3初核', + projectDesc: '2023年第三季度纪检初核排查工作', + createTime: '2023-07-01', + projectStatus: '2', + configType: 'default', + targetCount: 450, + highRiskCount: 0, + mediumRiskCount: 18, + lowRiskCount: 5 + } + ] + }) +} +``` + +**Step 3: 验证语法** + +```bash +cd ruoyi-ui && npm run lint -- --fix src/api/ccdiProject.js +``` + +预期输出:无 ESLint 错误 + +**Step 4: 提交代码** + +```bash +git add ruoyi-ui/src/api/ccdiProject.js +git commit -m "feat: 更新项目API接口,添加创建项目接口" +``` + +--- + +## Task 2: 修改 AddProjectDialog 组件 + +**文件:** +- Modify: `ruoyi-ui/src/views/ccdiProject/components/AddProjectDialog.vue` + +**Step 1: 备份原文件** + +```bash +cp ruoyi-ui/src/views/ccdiProject/components/AddProjectDialog.vue ruoyi-ui/src/views/ccdiProject/components/AddProjectDialog.vue.bak +``` + +**Step 2: 重写组件** + +将 `ruoyi-ui/src/views/ccdiProject/components/AddProjectDialog.vue` 重写为以下内容: + +```vue + + + + + +``` + +**Step 3: 验证语法** + +```bash +cd ruoyi-ui && npm run lint -- --fix src/views/ccdiProject/components/AddProjectDialog.vue +``` + +预期输出:无 ESLint 错误 + +**Step 4: 提交代码** + +```bash +git add ruoyi-ui/src/views/ccdiProject/components/AddProjectDialog.vue +git commit -m "feat: 简化项目创建弹窗,只保留3个核心字段" +``` + +--- + +## Task 3: 修改 ProjectTable 组件 + +**文件:** +- Modify: `ruoyi-ui/src/views/ccdiProject/components/ProjectTable.vue` + +**Step 1: 备份原文件** + +```bash +cp ruoyi-ui/src/views/ccdiProject/components/ProjectTable.vue ruoyi-ui/src/views/ccdiProject/components/ProjectTable.vue.bak +``` + +**Step 2: 重写组件** + +将 `ruoyi-ui/src/views/ccdiProject/components/ProjectTable.vue` 重写为以下内容: + +```vue + + + + + +``` + +**Step 3: 验证语法** + +```bash +cd ruoyi-ui && npm run lint -- --fix src/views/ccdiProject/components/ProjectTable.vue +``` + +预期输出:无 ESLint 错误 + +**Step 4: 提交代码** + +```bash +git add ruoyi-ui/src/views/ccdiProject/components/ProjectTable.vue +git commit -m "feat: 优化项目列表表格,添加预警人数悬停提示" +``` + +--- + +## Task 4: 修改父组件 index.vue + +**文件:** +- Modify: `ruoyi-ui/src/views/ccdiProject/index.vue` + +**Step 1: 备份原文件** + +```bash +cp ruoyi-ui/src/views/ccdiProject/index.vue ruoyi-ui/src/views/ccdiProject/index.vue.bak +``` + +**Step 2: 修改父组件** + +将 `ruoyi-ui/src/views/ccdiProject/index.vue` 的 `getList` 和 `handleSubmitProject` 方法修改为: + +```javascript +/** 查询项目列表 */ +getList() { + this.loading = true + // 使用真实API + listProject(this.queryParams).then(response => { + this.projectList = response.rows + this.total = response.total + this.loading = false + }).catch(() => { + this.loading = false + }) +}, + +/** 提交项目表单 */ +handleSubmitProject(data) { + // 不需要再次调用API,因为AddProjectDialog已经处理了 + this.addDialogVisible = false + this.getList() // 刷新列表 +} +``` + +**Step 3: 验证语法** + +```bash +cd ruoyi-ui && npm run lint -- --fix src/views/ccdiProject/index.vue +``` + +预期输出:无 ESLint 错误 + +**Step 4: 提交代码** + +```bash +git add ruoyi-ui/src/views/ccdiProject/index.vue +git commit -m "feat: 修改父组件,切换为真实API调用" +``` + +--- + +## Task 5: 启动前端并测试 + +**Step 1: 启动前端开发服务器** + +```bash +cd ruoyi-ui && npm run dev +``` + +预期输出:前端服务启动成功,访问地址 http://localhost:80 + +**Step 2: 测试登录** + +浏览器访问 http://localhost:80,使用测试账号登录: +- 用户名:admin +- 密码:admin123 + +预期结果:登录成功,进入首页 + +**Step 3: 测试项目列表** + +导航到"纪检初核管理 > 项目管理"菜单: + +预期结果: +- 项目列表正常显示 +- 项目名称和描述上下排列 +- 项目状态标签显示正确 +- 预警人数悬停提示显示风险详情 + +**Step 4: 测试创建项目** + +点击"新建项目"按钮: + +预期结果: +- 弹窗正常打开 +- 显示3个字段(项目名称、项目描述、配置方式) +- 配置方式默认选中"全局默认模型参数配置" + +填写表单: +- 项目名称:测试项目001 +- 项目描述:这是测试项目的描述 +- 配置方式:选择"自定义项目规则参数配置" + +点击"创建项目"按钮: + +预期结果: +- 按钮显示 loading 状态 +- 创建成功,提示"项目创建成功" +- 弹窗关闭 +- 项目列表自动刷新,显示新创建的项目 + +**Step 5: 测试预警人数悬停** + +在项目列表中,将鼠标悬停在预警人数上: + +预期结果: +- 显示风险人数统计提示框 +- 显示高风险、中风险、低风险人数 +- 预警人数颜色根据风险级别变化 + +**Step 6: 测试表单验证** + +不填写项目名称,直接点击"创建项目": + +预期结果: +- 提示"请输入项目名称" +- 表单不提交 + +**Step 7: 测试取消按钮** + +点击"新建项目",然后点击"取消": + +预期结果: +- 弹窗关闭 +- 表单数据清空 + +--- + +## Task 6: 跨浏览器测试 + +**Step 1: Chrome 测试** + +在 Chrome 浏览器中重复 Task 5 的所有测试: + +预期结果:所有功能正常 + +**Step 2: Edge 测试** + +在 Edge 浏览器中重复 Task 5 的所有测试: + +预期结果:所有功能正常 + +**Step 3: Firefox 测试(可选)** + +在 Firefox 浏览器中重复 Task 5 的所有测试: + +预期结果:所有功能正常 + +--- + +## Task 7: 响应式测试 + +**Step 1: 测试不同分辨率** + +调整浏览器窗口大小,测试以下分辨率: + +- 1920x1080(桌面) +- 1366x768(笔记本) +- 768x1024(平板) + +预期结果: +- 表格自适应宽度 +- 弹窗居中显示 +- 所有功能正常使用 + +**Step 2: 测试表格横向滚动** + +缩小浏览器窗口,使表格宽度小于内容宽度: + +预期结果: +- 表格出现横向滚动条 +- 操作列固定在右侧 +- 可以横向滚动查看所有列 + +--- + +## Task 8: 提交最终代码 + +**Step 1: 检查所有文件** + +```bash +git status +``` + +预期输出:所有前端文件已提交 + +**Step 2: 推送到远程仓库** + +```bash +git push origin dev +``` + +预期输出:推送成功 + +--- + +## 完成检查清单 + +- [ ] API 接口文件更新完成 +- [ ] AddProjectDialog 组件简化完成(3个字段) +- [ ] ProjectTable 组件优化完成(上下排列、预警悬停) +- [ ] 父组件切换为真实API +- [ ] 前端服务启动成功 +- [ ] 登录功能正常 +- [ ] 项目列表显示正常 +- [ ] 项目名称和描述上下排列正确 +- [ ] 项目状态标签显示正确 +- [ ] 预警人数悬停提示显示正常 +- [ ] 预警人数颜色根据风险级别变化 +- [ ] 创建项目弹窗打开正常 +- [ ] 配置方式默认值正确 +- [ ] 创建项目功能正常 +- [ ] 创建成功后列表刷新 +- [ ] 表单验证正常 +- [ ] 取消按钮功能正常 +- [ ] 跨浏览器测试通过 +- [ ] 响应式测试通过 +- [ ] 所有代码已提交到 git + +--- + +**前端实施计划完成!** diff --git a/doc/创建项目功能/ScreenShot_2026-02-26_162233_965.png b/doc/创建项目功能/ScreenShot_2026-02-26_162233_965.png new file mode 100644 index 0000000000000000000000000000000000000000..594cf691defdca32e20c49404c10c0d98cb7a910 GIT binary patch literal 65893 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 WIZTlZmd;jc&>ck1wr6bC?f*BP`%Ccv literal 0 HcmV?d00001