parent
372c5bb485
commit
d1e7220473
@ -0,0 +1,149 @@
|
||||
package com.yunxi.scm.module.xxjj.controller.admin.project;
|
||||
|
||||
import com.yunxi.scm.module.system.controller.admin.user.vo.user.UserPageItemRespVO;
|
||||
import com.yunxi.scm.module.system.controller.admin.user.vo.user.UserPageReqVO;
|
||||
import com.yunxi.scm.module.system.controller.admin.user.vo.user.UserRespVO;
|
||||
import com.yunxi.scm.module.system.convert.user.UserConvert;
|
||||
import com.yunxi.scm.module.system.dal.dataobject.dept.DeptDO;
|
||||
import com.yunxi.scm.module.system.dal.dataobject.user.AdminUserDO;
|
||||
import com.yunxi.scm.module.system.service.dept.DeptService;
|
||||
import com.yunxi.scm.module.system.service.user.AdminUserService;
|
||||
import com.yunxi.scm.module.xxjj.controller.admin.task.vo.TaskCreateReqVO;
|
||||
import com.yunxi.scm.module.xxjj.service.task.TaskService;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import javax.annotation.Resource;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
|
||||
import javax.validation.constraints.*;
|
||||
import javax.validation.*;
|
||||
import javax.servlet.http.*;
|
||||
import java.util.*;
|
||||
import java.io.IOException;
|
||||
|
||||
import com.yunxi.scm.framework.common.pojo.PageResult;
|
||||
import com.yunxi.scm.framework.common.pojo.CommonResult;
|
||||
import static com.yunxi.scm.framework.common.pojo.CommonResult.success;
|
||||
|
||||
import com.yunxi.scm.framework.excel.core.util.ExcelUtils;
|
||||
|
||||
import com.yunxi.scm.framework.operatelog.core.annotations.OperateLog;
|
||||
|
||||
import static com.yunxi.scm.framework.common.util.collection.CollectionUtils.convertList;
|
||||
import static com.yunxi.scm.framework.operatelog.core.enums.OperateTypeEnum.*;
|
||||
|
||||
import com.yunxi.scm.module.xxjj.controller.admin.project.vo.*;
|
||||
import com.yunxi.scm.module.xxjj.dal.dataobject.project.ProjectDO;
|
||||
import com.yunxi.scm.module.xxjj.convert.project.ProjectConvert;
|
||||
import com.yunxi.scm.module.xxjj.service.project.ProjectService;
|
||||
|
||||
@Tag(name = "管理后台 - 项目管理")
|
||||
@RestController
|
||||
@RequestMapping("/xxjj/project")
|
||||
@Validated
|
||||
public class ProjectController {
|
||||
|
||||
@Resource
|
||||
private ProjectService projectService;
|
||||
@Resource
|
||||
private TaskService taskService;
|
||||
|
||||
@Resource
|
||||
private AdminUserService adminUserService;
|
||||
|
||||
@Resource
|
||||
private DeptService deptService;
|
||||
|
||||
@PostMapping("/create")
|
||||
@Operation(summary = "创建项目管理")
|
||||
@PreAuthorize("@ss.hasPermission('xxjj:project:create')")
|
||||
public CommonResult<Long> createProject(@Valid @RequestBody ProjectCreateReqVO createReqVO) {
|
||||
return success(projectService.createProject(createReqVO));
|
||||
}
|
||||
|
||||
@PutMapping("/update")
|
||||
@Operation(summary = "更新项目管理")
|
||||
@PreAuthorize("@ss.hasPermission('xxjj:project:update')")
|
||||
public CommonResult<Boolean> updateProject(@Valid @RequestBody ProjectUpdateReqVO updateReqVO) {
|
||||
projectService.updateProject(updateReqVO);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@DeleteMapping("/delete")
|
||||
@Operation(summary = "删除项目管理")
|
||||
@Parameter(name = "id", description = "编号", required = true)
|
||||
@PreAuthorize("@ss.hasPermission('xxjj:project:delete')")
|
||||
public CommonResult<Boolean> deleteProject(@RequestParam("id") Long id) {
|
||||
projectService.deleteProject(id);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@GetMapping("/get")
|
||||
@Operation(summary = "获得项目管理")
|
||||
@Parameter(name = "id", description = "编号", required = true, example = "1024")
|
||||
@PreAuthorize("@ss.hasPermission('xxjj:project:query')")
|
||||
public CommonResult<ProjectRespVO> getProject(@RequestParam("id") Long id) {
|
||||
ProjectDO project = projectService.getProject(id);
|
||||
return success(ProjectConvert.INSTANCE.convert(project));
|
||||
}
|
||||
|
||||
@GetMapping("/list")
|
||||
@Operation(summary = "获得项目管理列表")
|
||||
@Parameter(name = "ids", description = "编号列表", required = true, example = "1024,2048")
|
||||
@PreAuthorize("@ss.hasPermission('xxjj:project:query')")
|
||||
public CommonResult<List<ProjectRespVO>> getProjectList(@RequestParam("ids") Collection<Long> ids) {
|
||||
List<ProjectDO> list = projectService.getProjectList(ids);
|
||||
return success(ProjectConvert.INSTANCE.convertList(list));
|
||||
}
|
||||
|
||||
@GetMapping("/page")
|
||||
@Operation(summary = "获得项目管理分页")
|
||||
@PreAuthorize("@ss.hasPermission('xxjj:project:query')")
|
||||
public CommonResult<PageResult<ProjectRespVO>> getProjectPage(@Valid ProjectPageReqVO pageVO) {
|
||||
PageResult<ProjectDO> pageResult = projectService.getProjectPage(pageVO);
|
||||
return success(ProjectConvert.INSTANCE.convertPage(pageResult));
|
||||
}
|
||||
|
||||
@GetMapping("/export-excel")
|
||||
@Operation(summary = "导出项目管理 Excel")
|
||||
@PreAuthorize("@ss.hasPermission('xxjj:project:export')")
|
||||
@OperateLog(type = EXPORT)
|
||||
public void exportProjectExcel(@Valid ProjectExportReqVO exportReqVO,
|
||||
HttpServletResponse response) throws IOException {
|
||||
List<ProjectDO> list = projectService.getProjectList(exportReqVO);
|
||||
// 导出 Excel
|
||||
List<ProjectExcelVO> datas = ProjectConvert.INSTANCE.convertList02(list);
|
||||
ExcelUtils.write(response, "项目管理.xls", "数据", ProjectExcelVO.class, datas);
|
||||
}
|
||||
|
||||
@PostMapping("/projecttask")
|
||||
@Operation(summary = "创建任务")
|
||||
@PreAuthorize("@ss.hasPermission('xxjj:project:projecttask')")
|
||||
public CommonResult<Long> createProjecttask(@Valid @RequestBody TaskCreateReqVO taskCreateReqVO) {
|
||||
return success(taskService.createTask(taskCreateReqVO));
|
||||
}
|
||||
|
||||
@GetMapping("/pagequeryuser")
|
||||
@Operation(summary = "获得成员列表")
|
||||
@PreAuthorize("@ss.hasPermission('xxjj:project:pagequeryuser')")
|
||||
public CommonResult<PageResult<UserPageItemRespVO>> getProjectPageUser(@Valid UserPageReqVO userPageReqVO) {
|
||||
PageResult<AdminUserDO> pageResult = adminUserService.getUserPage(userPageReqVO);
|
||||
|
||||
Collection<Long> deptIds = convertList(pageResult.getList(), AdminUserDO::getDeptId);
|
||||
Map<Long, DeptDO> deptMap = deptService.getDeptMap(deptIds);
|
||||
// 拼接结果返回
|
||||
List<UserPageItemRespVO> userList = new ArrayList<>(pageResult.getList().size());
|
||||
pageResult.getList().forEach(user -> {
|
||||
UserPageItemRespVO respVO = UserConvert.INSTANCE.convert(user);
|
||||
respVO.setDept(UserConvert.INSTANCE.convert(deptMap.get(user.getDeptId())));
|
||||
userList.add(respVO);
|
||||
});
|
||||
|
||||
return success(new PageResult<>(userList, pageResult.getTotal()));
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,14 @@
|
||||
package com.yunxi.scm.module.xxjj.controller.admin.project.vo;
|
||||
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import javax.validation.constraints.*;
|
||||
|
||||
@Schema(description = "管理后台 - 项目管理创建 Request VO")
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ToString(callSuper = true)
|
||||
public class ProjectCreateReqVO extends ProjectBaseVO {
|
||||
|
||||
}
|
@ -0,0 +1,71 @@
|
||||
package com.yunxi.scm.module.xxjj.controller.admin.project.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import com.yunxi.scm.framework.excel.core.annotations.DictFormat;
|
||||
import com.yunxi.scm.framework.excel.core.convert.DictConvert;
|
||||
|
||||
|
||||
/**
|
||||
* 项目管理 Excel VO
|
||||
*
|
||||
* @author 长江云息
|
||||
*/
|
||||
@Data
|
||||
public class ProjectExcelVO {
|
||||
|
||||
@ExcelProperty("编号")
|
||||
private Long id;
|
||||
|
||||
@ExcelProperty("项目名称")
|
||||
private String projectName;
|
||||
|
||||
@ExcelProperty("开始时间")
|
||||
private LocalDateTime startTime;
|
||||
|
||||
@ExcelProperty("结束时间")
|
||||
private LocalDateTime endTime;
|
||||
|
||||
@ExcelProperty("负责人员")
|
||||
private Set<Long> responsible;
|
||||
|
||||
@ExcelProperty("参数人员")
|
||||
private Set<Long> participants;
|
||||
|
||||
@ExcelProperty("任务标记")
|
||||
private String projectMark;
|
||||
|
||||
@ExcelProperty(value = "可见范围", converter = DictConvert.class)
|
||||
@DictFormat("project_visibility") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中
|
||||
private String visibility;
|
||||
|
||||
@ExcelProperty("任务描述")
|
||||
private String projectRemark;
|
||||
|
||||
@ExcelProperty("附件")
|
||||
private String annex;
|
||||
|
||||
@ExcelProperty("项目图片")
|
||||
private String projectPictures;
|
||||
|
||||
@ExcelProperty(value = "项目状态", converter = DictConvert.class)
|
||||
@DictFormat("project_visibility") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中
|
||||
private String projectStatus;
|
||||
|
||||
@ExcelProperty("项目进度")
|
||||
private String projectSchedule;
|
||||
|
||||
@ExcelProperty("创建时间")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
@ExcelProperty("更新时间")
|
||||
private LocalDateTime updateTime;
|
||||
|
||||
}
|
@ -0,0 +1,64 @@
|
||||
package com.yunxi.scm.module.xxjj.controller.admin.project.vo;
|
||||
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import com.yunxi.scm.framework.common.pojo.PageParam;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import static com.yunxi.scm.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
|
||||
|
||||
@Schema(description = "管理后台 - 项目管理分页 Request VO")
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ToString(callSuper = true)
|
||||
public class ProjectPageReqVO extends PageParam {
|
||||
|
||||
@Schema(description = "项目名称", example = "李四")
|
||||
private String projectName;
|
||||
|
||||
@Schema(description = "开始时间")
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||
private LocalDateTime[] startTime;
|
||||
|
||||
@Schema(description = "结束时间")
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||
private LocalDateTime[] endTime;
|
||||
|
||||
@Schema(description = "负责人员")
|
||||
private Set<Long> responsible;
|
||||
|
||||
@Schema(description = "参数人员")
|
||||
private Set<Long> participants;
|
||||
|
||||
@Schema(description = "任务标记")
|
||||
private String projectMark;
|
||||
|
||||
@Schema(description = "可见范围")
|
||||
private String visibility;
|
||||
|
||||
@Schema(description = "任务描述", example = "随便")
|
||||
private String projectRemark;
|
||||
|
||||
@Schema(description = "附件")
|
||||
private String annex;
|
||||
|
||||
@Schema(description = "项目图片")
|
||||
private String projectPictures;
|
||||
|
||||
@Schema(description = "项目状态", example = "1")
|
||||
private String projectStatus;
|
||||
|
||||
@Schema(description = "项目进度")
|
||||
private String projectSchedule;
|
||||
|
||||
@Schema(description = "创建时间")
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||
private LocalDateTime[] createTime;
|
||||
|
||||
@Schema(description = "更新时间")
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||
private LocalDateTime[] updateTime;
|
||||
|
||||
}
|
@ -0,0 +1,22 @@
|
||||
package com.yunxi.scm.module.xxjj.controller.admin.project.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.*;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@Schema(description = "管理后台 - 项目管理 Response VO")
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ToString(callSuper = true)
|
||||
public class ProjectRespVO extends ProjectBaseVO {
|
||||
|
||||
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "8672")
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "创建时间")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
@Schema(description = "更新时间")
|
||||
private LocalDateTime updateTime;
|
||||
|
||||
}
|
@ -0,0 +1,18 @@
|
||||
package com.yunxi.scm.module.xxjj.controller.admin.project.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
import javax.validation.constraints.*;
|
||||
|
||||
@Schema(description = "管理后台 - 项目管理更新 Request VO")
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ToString(callSuper = true)
|
||||
public class ProjectUpdateReqVO extends ProjectBaseVO {
|
||||
|
||||
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "8672")
|
||||
@NotNull(message = "编号不能为空")
|
||||
private Long id;
|
||||
|
||||
}
|
@ -0,0 +1,102 @@
|
||||
package com.yunxi.scm.module.xxjj.controller.admin.task;
|
||||
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import javax.annotation.Resource;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
|
||||
import javax.validation.constraints.*;
|
||||
import javax.validation.*;
|
||||
import javax.servlet.http.*;
|
||||
import java.util.*;
|
||||
import java.io.IOException;
|
||||
|
||||
import com.yunxi.scm.framework.common.pojo.PageResult;
|
||||
import com.yunxi.scm.framework.common.pojo.CommonResult;
|
||||
import static com.yunxi.scm.framework.common.pojo.CommonResult.success;
|
||||
|
||||
import com.yunxi.scm.framework.excel.core.util.ExcelUtils;
|
||||
|
||||
import com.yunxi.scm.framework.operatelog.core.annotations.OperateLog;
|
||||
import static com.yunxi.scm.framework.operatelog.core.enums.OperateTypeEnum.*;
|
||||
|
||||
import com.yunxi.scm.module.xxjj.controller.admin.task.vo.*;
|
||||
import com.yunxi.scm.module.xxjj.dal.dataobject.task.TaskDO;
|
||||
import com.yunxi.scm.module.xxjj.convert.task.TaskConvert;
|
||||
import com.yunxi.scm.module.xxjj.service.task.TaskService;
|
||||
|
||||
@Tag(name = "管理后台 - 任务")
|
||||
@RestController
|
||||
@RequestMapping("/xxjj/task")
|
||||
@Validated
|
||||
public class TaskController {
|
||||
|
||||
@Resource
|
||||
private TaskService taskService;
|
||||
|
||||
@PostMapping("/create")
|
||||
@Operation(summary = "创建任务")
|
||||
@PreAuthorize("@ss.hasPermission('xxjj:task:create')")
|
||||
public CommonResult<Long> createTask(@Valid @RequestBody TaskCreateReqVO createReqVO) {
|
||||
return success(taskService.createTask(createReqVO));
|
||||
}
|
||||
|
||||
@PutMapping("/update")
|
||||
@Operation(summary = "更新任务")
|
||||
@PreAuthorize("@ss.hasPermission('xxjj:task:update')")
|
||||
public CommonResult<Boolean> updateTask(@Valid @RequestBody TaskUpdateReqVO updateReqVO) {
|
||||
taskService.updateTask(updateReqVO);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@DeleteMapping("/delete")
|
||||
@Operation(summary = "删除任务")
|
||||
@Parameter(name = "id", description = "编号", required = true)
|
||||
@PreAuthorize("@ss.hasPermission('xxjj:task:delete')")
|
||||
public CommonResult<Boolean> deleteTask(@RequestParam("id") Long id) {
|
||||
taskService.deleteTask(id);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@GetMapping("/get")
|
||||
@Operation(summary = "获得任务")
|
||||
@Parameter(name = "id", description = "编号", required = true, example = "1024")
|
||||
@PreAuthorize("@ss.hasPermission('xxjj:task:query')")
|
||||
public CommonResult<TaskRespVO> getTask(@RequestParam("id") Long id) {
|
||||
TaskDO task = taskService.getTask(id);
|
||||
return success(TaskConvert.INSTANCE.convert(task));
|
||||
}
|
||||
|
||||
@GetMapping("/list")
|
||||
@Operation(summary = "获得任务列表")
|
||||
@Parameter(name = "ids", description = "编号列表", required = true, example = "1024,2048")
|
||||
@PreAuthorize("@ss.hasPermission('xxjj:task:query')")
|
||||
public CommonResult<List<TaskRespVO>> getTaskList(@RequestParam("ids") Collection<Long> ids) {
|
||||
List<TaskDO> list = taskService.getTaskList(ids);
|
||||
return success(TaskConvert.INSTANCE.convertList(list));
|
||||
}
|
||||
|
||||
@GetMapping("/page")
|
||||
@Operation(summary = "获得任务分页")
|
||||
@PreAuthorize("@ss.hasPermission('xxjj:task:query')")
|
||||
public CommonResult<PageResult<TaskRespVO>> getTaskPage(@Valid TaskPageReqVO pageVO) {
|
||||
PageResult<TaskDO> pageResult = taskService.getTaskPage(pageVO);
|
||||
return success(TaskConvert.INSTANCE.convertPage(pageResult));
|
||||
}
|
||||
|
||||
@GetMapping("/export-excel")
|
||||
@Operation(summary = "导出任务 Excel")
|
||||
@PreAuthorize("@ss.hasPermission('xxjj:task:export')")
|
||||
@OperateLog(type = EXPORT)
|
||||
public void exportTaskExcel(@Valid TaskExportReqVO exportReqVO,
|
||||
HttpServletResponse response) throws IOException {
|
||||
List<TaskDO> list = taskService.getTaskList(exportReqVO);
|
||||
// 导出 Excel
|
||||
List<TaskExcelVO> datas = TaskConvert.INSTANCE.convertList02(list);
|
||||
ExcelUtils.write(response, "任务.xls", "数据", TaskExcelVO.class, datas);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,14 @@
|
||||
package com.yunxi.scm.module.xxjj.controller.admin.task.vo;
|
||||
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import javax.validation.constraints.*;
|
||||
|
||||
@Schema(description = "管理后台 - 任务创建 Request VO")
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ToString(callSuper = true)
|
||||
public class TaskCreateReqVO extends TaskBaseVO {
|
||||
|
||||
}
|
@ -0,0 +1,66 @@
|
||||
package com.yunxi.scm.module.xxjj.controller.admin.task.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
|
||||
/**
|
||||
* 任务 Excel VO
|
||||
*
|
||||
* @author 长江云息
|
||||
*/
|
||||
@Data
|
||||
public class TaskExcelVO {
|
||||
|
||||
@ExcelProperty("编号")
|
||||
private Long id;
|
||||
|
||||
@ExcelProperty("任务标题")
|
||||
private String taskTitle;
|
||||
|
||||
@ExcelProperty("开始时间")
|
||||
private LocalDateTime startTime;
|
||||
|
||||
@ExcelProperty("结束时间")
|
||||
private LocalDateTime endTime;
|
||||
|
||||
@ExcelProperty("项目id")
|
||||
private Long projectId;
|
||||
|
||||
@ExcelProperty("负责人员")
|
||||
private String responsible;
|
||||
|
||||
@ExcelProperty("参数人员")
|
||||
private String participants;
|
||||
|
||||
@ExcelProperty("任务标记")
|
||||
private String taskMark;
|
||||
|
||||
@ExcelProperty("紧要程度")
|
||||
private String criticality;
|
||||
|
||||
@ExcelProperty("任务提醒")
|
||||
private String taskReminder;
|
||||
|
||||
@ExcelProperty("提醒方式")
|
||||
private String reminderMethod;
|
||||
|
||||
@ExcelProperty("任务描述")
|
||||
private String taskRemark;
|
||||
|
||||
@ExcelProperty("附件")
|
||||
private String annex;
|
||||
|
||||
@ExcelProperty("创建时间")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
@ExcelProperty("更新时间")
|
||||
private LocalDateTime updateTime;
|
||||
|
||||
}
|
@ -0,0 +1,64 @@
|
||||
package com.yunxi.scm.module.xxjj.controller.admin.task.vo;
|
||||
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import com.yunxi.scm.framework.common.pojo.PageParam;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import static com.yunxi.scm.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
|
||||
|
||||
@Schema(description = "管理后台 - 任务分页 Request VO")
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ToString(callSuper = true)
|
||||
public class TaskPageReqVO extends PageParam {
|
||||
|
||||
@Schema(description = "任务标题")
|
||||
private String taskTitle;
|
||||
|
||||
@Schema(description = "开始时间")
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||
private LocalDateTime[] startTime;
|
||||
|
||||
@Schema(description = "结束时间")
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||
private LocalDateTime[] endTime;
|
||||
|
||||
@Schema(description = "项目id", example = "4238")
|
||||
private Long projectId;
|
||||
|
||||
@Schema(description = "负责人员")
|
||||
private String responsible;
|
||||
|
||||
@Schema(description = "参数人员")
|
||||
private String participants;
|
||||
|
||||
@Schema(description = "任务标记")
|
||||
private String taskMark;
|
||||
|
||||
@Schema(description = "紧要程度")
|
||||
private String criticality;
|
||||
|
||||
@Schema(description = "任务提醒")
|
||||
private String taskReminder;
|
||||
|
||||
@Schema(description = "提醒方式")
|
||||
private String reminderMethod;
|
||||
|
||||
@Schema(description = "任务描述", example = "随便")
|
||||
private String taskRemark;
|
||||
|
||||
@Schema(description = "附件")
|
||||
private String annex;
|
||||
|
||||
@Schema(description = "创建时间")
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||
private LocalDateTime[] createTime;
|
||||
|
||||
@Schema(description = "更新时间")
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||
private LocalDateTime[] updateTime;
|
||||
|
||||
}
|
@ -0,0 +1,22 @@
|
||||
package com.yunxi.scm.module.xxjj.controller.admin.task.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.*;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@Schema(description = "管理后台 - 任务 Response VO")
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ToString(callSuper = true)
|
||||
public class TaskRespVO extends TaskBaseVO {
|
||||
|
||||
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "7639")
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "创建时间")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
@Schema(description = "更新时间")
|
||||
private LocalDateTime updateTime;
|
||||
|
||||
}
|
@ -0,0 +1,18 @@
|
||||
package com.yunxi.scm.module.xxjj.controller.admin.task.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
import javax.validation.constraints.*;
|
||||
|
||||
@Schema(description = "管理后台 - 任务更新 Request VO")
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ToString(callSuper = true)
|
||||
public class TaskUpdateReqVO extends TaskBaseVO {
|
||||
|
||||
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "7639")
|
||||
@NotNull(message = "编号不能为空")
|
||||
private Long id;
|
||||
|
||||
}
|
@ -0,0 +1,34 @@
|
||||
package com.yunxi.scm.module.xxjj.convert.project;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
import com.yunxi.scm.framework.common.pojo.PageResult;
|
||||
|
||||
import org.mapstruct.Mapper;
|
||||
import org.mapstruct.factory.Mappers;
|
||||
import com.yunxi.scm.module.xxjj.controller.admin.project.vo.*;
|
||||
import com.yunxi.scm.module.xxjj.dal.dataobject.project.ProjectDO;
|
||||
|
||||
/**
|
||||
* 项目管理 Convert
|
||||
*
|
||||
* @author 长江云息
|
||||
*/
|
||||
@Mapper
|
||||
public interface ProjectConvert {
|
||||
|
||||
ProjectConvert INSTANCE = Mappers.getMapper(ProjectConvert.class);
|
||||
|
||||
ProjectDO convert(ProjectCreateReqVO bean);
|
||||
|
||||
ProjectDO convert(ProjectUpdateReqVO bean);
|
||||
|
||||
ProjectRespVO convert(ProjectDO bean);
|
||||
|
||||
List<ProjectRespVO> convertList(List<ProjectDO> list);
|
||||
|
||||
PageResult<ProjectRespVO> convertPage(PageResult<ProjectDO> page);
|
||||
|
||||
List<ProjectExcelVO> convertList02(List<ProjectDO> list);
|
||||
|
||||
}
|
@ -0,0 +1,34 @@
|
||||
package com.yunxi.scm.module.xxjj.convert.task;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
import com.yunxi.scm.framework.common.pojo.PageResult;
|
||||
|
||||
import org.mapstruct.Mapper;
|
||||
import org.mapstruct.factory.Mappers;
|
||||
import com.yunxi.scm.module.xxjj.controller.admin.task.vo.*;
|
||||
import com.yunxi.scm.module.xxjj.dal.dataobject.task.TaskDO;
|
||||
|
||||
/**
|
||||
* 任务 Convert
|
||||
*
|
||||
* @author 长江云息
|
||||
*/
|
||||
@Mapper
|
||||
public interface TaskConvert {
|
||||
|
||||
TaskConvert INSTANCE = Mappers.getMapper(TaskConvert.class);
|
||||
|
||||
TaskDO convert(TaskCreateReqVO bean);
|
||||
|
||||
TaskDO convert(TaskUpdateReqVO bean);
|
||||
|
||||
TaskRespVO convert(TaskDO bean);
|
||||
|
||||
List<TaskRespVO> convertList(List<TaskDO> list);
|
||||
|
||||
PageResult<TaskRespVO> convertPage(PageResult<TaskDO> page);
|
||||
|
||||
List<TaskExcelVO> convertList02(List<TaskDO> list);
|
||||
|
||||
}
|
@ -0,0 +1,87 @@
|
||||
package com.yunxi.scm.module.xxjj.dal.dataobject.project;
|
||||
|
||||
import com.sun.xml.bind.v2.TODO;
|
||||
import com.yunxi.scm.framework.mybatis.core.type.JsonLongSetTypeHandler;
|
||||
import lombok.*;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.*;
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import com.yunxi.scm.framework.mybatis.core.dataobject.BaseDO;
|
||||
|
||||
/**
|
||||
* 项目管理 DO
|
||||
*
|
||||
* @author 长江云息
|
||||
*/
|
||||
@TableName( value = "xxjj_project" , autoResultMap = true)
|
||||
@KeySequence("xxjj_project_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ToString(callSuper = true)
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class ProjectDO extends BaseDO {
|
||||
|
||||
/**
|
||||
* 编号
|
||||
*/
|
||||
@TableId
|
||||
private Long id;
|
||||
/**
|
||||
* 项目名称
|
||||
*/
|
||||
private String projectName;
|
||||
/**
|
||||
* 开始时间
|
||||
*/
|
||||
private LocalDateTime startTime;
|
||||
/**
|
||||
* 结束时间
|
||||
*/
|
||||
private LocalDateTime endTime;
|
||||
/**
|
||||
* 负责人员
|
||||
*/
|
||||
@TableField(typeHandler = JsonLongSetTypeHandler.class)
|
||||
private Set<Long> responsible;
|
||||
/**
|
||||
* 参数人员
|
||||
*/
|
||||
@TableField(typeHandler = JsonLongSetTypeHandler.class)
|
||||
private Set<Long> participants;
|
||||
/**
|
||||
* 任务标记
|
||||
*/
|
||||
private String projectMark;
|
||||
/**
|
||||
* 可见范围
|
||||
*
|
||||
* 枚举 {@link TODO project_visibility 对应的类}
|
||||
*/
|
||||
private String visibility;
|
||||
/**
|
||||
* 任务描述
|
||||
*/
|
||||
private String projectRemark;
|
||||
/**
|
||||
* 附件
|
||||
*/
|
||||
private String annex;
|
||||
/**
|
||||
* 项目图片
|
||||
*/
|
||||
private String projectPictures;
|
||||
/**
|
||||
* 项目状态
|
||||
*
|
||||
* 枚举 {@link TODO project_visibility 对应的类}
|
||||
*/
|
||||
private String projectStatus;
|
||||
/**
|
||||
* 项目进度
|
||||
*/
|
||||
private String projectSchedule;
|
||||
|
||||
}
|
@ -0,0 +1,81 @@
|
||||
package com.yunxi.scm.module.xxjj.dal.dataobject.task;
|
||||
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.LocalDateTime;
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import com.yunxi.scm.framework.mybatis.core.dataobject.BaseDO;
|
||||
|
||||
/**
|
||||
* 任务 DO
|
||||
*
|
||||
* @author 长江云息
|
||||
*/
|
||||
@TableName("xxjj_task")
|
||||
@KeySequence("xxjj_task_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ToString(callSuper = true)
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class TaskDO extends BaseDO {
|
||||
|
||||
/**
|
||||
* 编号
|
||||
*/
|
||||
@TableId
|
||||
private Long id;
|
||||
/**
|
||||
* 任务标题
|
||||
*/
|
||||
private String taskTitle;
|
||||
/**
|
||||
* 开始时间
|
||||
*/
|
||||
private LocalDateTime startTime;
|
||||
/**
|
||||
* 结束时间
|
||||
*/
|
||||
private LocalDateTime endTime;
|
||||
/**
|
||||
* 项目id
|
||||
*/
|
||||
private Long projectId;
|
||||
/**
|
||||
* 负责人员
|
||||
*/
|
||||
private String responsible;
|
||||
/**
|
||||
* 参数人员
|
||||
*/
|
||||
private String participants;
|
||||
/**
|
||||
* 任务标记
|
||||
*/
|
||||
private String taskMark;
|
||||
/**
|
||||
* 紧要程度
|
||||
*/
|
||||
private String criticality;
|
||||
/**
|
||||
* 任务提醒
|
||||
*/
|
||||
private String taskReminder;
|
||||
/**
|
||||
* 提醒方式
|
||||
*/
|
||||
private String reminderMethod;
|
||||
/**
|
||||
* 任务描述
|
||||
*/
|
||||
private String taskRemark;
|
||||
/**
|
||||
* 附件
|
||||
*/
|
||||
private String annex;
|
||||
|
||||
}
|
@ -0,0 +1,58 @@
|
||||
package com.yunxi.scm.module.xxjj.dal.mysql.project;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
import com.yunxi.scm.framework.common.pojo.PageResult;
|
||||
import com.yunxi.scm.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import com.yunxi.scm.framework.mybatis.core.mapper.BaseMapperX;
|
||||
import com.yunxi.scm.module.xxjj.dal.dataobject.project.ProjectDO;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import com.yunxi.scm.module.xxjj.controller.admin.project.vo.*;
|
||||
|
||||
/**
|
||||
* 项目管理 Mapper
|
||||
*
|
||||
* @author 长江云息
|
||||
*/
|
||||
@Mapper
|
||||
public interface ProjectMapper extends BaseMapperX<ProjectDO> {
|
||||
|
||||
default PageResult<ProjectDO> selectPage(ProjectPageReqVO reqVO) {
|
||||
return selectPage(reqVO, new LambdaQueryWrapperX<ProjectDO>()
|
||||
.likeIfPresent(ProjectDO::getProjectName, reqVO.getProjectName())
|
||||
.betweenIfPresent(ProjectDO::getStartTime, reqVO.getStartTime())
|
||||
.betweenIfPresent(ProjectDO::getEndTime, reqVO.getEndTime())
|
||||
.eqIfPresent(ProjectDO::getResponsible, reqVO.getResponsible())
|
||||
.eqIfPresent(ProjectDO::getParticipants, reqVO.getParticipants())
|
||||
.eqIfPresent(ProjectDO::getProjectMark, reqVO.getProjectMark())
|
||||
.eqIfPresent(ProjectDO::getVisibility, reqVO.getVisibility())
|
||||
.eqIfPresent(ProjectDO::getProjectRemark, reqVO.getProjectRemark())
|
||||
.eqIfPresent(ProjectDO::getAnnex, reqVO.getAnnex())
|
||||
.eqIfPresent(ProjectDO::getProjectPictures, reqVO.getProjectPictures())
|
||||
.eqIfPresent(ProjectDO::getProjectStatus, reqVO.getProjectStatus())
|
||||
.eqIfPresent(ProjectDO::getProjectSchedule, reqVO.getProjectSchedule())
|
||||
.betweenIfPresent(ProjectDO::getCreateTime, reqVO.getCreateTime())
|
||||
.betweenIfPresent(ProjectDO::getUpdateTime, reqVO.getUpdateTime())
|
||||
.orderByDesc(ProjectDO::getId));
|
||||
}
|
||||
|
||||
default List<ProjectDO> selectList(ProjectExportReqVO reqVO) {
|
||||
return selectList(new LambdaQueryWrapperX<ProjectDO>()
|
||||
.likeIfPresent(ProjectDO::getProjectName, reqVO.getProjectName())
|
||||
.betweenIfPresent(ProjectDO::getStartTime, reqVO.getStartTime())
|
||||
.betweenIfPresent(ProjectDO::getEndTime, reqVO.getEndTime())
|
||||
.eqIfPresent(ProjectDO::getResponsible, reqVO.getResponsible())
|
||||
.eqIfPresent(ProjectDO::getParticipants, reqVO.getParticipants())
|
||||
.eqIfPresent(ProjectDO::getProjectMark, reqVO.getProjectMark())
|
||||
.eqIfPresent(ProjectDO::getVisibility, reqVO.getVisibility())
|
||||
.eqIfPresent(ProjectDO::getProjectRemark, reqVO.getProjectRemark())
|
||||
.eqIfPresent(ProjectDO::getAnnex, reqVO.getAnnex())
|
||||
.eqIfPresent(ProjectDO::getProjectPictures, reqVO.getProjectPictures())
|
||||
.eqIfPresent(ProjectDO::getProjectStatus, reqVO.getProjectStatus())
|
||||
.eqIfPresent(ProjectDO::getProjectSchedule, reqVO.getProjectSchedule())
|
||||
.betweenIfPresent(ProjectDO::getCreateTime, reqVO.getCreateTime())
|
||||
.betweenIfPresent(ProjectDO::getUpdateTime, reqVO.getUpdateTime())
|
||||
.orderByDesc(ProjectDO::getId));
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,58 @@
|
||||
package com.yunxi.scm.module.xxjj.dal.mysql.task;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
import com.yunxi.scm.framework.common.pojo.PageResult;
|
||||
import com.yunxi.scm.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import com.yunxi.scm.framework.mybatis.core.mapper.BaseMapperX;
|
||||
import com.yunxi.scm.module.xxjj.dal.dataobject.task.TaskDO;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import com.yunxi.scm.module.xxjj.controller.admin.task.vo.*;
|
||||
|
||||
/**
|
||||
* 任务 Mapper
|
||||
*
|
||||
* @author 长江云息
|
||||
*/
|
||||
@Mapper
|
||||
public interface TaskMapper extends BaseMapperX<TaskDO> {
|
||||
|
||||
default PageResult<TaskDO> selectPage(TaskPageReqVO reqVO) {
|
||||
return selectPage(reqVO, new LambdaQueryWrapperX<TaskDO>()
|
||||
.eqIfPresent(TaskDO::getTaskTitle, reqVO.getTaskTitle())
|
||||
.betweenIfPresent(TaskDO::getStartTime, reqVO.getStartTime())
|
||||
.betweenIfPresent(TaskDO::getEndTime, reqVO.getEndTime())
|
||||
.eqIfPresent(TaskDO::getProjectId, reqVO.getProjectId())
|
||||
.eqIfPresent(TaskDO::getResponsible, reqVO.getResponsible())
|
||||
.eqIfPresent(TaskDO::getParticipants, reqVO.getParticipants())
|
||||
.eqIfPresent(TaskDO::getTaskMark, reqVO.getTaskMark())
|
||||
.eqIfPresent(TaskDO::getCriticality, reqVO.getCriticality())
|
||||
.eqIfPresent(TaskDO::getTaskReminder, reqVO.getTaskReminder())
|
||||
.eqIfPresent(TaskDO::getReminderMethod, reqVO.getReminderMethod())
|
||||
.eqIfPresent(TaskDO::getTaskRemark, reqVO.getTaskRemark())
|
||||
.eqIfPresent(TaskDO::getAnnex, reqVO.getAnnex())
|
||||
.betweenIfPresent(TaskDO::getCreateTime, reqVO.getCreateTime())
|
||||
.betweenIfPresent(TaskDO::getUpdateTime, reqVO.getUpdateTime())
|
||||
.orderByDesc(TaskDO::getId));
|
||||
}
|
||||
|
||||
default List<TaskDO> selectList(TaskExportReqVO reqVO) {
|
||||
return selectList(new LambdaQueryWrapperX<TaskDO>()
|
||||
.eqIfPresent(TaskDO::getTaskTitle, reqVO.getTaskTitle())
|
||||
.betweenIfPresent(TaskDO::getStartTime, reqVO.getStartTime())
|
||||
.betweenIfPresent(TaskDO::getEndTime, reqVO.getEndTime())
|
||||
.eqIfPresent(TaskDO::getProjectId, reqVO.getProjectId())
|
||||
.eqIfPresent(TaskDO::getResponsible, reqVO.getResponsible())
|
||||
.eqIfPresent(TaskDO::getParticipants, reqVO.getParticipants())
|
||||
.eqIfPresent(TaskDO::getTaskMark, reqVO.getTaskMark())
|
||||
.eqIfPresent(TaskDO::getCriticality, reqVO.getCriticality())
|
||||
.eqIfPresent(TaskDO::getTaskReminder, reqVO.getTaskReminder())
|
||||
.eqIfPresent(TaskDO::getReminderMethod, reqVO.getReminderMethod())
|
||||
.eqIfPresent(TaskDO::getTaskRemark, reqVO.getTaskRemark())
|
||||
.eqIfPresent(TaskDO::getAnnex, reqVO.getAnnex())
|
||||
.betweenIfPresent(TaskDO::getCreateTime, reqVO.getCreateTime())
|
||||
.betweenIfPresent(TaskDO::getUpdateTime, reqVO.getUpdateTime())
|
||||
.orderByDesc(TaskDO::getId));
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,70 @@
|
||||
package com.yunxi.scm.module.xxjj.service.project;
|
||||
|
||||
import java.util.*;
|
||||
import javax.validation.*;
|
||||
import com.yunxi.scm.module.xxjj.controller.admin.project.vo.*;
|
||||
import com.yunxi.scm.module.xxjj.dal.dataobject.project.ProjectDO;
|
||||
import com.yunxi.scm.framework.common.pojo.PageResult;
|
||||
|
||||
/**
|
||||
* 项目管理 Service 接口
|
||||
*
|
||||
* @author 长江云息
|
||||
*/
|
||||
public interface ProjectService {
|
||||
|
||||
/**
|
||||
* 创建项目管理
|
||||
*
|
||||
* @param createReqVO 创建信息
|
||||
* @return 编号
|
||||
*/
|
||||
Long createProject(@Valid ProjectCreateReqVO createReqVO);
|
||||
|
||||
/**
|
||||
* 更新项目管理
|
||||
*
|
||||
* @param updateReqVO 更新信息
|
||||
*/
|
||||
void updateProject(@Valid ProjectUpdateReqVO updateReqVO);
|
||||
|
||||
/**
|
||||
* 删除项目管理
|
||||
*
|
||||
* @param id 编号
|
||||
*/
|
||||
void deleteProject(Long id);
|
||||
|
||||
/**
|
||||
* 获得项目管理
|
||||
*
|
||||
* @param id 编号
|
||||
* @return 项目管理
|
||||
*/
|
||||
ProjectDO getProject(Long id);
|
||||
|
||||
/**
|
||||
* 获得项目管理列表
|
||||
*
|
||||
* @param ids 编号
|
||||
* @return 项目管理列表
|
||||
*/
|
||||
List<ProjectDO> getProjectList(Collection<Long> ids);
|
||||
|
||||
/**
|
||||
* 获得项目管理分页
|
||||
*
|
||||
* @param pageReqVO 分页查询
|
||||
* @return 项目管理分页
|
||||
*/
|
||||
PageResult<ProjectDO> getProjectPage(ProjectPageReqVO pageReqVO);
|
||||
|
||||
/**
|
||||
* 获得项目管理列表, 用于 Excel 导出
|
||||
*
|
||||
* @param exportReqVO 查询条件
|
||||
* @return 项目管理列表
|
||||
*/
|
||||
List<ProjectDO> getProjectList(ProjectExportReqVO exportReqVO);
|
||||
|
||||
}
|
@ -0,0 +1,82 @@
|
||||
package com.yunxi.scm.module.xxjj.service.project;
|
||||
|
||||
import org.springframework.stereotype.Service;
|
||||
import javax.annotation.Resource;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
|
||||
import java.util.*;
|
||||
import com.yunxi.scm.module.xxjj.controller.admin.project.vo.*;
|
||||
import com.yunxi.scm.module.xxjj.dal.dataobject.project.ProjectDO;
|
||||
import com.yunxi.scm.framework.common.pojo.PageResult;
|
||||
|
||||
import com.yunxi.scm.module.xxjj.convert.project.ProjectConvert;
|
||||
import com.yunxi.scm.module.xxjj.dal.mysql.project.ProjectMapper;
|
||||
|
||||
import static com.yunxi.scm.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||
import static com.yunxi.scm.module.xxjj.enums.ErrorCodeConstants.*;
|
||||
|
||||
/**
|
||||
* 项目管理 Service 实现类
|
||||
*
|
||||
* @author 长江云息
|
||||
*/
|
||||
@Service
|
||||
@Validated
|
||||
public class ProjectServiceImpl implements ProjectService {
|
||||
|
||||
@Resource
|
||||
private ProjectMapper projectMapper;
|
||||
|
||||
@Override
|
||||
public Long createProject(ProjectCreateReqVO createReqVO) {
|
||||
// 插入
|
||||
ProjectDO project = ProjectConvert.INSTANCE.convert(createReqVO);
|
||||
projectMapper.insert(project);
|
||||
// 返回
|
||||
return project.getId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateProject(ProjectUpdateReqVO updateReqVO) {
|
||||
// 校验存在
|
||||
validateProjectExists(updateReqVO.getId());
|
||||
// 更新
|
||||
ProjectDO updateObj = ProjectConvert.INSTANCE.convert(updateReqVO);
|
||||
projectMapper.updateById(updateObj);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteProject(Long id) {
|
||||
// 校验存在
|
||||
validateProjectExists(id);
|
||||
// 删除
|
||||
projectMapper.deleteById(id);
|
||||
}
|
||||
|
||||
private void validateProjectExists(Long id) {
|
||||
if (projectMapper.selectById(id) == null) {
|
||||
throw exception(PROJECT_NOT_EXISTS);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public ProjectDO getProject(Long id) {
|
||||
return projectMapper.selectById(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ProjectDO> getProjectList(Collection<Long> ids) {
|
||||
return projectMapper.selectBatchIds(ids);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageResult<ProjectDO> getProjectPage(ProjectPageReqVO pageReqVO) {
|
||||
return projectMapper.selectPage(pageReqVO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ProjectDO> getProjectList(ProjectExportReqVO exportReqVO) {
|
||||
return projectMapper.selectList(exportReqVO);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,70 @@
|
||||
package com.yunxi.scm.module.xxjj.service.task;
|
||||
|
||||
import java.util.*;
|
||||
import javax.validation.*;
|
||||
import com.yunxi.scm.module.xxjj.controller.admin.task.vo.*;
|
||||
import com.yunxi.scm.module.xxjj.dal.dataobject.task.TaskDO;
|
||||
import com.yunxi.scm.framework.common.pojo.PageResult;
|
||||
|
||||
/**
|
||||
* 任务 Service 接口
|
||||
*
|
||||
* @author 长江云息
|
||||
*/
|
||||
public interface TaskService {
|
||||
|
||||
/**
|
||||
* 创建任务
|
||||
*
|
||||
* @param createReqVO 创建信息
|
||||
* @return 编号
|
||||
*/
|
||||
Long createTask(@Valid TaskCreateReqVO createReqVO);
|
||||
|
||||
/**
|
||||
* 更新任务
|
||||
*
|
||||
* @param updateReqVO 更新信息
|
||||
*/
|
||||
void updateTask(@Valid TaskUpdateReqVO updateReqVO);
|
||||
|
||||
/**
|
||||
* 删除任务
|
||||
*
|
||||
* @param id 编号
|
||||
*/
|
||||
void deleteTask(Long id);
|
||||
|
||||
/**
|
||||
* 获得任务
|
||||
*
|
||||
* @param id 编号
|
||||
* @return 任务
|
||||
*/
|
||||
TaskDO getTask(Long id);
|
||||
|
||||
/**
|
||||
* 获得任务列表
|
||||
*
|
||||
* @param ids 编号
|
||||
* @return 任务列表
|
||||
*/
|
||||
List<TaskDO> getTaskList(Collection<Long> ids);
|
||||
|
||||
/**
|
||||
* 获得任务分页
|
||||
*
|
||||
* @param pageReqVO 分页查询
|
||||
* @return 任务分页
|
||||
*/
|
||||
PageResult<TaskDO> getTaskPage(TaskPageReqVO pageReqVO);
|
||||
|
||||
/**
|
||||
* 获得任务列表, 用于 Excel 导出
|
||||
*
|
||||
* @param exportReqVO 查询条件
|
||||
* @return 任务列表
|
||||
*/
|
||||
List<TaskDO> getTaskList(TaskExportReqVO exportReqVO);
|
||||
|
||||
}
|
@ -0,0 +1,82 @@
|
||||
package com.yunxi.scm.module.xxjj.service.task;
|
||||
|
||||
import org.springframework.stereotype.Service;
|
||||
import javax.annotation.Resource;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
|
||||
import java.util.*;
|
||||
import com.yunxi.scm.module.xxjj.controller.admin.task.vo.*;
|
||||
import com.yunxi.scm.module.xxjj.dal.dataobject.task.TaskDO;
|
||||
import com.yunxi.scm.framework.common.pojo.PageResult;
|
||||
|
||||
import com.yunxi.scm.module.xxjj.convert.task.TaskConvert;
|
||||
import com.yunxi.scm.module.xxjj.dal.mysql.task.TaskMapper;
|
||||
|
||||
import static com.yunxi.scm.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||
import static com.yunxi.scm.module.xxjj.enums.ErrorCodeConstants.*;
|
||||
|
||||
/**
|
||||
* 任务 Service 实现类
|
||||
*
|
||||
* @author 长江云息
|
||||
*/
|
||||
@Service
|
||||
@Validated
|
||||
public class TaskServiceImpl implements TaskService {
|
||||
|
||||
@Resource
|
||||
private TaskMapper taskMapper;
|
||||
|
||||
@Override
|
||||
public Long createTask(TaskCreateReqVO createReqVO) {
|
||||
// 插入
|
||||
TaskDO task = TaskConvert.INSTANCE.convert(createReqVO);
|
||||
taskMapper.insert(task);
|
||||
// 返回
|
||||
return task.getId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateTask(TaskUpdateReqVO updateReqVO) {
|
||||
// 校验存在
|
||||
validateTaskExists(updateReqVO.getId());
|
||||
// 更新
|
||||
TaskDO updateObj = TaskConvert.INSTANCE.convert(updateReqVO);
|
||||
taskMapper.updateById(updateObj);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteTask(Long id) {
|
||||
// 校验存在
|
||||
validateTaskExists(id);
|
||||
// 删除
|
||||
taskMapper.deleteById(id);
|
||||
}
|
||||
|
||||
private void validateTaskExists(Long id) {
|
||||
if (taskMapper.selectById(id) == null) {
|
||||
throw exception(TASK_NOT_EXISTS);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public TaskDO getTask(Long id) {
|
||||
return taskMapper.selectById(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<TaskDO> getTaskList(Collection<Long> ids) {
|
||||
return taskMapper.selectBatchIds(ids);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageResult<TaskDO> getTaskPage(TaskPageReqVO pageReqVO) {
|
||||
return taskMapper.selectPage(pageReqVO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<TaskDO> getTaskList(TaskExportReqVO exportReqVO) {
|
||||
return taskMapper.selectList(exportReqVO);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,255 @@
|
||||
package com.yunxi.scm.module.xxjj.service.project;
|
||||
|
||||
import org.junit.jupiter.api.Disabled;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.boot.test.mock.mockito.MockBean;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
import com.yunxi.scm.framework.test.core.ut.BaseDbUnitTest;
|
||||
|
||||
import com.yunxi.scm.module.xxjj.controller.admin.project.vo.*;
|
||||
import com.yunxi.scm.module.xxjj.dal.dataobject.project.ProjectDO;
|
||||
import com.yunxi.scm.module.xxjj.dal.mysql.project.ProjectMapper;
|
||||
import com.yunxi.scm.framework.common.pojo.PageResult;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import org.springframework.context.annotation.Import;
|
||||
import java.util.*;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import static cn.hutool.core.util.RandomUtil.*;
|
||||
import static com.yunxi.scm.module.xxjj.enums.ErrorCodeConstants.*;
|
||||
import static com.yunxi.scm.framework.test.core.util.AssertUtils.*;
|
||||
import static com.yunxi.scm.framework.test.core.util.RandomUtils.*;
|
||||
import static com.yunxi.scm.framework.common.util.date.LocalDateTimeUtils.*;
|
||||
import static com.yunxi.scm.framework.common.util.object.ObjectUtils.*;
|
||||
import static com.yunxi.scm.framework.common.util.date.DateUtils.*;
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
import static org.mockito.Mockito.*;
|
||||
|
||||
/**
|
||||
* {@link ProjectServiceImpl} 的单元测试类
|
||||
*
|
||||
* @author 长江云息
|
||||
*/
|
||||
@Import(ProjectServiceImpl.class)
|
||||
public class ProjectServiceImplTest extends BaseDbUnitTest {
|
||||
|
||||
@Resource
|
||||
private ProjectServiceImpl projectService;
|
||||
|
||||
@Resource
|
||||
private ProjectMapper projectMapper;
|
||||
|
||||
@Test
|
||||
public void testCreateProject_success() {
|
||||
// 准备参数
|
||||
ProjectCreateReqVO reqVO = randomPojo(ProjectCreateReqVO.class);
|
||||
|
||||
// 调用
|
||||
Long projectId = projectService.createProject(reqVO);
|
||||
// 断言
|
||||
assertNotNull(projectId);
|
||||
// 校验记录的属性是否正确
|
||||
ProjectDO project = projectMapper.selectById(projectId);
|
||||
assertPojoEquals(reqVO, project);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdateProject_success() {
|
||||
// mock 数据
|
||||
ProjectDO dbProject = randomPojo(ProjectDO.class);
|
||||
projectMapper.insert(dbProject);// @Sql: 先插入出一条存在的数据
|
||||
// 准备参数
|
||||
ProjectUpdateReqVO reqVO = randomPojo(ProjectUpdateReqVO.class, o -> {
|
||||
o.setId(dbProject.getId()); // 设置更新的 ID
|
||||
});
|
||||
|
||||
// 调用
|
||||
projectService.updateProject(reqVO);
|
||||
// 校验是否更新正确
|
||||
ProjectDO project = projectMapper.selectById(reqVO.getId()); // 获取最新的
|
||||
assertPojoEquals(reqVO, project);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdateProject_notExists() {
|
||||
// 准备参数
|
||||
ProjectUpdateReqVO reqVO = randomPojo(ProjectUpdateReqVO.class);
|
||||
|
||||
// 调用, 并断言异常
|
||||
assertServiceException(() -> projectService.updateProject(reqVO), PROJECT_NOT_EXISTS);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDeleteProject_success() {
|
||||
// mock 数据
|
||||
ProjectDO dbProject = randomPojo(ProjectDO.class);
|
||||
projectMapper.insert(dbProject);// @Sql: 先插入出一条存在的数据
|
||||
// 准备参数
|
||||
Long id = dbProject.getId();
|
||||
|
||||
// 调用
|
||||
projectService.deleteProject(id);
|
||||
// 校验数据不存在了
|
||||
assertNull(projectMapper.selectById(id));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDeleteProject_notExists() {
|
||||
// 准备参数
|
||||
Long id = randomLongId();
|
||||
|
||||
// 调用, 并断言异常
|
||||
assertServiceException(() -> projectService.deleteProject(id), PROJECT_NOT_EXISTS);
|
||||
}
|
||||
|
||||
@Test
|
||||
@Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
|
||||
public void testGetProjectPage() {
|
||||
// mock 数据
|
||||
ProjectDO dbProject = randomPojo(ProjectDO.class, o -> { // 等会查询到
|
||||
o.setProjectName(null);
|
||||
o.setStartTime(null);
|
||||
o.setEndTime(null);
|
||||
o.setResponsible(null);
|
||||
o.setParticipants(null);
|
||||
o.setProjectMark(null);
|
||||
o.setVisibility(null);
|
||||
o.setProjectRemark(null);
|
||||
o.setAnnex(null);
|
||||
o.setProjectPictures(null);
|
||||
o.setProjectStatus(null);
|
||||
o.setProjectSchedule(null);
|
||||
o.setCreateTime(null);
|
||||
o.setUpdateTime(null);
|
||||
});
|
||||
projectMapper.insert(dbProject);
|
||||
// 测试 projectName 不匹配
|
||||
projectMapper.insert(cloneIgnoreId(dbProject, o -> o.setProjectName(null)));
|
||||
// 测试 startTime 不匹配
|
||||
projectMapper.insert(cloneIgnoreId(dbProject, o -> o.setStartTime(null)));
|
||||
// 测试 endTime 不匹配
|
||||
projectMapper.insert(cloneIgnoreId(dbProject, o -> o.setEndTime(null)));
|
||||
// 测试 responsible 不匹配
|
||||
projectMapper.insert(cloneIgnoreId(dbProject, o -> o.setResponsible(null)));
|
||||
// 测试 participants 不匹配
|
||||
projectMapper.insert(cloneIgnoreId(dbProject, o -> o.setParticipants(null)));
|
||||
// 测试 projectMark 不匹配
|
||||
projectMapper.insert(cloneIgnoreId(dbProject, o -> o.setProjectMark(null)));
|
||||
// 测试 visibility 不匹配
|
||||
projectMapper.insert(cloneIgnoreId(dbProject, o -> o.setVisibility(null)));
|
||||
// 测试 projectRemark 不匹配
|
||||
projectMapper.insert(cloneIgnoreId(dbProject, o -> o.setProjectRemark(null)));
|
||||
// 测试 annex 不匹配
|
||||
projectMapper.insert(cloneIgnoreId(dbProject, o -> o.setAnnex(null)));
|
||||
// 测试 projectPictures 不匹配
|
||||
projectMapper.insert(cloneIgnoreId(dbProject, o -> o.setProjectPictures(null)));
|
||||
// 测试 projectStatus 不匹配
|
||||
projectMapper.insert(cloneIgnoreId(dbProject, o -> o.setProjectStatus(null)));
|
||||
// 测试 projectSchedule 不匹配
|
||||
projectMapper.insert(cloneIgnoreId(dbProject, o -> o.setProjectSchedule(null)));
|
||||
// 测试 createTime 不匹配
|
||||
projectMapper.insert(cloneIgnoreId(dbProject, o -> o.setCreateTime(null)));
|
||||
// 测试 updateTime 不匹配
|
||||
projectMapper.insert(cloneIgnoreId(dbProject, o -> o.setUpdateTime(null)));
|
||||
// 准备参数
|
||||
ProjectPageReqVO reqVO = new ProjectPageReqVO();
|
||||
reqVO.setProjectName(null);
|
||||
reqVO.setStartTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
|
||||
reqVO.setEndTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
|
||||
reqVO.setResponsible(null);
|
||||
reqVO.setParticipants(null);
|
||||
reqVO.setProjectMark(null);
|
||||
reqVO.setVisibility(null);
|
||||
reqVO.setProjectRemark(null);
|
||||
reqVO.setAnnex(null);
|
||||
reqVO.setProjectPictures(null);
|
||||
reqVO.setProjectStatus(null);
|
||||
reqVO.setProjectSchedule(null);
|
||||
reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
|
||||
reqVO.setUpdateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
|
||||
|
||||
// 调用
|
||||
PageResult<ProjectDO> pageResult = projectService.getProjectPage(reqVO);
|
||||
// 断言
|
||||
assertEquals(1, pageResult.getTotal());
|
||||
assertEquals(1, pageResult.getList().size());
|
||||
assertPojoEquals(dbProject, pageResult.getList().get(0));
|
||||
}
|
||||
|
||||
@Test
|
||||
@Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
|
||||
public void testGetProjectList() {
|
||||
// mock 数据
|
||||
ProjectDO dbProject = randomPojo(ProjectDO.class, o -> { // 等会查询到
|
||||
o.setProjectName(null);
|
||||
o.setStartTime(null);
|
||||
o.setEndTime(null);
|
||||
o.setResponsible(null);
|
||||
o.setParticipants(null);
|
||||
o.setProjectMark(null);
|
||||
o.setVisibility(null);
|
||||
o.setProjectRemark(null);
|
||||
o.setAnnex(null);
|
||||
o.setProjectPictures(null);
|
||||
o.setProjectStatus(null);
|
||||
o.setProjectSchedule(null);
|
||||
o.setCreateTime(null);
|
||||
o.setUpdateTime(null);
|
||||
});
|
||||
projectMapper.insert(dbProject);
|
||||
// 测试 projectName 不匹配
|
||||
projectMapper.insert(cloneIgnoreId(dbProject, o -> o.setProjectName(null)));
|
||||
// 测试 startTime 不匹配
|
||||
projectMapper.insert(cloneIgnoreId(dbProject, o -> o.setStartTime(null)));
|
||||
// 测试 endTime 不匹配
|
||||
projectMapper.insert(cloneIgnoreId(dbProject, o -> o.setEndTime(null)));
|
||||
// 测试 responsible 不匹配
|
||||
projectMapper.insert(cloneIgnoreId(dbProject, o -> o.setResponsible(null)));
|
||||
// 测试 participants 不匹配
|
||||
projectMapper.insert(cloneIgnoreId(dbProject, o -> o.setParticipants(null)));
|
||||
// 测试 projectMark 不匹配
|
||||
projectMapper.insert(cloneIgnoreId(dbProject, o -> o.setProjectMark(null)));
|
||||
// 测试 visibility 不匹配
|
||||
projectMapper.insert(cloneIgnoreId(dbProject, o -> o.setVisibility(null)));
|
||||
// 测试 projectRemark 不匹配
|
||||
projectMapper.insert(cloneIgnoreId(dbProject, o -> o.setProjectRemark(null)));
|
||||
// 测试 annex 不匹配
|
||||
projectMapper.insert(cloneIgnoreId(dbProject, o -> o.setAnnex(null)));
|
||||
// 测试 projectPictures 不匹配
|
||||
projectMapper.insert(cloneIgnoreId(dbProject, o -> o.setProjectPictures(null)));
|
||||
// 测试 projectStatus 不匹配
|
||||
projectMapper.insert(cloneIgnoreId(dbProject, o -> o.setProjectStatus(null)));
|
||||
// 测试 projectSchedule 不匹配
|
||||
projectMapper.insert(cloneIgnoreId(dbProject, o -> o.setProjectSchedule(null)));
|
||||
// 测试 createTime 不匹配
|
||||
projectMapper.insert(cloneIgnoreId(dbProject, o -> o.setCreateTime(null)));
|
||||
// 测试 updateTime 不匹配
|
||||
projectMapper.insert(cloneIgnoreId(dbProject, o -> o.setUpdateTime(null)));
|
||||
// 准备参数
|
||||
ProjectExportReqVO reqVO = new ProjectExportReqVO();
|
||||
reqVO.setProjectName(null);
|
||||
reqVO.setStartTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
|
||||
reqVO.setEndTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
|
||||
reqVO.setResponsible(null);
|
||||
reqVO.setParticipants(null);
|
||||
reqVO.setProjectMark(null);
|
||||
reqVO.setVisibility(null);
|
||||
reqVO.setProjectRemark(null);
|
||||
reqVO.setAnnex(null);
|
||||
reqVO.setProjectPictures(null);
|
||||
reqVO.setProjectStatus(null);
|
||||
reqVO.setProjectSchedule(null);
|
||||
reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
|
||||
reqVO.setUpdateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
|
||||
|
||||
// 调用
|
||||
List<ProjectDO> list = projectService.getProjectList(reqVO);
|
||||
// 断言
|
||||
assertEquals(1, list.size());
|
||||
assertPojoEquals(dbProject, list.get(0));
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,255 @@
|
||||
package com.yunxi.scm.module.xxjj.service.task;
|
||||
|
||||
import org.junit.jupiter.api.Disabled;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.boot.test.mock.mockito.MockBean;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
import com.yunxi.scm.framework.test.core.ut.BaseDbUnitTest;
|
||||
|
||||
import com.yunxi.scm.module.xxjj.controller.admin.task.vo.*;
|
||||
import com.yunxi.scm.module.xxjj.dal.dataobject.task.TaskDO;
|
||||
import com.yunxi.scm.module.xxjj.dal.mysql.task.TaskMapper;
|
||||
import com.yunxi.scm.framework.common.pojo.PageResult;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import org.springframework.context.annotation.Import;
|
||||
import java.util.*;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import static cn.hutool.core.util.RandomUtil.*;
|
||||
import static com.yunxi.scm.module.xxjj.enums.ErrorCodeConstants.*;
|
||||
import static com.yunxi.scm.framework.test.core.util.AssertUtils.*;
|
||||
import static com.yunxi.scm.framework.test.core.util.RandomUtils.*;
|
||||
import static com.yunxi.scm.framework.common.util.date.LocalDateTimeUtils.*;
|
||||
import static com.yunxi.scm.framework.common.util.object.ObjectUtils.*;
|
||||
import static com.yunxi.scm.framework.common.util.date.DateUtils.*;
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
import static org.mockito.Mockito.*;
|
||||
|
||||
/**
|
||||
* {@link TaskServiceImpl} 的单元测试类
|
||||
*
|
||||
* @author 长江云息
|
||||
*/
|
||||
@Import(TaskServiceImpl.class)
|
||||
public class TaskServiceImplTest extends BaseDbUnitTest {
|
||||
|
||||
@Resource
|
||||
private TaskServiceImpl taskService;
|
||||
|
||||
@Resource
|
||||
private TaskMapper taskMapper;
|
||||
|
||||
@Test
|
||||
public void testCreateTask_success() {
|
||||
// 准备参数
|
||||
TaskCreateReqVO reqVO = randomPojo(TaskCreateReqVO.class);
|
||||
|
||||
// 调用
|
||||
Long taskId = taskService.createTask(reqVO);
|
||||
// 断言
|
||||
assertNotNull(taskId);
|
||||
// 校验记录的属性是否正确
|
||||
TaskDO task = taskMapper.selectById(taskId);
|
||||
assertPojoEquals(reqVO, task);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdateTask_success() {
|
||||
// mock 数据
|
||||
TaskDO dbTask = randomPojo(TaskDO.class);
|
||||
taskMapper.insert(dbTask);// @Sql: 先插入出一条存在的数据
|
||||
// 准备参数
|
||||
TaskUpdateReqVO reqVO = randomPojo(TaskUpdateReqVO.class, o -> {
|
||||
o.setId(dbTask.getId()); // 设置更新的 ID
|
||||
});
|
||||
|
||||
// 调用
|
||||
taskService.updateTask(reqVO);
|
||||
// 校验是否更新正确
|
||||
TaskDO task = taskMapper.selectById(reqVO.getId()); // 获取最新的
|
||||
assertPojoEquals(reqVO, task);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdateTask_notExists() {
|
||||
// 准备参数
|
||||
TaskUpdateReqVO reqVO = randomPojo(TaskUpdateReqVO.class);
|
||||
|
||||
// 调用, 并断言异常
|
||||
assertServiceException(() -> taskService.updateTask(reqVO), TASK_NOT_EXISTS);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDeleteTask_success() {
|
||||
// mock 数据
|
||||
TaskDO dbTask = randomPojo(TaskDO.class);
|
||||
taskMapper.insert(dbTask);// @Sql: 先插入出一条存在的数据
|
||||
// 准备参数
|
||||
Long id = dbTask.getId();
|
||||
|
||||
// 调用
|
||||
taskService.deleteTask(id);
|
||||
// 校验数据不存在了
|
||||
assertNull(taskMapper.selectById(id));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDeleteTask_notExists() {
|
||||
// 准备参数
|
||||
Long id = randomLongId();
|
||||
|
||||
// 调用, 并断言异常
|
||||
assertServiceException(() -> taskService.deleteTask(id), TASK_NOT_EXISTS);
|
||||
}
|
||||
|
||||
@Test
|
||||
@Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
|
||||
public void testGetTaskPage() {
|
||||
// mock 数据
|
||||
TaskDO dbTask = randomPojo(TaskDO.class, o -> { // 等会查询到
|
||||
o.setTaskTitle(null);
|
||||
o.setStartTime(null);
|
||||
o.setEndTime(null);
|
||||
o.setProjectId(null);
|
||||
o.setResponsible(null);
|
||||
o.setParticipants(null);
|
||||
o.setTaskMark(null);
|
||||
o.setCriticality(null);
|
||||
o.setTaskReminder(null);
|
||||
o.setReminderMethod(null);
|
||||
o.setTaskRemark(null);
|
||||
o.setAnnex(null);
|
||||
o.setCreateTime(null);
|
||||
o.setUpdateTime(null);
|
||||
});
|
||||
taskMapper.insert(dbTask);
|
||||
// 测试 taskTitle 不匹配
|
||||
taskMapper.insert(cloneIgnoreId(dbTask, o -> o.setTaskTitle(null)));
|
||||
// 测试 startTime 不匹配
|
||||
taskMapper.insert(cloneIgnoreId(dbTask, o -> o.setStartTime(null)));
|
||||
// 测试 endTime 不匹配
|
||||
taskMapper.insert(cloneIgnoreId(dbTask, o -> o.setEndTime(null)));
|
||||
// 测试 projectId 不匹配
|
||||
taskMapper.insert(cloneIgnoreId(dbTask, o -> o.setProjectId(null)));
|
||||
// 测试 responsible 不匹配
|
||||
taskMapper.insert(cloneIgnoreId(dbTask, o -> o.setResponsible(null)));
|
||||
// 测试 participants 不匹配
|
||||
taskMapper.insert(cloneIgnoreId(dbTask, o -> o.setParticipants(null)));
|
||||
// 测试 taskMark 不匹配
|
||||
taskMapper.insert(cloneIgnoreId(dbTask, o -> o.setTaskMark(null)));
|
||||
// 测试 criticality 不匹配
|
||||
taskMapper.insert(cloneIgnoreId(dbTask, o -> o.setCriticality(null)));
|
||||
// 测试 taskReminder 不匹配
|
||||
taskMapper.insert(cloneIgnoreId(dbTask, o -> o.setTaskReminder(null)));
|
||||
// 测试 reminderMethod 不匹配
|
||||
taskMapper.insert(cloneIgnoreId(dbTask, o -> o.setReminderMethod(null)));
|
||||
// 测试 taskRemark 不匹配
|
||||
taskMapper.insert(cloneIgnoreId(dbTask, o -> o.setTaskRemark(null)));
|
||||
// 测试 annex 不匹配
|
||||
taskMapper.insert(cloneIgnoreId(dbTask, o -> o.setAnnex(null)));
|
||||
// 测试 createTime 不匹配
|
||||
taskMapper.insert(cloneIgnoreId(dbTask, o -> o.setCreateTime(null)));
|
||||
// 测试 updateTime 不匹配
|
||||
taskMapper.insert(cloneIgnoreId(dbTask, o -> o.setUpdateTime(null)));
|
||||
// 准备参数
|
||||
TaskPageReqVO reqVO = new TaskPageReqVO();
|
||||
reqVO.setTaskTitle(null);
|
||||
reqVO.setStartTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
|
||||
reqVO.setEndTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
|
||||
reqVO.setProjectId(null);
|
||||
reqVO.setResponsible(null);
|
||||
reqVO.setParticipants(null);
|
||||
reqVO.setTaskMark(null);
|
||||
reqVO.setCriticality(null);
|
||||
reqVO.setTaskReminder(null);
|
||||
reqVO.setReminderMethod(null);
|
||||
reqVO.setTaskRemark(null);
|
||||
reqVO.setAnnex(null);
|
||||
reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
|
||||
reqVO.setUpdateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
|
||||
|
||||
// 调用
|
||||
PageResult<TaskDO> pageResult = taskService.getTaskPage(reqVO);
|
||||
// 断言
|
||||
assertEquals(1, pageResult.getTotal());
|
||||
assertEquals(1, pageResult.getList().size());
|
||||
assertPojoEquals(dbTask, pageResult.getList().get(0));
|
||||
}
|
||||
|
||||
@Test
|
||||
@Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
|
||||
public void testGetTaskList() {
|
||||
// mock 数据
|
||||
TaskDO dbTask = randomPojo(TaskDO.class, o -> { // 等会查询到
|
||||
o.setTaskTitle(null);
|
||||
o.setStartTime(null);
|
||||
o.setEndTime(null);
|
||||
o.setProjectId(null);
|
||||
o.setResponsible(null);
|
||||
o.setParticipants(null);
|
||||
o.setTaskMark(null);
|
||||
o.setCriticality(null);
|
||||
o.setTaskReminder(null);
|
||||
o.setReminderMethod(null);
|
||||
o.setTaskRemark(null);
|
||||
o.setAnnex(null);
|
||||
o.setCreateTime(null);
|
||||
o.setUpdateTime(null);
|
||||
});
|
||||
taskMapper.insert(dbTask);
|
||||
// 测试 taskTitle 不匹配
|
||||
taskMapper.insert(cloneIgnoreId(dbTask, o -> o.setTaskTitle(null)));
|
||||
// 测试 startTime 不匹配
|
||||
taskMapper.insert(cloneIgnoreId(dbTask, o -> o.setStartTime(null)));
|
||||
// 测试 endTime 不匹配
|
||||
taskMapper.insert(cloneIgnoreId(dbTask, o -> o.setEndTime(null)));
|
||||
// 测试 projectId 不匹配
|
||||
taskMapper.insert(cloneIgnoreId(dbTask, o -> o.setProjectId(null)));
|
||||
// 测试 responsible 不匹配
|
||||
taskMapper.insert(cloneIgnoreId(dbTask, o -> o.setResponsible(null)));
|
||||
// 测试 participants 不匹配
|
||||
taskMapper.insert(cloneIgnoreId(dbTask, o -> o.setParticipants(null)));
|
||||
// 测试 taskMark 不匹配
|
||||
taskMapper.insert(cloneIgnoreId(dbTask, o -> o.setTaskMark(null)));
|
||||
// 测试 criticality 不匹配
|
||||
taskMapper.insert(cloneIgnoreId(dbTask, o -> o.setCriticality(null)));
|
||||
// 测试 taskReminder 不匹配
|
||||
taskMapper.insert(cloneIgnoreId(dbTask, o -> o.setTaskReminder(null)));
|
||||
// 测试 reminderMethod 不匹配
|
||||
taskMapper.insert(cloneIgnoreId(dbTask, o -> o.setReminderMethod(null)));
|
||||
// 测试 taskRemark 不匹配
|
||||
taskMapper.insert(cloneIgnoreId(dbTask, o -> o.setTaskRemark(null)));
|
||||
// 测试 annex 不匹配
|
||||
taskMapper.insert(cloneIgnoreId(dbTask, o -> o.setAnnex(null)));
|
||||
// 测试 createTime 不匹配
|
||||
taskMapper.insert(cloneIgnoreId(dbTask, o -> o.setCreateTime(null)));
|
||||
// 测试 updateTime 不匹配
|
||||
taskMapper.insert(cloneIgnoreId(dbTask, o -> o.setUpdateTime(null)));
|
||||
// 准备参数
|
||||
TaskExportReqVO reqVO = new TaskExportReqVO();
|
||||
reqVO.setTaskTitle(null);
|
||||
reqVO.setStartTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
|
||||
reqVO.setEndTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
|
||||
reqVO.setProjectId(null);
|
||||
reqVO.setResponsible(null);
|
||||
reqVO.setParticipants(null);
|
||||
reqVO.setTaskMark(null);
|
||||
reqVO.setCriticality(null);
|
||||
reqVO.setTaskReminder(null);
|
||||
reqVO.setReminderMethod(null);
|
||||
reqVO.setTaskRemark(null);
|
||||
reqVO.setAnnex(null);
|
||||
reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
|
||||
reqVO.setUpdateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
|
||||
|
||||
// 调用
|
||||
List<TaskDO> list = taskService.getTaskList(reqVO);
|
||||
// 断言
|
||||
assertEquals(1, list.size());
|
||||
assertPojoEquals(dbTask, list.get(0));
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,73 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
// 创建项目管理
|
||||
export function createProject(data) {
|
||||
return request({
|
||||
url: '/xxjj/project/create',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 更新项目管理
|
||||
export function updateProject(data) {
|
||||
return request({
|
||||
url: '/xxjj/project/update',
|
||||
method: 'put',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 删除项目管理
|
||||
export function deleteProject(id) {
|
||||
return request({
|
||||
url: '/xxjj/project/delete?id=' + id,
|
||||
method: 'delete'
|
||||
})
|
||||
}
|
||||
|
||||
// 获得项目管理
|
||||
export function getProject(id) {
|
||||
return request({
|
||||
url: '/xxjj/project/get?id=' + id,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
// 获得项目管理分页
|
||||
export function getProjectPage(query) {
|
||||
return request({
|
||||
url: '/xxjj/project/page',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
// 导出项目管理 Excel
|
||||
export function exportProjectExcel(query) {
|
||||
return request({
|
||||
url: '/xxjj/project/export-excel',
|
||||
method: 'get',
|
||||
params: query,
|
||||
responseType: 'blob'
|
||||
})
|
||||
}
|
||||
|
||||
// 创建任务
|
||||
export function createProjecttask(data) {
|
||||
return request({
|
||||
url: '/xxjj/project/projecttask',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 获取成员列表
|
||||
export function getProjectPageUser(query) {
|
||||
return request({
|
||||
url: '/xxjj/project/pagequeryuser',
|
||||
method: 'get',
|
||||
data: query
|
||||
})
|
||||
}
|
||||
|
@ -0,0 +1,54 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
// 创建任务
|
||||
export function createTask(data) {
|
||||
return request({
|
||||
url: '/xxjj/task/create',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 更新任务
|
||||
export function updateTask(data) {
|
||||
return request({
|
||||
url: '/xxjj/task/update',
|
||||
method: 'put',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 删除任务
|
||||
export function deleteTask(id) {
|
||||
return request({
|
||||
url: '/xxjj/task/delete?id=' + id,
|
||||
method: 'delete'
|
||||
})
|
||||
}
|
||||
|
||||
// 获得任务
|
||||
export function getTask(id) {
|
||||
return request({
|
||||
url: '/xxjj/task/get?id=' + id,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
// 获得任务分页
|
||||
export function getTaskPage(query) {
|
||||
return request({
|
||||
url: '/xxjj/task/page',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
// 导出任务 Excel
|
||||
export function exportTaskExcel(query) {
|
||||
return request({
|
||||
url: '/xxjj/task/export-excel',
|
||||
method: 'get',
|
||||
params: query,
|
||||
responseType: 'blob'
|
||||
})
|
||||
}
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,625 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
|
||||
<!-- 搜索工作栏 -->
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
|
||||
<el-form-item label="项目名称" prop="projectName">
|
||||
<el-input v-model="queryParams.projectName" placeholder="请输入项目名称" clearable @keyup.enter.native="handleQuery"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="开始时间" prop="startTime">
|
||||
<el-date-picker v-model="queryParams.startTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
|
||||
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
|
||||
</el-form-item>
|
||||
<el-form-item label="结束时间" prop="endTime">
|
||||
<el-date-picker v-model="queryParams.endTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
|
||||
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
|
||||
</el-form-item>
|
||||
<!-- <el-form-item label="负责人员" prop="responsible">-->
|
||||
<!-- <el-select v-model="queryParams.responsible" placeholder="请选择负责人员" clearable size="small">-->
|
||||
<!-- <el-option label="请选择字典生成" value="" />-->
|
||||
<!-- </el-select>-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="参数人员" prop="participants">-->
|
||||
<!-- <el-select v-model="queryParams.participants" placeholder="请选择参数人员" clearable size="small">-->
|
||||
<!-- <el-option label="请选择字典生成" value="" />-->
|
||||
<!-- </el-select>-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="任务标记" prop="projectMark">-->
|
||||
<!-- <el-input v-model="queryParams.projectMark" placeholder="请输入任务标记" clearable @keyup.enter.native="handleQuery"/>-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="可见范围" prop="visibility">-->
|
||||
<!-- <el-select v-model="queryParams.visibility" placeholder="请选择可见范围" clearable size="small">-->
|
||||
<!-- <el-option v-for="dict in this.getDictDatas(DICT_TYPE.PROJECT_VISIBILITY)"-->
|
||||
<!-- :key="dict.value" :label="dict.label" :value="dict.value"/>-->
|
||||
<!-- </el-select>-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="任务描述" prop="projectRemark">-->
|
||||
<!-- <el-input v-model="queryParams.projectRemark" placeholder="请输入任务描述" clearable @keyup.enter.native="handleQuery"/>-->
|
||||
<!-- </el-form-item>-->
|
||||
<el-form-item label="项目状态" prop="projectStatus">
|
||||
<el-select v-model="queryParams.projectStatus" placeholder="请选择项目状态" clearable size="small">
|
||||
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.PROJECT_STATUS)"
|
||||
:key="dict.value" :label="dict.label" :value="dict.value"/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<!-- <el-form-item label="项目进度" prop="projectSchedule">-->
|
||||
<!-- <el-input v-model="queryParams.projectSchedule" placeholder="请输入项目进度" clearable @keyup.enter.native="handleQuery"/>-->
|
||||
<!-- </el-form-item>-->
|
||||
<el-form-item label="创建时间" prop="createTime">
|
||||
<el-date-picker v-model="queryParams.createTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
|
||||
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
|
||||
</el-form-item>
|
||||
<!-- <el-form-item label="更新时间" prop="updateTime">-->
|
||||
<!-- <el-date-picker v-model="queryParams.updateTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"-->
|
||||
<!-- range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<!-- 操作工具栏 -->
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
|
||||
v-hasPermi="['xxjj:project:create']">新增</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading"
|
||||
v-hasPermi="['xxjj:project:export']">导出</el-button>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="1.5">
|
||||
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAddtask"
|
||||
v-hasPermi="['xxjj:project:task']">新建任务
|
||||
</el-button>
|
||||
</el-col>
|
||||
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<!-- 列表 -->
|
||||
<el-table v-loading="loading" :data="list">
|
||||
<el-table-column label="编号" align="center" prop="id" />
|
||||
<el-table-column label="项目名称" align="center" prop="projectName" />
|
||||
<el-table-column label="开始时间" align="center" prop="startTime" width="180">
|
||||
<template v-slot="scope">
|
||||
<span>{{ parseTime(scope.row.startTime) }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="结束时间" align="center" prop="endTime" width="180">
|
||||
<template v-slot="scope">
|
||||
<span>{{ parseTime(scope.row.endTime) }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- <el-table-column label="负责人员" align="center" prop="responsible" />-->
|
||||
|
||||
<el-table-column label="负责人员" align="responsible">
|
||||
<template v-slot="scope">
|
||||
<span v-for="userId in scope.row.responsible">
|
||||
{{ getUserNickname(userId) }}
|
||||
</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
|
||||
<el-table-column label="参数人员" align="center" prop="participants" />
|
||||
<el-table-column label="任务标记" align="center" prop="projectMark" />
|
||||
<el-table-column label="可见范围" align="center" prop="visibility" width="150px">
|
||||
<template v-slot="scope">
|
||||
<dict-tag :type="DICT_TYPE.PROJECT_VISIBILITY" :value="scope.row.visibility" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- <el-table-column label="项目描述" align="center" prop="projectRemark" />-->
|
||||
<!-- <el-table-column label="附件" align="center" prop="annex" />-->
|
||||
<!-- <el-table-column label="项目图片" align="center" prop="projectPictures" />-->
|
||||
|
||||
<el-table-column label="项目图片" align="center" prop="projectPictures" >
|
||||
<template v-slot="scope">
|
||||
<image-preview :src="scope.row.projectPictures" :width="'60px'"></image-preview>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="项目状态" align="center" prop="projectStatus">
|
||||
<template v-slot="scope">
|
||||
<dict-tag :type="DICT_TYPE.PROJECT_STATUS" :value="scope.row.projectStatus" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- <el-table-column label="项目进度" align="center" prop="projectSchedule" />-->
|
||||
|
||||
<el-table-column label="项目进度" align="center" prop="projectSchedule" width="150px" >
|
||||
<template slot-scope="scope">
|
||||
<el-progress :text-inside="true" :stroke-width="26" :percentage="(scope.row.projectSchedule)" color="#57DCDD" ></el-progress>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<!-- <el-table-column label="项目进度" align="center" prop="projectSchedule" >-->
|
||||
<!-- <template slot-scope="scope">-->
|
||||
<!-- <el-progress type="line" :percentage="(scope.row.projectSchedule)" color="#57DCDD" :text-inside="false" :stroke-width="12" />-->
|
||||
<!-- </template>-->
|
||||
<!-- </el-table-column>-->
|
||||
|
||||
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
|
||||
<template v-slot="scope">
|
||||
<span>{{ parseTime(scope.row.createTime) }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="更新时间" align="center" prop="updateTime" width="180">
|
||||
<template v-slot="scope">
|
||||
<span>{{ parseTime(scope.row.updateTime) }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||
<template v-slot="scope">
|
||||
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
|
||||
v-hasPermi="['xxjj:project:update']">修改</el-button>
|
||||
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
|
||||
v-hasPermi="['xxjj:project:delete']">删除</el-button>
|
||||
|
||||
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate1(scope.row)"
|
||||
v-hasPermi="['xxjj:project:updates']">更新</el-button>
|
||||
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!-- 分页组件 -->
|
||||
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
|
||||
@pagination="getList"/>
|
||||
|
||||
<!-- 对话框(添加 / 修改) -->
|
||||
<el-dialog :title="title" :visible.sync="open" width="500px" v-dialogDrag append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
||||
<el-form-item label="项目名称" prop="projectName">
|
||||
<el-input v-model="form.projectName" placeholder="请输入项目名称" />
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="项目图片">
|
||||
<imageUpload v-model="form.projectPictures"/>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="开始时间" prop="startTime">
|
||||
<el-date-picker clearable v-model="form.startTime" type="date" value-format="timestamp" placeholder="选择开始时间" />
|
||||
</el-form-item>
|
||||
<el-form-item label="结束时间" prop="endTime">
|
||||
<el-date-picker clearable v-model="form.endTime" type="date" value-format="timestamp" placeholder="选择结束时间" />
|
||||
</el-form-item>
|
||||
<el-form-item label="负责人员" prop="responsible">
|
||||
<el-select v-model="form.responsible" placeholder="请选择负责人员">
|
||||
<el-option label="请选择字典生成" value="" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<!-- <el-form-item label="参数人员" prop="participants">-->
|
||||
<!-- <el-select v-model="form.participants" placeholder="请选择参数人员">-->
|
||||
<!-- <el-option label="请选择字典生成" value="" />-->
|
||||
<!-- </el-select>-->
|
||||
<!-- </el-form-item>-->
|
||||
|
||||
<el-form-item label="参数人员" prop="participants">
|
||||
<el-select v-model="form.participants" multiple placeholder="请选择参数人员">
|
||||
<el-option v-for="user in users" :key="parseInt(user.id)" :label="user.nickname" :value="parseInt(user.id)"/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="任务标记" prop="projectMark">
|
||||
<el-input v-model="form.projectMark" placeholder="请输入任务标记" />
|
||||
</el-form-item>
|
||||
<el-form-item label="可见范围" prop="visibility">
|
||||
<el-radio-group v-model="form.visibility">
|
||||
<el-radio v-for="dict in this.getDictDatas(DICT_TYPE.PROJECT_VISIBILITY)"
|
||||
:key="dict.value" :label="dict.value">{{dict.label}}</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="任务描述" prop="projectRemark">
|
||||
<el-input v-model="form.projectRemark" placeholder="请输入任务描述" />
|
||||
</el-form-item>
|
||||
<el-form-item label="附件">
|
||||
<fileUpload v-model="form.annex"/>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="项目状态" prop="projectStatus">
|
||||
<el-select v-model="form.projectStatus" placeholder="请选择项目状态">
|
||||
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.PROJECT_STATUS)"
|
||||
:key="dict.value" :label="dict.label" :value="dict.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<!-- <el-form-item label="项目进度" prop="projectSchedule">-->
|
||||
<!-- <el-input v-model="form.projectSchedule" placeholder="请输入项目进度" />-->
|
||||
<!-- </el-form-item>-->
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
|
||||
<!-- 对话框更新 -->
|
||||
<el-dialog :title="title1" :visible.sync="open1" width="500px" v-dialogDrag append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
||||
|
||||
<el-form-item label="项目状态" prop="projectStatus">
|
||||
<el-select v-model="form.projectStatus" placeholder="请选择项目状态">
|
||||
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.PROJECT_STATUS)"
|
||||
:key="dict.value" :label="dict.label" :value="dict.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="项目进度" prop="projectSchedule">
|
||||
<el-input v-model="form.projectSchedule" placeholder="请输入项目进度" />
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="项目描述" prop="projectRemark">
|
||||
<el-input v-model="form.projectRemark" placeholder="请输入项目描述" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitFormups">确 定</el-button>
|
||||
<el-button @click="cancelups">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
|
||||
<!-- 新建任务 -->
|
||||
<el-dialog :title="title2" :visible.sync="open2" width="500px" v-dialogDrag append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules2" label-width="80px">
|
||||
<el-form-item label="任务标题" prop="taskTitle">
|
||||
<el-input v-model="form.taskTitle" placeholder="请输入任务标题" />
|
||||
</el-form-item>
|
||||
<el-form-item label="开始时间" prop="startTime">
|
||||
<el-date-picker clearable v-model="form.startTime" type="date" value-format="timestamp" placeholder="选择开始时间" />
|
||||
</el-form-item>
|
||||
<el-form-item label="结束时间" prop="endTime">
|
||||
<el-date-picker clearable v-model="form.endTime" type="date" value-format="timestamp" placeholder="选择结束时间" />
|
||||
</el-form-item>
|
||||
<el-form-item label="项目id" prop="projectId">
|
||||
<el-input v-model="form.projectId" placeholder="请输入项目id" />
|
||||
</el-form-item>
|
||||
<el-form-item label="负责人员" prop="responsible">
|
||||
<el-input v-model="form.responsible" placeholder="请输入负责人员" />
|
||||
</el-form-item>
|
||||
<el-form-item label="参数人员" prop="participants">
|
||||
<el-input v-model="form.participants" placeholder="请输入参数人员" />
|
||||
</el-form-item>
|
||||
<el-form-item label="任务标记" prop="taskMark">
|
||||
<el-input v-model="form.taskMark" placeholder="请输入任务标记" />
|
||||
</el-form-item>
|
||||
<!-- <el-form-item label="紧要程度" prop="criticality">-->
|
||||
<!-- <el-select v-model="form.criticality" placeholder="请选择紧要程度">-->
|
||||
<!-- <el-option label="请选择字典生成" value="" />-->
|
||||
<!-- </el-select>-->
|
||||
<!-- </el-form-item>-->
|
||||
<el-form-item label="紧要程度" prop="criticality">
|
||||
<el-radio-group v-model="form.criticality" size="small">
|
||||
<el-radio-button v-for="(item, index) in field101Options" :key="index" :label="item.value"
|
||||
:disabled="item.disabled" border>{{item.label}}
|
||||
</el-radio-button>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
|
||||
<!-- <el-form-item label="任务提醒" prop="taskReminder">-->
|
||||
<!-- <el-checkbox-group v-model="form.taskReminder">-->
|
||||
<!-- <el-checkbox>请选择字典生成</el-checkbox>-->
|
||||
<!-- </el-checkbox-group>-->
|
||||
<!-- </el-form-item>-->
|
||||
|
||||
<el-form-item label="任务提醒" prop="taskReminder">
|
||||
|
||||
<el-checkbox-group v-model="checkedCities" @change="handleCheckedCitiesChange">
|
||||
<el-checkbox v-for="city in cities" :label="city" :key="city">{{city}}</el-checkbox>
|
||||
</el-checkbox-group>
|
||||
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="提醒方式" prop="reminderMethod">
|
||||
<el-input v-model="form.reminderMethod" placeholder="请输入提醒方式" />
|
||||
</el-form-item>
|
||||
<el-form-item label="任务描述">
|
||||
<editor v-model="form.taskRemark" :min-height="192"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="附件">
|
||||
<fileUpload v-model="form.annex"/>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitFormtask">确 定</el-button>
|
||||
<el-button @click="canceltask">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { createProject, updateProject, deleteProject, getProject, getProjectPage, exportProjectExcel,createProjecttask,getProjectPageUser } from "@/api/xxjj/project";
|
||||
import ImageUpload from '@/components/ImageUpload';
|
||||
import FileUpload from '@/components/FileUpload';
|
||||
import ImagePreview from "@/components/ImagePreview";
|
||||
import { listSimpleUsers } from "@/api/system/user";
|
||||
|
||||
export default {
|
||||
name: "Project",
|
||||
components: {
|
||||
ImageUpload,
|
||||
FileUpload,
|
||||
ImagePreview,
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
//进度条
|
||||
projectSchedule:0,
|
||||
// 遮罩层
|
||||
loading: true,
|
||||
// 导出遮罩层
|
||||
exportLoading: false,
|
||||
// 显示搜索条件
|
||||
showSearch: true,
|
||||
// 总条数
|
||||
total: 0,
|
||||
// 项目管理列表
|
||||
list: [],
|
||||
// 弹出层标题
|
||||
title: "",
|
||||
//更新项目
|
||||
title1: "",
|
||||
//新建任务
|
||||
title2: "",
|
||||
// 是否显示弹出层
|
||||
open: false,
|
||||
//更新项目
|
||||
open1: false,
|
||||
//新建任务
|
||||
open2: false,
|
||||
// 客户信息列表
|
||||
users: [],
|
||||
// 查询参数
|
||||
queryParams: {
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
projectName: null,
|
||||
startTime: [],
|
||||
endTime: [],
|
||||
responsible: null,
|
||||
participants: null,
|
||||
projectMark: null,
|
||||
visibility: null,
|
||||
projectRemark: null,
|
||||
annex: null,
|
||||
projectPictures: null,
|
||||
projectStatus: null,
|
||||
projectSchedule: null,
|
||||
createTime: [],
|
||||
updateTime: [],
|
||||
},
|
||||
// 表单参数
|
||||
form: {},
|
||||
// 表单校验
|
||||
rules: {
|
||||
projectName: [{ required: true, message: "项目名称不能为空", trigger: "blur" }],
|
||||
startTime: [{ required: true, message: "开始时间不能为空", trigger: "blur" }],
|
||||
endTime: [{ required: true, message: "结束时间不能为空", trigger: "blur" }],
|
||||
},
|
||||
rules2: {
|
||||
taskTitle: [{ required: true, message: "任务标题不能为空", trigger: "blur" }],
|
||||
startTime: [{ required: true, message: "开始时间不能为空", trigger: "blur" }],
|
||||
endTime: [{ required: true, message: "结束时间不能为空", trigger: "blur" }],
|
||||
},
|
||||
//紧要程度
|
||||
field101Options: [{
|
||||
'label': '重要',
|
||||
'value': 0
|
||||
}, {
|
||||
'label': '紧急',
|
||||
'value': 1
|
||||
}, {
|
||||
'label': '普通',
|
||||
'value': 2
|
||||
}, {
|
||||
'label': '较低',
|
||||
'value': 3
|
||||
}],
|
||||
};
|
||||
},
|
||||
created() {
|
||||
this.getList();
|
||||
this.getList1();
|
||||
// 获得用户列表
|
||||
listSimpleUsers().then(response => {
|
||||
this.users = response.data;
|
||||
});
|
||||
},
|
||||
methods: {
|
||||
|
||||
handleCheckedCitiesChange(value) {
|
||||
let checkedCount = value.length;
|
||||
this.checkAll = checkedCount === this.cities.length;
|
||||
this.isIndeterminate = checkedCount > 0 && checkedCount < this.cities.length;
|
||||
},
|
||||
//人员id
|
||||
getUserNickname(userId) {
|
||||
for (const user of this.users) {
|
||||
if (user.id === userId) {
|
||||
return user.nickname;
|
||||
}
|
||||
}
|
||||
return '未知(' + userId + ')';
|
||||
},
|
||||
|
||||
/** 查询列表 */
|
||||
getList() {
|
||||
this.loading = true;
|
||||
// 执行查询
|
||||
getProjectPage(this.queryParams).then(response => {
|
||||
this.list = response.data.list;
|
||||
this.total = response.data.total;
|
||||
this.loading = false;
|
||||
});
|
||||
},
|
||||
// getList1() {
|
||||
// this.loading = true;
|
||||
// // 执行查询
|
||||
// getProjectPageUser(this.queryParams).then(response => {
|
||||
// this.list = response.data.list;
|
||||
// this.total = response.data.total;
|
||||
// this.loading = false;
|
||||
// });
|
||||
// },
|
||||
/** 取消按钮 */
|
||||
cancel() {
|
||||
this.open = false;
|
||||
this.reset();
|
||||
},
|
||||
/** 取消更新按钮 */
|
||||
cancelups() {
|
||||
this.open1 = false;
|
||||
this.reset();
|
||||
},
|
||||
/** 表单重置 */
|
||||
reset() {
|
||||
this.form = {
|
||||
id: undefined,
|
||||
projectName: undefined,
|
||||
startTime: undefined,
|
||||
endTime: undefined,
|
||||
responsible: undefined,
|
||||
participants: undefined,
|
||||
projectMark: undefined,
|
||||
visibility: undefined,
|
||||
projectRemark: undefined,
|
||||
annex: undefined,
|
||||
projectPictures: undefined,
|
||||
projectStatus: undefined,
|
||||
projectSchedule: undefined,
|
||||
};
|
||||
this.resetForm("form");
|
||||
},
|
||||
/** 搜索按钮操作 */
|
||||
handleQuery() {
|
||||
this.queryParams.pageNo = 1;
|
||||
this.getList();
|
||||
},
|
||||
/** 重置按钮操作 */
|
||||
resetQuery() {
|
||||
this.resetForm("queryForm");
|
||||
this.handleQuery();
|
||||
},
|
||||
/** 新增按钮操作 */
|
||||
handleAdd() {
|
||||
this.reset();
|
||||
this.open = true;
|
||||
this.title = "添加项目管理";
|
||||
},
|
||||
/** 修改按钮操作 */
|
||||
handleUpdate(row) {
|
||||
this.reset();
|
||||
const id = row.id;
|
||||
getProject(id).then(response => {
|
||||
this.form = response.data;
|
||||
this.open = true;
|
||||
this.title = "修改项目管理";
|
||||
});
|
||||
},
|
||||
|
||||
/** 更新按钮操作 */
|
||||
handleUpdate1(row) {
|
||||
this.reset();
|
||||
const id = row.id;
|
||||
getProject(id).then(response => {
|
||||
this.form = response.data;
|
||||
this.open1 = true;
|
||||
this.title1 = "更新项目";
|
||||
});
|
||||
},
|
||||
|
||||
/** 提交按钮 */
|
||||
submitForm() {
|
||||
this.$refs["form"].validate(valid => {
|
||||
if (!valid) {
|
||||
return;
|
||||
}
|
||||
// 修改的提交
|
||||
if (this.form.id != null) {
|
||||
updateProject(this.form).then(response => {
|
||||
this.$modal.msgSuccess("修改成功");
|
||||
this.open = false;
|
||||
this.getList();
|
||||
});
|
||||
return;
|
||||
}
|
||||
// 添加的提交
|
||||
createProject(this.form).then(response => {
|
||||
this.$modal.msgSuccess("新增成功");
|
||||
this.open = false;
|
||||
this.getList();
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
/** 提交按钮 */
|
||||
submitFormups() {
|
||||
this.$refs["form"].validate(valid => {
|
||||
if (!valid) {
|
||||
return;
|
||||
}
|
||||
// 修改的提交
|
||||
if (this.form.id != null) {
|
||||
updateProject(this.form).then(response => {
|
||||
this.$modal.msgSuccess("修改成功");
|
||||
this.open1 = false;
|
||||
this.getList();
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
});
|
||||
},
|
||||
|
||||
/** 删除按钮操作 */
|
||||
handleDelete(row) {
|
||||
const id = row.id;
|
||||
this.$modal.confirm('是否确认删除项目管理编号为"' + id + '"的数据项?').then(function() {
|
||||
return deleteProject(id);
|
||||
}).then(() => {
|
||||
this.getList();
|
||||
this.$modal.msgSuccess("删除成功");
|
||||
}).catch(() => {});
|
||||
},
|
||||
/** 导出按钮操作 */
|
||||
handleExport() {
|
||||
// 处理查询参数
|
||||
let params = {...this.queryParams};
|
||||
params.pageNo = undefined;
|
||||
params.pageSize = undefined;
|
||||
this.$modal.confirm('是否确认导出所有项目管理数据项?').then(() => {
|
||||
this.exportLoading = true;
|
||||
return exportProjectExcel(params);
|
||||
}).then(response => {
|
||||
this.$download.excel(response, '项目管理.xls');
|
||||
this.exportLoading = false;
|
||||
}).catch(() => {});
|
||||
},
|
||||
/** 新增任务操作 */
|
||||
handleAddtask() {
|
||||
this.reset()
|
||||
this.open2 = true
|
||||
this.title2 = '新建任务'
|
||||
},
|
||||
//取消任务按钮
|
||||
canceltask() {
|
||||
this.open2 = false
|
||||
this.reset()
|
||||
},
|
||||
/** 提交按钮任务 */
|
||||
submitFormtask() {
|
||||
this.$refs['form'].validate(valid => {
|
||||
if (!valid) {
|
||||
return
|
||||
}
|
||||
createProjecttask(this.form).then(response => {
|
||||
this.$modal.msgSuccess('新增成功')
|
||||
this.open2 = false
|
||||
this.getList()
|
||||
})
|
||||
})
|
||||
},
|
||||
|
||||
}
|
||||
};
|
||||
</script>
|
@ -0,0 +1,333 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
|
||||
<!-- 搜索工作栏 -->
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
|
||||
<el-form-item label="任务标题" prop="taskTitle">
|
||||
<el-input v-model="queryParams.taskTitle" placeholder="请输入任务标题" clearable @keyup.enter.native="handleQuery"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="开始时间" prop="startTime">
|
||||
<el-date-picker v-model="queryParams.startTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
|
||||
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
|
||||
</el-form-item>
|
||||
<el-form-item label="结束时间" prop="endTime">
|
||||
<el-date-picker v-model="queryParams.endTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
|
||||
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
|
||||
</el-form-item>
|
||||
<el-form-item label="项目id" prop="projectId">
|
||||
<el-input v-model="queryParams.projectId" placeholder="请输入项目id" clearable @keyup.enter.native="handleQuery"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="负责人员" prop="responsible">
|
||||
<el-input v-model="queryParams.responsible" placeholder="请输入负责人员" clearable @keyup.enter.native="handleQuery"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="参数人员" prop="participants">
|
||||
<el-input v-model="queryParams.participants" placeholder="请输入参数人员" clearable @keyup.enter.native="handleQuery"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="任务标记" prop="taskMark">
|
||||
<el-input v-model="queryParams.taskMark" placeholder="请输入任务标记" clearable @keyup.enter.native="handleQuery"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="紧要程度" prop="criticality">
|
||||
<el-select v-model="queryParams.criticality" placeholder="请选择紧要程度" clearable size="small">
|
||||
<el-option label="请选择字典生成" value="" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="提醒方式" prop="reminderMethod">
|
||||
<el-input v-model="queryParams.reminderMethod" placeholder="请输入提醒方式" clearable @keyup.enter.native="handleQuery"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="创建时间" prop="createTime">
|
||||
<el-date-picker v-model="queryParams.createTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
|
||||
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
|
||||
</el-form-item>
|
||||
<el-form-item label="更新时间" prop="updateTime">
|
||||
<el-date-picker v-model="queryParams.updateTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
|
||||
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<!-- 操作工具栏 -->
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
|
||||
v-hasPermi="['xxjj:task:create']">新增</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading"
|
||||
v-hasPermi="['xxjj:task:export']">导出</el-button>
|
||||
</el-col>
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<!-- 列表 -->
|
||||
<el-table v-loading="loading" :data="list">
|
||||
<el-table-column label="编号" align="center" prop="id" />
|
||||
<el-table-column label="任务标题" align="center" prop="taskTitle" />
|
||||
<el-table-column label="开始时间" align="center" prop="startTime" width="180">
|
||||
<template v-slot="scope">
|
||||
<span>{{ parseTime(scope.row.startTime) }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="结束时间" align="center" prop="endTime" width="180">
|
||||
<template v-slot="scope">
|
||||
<span>{{ parseTime(scope.row.endTime) }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="项目id" align="center" prop="projectId" />
|
||||
<el-table-column label="负责人员" align="center" prop="responsible" />
|
||||
<el-table-column label="参数人员" align="center" prop="participants" />
|
||||
<el-table-column label="任务标记" align="center" prop="taskMark" />
|
||||
<el-table-column label="紧要程度" align="center" prop="criticality" />
|
||||
<el-table-column label="任务提醒" align="center" prop="taskReminder" />
|
||||
<el-table-column label="提醒方式" align="center" prop="reminderMethod" />
|
||||
<el-table-column label="任务描述" align="center" prop="taskRemark" />
|
||||
<el-table-column label="附件" align="center" prop="annex" />
|
||||
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
|
||||
<template v-slot="scope">
|
||||
<span>{{ parseTime(scope.row.createTime) }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="更新时间" align="center" prop="updateTime" width="180">
|
||||
<template v-slot="scope">
|
||||
<span>{{ parseTime(scope.row.updateTime) }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||
<template v-slot="scope">
|
||||
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
|
||||
v-hasPermi="['xxjj:task:update']">修改</el-button>
|
||||
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
|
||||
v-hasPermi="['xxjj:task:delete']">删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!-- 分页组件 -->
|
||||
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
|
||||
@pagination="getList"/>
|
||||
|
||||
<!-- 对话框(添加 / 修改) -->
|
||||
<el-dialog :title="title" :visible.sync="open" width="500px" v-dialogDrag append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
||||
<el-form-item label="任务标题" prop="taskTitle">
|
||||
<el-input v-model="form.taskTitle" placeholder="请输入任务标题" />
|
||||
</el-form-item>
|
||||
<el-form-item label="开始时间" prop="startTime">
|
||||
<el-date-picker clearable v-model="form.startTime" type="date" value-format="timestamp" placeholder="选择开始时间" />
|
||||
</el-form-item>
|
||||
<el-form-item label="结束时间" prop="endTime">
|
||||
<el-date-picker clearable v-model="form.endTime" type="date" value-format="timestamp" placeholder="选择结束时间" />
|
||||
</el-form-item>
|
||||
<el-form-item label="项目id" prop="projectId">
|
||||
<el-input v-model="form.projectId" placeholder="请输入项目id" />
|
||||
</el-form-item>
|
||||
<el-form-item label="负责人员" prop="responsible">
|
||||
<el-input v-model="form.responsible" placeholder="请输入负责人员" />
|
||||
</el-form-item>
|
||||
<el-form-item label="参数人员" prop="participants">
|
||||
<el-input v-model="form.participants" placeholder="请输入参数人员" />
|
||||
</el-form-item>
|
||||
<el-form-item label="任务标记" prop="taskMark">
|
||||
<el-input v-model="form.taskMark" placeholder="请输入任务标记" />
|
||||
</el-form-item>
|
||||
<el-form-item label="紧要程度" prop="criticality">
|
||||
<el-select v-model="form.criticality" placeholder="请选择紧要程度">
|
||||
<el-option label="请选择字典生成" value="" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="任务提醒" prop="taskReminder">
|
||||
<el-checkbox-group v-model="form.taskReminder">
|
||||
<el-checkbox>请选择字典生成</el-checkbox>
|
||||
</el-checkbox-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="提醒方式" prop="reminderMethod">
|
||||
<el-input v-model="form.reminderMethod" placeholder="请输入提醒方式" />
|
||||
</el-form-item>
|
||||
<el-form-item label="任务描述">
|
||||
<editor v-model="form.taskRemark" :min-height="192"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="附件">
|
||||
<fileUpload v-model="form.annex"/>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { createTask, updateTask, deleteTask, getTask, getTaskPage, exportTaskExcel } from "@/api/xxjj/task";
|
||||
import FileUpload from '@/components/FileUpload';
|
||||
import Editor from '@/components/Editor';
|
||||
|
||||
export default {
|
||||
name: "Task",
|
||||
components: {
|
||||
FileUpload,
|
||||
Editor,
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
// 遮罩层
|
||||
loading: true,
|
||||
// 导出遮罩层
|
||||
exportLoading: false,
|
||||
// 显示搜索条件
|
||||
showSearch: true,
|
||||
// 总条数
|
||||
total: 0,
|
||||
// 任务列表
|
||||
list: [],
|
||||
// 弹出层标题
|
||||
title: "",
|
||||
// 是否显示弹出层
|
||||
open: false,
|
||||
// 查询参数
|
||||
queryParams: {
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
taskTitle: null,
|
||||
startTime: [],
|
||||
endTime: [],
|
||||
projectId: null,
|
||||
responsible: null,
|
||||
participants: null,
|
||||
taskMark: null,
|
||||
criticality: null,
|
||||
taskReminder: null,
|
||||
reminderMethod: null,
|
||||
taskRemark: null,
|
||||
annex: null,
|
||||
createTime: [],
|
||||
updateTime: [],
|
||||
},
|
||||
// 表单参数
|
||||
form: {},
|
||||
// 表单校验
|
||||
rules: {
|
||||
taskTitle: [{ required: true, message: "任务标题不能为空", trigger: "blur" }],
|
||||
startTime: [{ required: true, message: "开始时间不能为空", trigger: "blur" }],
|
||||
endTime: [{ required: true, message: "结束时间不能为空", trigger: "blur" }],
|
||||
}
|
||||
};
|
||||
},
|
||||
created() {
|
||||
this.getList();
|
||||
},
|
||||
methods: {
|
||||
/** 查询列表 */
|
||||
getList() {
|
||||
this.loading = true;
|
||||
// 执行查询
|
||||
getTaskPage(this.queryParams).then(response => {
|
||||
this.list = response.data.list;
|
||||
this.total = response.data.total;
|
||||
this.loading = false;
|
||||
});
|
||||
},
|
||||
/** 取消按钮 */
|
||||
cancel() {
|
||||
this.open = false;
|
||||
this.reset();
|
||||
},
|
||||
/** 表单重置 */
|
||||
reset() {
|
||||
this.form = {
|
||||
id: undefined,
|
||||
taskTitle: undefined,
|
||||
startTime: undefined,
|
||||
endTime: undefined,
|
||||
projectId: undefined,
|
||||
responsible: undefined,
|
||||
participants: undefined,
|
||||
taskMark: undefined,
|
||||
criticality: undefined,
|
||||
taskReminder: [],
|
||||
reminderMethod: undefined,
|
||||
taskRemark: undefined,
|
||||
annex: undefined,
|
||||
};
|
||||
this.resetForm("form");
|
||||
},
|
||||
/** 搜索按钮操作 */
|
||||
handleQuery() {
|
||||
this.queryParams.pageNo = 1;
|
||||
this.getList();
|
||||
},
|
||||
/** 重置按钮操作 */
|
||||
resetQuery() {
|
||||
this.resetForm("queryForm");
|
||||
this.handleQuery();
|
||||
},
|
||||
/** 新增按钮操作 */
|
||||
handleAdd() {
|
||||
this.reset();
|
||||
this.open = true;
|
||||
this.title = "添加任务";
|
||||
},
|
||||
/** 修改按钮操作 */
|
||||
handleUpdate(row) {
|
||||
this.reset();
|
||||
const id = row.id;
|
||||
getTask(id).then(response => {
|
||||
this.form = response.data;
|
||||
this.form.taskReminder = this.form.taskReminder.split(",");
|
||||
this.open = true;
|
||||
this.title = "修改任务";
|
||||
});
|
||||
},
|
||||
/** 提交按钮 */
|
||||
submitForm() {
|
||||
this.$refs["form"].validate(valid => {
|
||||
if (!valid) {
|
||||
return;
|
||||
}
|
||||
this.form.taskReminder = this.form.taskReminder.join(",");
|
||||
// 修改的提交
|
||||
if (this.form.id != null) {
|
||||
updateTask(this.form).then(response => {
|
||||
this.$modal.msgSuccess("修改成功");
|
||||
this.open = false;
|
||||
this.getList();
|
||||
});
|
||||
return;
|
||||
}
|
||||
// 添加的提交
|
||||
createTask(this.form).then(response => {
|
||||
this.$modal.msgSuccess("新增成功");
|
||||
this.open = false;
|
||||
this.getList();
|
||||
});
|
||||
});
|
||||
},
|
||||
/** 删除按钮操作 */
|
||||
handleDelete(row) {
|
||||
const id = row.id;
|
||||
this.$modal.confirm('是否确认删除任务编号为"' + id + '"的数据项?').then(function() {
|
||||
return deleteTask(id);
|
||||
}).then(() => {
|
||||
this.getList();
|
||||
this.$modal.msgSuccess("删除成功");
|
||||
}).catch(() => {});
|
||||
},
|
||||
/** 导出按钮操作 */
|
||||
handleExport() {
|
||||
// 处理查询参数
|
||||
let params = {...this.queryParams};
|
||||
params.pageNo = undefined;
|
||||
params.pageSize = undefined;
|
||||
this.$modal.confirm('是否确认导出所有任务数据项?').then(() => {
|
||||
this.exportLoading = true;
|
||||
return exportTaskExcel(params);
|
||||
}).then(response => {
|
||||
this.$download.excel(response, '任务.xls');
|
||||
this.exportLoading = false;
|
||||
}).catch(() => {});
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in new issue