Explorar o código

rc业务表基础代码(增删改查)

wangggziwen hai 11 meses
pai
achega
075b927e06
Modificáronse 81 ficheiros con 8759 adicións e 1028 borrados
  1. 9 1
      pom.xml
  2. 28 0
      rc/pom.xml
  3. 126 0
      rc/src/main/java/com/ruoyi/rc/domain/TAudit.java
  4. 79 0
      rc/src/main/java/com/ruoyi/rc/domain/TChap.java
  5. 82 0
      rc/src/main/java/com/ruoyi/rc/domain/TDeptInfo.java
  6. 110 0
      rc/src/main/java/com/ruoyi/rc/domain/TMeeting.java
  7. 224 0
      rc/src/main/java/com/ruoyi/rc/domain/TOpenItem.java
  8. 252 0
      rc/src/main/java/com/ruoyi/rc/domain/TProgress.java
  9. 264 0
      rc/src/main/java/com/ruoyi/rc/domain/TSecSubChap.java
  10. 93 0
      rc/src/main/java/com/ruoyi/rc/domain/TSubChap.java
  11. 61 0
      rc/src/main/java/com/ruoyi/rc/mapper/TAuditMapper.java
  12. 61 0
      rc/src/main/java/com/ruoyi/rc/mapper/TChapMapper.java
  13. 61 0
      rc/src/main/java/com/ruoyi/rc/mapper/TDeptInfoMapper.java
  14. 61 0
      rc/src/main/java/com/ruoyi/rc/mapper/TMeetingMapper.java
  15. 61 0
      rc/src/main/java/com/ruoyi/rc/mapper/TOpenItemMapper.java
  16. 61 0
      rc/src/main/java/com/ruoyi/rc/mapper/TProgressMapper.java
  17. 61 0
      rc/src/main/java/com/ruoyi/rc/mapper/TSecSubChapMapper.java
  18. 61 0
      rc/src/main/java/com/ruoyi/rc/mapper/TSubChapMapper.java
  19. 61 0
      rc/src/main/java/com/ruoyi/rc/service/ITAuditService.java
  20. 61 0
      rc/src/main/java/com/ruoyi/rc/service/ITChapService.java
  21. 61 0
      rc/src/main/java/com/ruoyi/rc/service/ITDeptInfoService.java
  22. 61 0
      rc/src/main/java/com/ruoyi/rc/service/ITMeetingService.java
  23. 61 0
      rc/src/main/java/com/ruoyi/rc/service/ITOpenItemService.java
  24. 61 0
      rc/src/main/java/com/ruoyi/rc/service/ITProgressService.java
  25. 61 0
      rc/src/main/java/com/ruoyi/rc/service/ITSecSubChapService.java
  26. 61 0
      rc/src/main/java/com/ruoyi/rc/service/ITSubChapService.java
  27. 93 0
      rc/src/main/java/com/ruoyi/rc/service/impl/TAuditServiceImpl.java
  28. 93 0
      rc/src/main/java/com/ruoyi/rc/service/impl/TChapServiceImpl.java
  29. 93 0
      rc/src/main/java/com/ruoyi/rc/service/impl/TDeptInfoServiceImpl.java
  30. 93 0
      rc/src/main/java/com/ruoyi/rc/service/impl/TMeetingServiceImpl.java
  31. 93 0
      rc/src/main/java/com/ruoyi/rc/service/impl/TOpenItemServiceImpl.java
  32. 93 0
      rc/src/main/java/com/ruoyi/rc/service/impl/TProgressServiceImpl.java
  33. 93 0
      rc/src/main/java/com/ruoyi/rc/service/impl/TSecSubChapServiceImpl.java
  34. 93 0
      rc/src/main/java/com/ruoyi/rc/service/impl/TSubChapServiceImpl.java
  35. 81 0
      rc/src/main/resources/mapper/rc/TAuditMapper.xml
  36. 66 0
      rc/src/main/resources/mapper/rc/TChapMapper.xml
  37. 67 0
      rc/src/main/resources/mapper/rc/TDeptInfoMapper.xml
  38. 76 0
      rc/src/main/resources/mapper/rc/TMeetingMapper.xml
  39. 116 0
      rc/src/main/resources/mapper/rc/TOpenItemMapper.xml
  40. 126 0
      rc/src/main/resources/mapper/rc/TProgressMapper.xml
  41. 131 0
      rc/src/main/resources/mapper/rc/TSecSubChapMapper.xml
  42. 71 0
      rc/src/main/resources/mapper/rc/TSubChapMapper.xml
  43. 6 0
      ruoyi-admin/pom.xml
  44. 109 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/rc/TAuditController.java
  45. 105 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/rc/TChapController.java
  46. 108 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/rc/TDeptInfoController.java
  47. 105 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/rc/TMeetingController.java
  48. 105 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/rc/TOpenItemController.java
  49. 105 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/rc/TProgressController.java
  50. 105 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/rc/TSecSubChapController.java
  51. 105 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/rc/TSubChapController.java
  52. 1 1
      ruoyi-admin/src/main/resources/application-druid.yml
  53. 1 1
      ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java
  54. 1 1
      ruoyi-generator/src/main/resources/generator.yml
  55. 1 1
      ruoyi-generator/src/main/resources/mapper/generator/GenTableMapper.xml
  56. 4 0
      ruoyi-generator/src/main/resources/vm/java/controller.java.vm
  57. 1 1
      ruoyi-generator/src/main/resources/vm/vue/index.vue.vm
  58. 6 0
      ruoyi-system/pom.xml
  59. 1 1
      ruoyi-ui/.env.development
  60. 1 1
      ruoyi-ui/.env.production
  61. 1 1
      ruoyi-ui/.env.staging
  62. 44 0
      ruoyi-ui/src/api/rc/audit.js
  63. 44 0
      ruoyi-ui/src/api/rc/chap.js
  64. 44 0
      ruoyi-ui/src/api/rc/deptinfo.js
  65. 44 0
      ruoyi-ui/src/api/rc/meeting.js
  66. 44 0
      ruoyi-ui/src/api/rc/openitem.js
  67. 44 0
      ruoyi-ui/src/api/rc/progress.js
  68. 44 0
      ruoyi-ui/src/api/rc/secsubchap.js
  69. 44 0
      ruoyi-ui/src/api/rc/subchap.js
  70. 1004 1003
      ruoyi-ui/src/views/index.vue
  71. 15 15
      ruoyi-ui/src/views/login.vue
  72. 326 0
      ruoyi-ui/src/views/rc/audit/index.vue
  73. 265 0
      ruoyi-ui/src/views/rc/chap/index.vue
  74. 274 0
      ruoyi-ui/src/views/rc/deptinfo/index.vue
  75. 302 0
      ruoyi-ui/src/views/rc/meeting/index.vue
  76. 402 0
      ruoyi-ui/src/views/rc/openitem/index.vue
  77. 417 0
      ruoyi-ui/src/views/rc/progress/index.vue
  78. 402 0
      ruoyi-ui/src/views/rc/secsubchap/index.vue
  79. 279 0
      ruoyi-ui/src/views/rc/subchap/index.vue
  80. 1 1
      ruoyi-ui/vue.config.js
  81. 128 0
      sql/create.sql

+ 9 - 1
pom.xml

@@ -10,7 +10,7 @@
 
     <name>ruoyi</name>
     <url>http://www.ruoyi.vip</url>
-    <description>若依管理系统</description>
+    <description>RC审计系统</description>
     
     <properties>
         <ruoyi.version>3.8.8</ruoyi.version>
@@ -182,6 +182,13 @@
                 <version>${ruoyi.version}</version>
             </dependency>
 
+            <!-- RC -->
+            <dependency>
+                <groupId>com.ruoyi</groupId>
+                <artifactId>rc</artifactId>
+                <version>${ruoyi.version}</version>
+            </dependency>
+
         </dependencies>
     </dependencyManagement>
 
@@ -192,6 +199,7 @@
         <module>ruoyi-quartz</module>
         <module>ruoyi-generator</module>
         <module>ruoyi-common</module>
+        <module>rc</module>
     </modules>
     <packaging>pom</packaging>
 

+ 28 - 0
rc/pom.xml

@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>ruoyi</artifactId>
+        <groupId>com.ruoyi</groupId>
+        <version>3.8.8</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>rc</artifactId>
+
+    <description>
+        rc模块
+    </description>
+
+    <dependencies>
+
+        <!-- 通用工具-->
+        <dependency>
+            <groupId>com.ruoyi</groupId>
+            <artifactId>ruoyi-common</artifactId>
+        </dependency>
+
+    </dependencies>
+
+</project>

+ 126 - 0
rc/src/main/java/com/ruoyi/rc/domain/TAudit.java

@@ -0,0 +1,126 @@
+package com.ruoyi.rc.domain;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 审计记录对象 t_audit
+ * 
+ * @author ruoyi
+ * @date 2024-07-19
+ */
+public class TAudit extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** id */
+    private Long id;
+
+    /** 年份 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "年份", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date year;
+
+    /** 预审时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "预审时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date preAuditTime;
+
+    /** 审计时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "审计时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date auditTime;
+
+    /** 审计结果 */
+    @Excel(name = "审计结果")
+    private String auditResult;
+
+    /** 备注 */
+    @Excel(name = "备注")
+    private String remarks;
+
+    /** 装置id */
+    @Excel(name = "装置id")
+    private Long deptId;
+
+    public void setId(Long id) 
+    {
+        this.id = id;
+    }
+
+    public Long getId() 
+    {
+        return id;
+    }
+    public void setYear(Date year) 
+    {
+        this.year = year;
+    }
+
+    public Date getYear() 
+    {
+        return year;
+    }
+    public void setPreAuditTime(Date preAuditTime) 
+    {
+        this.preAuditTime = preAuditTime;
+    }
+
+    public Date getPreAuditTime() 
+    {
+        return preAuditTime;
+    }
+    public void setAuditTime(Date auditTime) 
+    {
+        this.auditTime = auditTime;
+    }
+
+    public Date getAuditTime() 
+    {
+        return auditTime;
+    }
+    public void setAuditResult(String auditResult) 
+    {
+        this.auditResult = auditResult;
+    }
+
+    public String getAuditResult() 
+    {
+        return auditResult;
+    }
+    public void setRemarks(String remarks) 
+    {
+        this.remarks = remarks;
+    }
+
+    public String getRemarks() 
+    {
+        return remarks;
+    }
+    public void setDeptId(Long deptId) 
+    {
+        this.deptId = deptId;
+    }
+
+    public Long getDeptId() 
+    {
+        return deptId;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("year", getYear())
+            .append("preAuditTime", getPreAuditTime())
+            .append("auditTime", getAuditTime())
+            .append("auditResult", getAuditResult())
+            .append("remarks", getRemarks())
+            .append("deptId", getDeptId())
+            .toString();
+    }
+}

+ 79 - 0
rc/src/main/java/com/ruoyi/rc/domain/TChap.java

@@ -0,0 +1,79 @@
+package com.ruoyi.rc.domain;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 问卷章节对象 t_chap
+ * 
+ * @author ruoyi
+ * @date 2024-07-19
+ */
+public class TChap extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** id */
+    private Long id;
+
+    /** 审计记录id */
+    @Excel(name = "审计记录id")
+    private Long auditId;
+
+    /** 名称 */
+    @Excel(name = "名称")
+    private String name;
+
+    /** 装置id */
+    @Excel(name = "装置id")
+    private Long deptId;
+
+    public void setId(Long id) 
+    {
+        this.id = id;
+    }
+
+    public Long getId() 
+    {
+        return id;
+    }
+    public void setAuditId(Long auditId) 
+    {
+        this.auditId = auditId;
+    }
+
+    public Long getAuditId() 
+    {
+        return auditId;
+    }
+    public void setName(String name) 
+    {
+        this.name = name;
+    }
+
+    public String getName() 
+    {
+        return name;
+    }
+    public void setDeptId(Long deptId) 
+    {
+        this.deptId = deptId;
+    }
+
+    public Long getDeptId() 
+    {
+        return deptId;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("auditId", getAuditId())
+            .append("name", getName())
+            .append("deptId", getDeptId())
+            .toString();
+    }
+}

+ 82 - 0
rc/src/main/java/com/ruoyi/rc/domain/TDeptInfo.java

@@ -0,0 +1,82 @@
+package com.ruoyi.rc.domain;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 装置信息对象 t_dept_info
+ * 
+ * @author ruoyi
+ * @date 2024-07-19
+ */
+public class TDeptInfo extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** id */
+    private Long id;
+
+    /** 装置信息 */
+    @Excel(name = "装置信息")
+    private String deptInfo;
+
+    /** 装置id */
+    @Excel(name = "装置id")
+    private Long deptId;
+
+    /** 年份 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "年份", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date year;
+
+    public void setId(Long id) 
+    {
+        this.id = id;
+    }
+
+    public Long getId() 
+    {
+        return id;
+    }
+    public void setDeptInfo(String deptInfo) 
+    {
+        this.deptInfo = deptInfo;
+    }
+
+    public String getDeptInfo() 
+    {
+        return deptInfo;
+    }
+    public void setDeptId(Long deptId) 
+    {
+        this.deptId = deptId;
+    }
+
+    public Long getDeptId() 
+    {
+        return deptId;
+    }
+    public void setYear(Date year) 
+    {
+        this.year = year;
+    }
+
+    public Date getYear() 
+    {
+        return year;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("deptInfo", getDeptInfo())
+            .append("deptId", getDeptId())
+            .append("year", getYear())
+            .toString();
+    }
+}

+ 110 - 0
rc/src/main/java/com/ruoyi/rc/domain/TMeeting.java

@@ -0,0 +1,110 @@
+package com.ruoyi.rc.domain;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 会议对象 t_meeting
+ * 
+ * @author ruoyi
+ * @date 2024-07-19
+ */
+public class TMeeting extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** id */
+    private Long id;
+
+    /** 年份 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "年份", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date year;
+
+    /** 涉及code */
+    @Excel(name = "涉及code")
+    private Long secSubChapId;
+
+    /** 负责人 */
+    @Excel(name = "负责人")
+    private Long personInCharge;
+
+    /** 备注 */
+    @Excel(name = "备注")
+    private String remarks;
+
+    /** 装置id */
+    @Excel(name = "装置id")
+    private Long deptId;
+
+    public void setId(Long id) 
+    {
+        this.id = id;
+    }
+
+    public Long getId() 
+    {
+        return id;
+    }
+    public void setYear(Date year) 
+    {
+        this.year = year;
+    }
+
+    public Date getYear() 
+    {
+        return year;
+    }
+    public void setSecSubChapId(Long secSubChapId) 
+    {
+        this.secSubChapId = secSubChapId;
+    }
+
+    public Long getSecSubChapId() 
+    {
+        return secSubChapId;
+    }
+    public void setPersonInCharge(Long personInCharge) 
+    {
+        this.personInCharge = personInCharge;
+    }
+
+    public Long getPersonInCharge() 
+    {
+        return personInCharge;
+    }
+    public void setRemarks(String remarks) 
+    {
+        this.remarks = remarks;
+    }
+
+    public String getRemarks() 
+    {
+        return remarks;
+    }
+    public void setDeptId(Long deptId) 
+    {
+        this.deptId = deptId;
+    }
+
+    public Long getDeptId() 
+    {
+        return deptId;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("year", getYear())
+            .append("secSubChapId", getSecSubChapId())
+            .append("personInCharge", getPersonInCharge())
+            .append("remarks", getRemarks())
+            .append("deptId", getDeptId())
+            .toString();
+    }
+}

+ 224 - 0
rc/src/main/java/com/ruoyi/rc/domain/TOpenItem.java

@@ -0,0 +1,224 @@
+package com.ruoyi.rc.domain;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 开项对象 t_open_item
+ * 
+ * @author ruoyi
+ * @date 2024-07-19
+ */
+public class TOpenItem extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** id */
+    private Long id;
+
+    /** 问题类型 */
+    @Excel(name = "问题类型")
+    private String type;
+
+    /** 涉及整改code */
+    @Excel(name = "涉及整改code")
+    private Long secSubChapId;
+
+    /** 存在问题描述 */
+    @Excel(name = "存在问题描述")
+    private String description;
+
+    /** 开项级别 */
+    @Excel(name = "开项级别")
+    private String level;
+
+    /** 开项时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "开项时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date openTime;
+
+    /** 闭项时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "闭项时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date closeTime;
+
+    /** 问题处理状态 */
+    @Excel(name = "问题处理状态")
+    private String status;
+
+    /** 负责人 */
+    @Excel(name = "负责人")
+    private Long personInCharge;
+
+    /** 审核人 */
+    @Excel(name = "审核人")
+    private Long reviewer;
+
+    /** 责任人确认 */
+    @Excel(name = "责任人确认")
+    private String result;
+
+    /** 截至时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "截至时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date deadline;
+
+    /** 备注 */
+    @Excel(name = "备注")
+    private String remarks;
+
+    /** 装置id */
+    @Excel(name = "装置id")
+    private Long deptId;
+
+    public void setId(Long id) 
+    {
+        this.id = id;
+    }
+
+    public Long getId() 
+    {
+        return id;
+    }
+    public void setType(String type) 
+    {
+        this.type = type;
+    }
+
+    public String getType() 
+    {
+        return type;
+    }
+    public void setSecSubChapId(Long secSubChapId) 
+    {
+        this.secSubChapId = secSubChapId;
+    }
+
+    public Long getSecSubChapId() 
+    {
+        return secSubChapId;
+    }
+    public void setDescription(String description) 
+    {
+        this.description = description;
+    }
+
+    public String getDescription() 
+    {
+        return description;
+    }
+    public void setLevel(String level) 
+    {
+        this.level = level;
+    }
+
+    public String getLevel() 
+    {
+        return level;
+    }
+    public void setOpenTime(Date openTime) 
+    {
+        this.openTime = openTime;
+    }
+
+    public Date getOpenTime() 
+    {
+        return openTime;
+    }
+    public void setCloseTime(Date closeTime) 
+    {
+        this.closeTime = closeTime;
+    }
+
+    public Date getCloseTime() 
+    {
+        return closeTime;
+    }
+    public void setStatus(String status) 
+    {
+        this.status = status;
+    }
+
+    public String getStatus() 
+    {
+        return status;
+    }
+    public void setPersonInCharge(Long personInCharge) 
+    {
+        this.personInCharge = personInCharge;
+    }
+
+    public Long getPersonInCharge() 
+    {
+        return personInCharge;
+    }
+    public void setReviewer(Long reviewer) 
+    {
+        this.reviewer = reviewer;
+    }
+
+    public Long getReviewer() 
+    {
+        return reviewer;
+    }
+    public void setResult(String result) 
+    {
+        this.result = result;
+    }
+
+    public String getResult() 
+    {
+        return result;
+    }
+    public void setDeadline(Date deadline) 
+    {
+        this.deadline = deadline;
+    }
+
+    public Date getDeadline() 
+    {
+        return deadline;
+    }
+    public void setRemarks(String remarks) 
+    {
+        this.remarks = remarks;
+    }
+
+    public String getRemarks() 
+    {
+        return remarks;
+    }
+    public void setDeptId(Long deptId) 
+    {
+        this.deptId = deptId;
+    }
+
+    public Long getDeptId() 
+    {
+        return deptId;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("type", getType())
+            .append("secSubChapId", getSecSubChapId())
+            .append("description", getDescription())
+            .append("level", getLevel())
+            .append("openTime", getOpenTime())
+            .append("closeTime", getCloseTime())
+            .append("status", getStatus())
+            .append("personInCharge", getPersonInCharge())
+            .append("reviewer", getReviewer())
+            .append("result", getResult())
+            .append("deadline", getDeadline())
+            .append("remarks", getRemarks())
+            .append("deptId", getDeptId())
+            .toString();
+    }
+}

+ 252 - 0
rc/src/main/java/com/ruoyi/rc/domain/TProgress.java

@@ -0,0 +1,252 @@
+package com.ruoyi.rc.domain;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 进度对象 t_progress
+ * 
+ * @author ruoyi
+ * @date 2024-07-19
+ */
+public class TProgress extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** id */
+    private Long id;
+
+    /** 二级细分章节id */
+    @Excel(name = "二级细分章节id")
+    private Long secSubChapId;
+
+    /** 章节 */
+    @Excel(name = "章节")
+    private String chapName;
+
+    /** 细分章节 */
+    @Excel(name = "细分章节")
+    private String subChapName;
+
+    /** 二级细分章节 */
+    @Excel(name = "二级细分章节")
+    private String secSubChapName;
+
+    /** 内容 */
+    @Excel(name = "内容")
+    private String content;
+
+    /** 负责人 */
+    @Excel(name = "负责人")
+    private Long personInCharge;
+
+    /** 支持人 */
+    @Excel(name = "支持人")
+    private Long supporter;
+
+    /** 开始日期 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "开始日期", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date startDate;
+
+    /** 目标日期 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "目标日期", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date targetDate;
+
+    /** 实际完成日期 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "实际完成日期", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date finishDate;
+
+    /** 准备情况 */
+    @Excel(name = "准备情况")
+    private String preparation;
+
+    /** 进度描述 */
+    @Excel(name = "进度描述")
+    private String progress;
+
+    /** 审批状态 */
+    @Excel(name = "审批状态")
+    private String applyStatus;
+
+    /** 备注 */
+    @Excel(name = "备注")
+    private String remarks;
+
+    /** 装置id */
+    @Excel(name = "装置id")
+    private Long deptId;
+
+    public void setId(Long id) 
+    {
+        this.id = id;
+    }
+
+    public Long getId() 
+    {
+        return id;
+    }
+    public void setSecSubChapId(Long secSubChapId) 
+    {
+        this.secSubChapId = secSubChapId;
+    }
+
+    public Long getSecSubChapId() 
+    {
+        return secSubChapId;
+    }
+    public void setChapName(String chapName) 
+    {
+        this.chapName = chapName;
+    }
+
+    public String getChapName() 
+    {
+        return chapName;
+    }
+    public void setSubChapName(String subChapName) 
+    {
+        this.subChapName = subChapName;
+    }
+
+    public String getSubChapName() 
+    {
+        return subChapName;
+    }
+    public void setSecSubChapName(String secSubChapName) 
+    {
+        this.secSubChapName = secSubChapName;
+    }
+
+    public String getSecSubChapName() 
+    {
+        return secSubChapName;
+    }
+    public void setContent(String content) 
+    {
+        this.content = content;
+    }
+
+    public String getContent() 
+    {
+        return content;
+    }
+    public void setPersonInCharge(Long personInCharge) 
+    {
+        this.personInCharge = personInCharge;
+    }
+
+    public Long getPersonInCharge() 
+    {
+        return personInCharge;
+    }
+    public void setSupporter(Long supporter) 
+    {
+        this.supporter = supporter;
+    }
+
+    public Long getSupporter() 
+    {
+        return supporter;
+    }
+    public void setStartDate(Date startDate) 
+    {
+        this.startDate = startDate;
+    }
+
+    public Date getStartDate() 
+    {
+        return startDate;
+    }
+    public void setTargetDate(Date targetDate) 
+    {
+        this.targetDate = targetDate;
+    }
+
+    public Date getTargetDate() 
+    {
+        return targetDate;
+    }
+    public void setFinishDate(Date finishDate) 
+    {
+        this.finishDate = finishDate;
+    }
+
+    public Date getFinishDate() 
+    {
+        return finishDate;
+    }
+    public void setPreparation(String preparation) 
+    {
+        this.preparation = preparation;
+    }
+
+    public String getPreparation() 
+    {
+        return preparation;
+    }
+    public void setProgress(String progress) 
+    {
+        this.progress = progress;
+    }
+
+    public String getProgress() 
+    {
+        return progress;
+    }
+    public void setApplyStatus(String applyStatus) 
+    {
+        this.applyStatus = applyStatus;
+    }
+
+    public String getApplyStatus() 
+    {
+        return applyStatus;
+    }
+    public void setRemarks(String remarks) 
+    {
+        this.remarks = remarks;
+    }
+
+    public String getRemarks() 
+    {
+        return remarks;
+    }
+    public void setDeptId(Long deptId) 
+    {
+        this.deptId = deptId;
+    }
+
+    public Long getDeptId() 
+    {
+        return deptId;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("secSubChapId", getSecSubChapId())
+            .append("chapName", getChapName())
+            .append("subChapName", getSubChapName())
+            .append("secSubChapName", getSecSubChapName())
+            .append("content", getContent())
+            .append("personInCharge", getPersonInCharge())
+            .append("supporter", getSupporter())
+            .append("startDate", getStartDate())
+            .append("targetDate", getTargetDate())
+            .append("finishDate", getFinishDate())
+            .append("preparation", getPreparation())
+            .append("progress", getProgress())
+            .append("applyStatus", getApplyStatus())
+            .append("remarks", getRemarks())
+            .append("deptId", getDeptId())
+            .toString();
+    }
+}

+ 264 - 0
rc/src/main/java/com/ruoyi/rc/domain/TSecSubChap.java

@@ -0,0 +1,264 @@
+package com.ruoyi.rc.domain;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 问卷二级细分章节对象 t_sec_sub_chap
+ * 
+ * @author ruoyi
+ * @date 2024-07-19
+ */
+public class TSecSubChap extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** id */
+    private Long id;
+
+    /** 审计记录id */
+    @Excel(name = "审计记录id")
+    private Long auditId;
+
+    /** 问卷细分章节id */
+    @Excel(name = "问卷细分章节id")
+    private Long subChapId;
+
+    /** 年份 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "年份", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date year;
+
+    /** 问卷类型 */
+    @Excel(name = "问卷类型")
+    private String type;
+
+    /** 目录 */
+    @Excel(name = "目录")
+    private String directory;
+
+    /** 序号 */
+    @Excel(name = "序号")
+    private Long code;
+
+    /** 名称 */
+    @Excel(name = "名称")
+    private String name;
+
+    /** YES/NO/NA */
+    @Excel(name = "YES/NO/NA")
+    private String yeaNoNa;
+
+    /** MinimumStandard */
+    @Excel(name = "MinimumStandard")
+    private String minimumStandard;
+
+    /** Good Practices */
+    @Excel(name = "Good Practices")
+    private String goodPractices;
+
+    /** 标准 */
+    @Excel(name = "标准")
+    private String starndard;
+
+    /** 完成情况 */
+    @Excel(name = "完成情况")
+    private String completionStatus;
+
+    /** 负责人 */
+    @Excel(name = "负责人")
+    private Long personInCharge;
+
+    /** 审核人 */
+    @Excel(name = "审核人")
+    private Long reviewer;
+
+    /** 备注 */
+    @Excel(name = "备注")
+    private String remarks;
+
+    /** 装置id */
+    @Excel(name = "装置id")
+    private Long deptId;
+
+    public void setId(Long id) 
+    {
+        this.id = id;
+    }
+
+    public Long getId() 
+    {
+        return id;
+    }
+    public void setAuditId(Long auditId) 
+    {
+        this.auditId = auditId;
+    }
+
+    public Long getAuditId() 
+    {
+        return auditId;
+    }
+    public void setSubChapId(Long subChapId) 
+    {
+        this.subChapId = subChapId;
+    }
+
+    public Long getSubChapId() 
+    {
+        return subChapId;
+    }
+    public void setYear(Date year) 
+    {
+        this.year = year;
+    }
+
+    public Date getYear() 
+    {
+        return year;
+    }
+    public void setType(String type) 
+    {
+        this.type = type;
+    }
+
+    public String getType() 
+    {
+        return type;
+    }
+    public void setDirectory(String directory) 
+    {
+        this.directory = directory;
+    }
+
+    public String getDirectory() 
+    {
+        return directory;
+    }
+    public void setCode(Long code) 
+    {
+        this.code = code;
+    }
+
+    public Long getCode() 
+    {
+        return code;
+    }
+    public void setName(String name) 
+    {
+        this.name = name;
+    }
+
+    public String getName() 
+    {
+        return name;
+    }
+    public void setYeaNoNa(String yeaNoNa) 
+    {
+        this.yeaNoNa = yeaNoNa;
+    }
+
+    public String getYeaNoNa() 
+    {
+        return yeaNoNa;
+    }
+    public void setMinimumStandard(String minimumStandard) 
+    {
+        this.minimumStandard = minimumStandard;
+    }
+
+    public String getMinimumStandard() 
+    {
+        return minimumStandard;
+    }
+    public void setGoodPractices(String goodPractices) 
+    {
+        this.goodPractices = goodPractices;
+    }
+
+    public String getGoodPractices() 
+    {
+        return goodPractices;
+    }
+    public void setStarndard(String starndard) 
+    {
+        this.starndard = starndard;
+    }
+
+    public String getStarndard() 
+    {
+        return starndard;
+    }
+    public void setCompletionStatus(String completionStatus) 
+    {
+        this.completionStatus = completionStatus;
+    }
+
+    public String getCompletionStatus() 
+    {
+        return completionStatus;
+    }
+    public void setPersonInCharge(Long personInCharge) 
+    {
+        this.personInCharge = personInCharge;
+    }
+
+    public Long getPersonInCharge() 
+    {
+        return personInCharge;
+    }
+    public void setReviewer(Long reviewer) 
+    {
+        this.reviewer = reviewer;
+    }
+
+    public Long getReviewer() 
+    {
+        return reviewer;
+    }
+    public void setRemarks(String remarks) 
+    {
+        this.remarks = remarks;
+    }
+
+    public String getRemarks() 
+    {
+        return remarks;
+    }
+    public void setDeptId(Long deptId) 
+    {
+        this.deptId = deptId;
+    }
+
+    public Long getDeptId() 
+    {
+        return deptId;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("auditId", getAuditId())
+            .append("subChapId", getSubChapId())
+            .append("year", getYear())
+            .append("type", getType())
+            .append("directory", getDirectory())
+            .append("code", getCode())
+            .append("name", getName())
+            .append("yeaNoNa", getYeaNoNa())
+            .append("minimumStandard", getMinimumStandard())
+            .append("goodPractices", getGoodPractices())
+            .append("starndard", getStarndard())
+            .append("completionStatus", getCompletionStatus())
+            .append("personInCharge", getPersonInCharge())
+            .append("reviewer", getReviewer())
+            .append("remarks", getRemarks())
+            .append("deptId", getDeptId())
+            .toString();
+    }
+}

+ 93 - 0
rc/src/main/java/com/ruoyi/rc/domain/TSubChap.java

@@ -0,0 +1,93 @@
+package com.ruoyi.rc.domain;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 问卷细分章节对象 t_sub_chap
+ * 
+ * @author ruoyi
+ * @date 2024-07-19
+ */
+public class TSubChap extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** id */
+    private Long id;
+
+    /** 审计记录id */
+    @Excel(name = "审计记录id")
+    private Long auditId;
+
+    /** 问卷章节id */
+    @Excel(name = "问卷章节id")
+    private Long chapId;
+
+    /** 名称 */
+    @Excel(name = "名称")
+    private String name;
+
+    /** 装置id */
+    @Excel(name = "装置id")
+    private Long deptId;
+
+    public void setId(Long id) 
+    {
+        this.id = id;
+    }
+
+    public Long getId() 
+    {
+        return id;
+    }
+    public void setAuditId(Long auditId) 
+    {
+        this.auditId = auditId;
+    }
+
+    public Long getAuditId() 
+    {
+        return auditId;
+    }
+    public void setChapId(Long chapId) 
+    {
+        this.chapId = chapId;
+    }
+
+    public Long getChapId() 
+    {
+        return chapId;
+    }
+    public void setName(String name) 
+    {
+        this.name = name;
+    }
+
+    public String getName() 
+    {
+        return name;
+    }
+    public void setDeptId(Long deptId) 
+    {
+        this.deptId = deptId;
+    }
+
+    public Long getDeptId() 
+    {
+        return deptId;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("auditId", getAuditId())
+            .append("chapId", getChapId())
+            .append("name", getName())
+            .append("deptId", getDeptId())
+            .toString();
+    }
+}

+ 61 - 0
rc/src/main/java/com/ruoyi/rc/mapper/TAuditMapper.java

@@ -0,0 +1,61 @@
+package com.ruoyi.rc.mapper;
+
+import java.util.List;
+import com.ruoyi.rc.domain.TAudit;
+
+/**
+ * 审计记录Mapper接口
+ * 
+ * @author ruoyi
+ * @date 2024-07-19
+ */
+public interface TAuditMapper 
+{
+    /**
+     * 查询审计记录
+     * 
+     * @param id 审计记录主键
+     * @return 审计记录
+     */
+    public TAudit selectTAuditById(Long id);
+
+    /**
+     * 查询审计记录列表
+     * 
+     * @param tAudit 审计记录
+     * @return 审计记录集合
+     */
+    public List<TAudit> selectTAuditList(TAudit tAudit);
+
+    /**
+     * 新增审计记录
+     * 
+     * @param tAudit 审计记录
+     * @return 结果
+     */
+    public int insertTAudit(TAudit tAudit);
+
+    /**
+     * 修改审计记录
+     * 
+     * @param tAudit 审计记录
+     * @return 结果
+     */
+    public int updateTAudit(TAudit tAudit);
+
+    /**
+     * 删除审计记录
+     * 
+     * @param id 审计记录主键
+     * @return 结果
+     */
+    public int deleteTAuditById(Long id);
+
+    /**
+     * 批量删除审计记录
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteTAuditByIds(Long[] ids);
+}

+ 61 - 0
rc/src/main/java/com/ruoyi/rc/mapper/TChapMapper.java

@@ -0,0 +1,61 @@
+package com.ruoyi.rc.mapper;
+
+import java.util.List;
+import com.ruoyi.rc.domain.TChap;
+
+/**
+ * 问卷章节Mapper接口
+ * 
+ * @author ruoyi
+ * @date 2024-07-19
+ */
+public interface TChapMapper 
+{
+    /**
+     * 查询问卷章节
+     * 
+     * @param id 问卷章节主键
+     * @return 问卷章节
+     */
+    public TChap selectTChapById(Long id);
+
+    /**
+     * 查询问卷章节列表
+     * 
+     * @param tChap 问卷章节
+     * @return 问卷章节集合
+     */
+    public List<TChap> selectTChapList(TChap tChap);
+
+    /**
+     * 新增问卷章节
+     * 
+     * @param tChap 问卷章节
+     * @return 结果
+     */
+    public int insertTChap(TChap tChap);
+
+    /**
+     * 修改问卷章节
+     * 
+     * @param tChap 问卷章节
+     * @return 结果
+     */
+    public int updateTChap(TChap tChap);
+
+    /**
+     * 删除问卷章节
+     * 
+     * @param id 问卷章节主键
+     * @return 结果
+     */
+    public int deleteTChapById(Long id);
+
+    /**
+     * 批量删除问卷章节
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteTChapByIds(Long[] ids);
+}

+ 61 - 0
rc/src/main/java/com/ruoyi/rc/mapper/TDeptInfoMapper.java

@@ -0,0 +1,61 @@
+package com.ruoyi.rc.mapper;
+
+import java.util.List;
+import com.ruoyi.rc.domain.TDeptInfo;
+
+/**
+ * 装置信息Mapper接口
+ * 
+ * @author ruoyi
+ * @date 2024-07-19
+ */
+public interface TDeptInfoMapper 
+{
+    /**
+     * 查询装置信息
+     * 
+     * @param id 装置信息主键
+     * @return 装置信息
+     */
+    public TDeptInfo selectTDeptInfoById(Long id);
+
+    /**
+     * 查询装置信息列表
+     * 
+     * @param tDeptInfo 装置信息
+     * @return 装置信息集合
+     */
+    public List<TDeptInfo> selectTDeptInfoList(TDeptInfo tDeptInfo);
+
+    /**
+     * 新增装置信息
+     * 
+     * @param tDeptInfo 装置信息
+     * @return 结果
+     */
+    public int insertTDeptInfo(TDeptInfo tDeptInfo);
+
+    /**
+     * 修改装置信息
+     * 
+     * @param tDeptInfo 装置信息
+     * @return 结果
+     */
+    public int updateTDeptInfo(TDeptInfo tDeptInfo);
+
+    /**
+     * 删除装置信息
+     * 
+     * @param id 装置信息主键
+     * @return 结果
+     */
+    public int deleteTDeptInfoById(Long id);
+
+    /**
+     * 批量删除装置信息
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteTDeptInfoByIds(Long[] ids);
+}

+ 61 - 0
rc/src/main/java/com/ruoyi/rc/mapper/TMeetingMapper.java

@@ -0,0 +1,61 @@
+package com.ruoyi.rc.mapper;
+
+import java.util.List;
+import com.ruoyi.rc.domain.TMeeting;
+
+/**
+ * 会议Mapper接口
+ * 
+ * @author ruoyi
+ * @date 2024-07-19
+ */
+public interface TMeetingMapper 
+{
+    /**
+     * 查询会议
+     * 
+     * @param id 会议主键
+     * @return 会议
+     */
+    public TMeeting selectTMeetingById(Long id);
+
+    /**
+     * 查询会议列表
+     * 
+     * @param tMeeting 会议
+     * @return 会议集合
+     */
+    public List<TMeeting> selectTMeetingList(TMeeting tMeeting);
+
+    /**
+     * 新增会议
+     * 
+     * @param tMeeting 会议
+     * @return 结果
+     */
+    public int insertTMeeting(TMeeting tMeeting);
+
+    /**
+     * 修改会议
+     * 
+     * @param tMeeting 会议
+     * @return 结果
+     */
+    public int updateTMeeting(TMeeting tMeeting);
+
+    /**
+     * 删除会议
+     * 
+     * @param id 会议主键
+     * @return 结果
+     */
+    public int deleteTMeetingById(Long id);
+
+    /**
+     * 批量删除会议
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteTMeetingByIds(Long[] ids);
+}

+ 61 - 0
rc/src/main/java/com/ruoyi/rc/mapper/TOpenItemMapper.java

@@ -0,0 +1,61 @@
+package com.ruoyi.rc.mapper;
+
+import java.util.List;
+import com.ruoyi.rc.domain.TOpenItem;
+
+/**
+ * 开项Mapper接口
+ * 
+ * @author ruoyi
+ * @date 2024-07-19
+ */
+public interface TOpenItemMapper 
+{
+    /**
+     * 查询开项
+     * 
+     * @param id 开项主键
+     * @return 开项
+     */
+    public TOpenItem selectTOpenItemById(Long id);
+
+    /**
+     * 查询开项列表
+     * 
+     * @param tOpenItem 开项
+     * @return 开项集合
+     */
+    public List<TOpenItem> selectTOpenItemList(TOpenItem tOpenItem);
+
+    /**
+     * 新增开项
+     * 
+     * @param tOpenItem 开项
+     * @return 结果
+     */
+    public int insertTOpenItem(TOpenItem tOpenItem);
+
+    /**
+     * 修改开项
+     * 
+     * @param tOpenItem 开项
+     * @return 结果
+     */
+    public int updateTOpenItem(TOpenItem tOpenItem);
+
+    /**
+     * 删除开项
+     * 
+     * @param id 开项主键
+     * @return 结果
+     */
+    public int deleteTOpenItemById(Long id);
+
+    /**
+     * 批量删除开项
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteTOpenItemByIds(Long[] ids);
+}

+ 61 - 0
rc/src/main/java/com/ruoyi/rc/mapper/TProgressMapper.java

@@ -0,0 +1,61 @@
+package com.ruoyi.rc.mapper;
+
+import java.util.List;
+import com.ruoyi.rc.domain.TProgress;
+
+/**
+ * 进度Mapper接口
+ * 
+ * @author ruoyi
+ * @date 2024-07-19
+ */
+public interface TProgressMapper 
+{
+    /**
+     * 查询进度
+     * 
+     * @param id 进度主键
+     * @return 进度
+     */
+    public TProgress selectTProgressById(Long id);
+
+    /**
+     * 查询进度列表
+     * 
+     * @param tProgress 进度
+     * @return 进度集合
+     */
+    public List<TProgress> selectTProgressList(TProgress tProgress);
+
+    /**
+     * 新增进度
+     * 
+     * @param tProgress 进度
+     * @return 结果
+     */
+    public int insertTProgress(TProgress tProgress);
+
+    /**
+     * 修改进度
+     * 
+     * @param tProgress 进度
+     * @return 结果
+     */
+    public int updateTProgress(TProgress tProgress);
+
+    /**
+     * 删除进度
+     * 
+     * @param id 进度主键
+     * @return 结果
+     */
+    public int deleteTProgressById(Long id);
+
+    /**
+     * 批量删除进度
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteTProgressByIds(Long[] ids);
+}

+ 61 - 0
rc/src/main/java/com/ruoyi/rc/mapper/TSecSubChapMapper.java

@@ -0,0 +1,61 @@
+package com.ruoyi.rc.mapper;
+
+import java.util.List;
+import com.ruoyi.rc.domain.TSecSubChap;
+
+/**
+ * 问卷二级细分章节Mapper接口
+ * 
+ * @author ruoyi
+ * @date 2024-07-19
+ */
+public interface TSecSubChapMapper 
+{
+    /**
+     * 查询问卷二级细分章节
+     * 
+     * @param id 问卷二级细分章节主键
+     * @return 问卷二级细分章节
+     */
+    public TSecSubChap selectTSecSubChapById(Long id);
+
+    /**
+     * 查询问卷二级细分章节列表
+     * 
+     * @param tSecSubChap 问卷二级细分章节
+     * @return 问卷二级细分章节集合
+     */
+    public List<TSecSubChap> selectTSecSubChapList(TSecSubChap tSecSubChap);
+
+    /**
+     * 新增问卷二级细分章节
+     * 
+     * @param tSecSubChap 问卷二级细分章节
+     * @return 结果
+     */
+    public int insertTSecSubChap(TSecSubChap tSecSubChap);
+
+    /**
+     * 修改问卷二级细分章节
+     * 
+     * @param tSecSubChap 问卷二级细分章节
+     * @return 结果
+     */
+    public int updateTSecSubChap(TSecSubChap tSecSubChap);
+
+    /**
+     * 删除问卷二级细分章节
+     * 
+     * @param id 问卷二级细分章节主键
+     * @return 结果
+     */
+    public int deleteTSecSubChapById(Long id);
+
+    /**
+     * 批量删除问卷二级细分章节
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteTSecSubChapByIds(Long[] ids);
+}

+ 61 - 0
rc/src/main/java/com/ruoyi/rc/mapper/TSubChapMapper.java

@@ -0,0 +1,61 @@
+package com.ruoyi.rc.mapper;
+
+import java.util.List;
+import com.ruoyi.rc.domain.TSubChap;
+
+/**
+ * 问卷细分章节Mapper接口
+ * 
+ * @author ruoyi
+ * @date 2024-07-19
+ */
+public interface TSubChapMapper 
+{
+    /**
+     * 查询问卷细分章节
+     * 
+     * @param id 问卷细分章节主键
+     * @return 问卷细分章节
+     */
+    public TSubChap selectTSubChapById(Long id);
+
+    /**
+     * 查询问卷细分章节列表
+     * 
+     * @param tSubChap 问卷细分章节
+     * @return 问卷细分章节集合
+     */
+    public List<TSubChap> selectTSubChapList(TSubChap tSubChap);
+
+    /**
+     * 新增问卷细分章节
+     * 
+     * @param tSubChap 问卷细分章节
+     * @return 结果
+     */
+    public int insertTSubChap(TSubChap tSubChap);
+
+    /**
+     * 修改问卷细分章节
+     * 
+     * @param tSubChap 问卷细分章节
+     * @return 结果
+     */
+    public int updateTSubChap(TSubChap tSubChap);
+
+    /**
+     * 删除问卷细分章节
+     * 
+     * @param id 问卷细分章节主键
+     * @return 结果
+     */
+    public int deleteTSubChapById(Long id);
+
+    /**
+     * 批量删除问卷细分章节
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteTSubChapByIds(Long[] ids);
+}

+ 61 - 0
rc/src/main/java/com/ruoyi/rc/service/ITAuditService.java

@@ -0,0 +1,61 @@
+package com.ruoyi.rc.service;
+
+import java.util.List;
+import com.ruoyi.rc.domain.TAudit;
+
+/**
+ * 审计记录Service接口
+ * 
+ * @author ruoyi
+ * @date 2024-07-19
+ */
+public interface ITAuditService 
+{
+    /**
+     * 查询审计记录
+     * 
+     * @param id 审计记录主键
+     * @return 审计记录
+     */
+    public TAudit selectTAuditById(Long id);
+
+    /**
+     * 查询审计记录列表
+     * 
+     * @param tAudit 审计记录
+     * @return 审计记录集合
+     */
+    public List<TAudit> selectTAuditList(TAudit tAudit);
+
+    /**
+     * 新增审计记录
+     * 
+     * @param tAudit 审计记录
+     * @return 结果
+     */
+    public int insertTAudit(TAudit tAudit);
+
+    /**
+     * 修改审计记录
+     * 
+     * @param tAudit 审计记录
+     * @return 结果
+     */
+    public int updateTAudit(TAudit tAudit);
+
+    /**
+     * 批量删除审计记录
+     * 
+     * @param ids 需要删除的审计记录主键集合
+     * @return 结果
+     */
+    public int deleteTAuditByIds(Long[] ids);
+
+    /**
+     * 删除审计记录信息
+     * 
+     * @param id 审计记录主键
+     * @return 结果
+     */
+    public int deleteTAuditById(Long id);
+}

+ 61 - 0
rc/src/main/java/com/ruoyi/rc/service/ITChapService.java

@@ -0,0 +1,61 @@
+package com.ruoyi.rc.service;
+
+import java.util.List;
+import com.ruoyi.rc.domain.TChap;
+
+/**
+ * 问卷章节Service接口
+ * 
+ * @author ruoyi
+ * @date 2024-07-19
+ */
+public interface ITChapService 
+{
+    /**
+     * 查询问卷章节
+     * 
+     * @param id 问卷章节主键
+     * @return 问卷章节
+     */
+    public TChap selectTChapById(Long id);
+
+    /**
+     * 查询问卷章节列表
+     * 
+     * @param tChap 问卷章节
+     * @return 问卷章节集合
+     */
+    public List<TChap> selectTChapList(TChap tChap);
+
+    /**
+     * 新增问卷章节
+     * 
+     * @param tChap 问卷章节
+     * @return 结果
+     */
+    public int insertTChap(TChap tChap);
+
+    /**
+     * 修改问卷章节
+     * 
+     * @param tChap 问卷章节
+     * @return 结果
+     */
+    public int updateTChap(TChap tChap);
+
+    /**
+     * 批量删除问卷章节
+     * 
+     * @param ids 需要删除的问卷章节主键集合
+     * @return 结果
+     */
+    public int deleteTChapByIds(Long[] ids);
+
+    /**
+     * 删除问卷章节信息
+     * 
+     * @param id 问卷章节主键
+     * @return 结果
+     */
+    public int deleteTChapById(Long id);
+}

+ 61 - 0
rc/src/main/java/com/ruoyi/rc/service/ITDeptInfoService.java

@@ -0,0 +1,61 @@
+package com.ruoyi.rc.service;
+
+import java.util.List;
+import com.ruoyi.rc.domain.TDeptInfo;
+
+/**
+ * 装置信息Service接口
+ * 
+ * @author ruoyi
+ * @date 2024-07-19
+ */
+public interface ITDeptInfoService 
+{
+    /**
+     * 查询装置信息
+     * 
+     * @param id 装置信息主键
+     * @return 装置信息
+     */
+    public TDeptInfo selectTDeptInfoById(Long id);
+
+    /**
+     * 查询装置信息列表
+     * 
+     * @param tDeptInfo 装置信息
+     * @return 装置信息集合
+     */
+    public List<TDeptInfo> selectTDeptInfoList(TDeptInfo tDeptInfo);
+
+    /**
+     * 新增装置信息
+     * 
+     * @param tDeptInfo 装置信息
+     * @return 结果
+     */
+    public int insertTDeptInfo(TDeptInfo tDeptInfo);
+
+    /**
+     * 修改装置信息
+     * 
+     * @param tDeptInfo 装置信息
+     * @return 结果
+     */
+    public int updateTDeptInfo(TDeptInfo tDeptInfo);
+
+    /**
+     * 批量删除装置信息
+     * 
+     * @param ids 需要删除的装置信息主键集合
+     * @return 结果
+     */
+    public int deleteTDeptInfoByIds(Long[] ids);
+
+    /**
+     * 删除装置信息信息
+     * 
+     * @param id 装置信息主键
+     * @return 结果
+     */
+    public int deleteTDeptInfoById(Long id);
+}

+ 61 - 0
rc/src/main/java/com/ruoyi/rc/service/ITMeetingService.java

@@ -0,0 +1,61 @@
+package com.ruoyi.rc.service;
+
+import java.util.List;
+import com.ruoyi.rc.domain.TMeeting;
+
+/**
+ * 会议Service接口
+ * 
+ * @author ruoyi
+ * @date 2024-07-19
+ */
+public interface ITMeetingService 
+{
+    /**
+     * 查询会议
+     * 
+     * @param id 会议主键
+     * @return 会议
+     */
+    public TMeeting selectTMeetingById(Long id);
+
+    /**
+     * 查询会议列表
+     * 
+     * @param tMeeting 会议
+     * @return 会议集合
+     */
+    public List<TMeeting> selectTMeetingList(TMeeting tMeeting);
+
+    /**
+     * 新增会议
+     * 
+     * @param tMeeting 会议
+     * @return 结果
+     */
+    public int insertTMeeting(TMeeting tMeeting);
+
+    /**
+     * 修改会议
+     * 
+     * @param tMeeting 会议
+     * @return 结果
+     */
+    public int updateTMeeting(TMeeting tMeeting);
+
+    /**
+     * 批量删除会议
+     * 
+     * @param ids 需要删除的会议主键集合
+     * @return 结果
+     */
+    public int deleteTMeetingByIds(Long[] ids);
+
+    /**
+     * 删除会议信息
+     * 
+     * @param id 会议主键
+     * @return 结果
+     */
+    public int deleteTMeetingById(Long id);
+}

+ 61 - 0
rc/src/main/java/com/ruoyi/rc/service/ITOpenItemService.java

@@ -0,0 +1,61 @@
+package com.ruoyi.rc.service;
+
+import java.util.List;
+import com.ruoyi.rc.domain.TOpenItem;
+
+/**
+ * 开项Service接口
+ * 
+ * @author ruoyi
+ * @date 2024-07-19
+ */
+public interface ITOpenItemService 
+{
+    /**
+     * 查询开项
+     * 
+     * @param id 开项主键
+     * @return 开项
+     */
+    public TOpenItem selectTOpenItemById(Long id);
+
+    /**
+     * 查询开项列表
+     * 
+     * @param tOpenItem 开项
+     * @return 开项集合
+     */
+    public List<TOpenItem> selectTOpenItemList(TOpenItem tOpenItem);
+
+    /**
+     * 新增开项
+     * 
+     * @param tOpenItem 开项
+     * @return 结果
+     */
+    public int insertTOpenItem(TOpenItem tOpenItem);
+
+    /**
+     * 修改开项
+     * 
+     * @param tOpenItem 开项
+     * @return 结果
+     */
+    public int updateTOpenItem(TOpenItem tOpenItem);
+
+    /**
+     * 批量删除开项
+     * 
+     * @param ids 需要删除的开项主键集合
+     * @return 结果
+     */
+    public int deleteTOpenItemByIds(Long[] ids);
+
+    /**
+     * 删除开项信息
+     * 
+     * @param id 开项主键
+     * @return 结果
+     */
+    public int deleteTOpenItemById(Long id);
+}

+ 61 - 0
rc/src/main/java/com/ruoyi/rc/service/ITProgressService.java

@@ -0,0 +1,61 @@
+package com.ruoyi.rc.service;
+
+import java.util.List;
+import com.ruoyi.rc.domain.TProgress;
+
+/**
+ * 进度Service接口
+ * 
+ * @author ruoyi
+ * @date 2024-07-19
+ */
+public interface ITProgressService 
+{
+    /**
+     * 查询进度
+     * 
+     * @param id 进度主键
+     * @return 进度
+     */
+    public TProgress selectTProgressById(Long id);
+
+    /**
+     * 查询进度列表
+     * 
+     * @param tProgress 进度
+     * @return 进度集合
+     */
+    public List<TProgress> selectTProgressList(TProgress tProgress);
+
+    /**
+     * 新增进度
+     * 
+     * @param tProgress 进度
+     * @return 结果
+     */
+    public int insertTProgress(TProgress tProgress);
+
+    /**
+     * 修改进度
+     * 
+     * @param tProgress 进度
+     * @return 结果
+     */
+    public int updateTProgress(TProgress tProgress);
+
+    /**
+     * 批量删除进度
+     * 
+     * @param ids 需要删除的进度主键集合
+     * @return 结果
+     */
+    public int deleteTProgressByIds(Long[] ids);
+
+    /**
+     * 删除进度信息
+     * 
+     * @param id 进度主键
+     * @return 结果
+     */
+    public int deleteTProgressById(Long id);
+}

+ 61 - 0
rc/src/main/java/com/ruoyi/rc/service/ITSecSubChapService.java

@@ -0,0 +1,61 @@
+package com.ruoyi.rc.service;
+
+import java.util.List;
+import com.ruoyi.rc.domain.TSecSubChap;
+
+/**
+ * 问卷二级细分章节Service接口
+ * 
+ * @author ruoyi
+ * @date 2024-07-19
+ */
+public interface ITSecSubChapService 
+{
+    /**
+     * 查询问卷二级细分章节
+     * 
+     * @param id 问卷二级细分章节主键
+     * @return 问卷二级细分章节
+     */
+    public TSecSubChap selectTSecSubChapById(Long id);
+
+    /**
+     * 查询问卷二级细分章节列表
+     * 
+     * @param tSecSubChap 问卷二级细分章节
+     * @return 问卷二级细分章节集合
+     */
+    public List<TSecSubChap> selectTSecSubChapList(TSecSubChap tSecSubChap);
+
+    /**
+     * 新增问卷二级细分章节
+     * 
+     * @param tSecSubChap 问卷二级细分章节
+     * @return 结果
+     */
+    public int insertTSecSubChap(TSecSubChap tSecSubChap);
+
+    /**
+     * 修改问卷二级细分章节
+     * 
+     * @param tSecSubChap 问卷二级细分章节
+     * @return 结果
+     */
+    public int updateTSecSubChap(TSecSubChap tSecSubChap);
+
+    /**
+     * 批量删除问卷二级细分章节
+     * 
+     * @param ids 需要删除的问卷二级细分章节主键集合
+     * @return 结果
+     */
+    public int deleteTSecSubChapByIds(Long[] ids);
+
+    /**
+     * 删除问卷二级细分章节信息
+     * 
+     * @param id 问卷二级细分章节主键
+     * @return 结果
+     */
+    public int deleteTSecSubChapById(Long id);
+}

+ 61 - 0
rc/src/main/java/com/ruoyi/rc/service/ITSubChapService.java

@@ -0,0 +1,61 @@
+package com.ruoyi.rc.service;
+
+import java.util.List;
+import com.ruoyi.rc.domain.TSubChap;
+
+/**
+ * 问卷细分章节Service接口
+ * 
+ * @author ruoyi
+ * @date 2024-07-19
+ */
+public interface ITSubChapService 
+{
+    /**
+     * 查询问卷细分章节
+     * 
+     * @param id 问卷细分章节主键
+     * @return 问卷细分章节
+     */
+    public TSubChap selectTSubChapById(Long id);
+
+    /**
+     * 查询问卷细分章节列表
+     * 
+     * @param tSubChap 问卷细分章节
+     * @return 问卷细分章节集合
+     */
+    public List<TSubChap> selectTSubChapList(TSubChap tSubChap);
+
+    /**
+     * 新增问卷细分章节
+     * 
+     * @param tSubChap 问卷细分章节
+     * @return 结果
+     */
+    public int insertTSubChap(TSubChap tSubChap);
+
+    /**
+     * 修改问卷细分章节
+     * 
+     * @param tSubChap 问卷细分章节
+     * @return 结果
+     */
+    public int updateTSubChap(TSubChap tSubChap);
+
+    /**
+     * 批量删除问卷细分章节
+     * 
+     * @param ids 需要删除的问卷细分章节主键集合
+     * @return 结果
+     */
+    public int deleteTSubChapByIds(Long[] ids);
+
+    /**
+     * 删除问卷细分章节信息
+     * 
+     * @param id 问卷细分章节主键
+     * @return 结果
+     */
+    public int deleteTSubChapById(Long id);
+}

+ 93 - 0
rc/src/main/java/com/ruoyi/rc/service/impl/TAuditServiceImpl.java

@@ -0,0 +1,93 @@
+package com.ruoyi.rc.service.impl;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.rc.mapper.TAuditMapper;
+import com.ruoyi.rc.domain.TAudit;
+import com.ruoyi.rc.service.ITAuditService;
+
+/**
+ * 审计记录Service业务层处理
+ * 
+ * @author ruoyi
+ * @date 2024-07-19
+ */
+@Service
+public class TAuditServiceImpl implements ITAuditService 
+{
+    @Autowired
+    private TAuditMapper tAuditMapper;
+
+    /**
+     * 查询审计记录
+     * 
+     * @param id 审计记录主键
+     * @return 审计记录
+     */
+    @Override
+    public TAudit selectTAuditById(Long id)
+    {
+        return tAuditMapper.selectTAuditById(id);
+    }
+
+    /**
+     * 查询审计记录列表
+     * 
+     * @param tAudit 审计记录
+     * @return 审计记录
+     */
+    @Override
+    public List<TAudit> selectTAuditList(TAudit tAudit)
+    {
+        return tAuditMapper.selectTAuditList(tAudit);
+    }
+
+    /**
+     * 新增审计记录
+     * 
+     * @param tAudit 审计记录
+     * @return 结果
+     */
+    @Override
+    public int insertTAudit(TAudit tAudit)
+    {
+        return tAuditMapper.insertTAudit(tAudit);
+    }
+
+    /**
+     * 修改审计记录
+     * 
+     * @param tAudit 审计记录
+     * @return 结果
+     */
+    @Override
+    public int updateTAudit(TAudit tAudit)
+    {
+        return tAuditMapper.updateTAudit(tAudit);
+    }
+
+    /**
+     * 批量删除审计记录
+     * 
+     * @param ids 需要删除的审计记录主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTAuditByIds(Long[] ids)
+    {
+        return tAuditMapper.deleteTAuditByIds(ids);
+    }
+
+    /**
+     * 删除审计记录信息
+     * 
+     * @param id 审计记录主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTAuditById(Long id)
+    {
+        return tAuditMapper.deleteTAuditById(id);
+    }
+}

+ 93 - 0
rc/src/main/java/com/ruoyi/rc/service/impl/TChapServiceImpl.java

@@ -0,0 +1,93 @@
+package com.ruoyi.rc.service.impl;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.rc.mapper.TChapMapper;
+import com.ruoyi.rc.domain.TChap;
+import com.ruoyi.rc.service.ITChapService;
+
+/**
+ * 问卷章节Service业务层处理
+ * 
+ * @author ruoyi
+ * @date 2024-07-19
+ */
+@Service
+public class TChapServiceImpl implements ITChapService 
+{
+    @Autowired
+    private TChapMapper tChapMapper;
+
+    /**
+     * 查询问卷章节
+     * 
+     * @param id 问卷章节主键
+     * @return 问卷章节
+     */
+    @Override
+    public TChap selectTChapById(Long id)
+    {
+        return tChapMapper.selectTChapById(id);
+    }
+
+    /**
+     * 查询问卷章节列表
+     * 
+     * @param tChap 问卷章节
+     * @return 问卷章节
+     */
+    @Override
+    public List<TChap> selectTChapList(TChap tChap)
+    {
+        return tChapMapper.selectTChapList(tChap);
+    }
+
+    /**
+     * 新增问卷章节
+     * 
+     * @param tChap 问卷章节
+     * @return 结果
+     */
+    @Override
+    public int insertTChap(TChap tChap)
+    {
+        return tChapMapper.insertTChap(tChap);
+    }
+
+    /**
+     * 修改问卷章节
+     * 
+     * @param tChap 问卷章节
+     * @return 结果
+     */
+    @Override
+    public int updateTChap(TChap tChap)
+    {
+        return tChapMapper.updateTChap(tChap);
+    }
+
+    /**
+     * 批量删除问卷章节
+     * 
+     * @param ids 需要删除的问卷章节主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTChapByIds(Long[] ids)
+    {
+        return tChapMapper.deleteTChapByIds(ids);
+    }
+
+    /**
+     * 删除问卷章节信息
+     * 
+     * @param id 问卷章节主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTChapById(Long id)
+    {
+        return tChapMapper.deleteTChapById(id);
+    }
+}

+ 93 - 0
rc/src/main/java/com/ruoyi/rc/service/impl/TDeptInfoServiceImpl.java

@@ -0,0 +1,93 @@
+package com.ruoyi.rc.service.impl;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.rc.mapper.TDeptInfoMapper;
+import com.ruoyi.rc.domain.TDeptInfo;
+import com.ruoyi.rc.service.ITDeptInfoService;
+
+/**
+ * 装置信息Service业务层处理
+ * 
+ * @author ruoyi
+ * @date 2024-07-19
+ */
+@Service
+public class TDeptInfoServiceImpl implements ITDeptInfoService 
+{
+    @Autowired
+    private TDeptInfoMapper tDeptInfoMapper;
+
+    /**
+     * 查询装置信息
+     * 
+     * @param id 装置信息主键
+     * @return 装置信息
+     */
+    @Override
+    public TDeptInfo selectTDeptInfoById(Long id)
+    {
+        return tDeptInfoMapper.selectTDeptInfoById(id);
+    }
+
+    /**
+     * 查询装置信息列表
+     * 
+     * @param tDeptInfo 装置信息
+     * @return 装置信息
+     */
+    @Override
+    public List<TDeptInfo> selectTDeptInfoList(TDeptInfo tDeptInfo)
+    {
+        return tDeptInfoMapper.selectTDeptInfoList(tDeptInfo);
+    }
+
+    /**
+     * 新增装置信息
+     * 
+     * @param tDeptInfo 装置信息
+     * @return 结果
+     */
+    @Override
+    public int insertTDeptInfo(TDeptInfo tDeptInfo)
+    {
+        return tDeptInfoMapper.insertTDeptInfo(tDeptInfo);
+    }
+
+    /**
+     * 修改装置信息
+     * 
+     * @param tDeptInfo 装置信息
+     * @return 结果
+     */
+    @Override
+    public int updateTDeptInfo(TDeptInfo tDeptInfo)
+    {
+        return tDeptInfoMapper.updateTDeptInfo(tDeptInfo);
+    }
+
+    /**
+     * 批量删除装置信息
+     * 
+     * @param ids 需要删除的装置信息主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTDeptInfoByIds(Long[] ids)
+    {
+        return tDeptInfoMapper.deleteTDeptInfoByIds(ids);
+    }
+
+    /**
+     * 删除装置信息信息
+     * 
+     * @param id 装置信息主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTDeptInfoById(Long id)
+    {
+        return tDeptInfoMapper.deleteTDeptInfoById(id);
+    }
+}

+ 93 - 0
rc/src/main/java/com/ruoyi/rc/service/impl/TMeetingServiceImpl.java

@@ -0,0 +1,93 @@
+package com.ruoyi.rc.service.impl;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.rc.mapper.TMeetingMapper;
+import com.ruoyi.rc.domain.TMeeting;
+import com.ruoyi.rc.service.ITMeetingService;
+
+/**
+ * 会议Service业务层处理
+ * 
+ * @author ruoyi
+ * @date 2024-07-19
+ */
+@Service
+public class TMeetingServiceImpl implements ITMeetingService 
+{
+    @Autowired
+    private TMeetingMapper tMeetingMapper;
+
+    /**
+     * 查询会议
+     * 
+     * @param id 会议主键
+     * @return 会议
+     */
+    @Override
+    public TMeeting selectTMeetingById(Long id)
+    {
+        return tMeetingMapper.selectTMeetingById(id);
+    }
+
+    /**
+     * 查询会议列表
+     * 
+     * @param tMeeting 会议
+     * @return 会议
+     */
+    @Override
+    public List<TMeeting> selectTMeetingList(TMeeting tMeeting)
+    {
+        return tMeetingMapper.selectTMeetingList(tMeeting);
+    }
+
+    /**
+     * 新增会议
+     * 
+     * @param tMeeting 会议
+     * @return 结果
+     */
+    @Override
+    public int insertTMeeting(TMeeting tMeeting)
+    {
+        return tMeetingMapper.insertTMeeting(tMeeting);
+    }
+
+    /**
+     * 修改会议
+     * 
+     * @param tMeeting 会议
+     * @return 结果
+     */
+    @Override
+    public int updateTMeeting(TMeeting tMeeting)
+    {
+        return tMeetingMapper.updateTMeeting(tMeeting);
+    }
+
+    /**
+     * 批量删除会议
+     * 
+     * @param ids 需要删除的会议主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTMeetingByIds(Long[] ids)
+    {
+        return tMeetingMapper.deleteTMeetingByIds(ids);
+    }
+
+    /**
+     * 删除会议信息
+     * 
+     * @param id 会议主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTMeetingById(Long id)
+    {
+        return tMeetingMapper.deleteTMeetingById(id);
+    }
+}

+ 93 - 0
rc/src/main/java/com/ruoyi/rc/service/impl/TOpenItemServiceImpl.java

@@ -0,0 +1,93 @@
+package com.ruoyi.rc.service.impl;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.rc.mapper.TOpenItemMapper;
+import com.ruoyi.rc.domain.TOpenItem;
+import com.ruoyi.rc.service.ITOpenItemService;
+
+/**
+ * 开项Service业务层处理
+ * 
+ * @author ruoyi
+ * @date 2024-07-19
+ */
+@Service
+public class TOpenItemServiceImpl implements ITOpenItemService 
+{
+    @Autowired
+    private TOpenItemMapper tOpenItemMapper;
+
+    /**
+     * 查询开项
+     * 
+     * @param id 开项主键
+     * @return 开项
+     */
+    @Override
+    public TOpenItem selectTOpenItemById(Long id)
+    {
+        return tOpenItemMapper.selectTOpenItemById(id);
+    }
+
+    /**
+     * 查询开项列表
+     * 
+     * @param tOpenItem 开项
+     * @return 开项
+     */
+    @Override
+    public List<TOpenItem> selectTOpenItemList(TOpenItem tOpenItem)
+    {
+        return tOpenItemMapper.selectTOpenItemList(tOpenItem);
+    }
+
+    /**
+     * 新增开项
+     * 
+     * @param tOpenItem 开项
+     * @return 结果
+     */
+    @Override
+    public int insertTOpenItem(TOpenItem tOpenItem)
+    {
+        return tOpenItemMapper.insertTOpenItem(tOpenItem);
+    }
+
+    /**
+     * 修改开项
+     * 
+     * @param tOpenItem 开项
+     * @return 结果
+     */
+    @Override
+    public int updateTOpenItem(TOpenItem tOpenItem)
+    {
+        return tOpenItemMapper.updateTOpenItem(tOpenItem);
+    }
+
+    /**
+     * 批量删除开项
+     * 
+     * @param ids 需要删除的开项主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTOpenItemByIds(Long[] ids)
+    {
+        return tOpenItemMapper.deleteTOpenItemByIds(ids);
+    }
+
+    /**
+     * 删除开项信息
+     * 
+     * @param id 开项主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTOpenItemById(Long id)
+    {
+        return tOpenItemMapper.deleteTOpenItemById(id);
+    }
+}

+ 93 - 0
rc/src/main/java/com/ruoyi/rc/service/impl/TProgressServiceImpl.java

@@ -0,0 +1,93 @@
+package com.ruoyi.rc.service.impl;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.rc.mapper.TProgressMapper;
+import com.ruoyi.rc.domain.TProgress;
+import com.ruoyi.rc.service.ITProgressService;
+
+/**
+ * 进度Service业务层处理
+ * 
+ * @author ruoyi
+ * @date 2024-07-19
+ */
+@Service
+public class TProgressServiceImpl implements ITProgressService 
+{
+    @Autowired
+    private TProgressMapper tProgressMapper;
+
+    /**
+     * 查询进度
+     * 
+     * @param id 进度主键
+     * @return 进度
+     */
+    @Override
+    public TProgress selectTProgressById(Long id)
+    {
+        return tProgressMapper.selectTProgressById(id);
+    }
+
+    /**
+     * 查询进度列表
+     * 
+     * @param tProgress 进度
+     * @return 进度
+     */
+    @Override
+    public List<TProgress> selectTProgressList(TProgress tProgress)
+    {
+        return tProgressMapper.selectTProgressList(tProgress);
+    }
+
+    /**
+     * 新增进度
+     * 
+     * @param tProgress 进度
+     * @return 结果
+     */
+    @Override
+    public int insertTProgress(TProgress tProgress)
+    {
+        return tProgressMapper.insertTProgress(tProgress);
+    }
+
+    /**
+     * 修改进度
+     * 
+     * @param tProgress 进度
+     * @return 结果
+     */
+    @Override
+    public int updateTProgress(TProgress tProgress)
+    {
+        return tProgressMapper.updateTProgress(tProgress);
+    }
+
+    /**
+     * 批量删除进度
+     * 
+     * @param ids 需要删除的进度主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTProgressByIds(Long[] ids)
+    {
+        return tProgressMapper.deleteTProgressByIds(ids);
+    }
+
+    /**
+     * 删除进度信息
+     * 
+     * @param id 进度主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTProgressById(Long id)
+    {
+        return tProgressMapper.deleteTProgressById(id);
+    }
+}

+ 93 - 0
rc/src/main/java/com/ruoyi/rc/service/impl/TSecSubChapServiceImpl.java

@@ -0,0 +1,93 @@
+package com.ruoyi.rc.service.impl;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.rc.mapper.TSecSubChapMapper;
+import com.ruoyi.rc.domain.TSecSubChap;
+import com.ruoyi.rc.service.ITSecSubChapService;
+
+/**
+ * 问卷二级细分章节Service业务层处理
+ * 
+ * @author ruoyi
+ * @date 2024-07-19
+ */
+@Service
+public class TSecSubChapServiceImpl implements ITSecSubChapService 
+{
+    @Autowired
+    private TSecSubChapMapper tSecSubChapMapper;
+
+    /**
+     * 查询问卷二级细分章节
+     * 
+     * @param id 问卷二级细分章节主键
+     * @return 问卷二级细分章节
+     */
+    @Override
+    public TSecSubChap selectTSecSubChapById(Long id)
+    {
+        return tSecSubChapMapper.selectTSecSubChapById(id);
+    }
+
+    /**
+     * 查询问卷二级细分章节列表
+     * 
+     * @param tSecSubChap 问卷二级细分章节
+     * @return 问卷二级细分章节
+     */
+    @Override
+    public List<TSecSubChap> selectTSecSubChapList(TSecSubChap tSecSubChap)
+    {
+        return tSecSubChapMapper.selectTSecSubChapList(tSecSubChap);
+    }
+
+    /**
+     * 新增问卷二级细分章节
+     * 
+     * @param tSecSubChap 问卷二级细分章节
+     * @return 结果
+     */
+    @Override
+    public int insertTSecSubChap(TSecSubChap tSecSubChap)
+    {
+        return tSecSubChapMapper.insertTSecSubChap(tSecSubChap);
+    }
+
+    /**
+     * 修改问卷二级细分章节
+     * 
+     * @param tSecSubChap 问卷二级细分章节
+     * @return 结果
+     */
+    @Override
+    public int updateTSecSubChap(TSecSubChap tSecSubChap)
+    {
+        return tSecSubChapMapper.updateTSecSubChap(tSecSubChap);
+    }
+
+    /**
+     * 批量删除问卷二级细分章节
+     * 
+     * @param ids 需要删除的问卷二级细分章节主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTSecSubChapByIds(Long[] ids)
+    {
+        return tSecSubChapMapper.deleteTSecSubChapByIds(ids);
+    }
+
+    /**
+     * 删除问卷二级细分章节信息
+     * 
+     * @param id 问卷二级细分章节主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTSecSubChapById(Long id)
+    {
+        return tSecSubChapMapper.deleteTSecSubChapById(id);
+    }
+}

+ 93 - 0
rc/src/main/java/com/ruoyi/rc/service/impl/TSubChapServiceImpl.java

@@ -0,0 +1,93 @@
+package com.ruoyi.rc.service.impl;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.rc.mapper.TSubChapMapper;
+import com.ruoyi.rc.domain.TSubChap;
+import com.ruoyi.rc.service.ITSubChapService;
+
+/**
+ * 问卷细分章节Service业务层处理
+ * 
+ * @author ruoyi
+ * @date 2024-07-19
+ */
+@Service
+public class TSubChapServiceImpl implements ITSubChapService 
+{
+    @Autowired
+    private TSubChapMapper tSubChapMapper;
+
+    /**
+     * 查询问卷细分章节
+     * 
+     * @param id 问卷细分章节主键
+     * @return 问卷细分章节
+     */
+    @Override
+    public TSubChap selectTSubChapById(Long id)
+    {
+        return tSubChapMapper.selectTSubChapById(id);
+    }
+
+    /**
+     * 查询问卷细分章节列表
+     * 
+     * @param tSubChap 问卷细分章节
+     * @return 问卷细分章节
+     */
+    @Override
+    public List<TSubChap> selectTSubChapList(TSubChap tSubChap)
+    {
+        return tSubChapMapper.selectTSubChapList(tSubChap);
+    }
+
+    /**
+     * 新增问卷细分章节
+     * 
+     * @param tSubChap 问卷细分章节
+     * @return 结果
+     */
+    @Override
+    public int insertTSubChap(TSubChap tSubChap)
+    {
+        return tSubChapMapper.insertTSubChap(tSubChap);
+    }
+
+    /**
+     * 修改问卷细分章节
+     * 
+     * @param tSubChap 问卷细分章节
+     * @return 结果
+     */
+    @Override
+    public int updateTSubChap(TSubChap tSubChap)
+    {
+        return tSubChapMapper.updateTSubChap(tSubChap);
+    }
+
+    /**
+     * 批量删除问卷细分章节
+     * 
+     * @param ids 需要删除的问卷细分章节主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTSubChapByIds(Long[] ids)
+    {
+        return tSubChapMapper.deleteTSubChapByIds(ids);
+    }
+
+    /**
+     * 删除问卷细分章节信息
+     * 
+     * @param id 问卷细分章节主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTSubChapById(Long id)
+    {
+        return tSubChapMapper.deleteTSubChapById(id);
+    }
+}

+ 81 - 0
rc/src/main/resources/mapper/rc/TAuditMapper.xml

@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.rc.mapper.TAuditMapper">
+    
+    <resultMap type="TAudit" id="TAuditResult">
+        <result property="id"    column="id"    />
+        <result property="year"    column="year"    />
+        <result property="preAuditTime"    column="pre_audit_time"    />
+        <result property="auditTime"    column="audit_time"    />
+        <result property="auditResult"    column="audit_result"    />
+        <result property="remarks"    column="remarks"    />
+        <result property="deptId"    column="dept_id"    />
+    </resultMap>
+
+    <sql id="selectTAuditVo">
+        select id, year, pre_audit_time, audit_time, audit_result, remarks, dept_id from t_audit
+    </sql>
+
+    <select id="selectTAuditList" parameterType="TAudit" resultMap="TAuditResult">
+        <include refid="selectTAuditVo"/>
+        <where>  
+            <if test="year != null  and year != ''"> and year = #{year}</if>
+            <if test="preAuditTime != null "> and pre_audit_time = #{preAuditTime}</if>
+            <if test="auditTime != null "> and audit_time = #{auditTime}</if>
+            <if test="auditResult != null  and auditResult != ''"> and audit_result = #{auditResult}</if>
+            <if test="remarks != null  and remarks != ''"> and remarks = #{remarks}</if>
+            <if test="deptId != null "> and dept_id = #{deptId}</if>
+        </where>
+    </select>
+    
+    <select id="selectTAuditById" parameterType="Long" resultMap="TAuditResult">
+        <include refid="selectTAuditVo"/>
+        where id = #{id}
+    </select>
+
+    <insert id="insertTAudit" parameterType="TAudit" useGeneratedKeys="true" keyProperty="id">
+        insert into t_audit
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="year != null">year,</if>
+            <if test="preAuditTime != null">pre_audit_time,</if>
+            <if test="auditTime != null">audit_time,</if>
+            <if test="auditResult != null">audit_result,</if>
+            <if test="remarks != null">remarks,</if>
+            <if test="deptId != null">dept_id,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="year != null">#{year},</if>
+            <if test="preAuditTime != null">#{preAuditTime},</if>
+            <if test="auditTime != null">#{auditTime},</if>
+            <if test="auditResult != null">#{auditResult},</if>
+            <if test="remarks != null">#{remarks},</if>
+            <if test="deptId != null">#{deptId},</if>
+         </trim>
+    </insert>
+
+    <update id="updateTAudit" parameterType="TAudit">
+        update t_audit
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="year != null">year = #{year},</if>
+            <if test="preAuditTime != null">pre_audit_time = #{preAuditTime},</if>
+            <if test="auditTime != null">audit_time = #{auditTime},</if>
+            <if test="auditResult != null">audit_result = #{auditResult},</if>
+            <if test="remarks != null">remarks = #{remarks},</if>
+            <if test="deptId != null">dept_id = #{deptId},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteTAuditById" parameterType="Long">
+        delete from t_audit where id = #{id}
+    </delete>
+
+    <delete id="deleteTAuditByIds" parameterType="String">
+        delete from t_audit where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 66 - 0
rc/src/main/resources/mapper/rc/TChapMapper.xml

@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.rc.mapper.TChapMapper">
+    
+    <resultMap type="TChap" id="TChapResult">
+        <result property="id"    column="id"    />
+        <result property="auditId"    column="audit_id"    />
+        <result property="name"    column="name"    />
+        <result property="deptId"    column="dept_id"    />
+    </resultMap>
+
+    <sql id="selectTChapVo">
+        select id, audit_id, name, dept_id from t_chap
+    </sql>
+
+    <select id="selectTChapList" parameterType="TChap" resultMap="TChapResult">
+        <include refid="selectTChapVo"/>
+        <where>  
+            <if test="auditId != null "> and audit_id = #{auditId}</if>
+            <if test="name != null  and name != ''"> and name like concat('%', #{name}, '%')</if>
+            <if test="deptId != null "> and dept_id = #{deptId}</if>
+        </where>
+    </select>
+    
+    <select id="selectTChapById" parameterType="Long" resultMap="TChapResult">
+        <include refid="selectTChapVo"/>
+        where id = #{id}
+    </select>
+
+    <insert id="insertTChap" parameterType="TChap" useGeneratedKeys="true" keyProperty="id">
+        insert into t_chap
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="auditId != null">audit_id,</if>
+            <if test="name != null">name,</if>
+            <if test="deptId != null">dept_id,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="auditId != null">#{auditId},</if>
+            <if test="name != null">#{name},</if>
+            <if test="deptId != null">#{deptId},</if>
+         </trim>
+    </insert>
+
+    <update id="updateTChap" parameterType="TChap">
+        update t_chap
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="auditId != null">audit_id = #{auditId},</if>
+            <if test="name != null">name = #{name},</if>
+            <if test="deptId != null">dept_id = #{deptId},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteTChapById" parameterType="Long">
+        delete from t_chap where id = #{id}
+    </delete>
+
+    <delete id="deleteTChapByIds" parameterType="String">
+        delete from t_chap where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 67 - 0
rc/src/main/resources/mapper/rc/TDeptInfoMapper.xml

@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.rc.mapper.TDeptInfoMapper">
+    
+    <resultMap type="TDeptInfo" id="TDeptInfoResult">
+        <result property="id"    column="id"    />
+        <result property="deptInfo"    column="dept_info"    />
+        <result property="deptId"    column="dept_id"    />
+        <result property="year"    column="year"    />
+    </resultMap>
+
+    <sql id="selectTDeptInfoVo">
+        select id, dept_info, dept_id, year from t_dept_info
+    </sql>
+
+    <select id="selectTDeptInfoList" parameterType="TDeptInfo" resultMap="TDeptInfoResult">
+        <include refid="selectTDeptInfoVo"/>
+        <where>
+            <if test="year != null  and year != ''"> and year = #{year}</if>
+
+            <if test="deptInfo != null  and deptInfo != ''"> and dept_info = #{deptInfo}</if>
+            <if test="deptId != null "> and dept_id = #{deptId}</if>
+        </where>
+    </select>
+    
+    <select id="selectTDeptInfoById" parameterType="Long" resultMap="TDeptInfoResult">
+        <include refid="selectTDeptInfoVo"/>
+        where id = #{id}
+    </select>
+
+    <insert id="insertTDeptInfo" parameterType="TDeptInfo" useGeneratedKeys="true" keyProperty="id">
+        insert into t_dept_info
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="deptInfo != null">dept_info,</if>
+            <if test="deptId != null">dept_id,</if>
+            <if test="year != null">year,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="deptInfo != null">#{deptInfo},</if>
+            <if test="deptId != null">#{deptId},</if>
+            <if test="year != null">#{year},</if>
+         </trim>
+    </insert>
+
+    <update id="updateTDeptInfo" parameterType="TDeptInfo">
+        update t_dept_info
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="deptInfo != null">dept_info = #{deptInfo},</if>
+            <if test="deptId != null">dept_id = #{deptId},</if>
+            <if test="year != null">year = #{year},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteTDeptInfoById" parameterType="Long">
+        delete from t_dept_info where id = #{id}
+    </delete>
+
+    <delete id="deleteTDeptInfoByIds" parameterType="String">
+        delete from t_dept_info where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 76 - 0
rc/src/main/resources/mapper/rc/TMeetingMapper.xml

@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.rc.mapper.TMeetingMapper">
+    
+    <resultMap type="TMeeting" id="TMeetingResult">
+        <result property="id"    column="id"    />
+        <result property="year"    column="year"    />
+        <result property="secSubChapId"    column="sec_sub_chap_id"    />
+        <result property="personInCharge"    column="person_in_charge"    />
+        <result property="remarks"    column="remarks"    />
+        <result property="deptId"    column="dept_id"    />
+    </resultMap>
+
+    <sql id="selectTMeetingVo">
+        select id, year, sec_sub_chap_id, person_in_charge, remarks, dept_id from t_meeting
+    </sql>
+
+    <select id="selectTMeetingList" parameterType="TMeeting" resultMap="TMeetingResult">
+        <include refid="selectTMeetingVo"/>
+        <where>  
+            <if test="year != null  and year != ''"> and year = #{year}</if>
+            <if test="secSubChapId != null "> and sec_sub_chap_id = #{secSubChapId}</if>
+            <if test="personInCharge != null "> and person_in_charge = #{personInCharge}</if>
+            <if test="remarks != null  and remarks != ''"> and remarks = #{remarks}</if>
+            <if test="deptId != null "> and dept_id = #{deptId}</if>
+        </where>
+    </select>
+    
+    <select id="selectTMeetingById" parameterType="Long" resultMap="TMeetingResult">
+        <include refid="selectTMeetingVo"/>
+        where id = #{id}
+    </select>
+
+    <insert id="insertTMeeting" parameterType="TMeeting" useGeneratedKeys="true" keyProperty="id">
+        insert into t_meeting
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="year != null">year,</if>
+            <if test="secSubChapId != null">sec_sub_chap_id,</if>
+            <if test="personInCharge != null">person_in_charge,</if>
+            <if test="remarks != null">remarks,</if>
+            <if test="deptId != null">dept_id,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="year != null">#{year},</if>
+            <if test="secSubChapId != null">#{secSubChapId},</if>
+            <if test="personInCharge != null">#{personInCharge},</if>
+            <if test="remarks != null">#{remarks},</if>
+            <if test="deptId != null">#{deptId},</if>
+         </trim>
+    </insert>
+
+    <update id="updateTMeeting" parameterType="TMeeting">
+        update t_meeting
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="year != null">year = #{year},</if>
+            <if test="secSubChapId != null">sec_sub_chap_id = #{secSubChapId},</if>
+            <if test="personInCharge != null">person_in_charge = #{personInCharge},</if>
+            <if test="remarks != null">remarks = #{remarks},</if>
+            <if test="deptId != null">dept_id = #{deptId},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteTMeetingById" parameterType="Long">
+        delete from t_meeting where id = #{id}
+    </delete>
+
+    <delete id="deleteTMeetingByIds" parameterType="String">
+        delete from t_meeting where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 116 - 0
rc/src/main/resources/mapper/rc/TOpenItemMapper.xml

@@ -0,0 +1,116 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.rc.mapper.TOpenItemMapper">
+    
+    <resultMap type="TOpenItem" id="TOpenItemResult">
+        <result property="id"    column="id"    />
+        <result property="type"    column="type"    />
+        <result property="secSubChapId"    column="sec_sub_chap_id"    />
+        <result property="description"    column="description"    />
+        <result property="level"    column="level"    />
+        <result property="openTime"    column="open_time"    />
+        <result property="closeTime"    column="close_time"    />
+        <result property="status"    column="status"    />
+        <result property="personInCharge"    column="person_in_charge"    />
+        <result property="reviewer"    column="reviewer"    />
+        <result property="result"    column="result"    />
+        <result property="deadline"    column="deadline"    />
+        <result property="remarks"    column="remarks"    />
+        <result property="deptId"    column="dept_id"    />
+    </resultMap>
+
+    <sql id="selectTOpenItemVo">
+        select id, type, sec_sub_chap_id, description, level, open_time, close_time, status, person_in_charge, reviewer, result, deadline, remarks, dept_id from t_open_item
+    </sql>
+
+    <select id="selectTOpenItemList" parameterType="TOpenItem" resultMap="TOpenItemResult">
+        <include refid="selectTOpenItemVo"/>
+        <where>  
+            <if test="type != null  and type != ''"> and type = #{type}</if>
+            <if test="secSubChapId != null "> and sec_sub_chap_id = #{secSubChapId}</if>
+            <if test="description != null  and description != ''"> and description = #{description}</if>
+            <if test="level != null  and level != ''"> and level = #{level}</if>
+            <if test="openTime != null "> and open_time = #{openTime}</if>
+            <if test="closeTime != null "> and close_time = #{closeTime}</if>
+            <if test="status != null  and status != ''"> and status = #{status}</if>
+            <if test="personInCharge != null "> and person_in_charge = #{personInCharge}</if>
+            <if test="reviewer != null "> and reviewer = #{reviewer}</if>
+            <if test="result != null  and result != ''"> and result = #{result}</if>
+            <if test="deadline != null "> and deadline = #{deadline}</if>
+            <if test="remarks != null  and remarks != ''"> and remarks = #{remarks}</if>
+            <if test="deptId != null "> and dept_id = #{deptId}</if>
+        </where>
+    </select>
+    
+    <select id="selectTOpenItemById" parameterType="Long" resultMap="TOpenItemResult">
+        <include refid="selectTOpenItemVo"/>
+        where id = #{id}
+    </select>
+
+    <insert id="insertTOpenItem" parameterType="TOpenItem" useGeneratedKeys="true" keyProperty="id">
+        insert into t_open_item
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="type != null">type,</if>
+            <if test="secSubChapId != null">sec_sub_chap_id,</if>
+            <if test="description != null">description,</if>
+            <if test="level != null">level,</if>
+            <if test="openTime != null">open_time,</if>
+            <if test="closeTime != null">close_time,</if>
+            <if test="status != null">status,</if>
+            <if test="personInCharge != null">person_in_charge,</if>
+            <if test="reviewer != null">reviewer,</if>
+            <if test="result != null">result,</if>
+            <if test="deadline != null">deadline,</if>
+            <if test="remarks != null">remarks,</if>
+            <if test="deptId != null">dept_id,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="type != null">#{type},</if>
+            <if test="secSubChapId != null">#{secSubChapId},</if>
+            <if test="description != null">#{description},</if>
+            <if test="level != null">#{level},</if>
+            <if test="openTime != null">#{openTime},</if>
+            <if test="closeTime != null">#{closeTime},</if>
+            <if test="status != null">#{status},</if>
+            <if test="personInCharge != null">#{personInCharge},</if>
+            <if test="reviewer != null">#{reviewer},</if>
+            <if test="result != null">#{result},</if>
+            <if test="deadline != null">#{deadline},</if>
+            <if test="remarks != null">#{remarks},</if>
+            <if test="deptId != null">#{deptId},</if>
+         </trim>
+    </insert>
+
+    <update id="updateTOpenItem" parameterType="TOpenItem">
+        update t_open_item
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="type != null">type = #{type},</if>
+            <if test="secSubChapId != null">sec_sub_chap_id = #{secSubChapId},</if>
+            <if test="description != null">description = #{description},</if>
+            <if test="level != null">level = #{level},</if>
+            <if test="openTime != null">open_time = #{openTime},</if>
+            <if test="closeTime != null">close_time = #{closeTime},</if>
+            <if test="status != null">status = #{status},</if>
+            <if test="personInCharge != null">person_in_charge = #{personInCharge},</if>
+            <if test="reviewer != null">reviewer = #{reviewer},</if>
+            <if test="result != null">result = #{result},</if>
+            <if test="deadline != null">deadline = #{deadline},</if>
+            <if test="remarks != null">remarks = #{remarks},</if>
+            <if test="deptId != null">dept_id = #{deptId},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteTOpenItemById" parameterType="Long">
+        delete from t_open_item where id = #{id}
+    </delete>
+
+    <delete id="deleteTOpenItemByIds" parameterType="String">
+        delete from t_open_item where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 126 - 0
rc/src/main/resources/mapper/rc/TProgressMapper.xml

@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.rc.mapper.TProgressMapper">
+    
+    <resultMap type="TProgress" id="TProgressResult">
+        <result property="id"    column="id"    />
+        <result property="secSubChapId"    column="sec_sub_chap_id"    />
+        <result property="chapName"    column="chap_name"    />
+        <result property="subChapName"    column="sub_chap_name"    />
+        <result property="secSubChapName"    column="sec_sub_chap_name"    />
+        <result property="content"    column="content"    />
+        <result property="personInCharge"    column="person_in_charge"    />
+        <result property="supporter"    column="supporter"    />
+        <result property="startDate"    column="start_date"    />
+        <result property="targetDate"    column="target_date"    />
+        <result property="finishDate"    column="finish_date"    />
+        <result property="preparation"    column="preparation"    />
+        <result property="progress"    column="progress"    />
+        <result property="applyStatus"    column="apply_status"    />
+        <result property="remarks"    column="remarks"    />
+        <result property="deptId"    column="dept_id"    />
+    </resultMap>
+
+    <sql id="selectTProgressVo">
+        select id, sec_sub_chap_id, chap_name, sub_chap_name, sec_sub_chap_name, content, person_in_charge, supporter, start_date, target_date, finish_date, preparation, progress, apply_status, remarks, dept_id from t_progress
+    </sql>
+
+    <select id="selectTProgressList" parameterType="TProgress" resultMap="TProgressResult">
+        <include refid="selectTProgressVo"/>
+        <where>  
+            <if test="secSubChapId != null "> and sec_sub_chap_id = #{secSubChapId}</if>
+            <if test="chapName != null  and chapName != ''"> and chap_name like concat('%', #{chapName}, '%')</if>
+            <if test="subChapName != null  and subChapName != ''"> and sub_chap_name like concat('%', #{subChapName}, '%')</if>
+            <if test="secSubChapName != null  and secSubChapName != ''"> and sec_sub_chap_name like concat('%', #{secSubChapName}, '%')</if>
+            <if test="content != null  and content != ''"> and content = #{content}</if>
+            <if test="personInCharge != null "> and person_in_charge = #{personInCharge}</if>
+            <if test="supporter != null "> and supporter = #{supporter}</if>
+            <if test="startDate != null "> and start_date = #{startDate}</if>
+            <if test="targetDate != null "> and target_date = #{targetDate}</if>
+            <if test="finishDate != null "> and finish_date = #{finishDate}</if>
+            <if test="preparation != null  and preparation != ''"> and preparation = #{preparation}</if>
+            <if test="progress != null  and progress != ''"> and progress = #{progress}</if>
+            <if test="applyStatus != null  and applyStatus != ''"> and apply_status = #{applyStatus}</if>
+            <if test="remarks != null  and remarks != ''"> and remarks = #{remarks}</if>
+            <if test="deptId != null "> and dept_id = #{deptId}</if>
+        </where>
+    </select>
+    
+    <select id="selectTProgressById" parameterType="Long" resultMap="TProgressResult">
+        <include refid="selectTProgressVo"/>
+        where id = #{id}
+    </select>
+
+    <insert id="insertTProgress" parameterType="TProgress" useGeneratedKeys="true" keyProperty="id">
+        insert into t_progress
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="secSubChapId != null">sec_sub_chap_id,</if>
+            <if test="chapName != null">chap_name,</if>
+            <if test="subChapName != null">sub_chap_name,</if>
+            <if test="secSubChapName != null">sec_sub_chap_name,</if>
+            <if test="content != null">content,</if>
+            <if test="personInCharge != null">person_in_charge,</if>
+            <if test="supporter != null">supporter,</if>
+            <if test="startDate != null">start_date,</if>
+            <if test="targetDate != null">target_date,</if>
+            <if test="finishDate != null">finish_date,</if>
+            <if test="preparation != null">preparation,</if>
+            <if test="progress != null">progress,</if>
+            <if test="applyStatus != null">apply_status,</if>
+            <if test="remarks != null">remarks,</if>
+            <if test="deptId != null">dept_id,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="secSubChapId != null">#{secSubChapId},</if>
+            <if test="chapName != null">#{chapName},</if>
+            <if test="subChapName != null">#{subChapName},</if>
+            <if test="secSubChapName != null">#{secSubChapName},</if>
+            <if test="content != null">#{content},</if>
+            <if test="personInCharge != null">#{personInCharge},</if>
+            <if test="supporter != null">#{supporter},</if>
+            <if test="startDate != null">#{startDate},</if>
+            <if test="targetDate != null">#{targetDate},</if>
+            <if test="finishDate != null">#{finishDate},</if>
+            <if test="preparation != null">#{preparation},</if>
+            <if test="progress != null">#{progress},</if>
+            <if test="applyStatus != null">#{applyStatus},</if>
+            <if test="remarks != null">#{remarks},</if>
+            <if test="deptId != null">#{deptId},</if>
+         </trim>
+    </insert>
+
+    <update id="updateTProgress" parameterType="TProgress">
+        update t_progress
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="secSubChapId != null">sec_sub_chap_id = #{secSubChapId},</if>
+            <if test="chapName != null">chap_name = #{chapName},</if>
+            <if test="subChapName != null">sub_chap_name = #{subChapName},</if>
+            <if test="secSubChapName != null">sec_sub_chap_name = #{secSubChapName},</if>
+            <if test="content != null">content = #{content},</if>
+            <if test="personInCharge != null">person_in_charge = #{personInCharge},</if>
+            <if test="supporter != null">supporter = #{supporter},</if>
+            <if test="startDate != null">start_date = #{startDate},</if>
+            <if test="targetDate != null">target_date = #{targetDate},</if>
+            <if test="finishDate != null">finish_date = #{finishDate},</if>
+            <if test="preparation != null">preparation = #{preparation},</if>
+            <if test="progress != null">progress = #{progress},</if>
+            <if test="applyStatus != null">apply_status = #{applyStatus},</if>
+            <if test="remarks != null">remarks = #{remarks},</if>
+            <if test="deptId != null">dept_id = #{deptId},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteTProgressById" parameterType="Long">
+        delete from t_progress where id = #{id}
+    </delete>
+
+    <delete id="deleteTProgressByIds" parameterType="String">
+        delete from t_progress where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 131 - 0
rc/src/main/resources/mapper/rc/TSecSubChapMapper.xml

@@ -0,0 +1,131 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.rc.mapper.TSecSubChapMapper">
+    
+    <resultMap type="TSecSubChap" id="TSecSubChapResult">
+        <result property="id"    column="id"    />
+        <result property="auditId"    column="audit_id"    />
+        <result property="subChapId"    column="sub_chap_id"    />
+        <result property="year"    column="year"    />
+        <result property="type"    column="type"    />
+        <result property="directory"    column="directory"    />
+        <result property="code"    column="code"    />
+        <result property="name"    column="name"    />
+        <result property="yeaNoNa"    column="yea_no_na"    />
+        <result property="minimumStandard"    column="minimum_standard"    />
+        <result property="goodPractices"    column="good_practices"    />
+        <result property="starndard"    column="starndard"    />
+        <result property="completionStatus"    column="completion_status"    />
+        <result property="personInCharge"    column="person_in_charge"    />
+        <result property="reviewer"    column="reviewer"    />
+        <result property="remarks"    column="remarks"    />
+        <result property="deptId"    column="dept_id"    />
+    </resultMap>
+
+    <sql id="selectTSecSubChapVo">
+        select id, audit_id, sub_chap_id, year, type, directory, code, name, yea_no_na, minimum_standard, good_practices, starndard, completion_status, person_in_charge, reviewer, remarks, dept_id from t_sec_sub_chap
+    </sql>
+
+    <select id="selectTSecSubChapList" parameterType="TSecSubChap" resultMap="TSecSubChapResult">
+        <include refid="selectTSecSubChapVo"/>
+        <where>  
+            <if test="auditId != null "> and audit_id = #{auditId}</if>
+            <if test="subChapId != null "> and sub_chap_id = #{subChapId}</if>
+            <if test="year != null  and year != ''"> and year = #{year}</if>
+            <if test="type != null  and type != ''"> and type = #{type}</if>
+            <if test="directory != null  and directory != ''"> and directory = #{directory}</if>
+            <if test="code != null "> and code = #{code}</if>
+            <if test="name != null  and name != ''"> and name like concat('%', #{name}, '%')</if>
+            <if test="yeaNoNa != null  and yeaNoNa != ''"> and yea_no_na = #{yeaNoNa}</if>
+            <if test="minimumStandard != null  and minimumStandard != ''"> and minimum_standard = #{minimumStandard}</if>
+            <if test="goodPractices != null  and goodPractices != ''"> and good_practices = #{goodPractices}</if>
+            <if test="starndard != null  and starndard != ''"> and starndard = #{starndard}</if>
+            <if test="completionStatus != null  and completionStatus != ''"> and completion_status = #{completionStatus}</if>
+            <if test="personInCharge != null "> and person_in_charge = #{personInCharge}</if>
+            <if test="reviewer != null "> and reviewer = #{reviewer}</if>
+            <if test="remarks != null  and remarks != ''"> and remarks = #{remarks}</if>
+            <if test="deptId != null "> and dept_id = #{deptId}</if>
+        </where>
+    </select>
+    
+    <select id="selectTSecSubChapById" parameterType="Long" resultMap="TSecSubChapResult">
+        <include refid="selectTSecSubChapVo"/>
+        where id = #{id}
+    </select>
+
+    <insert id="insertTSecSubChap" parameterType="TSecSubChap" useGeneratedKeys="true" keyProperty="id">
+        insert into t_sec_sub_chap
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="auditId != null">audit_id,</if>
+            <if test="subChapId != null">sub_chap_id,</if>
+            <if test="year != null">year,</if>
+            <if test="type != null">type,</if>
+            <if test="directory != null">directory,</if>
+            <if test="code != null">code,</if>
+            <if test="name != null">name,</if>
+            <if test="yeaNoNa != null">yea_no_na,</if>
+            <if test="minimumStandard != null">minimum_standard,</if>
+            <if test="goodPractices != null">good_practices,</if>
+            <if test="starndard != null">starndard,</if>
+            <if test="completionStatus != null">completion_status,</if>
+            <if test="personInCharge != null">person_in_charge,</if>
+            <if test="reviewer != null">reviewer,</if>
+            <if test="remarks != null">remarks,</if>
+            <if test="deptId != null">dept_id,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="auditId != null">#{auditId},</if>
+            <if test="subChapId != null">#{subChapId},</if>
+            <if test="year != null">#{year},</if>
+            <if test="type != null">#{type},</if>
+            <if test="directory != null">#{directory},</if>
+            <if test="code != null">#{code},</if>
+            <if test="name != null">#{name},</if>
+            <if test="yeaNoNa != null">#{yeaNoNa},</if>
+            <if test="minimumStandard != null">#{minimumStandard},</if>
+            <if test="goodPractices != null">#{goodPractices},</if>
+            <if test="starndard != null">#{starndard},</if>
+            <if test="completionStatus != null">#{completionStatus},</if>
+            <if test="personInCharge != null">#{personInCharge},</if>
+            <if test="reviewer != null">#{reviewer},</if>
+            <if test="remarks != null">#{remarks},</if>
+            <if test="deptId != null">#{deptId},</if>
+         </trim>
+    </insert>
+
+    <update id="updateTSecSubChap" parameterType="TSecSubChap">
+        update t_sec_sub_chap
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="auditId != null">audit_id = #{auditId},</if>
+            <if test="subChapId != null">sub_chap_id = #{subChapId},</if>
+            <if test="year != null">year = #{year},</if>
+            <if test="type != null">type = #{type},</if>
+            <if test="directory != null">directory = #{directory},</if>
+            <if test="code != null">code = #{code},</if>
+            <if test="name != null">name = #{name},</if>
+            <if test="yeaNoNa != null">yea_no_na = #{yeaNoNa},</if>
+            <if test="minimumStandard != null">minimum_standard = #{minimumStandard},</if>
+            <if test="goodPractices != null">good_practices = #{goodPractices},</if>
+            <if test="starndard != null">starndard = #{starndard},</if>
+            <if test="completionStatus != null">completion_status = #{completionStatus},</if>
+            <if test="personInCharge != null">person_in_charge = #{personInCharge},</if>
+            <if test="reviewer != null">reviewer = #{reviewer},</if>
+            <if test="remarks != null">remarks = #{remarks},</if>
+            <if test="deptId != null">dept_id = #{deptId},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteTSecSubChapById" parameterType="Long">
+        delete from t_sec_sub_chap where id = #{id}
+    </delete>
+
+    <delete id="deleteTSecSubChapByIds" parameterType="String">
+        delete from t_sec_sub_chap where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 71 - 0
rc/src/main/resources/mapper/rc/TSubChapMapper.xml

@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.rc.mapper.TSubChapMapper">
+    
+    <resultMap type="TSubChap" id="TSubChapResult">
+        <result property="id"    column="id"    />
+        <result property="auditId"    column="audit_id"    />
+        <result property="chapId"    column="chap_id"    />
+        <result property="name"    column="name"    />
+        <result property="deptId"    column="dept_id"    />
+    </resultMap>
+
+    <sql id="selectTSubChapVo">
+        select id, audit_id, chap_id, name, dept_id from t_sub_chap
+    </sql>
+
+    <select id="selectTSubChapList" parameterType="TSubChap" resultMap="TSubChapResult">
+        <include refid="selectTSubChapVo"/>
+        <where>  
+            <if test="auditId != null "> and audit_id = #{auditId}</if>
+            <if test="chapId != null "> and chap_id = #{chapId}</if>
+            <if test="name != null  and name != ''"> and name like concat('%', #{name}, '%')</if>
+            <if test="deptId != null "> and dept_id = #{deptId}</if>
+        </where>
+    </select>
+    
+    <select id="selectTSubChapById" parameterType="Long" resultMap="TSubChapResult">
+        <include refid="selectTSubChapVo"/>
+        where id = #{id}
+    </select>
+
+    <insert id="insertTSubChap" parameterType="TSubChap" useGeneratedKeys="true" keyProperty="id">
+        insert into t_sub_chap
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="auditId != null">audit_id,</if>
+            <if test="chapId != null">chap_id,</if>
+            <if test="name != null">name,</if>
+            <if test="deptId != null">dept_id,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="auditId != null">#{auditId},</if>
+            <if test="chapId != null">#{chapId},</if>
+            <if test="name != null">#{name},</if>
+            <if test="deptId != null">#{deptId},</if>
+         </trim>
+    </insert>
+
+    <update id="updateTSubChap" parameterType="TSubChap">
+        update t_sub_chap
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="auditId != null">audit_id = #{auditId},</if>
+            <if test="chapId != null">chap_id = #{chapId},</if>
+            <if test="name != null">name = #{name},</if>
+            <if test="deptId != null">dept_id = #{deptId},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteTSubChapById" parameterType="Long">
+        delete from t_sub_chap where id = #{id}
+    </delete>
+
+    <delete id="deleteTSubChapByIds" parameterType="String">
+        delete from t_sub_chap where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 6 - 0
ruoyi-admin/pom.xml

@@ -62,6 +62,12 @@
             <artifactId>ruoyi-generator</artifactId>
         </dependency>
 
+        <!-- RC -->
+        <dependency>
+            <groupId>com.ruoyi</groupId>
+            <artifactId>rc</artifactId>
+        </dependency>
+
     </dependencies>
 
     <build>

+ 109 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/rc/TAuditController.java

@@ -0,0 +1,109 @@
+package com.ruoyi.web.controller.rc;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+
+import com.ruoyi.common.utils.StringUtils;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.rc.domain.TAudit;
+import com.ruoyi.rc.service.ITAuditService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 审计记录Controller
+ * 
+ * @author ruoyi
+ * @date 2024-07-19
+ */
+@RestController
+@RequestMapping("/rc/audit")
+public class TAuditController extends BaseController
+{
+    @Autowired
+    private ITAuditService tAuditService;
+
+    /**
+     * 查询审计记录列表
+     */
+    @PreAuthorize("@ss.hasPermi('rc:audit:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TAudit tAudit)
+    {
+        startPage();
+        List<TAudit> list = tAuditService.selectTAuditList(tAudit);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出审计记录列表
+     */
+    @PreAuthorize("@ss.hasPermi('rc:audit:export')")
+    @Log(title = "审计记录", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TAudit tAudit)
+    {
+        List<TAudit> list = tAuditService.selectTAuditList(tAudit);
+        ExcelUtil<TAudit> util = new ExcelUtil<TAudit>(TAudit.class);
+        util.exportExcel(response, list, "审计记录数据");
+    }
+
+    /**
+     * 获取审计记录详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('rc:audit:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(tAuditService.selectTAuditById(id));
+    }
+
+    /**
+     * 新增审计记录
+     */
+    @PreAuthorize("@ss.hasPermi('rc:audit:add')")
+    @Log(title = "审计记录", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TAudit tAudit)
+    {
+        if (StringUtils.isNull(tAudit.getDeptId())) {
+            tAudit.setDeptId(getLoginUser().getDeptId());
+        }
+        return toAjax(tAuditService.insertTAudit(tAudit));
+    }
+
+    /**
+     * 修改审计记录
+     */
+    @PreAuthorize("@ss.hasPermi('rc:audit:edit')")
+    @Log(title = "审计记录", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TAudit tAudit)
+    {
+        return toAjax(tAuditService.updateTAudit(tAudit));
+    }
+
+    /**
+     * 删除审计记录
+     */
+    @PreAuthorize("@ss.hasPermi('rc:audit:remove')")
+    @Log(title = "审计记录", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(tAuditService.deleteTAuditByIds(ids));
+    }
+}

+ 105 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/rc/TChapController.java

@@ -0,0 +1,105 @@
+package com.ruoyi.web.controller.rc;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.rc.domain.TChap;
+import com.ruoyi.rc.service.ITChapService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 问卷章节Controller
+ * 
+ * @author ruoyi
+ * @date 2024-07-19
+ */
+@RestController
+@RequestMapping("/rc/chap")
+public class TChapController extends BaseController
+{
+    @Autowired
+    private ITChapService tChapService;
+
+    /**
+     * 查询问卷章节列表
+     */
+    @PreAuthorize("@ss.hasPermi('rc:chap:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TChap tChap)
+    {
+        startPage();
+        List<TChap> list = tChapService.selectTChapList(tChap);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出问卷章节列表
+     */
+    @PreAuthorize("@ss.hasPermi('rc:chap:export')")
+    @Log(title = "问卷章节", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TChap tChap)
+    {
+        List<TChap> list = tChapService.selectTChapList(tChap);
+        ExcelUtil<TChap> util = new ExcelUtil<TChap>(TChap.class);
+        util.exportExcel(response, list, "问卷章节数据");
+    }
+
+    /**
+     * 获取问卷章节详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('rc:chap:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(tChapService.selectTChapById(id));
+    }
+
+    /**
+     * 新增问卷章节
+     */
+    @PreAuthorize("@ss.hasPermi('rc:chap:add')")
+    @Log(title = "问卷章节", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TChap tChap)
+    {
+        tChap.setDeptId(getLoginUser().getDeptId());
+        return toAjax(tChapService.insertTChap(tChap));
+    }
+
+    /**
+     * 修改问卷章节
+     */
+    @PreAuthorize("@ss.hasPermi('rc:chap:edit')")
+    @Log(title = "问卷章节", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TChap tChap)
+    {
+        return toAjax(tChapService.updateTChap(tChap));
+    }
+
+    /**
+     * 删除问卷章节
+     */
+    @PreAuthorize("@ss.hasPermi('rc:chap:remove')")
+    @Log(title = "问卷章节", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(tChapService.deleteTChapByIds(ids));
+    }
+}

+ 108 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/rc/TDeptInfoController.java

@@ -0,0 +1,108 @@
+package com.ruoyi.web.controller.rc;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.rc.domain.TDeptInfo;
+import com.ruoyi.rc.service.ITDeptInfoService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.utils.StringUtils;
+
+/**
+ * 装置信息Controller
+ * 
+ * @author ruoyi
+ * @date 2024-07-19
+ */
+@RestController
+@RequestMapping("/rc/deptinfo")
+public class TDeptInfoController extends BaseController
+{
+    @Autowired
+    private ITDeptInfoService tDeptInfoService;
+
+    /**
+     * 查询装置信息列表
+     */
+    @PreAuthorize("@ss.hasPermi('rc:deptinfo:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TDeptInfo tDeptInfo)
+    {
+        startPage();
+        List<TDeptInfo> list = tDeptInfoService.selectTDeptInfoList(tDeptInfo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出装置信息列表
+     */
+    @PreAuthorize("@ss.hasPermi('rc:deptinfo:export')")
+    @Log(title = "装置信息", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TDeptInfo tDeptInfo)
+    {
+        List<TDeptInfo> list = tDeptInfoService.selectTDeptInfoList(tDeptInfo);
+        ExcelUtil<TDeptInfo> util = new ExcelUtil<TDeptInfo>(TDeptInfo.class);
+        util.exportExcel(response, list, "装置信息数据");
+    }
+
+    /**
+     * 获取装置信息详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('rc:deptinfo:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(tDeptInfoService.selectTDeptInfoById(id));
+    }
+
+    /**
+     * 新增装置信息
+     */
+    @PreAuthorize("@ss.hasPermi('rc:deptinfo:add')")
+    @Log(title = "装置信息", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TDeptInfo tDeptInfo)
+    {
+        if (StringUtils.isNull(tDeptInfo.getDeptId())) {
+            tDeptInfo.setDeptId(getLoginUser().getDeptId());
+        }
+        return toAjax(tDeptInfoService.insertTDeptInfo(tDeptInfo));
+    }
+
+    /**
+     * 修改装置信息
+     */
+    @PreAuthorize("@ss.hasPermi('rc:deptinfo:edit')")
+    @Log(title = "装置信息", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TDeptInfo tDeptInfo)
+    {
+        return toAjax(tDeptInfoService.updateTDeptInfo(tDeptInfo));
+    }
+
+    /**
+     * 删除装置信息
+     */
+    @PreAuthorize("@ss.hasPermi('rc:deptinfo:remove')")
+    @Log(title = "装置信息", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(tDeptInfoService.deleteTDeptInfoByIds(ids));
+    }
+}

+ 105 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/rc/TMeetingController.java

@@ -0,0 +1,105 @@
+package com.ruoyi.web.controller.rc;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.rc.domain.TMeeting;
+import com.ruoyi.rc.service.ITMeetingService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 会议Controller
+ * 
+ * @author ruoyi
+ * @date 2024-07-19
+ */
+@RestController
+@RequestMapping("/rc/meeting")
+public class TMeetingController extends BaseController
+{
+    @Autowired
+    private ITMeetingService tMeetingService;
+
+    /**
+     * 查询会议列表
+     */
+    @PreAuthorize("@ss.hasPermi('rc:meeting:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TMeeting tMeeting)
+    {
+        startPage();
+        List<TMeeting> list = tMeetingService.selectTMeetingList(tMeeting);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出会议列表
+     */
+    @PreAuthorize("@ss.hasPermi('rc:meeting:export')")
+    @Log(title = "会议", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TMeeting tMeeting)
+    {
+        List<TMeeting> list = tMeetingService.selectTMeetingList(tMeeting);
+        ExcelUtil<TMeeting> util = new ExcelUtil<TMeeting>(TMeeting.class);
+        util.exportExcel(response, list, "会议数据");
+    }
+
+    /**
+     * 获取会议详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('rc:meeting:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(tMeetingService.selectTMeetingById(id));
+    }
+
+    /**
+     * 新增会议
+     */
+    @PreAuthorize("@ss.hasPermi('rc:meeting:add')")
+    @Log(title = "会议", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TMeeting tMeeting)
+    {
+        tMeeting.setDeptId(getLoginUser().getDeptId());
+        return toAjax(tMeetingService.insertTMeeting(tMeeting));
+    }
+
+    /**
+     * 修改会议
+     */
+    @PreAuthorize("@ss.hasPermi('rc:meeting:edit')")
+    @Log(title = "会议", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TMeeting tMeeting)
+    {
+        return toAjax(tMeetingService.updateTMeeting(tMeeting));
+    }
+
+    /**
+     * 删除会议
+     */
+    @PreAuthorize("@ss.hasPermi('rc:meeting:remove')")
+    @Log(title = "会议", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(tMeetingService.deleteTMeetingByIds(ids));
+    }
+}

+ 105 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/rc/TOpenItemController.java

@@ -0,0 +1,105 @@
+package com.ruoyi.web.controller.rc;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.rc.domain.TOpenItem;
+import com.ruoyi.rc.service.ITOpenItemService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 开项Controller
+ * 
+ * @author ruoyi
+ * @date 2024-07-19
+ */
+@RestController
+@RequestMapping("/rc/openitem")
+public class TOpenItemController extends BaseController
+{
+    @Autowired
+    private ITOpenItemService tOpenItemService;
+
+    /**
+     * 查询开项列表
+     */
+    @PreAuthorize("@ss.hasPermi('rc:openitem:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TOpenItem tOpenItem)
+    {
+        startPage();
+        List<TOpenItem> list = tOpenItemService.selectTOpenItemList(tOpenItem);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出开项列表
+     */
+    @PreAuthorize("@ss.hasPermi('rc:openitem:export')")
+    @Log(title = "开项", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TOpenItem tOpenItem)
+    {
+        List<TOpenItem> list = tOpenItemService.selectTOpenItemList(tOpenItem);
+        ExcelUtil<TOpenItem> util = new ExcelUtil<TOpenItem>(TOpenItem.class);
+        util.exportExcel(response, list, "开项数据");
+    }
+
+    /**
+     * 获取开项详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('rc:openitem:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(tOpenItemService.selectTOpenItemById(id));
+    }
+
+    /**
+     * 新增开项
+     */
+    @PreAuthorize("@ss.hasPermi('rc:openitem:add')")
+    @Log(title = "开项", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TOpenItem tOpenItem)
+    {
+        tOpenItem.setDeptId(getLoginUser().getDeptId());
+        return toAjax(tOpenItemService.insertTOpenItem(tOpenItem));
+    }
+
+    /**
+     * 修改开项
+     */
+    @PreAuthorize("@ss.hasPermi('rc:openitem:edit')")
+    @Log(title = "开项", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TOpenItem tOpenItem)
+    {
+        return toAjax(tOpenItemService.updateTOpenItem(tOpenItem));
+    }
+
+    /**
+     * 删除开项
+     */
+    @PreAuthorize("@ss.hasPermi('rc:openitem:remove')")
+    @Log(title = "开项", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(tOpenItemService.deleteTOpenItemByIds(ids));
+    }
+}

+ 105 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/rc/TProgressController.java

@@ -0,0 +1,105 @@
+package com.ruoyi.web.controller.rc;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.rc.domain.TProgress;
+import com.ruoyi.rc.service.ITProgressService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 进度Controller
+ * 
+ * @author ruoyi
+ * @date 2024-07-19
+ */
+@RestController
+@RequestMapping("/rc/progress")
+public class TProgressController extends BaseController
+{
+    @Autowired
+    private ITProgressService tProgressService;
+
+    /**
+     * 查询进度列表
+     */
+    @PreAuthorize("@ss.hasPermi('rc:progress:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TProgress tProgress)
+    {
+        startPage();
+        List<TProgress> list = tProgressService.selectTProgressList(tProgress);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出进度列表
+     */
+    @PreAuthorize("@ss.hasPermi('rc:progress:export')")
+    @Log(title = "进度", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TProgress tProgress)
+    {
+        List<TProgress> list = tProgressService.selectTProgressList(tProgress);
+        ExcelUtil<TProgress> util = new ExcelUtil<TProgress>(TProgress.class);
+        util.exportExcel(response, list, "进度数据");
+    }
+
+    /**
+     * 获取进度详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('rc:progress:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(tProgressService.selectTProgressById(id));
+    }
+
+    /**
+     * 新增进度
+     */
+    @PreAuthorize("@ss.hasPermi('rc:progress:add')")
+    @Log(title = "进度", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TProgress tProgress)
+    {
+        tProgress.setDeptId(getLoginUser().getDeptId());
+        return toAjax(tProgressService.insertTProgress(tProgress));
+    }
+
+    /**
+     * 修改进度
+     */
+    @PreAuthorize("@ss.hasPermi('rc:progress:edit')")
+    @Log(title = "进度", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TProgress tProgress)
+    {
+        return toAjax(tProgressService.updateTProgress(tProgress));
+    }
+
+    /**
+     * 删除进度
+     */
+    @PreAuthorize("@ss.hasPermi('rc:progress:remove')")
+    @Log(title = "进度", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(tProgressService.deleteTProgressByIds(ids));
+    }
+}

+ 105 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/rc/TSecSubChapController.java

@@ -0,0 +1,105 @@
+package com.ruoyi.web.controller.rc;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.rc.domain.TSecSubChap;
+import com.ruoyi.rc.service.ITSecSubChapService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 问卷二级细分章节Controller
+ * 
+ * @author ruoyi
+ * @date 2024-07-19
+ */
+@RestController
+@RequestMapping("/rc/secsubchap")
+public class TSecSubChapController extends BaseController
+{
+    @Autowired
+    private ITSecSubChapService tSecSubChapService;
+
+    /**
+     * 查询问卷二级细分章节列表
+     */
+    @PreAuthorize("@ss.hasPermi('rc:secsubchap:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TSecSubChap tSecSubChap)
+    {
+        startPage();
+        List<TSecSubChap> list = tSecSubChapService.selectTSecSubChapList(tSecSubChap);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出问卷二级细分章节列表
+     */
+    @PreAuthorize("@ss.hasPermi('rc:secsubchap:export')")
+    @Log(title = "问卷二级细分章节", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TSecSubChap tSecSubChap)
+    {
+        List<TSecSubChap> list = tSecSubChapService.selectTSecSubChapList(tSecSubChap);
+        ExcelUtil<TSecSubChap> util = new ExcelUtil<TSecSubChap>(TSecSubChap.class);
+        util.exportExcel(response, list, "问卷二级细分章节数据");
+    }
+
+    /**
+     * 获取问卷二级细分章节详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('rc:secsubchap:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(tSecSubChapService.selectTSecSubChapById(id));
+    }
+
+    /**
+     * 新增问卷二级细分章节
+     */
+    @PreAuthorize("@ss.hasPermi('rc:secsubchap:add')")
+    @Log(title = "问卷二级细分章节", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TSecSubChap tSecSubChap)
+    {
+        tSecSubChap.setDeptId(getLoginUser().getDeptId());
+        return toAjax(tSecSubChapService.insertTSecSubChap(tSecSubChap));
+    }
+
+    /**
+     * 修改问卷二级细分章节
+     */
+    @PreAuthorize("@ss.hasPermi('rc:secsubchap:edit')")
+    @Log(title = "问卷二级细分章节", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TSecSubChap tSecSubChap)
+    {
+        return toAjax(tSecSubChapService.updateTSecSubChap(tSecSubChap));
+    }
+
+    /**
+     * 删除问卷二级细分章节
+     */
+    @PreAuthorize("@ss.hasPermi('rc:secsubchap:remove')")
+    @Log(title = "问卷二级细分章节", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(tSecSubChapService.deleteTSecSubChapByIds(ids));
+    }
+}

+ 105 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/rc/TSubChapController.java

@@ -0,0 +1,105 @@
+package com.ruoyi.web.controller.rc;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.rc.domain.TSubChap;
+import com.ruoyi.rc.service.ITSubChapService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 问卷细分章节Controller
+ * 
+ * @author ruoyi
+ * @date 2024-07-19
+ */
+@RestController
+@RequestMapping("/rc/subchap")
+public class TSubChapController extends BaseController
+{
+    @Autowired
+    private ITSubChapService tSubChapService;
+
+    /**
+     * 查询问卷细分章节列表
+     */
+    @PreAuthorize("@ss.hasPermi('rc:subchap:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TSubChap tSubChap)
+    {
+        startPage();
+        List<TSubChap> list = tSubChapService.selectTSubChapList(tSubChap);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出问卷细分章节列表
+     */
+    @PreAuthorize("@ss.hasPermi('rc:subchap:export')")
+    @Log(title = "问卷细分章节", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TSubChap tSubChap)
+    {
+        List<TSubChap> list = tSubChapService.selectTSubChapList(tSubChap);
+        ExcelUtil<TSubChap> util = new ExcelUtil<TSubChap>(TSubChap.class);
+        util.exportExcel(response, list, "问卷细分章节数据");
+    }
+
+    /**
+     * 获取问卷细分章节详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('rc:subchap:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(tSubChapService.selectTSubChapById(id));
+    }
+
+    /**
+     * 新增问卷细分章节
+     */
+    @PreAuthorize("@ss.hasPermi('rc:subchap:add')")
+    @Log(title = "问卷细分章节", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TSubChap tSubChap)
+    {
+        tSubChap.setDeptId(getLoginUser().getDeptId());
+        return toAjax(tSubChapService.insertTSubChap(tSubChap));
+    }
+
+    /**
+     * 修改问卷细分章节
+     */
+    @PreAuthorize("@ss.hasPermi('rc:subchap:edit')")
+    @Log(title = "问卷细分章节", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TSubChap tSubChap)
+    {
+        return toAjax(tSubChapService.updateTSubChap(tSubChap));
+    }
+
+    /**
+     * 删除问卷细分章节
+     */
+    @PreAuthorize("@ss.hasPermi('rc:subchap:remove')")
+    @Log(title = "问卷细分章节", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(tSubChapService.deleteTSubChapByIds(ids));
+    }
+}

+ 1 - 1
ruoyi-admin/src/main/resources/application-druid.yml

@@ -6,7 +6,7 @@ spring:
         druid:
             # 主库数据源
             master:
-                url: jdbc:mysql://localhost:3306/ry_vue
+                url: jdbc:mysql://localhost:3306/rcaudit
                 username: root
                 password: root
             # 从库数据源

+ 1 - 1
ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java

@@ -64,7 +64,7 @@ public class SysLoginService
     public String login(String username, String password, String code, String uuid)
     {
         // 验证码校验
-        validateCaptcha(username, code, uuid);
+//        validateCaptcha(username, code, uuid);
         // 登录前置校验
         loginPreCheck(username, password);
         // 用户验证

+ 1 - 1
ruoyi-generator/src/main/resources/generator.yml

@@ -3,7 +3,7 @@ gen:
   # 作者
   author: ruoyi
   # 默认生成包路径 system 需改成自己的模块名称 如 system monitor tool
-  packageName: com.ruoyi.system
+  packageName: com.ruoyi.rc
   # 自动去除表前缀,默认是false
   autoRemovePre: false
   # 表前缀(生成类名不会包含表前缀,多个用逗号分隔)

+ 1 - 1
ruoyi-generator/src/main/resources/mapper/generator/GenTableMapper.xml

@@ -80,7 +80,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		select table_name, table_comment, create_time, update_time from information_schema.tables
 		where table_schema = (select database())
 		AND table_name NOT LIKE 'qrtz\_%' AND table_name NOT LIKE 'gen\_%'
-		AND table_name NOT IN (select table_name from gen_table)
+		AND table_name NOT IN (select CONVERT(table_name USING utf8) COLLATE utf8_unicode_ci from gen_table)
 		<if test="tableName != null and tableName != ''">
 			AND lower(table_name) like lower(concat('%', #{tableName}, '%'))
 		</if>

+ 4 - 0
ruoyi-generator/src/main/resources/vm/java/controller.java.vm

@@ -23,6 +23,7 @@ import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.common.core.page.TableDataInfo;
 #elseif($table.tree)
 #end
+import com.ruoyi.common.utils.StringUtils;
 
 /**
  * ${functionName}Controller
@@ -88,6 +89,9 @@ public class ${ClassName}Controller extends BaseController
     @PostMapping
     public AjaxResult add(@RequestBody ${ClassName} ${className})
     {
+        if (StringUtils.isNull(${className}.getDeptId())) {
+            ${className}.setDeptId(getLoginUser().getDeptId());
+        }
         return toAjax(${className}Service.insert${ClassName}(${className}));
     }
 

+ 1 - 1
ruoyi-generator/src/main/resources/vm/vue/index.vue.vm

@@ -113,7 +113,7 @@
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
 
-    <el-table v-loading="loading" :data="${businessName}List" @selection-change="handleSelectionChange">
+    <el-table border v-loading="loading" :data="${businessName}List" @selection-change="handleSelectionChange">
       <el-table-column type="selection" width="55" align="center" />
 #foreach($column in $columns)
 #set($javaField=$column.javaField)

+ 6 - 0
ruoyi-system/pom.xml

@@ -23,6 +23,12 @@
             <artifactId>ruoyi-common</artifactId>
         </dependency>
 
+        <!-- RC -->
+        <dependency>
+            <groupId>com.ruoyi</groupId>
+            <artifactId>rc</artifactId>
+        </dependency>
+
     </dependencies>
 
 </project>

+ 1 - 1
ruoyi-ui/.env.development

@@ -1,5 +1,5 @@
 # 页面标题
-VUE_APP_TITLE = 若依管理系统
+VUE_APP_TITLE = RC审计系统
 
 # 开发环境配置
 ENV = 'development'

+ 1 - 1
ruoyi-ui/.env.production

@@ -1,5 +1,5 @@
 # 页面标题
-VUE_APP_TITLE = 若依管理系统
+VUE_APP_TITLE = RC审计系统
 
 # 生产环境配置
 ENV = 'production'

+ 1 - 1
ruoyi-ui/.env.staging

@@ -1,5 +1,5 @@
 # 页面标题
-VUE_APP_TITLE = 若依管理系统
+VUE_APP_TITLE = RC审计系统
 
 NODE_ENV = production
 

+ 44 - 0
ruoyi-ui/src/api/rc/audit.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询审计记录列表
+export function listAudit(query) {
+  return request({
+    url: '/rc/audit/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询审计记录详细
+export function getAudit(id) {
+  return request({
+    url: '/rc/audit/' + id,
+    method: 'get'
+  })
+}
+
+// 新增审计记录
+export function addAudit(data) {
+  return request({
+    url: '/rc/audit',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改审计记录
+export function updateAudit(data) {
+  return request({
+    url: '/rc/audit',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除审计记录
+export function delAudit(id) {
+  return request({
+    url: '/rc/audit/' + id,
+    method: 'delete'
+  })
+}

+ 44 - 0
ruoyi-ui/src/api/rc/chap.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询问卷章节列表
+export function listChap(query) {
+  return request({
+    url: '/rc/chap/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询问卷章节详细
+export function getChap(id) {
+  return request({
+    url: '/rc/chap/' + id,
+    method: 'get'
+  })
+}
+
+// 新增问卷章节
+export function addChap(data) {
+  return request({
+    url: '/rc/chap',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改问卷章节
+export function updateChap(data) {
+  return request({
+    url: '/rc/chap',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除问卷章节
+export function delChap(id) {
+  return request({
+    url: '/rc/chap/' + id,
+    method: 'delete'
+  })
+}

+ 44 - 0
ruoyi-ui/src/api/rc/deptinfo.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询装置信息列表
+export function listDeptinfo(query) {
+  return request({
+    url: '/rc/deptinfo/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询装置信息详细
+export function getDeptinfo(id) {
+  return request({
+    url: '/rc/deptinfo/' + id,
+    method: 'get'
+  })
+}
+
+// 新增装置信息
+export function addDeptinfo(data) {
+  return request({
+    url: '/rc/deptinfo',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改装置信息
+export function updateDeptinfo(data) {
+  return request({
+    url: '/rc/deptinfo',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除装置信息
+export function delDeptinfo(id) {
+  return request({
+    url: '/rc/deptinfo/' + id,
+    method: 'delete'
+  })
+}

+ 44 - 0
ruoyi-ui/src/api/rc/meeting.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询会议列表
+export function listMeeting(query) {
+  return request({
+    url: '/rc/meeting/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询会议详细
+export function getMeeting(id) {
+  return request({
+    url: '/rc/meeting/' + id,
+    method: 'get'
+  })
+}
+
+// 新增会议
+export function addMeeting(data) {
+  return request({
+    url: '/rc/meeting',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改会议
+export function updateMeeting(data) {
+  return request({
+    url: '/rc/meeting',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除会议
+export function delMeeting(id) {
+  return request({
+    url: '/rc/meeting/' + id,
+    method: 'delete'
+  })
+}

+ 44 - 0
ruoyi-ui/src/api/rc/openitem.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询开项列表
+export function listOpenitem(query) {
+  return request({
+    url: '/rc/openitem/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询开项详细
+export function getOpenitem(id) {
+  return request({
+    url: '/rc/openitem/' + id,
+    method: 'get'
+  })
+}
+
+// 新增开项
+export function addOpenitem(data) {
+  return request({
+    url: '/rc/openitem',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改开项
+export function updateOpenitem(data) {
+  return request({
+    url: '/rc/openitem',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除开项
+export function delOpenitem(id) {
+  return request({
+    url: '/rc/openitem/' + id,
+    method: 'delete'
+  })
+}

+ 44 - 0
ruoyi-ui/src/api/rc/progress.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询进度列表
+export function listProgress(query) {
+  return request({
+    url: '/rc/progress/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询进度详细
+export function getProgress(id) {
+  return request({
+    url: '/rc/progress/' + id,
+    method: 'get'
+  })
+}
+
+// 新增进度
+export function addProgress(data) {
+  return request({
+    url: '/rc/progress',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改进度
+export function updateProgress(data) {
+  return request({
+    url: '/rc/progress',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除进度
+export function delProgress(id) {
+  return request({
+    url: '/rc/progress/' + id,
+    method: 'delete'
+  })
+}

+ 44 - 0
ruoyi-ui/src/api/rc/secsubchap.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询问卷二级细分章节列表
+export function listSecsubchap(query) {
+  return request({
+    url: '/rc/secsubchap/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询问卷二级细分章节详细
+export function getSecsubchap(id) {
+  return request({
+    url: '/rc/secsubchap/' + id,
+    method: 'get'
+  })
+}
+
+// 新增问卷二级细分章节
+export function addSecsubchap(data) {
+  return request({
+    url: '/rc/secsubchap',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改问卷二级细分章节
+export function updateSecsubchap(data) {
+  return request({
+    url: '/rc/secsubchap',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除问卷二级细分章节
+export function delSecsubchap(id) {
+  return request({
+    url: '/rc/secsubchap/' + id,
+    method: 'delete'
+  })
+}

+ 44 - 0
ruoyi-ui/src/api/rc/subchap.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询问卷细分章节列表
+export function listSubchap(query) {
+  return request({
+    url: '/rc/subchap/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询问卷细分章节详细
+export function getSubchap(id) {
+  return request({
+    url: '/rc/subchap/' + id,
+    method: 'get'
+  })
+}
+
+// 新增问卷细分章节
+export function addSubchap(data) {
+  return request({
+    url: '/rc/subchap',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改问卷细分章节
+export function updateSubchap(data) {
+  return request({
+    url: '/rc/subchap',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除问卷细分章节
+export function delSubchap(id) {
+  return request({
+    url: '/rc/subchap/' + id,
+    method: 'delete'
+  })
+}

+ 1004 - 1003
ruoyi-ui/src/views/index.vue

@@ -1,1016 +1,1017 @@
 <template>
   <div class="app-container home">
-    <el-row :gutter="20">
-      <el-col :sm="24" :lg="24">
-        <blockquote class="text-warning" style="font-size: 14px">
-          领取阿里云通用云产品1888优惠券
-          <br />
-          <el-link
-            href="https://www.aliyun.com/minisite/goods?userCode=brki8iof"
-            type="primary"
-            target="_blank"
-            >https://www.aliyun.com/minisite/goods?userCode=brki8iof</el-link
-          >
-          <br />
-          领取腾讯云通用云产品2860优惠券
-          <br />
-          <el-link
-            href="https://cloud.tencent.com/redirect.php?redirect=1025&cps_key=198c8df2ed259157187173bc7f4f32fd&from=console"
-            type="primary"
-            target="_blank"
-            >https://cloud.tencent.com/redirect.php?redirect=1025&cps_key=198c8df2ed259157187173bc7f4f32fd&from=console</el-link
-          >
-          <br />
-          阿里云服务器折扣区
-          <el-link href="http://aly.ruoyi.vip" type="primary" target="_blank"
-            >>☛☛点我进入☚☚</el-link
-          >
-          &nbsp;&nbsp;&nbsp; 腾讯云服务器秒杀区
-          <el-link href="http://txy.ruoyi.vip" type="primary" target="_blank"
-            >>☛☛点我进入☚☚</el-link
-          ><br />
-          <h4 class="text-danger">
-            云产品通用红包,可叠加官网常规优惠使用。(仅限新用户)
-          </h4>
-        </blockquote>
+    首页开发中……
+    <!--<el-row :gutter="20">-->
+      <!--<el-col :sm="24" :lg="24">-->
+        <!--<blockquote class="text-warning" style="font-size: 14px">-->
+          <!--领取阿里云通用云产品1888优惠券-->
+          <!--<br />-->
+          <!--<el-link-->
+            <!--href="https://www.aliyun.com/minisite/goods?userCode=brki8iof"-->
+            <!--type="primary"-->
+            <!--target="_blank"-->
+            <!--&gt;https://www.aliyun.com/minisite/goods?userCode=brki8iof</el-link-->
+          <!--&gt;-->
+          <!--<br />-->
+          <!--领取腾讯云通用云产品2860优惠券-->
+          <!--<br />-->
+          <!--<el-link-->
+            <!--href="https://cloud.tencent.com/redirect.php?redirect=1025&cps_key=198c8df2ed259157187173bc7f4f32fd&from=console"-->
+            <!--type="primary"-->
+            <!--target="_blank"-->
+            <!--&gt;https://cloud.tencent.com/redirect.php?redirect=1025&cps_key=198c8df2ed259157187173bc7f4f32fd&from=console</el-link-->
+          <!--&gt;-->
+          <!--<br />-->
+          <!--阿里云服务器折扣区-->
+          <!--<el-link href="http://aly.ruoyi.vip" type="primary" target="_blank"-->
+            <!--&gt;>☛☛点我进入☚☚</el-link-->
+          <!--&gt;-->
+          <!--&nbsp;&nbsp;&nbsp; 腾讯云服务器秒杀区-->
+          <!--<el-link href="http://txy.ruoyi.vip" type="primary" target="_blank"-->
+            <!--&gt;>☛☛点我进入☚☚</el-link-->
+          <!--&gt;<br />-->
+          <!--<h4 class="text-danger">-->
+            <!--云产品通用红包,可叠加官网常规优惠使用。(仅限新用户)-->
+          <!--</h4>-->
+        <!--</blockquote>-->
 
-        <hr />
-      </el-col>
-    </el-row>
-    <el-row :gutter="20">
-      <el-col :sm="24" :lg="12" style="padding-left: 20px">
-        <h2>若依后台管理框架</h2>
-        <p>
-          一直想做一款后台管理系统,看了很多优秀的开源项目但是发现没有合适自己的。于是利用空闲休息时间开始自己写一套后台系统。如此有了若依管理系统,她可以用于所有的Web应用程序,如网站管理后台,网站会员中心,CMS,CRM,OA等等,当然,您也可以对她进行深度定制,以做出更强系统。所有前端后台代码封装过后十分精简易上手,出错概率低。同时支持移动客户端访问。系统会陆续更新一些实用功能。
-        </p>
-        <p>
-          <b>当前版本:</b> <span>v{{ version }}</span>
-        </p>
-        <p>
-          <el-tag type="danger">&yen;免费开源</el-tag>
-        </p>
-        <p>
-          <el-button
-            type="primary"
-            size="mini"
-            icon="el-icon-cloudy"
-            plain
-            @click="goTarget('https://gitee.com/y_project/RuoYi-Vue')"
-            >访问码云</el-button
-          >
-          <el-button
-            size="mini"
-            icon="el-icon-s-home"
-            plain
-            @click="goTarget('http://ruoyi.vip')"
-            >访问主页</el-button
-          >
-        </p>
-      </el-col>
+        <!--<hr />-->
+      <!--</el-col>-->
+    <!--</el-row>-->
+    <!--<el-row :gutter="20">-->
+      <!--<el-col :sm="24" :lg="12" style="padding-left: 20px">-->
+        <!--<h2>若依后台管理框架</h2>-->
+        <!--<p>-->
+          <!--一直想做一款后台管理系统,看了很多优秀的开源项目但是发现没有合适自己的。于是利用空闲休息时间开始自己写一套后台系统。如此有了若依管理系统,她可以用于所有的Web应用程序,如网站管理后台,网站会员中心,CMS,CRM,OA等等,当然,您也可以对她进行深度定制,以做出更强系统。所有前端后台代码封装过后十分精简易上手,出错概率低。同时支持移动客户端访问。系统会陆续更新一些实用功能。-->
+        <!--</p>-->
+        <!--<p>-->
+          <!--<b>当前版本:</b> <span>v{{ version }}</span>-->
+        <!--</p>-->
+        <!--<p>-->
+          <!--<el-tag type="danger">&yen;免费开源</el-tag>-->
+        <!--</p>-->
+        <!--<p>-->
+          <!--<el-button-->
+            <!--type="primary"-->
+            <!--size="mini"-->
+            <!--icon="el-icon-cloudy"-->
+            <!--plain-->
+            <!--@click="goTarget('https://gitee.com/y_project/RuoYi-Vue')"-->
+            <!--&gt;访问码云</el-button-->
+          <!--&gt;-->
+          <!--<el-button-->
+            <!--size="mini"-->
+            <!--icon="el-icon-s-home"-->
+            <!--plain-->
+            <!--@click="goTarget('http://ruoyi.vip')"-->
+            <!--&gt;访问主页</el-button-->
+          <!--&gt;-->
+        <!--</p>-->
+      <!--</el-col>-->
 
-      <el-col :sm="24" :lg="12" style="padding-left: 50px">
-        <el-row>
-          <el-col :span="12">
-            <h2>技术选型</h2>
-          </el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="6">
-            <h4>后端技术</h4>
-            <ul>
-              <li>SpringBoot</li>
-              <li>Spring Security</li>
-              <li>JWT</li>
-              <li>MyBatis</li>
-              <li>Druid</li>
-              <li>Fastjson</li>
-              <li>...</li>
-            </ul>
-          </el-col>
-          <el-col :span="6">
-            <h4>前端技术</h4>
-            <ul>
-              <li>Vue</li>
-              <li>Vuex</li>
-              <li>Element-ui</li>
-              <li>Axios</li>
-              <li>Sass</li>
-              <li>Quill</li>
-              <li>...</li>
-            </ul>
-          </el-col>
-        </el-row>
-      </el-col>
-    </el-row>
-    <el-divider />
-    <el-row :gutter="20">
-      <el-col :xs="24" :sm="24" :md="12" :lg="8">
-        <el-card class="update-log">
-          <div slot="header" class="clearfix">
-            <span>联系信息</span>
-          </div>
-          <div class="body">
-            <p>
-              <i class="el-icon-s-promotion"></i> 官网:<el-link
-                href="http://www.ruoyi.vip"
-                target="_blank"
-                >http://www.ruoyi.vip</el-link
-              >
-            </p>
-            <p>
-              <i class="el-icon-user-solid"></i> QQ群:<s> 满937441 </s> <s> 满887144332 </s>
-              <s> 满180251782 </s> <s> 满104180207 </s> <s> 满186866453 </s> <s> 满201396349 </s>
-              <s> 满101456076 </s> <s> 满101539465 </s> <s> 满264312783 </s> <s> 满167385320 </s> 
-              <s> 满104748341 </s> <s> 满160110482 </s> <s> 满170801498 </s> <s> 满108482800 </s> 
-              <s> 满101046199 </s> <s> 满136919097 </s> <s> 满143961921 </s> <s> 满174951577 </s> 
-              <s> 满161281055 </s> <s> 满138988063 </s> <a href="http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=SUc-msaypcqB2UTFif4eqGlBHkKcvMNP&authKey=JdQBouY2PG%2BS%2BCzAfIgbCGNgxyahpfh24IW%2F03rPxGilhqVbisLma%2FFFnt79DHNh&noverify=0&group_code=151450850" target="_blank">151450850</a>
-            </p>
-            <p>
-              <i class="el-icon-chat-dot-round"></i> 微信:<a
-                href="javascript:;"
-                >/ *若依</a
-              >
-            </p>
-            <p>
-              <i class="el-icon-money"></i> 支付宝:<a
-                href="javascript:;"
-                class="支付宝信息"
-                >/ *若依</a
-              >
-            </p>
-          </div>
-        </el-card>
-      </el-col>
-      <el-col :xs="24" :sm="24" :md="12" :lg="8">
-        <el-card class="update-log">
-          <div slot="header" class="clearfix">
-            <span>更新日志</span>
-          </div>
-          <el-collapse accordion>
-            <el-collapse-item title="v3.8.8 - 2024-06-30">
-              <ol>
-                <li>菜单管理新增路由名称</li>
-                <li>新增数据脱敏过滤注解</li>
-                <li>用户密码新增非法字符验证</li>
-                <li>限制用户操作数据权限范围</li>
-                <li>代码生成新增创建表结构功能</li>
-                <li>定时任务白名单配置范围缩小</li>
-                <li>优化代码生成主子表关联查询方式</li>
-                <li>Excel注解新增属性comboReadDict</li>
-                <li>Excel注解ColumnType类型新增文本</li>
-                <li>新增国际化资源文件配置</li>
-                <li>升级oshi到最新版本6.6.1</li>
-                <li>升级druid到最新版本1.2.23</li>
-                <li>升级core-js到最新版本3.37.1</li>
-                <li>更新HttpUtils中的User-Agent</li>
-                <li>更新compressionPlugin到6.1.2以兼容node18+</li>
-                <li>升级spring-security到安全版本,防止漏洞风险</li>
-                <li>升级spring-framework到安全版本,防止漏洞风险</li>
-                <li>优化自定义XSS注解匹配方式</li>
-                <li>优化缓存监控键名列表排序显示</li>
-                <li>优化定时任务日志默认按时间排序</li>
-                <li>优化默认文件大小超过2G无效的问题</li>
-                <li>优化查表特殊字符使用反斜杠进行转义</li>
-                <li>优化定时任务cron表达式小时配置显示错误问题</li>
-                <li>优化多个自定数据权限使用in查询,避免多次拼接</li>
-                <li>优化导入Excel时设置dictType属性重复查缓存问题</li>
-                <li>其他细节优化</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v3.8.7 - 2023-12-08">
-              <ol>
-                <li>操作日志记录部门名称</li>
-                <li>全局数据存储用户编号</li>
-                <li>新增编程式判断资源访问权限</li>
-                <li>操作日志列表新增IP地址查询</li>
-                <li>定时任务新增页去除状态选项</li>
-                <li>代码生成支持选择前端模板类型</li>
-                <li>显隐列组件支持复选框弹出类型</li>
-                <li>通用排序属性orderBy参数限制长度</li>
-                <li>Excel自定义数据处理器增加单元格/工作簿对象</li>
-                <li>升级oshi到最新版本6.4.8</li>
-                <li>升级druid到最新版本1.2.20</li>
-                <li>升级fastjson到最新版2.0.43</li>
-                <li>升级pagehelper到最新版1.4.7</li>
-                <li>升级commons.io到最新版本2.13.0</li>
-                <li>升级element-ui到最新版本2.15.14</li>
-                <li>修复五级路由缓存无效问题</li>
-                <li>修复外链带端口出现的异常</li>
-                <li>修复树模板父级编码变量错误</li>
-                <li>修复字典表详情页面搜索问题</li>
-                <li>修复内链iframe没有传递参数问题</li>
-                <li>修复自定义字典样式不生效的问题</li>
-                <li>修复字典缓存删除方法参数错误问题</li>
-                <li>修复Excel导入数据临时文件无法删除问题</li>
-                <li>修复未登录带参数访问成功后参数丢失问题</li>
-                <li>修复HeaderSearch组件跳转query参数丢失问题</li>
-                <li>修复代码生成导入后必填项与数据库不匹配问题</li>
-                <li>修复Excels导入时无法获取到dictType字典值问题</li>
-                <li>优化下载zip方法新增遮罩层</li>
-                <li>优化头像上传参数新增文件名称</li>
-                <li>优化字典标签支持自定义分隔符</li>
-                <li>优化菜单管理类型为按钮状态可选</li>
-                <li>优化前端防重复提交数据大小限制</li>
-                <li>优化TopNav菜单没有图标svg不显示</li>
-                <li>优化数字金额大写转换精度丢失问题</li>
-                <li>优化富文本Editor组件检验图片格式</li>
-                <li>优化页签在Firefox浏览器被遮挡的问题</li>
-                <li>优化个人中心/基本资料修改时数据显示问题</li>
-                <li>优化缓存监控图表支持跟随屏幕大小自适应调整</li>
-                <li>其他细节优化</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v3.8.6 - 2023-06-30">
-              <ol>
-                <li>支持登录IP黑名单限制</li>
-                <li>新增监控页面图标显示</li>
-                <li>操作日志新增消耗时间属性</li>
-                <li>屏蔽定时任务bean违规的字符</li>
-                <li>日志管理使用索引提升查询性能</li>
-                <li>日志注解支持排除指定的请求参数</li>
-                <li>支持自定义隐藏属性列过滤子对象</li>
-                <li>升级oshi到最新版本6.4.3</li>
-                <li>升级druid到最新版本1.2.16</li>
-                <li>升级fastjson到最新版2.0.34</li>
-                <li>升级spring-boot到最新版本2.5.15</li>
-                <li>升级element-ui到最新版本2.15.13</li>
-                <li>移除apache/commons-fileupload依赖</li>
-                <li>修复页面切换时布局错乱的问题</li>
-                <li>修复匿名注解Anonymous空指针问题</li>
-                <li>修复路由跳转被阻止时内部产生报错信息问题</li>
-                <li>修复isMatchedIp的参数判断产生空指针的问题</li>
-                <li>修复用户多角色数据权限可能出现权限抬升的情况</li>
-                <li>修复开启TopNav后一级菜单路由参数设置无效问题</li>
-                <li>修复DictTag组件value没有匹配的值时则展示value</li>
-                <li>优化文件下载出现的异常</li>
-                <li>优化选择图标组件高亮回显</li>
-                <li>优化弹窗后导航栏偏移的问题</li>
-                <li>优化修改密码日志存储明文问题</li>
-                <li>优化页签栏关闭其他出现的异常问题</li>
-                <li>优化页签关闭左侧选项排除首页选项</li>
-                <li>优化关闭当前tab页跳转最右侧tab页</li>
-                <li>优化缓存列表清除操作提示不变的问题</li>
-                <li>优化字符未使用下划线不进行驼峰式处理</li>
-                <li>优化用户导入更新时需获取用户编号问题</li>
-                <li>优化侧边栏的平台标题与VUE_APP_TITLE保持同步</li>
-                <li>优化导出Excel时设置dictType属性重复查缓存问题</li>
-                <li>连接池Druid支持新的配置connectTimeout和socketTimeout</li>
-                <li>其他细节优化</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v3.8.5 - 2023-01-01">
-              <ol>
-                <li>定时任务违规的字符</li>
-                <li>重置时取消部门选中</li>
-                <li>新增返回警告消息提示</li>
-                <li>忽略不必要的属性数据返回</li>
-                <li>修改参数键名时移除前缓存配置</li>
-                <li>导入更新用户数据前校验数据权限</li>
-                <li>兼容Excel下拉框内容过多无法显示的问题</li>
-                <li>升级echarts到最新版本5.4.0</li>
-                <li>升级core-js到最新版本3.25.3</li>
-                <li>升级oshi到最新版本6.4.0</li>
-                <li>升级kaptcha到最新版2.3.3</li>
-                <li>升级druid到最新版本1.2.15</li>
-                <li>升级fastjson到最新版2.0.20</li>
-                <li>升级pagehelper到最新版1.4.6</li>
-                <li>优化弹窗内容过多展示不全问题</li>
-                <li>优化swagger-ui静态资源使用缓存</li>
-                <li>开启TopNav没有子菜单隐藏侧边栏</li>
-                <li>删除fuse无效选项maxPatternLength</li>
-                <li>优化导出对象的子列表为空会出现[]问题</li>
-                <li>优化编辑头像时透明部分会变成黑色问题</li>
-                <li>优化小屏幕上修改头像界面布局错位的问题</li>
-                <li>修复代码生成勾选属性无效问题</li>
-                <li>修复文件上传组件格式验证问题</li>
-                <li>修复回显数据字典数组异常问题</li>
-                <li>修复sheet超出最大行数异常问题</li>
-                <li>修复Log注解GET请求记录不到参数问题</li>
-                <li>修复调度日志点击多次数据不变化的问题</li>
-                <li>修复主题颜色在Drawer组件不会加载问题</li>
-                <li>修复文件名包含特殊字符的文件无法下载问题</li>
-                <li>修复table中更多按钮切换主题色未生效修复问题</li>
-                <li>修复某些特性的环境生成代码变乱码TXT文件问题</li>
-                <li>修复代码生成图片/文件/单选时选择必填无法校验问题</li>
-                <li>修复某些特性的情况用户编辑对话框中角色和部门无法修改问题</li>
-                <li>其他细节优化</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v3.8.4 - 2022-09-26">
-              <ol>
-                <li>数据逻辑删除不进行唯一验证</li>
-                <li>Excel注解支持导出对象的子列表方法</li>
-                <li>Excel注解支持自定义隐藏属性列</li>
-                <li>Excel注解支持backgroundColor属性设置背景色</li>
-                <li>支持配置密码最大错误次数/锁定时间</li>
-                <li>登录日志新增解锁账户功能</li>
-                <li>通用下载方法新增config配置选项</li>
-                <li>支持多权限字符匹配角色数据权限</li>
-                <li>页面内嵌iframe切换tab不刷新数据</li>
-                <li>操作日志记录支持排除敏感属性字段</li>
-                <li>修复多文件上传报错出现的异常问题</li>
-                <li>修复图片预览组件src属性为null值控制台报错问题</li>
-                <li>升级oshi到最新版本6.2.2</li>
-                <li>升级fastjson到最新版2.0.14</li>
-                <li>升级pagehelper到最新版1.4.3</li>
-                <li>升级core-js到最新版本3.25.2</li>
-                <li>升级element-ui到最新版本2.15.10</li>
-                <li>优化任务过期不执行调度</li>
-                <li>优化字典数据使用store存取</li>
-                <li>优化修改资料头像被覆盖的问题</li>
-                <li>优化修改用户登录账号重复验证</li>
-                <li>优化代码生成同步后值NULL问题</li>
-                <li>优化定时任务支持执行父类方法</li>
-                <li>优化用户个人信息接口防止修改部门</li>
-                <li>优化布局设置使用el-drawer抽屉显示</li>
-                <li>优化没有权限的用户编辑部门缺少数据</li>
-                <li>优化日志注解记录限制请求地址的长度</li>
-                <li>优化excel/scale属性导出单元格数值类型</li>
-                <li>优化日志操作中重置按钮时重复查询的问题</li>
-                <li>优化多个相同角色数据导致权限SQL重复问题</li>
-                <li>优化表格上右侧工具条(搜索按钮显隐&右侧样式凸出)</li>
-                <li>其他细节优化</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v3.8.3 - 2022-06-27">
-              <ol>
-                <li>新增缓存列表菜单功能</li>
-                <li>代码生成树表新增(展开/折叠)</li>
-                <li>Excel注解支持color字体颜色</li>
-                <li>新增Anonymous匿名访问不鉴权注解</li>
-                <li>用户头像上传限制只能为图片格式</li>
-                <li>接口使用泛型使其看到响应属性字段</li>
-                <li>检查定时任务bean所在包名是否为白名单配置</li>
-                <li>添加页签openPage支持传递参数</li>
-                <li>用户缓存信息添加部门ancestors祖级列表</li>
-                <li>升级element-ui到最新版本2.15.8</li>
-                <li>升级oshi到最新版本6.1.6</li>
-                <li>升级druid到最新版本1.2.11</li>
-                <li>升级fastjson到最新版2.0.8</li>
-                <li>升级spring-boot到最新版本2.5.14</li>
-                <li>降级jsencrypt版本兼容IE浏览器</li>
-                <li>删除多余的salt字段</li>
-                <li>新增获取不带后缀文件名称方法</li>
-                <li>新增获取配置文件中的属性值方法</li>
-                <li>新增内容编码/解码方便插件集成使用</li>
-                <li>字典类型必须以字母开头,且只能为(小写字母,数字,下滑线)</li>
-                <li>优化设置分页参数默认值</li>
-                <li>优化对空字符串参数处理的过滤</li>
-                <li>优化显示顺序orderNum类型为整型</li>
-                <li>优化表单构建按钮不显示正则校验</li>
-                <li>优化字典数据回显样式下拉框显示值</li>
-                <li>优化R响应成功状态码与全局保持一致</li>
-                <li>优化druid开启wall过滤器出现的异常问题</li>
-                <li>优化用户管理左侧树型组件增加选中高亮保持</li>
-                <li>优化新增用户与角色信息&用户与岗位信息逻辑</li>
-                <li>优化默认不启用压缩文件缓存防止node_modules过大</li>
-                <li>修复字典数据显示不全问题</li>
-                <li>修复操作日志查询类型条件为0时会查到所有数据</li>
-                <li>修复Excel注解prompt/combo同时使用不生效问题</li>
-                <li>其他细节优化</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v3.8.2 - 2022-04-01">
-              <ol>
-                <li>前端支持设置是否需要防止数据重复提交</li>
-                <li>开启TopNav没有子菜单情况隐藏侧边栏</li>
-                <li>侧边栏菜单名称过长悬停显示标题</li>
-                <li>用户访问控制时校验数据权限,防止越权</li>
-                <li>导出Excel时屏蔽公式,防止CSV注入风险</li>
-                <li>组件ImagePreview支持多图预览显示</li>
-                <li>组件ImageUpload支持多图同时选择上传</li>
-                <li>组件FileUpload支持多文件同时选择上传</li>
-                <li>服务监控新增运行参数信息显示</li>
-                <li>定时任务目标字符串过滤特殊字符</li>
-                <li>定时任务目标字符串验证包名白名单</li>
-                <li>代码生成列表图片支持预览</li>
-                <li>代码生成编辑修改打开新页签</li>
-                <li>代码生成新增Java类型Boolean</li>
-                <li>代码生成子表支持日期/字典配置</li>
-                <li>代码生成同步保留必填/类型选项</li>
-                <li>升级oshi到最新版本6.1.2</li>
-                <li>升级fastjson到最新版1.2.80</li>
-                <li>升级pagehelper到最新版1.4.1</li>
-                <li>升级spring-boot到最新版本2.5.11</li>
-                <li>升级spring-boot-mybatis到最新版2.2.2</li>
-                <li>添加遗漏的分页参数合理化属性</li>
-                <li>修改npm即将过期的注册源地址</li>
-                <li>修复分页组件请求两次问题</li>
-                <li>修复通用文件下载接口跨域问题</li>
-                <li>修复Xss注解字段值为空时的异常问题</li>
-                <li>修复选项卡点击右键刷新丢失参数问题</li>
-                <li>修复表单清除元素位置未垂直居中问题</li>
-                <li>修复服务监控中运行参数显示条件错误</li>
-                <li>修复导入Excel时字典字段类型为Long转义为空问题</li>
-                <li>修复登录超时刷新页面跳转登录页面还提示重新登录问题</li>
-                <li>优化加载字典缓存数据</li>
-                <li>优化IP地址获取到多个的问题</li>
-                <li>优化任务队列满时任务拒绝策略</li>
-                <li>优化文件上传兼容Weblogic环境</li>
-                <li>优化定时任务默认保存到内存中执行</li>
-                <li>优化部门修改缩放后出现的错位问题</li>
-                <li>优化Excel格式化不同类型的日期对象</li>
-                <li>优化菜单表关键字导致的插件报错问题</li>
-                <li>优化Oracle用户头像列为空时不显示问题</li>
-                <li>优化页面若未匹配到字典标签则返回原字典值</li>
-                <li>优化修复登录失效后多次请求提示多次弹窗问题</li>
-                <li>其他细节优化</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v3.8.1 - 2022-01-01">
-              <ol>
-                <li>新增Vue3前端代码生成模板</li>
-                <li>新增图片预览组件</li>
-                <li>新增压缩插件实现打包Gzip</li>
-                <li>自定义xss校验注解实现</li>
-                <li>自定义文字复制剪贴指令</li>
-                <li>代码生成预览支持复制内容</li>
-                <li>路由支持单独配置菜单或角色权限</li>
-                <li>用户管理部门查询选择节点后分页参数初始</li>
-                <li>修复用户分配角色属性错误</li>
-                <li>修复打包后字体图标偶现的乱码问题</li>
-                <li>修复菜单管理重置表单出现的错误</li>
-                <li>修复版本差异导致的懒加载报错问题</li>
-                <li>修复Cron组件中周回显问题</li>
-                <li>修复定时任务多参数逗号分隔的问题</li>
-                <li>修复根据ID查询列表可能出现的主键溢出问题</li>
-                <li>修复tomcat配置参数已过期问题</li>
-                <li>升级clipboard到最新版本2.0.8</li>
-                <li>升级oshi到最新版本v5.8.6</li>
-                <li>升级fastjson到最新版1.2.79</li>
-                <li>升级spring-boot到最新版本2.5.8</li>
-                <li>升级log4j2到2.17.1,防止漏洞风险</li>
-                <li>优化下载解析blob异常提示</li>
-                <li>优化代码生成字典组重复问题</li>
-                <li>优化查询用户的角色组&岗位组代码</li>
-                <li>优化定时任务cron表达式小时设置24</li>
-                <li>优化用户导入提示溢出则显示滚动条</li>
-                <li>优化防重复提交标识组合为(key+url+header)</li>
-                <li>优化分页方法设置成通用方便灵活调用</li>
-                <li>其他细节优化</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v3.8.0 - 2021-12-01">
-              <ol>
-                <li>新增配套并同步的Vue3前端版本</li>
-                <li>新增通用方法简化模态/缓存/下载/权限/页签使用</li>
-                <li>优化导出数据/使用通用下载方法</li>
-                <li>Excel注解支持自定义数据处理器</li>
-                <li>Excel注解支持导入导出标题信息</li>
-                <li>Excel导入支持@Excels注解</li>
-                <li>新增组件data-dict,简化数据字典使用</li>
-                <li>新增Jaxb依赖,防止jdk8以上出现的兼容错误</li>
-                <li>生产环境使用路由懒加载提升页面响应速度</li>
-                <li>修复五级以上菜单出现的404问题</li>
-                <li>防重提交注解支持配置间隔时间/提示消息</li>
-                <li>日志注解新增是否保存响应参数</li>
-                <li>任务屏蔽违规字符&参数忽略双引号中的逗号</li>
-                <li>升级SpringBoot到最新版本2.5.6</li>
-                <li>升级pagehelper到最新版1.4.0</li>
-                <li>升级spring-boot-mybatis到最新版2.2.0</li>
-                <li>升级oshi到最新版本v5.8.2</li>
-                <li>升级druid到最新版1.2.8</li>
-                <li>升级velocity到最新版本2.3</li>
-                <li>升级fastjson到最新版1.2.78</li>
-                <li>升级axios到最新版本0.24.0</li>
-                <li>升级dart-sass到版本1.32.13</li>
-                <li>升级core-js到最新版本3.19.1</li>
-                <li>升级jsencrypt到最新版本3.2.1</li>
-                <li>升级js-cookie到最新版本3.0.1</li>
-                <li>升级file-saver到最新版本2.0.5</li>
-                <li>升级sass-loader到最新版本10.1.1</li>
-                <li>升级element-ui到最新版本2.15.6</li>
-                <li>新增sendGet无参请求方法</li>
-                <li>禁用el-tag组件的渐变动画</li>
-                <li>代码生成点击预览重置激活tab</li>
-                <li>AjaxResult重写put方法,以方便链式调用</li>
-                <li>优化登录/验证码请求headers不设置token</li>
-                <li>优化用户个人信息接口防止修改用户名</li>
-                <li>优化Cron表达式生成器关闭时销毁避免缓存</li>
-                <li>优化注册成功提示消息类型success</li>
-                <li>优化aop语法,使用spring自动注入注解</li>
-                <li>优化记录登录信息,移除不必要的修改</li>
-                <li>优化mybatis全局默认的执行器</li>
-                <li>优化Excel导入图片可能出现的异常</li>
-                <li>修复代码生成模板主子表删除缺少事务</li>
-                <li>修复日志记录可能出现的转换异常</li>
-                <li>修复代码生成复选框字典遗漏问题</li>
-                <li>修复关闭xss功能导致可重复读RepeatableFilter失效</li>
-                <li>修复字符串无法被反转义问题</li>
-                <li>修复后端主子表代码模板方法名生成错误问题</li>
-                <li>修复xss过滤后格式出现的异常</li>
-                <li>修复swagger没有指定dataTypeClass导致启动出现warn日志</li>
-                <li>其他细节优化</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v3.7.0 - 2021-09-13">
-              <ol>
-                <li>参数管理支持配置验证码开关</li>
-                <li>新增是否开启用户注册功能</li>
-                <li>定时任务支持在线生成cron表达式</li>
-                <li>菜单管理支持配置路由参数</li>
-                <li>支持自定义注解实现接口限流</li>
-                <li>Excel注解支持Image图片导入</li>
-                <li>自定义弹层溢出滚动样式</li>
-                <li>自定义可拖动弹窗宽度指令</li>
-                <li>自定义可拖动弹窗高度指令</li>
-                <li>修复任意账户越权问题</li>
-                <li>修改时检查用户数据权限范围</li>
-                <li>修复保存配置主题颜色失效问题</li>
-                <li>新增暗色菜单风格主题</li>
-                <li>菜单&部门新增展开/折叠功能</li>
-                <li>页签新增关闭左侧&添加图标</li>
-                <li>顶部菜单排除隐藏的默认路由</li>
-                <li>顶部菜单同步系统主题样式</li>
-                <li>跳转路由高亮相对应的菜单栏</li>
-                <li>代码生成主子表多选行数据</li>
-                <li>日期范围支持添加多组</li>
-                <li>升级element-ui到最新版本2.15.5</li>
-                <li>升级oshi到最新版本v5.8.0</li>
-                <li>升级commons.io到最新版本v2.11.0</li>
-                <li>定时任务屏蔽ldap远程调用</li>
-                <li>定时任务屏蔽http(s)远程调用</li>
-                <li>补充定时任务表字段注释</li>
-                <li>定时任务对检查异常进行事务回滚</li>
-                <li>启用父部门状态排除顶级节点</li>
-                <li>富文本新增上传文件大小限制</li>
-                <li>默认首页使用keep-alive缓存</li>
-                <li>修改代码生成字典回显样式</li>
-                <li>自定义分页合理化传入参数</li>
-                <li>修复字典组件值为整形不显示问题</li>
-                <li>修复定时任务日志执行状态显示</li>
-                <li>角色&菜单新增字段属性提示信息</li>
-                <li>修复角色分配用户页面参数类型错误提醒</li>
-                <li>优化布局设置动画特效</li>
-                <li>优化异常处理信息</li>
-                <li>优化错误token导致的解析异常</li>
-                <li>密码框新增显示切换密码图标</li>
-                <li>定时任务新增更多操作</li>
-                <li>更多操作按钮添加权限控制</li>
-                <li>导入用户样式优化</li>
-                <li>提取通用方法到基类控制器</li>
-                <li>优化使用权限工具获取用户信息</li>
-                <li>优化用户不能删除自己</li>
-                <li>优化XSS跨站脚本过滤</li>
-                <li>优化代码生成模板</li>
-                <li>验证码默认20s超时</li>
-                <li>BLOB下载时清除URL对象引用</li>
-                <li>代码生成导入表按创建时间排序</li>
-                <li>修复代码生成页面数据编辑保存之后总是跳转第一页的问题</li>
-                <li>修复带safari浏览器无法格式化utc日期格式yyyy-MM-dd'T'HH:mm:ss.SSS问题</li>
-                <li>多图上传组件移除多余的api地址&验证失败导致图片删除问题&无法删除相应图片修复</li>
-                <li>其他细节优化</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v3.6.0 - 2021-07-12">
-              <ol>
-                <li>角色管理新增分配用户功能</li>
-                <li>用户管理新增分配角色功能</li>
-                <li>日志列表支持排序操作</li>
-                <li>优化参数&字典缓存操作</li>
-                <li>系统布局配置支持动态标题开关</li>
-                <li>菜单路由配置支持内链访问</li>
-                <li>默认访问后端首页新增提示语</li>
-                <li>富文本默认上传返回url类型</li>
-                <li>新增自定义弹窗拖拽指令</li>
-                <li>全局注册常用通用组件</li>
-                <li>全局挂载字典标签组件</li>
-                <li>ImageUpload组件支持多图片上传</li>
-                <li>FileUpload组件支持多文件上传</li>
-                <li>文件上传组件添加数量限制属性</li>
-                <li>富文本编辑组件添加类型属性</li>
-                <li>富文本组件工具栏配置视频</li>
-                <li>封装通用iframe组件</li>
-                <li>限制超级管理员不允许操作</li>
-                <li>用户信息长度校验限制</li>
-                <li>分页组件新增pagerCount属性</li>
-                <li>添加bat脚本执行应用</li>
-                <li>升级oshi到最新版本v5.7.4</li>
-                <li>升级element-ui到最新版本2.15.2</li>
-                <li>升级pagehelper到最新版1.3.1</li>
-                <li>升级commons.io到最新版本v2.10.0</li>
-                <li>升级commons.fileupload到最新版本v1.4</li>
-                <li>升级swagger到最新版本v3.0.0</li>
-                <li>修复关闭confirm提示框控制台报错问题</li>
-                <li>修复存在的SQL注入漏洞问题</li>
-                <li>定时任务屏蔽rmi远程调用</li>
-                <li>修复用户搜索分页变量错误</li>
-                <li>修复导出角色数据范围翻译缺少仅本人</li>
-                <li>修复表单构建选择下拉选择控制台报错问题</li>
-                <li>优化图片工具类读取文件</li>
-                <li>其他细节优化</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v3.5.0 - 2021-05-25">
-              <ol>
-                <li>新增菜单导航显示风格TopNav(false为左侧导航菜单,true为顶部导航菜单)</li>
-                <li>布局设置支持保存&重置配置</li>
-                <li>修复树表数据显示不全&加载慢问题</li>
-                <li>新增IE浏览器版本过低提示页面</li>
-                <li>用户登录后记录最后登录IP&时间</li>
-                <li>页面导出按钮点击之后添加遮罩</li>
-                <li>富文本编辑器支持自定义上传地址</li>
-                <li>富文本编辑组件新增readOnly属性</li>
-                <li>页签TagsView新增关闭右侧功能</li>
-                <li>显隐列组件加载初始默认隐藏列</li>
-                <li>关闭头像上传窗口还原默认图片</li>
-                <li>个人信息添加手机&邮箱重复验证</li>
-                <li>代码生成模板导出按钮点击后添加遮罩</li>
-                <li>代码生成模板树表操作列添加新增按钮</li>
-                <li>代码生成模板修复主子表字段重名问题</li>
-                <li>升级fastjson到最新版1.2.76</li>
-                <li>升级druid到最新版本v1.2.6</li>
-                <li>升级mybatis到最新版3.5.6 阻止远程代码执行漏洞</li>
-                <li>升级oshi到最新版本v5.6.0</li>
-                <li>velocity剔除commons-collections版本,防止3.2.1版本的反序列化漏洞</li>
-                <li>数据监控页默认账户密码防止越权访问</li>
-                <li>修复firefox下表单构建拖拽会新打卡一个选项卡</li>
-                <li>修正后端导入表权限标识</li>
-                <li>修正前端操作日志&登录日志权限标识</li>
-                <li>设置Redis配置HashKey序列化</li>
-                <li>删除操作日志记录信息</li>
-                <li>上传媒体类型添加视频格式</li>
-                <li>修复请求形参未传值记录日志异常问题</li>
-                <li>优化xss校验json请求条件</li>
-                <li>树级结构更新子节点使用replaceFirst</li>
-                <li>优化ExcelUtil空值处理</li>
-                <li>日志记录过滤BindingResult对象,防止异常</li>
-                <li>修改主题后mini类型按钮无效问题</li>
-                <li>优化通用下载完成后删除节点</li>
-                <li>通用Controller添加响应返回消息</li>
-                <li>其他细节优化</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v3.4.0 - 2021-02-22">
-              <ol>
-                <li>代码生成模板支持主子表</li>
-                <li>表格右侧工具栏组件支持显隐列</li>
-                <li>图片组件添加预览&移除功能</li>
-                <li>Excel注解支持Image图片导出</li>
-                <li>操作按钮组调整为朴素按钮样式</li>
-                <li>代码生成支持文件上传组件</li>
-                <li>代码生成日期控件区分范围</li>
-                <li>代码生成数据库文本类型生成表单文本域</li>
-                <li>用户手机邮箱&菜单组件修改允许空字符串</li>
-                <li>升级SpringBoot到最新版本2.2.13 提升启动速度</li>
-                <li>升级druid到最新版本v1.2.4</li>
-                <li>升级fastjson到最新版1.2.75</li>
-                <li>升级element-ui到最新版本2.15.0</li>
-                <li>修复IE11浏览器报错问题</li>
-                <li>优化多级菜单之间切换无法缓存的问题</li>
-                <li>修复四级菜单无法显示问题</li>
-                <li>修正侧边栏静态路由丢失问题</li>
-                <li>修复角色管理-编辑角色-功能权限显示异常</li>
-                <li>配置文件新增redis数据库索引属性</li>
-                <li>权限工具类增加admin判断</li>
-                <li>角色非自定义权限范围清空选择值</li>
-                <li>修复导入数据为负浮点数时丢失精度问题</li>
-                <li>移除path-to-regexp正则匹配插件</li>
-                <li>修复生成树表代码异常</li>
-                <li>修改ip字段长度防止ipv6地址长度不够</li>
-                <li>防止get请求参数值为false或0等特殊值会导致无法正确的传参</li>
-                <li>登录后push添加catch防止出现检查错误</li>
-                <li>其他细节优化</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v3.3.0 - 2020-12-14">
-              <ol>
-                <li>新增缓存监控功能</li>
-                <li>支持主题风格配置</li>
-                <li>修复多级菜单之间切换无法缓存的问题</li>
-                <li>多级菜单自动配置组件</li>
-                <li>代码生成预览支持高亮显示</li>
-                <li>支持Get请求映射Params参数</li>
-                <li>删除用户和角色解绑关联</li>
-                <li>去除用户手机邮箱部门必填验证</li>
-                <li>Excel支持注解align对齐方式</li>
-                <li>Excel支持导入Boolean型数据</li>
-                <li>优化头像样式,鼠标移入悬停遮罩</li>
-                <li>代码生成预览提供滚动机制</li>
-                <li>代码生成删除多余的数字float类型</li>
-                <li>修正转换字符串的目标字符集属性</li>
-                <li>回显数据字典防止空值报错</li>
-                <li>日志记录增加过滤多文件场景</li>
-                <li>修改缓存Set方法可能导致嵌套的问题</li>
-                <li>移除前端一些多余的依赖</li>
-                <li>防止安全扫描YUI出现的风险提示</li>
-                <li>修改node-sass为dart-sass</li>
-                <li>升级SpringBoot到最新版本2.1.18</li>
-                <li>升级poi到最新版本4.1.2</li>
-                <li>升级oshi到最新版本v5.3.6</li>
-                <li>升级bitwalker到最新版本1.21</li>
-                <li>升级axios到最新版本0.21.0</li>
-                <li>升级element-ui到最新版本2.14.1</li>
-                <li>升级vue到最新版本2.6.12</li>
-                <li>升级vuex到最新版本3.6.0</li>
-                <li>升级vue-cli到版本4.5.9</li>
-                <li>升级vue-router到最新版本3.4.9</li>
-                <li>升级vue-cli到最新版本4.4.6</li>
-                <li>升级vue-cropper到最新版本0.5.5</li>
-                <li>升级clipboard到最新版本2.0.6</li>
-                <li>升级core-js到最新版本3.8.1</li>
-                <li>升级echarts到最新版本4.9.0</li>
-                <li>升级file-saver到最新版本2.0.4</li>
-                <li>升级fuse.js到最新版本6.4.3</li>
-                <li>升级js-beautify到最新版本1.13.0</li>
-                <li>升级js-cookie到最新版本2.2.1</li>
-                <li>升级path-to-regexp到最新版本6.2.0</li>
-                <li>升级quill到最新版本1.3.7</li>
-                <li>升级screenfull到最新版本5.0.2</li>
-                <li>升级sortablejs到最新版本1.10.2</li>
-                <li>升级vuedraggable到最新版本2.24.3</li>
-                <li>升级chalk到最新版本4.1.0</li>
-                <li>升级eslint到最新版本7.15.0</li>
-                <li>升级eslint-plugin-vue到最新版本7.2.0</li>
-                <li>升级lint-staged到最新版本10.5.3</li>
-                <li>升级runjs到最新版本4.4.2</li>
-                <li>升级sass-loader到最新版本10.1.0</li>
-                <li>升级script-ext-html-webpack-plugin到最新版本2.1.5</li>
-                <li>升级svg-sprite-loader到最新版本5.1.1</li>
-                <li>升级vue-template-compiler到最新版本2.6.12</li>
-                <li>其他细节优化</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v3.2.1 - 2020-11-18">
-              <ol>
-                <li>阻止任意文件下载漏洞</li>
-                <li>代码生成支持上传控件</li>
-                <li>新增图片上传组件</li>
-                <li>调整默认首页</li>
-                <li>升级druid到最新版本v1.2.2</li>
-                <li>mapperLocations配置支持分隔符</li>
-                <li>权限信息调整</li>
-                <li>调整sql默认时间</li>
-                <li>解决代码生成没有bit类型的问题</li>
-                <li>升级pagehelper到最新版1.3.0</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v3.2.0 - 2020-10-10">
-              <ol>
-                <li>升级springboot版本到2.1.17 提升安全性</li>
-                <li>升级oshi到最新版本v5.2.5</li>
-                <li>升级druid到最新版本v1.2.1</li>
-                <li>升级jjwt到版本0.9.1</li>
-                <li>升级fastjson到最新版1.2.74</li>
-                <li>修改sass为node-sass,避免el-icon图标乱码</li>
-                <li>代码生成支持同步数据库</li>
-                <li>代码生成支持富文本控件</li>
-                <li>代码生成页面时不忽略remark属性</li>
-                <li>代码生成添加select必填选项</li>
-                <li>Excel导出类型NUMERIC支持精度浮点类型</li>
-                <li>Excel导出targetAttr优化获取值,防止get方法不规范</li>
-                <li>Excel注解支持自动统计数据总和</li>
-                <li>Excel注解支持设置BigDecimal精度&舍入规则</li>
-                <li>菜单&数据权限新增(展开/折叠 全选/全不选 父子联动)</li>
-                <li>允许用户分配到部门父节点</li>
-                <li>菜单新增是否缓存keep-alive</li>
-                <li>表格操作列间距调整</li>
-                <li>限制系统内置参数不允许删除</li>
-                <li>富文本组件优化,支持自定义高度&图片冲突问题</li>
-                <li>富文本工具栏样式对齐</li>
-                <li>导入excel整形值校验优化</li>
-                <li>修复页签关闭所有时固定标签路由不刷新问题</li>
-                <li>表单构建布局型组件新增按钮</li>
-                <li>左侧菜单文字过长显示省略号</li>
-                <li>修正根节点为子部门时,树状结构显示问题</li>
-                <li>修正调用目标字符串最大长度</li>
-                <li>修正菜单提示信息错误</li>
-                <li>修正定时任务执行一次权限标识</li>
-                <li>修正数据库字符串类型nvarchar</li>
-                <li>优化递归子节点</li>
-                <li>优化数据权限判断</li>
-                <li>其他细节优化</li>
-              </ol>
-            </el-collapse-item>
+      <!--<el-col :sm="24" :lg="12" style="padding-left: 50px">-->
+        <!--<el-row>-->
+          <!--<el-col :span="12">-->
+            <!--<h2>技术选型</h2>-->
+          <!--</el-col>-->
+        <!--</el-row>-->
+        <!--<el-row>-->
+          <!--<el-col :span="6">-->
+            <!--<h4>后端技术</h4>-->
+            <!--<ul>-->
+              <!--<li>SpringBoot</li>-->
+              <!--<li>Spring Security</li>-->
+              <!--<li>JWT</li>-->
+              <!--<li>MyBatis</li>-->
+              <!--<li>Druid</li>-->
+              <!--<li>Fastjson</li>-->
+              <!--<li>...</li>-->
+            <!--</ul>-->
+          <!--</el-col>-->
+          <!--<el-col :span="6">-->
+            <!--<h4>前端技术</h4>-->
+            <!--<ul>-->
+              <!--<li>Vue</li>-->
+              <!--<li>Vuex</li>-->
+              <!--<li>Element-ui</li>-->
+              <!--<li>Axios</li>-->
+              <!--<li>Sass</li>-->
+              <!--<li>Quill</li>-->
+              <!--<li>...</li>-->
+            <!--</ul>-->
+          <!--</el-col>-->
+        <!--</el-row>-->
+      <!--</el-col>-->
+    <!--</el-row>-->
+    <!--<el-divider />-->
+    <!--<el-row :gutter="20">-->
+      <!--<el-col :xs="24" :sm="24" :md="12" :lg="8">-->
+        <!--<el-card class="update-log">-->
+          <!--<div slot="header" class="clearfix">-->
+            <!--<span>联系信息</span>-->
+          <!--</div>-->
+          <!--<div class="body">-->
+            <!--<p>-->
+              <!--<i class="el-icon-s-promotion"></i> 官网:<el-link-->
+                <!--href="http://www.ruoyi.vip"-->
+                <!--target="_blank"-->
+                <!--&gt;http://www.ruoyi.vip</el-link-->
+              <!--&gt;-->
+            <!--</p>-->
+            <!--<p>-->
+              <!--<i class="el-icon-user-solid"></i> QQ群:<s> 满937441 </s> <s> 满887144332 </s>-->
+              <!--<s> 满180251782 </s> <s> 满104180207 </s> <s> 满186866453 </s> <s> 满201396349 </s>-->
+              <!--<s> 满101456076 </s> <s> 满101539465 </s> <s> 满264312783 </s> <s> 满167385320 </s> -->
+              <!--<s> 满104748341 </s> <s> 满160110482 </s> <s> 满170801498 </s> <s> 满108482800 </s> -->
+              <!--<s> 满101046199 </s> <s> 满136919097 </s> <s> 满143961921 </s> <s> 满174951577 </s> -->
+              <!--<s> 满161281055 </s> <s> 满138988063 </s> <a href="http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=SUc-msaypcqB2UTFif4eqGlBHkKcvMNP&authKey=JdQBouY2PG%2BS%2BCzAfIgbCGNgxyahpfh24IW%2F03rPxGilhqVbisLma%2FFFnt79DHNh&noverify=0&group_code=151450850" target="_blank">151450850</a>-->
+            <!--</p>-->
+            <!--<p>-->
+              <!--<i class="el-icon-chat-dot-round"></i> 微信:<a-->
+                <!--href="javascript:;"-->
+                <!--&gt;/ *若依</a-->
+              <!--&gt;-->
+            <!--</p>-->
+            <!--<p>-->
+              <!--<i class="el-icon-money"></i> 支付宝:<a-->
+                <!--href="javascript:;"-->
+                <!--class="支付宝信息"-->
+                <!--&gt;/ *若依</a-->
+              <!--&gt;-->
+            <!--</p>-->
+          <!--</div>-->
+        <!--</el-card>-->
+      <!--</el-col>-->
+      <!--<el-col :xs="24" :sm="24" :md="12" :lg="8">-->
+        <!--<el-card class="update-log">-->
+          <!--<div slot="header" class="clearfix">-->
+            <!--<span>更新日志</span>-->
+          <!--</div>-->
+          <!--<el-collapse accordion>-->
+            <!--<el-collapse-item title="v3.8.8 - 2024-06-30">-->
+              <!--<ol>-->
+                <!--<li>菜单管理新增路由名称</li>-->
+                <!--<li>新增数据脱敏过滤注解</li>-->
+                <!--<li>用户密码新增非法字符验证</li>-->
+                <!--<li>限制用户操作数据权限范围</li>-->
+                <!--<li>代码生成新增创建表结构功能</li>-->
+                <!--<li>定时任务白名单配置范围缩小</li>-->
+                <!--<li>优化代码生成主子表关联查询方式</li>-->
+                <!--<li>Excel注解新增属性comboReadDict</li>-->
+                <!--<li>Excel注解ColumnType类型新增文本</li>-->
+                <!--<li>新增国际化资源文件配置</li>-->
+                <!--<li>升级oshi到最新版本6.6.1</li>-->
+                <!--<li>升级druid到最新版本1.2.23</li>-->
+                <!--<li>升级core-js到最新版本3.37.1</li>-->
+                <!--<li>更新HttpUtils中的User-Agent</li>-->
+                <!--<li>更新compressionPlugin到6.1.2以兼容node18+</li>-->
+                <!--<li>升级spring-security到安全版本,防止漏洞风险</li>-->
+                <!--<li>升级spring-framework到安全版本,防止漏洞风险</li>-->
+                <!--<li>优化自定义XSS注解匹配方式</li>-->
+                <!--<li>优化缓存监控键名列表排序显示</li>-->
+                <!--<li>优化定时任务日志默认按时间排序</li>-->
+                <!--<li>优化默认文件大小超过2G无效的问题</li>-->
+                <!--<li>优化查表特殊字符使用反斜杠进行转义</li>-->
+                <!--<li>优化定时任务cron表达式小时配置显示错误问题</li>-->
+                <!--<li>优化多个自定数据权限使用in查询,避免多次拼接</li>-->
+                <!--<li>优化导入Excel时设置dictType属性重复查缓存问题</li>-->
+                <!--<li>其他细节优化</li>-->
+              <!--</ol>-->
+            <!--</el-collapse-item>-->
+            <!--<el-collapse-item title="v3.8.7 - 2023-12-08">-->
+              <!--<ol>-->
+                <!--<li>操作日志记录部门名称</li>-->
+                <!--<li>全局数据存储用户编号</li>-->
+                <!--<li>新增编程式判断资源访问权限</li>-->
+                <!--<li>操作日志列表新增IP地址查询</li>-->
+                <!--<li>定时任务新增页去除状态选项</li>-->
+                <!--<li>代码生成支持选择前端模板类型</li>-->
+                <!--<li>显隐列组件支持复选框弹出类型</li>-->
+                <!--<li>通用排序属性orderBy参数限制长度</li>-->
+                <!--<li>Excel自定义数据处理器增加单元格/工作簿对象</li>-->
+                <!--<li>升级oshi到最新版本6.4.8</li>-->
+                <!--<li>升级druid到最新版本1.2.20</li>-->
+                <!--<li>升级fastjson到最新版2.0.43</li>-->
+                <!--<li>升级pagehelper到最新版1.4.7</li>-->
+                <!--<li>升级commons.io到最新版本2.13.0</li>-->
+                <!--<li>升级element-ui到最新版本2.15.14</li>-->
+                <!--<li>修复五级路由缓存无效问题</li>-->
+                <!--<li>修复外链带端口出现的异常</li>-->
+                <!--<li>修复树模板父级编码变量错误</li>-->
+                <!--<li>修复字典表详情页面搜索问题</li>-->
+                <!--<li>修复内链iframe没有传递参数问题</li>-->
+                <!--<li>修复自定义字典样式不生效的问题</li>-->
+                <!--<li>修复字典缓存删除方法参数错误问题</li>-->
+                <!--<li>修复Excel导入数据临时文件无法删除问题</li>-->
+                <!--<li>修复未登录带参数访问成功后参数丢失问题</li>-->
+                <!--<li>修复HeaderSearch组件跳转query参数丢失问题</li>-->
+                <!--<li>修复代码生成导入后必填项与数据库不匹配问题</li>-->
+                <!--<li>修复Excels导入时无法获取到dictType字典值问题</li>-->
+                <!--<li>优化下载zip方法新增遮罩层</li>-->
+                <!--<li>优化头像上传参数新增文件名称</li>-->
+                <!--<li>优化字典标签支持自定义分隔符</li>-->
+                <!--<li>优化菜单管理类型为按钮状态可选</li>-->
+                <!--<li>优化前端防重复提交数据大小限制</li>-->
+                <!--<li>优化TopNav菜单没有图标svg不显示</li>-->
+                <!--<li>优化数字金额大写转换精度丢失问题</li>-->
+                <!--<li>优化富文本Editor组件检验图片格式</li>-->
+                <!--<li>优化页签在Firefox浏览器被遮挡的问题</li>-->
+                <!--<li>优化个人中心/基本资料修改时数据显示问题</li>-->
+                <!--<li>优化缓存监控图表支持跟随屏幕大小自适应调整</li>-->
+                <!--<li>其他细节优化</li>-->
+              <!--</ol>-->
+            <!--</el-collapse-item>-->
+            <!--<el-collapse-item title="v3.8.6 - 2023-06-30">-->
+              <!--<ol>-->
+                <!--<li>支持登录IP黑名单限制</li>-->
+                <!--<li>新增监控页面图标显示</li>-->
+                <!--<li>操作日志新增消耗时间属性</li>-->
+                <!--<li>屏蔽定时任务bean违规的字符</li>-->
+                <!--<li>日志管理使用索引提升查询性能</li>-->
+                <!--<li>日志注解支持排除指定的请求参数</li>-->
+                <!--<li>支持自定义隐藏属性列过滤子对象</li>-->
+                <!--<li>升级oshi到最新版本6.4.3</li>-->
+                <!--<li>升级druid到最新版本1.2.16</li>-->
+                <!--<li>升级fastjson到最新版2.0.34</li>-->
+                <!--<li>升级spring-boot到最新版本2.5.15</li>-->
+                <!--<li>升级element-ui到最新版本2.15.13</li>-->
+                <!--<li>移除apache/commons-fileupload依赖</li>-->
+                <!--<li>修复页面切换时布局错乱的问题</li>-->
+                <!--<li>修复匿名注解Anonymous空指针问题</li>-->
+                <!--<li>修复路由跳转被阻止时内部产生报错信息问题</li>-->
+                <!--<li>修复isMatchedIp的参数判断产生空指针的问题</li>-->
+                <!--<li>修复用户多角色数据权限可能出现权限抬升的情况</li>-->
+                <!--<li>修复开启TopNav后一级菜单路由参数设置无效问题</li>-->
+                <!--<li>修复DictTag组件value没有匹配的值时则展示value</li>-->
+                <!--<li>优化文件下载出现的异常</li>-->
+                <!--<li>优化选择图标组件高亮回显</li>-->
+                <!--<li>优化弹窗后导航栏偏移的问题</li>-->
+                <!--<li>优化修改密码日志存储明文问题</li>-->
+                <!--<li>优化页签栏关闭其他出现的异常问题</li>-->
+                <!--<li>优化页签关闭左侧选项排除首页选项</li>-->
+                <!--<li>优化关闭当前tab页跳转最右侧tab页</li>-->
+                <!--<li>优化缓存列表清除操作提示不变的问题</li>-->
+                <!--<li>优化字符未使用下划线不进行驼峰式处理</li>-->
+                <!--<li>优化用户导入更新时需获取用户编号问题</li>-->
+                <!--<li>优化侧边栏的平台标题与VUE_APP_TITLE保持同步</li>-->
+                <!--<li>优化导出Excel时设置dictType属性重复查缓存问题</li>-->
+                <!--<li>连接池Druid支持新的配置connectTimeout和socketTimeout</li>-->
+                <!--<li>其他细节优化</li>-->
+              <!--</ol>-->
+            <!--</el-collapse-item>-->
+            <!--<el-collapse-item title="v3.8.5 - 2023-01-01">-->
+              <!--<ol>-->
+                <!--<li>定时任务违规的字符</li>-->
+                <!--<li>重置时取消部门选中</li>-->
+                <!--<li>新增返回警告消息提示</li>-->
+                <!--<li>忽略不必要的属性数据返回</li>-->
+                <!--<li>修改参数键名时移除前缓存配置</li>-->
+                <!--<li>导入更新用户数据前校验数据权限</li>-->
+                <!--<li>兼容Excel下拉框内容过多无法显示的问题</li>-->
+                <!--<li>升级echarts到最新版本5.4.0</li>-->
+                <!--<li>升级core-js到最新版本3.25.3</li>-->
+                <!--<li>升级oshi到最新版本6.4.0</li>-->
+                <!--<li>升级kaptcha到最新版2.3.3</li>-->
+                <!--<li>升级druid到最新版本1.2.15</li>-->
+                <!--<li>升级fastjson到最新版2.0.20</li>-->
+                <!--<li>升级pagehelper到最新版1.4.6</li>-->
+                <!--<li>优化弹窗内容过多展示不全问题</li>-->
+                <!--<li>优化swagger-ui静态资源使用缓存</li>-->
+                <!--<li>开启TopNav没有子菜单隐藏侧边栏</li>-->
+                <!--<li>删除fuse无效选项maxPatternLength</li>-->
+                <!--<li>优化导出对象的子列表为空会出现[]问题</li>-->
+                <!--<li>优化编辑头像时透明部分会变成黑色问题</li>-->
+                <!--<li>优化小屏幕上修改头像界面布局错位的问题</li>-->
+                <!--<li>修复代码生成勾选属性无效问题</li>-->
+                <!--<li>修复文件上传组件格式验证问题</li>-->
+                <!--<li>修复回显数据字典数组异常问题</li>-->
+                <!--<li>修复sheet超出最大行数异常问题</li>-->
+                <!--<li>修复Log注解GET请求记录不到参数问题</li>-->
+                <!--<li>修复调度日志点击多次数据不变化的问题</li>-->
+                <!--<li>修复主题颜色在Drawer组件不会加载问题</li>-->
+                <!--<li>修复文件名包含特殊字符的文件无法下载问题</li>-->
+                <!--<li>修复table中更多按钮切换主题色未生效修复问题</li>-->
+                <!--<li>修复某些特性的环境生成代码变乱码TXT文件问题</li>-->
+                <!--<li>修复代码生成图片/文件/单选时选择必填无法校验问题</li>-->
+                <!--<li>修复某些特性的情况用户编辑对话框中角色和部门无法修改问题</li>-->
+                <!--<li>其他细节优化</li>-->
+              <!--</ol>-->
+            <!--</el-collapse-item>-->
+            <!--<el-collapse-item title="v3.8.4 - 2022-09-26">-->
+              <!--<ol>-->
+                <!--<li>数据逻辑删除不进行唯一验证</li>-->
+                <!--<li>Excel注解支持导出对象的子列表方法</li>-->
+                <!--<li>Excel注解支持自定义隐藏属性列</li>-->
+                <!--<li>Excel注解支持backgroundColor属性设置背景色</li>-->
+                <!--<li>支持配置密码最大错误次数/锁定时间</li>-->
+                <!--<li>登录日志新增解锁账户功能</li>-->
+                <!--<li>通用下载方法新增config配置选项</li>-->
+                <!--<li>支持多权限字符匹配角色数据权限</li>-->
+                <!--<li>页面内嵌iframe切换tab不刷新数据</li>-->
+                <!--<li>操作日志记录支持排除敏感属性字段</li>-->
+                <!--<li>修复多文件上传报错出现的异常问题</li>-->
+                <!--<li>修复图片预览组件src属性为null值控制台报错问题</li>-->
+                <!--<li>升级oshi到最新版本6.2.2</li>-->
+                <!--<li>升级fastjson到最新版2.0.14</li>-->
+                <!--<li>升级pagehelper到最新版1.4.3</li>-->
+                <!--<li>升级core-js到最新版本3.25.2</li>-->
+                <!--<li>升级element-ui到最新版本2.15.10</li>-->
+                <!--<li>优化任务过期不执行调度</li>-->
+                <!--<li>优化字典数据使用store存取</li>-->
+                <!--<li>优化修改资料头像被覆盖的问题</li>-->
+                <!--<li>优化修改用户登录账号重复验证</li>-->
+                <!--<li>优化代码生成同步后值NULL问题</li>-->
+                <!--<li>优化定时任务支持执行父类方法</li>-->
+                <!--<li>优化用户个人信息接口防止修改部门</li>-->
+                <!--<li>优化布局设置使用el-drawer抽屉显示</li>-->
+                <!--<li>优化没有权限的用户编辑部门缺少数据</li>-->
+                <!--<li>优化日志注解记录限制请求地址的长度</li>-->
+                <!--<li>优化excel/scale属性导出单元格数值类型</li>-->
+                <!--<li>优化日志操作中重置按钮时重复查询的问题</li>-->
+                <!--<li>优化多个相同角色数据导致权限SQL重复问题</li>-->
+                <!--<li>优化表格上右侧工具条(搜索按钮显隐&右侧样式凸出)</li>-->
+                <!--<li>其他细节优化</li>-->
+              <!--</ol>-->
+            <!--</el-collapse-item>-->
+            <!--<el-collapse-item title="v3.8.3 - 2022-06-27">-->
+              <!--<ol>-->
+                <!--<li>新增缓存列表菜单功能</li>-->
+                <!--<li>代码生成树表新增(展开/折叠)</li>-->
+                <!--<li>Excel注解支持color字体颜色</li>-->
+                <!--<li>新增Anonymous匿名访问不鉴权注解</li>-->
+                <!--<li>用户头像上传限制只能为图片格式</li>-->
+                <!--<li>接口使用泛型使其看到响应属性字段</li>-->
+                <!--<li>检查定时任务bean所在包名是否为白名单配置</li>-->
+                <!--<li>添加页签openPage支持传递参数</li>-->
+                <!--<li>用户缓存信息添加部门ancestors祖级列表</li>-->
+                <!--<li>升级element-ui到最新版本2.15.8</li>-->
+                <!--<li>升级oshi到最新版本6.1.6</li>-->
+                <!--<li>升级druid到最新版本1.2.11</li>-->
+                <!--<li>升级fastjson到最新版2.0.8</li>-->
+                <!--<li>升级spring-boot到最新版本2.5.14</li>-->
+                <!--<li>降级jsencrypt版本兼容IE浏览器</li>-->
+                <!--<li>删除多余的salt字段</li>-->
+                <!--<li>新增获取不带后缀文件名称方法</li>-->
+                <!--<li>新增获取配置文件中的属性值方法</li>-->
+                <!--<li>新增内容编码/解码方便插件集成使用</li>-->
+                <!--<li>字典类型必须以字母开头,且只能为(小写字母,数字,下滑线)</li>-->
+                <!--<li>优化设置分页参数默认值</li>-->
+                <!--<li>优化对空字符串参数处理的过滤</li>-->
+                <!--<li>优化显示顺序orderNum类型为整型</li>-->
+                <!--<li>优化表单构建按钮不显示正则校验</li>-->
+                <!--<li>优化字典数据回显样式下拉框显示值</li>-->
+                <!--<li>优化R响应成功状态码与全局保持一致</li>-->
+                <!--<li>优化druid开启wall过滤器出现的异常问题</li>-->
+                <!--<li>优化用户管理左侧树型组件增加选中高亮保持</li>-->
+                <!--<li>优化新增用户与角色信息&用户与岗位信息逻辑</li>-->
+                <!--<li>优化默认不启用压缩文件缓存防止node_modules过大</li>-->
+                <!--<li>修复字典数据显示不全问题</li>-->
+                <!--<li>修复操作日志查询类型条件为0时会查到所有数据</li>-->
+                <!--<li>修复Excel注解prompt/combo同时使用不生效问题</li>-->
+                <!--<li>其他细节优化</li>-->
+              <!--</ol>-->
+            <!--</el-collapse-item>-->
+            <!--<el-collapse-item title="v3.8.2 - 2022-04-01">-->
+              <!--<ol>-->
+                <!--<li>前端支持设置是否需要防止数据重复提交</li>-->
+                <!--<li>开启TopNav没有子菜单情况隐藏侧边栏</li>-->
+                <!--<li>侧边栏菜单名称过长悬停显示标题</li>-->
+                <!--<li>用户访问控制时校验数据权限,防止越权</li>-->
+                <!--<li>导出Excel时屏蔽公式,防止CSV注入风险</li>-->
+                <!--<li>组件ImagePreview支持多图预览显示</li>-->
+                <!--<li>组件ImageUpload支持多图同时选择上传</li>-->
+                <!--<li>组件FileUpload支持多文件同时选择上传</li>-->
+                <!--<li>服务监控新增运行参数信息显示</li>-->
+                <!--<li>定时任务目标字符串过滤特殊字符</li>-->
+                <!--<li>定时任务目标字符串验证包名白名单</li>-->
+                <!--<li>代码生成列表图片支持预览</li>-->
+                <!--<li>代码生成编辑修改打开新页签</li>-->
+                <!--<li>代码生成新增Java类型Boolean</li>-->
+                <!--<li>代码生成子表支持日期/字典配置</li>-->
+                <!--<li>代码生成同步保留必填/类型选项</li>-->
+                <!--<li>升级oshi到最新版本6.1.2</li>-->
+                <!--<li>升级fastjson到最新版1.2.80</li>-->
+                <!--<li>升级pagehelper到最新版1.4.1</li>-->
+                <!--<li>升级spring-boot到最新版本2.5.11</li>-->
+                <!--<li>升级spring-boot-mybatis到最新版2.2.2</li>-->
+                <!--<li>添加遗漏的分页参数合理化属性</li>-->
+                <!--<li>修改npm即将过期的注册源地址</li>-->
+                <!--<li>修复分页组件请求两次问题</li>-->
+                <!--<li>修复通用文件下载接口跨域问题</li>-->
+                <!--<li>修复Xss注解字段值为空时的异常问题</li>-->
+                <!--<li>修复选项卡点击右键刷新丢失参数问题</li>-->
+                <!--<li>修复表单清除元素位置未垂直居中问题</li>-->
+                <!--<li>修复服务监控中运行参数显示条件错误</li>-->
+                <!--<li>修复导入Excel时字典字段类型为Long转义为空问题</li>-->
+                <!--<li>修复登录超时刷新页面跳转登录页面还提示重新登录问题</li>-->
+                <!--<li>优化加载字典缓存数据</li>-->
+                <!--<li>优化IP地址获取到多个的问题</li>-->
+                <!--<li>优化任务队列满时任务拒绝策略</li>-->
+                <!--<li>优化文件上传兼容Weblogic环境</li>-->
+                <!--<li>优化定时任务默认保存到内存中执行</li>-->
+                <!--<li>优化部门修改缩放后出现的错位问题</li>-->
+                <!--<li>优化Excel格式化不同类型的日期对象</li>-->
+                <!--<li>优化菜单表关键字导致的插件报错问题</li>-->
+                <!--<li>优化Oracle用户头像列为空时不显示问题</li>-->
+                <!--<li>优化页面若未匹配到字典标签则返回原字典值</li>-->
+                <!--<li>优化修复登录失效后多次请求提示多次弹窗问题</li>-->
+                <!--<li>其他细节优化</li>-->
+              <!--</ol>-->
+            <!--</el-collapse-item>-->
+            <!--<el-collapse-item title="v3.8.1 - 2022-01-01">-->
+              <!--<ol>-->
+                <!--<li>新增Vue3前端代码生成模板</li>-->
+                <!--<li>新增图片预览组件</li>-->
+                <!--<li>新增压缩插件实现打包Gzip</li>-->
+                <!--<li>自定义xss校验注解实现</li>-->
+                <!--<li>自定义文字复制剪贴指令</li>-->
+                <!--<li>代码生成预览支持复制内容</li>-->
+                <!--<li>路由支持单独配置菜单或角色权限</li>-->
+                <!--<li>用户管理部门查询选择节点后分页参数初始</li>-->
+                <!--<li>修复用户分配角色属性错误</li>-->
+                <!--<li>修复打包后字体图标偶现的乱码问题</li>-->
+                <!--<li>修复菜单管理重置表单出现的错误</li>-->
+                <!--<li>修复版本差异导致的懒加载报错问题</li>-->
+                <!--<li>修复Cron组件中周回显问题</li>-->
+                <!--<li>修复定时任务多参数逗号分隔的问题</li>-->
+                <!--<li>修复根据ID查询列表可能出现的主键溢出问题</li>-->
+                <!--<li>修复tomcat配置参数已过期问题</li>-->
+                <!--<li>升级clipboard到最新版本2.0.8</li>-->
+                <!--<li>升级oshi到最新版本v5.8.6</li>-->
+                <!--<li>升级fastjson到最新版1.2.79</li>-->
+                <!--<li>升级spring-boot到最新版本2.5.8</li>-->
+                <!--<li>升级log4j2到2.17.1,防止漏洞风险</li>-->
+                <!--<li>优化下载解析blob异常提示</li>-->
+                <!--<li>优化代码生成字典组重复问题</li>-->
+                <!--<li>优化查询用户的角色组&岗位组代码</li>-->
+                <!--<li>优化定时任务cron表达式小时设置24</li>-->
+                <!--<li>优化用户导入提示溢出则显示滚动条</li>-->
+                <!--<li>优化防重复提交标识组合为(key+url+header)</li>-->
+                <!--<li>优化分页方法设置成通用方便灵活调用</li>-->
+                <!--<li>其他细节优化</li>-->
+              <!--</ol>-->
+            <!--</el-collapse-item>-->
+            <!--<el-collapse-item title="v3.8.0 - 2021-12-01">-->
+              <!--<ol>-->
+                <!--<li>新增配套并同步的Vue3前端版本</li>-->
+                <!--<li>新增通用方法简化模态/缓存/下载/权限/页签使用</li>-->
+                <!--<li>优化导出数据/使用通用下载方法</li>-->
+                <!--<li>Excel注解支持自定义数据处理器</li>-->
+                <!--<li>Excel注解支持导入导出标题信息</li>-->
+                <!--<li>Excel导入支持@Excels注解</li>-->
+                <!--<li>新增组件data-dict,简化数据字典使用</li>-->
+                <!--<li>新增Jaxb依赖,防止jdk8以上出现的兼容错误</li>-->
+                <!--<li>生产环境使用路由懒加载提升页面响应速度</li>-->
+                <!--<li>修复五级以上菜单出现的404问题</li>-->
+                <!--<li>防重提交注解支持配置间隔时间/提示消息</li>-->
+                <!--<li>日志注解新增是否保存响应参数</li>-->
+                <!--<li>任务屏蔽违规字符&参数忽略双引号中的逗号</li>-->
+                <!--<li>升级SpringBoot到最新版本2.5.6</li>-->
+                <!--<li>升级pagehelper到最新版1.4.0</li>-->
+                <!--<li>升级spring-boot-mybatis到最新版2.2.0</li>-->
+                <!--<li>升级oshi到最新版本v5.8.2</li>-->
+                <!--<li>升级druid到最新版1.2.8</li>-->
+                <!--<li>升级velocity到最新版本2.3</li>-->
+                <!--<li>升级fastjson到最新版1.2.78</li>-->
+                <!--<li>升级axios到最新版本0.24.0</li>-->
+                <!--<li>升级dart-sass到版本1.32.13</li>-->
+                <!--<li>升级core-js到最新版本3.19.1</li>-->
+                <!--<li>升级jsencrypt到最新版本3.2.1</li>-->
+                <!--<li>升级js-cookie到最新版本3.0.1</li>-->
+                <!--<li>升级file-saver到最新版本2.0.5</li>-->
+                <!--<li>升级sass-loader到最新版本10.1.1</li>-->
+                <!--<li>升级element-ui到最新版本2.15.6</li>-->
+                <!--<li>新增sendGet无参请求方法</li>-->
+                <!--<li>禁用el-tag组件的渐变动画</li>-->
+                <!--<li>代码生成点击预览重置激活tab</li>-->
+                <!--<li>AjaxResult重写put方法,以方便链式调用</li>-->
+                <!--<li>优化登录/验证码请求headers不设置token</li>-->
+                <!--<li>优化用户个人信息接口防止修改用户名</li>-->
+                <!--<li>优化Cron表达式生成器关闭时销毁避免缓存</li>-->
+                <!--<li>优化注册成功提示消息类型success</li>-->
+                <!--<li>优化aop语法,使用spring自动注入注解</li>-->
+                <!--<li>优化记录登录信息,移除不必要的修改</li>-->
+                <!--<li>优化mybatis全局默认的执行器</li>-->
+                <!--<li>优化Excel导入图片可能出现的异常</li>-->
+                <!--<li>修复代码生成模板主子表删除缺少事务</li>-->
+                <!--<li>修复日志记录可能出现的转换异常</li>-->
+                <!--<li>修复代码生成复选框字典遗漏问题</li>-->
+                <!--<li>修复关闭xss功能导致可重复读RepeatableFilter失效</li>-->
+                <!--<li>修复字符串无法被反转义问题</li>-->
+                <!--<li>修复后端主子表代码模板方法名生成错误问题</li>-->
+                <!--<li>修复xss过滤后格式出现的异常</li>-->
+                <!--<li>修复swagger没有指定dataTypeClass导致启动出现warn日志</li>-->
+                <!--<li>其他细节优化</li>-->
+              <!--</ol>-->
+            <!--</el-collapse-item>-->
+            <!--<el-collapse-item title="v3.7.0 - 2021-09-13">-->
+              <!--<ol>-->
+                <!--<li>参数管理支持配置验证码开关</li>-->
+                <!--<li>新增是否开启用户注册功能</li>-->
+                <!--<li>定时任务支持在线生成cron表达式</li>-->
+                <!--<li>菜单管理支持配置路由参数</li>-->
+                <!--<li>支持自定义注解实现接口限流</li>-->
+                <!--<li>Excel注解支持Image图片导入</li>-->
+                <!--<li>自定义弹层溢出滚动样式</li>-->
+                <!--<li>自定义可拖动弹窗宽度指令</li>-->
+                <!--<li>自定义可拖动弹窗高度指令</li>-->
+                <!--<li>修复任意账户越权问题</li>-->
+                <!--<li>修改时检查用户数据权限范围</li>-->
+                <!--<li>修复保存配置主题颜色失效问题</li>-->
+                <!--<li>新增暗色菜单风格主题</li>-->
+                <!--<li>菜单&部门新增展开/折叠功能</li>-->
+                <!--<li>页签新增关闭左侧&添加图标</li>-->
+                <!--<li>顶部菜单排除隐藏的默认路由</li>-->
+                <!--<li>顶部菜单同步系统主题样式</li>-->
+                <!--<li>跳转路由高亮相对应的菜单栏</li>-->
+                <!--<li>代码生成主子表多选行数据</li>-->
+                <!--<li>日期范围支持添加多组</li>-->
+                <!--<li>升级element-ui到最新版本2.15.5</li>-->
+                <!--<li>升级oshi到最新版本v5.8.0</li>-->
+                <!--<li>升级commons.io到最新版本v2.11.0</li>-->
+                <!--<li>定时任务屏蔽ldap远程调用</li>-->
+                <!--<li>定时任务屏蔽http(s)远程调用</li>-->
+                <!--<li>补充定时任务表字段注释</li>-->
+                <!--<li>定时任务对检查异常进行事务回滚</li>-->
+                <!--<li>启用父部门状态排除顶级节点</li>-->
+                <!--<li>富文本新增上传文件大小限制</li>-->
+                <!--<li>默认首页使用keep-alive缓存</li>-->
+                <!--<li>修改代码生成字典回显样式</li>-->
+                <!--<li>自定义分页合理化传入参数</li>-->
+                <!--<li>修复字典组件值为整形不显示问题</li>-->
+                <!--<li>修复定时任务日志执行状态显示</li>-->
+                <!--<li>角色&菜单新增字段属性提示信息</li>-->
+                <!--<li>修复角色分配用户页面参数类型错误提醒</li>-->
+                <!--<li>优化布局设置动画特效</li>-->
+                <!--<li>优化异常处理信息</li>-->
+                <!--<li>优化错误token导致的解析异常</li>-->
+                <!--<li>密码框新增显示切换密码图标</li>-->
+                <!--<li>定时任务新增更多操作</li>-->
+                <!--<li>更多操作按钮添加权限控制</li>-->
+                <!--<li>导入用户样式优化</li>-->
+                <!--<li>提取通用方法到基类控制器</li>-->
+                <!--<li>优化使用权限工具获取用户信息</li>-->
+                <!--<li>优化用户不能删除自己</li>-->
+                <!--<li>优化XSS跨站脚本过滤</li>-->
+                <!--<li>优化代码生成模板</li>-->
+                <!--<li>验证码默认20s超时</li>-->
+                <!--<li>BLOB下载时清除URL对象引用</li>-->
+                <!--<li>代码生成导入表按创建时间排序</li>-->
+                <!--<li>修复代码生成页面数据编辑保存之后总是跳转第一页的问题</li>-->
+                <!--<li>修复带safari浏览器无法格式化utc日期格式yyyy-MM-dd'T'HH:mm:ss.SSS问题</li>-->
+                <!--<li>多图上传组件移除多余的api地址&验证失败导致图片删除问题&无法删除相应图片修复</li>-->
+                <!--<li>其他细节优化</li>-->
+              <!--</ol>-->
+            <!--</el-collapse-item>-->
+            <!--<el-collapse-item title="v3.6.0 - 2021-07-12">-->
+              <!--<ol>-->
+                <!--<li>角色管理新增分配用户功能</li>-->
+                <!--<li>用户管理新增分配角色功能</li>-->
+                <!--<li>日志列表支持排序操作</li>-->
+                <!--<li>优化参数&字典缓存操作</li>-->
+                <!--<li>系统布局配置支持动态标题开关</li>-->
+                <!--<li>菜单路由配置支持内链访问</li>-->
+                <!--<li>默认访问后端首页新增提示语</li>-->
+                <!--<li>富文本默认上传返回url类型</li>-->
+                <!--<li>新增自定义弹窗拖拽指令</li>-->
+                <!--<li>全局注册常用通用组件</li>-->
+                <!--<li>全局挂载字典标签组件</li>-->
+                <!--<li>ImageUpload组件支持多图片上传</li>-->
+                <!--<li>FileUpload组件支持多文件上传</li>-->
+                <!--<li>文件上传组件添加数量限制属性</li>-->
+                <!--<li>富文本编辑组件添加类型属性</li>-->
+                <!--<li>富文本组件工具栏配置视频</li>-->
+                <!--<li>封装通用iframe组件</li>-->
+                <!--<li>限制超级管理员不允许操作</li>-->
+                <!--<li>用户信息长度校验限制</li>-->
+                <!--<li>分页组件新增pagerCount属性</li>-->
+                <!--<li>添加bat脚本执行应用</li>-->
+                <!--<li>升级oshi到最新版本v5.7.4</li>-->
+                <!--<li>升级element-ui到最新版本2.15.2</li>-->
+                <!--<li>升级pagehelper到最新版1.3.1</li>-->
+                <!--<li>升级commons.io到最新版本v2.10.0</li>-->
+                <!--<li>升级commons.fileupload到最新版本v1.4</li>-->
+                <!--<li>升级swagger到最新版本v3.0.0</li>-->
+                <!--<li>修复关闭confirm提示框控制台报错问题</li>-->
+                <!--<li>修复存在的SQL注入漏洞问题</li>-->
+                <!--<li>定时任务屏蔽rmi远程调用</li>-->
+                <!--<li>修复用户搜索分页变量错误</li>-->
+                <!--<li>修复导出角色数据范围翻译缺少仅本人</li>-->
+                <!--<li>修复表单构建选择下拉选择控制台报错问题</li>-->
+                <!--<li>优化图片工具类读取文件</li>-->
+                <!--<li>其他细节优化</li>-->
+              <!--</ol>-->
+            <!--</el-collapse-item>-->
+            <!--<el-collapse-item title="v3.5.0 - 2021-05-25">-->
+              <!--<ol>-->
+                <!--<li>新增菜单导航显示风格TopNav(false为左侧导航菜单,true为顶部导航菜单)</li>-->
+                <!--<li>布局设置支持保存&重置配置</li>-->
+                <!--<li>修复树表数据显示不全&加载慢问题</li>-->
+                <!--<li>新增IE浏览器版本过低提示页面</li>-->
+                <!--<li>用户登录后记录最后登录IP&时间</li>-->
+                <!--<li>页面导出按钮点击之后添加遮罩</li>-->
+                <!--<li>富文本编辑器支持自定义上传地址</li>-->
+                <!--<li>富文本编辑组件新增readOnly属性</li>-->
+                <!--<li>页签TagsView新增关闭右侧功能</li>-->
+                <!--<li>显隐列组件加载初始默认隐藏列</li>-->
+                <!--<li>关闭头像上传窗口还原默认图片</li>-->
+                <!--<li>个人信息添加手机&邮箱重复验证</li>-->
+                <!--<li>代码生成模板导出按钮点击后添加遮罩</li>-->
+                <!--<li>代码生成模板树表操作列添加新增按钮</li>-->
+                <!--<li>代码生成模板修复主子表字段重名问题</li>-->
+                <!--<li>升级fastjson到最新版1.2.76</li>-->
+                <!--<li>升级druid到最新版本v1.2.6</li>-->
+                <!--<li>升级mybatis到最新版3.5.6 阻止远程代码执行漏洞</li>-->
+                <!--<li>升级oshi到最新版本v5.6.0</li>-->
+                <!--<li>velocity剔除commons-collections版本,防止3.2.1版本的反序列化漏洞</li>-->
+                <!--<li>数据监控页默认账户密码防止越权访问</li>-->
+                <!--<li>修复firefox下表单构建拖拽会新打卡一个选项卡</li>-->
+                <!--<li>修正后端导入表权限标识</li>-->
+                <!--<li>修正前端操作日志&登录日志权限标识</li>-->
+                <!--<li>设置Redis配置HashKey序列化</li>-->
+                <!--<li>删除操作日志记录信息</li>-->
+                <!--<li>上传媒体类型添加视频格式</li>-->
+                <!--<li>修复请求形参未传值记录日志异常问题</li>-->
+                <!--<li>优化xss校验json请求条件</li>-->
+                <!--<li>树级结构更新子节点使用replaceFirst</li>-->
+                <!--<li>优化ExcelUtil空值处理</li>-->
+                <!--<li>日志记录过滤BindingResult对象,防止异常</li>-->
+                <!--<li>修改主题后mini类型按钮无效问题</li>-->
+                <!--<li>优化通用下载完成后删除节点</li>-->
+                <!--<li>通用Controller添加响应返回消息</li>-->
+                <!--<li>其他细节优化</li>-->
+              <!--</ol>-->
+            <!--</el-collapse-item>-->
+            <!--<el-collapse-item title="v3.4.0 - 2021-02-22">-->
+              <!--<ol>-->
+                <!--<li>代码生成模板支持主子表</li>-->
+                <!--<li>表格右侧工具栏组件支持显隐列</li>-->
+                <!--<li>图片组件添加预览&移除功能</li>-->
+                <!--<li>Excel注解支持Image图片导出</li>-->
+                <!--<li>操作按钮组调整为朴素按钮样式</li>-->
+                <!--<li>代码生成支持文件上传组件</li>-->
+                <!--<li>代码生成日期控件区分范围</li>-->
+                <!--<li>代码生成数据库文本类型生成表单文本域</li>-->
+                <!--<li>用户手机邮箱&菜单组件修改允许空字符串</li>-->
+                <!--<li>升级SpringBoot到最新版本2.2.13 提升启动速度</li>-->
+                <!--<li>升级druid到最新版本v1.2.4</li>-->
+                <!--<li>升级fastjson到最新版1.2.75</li>-->
+                <!--<li>升级element-ui到最新版本2.15.0</li>-->
+                <!--<li>修复IE11浏览器报错问题</li>-->
+                <!--<li>优化多级菜单之间切换无法缓存的问题</li>-->
+                <!--<li>修复四级菜单无法显示问题</li>-->
+                <!--<li>修正侧边栏静态路由丢失问题</li>-->
+                <!--<li>修复角色管理-编辑角色-功能权限显示异常</li>-->
+                <!--<li>配置文件新增redis数据库索引属性</li>-->
+                <!--<li>权限工具类增加admin判断</li>-->
+                <!--<li>角色非自定义权限范围清空选择值</li>-->
+                <!--<li>修复导入数据为负浮点数时丢失精度问题</li>-->
+                <!--<li>移除path-to-regexp正则匹配插件</li>-->
+                <!--<li>修复生成树表代码异常</li>-->
+                <!--<li>修改ip字段长度防止ipv6地址长度不够</li>-->
+                <!--<li>防止get请求参数值为false或0等特殊值会导致无法正确的传参</li>-->
+                <!--<li>登录后push添加catch防止出现检查错误</li>-->
+                <!--<li>其他细节优化</li>-->
+              <!--</ol>-->
+            <!--</el-collapse-item>-->
+            <!--<el-collapse-item title="v3.3.0 - 2020-12-14">-->
+              <!--<ol>-->
+                <!--<li>新增缓存监控功能</li>-->
+                <!--<li>支持主题风格配置</li>-->
+                <!--<li>修复多级菜单之间切换无法缓存的问题</li>-->
+                <!--<li>多级菜单自动配置组件</li>-->
+                <!--<li>代码生成预览支持高亮显示</li>-->
+                <!--<li>支持Get请求映射Params参数</li>-->
+                <!--<li>删除用户和角色解绑关联</li>-->
+                <!--<li>去除用户手机邮箱部门必填验证</li>-->
+                <!--<li>Excel支持注解align对齐方式</li>-->
+                <!--<li>Excel支持导入Boolean型数据</li>-->
+                <!--<li>优化头像样式,鼠标移入悬停遮罩</li>-->
+                <!--<li>代码生成预览提供滚动机制</li>-->
+                <!--<li>代码生成删除多余的数字float类型</li>-->
+                <!--<li>修正转换字符串的目标字符集属性</li>-->
+                <!--<li>回显数据字典防止空值报错</li>-->
+                <!--<li>日志记录增加过滤多文件场景</li>-->
+                <!--<li>修改缓存Set方法可能导致嵌套的问题</li>-->
+                <!--<li>移除前端一些多余的依赖</li>-->
+                <!--<li>防止安全扫描YUI出现的风险提示</li>-->
+                <!--<li>修改node-sass为dart-sass</li>-->
+                <!--<li>升级SpringBoot到最新版本2.1.18</li>-->
+                <!--<li>升级poi到最新版本4.1.2</li>-->
+                <!--<li>升级oshi到最新版本v5.3.6</li>-->
+                <!--<li>升级bitwalker到最新版本1.21</li>-->
+                <!--<li>升级axios到最新版本0.21.0</li>-->
+                <!--<li>升级element-ui到最新版本2.14.1</li>-->
+                <!--<li>升级vue到最新版本2.6.12</li>-->
+                <!--<li>升级vuex到最新版本3.6.0</li>-->
+                <!--<li>升级vue-cli到版本4.5.9</li>-->
+                <!--<li>升级vue-router到最新版本3.4.9</li>-->
+                <!--<li>升级vue-cli到最新版本4.4.6</li>-->
+                <!--<li>升级vue-cropper到最新版本0.5.5</li>-->
+                <!--<li>升级clipboard到最新版本2.0.6</li>-->
+                <!--<li>升级core-js到最新版本3.8.1</li>-->
+                <!--<li>升级echarts到最新版本4.9.0</li>-->
+                <!--<li>升级file-saver到最新版本2.0.4</li>-->
+                <!--<li>升级fuse.js到最新版本6.4.3</li>-->
+                <!--<li>升级js-beautify到最新版本1.13.0</li>-->
+                <!--<li>升级js-cookie到最新版本2.2.1</li>-->
+                <!--<li>升级path-to-regexp到最新版本6.2.0</li>-->
+                <!--<li>升级quill到最新版本1.3.7</li>-->
+                <!--<li>升级screenfull到最新版本5.0.2</li>-->
+                <!--<li>升级sortablejs到最新版本1.10.2</li>-->
+                <!--<li>升级vuedraggable到最新版本2.24.3</li>-->
+                <!--<li>升级chalk到最新版本4.1.0</li>-->
+                <!--<li>升级eslint到最新版本7.15.0</li>-->
+                <!--<li>升级eslint-plugin-vue到最新版本7.2.0</li>-->
+                <!--<li>升级lint-staged到最新版本10.5.3</li>-->
+                <!--<li>升级runjs到最新版本4.4.2</li>-->
+                <!--<li>升级sass-loader到最新版本10.1.0</li>-->
+                <!--<li>升级script-ext-html-webpack-plugin到最新版本2.1.5</li>-->
+                <!--<li>升级svg-sprite-loader到最新版本5.1.1</li>-->
+                <!--<li>升级vue-template-compiler到最新版本2.6.12</li>-->
+                <!--<li>其他细节优化</li>-->
+              <!--</ol>-->
+            <!--</el-collapse-item>-->
+            <!--<el-collapse-item title="v3.2.1 - 2020-11-18">-->
+              <!--<ol>-->
+                <!--<li>阻止任意文件下载漏洞</li>-->
+                <!--<li>代码生成支持上传控件</li>-->
+                <!--<li>新增图片上传组件</li>-->
+                <!--<li>调整默认首页</li>-->
+                <!--<li>升级druid到最新版本v1.2.2</li>-->
+                <!--<li>mapperLocations配置支持分隔符</li>-->
+                <!--<li>权限信息调整</li>-->
+                <!--<li>调整sql默认时间</li>-->
+                <!--<li>解决代码生成没有bit类型的问题</li>-->
+                <!--<li>升级pagehelper到最新版1.3.0</li>-->
+              <!--</ol>-->
+            <!--</el-collapse-item>-->
+            <!--<el-collapse-item title="v3.2.0 - 2020-10-10">-->
+              <!--<ol>-->
+                <!--<li>升级springboot版本到2.1.17 提升安全性</li>-->
+                <!--<li>升级oshi到最新版本v5.2.5</li>-->
+                <!--<li>升级druid到最新版本v1.2.1</li>-->
+                <!--<li>升级jjwt到版本0.9.1</li>-->
+                <!--<li>升级fastjson到最新版1.2.74</li>-->
+                <!--<li>修改sass为node-sass,避免el-icon图标乱码</li>-->
+                <!--<li>代码生成支持同步数据库</li>-->
+                <!--<li>代码生成支持富文本控件</li>-->
+                <!--<li>代码生成页面时不忽略remark属性</li>-->
+                <!--<li>代码生成添加select必填选项</li>-->
+                <!--<li>Excel导出类型NUMERIC支持精度浮点类型</li>-->
+                <!--<li>Excel导出targetAttr优化获取值,防止get方法不规范</li>-->
+                <!--<li>Excel注解支持自动统计数据总和</li>-->
+                <!--<li>Excel注解支持设置BigDecimal精度&舍入规则</li>-->
+                <!--<li>菜单&数据权限新增(展开/折叠 全选/全不选 父子联动)</li>-->
+                <!--<li>允许用户分配到部门父节点</li>-->
+                <!--<li>菜单新增是否缓存keep-alive</li>-->
+                <!--<li>表格操作列间距调整</li>-->
+                <!--<li>限制系统内置参数不允许删除</li>-->
+                <!--<li>富文本组件优化,支持自定义高度&图片冲突问题</li>-->
+                <!--<li>富文本工具栏样式对齐</li>-->
+                <!--<li>导入excel整形值校验优化</li>-->
+                <!--<li>修复页签关闭所有时固定标签路由不刷新问题</li>-->
+                <!--<li>表单构建布局型组件新增按钮</li>-->
+                <!--<li>左侧菜单文字过长显示省略号</li>-->
+                <!--<li>修正根节点为子部门时,树状结构显示问题</li>-->
+                <!--<li>修正调用目标字符串最大长度</li>-->
+                <!--<li>修正菜单提示信息错误</li>-->
+                <!--<li>修正定时任务执行一次权限标识</li>-->
+                <!--<li>修正数据库字符串类型nvarchar</li>-->
+                <!--<li>优化递归子节点</li>-->
+                <!--<li>优化数据权限判断</li>-->
+                <!--<li>其他细节优化</li>-->
+              <!--</ol>-->
+            <!--</el-collapse-item>-->
 
-            <el-collapse-item title="v3.1.0 - 2020-08-13">
-              <ol>
-                <li>表格工具栏右侧添加刷新&显隐查询组件</li>
-                <li>后端支持CORS跨域请求</li>
-                <li>代码生成支持选择上级菜单</li>
-                <li>代码生成支持自定义路径</li>
-                <li>代码生成支持复选框</li>
-                <li>Excel导出导入支持dictType字典类型</li>
-                <li>Excel支持分割字符串组内容</li>
-                <li>验证码类型支持(数组计算、字符验证)</li>
-                <li>升级vue-cli版本到4.4.4</li>
-                <li>修改 node-sass 为 dart-sass</li>
-                <li>表单类型为Integer/Long设置整形默认值</li>
-                <li>代码生成器默认mapper路径与默认mapperScan路径不一致</li>
-                <li>优化防重复提交拦截器</li>
-                <li>优化上级菜单不能选择自己</li>
-                <li>修复角色的权限分配后,未实时生效问题</li>
-                <li>修复在线用户日志记录类型</li>
-                <li>修复富文本空格和缩进保存后不生效问题</li>
-                <li>修复在线用户判断逻辑</li>
-                <li>唯一限制条件只返回单条数据</li>
-                <li>添加获取当前的环境配置方法</li>
-                <li>超时登录后页面跳转到首页</li>
-                <li>全局异常状态汉化拦截处理</li>
-                <li>HTML过滤器改为将html转义</li>
-                <li>检查字符支持小数点&降级改成异常提醒</li>
-                <li>其他细节优化</li>
-              </ol>
-            </el-collapse-item>
+            <!--<el-collapse-item title="v3.1.0 - 2020-08-13">-->
+              <!--<ol>-->
+                <!--<li>表格工具栏右侧添加刷新&显隐查询组件</li>-->
+                <!--<li>后端支持CORS跨域请求</li>-->
+                <!--<li>代码生成支持选择上级菜单</li>-->
+                <!--<li>代码生成支持自定义路径</li>-->
+                <!--<li>代码生成支持复选框</li>-->
+                <!--<li>Excel导出导入支持dictType字典类型</li>-->
+                <!--<li>Excel支持分割字符串组内容</li>-->
+                <!--<li>验证码类型支持(数组计算、字符验证)</li>-->
+                <!--<li>升级vue-cli版本到4.4.4</li>-->
+                <!--<li>修改 node-sass 为 dart-sass</li>-->
+                <!--<li>表单类型为Integer/Long设置整形默认值</li>-->
+                <!--<li>代码生成器默认mapper路径与默认mapperScan路径不一致</li>-->
+                <!--<li>优化防重复提交拦截器</li>-->
+                <!--<li>优化上级菜单不能选择自己</li>-->
+                <!--<li>修复角色的权限分配后,未实时生效问题</li>-->
+                <!--<li>修复在线用户日志记录类型</li>-->
+                <!--<li>修复富文本空格和缩进保存后不生效问题</li>-->
+                <!--<li>修复在线用户判断逻辑</li>-->
+                <!--<li>唯一限制条件只返回单条数据</li>-->
+                <!--<li>添加获取当前的环境配置方法</li>-->
+                <!--<li>超时登录后页面跳转到首页</li>-->
+                <!--<li>全局异常状态汉化拦截处理</li>-->
+                <!--<li>HTML过滤器改为将html转义</li>-->
+                <!--<li>检查字符支持小数点&降级改成异常提醒</li>-->
+                <!--<li>其他细节优化</li>-->
+              <!--</ol>-->
+            <!--</el-collapse-item>-->
 
-            <el-collapse-item title="v3.0.0 - 2020-07-20">
-              <ol>
-                <li>单应用调整为多模块项目</li>
-                <li>升级element-ui版本到2.13.2</li>
-                <li>删除babel,提高编译速度。</li>
-                <li>新增菜单默认主类目</li>
-                <li>编码文件名修改为uuid方式</li>
-                <li>定时任务cron表达式验证</li>
-                <li>角色权限修改时已有权限未自动勾选异常修复</li>
-                <li>防止切换权限用户后登录出现404</li>
-                <li>Excel支持sort导出排序</li>
-                <li>创建用户不允许选择超级管理员角色</li>
-                <li>修复代码生成导入表结构出现异常页面不提醒问题</li>
-                <li>修复代码生成点击多次表修改数据不变化的问题</li>
-                <li>修复头像上传成功二次打开无法改变裁剪框大小和位置问题</li>
-                <li>修复布局为small者mini用户表单显示错位问题</li>
-                <li>修复热部署导致的强换异常问题</li>
-                <li>修改用户管理复选框宽度,防止部分浏览器出现省略号</li>
-                <li>IpUtils工具,清除Xss特殊字符,防止Xff注入攻击</li>
-                <li>生成domain 如果是浮点型 统一用BigDecimal</li>
-                <li>定时任务调整label-width,防止部署出现错位</li>
-                <li>调整表头固定列默认样式</li>
-                <li>代码生成模板调整,字段为String并且必填则加空串条件</li>
-                <li>代码生成字典Integer/Long使用parseInt</li>
-                <li>
-                  修复dict_sort不可update为0的问题&查询返回增加dict_sort升序排序
-                </li>
-                <li>修正岗位导出权限注解</li>
-                <li>禁止加密密文返回前端</li>
-                <li>修复代码生成页面中的查询条件创建时间未生效的问题</li>
-                <li>修复首页搜索菜单外链无法点击跳转问题</li>
-                <li>修复菜单管理选择图标,backspace删除时不过滤数据</li>
-                <li>用户管理部门分支节点不可检查&显示计数</li>
-                <li>数据范围过滤属性调整</li>
-                <li>其他细节优化</li>
-              </ol>
-            </el-collapse-item>
+            <!--<el-collapse-item title="v3.0.0 - 2020-07-20">-->
+              <!--<ol>-->
+                <!--<li>单应用调整为多模块项目</li>-->
+                <!--<li>升级element-ui版本到2.13.2</li>-->
+                <!--<li>删除babel,提高编译速度。</li>-->
+                <!--<li>新增菜单默认主类目</li>-->
+                <!--<li>编码文件名修改为uuid方式</li>-->
+                <!--<li>定时任务cron表达式验证</li>-->
+                <!--<li>角色权限修改时已有权限未自动勾选异常修复</li>-->
+                <!--<li>防止切换权限用户后登录出现404</li>-->
+                <!--<li>Excel支持sort导出排序</li>-->
+                <!--<li>创建用户不允许选择超级管理员角色</li>-->
+                <!--<li>修复代码生成导入表结构出现异常页面不提醒问题</li>-->
+                <!--<li>修复代码生成点击多次表修改数据不变化的问题</li>-->
+                <!--<li>修复头像上传成功二次打开无法改变裁剪框大小和位置问题</li>-->
+                <!--<li>修复布局为small者mini用户表单显示错位问题</li>-->
+                <!--<li>修复热部署导致的强换异常问题</li>-->
+                <!--<li>修改用户管理复选框宽度,防止部分浏览器出现省略号</li>-->
+                <!--<li>IpUtils工具,清除Xss特殊字符,防止Xff注入攻击</li>-->
+                <!--<li>生成domain 如果是浮点型 统一用BigDecimal</li>-->
+                <!--<li>定时任务调整label-width,防止部署出现错位</li>-->
+                <!--<li>调整表头固定列默认样式</li>-->
+                <!--<li>代码生成模板调整,字段为String并且必填则加空串条件</li>-->
+                <!--<li>代码生成字典Integer/Long使用parseInt</li>-->
+                <!--<li>-->
+                  <!--修复dict_sort不可update为0的问题&查询返回增加dict_sort升序排序-->
+                <!--</li>-->
+                <!--<li>修正岗位导出权限注解</li>-->
+                <!--<li>禁止加密密文返回前端</li>-->
+                <!--<li>修复代码生成页面中的查询条件创建时间未生效的问题</li>-->
+                <!--<li>修复首页搜索菜单外链无法点击跳转问题</li>-->
+                <!--<li>修复菜单管理选择图标,backspace删除时不过滤数据</li>-->
+                <!--<li>用户管理部门分支节点不可检查&显示计数</li>-->
+                <!--<li>数据范围过滤属性调整</li>-->
+                <!--<li>其他细节优化</li>-->
+              <!--</ol>-->
+            <!--</el-collapse-item>-->
 
-            <el-collapse-item title="v2.3.0 - 2020-06-01">
-              <ol>
-                <li>升级fastjson到最新版1.2.70 修复高危安全漏洞</li>
-                <li>dev启动默认打开浏览器</li>
-                <li>vue-cli使用默认source-map</li>
-                <li>slidebar eslint报错优化</li>
-                <li>当tags-view滚动关闭右键菜单</li>
-                <li>字典管理添加缓存读取</li>
-                <li>参数管理支持缓存操作</li>
-                <li>支持一级菜单(和主页同级)在main区域显示</li>
-                <li>限制外链地址必须以http(s)开头</li>
-                <li>tagview & sidebar 主题颜色与element ui(全局)同步</li>
-                <li>修改数据源类型优先级,先根据方法,再根据类</li>
-                <li>支持是否需要设置token属性,自定义返回码消息。</li>
-                <li>swagger请求前缀加入配置。</li>
-                <li>登录地点设置内容过长则隐藏显示</li>
-                <li>修复定时任务执行一次按钮后不提示消息问题</li>
-                <li>修改上级部门(选择项排除本身和下级)</li>
-                <li>通用http发送方法增加参数 contentType 编码类型</li>
-                <li>更换IP地址查询接口</li>
-                <li>修复页签变量undefined</li>
-                <li>添加校验部门包含未停用的子部门</li>
-                <li>修改定时任务详情下次执行时间日期显示错误</li>
-                <li>角色管理查询设置默认排序字段</li>
-                <li>swagger添加enable参数控制是否启用</li>
-                <li>只对json类型请求构建可重复读取inputStream的request</li>
-                <li>修改代码生成字典字段int类型没有自动选中问题</li>
-                <li>vuex用户名取值修正</li>
-                <li>表格树模板去掉多余的)</li>
-                <li>代码生成序号修正</li>
-                <li>全屏情况下不调整上外边距</li>
-                <li>代码生成Date字段添加默认格式</li>
-                <li>用户管理角色选择权限控制</li>
-                <li>修复路由懒加载报错问题</li>
-                <li>模板sql.vm添加菜单状态</li>
-                <li>设置用户名称不能修改</li>
-                <li>dialog添加append-to-body属性,防止ie遮罩</li>
-                <li>菜单区分状态和显示隐藏功能</li>
-                <li>升级fastjson到最新版1.2.68 修复安全加固</li>
-                <li>修复代码生成如果选择字典类型缺失逗号问题</li>
-                <li>登录请求params更换为data,防止暴露url</li>
-                <li>日志返回时间格式处理</li>
-                <li>添加handle控制允许拖动的元素</li>
-                <li>布局设置点击扩大范围</li>
-                <li>代码生成列属性排序查询</li>
-                <li>代码生成列支持拖动排序</li>
-                <li>修复时间格式不支持ios问题</li>
-                <li>表单构建添加父级class,防止冲突</li>
-                <li>定时任务并发属性修正</li>
-                <li>角色禁用&菜单隐藏不查询权限</li>
-                <li>其他细节优化</li>
-              </ol>
-            </el-collapse-item>
+            <!--<el-collapse-item title="v2.3.0 - 2020-06-01">-->
+              <!--<ol>-->
+                <!--<li>升级fastjson到最新版1.2.70 修复高危安全漏洞</li>-->
+                <!--<li>dev启动默认打开浏览器</li>-->
+                <!--<li>vue-cli使用默认source-map</li>-->
+                <!--<li>slidebar eslint报错优化</li>-->
+                <!--<li>当tags-view滚动关闭右键菜单</li>-->
+                <!--<li>字典管理添加缓存读取</li>-->
+                <!--<li>参数管理支持缓存操作</li>-->
+                <!--<li>支持一级菜单(和主页同级)在main区域显示</li>-->
+                <!--<li>限制外链地址必须以http(s)开头</li>-->
+                <!--<li>tagview & sidebar 主题颜色与element ui(全局)同步</li>-->
+                <!--<li>修改数据源类型优先级,先根据方法,再根据类</li>-->
+                <!--<li>支持是否需要设置token属性,自定义返回码消息。</li>-->
+                <!--<li>swagger请求前缀加入配置。</li>-->
+                <!--<li>登录地点设置内容过长则隐藏显示</li>-->
+                <!--<li>修复定时任务执行一次按钮后不提示消息问题</li>-->
+                <!--<li>修改上级部门(选择项排除本身和下级)</li>-->
+                <!--<li>通用http发送方法增加参数 contentType 编码类型</li>-->
+                <!--<li>更换IP地址查询接口</li>-->
+                <!--<li>修复页签变量undefined</li>-->
+                <!--<li>添加校验部门包含未停用的子部门</li>-->
+                <!--<li>修改定时任务详情下次执行时间日期显示错误</li>-->
+                <!--<li>角色管理查询设置默认排序字段</li>-->
+                <!--<li>swagger添加enable参数控制是否启用</li>-->
+                <!--<li>只对json类型请求构建可重复读取inputStream的request</li>-->
+                <!--<li>修改代码生成字典字段int类型没有自动选中问题</li>-->
+                <!--<li>vuex用户名取值修正</li>-->
+                <!--<li>表格树模板去掉多余的)</li>-->
+                <!--<li>代码生成序号修正</li>-->
+                <!--<li>全屏情况下不调整上外边距</li>-->
+                <!--<li>代码生成Date字段添加默认格式</li>-->
+                <!--<li>用户管理角色选择权限控制</li>-->
+                <!--<li>修复路由懒加载报错问题</li>-->
+                <!--<li>模板sql.vm添加菜单状态</li>-->
+                <!--<li>设置用户名称不能修改</li>-->
+                <!--<li>dialog添加append-to-body属性,防止ie遮罩</li>-->
+                <!--<li>菜单区分状态和显示隐藏功能</li>-->
+                <!--<li>升级fastjson到最新版1.2.68 修复安全加固</li>-->
+                <!--<li>修复代码生成如果选择字典类型缺失逗号问题</li>-->
+                <!--<li>登录请求params更换为data,防止暴露url</li>-->
+                <!--<li>日志返回时间格式处理</li>-->
+                <!--<li>添加handle控制允许拖动的元素</li>-->
+                <!--<li>布局设置点击扩大范围</li>-->
+                <!--<li>代码生成列属性排序查询</li>-->
+                <!--<li>代码生成列支持拖动排序</li>-->
+                <!--<li>修复时间格式不支持ios问题</li>-->
+                <!--<li>表单构建添加父级class,防止冲突</li>-->
+                <!--<li>定时任务并发属性修正</li>-->
+                <!--<li>角色禁用&菜单隐藏不查询权限</li>-->
+                <!--<li>其他细节优化</li>-->
+              <!--</ol>-->
+            <!--</el-collapse-item>-->
 
-            <el-collapse-item title="v2.2.0 - 2020-03-18">
-              <ol>
-                <li>系统监控新增定时任务功能</li>
-                <li>添加一个打包Web工程bat</li>
-                <li>修复页签鼠标滚轮按下的时候,可以关闭不可关闭的tag</li>
-                <li>修复点击退出登录有时会无提示问题</li>
-                <li>修复防重复提交注解无效问题</li>
-                <li>修复通知公告批量删除异常问题</li>
-                <li>添加菜单时路由地址必填限制</li>
-                <li>代码生成字段描述可编辑</li>
-                <li>修复用户修改个人信息导致缓存不过期问题</li>
-                <li>个人信息创建时间获取正确属性值</li>
-                <li>操作日志详细显示正确类型</li>
-                <li>导入表单击行数据时选中对应的复选框</li>
-                <li>批量替换表前缀逻辑调整</li>
-                <li>固定重定向路径表达式</li>
-                <li>升级element-ui版本到2.13.0</li>
-                <li>操作日志排序调整</li>
-                <li>修复charts切换侧边栏或者缩放窗口显示bug</li>
-                <li>其他细节优化</li>
-              </ol>
-            </el-collapse-item>
+            <!--<el-collapse-item title="v2.2.0 - 2020-03-18">-->
+              <!--<ol>-->
+                <!--<li>系统监控新增定时任务功能</li>-->
+                <!--<li>添加一个打包Web工程bat</li>-->
+                <!--<li>修复页签鼠标滚轮按下的时候,可以关闭不可关闭的tag</li>-->
+                <!--<li>修复点击退出登录有时会无提示问题</li>-->
+                <!--<li>修复防重复提交注解无效问题</li>-->
+                <!--<li>修复通知公告批量删除异常问题</li>-->
+                <!--<li>添加菜单时路由地址必填限制</li>-->
+                <!--<li>代码生成字段描述可编辑</li>-->
+                <!--<li>修复用户修改个人信息导致缓存不过期问题</li>-->
+                <!--<li>个人信息创建时间获取正确属性值</li>-->
+                <!--<li>操作日志详细显示正确类型</li>-->
+                <!--<li>导入表单击行数据时选中对应的复选框</li>-->
+                <!--<li>批量替换表前缀逻辑调整</li>-->
+                <!--<li>固定重定向路径表达式</li>-->
+                <!--<li>升级element-ui版本到2.13.0</li>-->
+                <!--<li>操作日志排序调整</li>-->
+                <!--<li>修复charts切换侧边栏或者缩放窗口显示bug</li>-->
+                <!--<li>其他细节优化</li>-->
+              <!--</ol>-->
+            <!--</el-collapse-item>-->
 
-            <el-collapse-item title="v2.1.0 - 2020-02-24">
-              <ol>
-                <li>新增表单构建</li>
-                <li>代码生成支持树表结构</li>
-                <li>新增用户导入</li>
-                <li>修复动态加载路由页面刷新问题</li>
-                <li>修复地址开关无效问题</li>
-                <li>汉化错误提示页面</li>
-                <li>代码生成已知问题修改</li>
-                <li>修复多数据源下配置关闭出现异常处理</li>
-                <li>添加HTML过滤器,用于去除XSS漏洞隐患</li>
-                <li>修复上传头像控制台出现异常</li>
-                <li>修改用户管理分页不正确的问题</li>
-                <li>修复验证码记录提示错误</li>
-                <li>修复request.js缺少Message引用</li>
-                <li>修复表格时间为空出现的异常</li>
-                <li>添加Jackson日期反序列化时区配置</li>
-                <li>调整根据用户权限加载菜单数据树形结构</li>
-                <li>调整成功登录不恢复按钮,防止多次点击</li>
-                <li>修改用户个人资料同步缓存信息</li>
-                <li>修复页面同时出现el-upload和Editor不显示处理</li>
-                <li>修复在角色管理页修改菜单权限偶尔未选中问题</li>
-                <li>配置文件新增redis密码属性</li>
-                <li>设置mybatis全局的配置文件</li>
-                <li>其他细节优化</li>
-              </ol>
-            </el-collapse-item>
+            <!--<el-collapse-item title="v2.1.0 - 2020-02-24">-->
+              <!--<ol>-->
+                <!--<li>新增表单构建</li>-->
+                <!--<li>代码生成支持树表结构</li>-->
+                <!--<li>新增用户导入</li>-->
+                <!--<li>修复动态加载路由页面刷新问题</li>-->
+                <!--<li>修复地址开关无效问题</li>-->
+                <!--<li>汉化错误提示页面</li>-->
+                <!--<li>代码生成已知问题修改</li>-->
+                <!--<li>修复多数据源下配置关闭出现异常处理</li>-->
+                <!--<li>添加HTML过滤器,用于去除XSS漏洞隐患</li>-->
+                <!--<li>修复上传头像控制台出现异常</li>-->
+                <!--<li>修改用户管理分页不正确的问题</li>-->
+                <!--<li>修复验证码记录提示错误</li>-->
+                <!--<li>修复request.js缺少Message引用</li>-->
+                <!--<li>修复表格时间为空出现的异常</li>-->
+                <!--<li>添加Jackson日期反序列化时区配置</li>-->
+                <!--<li>调整根据用户权限加载菜单数据树形结构</li>-->
+                <!--<li>调整成功登录不恢复按钮,防止多次点击</li>-->
+                <!--<li>修改用户个人资料同步缓存信息</li>-->
+                <!--<li>修复页面同时出现el-upload和Editor不显示处理</li>-->
+                <!--<li>修复在角色管理页修改菜单权限偶尔未选中问题</li>-->
+                <!--<li>配置文件新增redis密码属性</li>-->
+                <!--<li>设置mybatis全局的配置文件</li>-->
+                <!--<li>其他细节优化</li>-->
+              <!--</ol>-->
+            <!--</el-collapse-item>-->
 
-            <el-collapse-item title="v2.0.0 - 2019-12-02">
-              <ol>
-                <li>新增代码生成</li>
-                <li>新增@RepeatSubmit注解,防止重复提交</li>
-                <li>新增菜单主目录添加/删除操作</li>
-                <li>日志记录过滤特殊对象,防止转换异常</li>
-                <li>修改代码生成路由脚本错误</li>
-                <li>用户上传头像实时同步缓存,无需重新登录</li>
-                <li>调整切换页签后不重新加载数据</li>
-                <li>添加jsencrypt实现参数的前端加密</li>
-                <li>系统退出删除用户缓存记录</li>
-                <li>其他细节优化</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v1.1.0 - 2019-11-11">
-              <ol>
-                <li>新增在线用户管理</li>
-                <li>新增按钮组功能实现(批量删除、导出、清空)</li>
-                <li>新增查询条件重置按钮</li>
-                <li>新增Swagger全局Token配置</li>
-                <li>新增后端参数校验</li>
-                <li>修复字典管理页面的日期查询异常</li>
-                <li>修改时间函数命名防止冲突</li>
-                <li>去除菜单上级校验,默认为顶级</li>
-                <li>修复用户密码无法修改问题</li>
-                <li>修复菜单类型为按钮时不显示权限标识</li>
-                <li>其他细节优化</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v1.0.0 - 2019-10-08">
-              <ol>
-                <li>若依前后端分离系统正式发布</li>
-              </ol>
-            </el-collapse-item>
-          </el-collapse>
-        </el-card>
-      </el-col>
-      <el-col :xs="24" :sm="24" :md="12" :lg="8">
-        <el-card class="update-log">
-          <div slot="header" class="clearfix">
-            <span>捐赠支持</span>
-          </div>
-          <div class="body">
-            <img
-              src="@/assets/images/pay.png"
-              alt="donate"
-              width="100%"
-            />
-            <span style="display: inline-block; height: 30px; line-height: 30px"
-              >你可以请作者喝杯咖啡表示鼓励</span
-            >
-          </div>
-        </el-card>
-      </el-col>
-    </el-row>
+            <!--<el-collapse-item title="v2.0.0 - 2019-12-02">-->
+              <!--<ol>-->
+                <!--<li>新增代码生成</li>-->
+                <!--<li>新增@RepeatSubmit注解,防止重复提交</li>-->
+                <!--<li>新增菜单主目录添加/删除操作</li>-->
+                <!--<li>日志记录过滤特殊对象,防止转换异常</li>-->
+                <!--<li>修改代码生成路由脚本错误</li>-->
+                <!--<li>用户上传头像实时同步缓存,无需重新登录</li>-->
+                <!--<li>调整切换页签后不重新加载数据</li>-->
+                <!--<li>添加jsencrypt实现参数的前端加密</li>-->
+                <!--<li>系统退出删除用户缓存记录</li>-->
+                <!--<li>其他细节优化</li>-->
+              <!--</ol>-->
+            <!--</el-collapse-item>-->
+            <!--<el-collapse-item title="v1.1.0 - 2019-11-11">-->
+              <!--<ol>-->
+                <!--<li>新增在线用户管理</li>-->
+                <!--<li>新增按钮组功能实现(批量删除、导出、清空)</li>-->
+                <!--<li>新增查询条件重置按钮</li>-->
+                <!--<li>新增Swagger全局Token配置</li>-->
+                <!--<li>新增后端参数校验</li>-->
+                <!--<li>修复字典管理页面的日期查询异常</li>-->
+                <!--<li>修改时间函数命名防止冲突</li>-->
+                <!--<li>去除菜单上级校验,默认为顶级</li>-->
+                <!--<li>修复用户密码无法修改问题</li>-->
+                <!--<li>修复菜单类型为按钮时不显示权限标识</li>-->
+                <!--<li>其他细节优化</li>-->
+              <!--</ol>-->
+            <!--</el-collapse-item>-->
+            <!--<el-collapse-item title="v1.0.0 - 2019-10-08">-->
+              <!--<ol>-->
+                <!--<li>若依前后端分离系统正式发布</li>-->
+              <!--</ol>-->
+            <!--</el-collapse-item>-->
+          <!--</el-collapse>-->
+        <!--</el-card>-->
+      <!--</el-col>-->
+      <!--<el-col :xs="24" :sm="24" :md="12" :lg="8">-->
+        <!--<el-card class="update-log">-->
+          <!--<div slot="header" class="clearfix">-->
+            <!--<span>捐赠支持</span>-->
+          <!--</div>-->
+          <!--<div class="body">-->
+            <!--<img-->
+              <!--src="@/assets/images/pay.png"-->
+              <!--alt="donate"-->
+              <!--width="100%"-->
+            <!--/>-->
+            <!--<span style="display: inline-block; height: 30px; line-height: 30px"-->
+              <!--&gt;你可以请作者喝杯咖啡表示鼓励</span-->
+            <!--&gt;-->
+          <!--</div>-->
+        <!--</el-card>-->
+      <!--</el-col>-->
+    <!--</el-row>-->
   </div>
 </template>
 

+ 15 - 15
ruoyi-ui/src/views/login.vue

@@ -1,7 +1,7 @@
 <template>
   <div class="login">
     <el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form">
-      <h3 class="title">若依后台管理系统</h3>
+      <h3 class="title">RC审计系统</h3>
       <el-form-item prop="username">
         <el-input
           v-model="loginForm.username"
@@ -23,20 +23,20 @@
           <svg-icon slot="prefix" icon-class="password" class="el-input__icon input-icon" />
         </el-input>
       </el-form-item>
-      <el-form-item prop="code" v-if="captchaEnabled">
-        <el-input
-          v-model="loginForm.code"
-          auto-complete="off"
-          placeholder="验证码"
-          style="width: 63%"
-          @keyup.enter.native="handleLogin"
-        >
-          <svg-icon slot="prefix" icon-class="validCode" class="el-input__icon input-icon" />
-        </el-input>
-        <div class="login-code">
-          <img :src="codeUrl" @click="getCode" class="login-code-img"/>
-        </div>
-      </el-form-item>
+      <!--<el-form-item prop="code" v-if="captchaEnabled">-->
+        <!--<el-input-->
+          <!--v-model="loginForm.code"-->
+          <!--auto-complete="off"-->
+          <!--placeholder="验证码"-->
+          <!--style="width: 63%"-->
+          <!--@keyup.enter.native="handleLogin"-->
+        <!--&gt;-->
+          <!--<svg-icon slot="prefix" icon-class="validCode" class="el-input__icon input-icon" />-->
+        <!--</el-input>-->
+        <!--<div class="login-code">-->
+          <!--<img :src="codeUrl" @click="getCode" class="login-code-img"/>-->
+        <!--</div>-->
+      <!--</el-form-item>-->
       <el-checkbox v-model="loginForm.rememberMe" style="margin:0px 0px 25px 0px;">记住密码</el-checkbox>
       <el-form-item style="width:100%;">
         <el-button

+ 326 - 0
ruoyi-ui/src/views/rc/audit/index.vue

@@ -0,0 +1,326 @@
+<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="year">
+        <el-date-picker clearable
+                        v-model="queryParams.year"
+                        type="year"
+                        value-format="yyyy"
+                        placeholder="请选择年份">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="预审时间" prop="preAuditTime">
+        <el-date-picker clearable
+          v-model="queryParams.preAuditTime"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="请选择预审时间">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="审计时间" prop="auditTime">
+        <el-date-picker clearable
+          v-model="queryParams.auditTime"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="请选择审计时间">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="装置id" prop="deptId">
+        <el-input
+          v-model="queryParams.deptId"
+          placeholder="请输入装置id"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @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="['rc:audit:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['rc:audit:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['rc:audit:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['rc:audit:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table border v-loading="loading" :data="auditList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="id" align="center" prop="id" />
+      <el-table-column label="年份" align="center" prop="year" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.year, '{y}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="预审时间" align="center" prop="preAuditTime" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.preAuditTime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="审计时间" align="center" prop="auditTime" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.auditTime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="审计结果" align="center" prop="auditResult" />
+      <el-table-column label="备注" align="center" prop="remarks" />
+      <el-table-column label="装置id" align="center" prop="deptId" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['rc:audit:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['rc:audit:remove']"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改审计记录对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="年份" prop="year">
+          <el-date-picker clearable
+                          v-model="form.year"
+                          type="year"
+                          value-format="yyyy"
+                          placeholder="请选择年份">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="预审时间" prop="preAuditTime">
+          <el-date-picker clearable
+            v-model="form.preAuditTime"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="请选择预审时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="审计时间" prop="auditTime">
+          <el-date-picker clearable
+            v-model="form.auditTime"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="请选择审计时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="审计结果" prop="auditResult">
+          <el-input v-model="form.auditResult" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+        <el-form-item label="备注" prop="remarks">
+          <el-input v-model="form.remarks" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+        <el-form-item label="装置id" prop="deptId">
+          <el-input v-model="form.deptId" placeholder="请输入装置id" />
+        </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 { listAudit, getAudit, delAudit, addAudit, updateAudit } from "@/api/rc/audit";
+
+export default {
+  name: "Audit",
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 审计记录表格数据
+      auditList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        year: null,
+        preAuditTime: null,
+        auditTime: null,
+        auditResult: null,
+        remarks: null,
+        deptId: null
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询审计记录列表 */
+    getList() {
+      this.loading = true;
+      listAudit(this.queryParams).then(response => {
+        this.auditList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        year: null,
+        preAuditTime: null,
+        auditTime: null,
+        auditResult: null,
+        remarks: null,
+        deptId: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加审计记录";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getAudit(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改审计记录";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateAudit(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addAudit(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('是否确认删除审计记录编号为"' + ids + '"的数据项?').then(function() {
+        return delAudit(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('rc/audit/export', {
+        ...this.queryParams
+      }, `audit_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>

+ 265 - 0
ruoyi-ui/src/views/rc/chap/index.vue

@@ -0,0 +1,265 @@
+<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="审计记录id" prop="auditId">
+        <el-input
+          v-model="queryParams.auditId"
+          placeholder="请输入审计记录id"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="装置id" prop="deptId">
+        <el-input
+          v-model="queryParams.deptId"
+          placeholder="请输入装置id"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @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="['rc:chap:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['rc:chap:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['rc:chap:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['rc:chap:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table border v-loading="loading" :data="chapList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="id" align="center" prop="id" />
+      <el-table-column label="审计记录id" align="center" prop="auditId" />
+      <el-table-column label="名称" align="center" prop="name" />
+      <el-table-column label="装置id" align="center" prop="deptId" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['rc:chap:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['rc:chap:remove']"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改问卷章节对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="审计记录id" prop="auditId">
+          <el-input v-model="form.auditId" placeholder="请输入审计记录id" />
+        </el-form-item>
+        <el-form-item label="名称" prop="name">
+          <el-input v-model="form.name" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+        <el-form-item label="装置id" prop="deptId">
+          <el-input v-model="form.deptId" placeholder="请输入装置id" />
+        </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 { listChap, getChap, delChap, addChap, updateChap } from "@/api/rc/chap";
+
+export default {
+  name: "Chap",
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 问卷章节表格数据
+      chapList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        auditId: null,
+        name: null,
+        deptId: null
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询问卷章节列表 */
+    getList() {
+      this.loading = true;
+      listChap(this.queryParams).then(response => {
+        this.chapList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        auditId: null,
+        name: null,
+        deptId: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加问卷章节";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getChap(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改问卷章节";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateChap(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addChap(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('是否确认删除问卷章节编号为"' + ids + '"的数据项?').then(function() {
+        return delChap(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('rc/chap/export', {
+        ...this.queryParams
+      }, `chap_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>

+ 274 - 0
ruoyi-ui/src/views/rc/deptinfo/index.vue

@@ -0,0 +1,274 @@
+<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="装置id" prop="deptId">
+        <el-input
+          v-model="queryParams.deptId"
+          placeholder="请输入装置id"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="年份" prop="year">
+        <el-date-picker clearable
+          v-model="queryParams.year"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="请选择年份">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @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="['rc:deptinfo:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['rc:deptinfo:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['rc:deptinfo:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['rc:deptinfo:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table border v-loading="loading" :data="deptinfoList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="id" align="center" prop="id" />
+      <el-table-column label="装置信息" align="center" prop="deptInfo" />
+      <el-table-column label="装置id" align="center" prop="deptId" />
+      <el-table-column label="年份" align="center" prop="year" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.year, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['rc:deptinfo:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['rc:deptinfo:remove']"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改装置信息对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="装置信息" prop="deptInfo">
+          <el-input v-model="form.deptInfo" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+        <el-form-item label="装置id" prop="deptId">
+          <el-input v-model="form.deptId" placeholder="请输入装置id" />
+        </el-form-item>
+        <el-form-item label="年份" prop="year">
+          <el-date-picker clearable
+            v-model="form.year"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="请选择年份">
+          </el-date-picker>
+        </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 { listDeptinfo, getDeptinfo, delDeptinfo, addDeptinfo, updateDeptinfo } from "@/api/rc/deptinfo";
+
+export default {
+  name: "Deptinfo",
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 装置信息表格数据
+      deptinfoList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        deptInfo: null,
+        deptId: null,
+        year: null
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询装置信息列表 */
+    getList() {
+      this.loading = true;
+      listDeptinfo(this.queryParams).then(response => {
+        this.deptinfoList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        deptInfo: null,
+        deptId: null,
+        year: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加装置信息";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getDeptinfo(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改装置信息";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateDeptinfo(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addDeptinfo(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('是否确认删除装置信息编号为"' + ids + '"的数据项?').then(function() {
+        return delDeptinfo(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('rc/deptinfo/export', {
+        ...this.queryParams
+      }, `deptinfo_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>

+ 302 - 0
ruoyi-ui/src/views/rc/meeting/index.vue

@@ -0,0 +1,302 @@
+<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="year">
+        <el-date-picker clearable
+                        v-model="queryParams.year"
+                        type="year"
+                        value-format="yyyy"
+                        placeholder="请选择年份">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="涉及code" prop="secSubChapId">
+        <el-input
+          v-model="queryParams.secSubChapId"
+          placeholder="请输入涉及code"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="负责人" prop="personInCharge">
+        <el-input
+          v-model="queryParams.personInCharge"
+          placeholder="请输入负责人"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="装置id" prop="deptId">
+        <el-input
+          v-model="queryParams.deptId"
+          placeholder="请输入装置id"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @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="['rc:meeting:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['rc:meeting:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['rc:meeting:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['rc:meeting:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table border v-loading="loading" :data="meetingList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="id" align="center" prop="id" />
+      <el-table-column label="年份" align="center" prop="year" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.year, '{y}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="涉及code" align="center" prop="secSubChapId" />
+      <el-table-column label="负责人" align="center" prop="personInCharge" />
+      <el-table-column label="备注" align="center" prop="remarks" />
+      <el-table-column label="装置id" align="center" prop="deptId" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['rc:meeting:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['rc:meeting:remove']"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改会议对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="年份" prop="year">
+          <el-date-picker clearable
+                          v-model="form.year"
+                          type="year"
+                          value-format="yyyy"
+                          placeholder="请选择年份">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="涉及code" prop="secSubChapId">
+          <el-input v-model="form.secSubChapId" placeholder="请输入涉及code" />
+        </el-form-item>
+        <el-form-item label="负责人" prop="personInCharge">
+          <el-input v-model="form.personInCharge" placeholder="请输入负责人" />
+        </el-form-item>
+        <el-form-item label="备注" prop="remarks">
+          <el-input v-model="form.remarks" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+        <el-form-item label="装置id" prop="deptId">
+          <el-input v-model="form.deptId" placeholder="请输入装置id" />
+        </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 { listMeeting, getMeeting, delMeeting, addMeeting, updateMeeting } from "@/api/rc/meeting";
+
+export default {
+  name: "Meeting",
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 会议表格数据
+      meetingList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        year: null,
+        secSubChapId: null,
+        personInCharge: null,
+        remarks: null,
+        deptId: null
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询会议列表 */
+    getList() {
+      this.loading = true;
+      listMeeting(this.queryParams).then(response => {
+        this.meetingList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        year: null,
+        secSubChapId: null,
+        personInCharge: null,
+        remarks: null,
+        deptId: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加会议";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getMeeting(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改会议";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateMeeting(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addMeeting(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('是否确认删除会议编号为"' + ids + '"的数据项?').then(function() {
+        return delMeeting(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('rc/meeting/export', {
+        ...this.queryParams
+      }, `meeting_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>

+ 402 - 0
ruoyi-ui/src/views/rc/openitem/index.vue

@@ -0,0 +1,402 @@
+<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="涉及整改code" prop="secSubChapId">
+        <el-input
+          v-model="queryParams.secSubChapId"
+          placeholder="请输入涉及整改code"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="开项级别" prop="level">
+        <el-input
+          v-model="queryParams.level"
+          placeholder="请输入开项级别"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="开项时间" prop="openTime">
+        <el-date-picker clearable
+          v-model="queryParams.openTime"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="请选择开项时间">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="闭项时间" prop="closeTime">
+        <el-date-picker clearable
+          v-model="queryParams.closeTime"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="请选择闭项时间">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="负责人" prop="personInCharge">
+        <el-input
+          v-model="queryParams.personInCharge"
+          placeholder="请输入负责人"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="审核人" prop="reviewer">
+        <el-input
+          v-model="queryParams.reviewer"
+          placeholder="请输入审核人"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="责任人确认" prop="result">
+        <el-input
+          v-model="queryParams.result"
+          placeholder="请输入责任人确认"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="截至时间" prop="deadline">
+        <el-date-picker clearable
+          v-model="queryParams.deadline"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="请选择截至时间">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="装置id" prop="deptId">
+        <el-input
+          v-model="queryParams.deptId"
+          placeholder="请输入装置id"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @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="['rc:openitem:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['rc:openitem:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['rc:openitem:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['rc:openitem:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table border v-loading="loading" :data="openitemList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="id" align="center" prop="id" />
+      <el-table-column label="问题类型" align="center" prop="type" />
+      <el-table-column label="涉及整改code" align="center" prop="secSubChapId" />
+      <el-table-column label="存在问题描述" align="center" prop="description" />
+      <el-table-column label="开项级别" align="center" prop="level" />
+      <el-table-column label="开项时间" align="center" prop="openTime" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.openTime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="闭项时间" align="center" prop="closeTime" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.closeTime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="问题处理状态" align="center" prop="status" />
+      <el-table-column label="负责人" align="center" prop="personInCharge" />
+      <el-table-column label="审核人" align="center" prop="reviewer" />
+      <el-table-column label="责任人确认" align="center" prop="result" />
+      <el-table-column label="截至时间" align="center" prop="deadline" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.deadline, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="备注" align="center" prop="remarks" />
+      <el-table-column label="装置id" align="center" prop="deptId" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['rc:openitem:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['rc:openitem:remove']"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改开项对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="涉及整改code" prop="secSubChapId">
+          <el-input v-model="form.secSubChapId" placeholder="请输入涉及整改code" />
+        </el-form-item>
+        <el-form-item label="存在问题描述" prop="description">
+          <el-input v-model="form.description" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+        <el-form-item label="开项级别" prop="level">
+          <el-input v-model="form.level" placeholder="请输入开项级别" />
+        </el-form-item>
+        <el-form-item label="开项时间" prop="openTime">
+          <el-date-picker clearable
+            v-model="form.openTime"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="请选择开项时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="闭项时间" prop="closeTime">
+          <el-date-picker clearable
+            v-model="form.closeTime"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="请选择闭项时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="负责人" prop="personInCharge">
+          <el-input v-model="form.personInCharge" placeholder="请输入负责人" />
+        </el-form-item>
+        <el-form-item label="审核人" prop="reviewer">
+          <el-input v-model="form.reviewer" placeholder="请输入审核人" />
+        </el-form-item>
+        <el-form-item label="责任人确认" prop="result">
+          <el-input v-model="form.result" placeholder="请输入责任人确认" />
+        </el-form-item>
+        <el-form-item label="截至时间" prop="deadline">
+          <el-date-picker clearable
+            v-model="form.deadline"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="请选择截至时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="备注" prop="remarks">
+          <el-input v-model="form.remarks" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+        <el-form-item label="装置id" prop="deptId">
+          <el-input v-model="form.deptId" placeholder="请输入装置id" />
+        </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 { listOpenitem, getOpenitem, delOpenitem, addOpenitem, updateOpenitem } from "@/api/rc/openitem";
+
+export default {
+  name: "Openitem",
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 开项表格数据
+      openitemList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        type: null,
+        secSubChapId: null,
+        description: null,
+        level: null,
+        openTime: null,
+        closeTime: null,
+        status: null,
+        personInCharge: null,
+        reviewer: null,
+        result: null,
+        deadline: null,
+        remarks: null,
+        deptId: null
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询开项列表 */
+    getList() {
+      this.loading = true;
+      listOpenitem(this.queryParams).then(response => {
+        this.openitemList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        type: null,
+        secSubChapId: null,
+        description: null,
+        level: null,
+        openTime: null,
+        closeTime: null,
+        status: null,
+        personInCharge: null,
+        reviewer: null,
+        result: null,
+        deadline: null,
+        remarks: null,
+        deptId: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加开项";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getOpenitem(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改开项";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateOpenitem(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addOpenitem(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('是否确认删除开项编号为"' + ids + '"的数据项?').then(function() {
+        return delOpenitem(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('rc/openitem/export', {
+        ...this.queryParams
+      }, `openitem_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>

+ 417 - 0
ruoyi-ui/src/views/rc/progress/index.vue

@@ -0,0 +1,417 @@
+<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="二级细分章节id" prop="secSubChapId">
+        <el-input
+          v-model="queryParams.secSubChapId"
+          placeholder="请输入二级细分章节id"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="负责人" prop="personInCharge">
+        <el-input
+          v-model="queryParams.personInCharge"
+          placeholder="请输入负责人"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="支持人" prop="supporter">
+        <el-input
+          v-model="queryParams.supporter"
+          placeholder="请输入支持人"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="开始日期" prop="startDate">
+        <el-date-picker clearable
+          v-model="queryParams.startDate"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="请选择开始日期">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="目标日期" prop="targetDate">
+        <el-date-picker clearable
+          v-model="queryParams.targetDate"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="请选择目标日期">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="实际完成日期" prop="finishDate">
+        <el-date-picker clearable
+          v-model="queryParams.finishDate"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="请选择实际完成日期">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="准备情况" prop="preparation">
+        <el-input
+          v-model="queryParams.preparation"
+          placeholder="请输入准备情况"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="进度描述" prop="progress">
+        <el-input
+          v-model="queryParams.progress"
+          placeholder="请输入进度描述"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="装置id" prop="deptId">
+        <el-input
+          v-model="queryParams.deptId"
+          placeholder="请输入装置id"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @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="['rc:progress:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['rc:progress:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['rc:progress:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['rc:progress:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table border v-loading="loading" :data="progressList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="id" align="center" prop="id" />
+      <el-table-column label="二级细分章节id" align="center" prop="secSubChapId" />
+      <el-table-column label="章节" align="center" prop="chapName" />
+      <el-table-column label="细分章节" align="center" prop="subChapName" />
+      <el-table-column label="二级细分章节" align="center" prop="secSubChapName" />
+      <el-table-column label="内容" align="center" prop="content" />
+      <el-table-column label="负责人" align="center" prop="personInCharge" />
+      <el-table-column label="支持人" align="center" prop="supporter" />
+      <el-table-column label="开始日期" align="center" prop="startDate" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.startDate, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="目标日期" align="center" prop="targetDate" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.targetDate, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="实际完成日期" align="center" prop="finishDate" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.finishDate, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="准备情况" align="center" prop="preparation" />
+      <el-table-column label="进度描述" align="center" prop="progress" />
+      <el-table-column label="审批状态" align="center" prop="applyStatus" />
+      <el-table-column label="备注" align="center" prop="remarks" />
+      <el-table-column label="装置id" align="center" prop="deptId" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['rc:progress:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['rc:progress:remove']"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改进度对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="二级细分章节id" prop="secSubChapId">
+          <el-input v-model="form.secSubChapId" placeholder="请输入二级细分章节id" />
+        </el-form-item>
+        <el-form-item label="章节" prop="chapName">
+          <el-input v-model="form.chapName" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+        <el-form-item label="细分章节" prop="subChapName">
+          <el-input v-model="form.subChapName" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+        <el-form-item label="二级细分章节" prop="secSubChapName">
+          <el-input v-model="form.secSubChapName" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+        <el-form-item label="内容" prop="content">
+          <el-input v-model="form.content" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+        <el-form-item label="负责人" prop="personInCharge">
+          <el-input v-model="form.personInCharge" placeholder="请输入负责人" />
+        </el-form-item>
+        <el-form-item label="支持人" prop="supporter">
+          <el-input v-model="form.supporter" placeholder="请输入支持人" />
+        </el-form-item>
+        <el-form-item label="开始日期" prop="startDate">
+          <el-date-picker clearable
+            v-model="form.startDate"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="请选择开始日期">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="目标日期" prop="targetDate">
+          <el-date-picker clearable
+            v-model="form.targetDate"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="请选择目标日期">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="实际完成日期" prop="finishDate">
+          <el-date-picker clearable
+            v-model="form.finishDate"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="请选择实际完成日期">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="准备情况" prop="preparation">
+          <el-input v-model="form.preparation" placeholder="请输入准备情况" />
+        </el-form-item>
+        <el-form-item label="进度描述" prop="progress">
+          <el-input v-model="form.progress" placeholder="请输入进度描述" />
+        </el-form-item>
+        <el-form-item label="备注" prop="remarks">
+          <el-input v-model="form.remarks" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+        <el-form-item label="装置id" prop="deptId">
+          <el-input v-model="form.deptId" placeholder="请输入装置id" />
+        </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 { listProgress, getProgress, delProgress, addProgress, updateProgress } from "@/api/rc/progress";
+
+export default {
+  name: "Progress",
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 进度表格数据
+      progressList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        secSubChapId: null,
+        chapName: null,
+        subChapName: null,
+        secSubChapName: null,
+        content: null,
+        personInCharge: null,
+        supporter: null,
+        startDate: null,
+        targetDate: null,
+        finishDate: null,
+        preparation: null,
+        progress: null,
+        applyStatus: null,
+        remarks: null,
+        deptId: null
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询进度列表 */
+    getList() {
+      this.loading = true;
+      listProgress(this.queryParams).then(response => {
+        this.progressList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        secSubChapId: null,
+        chapName: null,
+        subChapName: null,
+        secSubChapName: null,
+        content: null,
+        personInCharge: null,
+        supporter: null,
+        startDate: null,
+        targetDate: null,
+        finishDate: null,
+        preparation: null,
+        progress: null,
+        applyStatus: null,
+        remarks: null,
+        deptId: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加进度";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getProgress(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改进度";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateProgress(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addProgress(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('是否确认删除进度编号为"' + ids + '"的数据项?').then(function() {
+        return delProgress(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('rc/progress/export', {
+        ...this.queryParams
+      }, `progress_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>

+ 402 - 0
ruoyi-ui/src/views/rc/secsubchap/index.vue

@@ -0,0 +1,402 @@
+<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="year">
+        <el-date-picker clearable
+                        v-model="queryParams.year"
+                        type="year"
+                        value-format="yyyy"
+                        placeholder="请选择年份">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="审计记录id" prop="auditId">
+        <el-input
+          v-model="queryParams.auditId"
+          placeholder="请输入审计记录id"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="问卷细分章节id" prop="subChapId">
+        <el-input
+          v-model="queryParams.subChapId"
+          placeholder="请输入问卷细分章节id"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="序号" prop="code">
+        <el-input
+          v-model="queryParams.code"
+          placeholder="请输入序号"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="YES/NO/NA" prop="yeaNoNa">
+        <el-input
+          v-model="queryParams.yeaNoNa"
+          placeholder="请输入YES/NO/NA"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="标准" prop="starndard">
+        <el-input
+          v-model="queryParams.starndard"
+          placeholder="请输入标准"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="负责人" prop="personInCharge">
+        <el-input
+          v-model="queryParams.personInCharge"
+          placeholder="请输入负责人"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="审核人" prop="reviewer">
+        <el-input
+          v-model="queryParams.reviewer"
+          placeholder="请输入审核人"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="装置id" prop="deptId">
+        <el-input
+          v-model="queryParams.deptId"
+          placeholder="请输入装置id"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @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="['rc:secsubchap:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['rc:secsubchap:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['rc:secsubchap:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['rc:secsubchap:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table border v-loading="loading" :data="secsubchapList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="id" align="center" prop="id" />
+      <el-table-column label="审计记录id" align="center" prop="auditId" />
+      <el-table-column label="问卷细分章节id" align="center" prop="subChapId" />
+      <el-table-column label="年份" align="center" prop="year" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.year, '{y}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="问卷类型" align="center" prop="type" />
+      <el-table-column label="目录" align="center" prop="directory" />
+      <el-table-column label="序号" align="center" prop="code" />
+      <el-table-column label="名称" align="center" prop="name" />
+      <el-table-column label="YES/NO/NA" align="center" prop="yeaNoNa" />
+      <el-table-column label="MinimumStandard" align="center" prop="minimumStandard" />
+      <el-table-column label="Good Practices" align="center" prop="goodPractices" />
+      <el-table-column label="标准" align="center" prop="starndard" />
+      <el-table-column label="完成情况" align="center" prop="completionStatus" />
+      <el-table-column label="负责人" align="center" prop="personInCharge" />
+      <el-table-column label="审核人" align="center" prop="reviewer" />
+      <el-table-column label="备注" align="center" prop="remarks" />
+      <el-table-column label="装置id" align="center" prop="deptId" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['rc:secsubchap:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['rc:secsubchap:remove']"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改问卷二级细分章节对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="审计记录id" prop="auditId">
+          <el-input v-model="form.auditId" placeholder="请输入审计记录id" />
+        </el-form-item>
+        <el-form-item label="问卷细分章节id" prop="subChapId">
+          <el-input v-model="form.subChapId" placeholder="请输入问卷细分章节id" />
+        </el-form-item>
+        <el-form-item label="年份" prop="year">
+          <el-date-picker clearable
+                          v-model="form.year"
+                          type="year"
+                          value-format="yyyy"
+                          placeholder="请选择年份">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="目录" prop="directory">
+          <el-input v-model="form.directory" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+        <el-form-item label="序号" prop="code">
+          <el-input v-model="form.code" placeholder="请输入序号" />
+        </el-form-item>
+        <el-form-item label="名称" prop="name">
+          <el-input v-model="form.name" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+        <el-form-item label="YES/NO/NA" prop="yeaNoNa">
+          <el-input v-model="form.yeaNoNa" placeholder="请输入YES/NO/NA" />
+        </el-form-item>
+        <el-form-item label="MinimumStandard" prop="minimumStandard">
+          <el-input v-model="form.minimumStandard" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+        <el-form-item label="Good Practices" prop="goodPractices">
+          <el-input v-model="form.goodPractices" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+        <el-form-item label="标准" prop="starndard">
+          <el-input v-model="form.starndard" placeholder="请输入标准" />
+        </el-form-item>
+        <el-form-item label="负责人" prop="personInCharge">
+          <el-input v-model="form.personInCharge" placeholder="请输入负责人" />
+        </el-form-item>
+        <el-form-item label="审核人" prop="reviewer">
+          <el-input v-model="form.reviewer" placeholder="请输入审核人" />
+        </el-form-item>
+        <el-form-item label="备注" prop="remarks">
+          <el-input v-model="form.remarks" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+        <el-form-item label="装置id" prop="deptId">
+          <el-input v-model="form.deptId" placeholder="请输入装置id" />
+        </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 { listSecsubchap, getSecsubchap, delSecsubchap, addSecsubchap, updateSecsubchap } from "@/api/rc/secsubchap";
+
+export default {
+  name: "Secsubchap",
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 问卷二级细分章节表格数据
+      secsubchapList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        auditId: null,
+        subChapId: null,
+        year: null,
+        type: null,
+        directory: null,
+        code: null,
+        name: null,
+        yeaNoNa: null,
+        minimumStandard: null,
+        goodPractices: null,
+        starndard: null,
+        completionStatus: null,
+        personInCharge: null,
+        reviewer: null,
+        remarks: null,
+        deptId: null
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询问卷二级细分章节列表 */
+    getList() {
+      this.loading = true;
+      listSecsubchap(this.queryParams).then(response => {
+        this.secsubchapList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        auditId: null,
+        subChapId: null,
+        year: null,
+        type: null,
+        directory: null,
+        code: null,
+        name: null,
+        yeaNoNa: null,
+        minimumStandard: null,
+        goodPractices: null,
+        starndard: null,
+        completionStatus: null,
+        personInCharge: null,
+        reviewer: null,
+        remarks: null,
+        deptId: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加问卷二级细分章节";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getSecsubchap(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改问卷二级细分章节";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateSecsubchap(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addSecsubchap(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('是否确认删除问卷二级细分章节编号为"' + ids + '"的数据项?').then(function() {
+        return delSecsubchap(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('rc/secsubchap/export', {
+        ...this.queryParams
+      }, `secsubchap_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>

+ 279 - 0
ruoyi-ui/src/views/rc/subchap/index.vue

@@ -0,0 +1,279 @@
+<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="审计记录id" prop="auditId">
+        <el-input
+          v-model="queryParams.auditId"
+          placeholder="请输入审计记录id"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="问卷章节id" prop="chapId">
+        <el-input
+          v-model="queryParams.chapId"
+          placeholder="请输入问卷章节id"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="装置id" prop="deptId">
+        <el-input
+          v-model="queryParams.deptId"
+          placeholder="请输入装置id"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @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="['rc:subchap:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['rc:subchap:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['rc:subchap:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['rc:subchap:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table border v-loading="loading" :data="subchapList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="id" align="center" prop="id" />
+      <el-table-column label="审计记录id" align="center" prop="auditId" />
+      <el-table-column label="问卷章节id" align="center" prop="chapId" />
+      <el-table-column label="名称" align="center" prop="name" />
+      <el-table-column label="装置id" align="center" prop="deptId" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['rc:subchap:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['rc:subchap:remove']"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改问卷细分章节对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="审计记录id" prop="auditId">
+          <el-input v-model="form.auditId" placeholder="请输入审计记录id" />
+        </el-form-item>
+        <el-form-item label="问卷章节id" prop="chapId">
+          <el-input v-model="form.chapId" placeholder="请输入问卷章节id" />
+        </el-form-item>
+        <el-form-item label="名称" prop="name">
+          <el-input v-model="form.name" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+        <el-form-item label="装置id" prop="deptId">
+          <el-input v-model="form.deptId" placeholder="请输入装置id" />
+        </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 { listSubchap, getSubchap, delSubchap, addSubchap, updateSubchap } from "@/api/rc/subchap";
+
+export default {
+  name: "Subchap",
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 问卷细分章节表格数据
+      subchapList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        auditId: null,
+        chapId: null,
+        name: null,
+        deptId: null
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询问卷细分章节列表 */
+    getList() {
+      this.loading = true;
+      listSubchap(this.queryParams).then(response => {
+        this.subchapList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        auditId: null,
+        chapId: null,
+        name: null,
+        deptId: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加问卷细分章节";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getSubchap(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改问卷细分章节";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateSubchap(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addSubchap(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('是否确认删除问卷细分章节编号为"' + ids + '"的数据项?').then(function() {
+        return delSubchap(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('rc/subchap/export', {
+        ...this.queryParams
+      }, `subchap_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>

+ 1 - 1
ruoyi-ui/vue.config.js

@@ -7,7 +7,7 @@ function resolve(dir) {
 
 const CompressionPlugin = require('compression-webpack-plugin')
 
-const name = process.env.VUE_APP_TITLE || '若依管理系统' // 网页标题
+const name = process.env.VUE_APP_TITLE || 'RC审计系统' // 网页标题
 
 const port = process.env.port || process.env.npm_config_port || 80 // 端口
 

+ 128 - 0
sql/create.sql

@@ -0,0 +1,128 @@
+-- ----------------------------
+-- 审计记录表
+-- ----------------------------
+create table t_audit (
+  id                bigint(20)    comment 'id'  not null  auto_increment,
+  `year`            year          comment '年份',
+  pre_audit_time    datetime      comment '预审时间',
+  audit_time        datetime      comment '审计时间',
+  audit_result      varchar(500)  comment '审计结果',
+  remarks           varchar(500)  comment '备注',
+  dept_id           bigint(20)    comment '装置id',
+  primary key (id)
+) engine=innodb auto_increment=100 comment = '审计记录表';
+
+-- ----------------------------
+-- 装置信息表
+-- ----------------------------
+create table t_dept_info (
+  id                bigint(20)    comment 'id'  not null  auto_increment,
+  `year`            year          comment '年份',
+  dept_info         varchar(500)  comment '装置信息',
+  dept_id           bigint(20)    comment '装置id',
+  primary key (id)
+) engine=innodb auto_increment=100 comment = '装置信息表';
+
+-- ----------------------------
+-- 问卷章节表
+-- ----------------------------
+create table t_chap (
+  id                bigint(20)    comment 'id'  not null  auto_increment,
+  audit_id          bigint(20)    comment '审计记录id',
+  name              varchar(500)  comment '名称',
+  dept_id           bigint(20)    comment '装置id',
+  primary key (id)
+) engine=innodb auto_increment=100 comment = '问卷章节表';
+
+-- ----------------------------
+-- 问卷细分章节表
+-- ----------------------------
+create table t_sub_chap (
+  id                bigint(20)    comment 'id'  not null  auto_increment,
+  audit_id          bigint(20)    comment '审计记录id',
+  chap_id           bigint(20)    comment '问卷章节id',
+  name              varchar(500)  comment '名称',
+  dept_id           bigint(20)    comment '装置id',
+  primary key (id)
+) engine=innodb auto_increment=100 comment = '问卷细分章节表';
+
+-- ----------------------------
+-- 问卷二级细分章节表
+-- ----------------------------
+create table t_sec_sub_chap (
+  id                bigint(20)    comment 'id'  not null  auto_increment,
+  audit_id          bigint(20)    comment '审计记录id',
+  sub_chap_id       bigint(20)    comment '问卷细分章节id',
+  year              year          comment '年份',
+  type              char(1)       comment '问卷类型',
+  directory         varchar(500)  comment '目录',
+  code              bigint(20)    comment '序号',
+  name              varchar(500)  comment '名称',
+  yea_no_na         char(1)       comment 'YES/NO/NA',
+  minimum_standard  varchar(500)  comment 'MinimumStandard',
+  good_practices    varchar(500)  comment 'Good Practices',
+  starndard         char(1)       comment '标准',
+  completion_status char(1)       comment '完成情况',
+  person_in_charge  bigint(20)    comment '负责人',
+  reviewer          bigint(20)    comment '审核人',
+  remarks           varchar(500)  comment '备注',
+  dept_id           bigint(20)    comment '装置id',
+  primary key (id)
+) engine=innodb auto_increment=100 comment = '问卷二级细分章节表';
+
+-- ----------------------------
+-- 进度表
+-- ----------------------------
+create table t_progress (
+  id                bigint(20)    comment 'id'  not null  auto_increment,
+  sec_sub_chap_id   bigint(20)    comment '二级细分章节id',
+  chap_name         varchar(500)  comment '章节',
+  sub_chap_name     varchar(500)  comment '细分章节',
+  sec_sub_chap_name varchar(500)  comment '二级细分章节',
+  content           varchar(500)  comment '内容',
+  person_in_charge  bigint(20)    comment '负责人',
+  supporter         bigint(20)    comment '支持人',
+  start_date        datetime      comment '开始日期',
+  target_date       datetime      comment '目标日期',
+  finish_date       datetime      comment '实际完成日期',
+  preparation       char(1)       comment '准备情况',
+  progress          char(1)       comment '进度描述',
+  apply_status      char(1)       comment '审批状态',
+  remarks           varchar(500)  comment '备注',
+  dept_id           bigint(20)    comment '装置id',
+  primary key (id)
+) engine=innodb auto_increment=100 comment = '进度表';
+
+-- ----------------------------
+-- 会议表
+-- ----------------------------
+create table t_meeting (
+  id                bigint(20)    comment 'id'  not null  auto_increment,
+  year              year          comment '年份',
+  sec_sub_chap_id   bigint(20)    comment '涉及code',
+  person_in_charge  bigint(20)    comment '负责人',
+  remarks           varchar(500)  comment '备注',
+  dept_id           bigint(20)    comment '装置id',
+  primary key (id)
+) engine=innodb auto_increment=100 comment = '会议表';
+
+-- ----------------------------
+-- 开项表
+-- ----------------------------
+create table t_open_item (
+  id                bigint(20)    comment 'id'  not null  auto_increment,
+  type              char(1)       comment '问题类型',
+  sec_sub_chap_id   bigint(20)    comment '涉及整改code',
+  description       varchar(500)  comment '存在问题描述',
+  level             char(1)       comment '开项级别',
+  open_time         datetime      comment '开项时间',
+  close_time        datetime      comment '闭项时间',
+  status            char(1)       comment '问题处理状态',
+  person_in_charge  bigint(20)    comment '负责人',
+  reviewer          bigint(20)    comment '审核人',
+  result            char(1)       comment '责任人确认',
+  deadline          datetime      comment '截至时间',
+  remarks           varchar(500)  comment '备注',
+  dept_id           bigint(20)    comment '装置id',
+  primary key (id)
+) engine=innodb auto_increment=100 comment = '开项表';