From e54d78d9405b2ca39dd3e14bf28456fa489d223f Mon Sep 17 00:00:00 2001 From: zhc077 <565291854@qq.com> Date: Mon, 4 Nov 2024 18:03:34 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E6=8F=90=E4=BA=A4=E3=80=81?= =?UTF-8?q?=E5=AE=A1=E6=A0=B8=E6=97=A5=E5=BF=97=20=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=2011.4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../project/controller/ProjectController.java | 110 +++++++++- .../modules/demo/project/entity/Project.java | 2 +- .../service/impl/ProjectServiceImpl.java | 6 +- .../controller/ProjectLogController.java | 162 +++++++++++++++ .../demo/projectLog/entity/ProjectLog.java | 120 +++++++++++ .../projectLog/mapper/ProjectLogMapper.java | 17 ++ .../mapper/xml/ProjectLogMapper.xml | 5 + .../service/IProjectLogService.java | 14 ++ .../service/impl/ProjectLogServiceImpl.java | 19 ++ .../src/main/resources/application-test.yml | 4 +- .../projectApplication/project/Project.api.ts | 16 ++ .../project/Project.data.ts | 22 +- .../project/ProjectList.vue | 66 +++--- .../src/views/projectLog/ProjectLog.api.ts | 64 ++++++ .../src/views/projectLog/ProjectLog.data.ts | 112 +++++++++++ .../src/views/projectLog/ProjectLogList.vue | 190 ++++++++++++++++++ .../V20241104_1__menu_insert_ProjectLog.sql | 26 +++ .../projectLog/components/ProjectLogForm.vue | 70 +++++++ .../projectLog/components/ProjectLogModal.vue | 76 +++++++ 19 files changed, 1056 insertions(+), 45 deletions(-) create mode 100644 jeecg-boot/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/projectLog/controller/ProjectLogController.java create mode 100644 jeecg-boot/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/projectLog/entity/ProjectLog.java create mode 100644 jeecg-boot/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/projectLog/mapper/ProjectLogMapper.java create mode 100644 jeecg-boot/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/projectLog/mapper/xml/ProjectLogMapper.xml create mode 100644 jeecg-boot/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/projectLog/service/IProjectLogService.java create mode 100644 jeecg-boot/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/projectLog/service/impl/ProjectLogServiceImpl.java create mode 100644 jeecgboot-vue3/src/views/projectLog/ProjectLog.api.ts create mode 100644 jeecgboot-vue3/src/views/projectLog/ProjectLog.data.ts create mode 100644 jeecgboot-vue3/src/views/projectLog/ProjectLogList.vue create mode 100644 jeecgboot-vue3/src/views/projectLog/V20241104_1__menu_insert_ProjectLog.sql create mode 100644 jeecgboot-vue3/src/views/projectLog/components/ProjectLogForm.vue create mode 100644 jeecgboot-vue3/src/views/projectLog/components/ProjectLogModal.vue diff --git a/jeecg-boot/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/project/controller/ProjectController.java b/jeecg-boot/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/project/controller/ProjectController.java index 18e22d7..335bf2c 100644 --- a/jeecg-boot/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/project/controller/ProjectController.java +++ b/jeecg-boot/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/project/controller/ProjectController.java @@ -9,14 +9,17 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; +import org.apache.shiro.SecurityUtils; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.jeecg.common.api.vo.Result; import org.jeecg.common.aspect.annotation.AutoLog; +import org.jeecg.common.aspect.annotation.PermissionData; import org.jeecg.common.exception.JeecgBootException; import org.jeecg.common.system.base.controller.JeecgController; import org.jeecg.common.system.query.QueryGenerator; import org.jeecg.common.system.query.QueryRuleEnum; import org.jeecg.common.system.vo.DictModel; +import org.jeecg.common.system.vo.LoginUser; import org.jeecg.modules.demo.depadminlx.entity.Depadminlx; import org.jeecg.modules.demo.depadminlx.service.IDepadminlxService; import org.jeecg.modules.demo.departext.entity.DepartExt; @@ -36,6 +39,7 @@ import org.jeecg.modules.system.entity.SysUser; import org.jeecg.modules.system.service.ISysDepartService; import org.jeecg.modules.system.service.ISysUserService; import org.jeecg.modules.system.service.impl.SysBaseApiImpl; +import org.jeecg.modules.system.util.SecurityUtil; import org.jeewx.api.core.util.DateUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -44,10 +48,7 @@ import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; /** * @Description: 项目表 @@ -96,6 +97,7 @@ public class ProjectController extends JeecgController //@AutoLog(value = "项目表-分页列表查询") @ApiOperation(value = "项目表-分页列表查询", notes = "项目表-分页列表查询") @GetMapping(value = "/list") + @PermissionData(pageComponent = "projectApplication/project/ProjectList") public Result> queryPageList(Project project, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, @@ -271,11 +273,109 @@ public class ProjectController extends JeecgController return Result.OK("添加成功!"); } + /** + * @description: 向上级提交项目 + * @param: [project] + * @return: org.jeecg.common.api.vo.Result + * @author: z.h.c + * @date: 24/11/4 16:12 + */ + @AutoLog(value = "项目表-提交项目") + @ApiOperation(value = "项目表-提交项目", notes = "项目表-提交项目") + @PostMapping(value = "/submitApply") + public Result submitApply(@RequestBody Project project) { + //('科技主管部门待提交', '1'); + //('科技主管部门已提交', '2'); + //('不受理', '3'); + //('已受理', '4'); + //('申请人待提交', '5'); + //('申请单位待提交', '6'); + //('市科技局待提交', '7'); + //('市科技局已提交', '8'); + LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + project.setProjectStatus("6"); + + /*申请人待提交,1 + 预算书不存在,10 + 申请单位待提交,2 + 申请主管部门待提交,3 + 申请主管部门待审核,4 + 申请主管部门审核通过,5 + 申请主管部门审核不通过,6 + 申请主管部门已提交,7 + 已受理,8 + 不需要,9*/ + + //预算书和项目书用同一种状态 + project.setBudgetStatus("6"); + project.setUpdateTime(new Date()); + project.setUpdateBy(loginUser.getRealname()); + projectService.updateById(project); + return Result.OK("提交成功!"); + } + + @AutoLog(value = "项目表-取回项目") + @ApiOperation(value = "项目表-提交项目", notes = "项目表-取回项目") + @PostMapping(value = "/rollbackProject") + public Result rollbackProject(@RequestBody Project project) { + //('科技主管部门待提交', '1'); + //('科技主管部门已提交', '2'); + //('不受理', '3'); + //('已受理', '4'); + //('申请人待提交', '5'); + //('申请单位待提交', '6'); + //('市科技局待提交', '7'); + //('市科技局已提交', '8'); + LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + project.setProjectStatus("5"); + + /*申请人待提交,1 + 预算书不存在,10 + 申请单位待提交,2 + 申请主管部门待提交,3 + 申请主管部门待审核,4 + 申请主管部门审核通过,5 + 申请主管部门审核不通过,6 + 申请主管部门已提交,7 + 已受理,8 + 不需要,9*/ + + //预算书和项目书用同一种状态 + project.setBudgetStatus("5"); + project.setUpdateTime(new Date()); + project.setUpdateBy(loginUser.getRealname()); + projectService.updateById(project); + return Result.OK("提交成功!"); + } + + /** + * @description: 审核已提交的项目 + * @param: [project] + * @return: org.jeecg.common.api.vo.Result + * @author: z.h.c + * @date: 24/11/4 16:12 + */ + @AutoLog(value = "项目表-审核已提交项目") + @ApiOperation(value = "项目表-审核已提交项目", notes = "项目表-审核已提交项目") + @PostMapping(value = "/audit") + public Result audit(@RequestBody Project project) { + LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + project.setProjectStatus("6"); + project.setBudgetStatus("2"); + project.setUpdateTime(new Date()); + project.setUpdateBy(loginUser.getRealname()); + projectService.updateById(project); + return Result.OK("审核成功!"); + } + @AutoLog(value = "新增项目审报") @ApiOperation(value = "新增项目审报", notes = "新增项目审报") @PostMapping(value = "/save4shenbao") public Result save4shenbao(@RequestBody ProjectShenBaoDto dto) { - long count = projectService.count(new LambdaQueryWrapper().eq(Project::getProjectTypeid, dto.getProjectTypeid())); + LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + long count = projectService.count(new LambdaQueryWrapper() + .eq(Project::getProjectTypeid, dto.getProjectTypeid()) + .eq(Project::getSysOrgCode, loginUser.getOrgId())); if (count > 0) { throw new JeecgBootException("该项目类型,当年已填报,不能重复填报!"); } diff --git a/jeecg-boot/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/project/entity/Project.java b/jeecg-boot/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/project/entity/Project.java index 283d210..7a4f53e 100644 --- a/jeecg-boot/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/project/entity/Project.java +++ b/jeecg-boot/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/project/entity/Project.java @@ -65,7 +65,7 @@ public class Project implements Serializable { /** * 所属部门 */ - @Dict(dictTable = "sys_depart", dicText = "depart_name", dicCode = "id") + @Dict(dictTable = "sys_depart", dicText = "depart_name", dicCode = "org_code") @ApiModelProperty(value = "所属部门") private String sysOrgCode; /** diff --git a/jeecg-boot/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/project/service/impl/ProjectServiceImpl.java b/jeecg-boot/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/project/service/impl/ProjectServiceImpl.java index e6be6b2..a41dab5 100644 --- a/jeecg-boot/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/project/service/impl/ProjectServiceImpl.java +++ b/jeecg-boot/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/project/service/impl/ProjectServiceImpl.java @@ -64,13 +64,13 @@ public class ProjectServiceImpl extends ServiceImpl impl // BeanUtils.copyProperties(dto, sysUser); BeanUtils.copyProperties(dto, userExt); BeanUtils.copyProperties(dto, project); - project.setSysOrgCode(loginUser.getOrgId()); + project.setSysOrgCode(loginUser.getOrgCode()); //负责人 project.setProjectCharger(loginUser.getId()); //申请人待提交 project.setProjectStatus("5"); - // 预算书不存在 - project.setBudgetStatus("10"); + // 申请人待提交 + project.setBudgetStatus("1"); this.save(project); userExt.setUserId(loginUser.getId()); diff --git a/jeecg-boot/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/projectLog/controller/ProjectLogController.java b/jeecg-boot/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/projectLog/controller/ProjectLogController.java new file mode 100644 index 0000000..4b86efa --- /dev/null +++ b/jeecg-boot/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/projectLog/controller/ProjectLogController.java @@ -0,0 +1,162 @@ +package org.jeecg.modules.demo.projectLog.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.aspect.annotation.AutoLog; +import org.jeecg.common.system.base.controller.JeecgController; +import org.jeecg.common.system.query.QueryGenerator; +import org.jeecg.modules.demo.projectLog.entity.ProjectLog; +import org.jeecg.modules.demo.projectLog.service.IProjectLogService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.ModelAndView; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.Arrays; + +/** + * @Description: 项目操作日志 + * @Author: jeecg-boot + * @Date: 2024-11-04 + * @Version: V1.0 + */ +@Api(tags = "项目操作日志") +@RestController +@RequestMapping("/projectLog/projectLog") +@Slf4j +public class ProjectLogController extends JeecgController { + @Autowired + private IProjectLogService projectLogService; + + /** + * 分页列表查询 + * + * @param projectLog + * @param pageNo + * @param pageSize + * @param req + * @return + */ + //@AutoLog(value = "项目操作日志-分页列表查询") + @ApiOperation(value = "项目操作日志-分页列表查询", notes = "项目操作日志-分页列表查询") + @GetMapping(value = "/list") + public Result> queryPageList(ProjectLog projectLog, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, + HttpServletRequest req) { + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(projectLog, req.getParameterMap()); + Page page = new Page(pageNo, pageSize); + IPage pageList = projectLogService.page(page, queryWrapper); + return Result.OK(pageList); + } + + /** + * 添加 + * + * @param projectLog + * @return + */ + @AutoLog(value = "项目操作日志-添加") + @ApiOperation(value = "项目操作日志-添加", notes = "项目操作日志-添加") + @RequiresPermissions("projectLog:project_log:add") + @PostMapping(value = "/add") + public Result add(@RequestBody ProjectLog projectLog) { + projectLogService.save(projectLog); + return Result.OK("添加成功!"); + } + + /** + * 编辑 + * + * @param projectLog + * @return + */ + @AutoLog(value = "项目操作日志-编辑") + @ApiOperation(value = "项目操作日志-编辑", notes = "项目操作日志-编辑") + @RequiresPermissions("projectLog:project_log:edit") + @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST}) + public Result edit(@RequestBody ProjectLog projectLog) { + projectLogService.updateById(projectLog); + return Result.OK("编辑成功!"); + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + @AutoLog(value = "项目操作日志-通过id删除") + @ApiOperation(value = "项目操作日志-通过id删除", notes = "项目操作日志-通过id删除") + @RequiresPermissions("projectLog:project_log:delete") + @DeleteMapping(value = "/delete") + public Result delete(@RequestParam(name = "id", required = true) String id) { + projectLogService.removeById(id); + return Result.OK("删除成功!"); + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + @AutoLog(value = "项目操作日志-批量删除") + @ApiOperation(value = "项目操作日志-批量删除", notes = "项目操作日志-批量删除") + @RequiresPermissions("projectLog:project_log:deleteBatch") + @DeleteMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name = "ids", required = true) String ids) { + this.projectLogService.removeByIds(Arrays.asList(ids.split(","))); + return Result.OK("批量删除成功!"); + } + + /** + * 通过id查询 + * + * @param id + * @return + */ + //@AutoLog(value = "项目操作日志-通过id查询") + @ApiOperation(value = "项目操作日志-通过id查询", notes = "项目操作日志-通过id查询") + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name = "id", required = true) String id) { + ProjectLog projectLog = projectLogService.getById(id); + if (projectLog == null) { + return Result.error("未找到对应数据"); + } + return Result.OK(projectLog); + } + + /** + * 导出excel + * + * @param request + * @param projectLog + */ + @RequiresPermissions("projectLog:project_log:exportXls") + @RequestMapping(value = "/exportXls") + public ModelAndView exportXls(HttpServletRequest request, ProjectLog projectLog) { + return super.exportXls(request, projectLog, ProjectLog.class, "项目操作日志"); + } + + /** + * 通过excel导入数据 + * + * @param request + * @param response + * @return + */ + @RequiresPermissions("projectLog:project_log:importExcel") + @RequestMapping(value = "/importExcel", method = RequestMethod.POST) + public Result importExcel(HttpServletRequest request, HttpServletResponse response) { + return super.importExcel(request, response, ProjectLog.class); + } + +} diff --git a/jeecg-boot/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/projectLog/entity/ProjectLog.java b/jeecg-boot/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/projectLog/entity/ProjectLog.java new file mode 100644 index 0000000..637b785 --- /dev/null +++ b/jeecg-boot/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/projectLog/entity/ProjectLog.java @@ -0,0 +1,120 @@ +package org.jeecg.modules.demo.projectLog.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import org.jeecg.common.aspect.annotation.Dict; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.util.Date; + +/** + * @Description: 项目操作日志 + * @Author: jeecg-boot + * @Date: 2024-11-04 + * @Version: V1.0 + */ +@Data +@TableName("project_log") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +@ApiModel(value = "project_log对象", description = "项目操作日志") +public class ProjectLog implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(type = IdType.ASSIGN_ID) + @ApiModelProperty(value = "主键") + private String id; + /** + * 创建人 + */ + @ApiModelProperty(value = "创建人") + private String createBy; + /** + * 创建日期 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "创建日期") + private Date createTime; + /** + * 更新人 + */ + @ApiModelProperty(value = "更新人") + private String updateBy; + /** + * 更新日期 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "更新日期") + private Date updateTime; + /** + * 所属部门 + */ + @ApiModelProperty(value = "所属部门") + private String sysOrgCode; + /** + * 项目id + */ + @Excel(name = "项目id", width = 15) + @ApiModelProperty(value = "项目id") + private String projectId; + /** + * 项目名称 + */ + @Excel(name = "项目名称", width = 15) + @ApiModelProperty(value = "项目名称") + private String projectName; + /** + * 操作说明 + */ + @Excel(name = "操作说明", width = 15) + @ApiModelProperty(value = "操作说明") + private String operationMark; + /** + * 操作时间 + */ + @Excel(name = "操作时间", width = 20, format = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "操作时间") + private Date operationTime; + /** + * 操作员id + */ + @Excel(name = "操作员id", width = 15) + @ApiModelProperty(value = "操作员id") + private String operatorId; + /** + * 操作人名称 + */ + @Excel(name = "操作人名称", width = 15) + @ApiModelProperty(value = "操作人名称") + private String operatorName; + /** + * 项目书状态 + */ + @Excel(name = "项目书状态", width = 15, dicCode = "project_status") + @Dict(dicCode = "project_status") + @ApiModelProperty(value = "项目书状态") + private String projectStatus; + /** + * 预算书状态 + */ + @Excel(name = "预算书状态", width = 15, dicCode = "budget_status") + @Dict(dicCode = "budget_status") + @ApiModelProperty(value = "预算书状态") + private String budgetStatus; +} diff --git a/jeecg-boot/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/projectLog/mapper/ProjectLogMapper.java b/jeecg-boot/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/projectLog/mapper/ProjectLogMapper.java new file mode 100644 index 0000000..a0fc533 --- /dev/null +++ b/jeecg-boot/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/projectLog/mapper/ProjectLogMapper.java @@ -0,0 +1,17 @@ +package org.jeecg.modules.demo.projectLog.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; +import org.jeecg.modules.demo.projectLog.entity.ProjectLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * @Description: 项目操作日志 + * @Author: jeecg-boot + * @Date: 2024-11-04 + * @Version: V1.0 + */ +public interface ProjectLogMapper extends BaseMapper { + +} diff --git a/jeecg-boot/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/projectLog/mapper/xml/ProjectLogMapper.xml b/jeecg-boot/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/projectLog/mapper/xml/ProjectLogMapper.xml new file mode 100644 index 0000000..e2010e6 --- /dev/null +++ b/jeecg-boot/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/projectLog/mapper/xml/ProjectLogMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/jeecg-boot/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/projectLog/service/IProjectLogService.java b/jeecg-boot/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/projectLog/service/IProjectLogService.java new file mode 100644 index 0000000..d796053 --- /dev/null +++ b/jeecg-boot/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/projectLog/service/IProjectLogService.java @@ -0,0 +1,14 @@ +package org.jeecg.modules.demo.projectLog.service; + +import org.jeecg.modules.demo.projectLog.entity.ProjectLog; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * @Description: 项目操作日志 + * @Author: jeecg-boot + * @Date: 2024-11-04 + * @Version: V1.0 + */ +public interface IProjectLogService extends IService { + +} diff --git a/jeecg-boot/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/projectLog/service/impl/ProjectLogServiceImpl.java b/jeecg-boot/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/projectLog/service/impl/ProjectLogServiceImpl.java new file mode 100644 index 0000000..429e2bf --- /dev/null +++ b/jeecg-boot/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/projectLog/service/impl/ProjectLogServiceImpl.java @@ -0,0 +1,19 @@ +package org.jeecg.modules.demo.projectLog.service.impl; + +import org.jeecg.modules.demo.projectLog.entity.ProjectLog; +import org.jeecg.modules.demo.projectLog.mapper.ProjectLogMapper; +import org.jeecg.modules.demo.projectLog.service.IProjectLogService; +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +/** + * @Description: 项目操作日志 + * @Author: jeecg-boot + * @Date: 2024-11-04 + * @Version: V1.0 + */ +@Service +public class ProjectLogServiceImpl extends ServiceImpl implements IProjectLogService { + +} diff --git a/jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/application-test.yml b/jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/application-test.yml index dc8bba8..2bc92dc 100644 --- a/jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/application-test.yml +++ b/jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/application-test.yml @@ -161,7 +161,7 @@ spring: slow-sql-millis: 5000 datasource: master: - url: jdbc:mysql://182.92.169.222:3306/zmd_kejiju?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai + url: jdbc:mysql://182.92.169.222:3306/zmd_kejiju1104?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai username: root password: ycwl2022. driver-class-name: com.mysql.cj.jdbc.Driver @@ -173,7 +173,7 @@ spring: #driver-class-name: com.mysql.cj.jdbc.Driver #redis 配置 redis: - database: 7 + database: 8 host: 182.92.169.222 port: 6379 password: 'redis@ycwl2022.' diff --git a/jeecgboot-vue3/src/views/projectApplication/project/Project.api.ts b/jeecgboot-vue3/src/views/projectApplication/project/Project.api.ts index 861b779..25c93ad 100644 --- a/jeecgboot-vue3/src/views/projectApplication/project/Project.api.ts +++ b/jeecgboot-vue3/src/views/projectApplication/project/Project.api.ts @@ -10,6 +10,8 @@ enum Api { save = '/project/project/add', edit = '/project/project/edit', deleteOne = '/project/project/delete', + submitOne = '/project/project/submitApply', + rollbackOne = '/project/project/rollbackProject', deleteBatch = '/project/project/deleteBatch', importExcel = '/project/project/importExcel', exportXls = '/project/project/exportXls', @@ -51,6 +53,20 @@ export const deleteOne = (params, handleSuccess) => { handleSuccess(); }); } + +export const submitOne = (params, handleSuccess) => { + return defHttp.post({url: Api.submitOne, params}, {joinParamsToUrl: true}).then(() => { + handleSuccess(); + }); +} + +export const rollbackOne = (params, handleSuccess) => { + return defHttp.post({url: Api.rollbackOne, params}, {joinParamsToUrl: true}).then(() => { + handleSuccess(); + }); +} + + /** * 批量删除 * @param params diff --git a/jeecgboot-vue3/src/views/projectApplication/project/Project.data.ts b/jeecgboot-vue3/src/views/projectApplication/project/Project.data.ts index 3e7f21b..c8055c2 100644 --- a/jeecgboot-vue3/src/views/projectApplication/project/Project.data.ts +++ b/jeecgboot-vue3/src/views/projectApplication/project/Project.data.ts @@ -12,25 +12,25 @@ import {forEach} from "@/utils/helper/treeHelper"; //列表数据 export const columns: BasicColumn[] = [ { - title: '所属部门', + title: '项目名称', align: "center", - dataIndex: 'sysOrgCode_dictText' + dataIndex: 'projectName' }, { - title: '负责人', + title: '项目类别', align: "center", - dataIndex: 'projectCharger_dictText' + // dataIndex: 'projectTypeid_dictText' + dataIndex: 'projectTypeid_dictText' }, { - title: '项目名称', + title: '申请单位', align: "center", - dataIndex: 'projectName' + dataIndex: 'sysOrgCode_dictText' }, { - title: '项目类别', + title: '负责人', align: "center", - // dataIndex: 'projectTypeid_dictText' - dataIndex: 'projectTypeid_dictText' + dataIndex: 'projectCharger_dictText' }, { title: '项目书状态', @@ -92,7 +92,7 @@ export const searchFormSchema: FormSchema[] = [ }, //colProps: {span: 6}, }, - { + /*{ label: "预算书状态", field: 'budgetStatus', component: 'JDictSelectTag', @@ -100,7 +100,7 @@ export const searchFormSchema: FormSchema[] = [ dictCode: "budget_status" }, //colProps: {span: 6}, - }, + },*/ ]; //表单数据 export const formSchema: FormSchema[] = [ diff --git a/jeecgboot-vue3/src/views/projectApplication/project/ProjectList.vue b/jeecgboot-vue3/src/views/projectApplication/project/ProjectList.vue index 6bed0c2..f90f8a4 100644 --- a/jeecgboot-vue3/src/views/projectApplication/project/ProjectList.vue +++ b/jeecgboot-vue3/src/views/projectApplication/project/ProjectList.vue @@ -54,6 +54,8 @@ import {columns, searchFormSchema, superQuerySchema} from './Project.data'; import { list, deleteOne, + rollbackOne, + submitOne, batchDelete, getImportUrl, getExportUrl, @@ -90,7 +92,7 @@ const { prefixCls,tableContext,onExportXls,onImportXls } = useListPage({ ], }, actionColumn: { - width: 280, + width: 320, fixed:'right' }, beforeFetch: (params) => { @@ -128,14 +130,6 @@ const [registerTable, {reload},{ rowSelection, selectedRowKeys }] = tableContext // 高级查询配置 const superQueryConfig = reactive(superQuerySchema); - -// onMounted(() => { -// let typeList = getProjectTypeList(); -// console.log('typeList',typeList) -// RANGE_OPTIONS = typeList; -// }); - - /** * 高级查询事件 */ @@ -200,6 +194,16 @@ function handleDetail(record: Recordable) { async function handleDelete(record) { await deleteOne({id: record.id}, handleSuccess); } + +//取回项目 +async function handleSubmitOne(record) { + await submitOne({id: record.id}, handleSuccess); +} + +//取回项目 +async function handleRollbackOne(record) { + await rollbackOne({id: record.id}, handleSuccess); +} /** * 批量删除事件 */ @@ -230,23 +234,39 @@ function getTableAction(record){ { label: '详情', onClick: handleDetail.bind(null, record), - }, - { - label: '删除', - popConfirm: { - title: '是否确认删除', - confirm: handleDelete.bind(null, record), - placement: 'topLeft', - }, - // auth: 'projecttype:project_type:delete' }]; - //申请人待提交时,可以修改 - /*if (record.projectStatus == 5) { + //申请人待提交时可以删除(只有自己能删除) + if (record.projectStatus == 5) { + actions.unshift({ + label: '删除', + popConfirm: { + title: '是否确认删除', + confirm: handleDelete.bind(null, record), + placement: 'topLeft', + }, + }); + } + if (record.projectStatus == 5) { + actions.unshift({ + label: '提交项目', + onClick: handleSubmitOne.bind(null, record), + }); + } + //projectStatus 项目书状态 + //('科技主管部门待提交', '1'); + //('科技主管部门已提交', '2'); + //('不受理', '3'); + //('已受理', '4'); + //('申请人待提交', '5'); + //('申请单位待提交', '6'); + //('市科技局待提交', '7'); + //('市科技局已提交', '8'); + if (record.projectStatus !=5 && record.projectStatus != 2 && record.projectStatus != 8) { actions.unshift({ - label: '编辑', - onClick: handleEdit.bind(null, record), + label: '取回项目', + onClick: handleRollbackOne.bind(null, record), }); - }*/ + } return actions; } /** diff --git a/jeecgboot-vue3/src/views/projectLog/ProjectLog.api.ts b/jeecgboot-vue3/src/views/projectLog/ProjectLog.api.ts new file mode 100644 index 0000000..1e13f40 --- /dev/null +++ b/jeecgboot-vue3/src/views/projectLog/ProjectLog.api.ts @@ -0,0 +1,64 @@ +import {defHttp} from '/@/utils/http/axios'; +import { useMessage } from "/@/hooks/web/useMessage"; + +const { createConfirm } = useMessage(); + +enum Api { + list = '/projectLog/projectLog/list', + save='/projectLog/projectLog/add', + edit='/projectLog/projectLog/edit', + deleteOne = '/projectLog/projectLog/delete', + deleteBatch = '/projectLog/projectLog/deleteBatch', + importExcel = '/projectLog/projectLog/importExcel', + exportXls = '/projectLog/projectLog/exportXls', +} +/** + * 导出api + * @param params + */ +export const getExportUrl = Api.exportXls; +/** + * 导入api + */ +export const getImportUrl = Api.importExcel; +/** + * 列表接口 + * @param params + */ +export const list = (params) => + defHttp.get({url: Api.list, params}); + +/** + * 删除单个 + */ +export const deleteOne = (params,handleSuccess) => { + return defHttp.delete({url: Api.deleteOne, params}, {joinParamsToUrl: true}).then(() => { + handleSuccess(); + }); +} +/** + * 批量删除 + * @param params + */ +export const batchDelete = (params, handleSuccess) => { + createConfirm({ + iconType: 'warning', + title: '确认删除', + content: '是否删除选中数据', + okText: '确认', + cancelText: '取消', + onOk: () => { + return defHttp.delete({url: Api.deleteBatch, data: params}, {joinParamsToUrl: true}).then(() => { + handleSuccess(); + }); + } + }); +} +/** + * 保存或者更新 + * @param params + */ +export const saveOrUpdate = (params, isUpdate) => { + let url = isUpdate ? Api.edit : Api.save; + return defHttp.post({url: url, params}); +} diff --git a/jeecgboot-vue3/src/views/projectLog/ProjectLog.data.ts b/jeecgboot-vue3/src/views/projectLog/ProjectLog.data.ts new file mode 100644 index 0000000..cdf5d54 --- /dev/null +++ b/jeecgboot-vue3/src/views/projectLog/ProjectLog.data.ts @@ -0,0 +1,112 @@ +import {BasicColumn} from '/@/components/Table'; +import {FormSchema} from '/@/components/Table'; +import { rules} from '/@/utils/helper/validator'; +import { render } from '/@/utils/common/renderUtils'; +import { getWeekMonthQuarterYear } from '/@/utils'; +//列表数据 +export const columns: BasicColumn[] = [ + { + title: '项目名称', + align:"center", + dataIndex: 'projectName' + }, + { + title: '操作说明', + align:"center", + dataIndex: 'operationMark' + }, + { + title: '操作时间', + align:"center", + dataIndex: 'operationTime' + }, + { + title: '操作人名称', + align:"center", + dataIndex: 'operatorName' + }, + { + title: '项目书状态', + align:"center", + dataIndex: 'projectStatus_dictText' + }, + { + title: '预算书状态', + align:"center", + dataIndex: 'budgetStatus_dictText' + }, +]; +//查询数据 +export const searchFormSchema: FormSchema[] = [ +]; +//表单数据 +export const formSchema: FormSchema[] = [ + { + label: '项目名称', + field: 'projectName', + component: 'Input', + }, + { + label: '操作说明', + field: 'operationMark', + component: 'Input', + }, + { + label: '操作时间', + field: 'operationTime', + component: 'DatePicker', + componentProps: { + showTime: true, + valueFormat: 'YYYY-MM-DD HH:mm:ss' + }, + }, + { + label: '操作人名称', + field: 'operatorName', + component: 'Input', + }, + { + label: '项目书状态', + field: 'projectStatus', + component: 'JDictSelectTag', + componentProps:{ + dictCode:"project_status", + type: "radio" + }, + }, + { + label: '预算书状态', + field: 'budgetStatus', + component: 'JDictSelectTag', + componentProps:{ + dictCode:"budget_status", + type: "radio" + }, + }, + // TODO 主键隐藏字段,目前写死为ID + { + label: '', + field: 'id', + component: 'Input', + show: false + }, +]; + +// 高级查询数据 +export const superQuerySchema = { + projectName: {title: '项目名称',order: 0,view: 'text', type: 'string',}, + operationMark: {title: '操作说明',order: 1,view: 'text', type: 'string',}, + operationTime: {title: '操作时间',order: 2,view: 'datetime', type: 'string',}, + operatorName: {title: '操作人名称',order: 3,view: 'text', type: 'string',}, + projectStatus: {title: '项目书状态',order: 4,view: 'radio', type: 'string',dictCode: 'project_status',}, + budgetStatus: {title: '预算书状态',order: 5,view: 'radio', type: 'string',dictCode: 'budget_status',}, +}; + +/** +* 流程表单调用这个方法获取formSchema +* @param param +*/ +export function getBpmFormSchema(_formData): FormSchema[]{ + // 默认和原始表单保持一致 如果流程中配置了权限数据,这里需要单独处理formSchema + return formSchema; +} \ No newline at end of file diff --git a/jeecgboot-vue3/src/views/projectLog/ProjectLogList.vue b/jeecgboot-vue3/src/views/projectLog/ProjectLogList.vue new file mode 100644 index 0000000..4f716d7 --- /dev/null +++ b/jeecgboot-vue3/src/views/projectLog/ProjectLogList.vue @@ -0,0 +1,190 @@ + + + + + \ No newline at end of file diff --git a/jeecgboot-vue3/src/views/projectLog/V20241104_1__menu_insert_ProjectLog.sql b/jeecgboot-vue3/src/views/projectLog/V20241104_1__menu_insert_ProjectLog.sql new file mode 100644 index 0000000..346cb11 --- /dev/null +++ b/jeecgboot-vue3/src/views/projectLog/V20241104_1__menu_insert_ProjectLog.sql @@ -0,0 +1,26 @@ +-- 注意:该页面对应的前台目录为views/projectLog文件夹下 +-- 如果你想更改到其他目录,请修改sql中component字段对应的值 + + +INSERT INTO sys_permission(id, parent_id, name, url, component, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_route, is_leaf, keep_alive, hidden, hide_tab, description, status, del_flag, rule_flag, create_by, create_time, update_by, update_time, internal_or_external) +VALUES ('2024110405388940100', NULL, '项目操作日志', '/projectLog/projectLogList', 'projectLog/ProjectLogList', NULL, NULL, 0, NULL, '1', 0.00, 0, NULL, 1, 0, 0, 0, 0, NULL, '1', 0, 0, 'admin', '2024-11-04 17:38:10', NULL, NULL, 0); + +-- 权限控制sql +-- 新增 +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2024110405388940101', '2024110405388940100', '添加项目操作日志', NULL, NULL, 0, NULL, NULL, 2, 'projectLog:project_log:add', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-11-04 17:38:10', NULL, NULL, 0, 0, '1', 0); +-- 编辑 +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2024110405388940102', '2024110405388940100', '编辑项目操作日志', NULL, NULL, 0, NULL, NULL, 2, 'projectLog:project_log:edit', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-11-04 17:38:10', NULL, NULL, 0, 0, '1', 0); +-- 删除 +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2024110405388940103', '2024110405388940100', '删除项目操作日志', NULL, NULL, 0, NULL, NULL, 2, 'projectLog:project_log:delete', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-11-04 17:38:10', NULL, NULL, 0, 0, '1', 0); +-- 批量删除 +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2024110405388940104', '2024110405388940100', '批量删除项目操作日志', NULL, NULL, 0, NULL, NULL, 2, 'projectLog:project_log:deleteBatch', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-11-04 17:38:10', NULL, NULL, 0, 0, '1', 0); +-- 导出excel +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2024110405388940105', '2024110405388940100', '导出excel_项目操作日志', NULL, NULL, 0, NULL, NULL, 2, 'projectLog:project_log:exportXls', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-11-04 17:38:10', NULL, NULL, 0, 0, '1', 0); +-- 导入excel +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2024110405388940106', '2024110405388940100', '导入excel_项目操作日志', NULL, NULL, 0, NULL, NULL, 2, 'projectLog:project_log:importExcel', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-11-04 17:38:10', NULL, NULL, 0, 0, '1', 0); \ No newline at end of file diff --git a/jeecgboot-vue3/src/views/projectLog/components/ProjectLogForm.vue b/jeecgboot-vue3/src/views/projectLog/components/ProjectLogForm.vue new file mode 100644 index 0000000..7ecb62f --- /dev/null +++ b/jeecgboot-vue3/src/views/projectLog/components/ProjectLogForm.vue @@ -0,0 +1,70 @@ + + + \ No newline at end of file diff --git a/jeecgboot-vue3/src/views/projectLog/components/ProjectLogModal.vue b/jeecgboot-vue3/src/views/projectLog/components/ProjectLogModal.vue new file mode 100644 index 0000000..632fd86 --- /dev/null +++ b/jeecgboot-vue3/src/views/projectLog/components/ProjectLogModal.vue @@ -0,0 +1,76 @@ + + + + + \ No newline at end of file