wangggziwen 1 ماه پیش
والد
کامیت
2b4320e5a2
19فایلهای تغییر یافته به همراه2162 افزوده شده و 0 حذف شده
  1. 97 0
      rc-admin/src/main/java/com/ruoyi/web/controller/rc/TStandardChapterController.java
  2. 101 0
      rc-admin/src/main/java/com/ruoyi/web/controller/rc/TStandardQuestionnaireController.java
  3. 76 0
      rc-buisness/src/main/java/com/ruoyi/rc/domain/TStandardChapter.java
  4. 220 0
      rc-buisness/src/main/java/com/ruoyi/rc/domain/TStandardQuestionnaire.java
  5. 61 0
      rc-buisness/src/main/java/com/ruoyi/rc/mapper/TStandardChapterMapper.java
  6. 61 0
      rc-buisness/src/main/java/com/ruoyi/rc/mapper/TStandardQuestionnaireMapper.java
  7. 61 0
      rc-buisness/src/main/java/com/ruoyi/rc/service/ITStandardChapterService.java
  8. 61 0
      rc-buisness/src/main/java/com/ruoyi/rc/service/ITStandardQuestionnaireService.java
  9. 93 0
      rc-buisness/src/main/java/com/ruoyi/rc/service/impl/TStandardChapterServiceImpl.java
  10. 95 0
      rc-buisness/src/main/java/com/ruoyi/rc/service/impl/TStandardQuestionnaireServiceImpl.java
  11. 72 0
      rc-buisness/src/main/resources/mapper/rc/TStandardChapterMapper.xml
  12. 117 0
      rc-buisness/src/main/resources/mapper/rc/TStandardQuestionnaireMapper.xml
  13. 44 0
      ruoyi-ui/src/api/rc/standardchapter.js
  14. 44 0
      ruoyi-ui/src/api/rc/standardquestionnaire.js
  15. 13 0
      ruoyi-ui/src/router/index.js
  16. 236 0
      ruoyi-ui/src/views/rc/editstandardchapter/index.vue
  17. 185 0
      ruoyi-ui/src/views/rc/standardchapter/index.vue
  18. 494 0
      ruoyi-ui/src/views/rc/standardquestionnaire/index.vue
  19. 31 0
      ruoyi-ui/src/views/rc/standardtemplate/index.vue

+ 97 - 0
rc-admin/src/main/java/com/ruoyi/web/controller/rc/TStandardChapterController.java

@@ -0,0 +1,97 @@
+package com.ruoyi.web.controller.rc;
+
+import com.ruoyi.common.core.domain.entity.SysDept;
+import com.ruoyi.system.service.ISysDeptService;
+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.TStandardChapter;
+import com.ruoyi.rc.service.ITStandardChapterService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.utils.StringUtils;
+
+/**
+ * 标准模板章节Controller
+ * 
+ * @author ruoyi
+ * @date 2025-07-29
+ */
+@RestController
+@RequestMapping("/rc/standardchapter")
+public class TStandardChapterController extends BaseController
+{
+    @Autowired
+    private ITStandardChapterService tStandardChapterService;
+    /**
+     * 查询标准模板章节列表
+     */
+    @GetMapping("/list")
+    public AjaxResult list(TStandardChapter tStandardChapter)
+    {
+        return success(tStandardChapterService.selectTStandardChapterList(tStandardChapter));
+    }
+
+    /**
+     * 导出标准模板章节列表
+     */
+    @Log(title = "标准模板章节", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TStandardChapter tStandardChapter)
+    {
+        List<TStandardChapter> list = tStandardChapterService.selectTStandardChapterList(tStandardChapter);
+        ExcelUtil<TStandardChapter> util = new ExcelUtil<TStandardChapter>(TStandardChapter.class);
+        util.exportExcel(response, list, "标准模板章节数据");
+    }
+
+    /**
+     * 获取标准模板章节详细信息
+     */
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(tStandardChapterService.selectTStandardChapterById(id));
+    }
+
+    /**
+     * 新增标准模板章节
+     */
+    @Log(title = "标准模板章节", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TStandardChapter tStandardChapter)
+    {
+        return toAjax(tStandardChapterService.insertTStandardChapter(tStandardChapter));
+    }
+
+    /**
+     * 修改标准模板章节
+     */
+    @Log(title = "标准模板章节", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TStandardChapter tStandardChapter)
+    {
+        return toAjax(tStandardChapterService.updateTStandardChapter(tStandardChapter));
+    }
+
+    /**
+     * 删除标准模板章节
+     */
+    @Log(title = "标准模板章节", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(tStandardChapterService.deleteTStandardChapterByIds(ids));
+    }
+}

+ 101 - 0
rc-admin/src/main/java/com/ruoyi/web/controller/rc/TStandardQuestionnaireController.java

@@ -0,0 +1,101 @@
+package com.ruoyi.web.controller.rc;
+
+import com.ruoyi.common.core.domain.entity.SysDept;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.system.service.ISysDeptService;
+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.TStandardQuestionnaire;
+import com.ruoyi.rc.service.ITStandardQuestionnaireService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.utils.StringUtils;
+
+/**
+ * 标准模板问卷Controller
+ * 
+ * @author ruoyi
+ * @date 2025-07-29
+ */
+@RestController
+@RequestMapping("/rc/standardquestionnaire")
+public class TStandardQuestionnaireController extends BaseController
+{
+    @Autowired
+    private ITStandardQuestionnaireService tStandardQuestionnaireService;
+
+    /**
+     * 查询标准模板问卷列表
+     */
+    @GetMapping("/list")
+    public TableDataInfo list(TStandardQuestionnaire tStandardQuestionnaire)
+    {
+        startPage();
+        List<TStandardQuestionnaire> list = tStandardQuestionnaireService.selectTStandardQuestionnaireList(tStandardQuestionnaire);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出标准模板问卷列表
+     */
+    @Log(title = "标准模板问卷", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TStandardQuestionnaire tStandardQuestionnaire)
+    {
+        List<TStandardQuestionnaire> list = tStandardQuestionnaireService.selectTStandardQuestionnaireList(tStandardQuestionnaire);
+        ExcelUtil<TStandardQuestionnaire> util = new ExcelUtil<TStandardQuestionnaire>(TStandardQuestionnaire.class);
+        util.exportExcel(response, list, "标准模板问卷数据");
+    }
+
+    /**
+     * 获取标准模板问卷详细信息
+     */
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(tStandardQuestionnaireService.selectTStandardQuestionnaireById(id));
+    }
+
+    /**
+     * 新增标准模板问卷
+     */
+    @Log(title = "标准模板问卷", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TStandardQuestionnaire tStandardQuestionnaire)
+    {
+        return toAjax(tStandardQuestionnaireService.insertTStandardQuestionnaire(tStandardQuestionnaire));
+    }
+
+    /**
+     * 修改标准模板问卷
+     */
+    @Log(title = "标准模板问卷", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TStandardQuestionnaire tStandardQuestionnaire)
+    {
+        return toAjax(tStandardQuestionnaireService.updateTStandardQuestionnaire(tStandardQuestionnaire));
+    }
+
+    /**
+     * 删除标准模板问卷
+     */
+    @Log(title = "标准模板问卷", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(tStandardQuestionnaireService.deleteTStandardQuestionnaireByIds(ids));
+    }
+}

+ 76 - 0
rc-buisness/src/main/java/com/ruoyi/rc/domain/TStandardChapter.java

@@ -0,0 +1,76 @@
+package com.ruoyi.rc.domain;
+
+import com.ruoyi.common.core.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+
+/**
+ * 标准模板章节对象 t_standard_chapter
+ * 
+ * @author ruoyi
+ * @date 2025-07-29
+ */
+public class TStandardChapter extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** id */
+    private Long id;
+
+    /** 序号 */
+    @Excel(name = "序号")
+    private String code;
+
+    /** 名称 */
+    @Excel(name = "名称")
+    private String name;
+
+    /** 装置 */
+    @Excel(name = "装置")
+    private String deptName;
+
+    public String getDeptName() {
+        return deptName;
+    }
+
+    public void setDeptName(String deptName) {
+        this.deptName = deptName;
+    }
+    public void setId(Long id) 
+    {
+        this.id = id;
+    }
+
+    public Long getId() 
+    {
+        return id;
+    }
+    public void setCode(String code) 
+    {
+        this.code = code;
+    }
+
+    public String getCode() 
+    {
+        return code;
+    }
+    public void setName(String name) 
+    {
+        this.name = name;
+    }
+
+    public String getName() 
+    {
+        return name;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("code", getCode())
+            .append("name", getName())
+            .toString();
+    }
+}

+ 220 - 0
rc-buisness/src/main/java/com/ruoyi/rc/domain/TStandardQuestionnaire.java

@@ -0,0 +1,220 @@
+package com.ruoyi.rc.domain;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.core.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+
+/**
+ * 标准模板问卷对象 t_standard_questionnaire
+ * 
+ * @author ruoyi
+ * @date 2025-07-29
+ */
+public class TStandardQuestionnaire extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** id */
+    private Long id;
+
+    /** 章节id */
+    @Excel(name = "章节id")
+    private Long chapterId;
+
+    /** 年份 */
+    @Excel(name = "年份")
+    private String 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 yesNoNa;
+
+    /** MinimumStandard */
+    @Excel(name = "MinimumStandard")
+    private String minimumStandard;
+
+    /** 备注 */
+    @Excel(name = "备注")
+    private String remarks;
+
+    /** 创建时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date createTime;
+
+    /** 删除时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "删除时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date deleteTime;
+
+    /** 链接 */
+    @Excel(name = "链接")
+    private String link;
+
+    /** 删除状态 */
+    @Excel(name = "删除状态")
+    private String delFlag;
+
+    public void setId(Long id) 
+    {
+        this.id = id;
+    }
+
+    public Long getId() 
+    {
+        return id;
+    }
+    public void setChapterId(Long chapterId) 
+    {
+        this.chapterId = chapterId;
+    }
+
+    public Long getChapterId() 
+    {
+        return chapterId;
+    }
+    public void setYear(String year) 
+    {
+        this.year = year;
+    }
+
+    public String 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 setYesNoNa(String yesNoNa) 
+    {
+        this.yesNoNa = yesNoNa;
+    }
+
+    public String getYesNoNa() 
+    {
+        return yesNoNa;
+    }
+    public void setMinimumStandard(String minimumStandard) 
+    {
+        this.minimumStandard = minimumStandard;
+    }
+
+    public String getMinimumStandard() 
+    {
+        return minimumStandard;
+    }
+    public void setRemarks(String remarks) 
+    {
+        this.remarks = remarks;
+    }
+
+    public String getRemarks() 
+    {
+        return remarks;
+    }
+    public void setDeleteTime(Date deleteTime) 
+    {
+        this.deleteTime = deleteTime;
+    }
+
+    public Date getDeleteTime() 
+    {
+        return deleteTime;
+    }
+
+    @Override
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    @Override
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public String getLink() {
+        return link;
+    }
+
+    public void setLink(String link) {
+        this.link = link;
+    }
+
+    public String getDelFlag() {
+        return delFlag;
+    }
+
+    public void setDelFlag(String delFlag) {
+        this.delFlag = delFlag;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("chapterId", getChapterId())
+            .append("year", getYear())
+            .append("type", getType())
+            .append("directory", getDirectory())
+            .append("code", getCode())
+            .append("name", getName())
+            .append("yesNoNa", getYesNoNa())
+            .append("minimumStandard", getMinimumStandard())
+            .append("remarks", getRemarks())
+            .append("createTime", getCreateTime())
+            .append("deleteTime", getDeleteTime())
+            .toString();
+    }
+}

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

@@ -0,0 +1,61 @@
+package com.ruoyi.rc.mapper;
+
+import java.util.List;
+import com.ruoyi.rc.domain.TStandardChapter;
+
+/**
+ * 标准模板章节Mapper接口
+ * 
+ * @author ruoyi
+ * @date 2025-07-29
+ */
+public interface TStandardChapterMapper 
+{
+    /**
+     * 查询标准模板章节
+     * 
+     * @param id 标准模板章节主键
+     * @return 标准模板章节
+     */
+    public TStandardChapter selectTStandardChapterById(Long id);
+
+    /**
+     * 查询标准模板章节列表
+     * 
+     * @param tStandardChapter 标准模板章节
+     * @return 标准模板章节集合
+     */
+    public List<TStandardChapter> selectTStandardChapterList(TStandardChapter tStandardChapter);
+
+    /**
+     * 新增标准模板章节
+     * 
+     * @param tStandardChapter 标准模板章节
+     * @return 结果
+     */
+    public int insertTStandardChapter(TStandardChapter tStandardChapter);
+
+    /**
+     * 修改标准模板章节
+     * 
+     * @param tStandardChapter 标准模板章节
+     * @return 结果
+     */
+    public int updateTStandardChapter(TStandardChapter tStandardChapter);
+
+    /**
+     * 删除标准模板章节
+     * 
+     * @param id 标准模板章节主键
+     * @return 结果
+     */
+    public int deleteTStandardChapterById(Long id);
+
+    /**
+     * 批量删除标准模板章节
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteTStandardChapterByIds(Long[] ids);
+}

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

@@ -0,0 +1,61 @@
+package com.ruoyi.rc.mapper;
+
+import java.util.List;
+import com.ruoyi.rc.domain.TStandardQuestionnaire;
+
+/**
+ * 标准模板问卷Mapper接口
+ * 
+ * @author ruoyi
+ * @date 2025-07-29
+ */
+public interface TStandardQuestionnaireMapper 
+{
+    /**
+     * 查询标准模板问卷
+     * 
+     * @param id 标准模板问卷主键
+     * @return 标准模板问卷
+     */
+    public TStandardQuestionnaire selectTStandardQuestionnaireById(Long id);
+
+    /**
+     * 查询标准模板问卷列表
+     * 
+     * @param tStandardQuestionnaire 标准模板问卷
+     * @return 标准模板问卷集合
+     */
+    public List<TStandardQuestionnaire> selectTStandardQuestionnaireList(TStandardQuestionnaire tStandardQuestionnaire);
+
+    /**
+     * 新增标准模板问卷
+     * 
+     * @param tStandardQuestionnaire 标准模板问卷
+     * @return 结果
+     */
+    public int insertTStandardQuestionnaire(TStandardQuestionnaire tStandardQuestionnaire);
+
+    /**
+     * 修改标准模板问卷
+     * 
+     * @param tStandardQuestionnaire 标准模板问卷
+     * @return 结果
+     */
+    public int updateTStandardQuestionnaire(TStandardQuestionnaire tStandardQuestionnaire);
+
+    /**
+     * 删除标准模板问卷
+     * 
+     * @param id 标准模板问卷主键
+     * @return 结果
+     */
+    public int deleteTStandardQuestionnaireById(Long id);
+
+    /**
+     * 批量删除标准模板问卷
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteTStandardQuestionnaireByIds(Long[] ids);
+}

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

@@ -0,0 +1,61 @@
+package com.ruoyi.rc.service;
+
+import java.util.List;
+import com.ruoyi.rc.domain.TStandardChapter;
+
+/**
+ * 标准模板章节Service接口
+ * 
+ * @author ruoyi
+ * @date 2025-07-29
+ */
+public interface ITStandardChapterService 
+{
+    /**
+     * 查询标准模板章节
+     * 
+     * @param id 标准模板章节主键
+     * @return 标准模板章节
+     */
+    public TStandardChapter selectTStandardChapterById(Long id);
+
+    /**
+     * 查询标准模板章节列表
+     * 
+     * @param tStandardChapter 标准模板章节
+     * @return 标准模板章节集合
+     */
+    public List<TStandardChapter> selectTStandardChapterList(TStandardChapter tStandardChapter);
+
+    /**
+     * 新增标准模板章节
+     * 
+     * @param tStandardChapter 标准模板章节
+     * @return 结果
+     */
+    public int insertTStandardChapter(TStandardChapter tStandardChapter);
+
+    /**
+     * 修改标准模板章节
+     * 
+     * @param tStandardChapter 标准模板章节
+     * @return 结果
+     */
+    public int updateTStandardChapter(TStandardChapter tStandardChapter);
+
+    /**
+     * 批量删除标准模板章节
+     * 
+     * @param ids 需要删除的标准模板章节主键集合
+     * @return 结果
+     */
+    public int deleteTStandardChapterByIds(Long[] ids);
+
+    /**
+     * 删除标准模板章节信息
+     * 
+     * @param id 标准模板章节主键
+     * @return 结果
+     */
+    public int deleteTStandardChapterById(Long id);
+}

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

@@ -0,0 +1,61 @@
+package com.ruoyi.rc.service;
+
+import java.util.List;
+import com.ruoyi.rc.domain.TStandardQuestionnaire;
+
+/**
+ * 标准模板问卷Service接口
+ * 
+ * @author ruoyi
+ * @date 2025-07-29
+ */
+public interface ITStandardQuestionnaireService 
+{
+    /**
+     * 查询标准模板问卷
+     * 
+     * @param id 标准模板问卷主键
+     * @return 标准模板问卷
+     */
+    public TStandardQuestionnaire selectTStandardQuestionnaireById(Long id);
+
+    /**
+     * 查询标准模板问卷列表
+     * 
+     * @param tStandardQuestionnaire 标准模板问卷
+     * @return 标准模板问卷集合
+     */
+    public List<TStandardQuestionnaire> selectTStandardQuestionnaireList(TStandardQuestionnaire tStandardQuestionnaire);
+
+    /**
+     * 新增标准模板问卷
+     * 
+     * @param tStandardQuestionnaire 标准模板问卷
+     * @return 结果
+     */
+    public int insertTStandardQuestionnaire(TStandardQuestionnaire tStandardQuestionnaire);
+
+    /**
+     * 修改标准模板问卷
+     * 
+     * @param tStandardQuestionnaire 标准模板问卷
+     * @return 结果
+     */
+    public int updateTStandardQuestionnaire(TStandardQuestionnaire tStandardQuestionnaire);
+
+    /**
+     * 批量删除标准模板问卷
+     * 
+     * @param ids 需要删除的标准模板问卷主键集合
+     * @return 结果
+     */
+    public int deleteTStandardQuestionnaireByIds(Long[] ids);
+
+    /**
+     * 删除标准模板问卷信息
+     * 
+     * @param id 标准模板问卷主键
+     * @return 结果
+     */
+    public int deleteTStandardQuestionnaireById(Long id);
+}

+ 93 - 0
rc-buisness/src/main/java/com/ruoyi/rc/service/impl/TStandardChapterServiceImpl.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.TStandardChapterMapper;
+import com.ruoyi.rc.domain.TStandardChapter;
+import com.ruoyi.rc.service.ITStandardChapterService;
+
+/**
+ * 标准模板章节Service业务层处理
+ * 
+ * @author ruoyi
+ * @date 2025-07-29
+ */
+@Service
+public class TStandardChapterServiceImpl implements ITStandardChapterService 
+{
+    @Autowired
+    private TStandardChapterMapper tStandardChapterMapper;
+
+    /**
+     * 查询标准模板章节
+     * 
+     * @param id 标准模板章节主键
+     * @return 标准模板章节
+     */
+    @Override
+    public TStandardChapter selectTStandardChapterById(Long id)
+    {
+        return tStandardChapterMapper.selectTStandardChapterById(id);
+    }
+
+    /**
+     * 查询标准模板章节列表
+     * 
+     * @param tStandardChapter 标准模板章节
+     * @return 标准模板章节
+     */
+    @Override
+    public List<TStandardChapter> selectTStandardChapterList(TStandardChapter tStandardChapter)
+    {
+        return tStandardChapterMapper.selectTStandardChapterList(tStandardChapter);
+    }
+
+    /**
+     * 新增标准模板章节
+     * 
+     * @param tStandardChapter 标准模板章节
+     * @return 结果
+     */
+    @Override
+    public int insertTStandardChapter(TStandardChapter tStandardChapter)
+    {
+        return tStandardChapterMapper.insertTStandardChapter(tStandardChapter);
+    }
+
+    /**
+     * 修改标准模板章节
+     * 
+     * @param tStandardChapter 标准模板章节
+     * @return 结果
+     */
+    @Override
+    public int updateTStandardChapter(TStandardChapter tStandardChapter)
+    {
+        return tStandardChapterMapper.updateTStandardChapter(tStandardChapter);
+    }
+
+    /**
+     * 批量删除标准模板章节
+     * 
+     * @param ids 需要删除的标准模板章节主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTStandardChapterByIds(Long[] ids)
+    {
+        return tStandardChapterMapper.deleteTStandardChapterByIds(ids);
+    }
+
+    /**
+     * 删除标准模板章节信息
+     * 
+     * @param id 标准模板章节主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTStandardChapterById(Long id)
+    {
+        return tStandardChapterMapper.deleteTStandardChapterById(id);
+    }
+}

+ 95 - 0
rc-buisness/src/main/java/com/ruoyi/rc/service/impl/TStandardQuestionnaireServiceImpl.java

@@ -0,0 +1,95 @@
+package com.ruoyi.rc.service.impl;
+
+import java.util.List;
+import com.ruoyi.common.utils.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.rc.mapper.TStandardQuestionnaireMapper;
+import com.ruoyi.rc.domain.TStandardQuestionnaire;
+import com.ruoyi.rc.service.ITStandardQuestionnaireService;
+
+/**
+ * 标准模板问卷Service业务层处理
+ * 
+ * @author ruoyi
+ * @date 2025-07-29
+ */
+@Service
+public class TStandardQuestionnaireServiceImpl implements ITStandardQuestionnaireService 
+{
+    @Autowired
+    private TStandardQuestionnaireMapper tStandardQuestionnaireMapper;
+
+    /**
+     * 查询标准模板问卷
+     * 
+     * @param id 标准模板问卷主键
+     * @return 标准模板问卷
+     */
+    @Override
+    public TStandardQuestionnaire selectTStandardQuestionnaireById(Long id)
+    {
+        return tStandardQuestionnaireMapper.selectTStandardQuestionnaireById(id);
+    }
+
+    /**
+     * 查询标准模板问卷列表
+     * 
+     * @param tStandardQuestionnaire 标准模板问卷
+     * @return 标准模板问卷
+     */
+    @Override
+    public List<TStandardQuestionnaire> selectTStandardQuestionnaireList(TStandardQuestionnaire tStandardQuestionnaire)
+    {
+        return tStandardQuestionnaireMapper.selectTStandardQuestionnaireList(tStandardQuestionnaire);
+    }
+
+    /**
+     * 新增标准模板问卷
+     * 
+     * @param tStandardQuestionnaire 标准模板问卷
+     * @return 结果
+     */
+    @Override
+    public int insertTStandardQuestionnaire(TStandardQuestionnaire tStandardQuestionnaire)
+    {
+        tStandardQuestionnaire.setCreateTime(DateUtils.getNowDate());
+        return tStandardQuestionnaireMapper.insertTStandardQuestionnaire(tStandardQuestionnaire);
+    }
+
+    /**
+     * 修改标准模板问卷
+     * 
+     * @param tStandardQuestionnaire 标准模板问卷
+     * @return 结果
+     */
+    @Override
+    public int updateTStandardQuestionnaire(TStandardQuestionnaire tStandardQuestionnaire)
+    {
+        return tStandardQuestionnaireMapper.updateTStandardQuestionnaire(tStandardQuestionnaire);
+    }
+
+    /**
+     * 批量删除标准模板问卷
+     * 
+     * @param ids 需要删除的标准模板问卷主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTStandardQuestionnaireByIds(Long[] ids)
+    {
+        return tStandardQuestionnaireMapper.deleteTStandardQuestionnaireByIds(ids);
+    }
+
+    /**
+     * 删除标准模板问卷信息
+     * 
+     * @param id 标准模板问卷主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTStandardQuestionnaireById(Long id)
+    {
+        return tStandardQuestionnaireMapper.deleteTStandardQuestionnaireById(id);
+    }
+}

+ 72 - 0
rc-buisness/src/main/resources/mapper/rc/TStandardChapterMapper.xml

@@ -0,0 +1,72 @@
+<?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.TStandardChapterMapper">
+    
+    <resultMap type="TStandardChapter" id="TStandardChapterResult">
+        <result property="id"    column="id"    />
+        <result property="code"    column="code"    />
+        <result property="name"    column="name"    />
+    </resultMap>
+
+    <sql id="selectTStandardChapterVo">
+        SELECT id, code, name,
+               CASE
+                 WHEN INSTR(code, '.') > 0 THEN SUBSTR(code, 1, INSTR(code, '.') - 1)
+                 ELSE code
+                   END AS codeSubStr
+        FROM t_standard_chapter
+    </sql>
+
+    <select id="selectTStandardChapterList" parameterType="TStandardChapter" resultMap="TStandardChapterResult">
+        <include refid="selectTStandardChapterVo"/>
+        <where>  
+            <if test="code != null  and code != ''"> and code = #{code}</if>
+            <if test="name != null  and name != ''"> and name like concat(concat('%', #{name}), '%')</if>
+        </where>
+        order by codeSubStr asc, code asc
+    </select>
+    
+    <select id="selectTStandardChapterById" parameterType="Long" resultMap="TStandardChapterResult">
+        <include refid="selectTStandardChapterVo"/>
+        where id = #{id}
+    </select>
+
+    <insert id="insertTStandardChapter" parameterType="TStandardChapter" useGeneratedKeys="true" keyProperty="id">
+        <selectKey keyProperty="id" order="BEFORE" resultType="Long">
+            select seq_t_standard_chapter.nextval as id from DUAL
+        </selectKey>
+        insert into t_standard_chapter
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null">id,</if>
+            <if test="code != null">code,</if>
+            <if test="name != null">name,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null">#{id},</if>
+            <if test="code != null">#{code},</if>
+            <if test="name != null">#{name},</if>
+         </trim>
+    </insert>
+
+    <update id="updateTStandardChapter" parameterType="TStandardChapter">
+        update t_standard_chapter
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="code != null">code = #{code},</if>
+            <if test="name != null">name = #{name},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteTStandardChapterById" parameterType="Long">
+        delete from t_standard_chapter where id = #{id}
+    </delete>
+
+    <delete id="deleteTStandardChapterByIds" parameterType="String">
+        delete from t_standard_chapter where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 117 - 0
rc-buisness/src/main/resources/mapper/rc/TStandardQuestionnaireMapper.xml

@@ -0,0 +1,117 @@
+<?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.TStandardQuestionnaireMapper">
+    
+    <resultMap type="TStandardQuestionnaire" id="TStandardQuestionnaireResult">
+        <result property="id"    column="id"    />
+        <result property="chapterId"    column="chapter_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="yesNoNa"    column="yes_no_na"    />
+        <result property="minimumStandard"    column="minimum_standard"    />
+        <result property="remarks"    column="remarks"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="deleteTime"    column="delete_time"    />
+        <result property="link"    column="link"    />
+        <result property="delFlag"    column="del_flag"    />
+    </resultMap>
+
+    <sql id="selectTStandardQuestionnaireVo">
+        select id, chapter_id, year, type, directory, code, name, yes_no_na, minimum_standard, remarks, create_time, delete_time, link, del_flag from t_standard_questionnaire
+    </sql>
+
+    <select id="selectTStandardQuestionnaireList" parameterType="TStandardQuestionnaire" resultMap="TStandardQuestionnaireResult">
+        <include refid="selectTStandardQuestionnaireVo"/>
+        <where>  
+            <if test="chapterId != null "> and chapter_id = #{chapterId}</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="yesNoNa != null  and yesNoNa != ''"> and yes_no_na = #{yesNoNa}</if>
+            <if test="minimumStandard != null  and minimumStandard != ''"> and minimum_standard = #{minimumStandard}</if>
+            <if test="remarks != null  and remarks != ''"> and remarks = #{remarks}</if>
+            <if test="deleteTime != null "> and delete_time = #{deleteTime}</if>
+            <if test="link != null "> and link = #{link}</if>
+        </where>
+    </select>
+    
+    <select id="selectTStandardQuestionnaireById" parameterType="Long" resultMap="TStandardQuestionnaireResult">
+        <include refid="selectTStandardQuestionnaireVo"/>
+        where id = #{id} and del_flag = 0
+    </select>
+
+    <insert id="insertTStandardQuestionnaire" parameterType="TStandardQuestionnaire" useGeneratedKeys="true" keyProperty="id">
+        <selectKey keyProperty="id" order="BEFORE" resultType="Long">
+            select seq_t_standard_questionnaire.nextval as id from DUAL
+        </selectKey>
+        insert into t_standard_questionnaire
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null">id,</if>
+            <if test="chapterId != null">chapter_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="yesNoNa != null">yes_no_na,</if>
+            <if test="minimumStandard != null">minimum_standard,</if>
+            <if test="remarks != null">remarks,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="deleteTime != null">delete_time,</if>
+            <if test="link != null">link,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null">#{id},</if>
+            <if test="chapterId != null">#{chapterId},</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="yesNoNa != null">#{yesNoNa},</if>
+            <if test="minimumStandard != null">#{minimumStandard},</if>
+            <if test="remarks != null">#{remarks},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="deleteTime != null">#{deleteTime},</if>
+            <if test="link != null">#{link},</if>
+         </trim>
+    </insert>
+
+    <update id="updateTStandardQuestionnaire" parameterType="TStandardQuestionnaire">
+        update t_standard_questionnaire
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="chapterId != null">chapter_id = #{chapterId},</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="yesNoNa != null">yes_no_na = #{yesNoNa},</if>
+            <if test="minimumStandard != null">minimum_standard = #{minimumStandard},</if>
+            <if test="remarks != null">remarks = #{remarks},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="deleteTime != null">delete_time = #{deleteTime},</if>
+            <if test="delFlag != null">del_flag = #{delFlag},</if>
+            <if test="link != null">link = #{link},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteTStandardQuestionnaireById" parameterType="Long">
+        update t_standard_questionnaire set del_flag = 2, delete_time = sysdate where id = #{id}
+    </delete>
+
+    <delete id="deleteTStandardQuestionnaireByIds" parameterType="String">
+        update t_standard_questionnaire set del_flag = 2, delete_time = sysdate where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

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

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询标准模板章节列表
+export function listStandardChapter(query) {
+  return request({
+    url: '/rc/standardchapter/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询标准模板章节详细
+export function getStandardChapter(id) {
+  return request({
+    url: '/rc/standardchapter/' + id,
+    method: 'get'
+  })
+}
+
+// 新增标准模板章节
+export function addStandardChapter(data) {
+  return request({
+    url: '/rc/standardchapter',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改标准模板章节
+export function updateStandardChapter(data) {
+  return request({
+    url: '/rc/standardchapter',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除标准模板章节
+export function delStandardChapter(id) {
+  return request({
+    url: '/rc/standardchapter/' + id,
+    method: 'delete'
+  })
+}

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

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询标准模板问卷列表
+export function listStandardQuestionnaire(query) {
+  return request({
+    url: '/rc/standardquestionnaire/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询标准模板问卷详细
+export function getStandardQuestionnaire(id) {
+  return request({
+    url: '/rc/standardquestionnaire/' + id,
+    method: 'get'
+  })
+}
+
+// 新增标准模板问卷
+export function addStandardQuestionnaire(data) {
+  return request({
+    url: '/rc/standardquestionnaire',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改标准模板问卷
+export function updateStandardQuestionnaire(data) {
+  return request({
+    url: '/rc/standardquestionnaire',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除标准模板问卷
+export function delStandardQuestionnaire(id) {
+  return request({
+    url: '/rc/standardquestionnaire/' + id,
+    method: 'delete'
+  })
+}

+ 13 - 0
ruoyi-ui/src/router/index.js

@@ -127,6 +127,19 @@ export const constantRoutes = [
       }
     ]
   },
+  {
+    path: '/rc',
+    component: Layout,
+    hidden: true,
+    children: [
+      {
+        path: 'editstandardchapter',
+        component: (resolve) => require(['@/views/rc/editstandardchapter/index'], resolve),
+        name: 'EditStandardChapter',
+        meta: { title: '编辑标准模板章节' }
+      }
+    ]
+  },
   {
     path: '/rc',
     component: Layout,

+ 236 - 0
ruoyi-ui/src/views/rc/editstandardchapter/index.vue

@@ -0,0 +1,236 @@
+<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="code">
+        <el-input
+          v-model="queryParams.code"
+          placeholder="请输入序号"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="名称" prop="name">
+        <el-input
+          v-model="queryParams.name"
+          placeholder="请输入名称"
+          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"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+        >删除</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table border v-loading="loading" :data="chapterList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="序号" align="center" prop="code" />
+      <el-table-column label="名称" align="center" prop="name" />
+      <el-table-column label="操作" align="center" width="180" fixed="right" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <!-- 添加或修改章节对话框 -->
+    <el-dialog :close-on-click-modal="false" :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="code">
+          <el-input v-model="form.code" placeholder="请输入序号" />
+        </el-form-item>
+        <el-form-item label="名称" prop="name">
+          <el-input v-model="form.name" placeholder="请输入内容" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+  import { listStandardChapter, getStandardChapter, delStandardChapter, addStandardChapter, updateStandardChapter } from "@/api/rc/standardchapter";
+
+  export default {
+  name: "EditStandardChapter",
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 章节表格数据
+      chapterList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        code: null,
+        name: null,
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+      },
+    };
+  },
+  created() {
+    this.getList();
+    this.getDeptList();
+  },
+  methods: {
+    /** 查询章节列表 */
+    getList() {
+      this.loading = true;
+      listStandardChapter(this.queryParams).then(response => {
+        this.chapterList = response.data;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        code: null,
+        name: 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
+      getStandardChapter(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改章节";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.form.auditId = this.$route.query.auditId;
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateStandardChapter(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addStandardChapter(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 delStandardChapter(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('rc/standardchapter/export', {
+        ...this.queryParams
+      }, `standardchapter${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>

+ 185 - 0
ruoyi-ui/src/views/rc/standardchapter/index.vue

@@ -0,0 +1,185 @@
+<template>
+  <div class="app-container" style="padding: 0px;">
+    <span>
+      <div class="head-container">
+      <el-input
+        v-model="queryParams.name"
+        placeholder="请输入章节名称"
+        clearable
+        size="small"
+        prefix-icon="el-icon-search"
+        style="margin-bottom: 20px"
+        @change="getList()"
+      />
+      </div>
+      <div class="head-container">
+        <el-table
+          :height="clientHeight"
+          ref="chapterList"
+          v-loading="loading"
+          :data="chapterList"
+          style="margin-bottom: 20px; font-size: 12px;"
+          border
+          class="menuTable"
+          @row-click="handleNodeClick"
+          :show-header="false">
+          <el-table-column align="center" prop="code" width="80" :show-overflow-tooltip="true"/>
+          <el-table-column align="center" prop="name"/>
+        </el-table>
+      </div>
+    </span>
+  </div>
+</template>
+
+<script>
+import { listStandardChapter, getStandardChapter, delStandardChapter, addStandardChapter, updateStandardChapter } from "@/api/rc/standardchapter";
+
+export default {
+  name: "StandardChapter",
+  data() {
+    return {
+      clientHeight:300,
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 章节表格数据
+      chapterList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        code: null,
+        name: null,
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+      },
+    };
+  },
+  created() {
+    //设置表格高度对应屏幕高度
+    this.$nextTick(() => {
+      this.clientHeight = (document.body.clientHeight - 80) * 0.8
+    })
+    // this.getList();
+  },
+  methods: {
+    // 节点单击事件
+    handleNodeClick(row) {
+      this.$emit('standardquestionnaire', row.id);
+    },
+    /** 查询章节列表 */
+    getList() {
+      this.loading = true;
+      listStandardChapter().then(response => {
+        this.chapterList = response.data;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        code: null,
+        name: 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
+      getStandardChapter(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) {
+            updateStandardChapter(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addStandardChapter(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 delStandardChapter(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('rc/standardchapter/export', {
+        ...this.queryParams
+      }, `standardchapter${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>
+
+<style scoped>
+  .menuTable {
+    cursor: pointer;  /*鼠标悬停变小手*/
+  }
+</style>

+ 494 - 0
ruoyi-ui/src/views/rc/standardquestionnaire/index.vue

@@ -0,0 +1,494 @@
+<template>
+  <div class="app-container" style="padding: 0px;">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="80px">
+      <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
+          plain
+          size="mini"
+          @click="handleEditChapter"
+        >编辑左侧章节</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+        >删除</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table :height="clientHeight" border v-loading="loading" :data="questionnaireList" @selection-change="handleSelectionChange" style="font-size: 12px;">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="年份" align="center" prop="year"/>
+      <el-table-column label="问卷类型" align="center" prop="type">
+        <template slot-scope="scope">
+          <dict-tag :options="dict.type.t_sec_sub_chap_type" :value="scope.row.type"/>
+        </template>
+      </el-table-column>
+      <el-table-column label="目录" align="center" prop="directory" width="200" />
+      <el-table-column label="序号" align="center" prop="code" />
+      <el-table-column label="名称" align="center" prop="name" width="350" />
+      <el-table-column label="YES" align="center" prop="yesNoNa">
+        <template slot-scope="scope">
+          <span>{{scope.row.yesNoNa == 1 ? "√" : ""}}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="NO" align="center" prop="yesNoNa">
+        <template slot-scope="scope">
+          <span>{{scope.row.yesNoNa == 2 ? "√" : ""}}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="NA" align="center" prop="yesNoNa">
+        <template slot-scope="scope">
+          <span>{{scope.row.yesNoNa == 3 ? "√" : ""}}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="MinimumStandard" align="center" prop="minimumStandard" width="150" />
+      <el-table-column label="标准文档" align="center" prop="minimumStandard" width="150" />
+      <el-table-column label="Good Pratices" align="center" prop="minimumStandard" width="150" />
+      <el-table-column label="链接" align="center" prop="link" width="150" />
+      <el-table-column label="备注" align="center" prop="remarks" width="150" />
+      <el-table-column label="创建时间" align="center" prop="createTime" width="150">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="删除时间" align="center" prop="deleteTime" width="150">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.deleteTime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="数据状态" align="center" prop="delFlag" width="150" >
+        <template slot-scope="scope">
+          <span>{{scope.row.delFlag == 0 ? "" : "已删除"}}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="操作" align="center" width="120" fixed="right" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+          >删除</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 :close-on-click-modal="false" :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="type">
+          <el-select v-model="form.type" placeholder="请选择问卷类型">
+            <el-option
+              v-for="dict in dict.type.t_sec_sub_chap_type"
+              :key="dict.value"
+              :label="dict.label"
+              :value="dict.value"
+            ></el-option>
+          </el-select>
+        </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="" prop="yesNoNa">
+          <el-radio-group v-model="form.yesNoNa">
+            <el-radio
+              v-for="dict in dict.type.t_sec_sub_chap_yes_no_na"
+              :key="dict.value"
+              :label="dict.value"
+            >{{dict.label}}</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="Minimum Standard" prop="minimumStandard">
+          <el-input v-model="form.minimumStandard" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+        <el-form-item label="链接" prop="link">
+          <el-input v-model="form.link" 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>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+
+    <!-- 附件对话框 -->
+    <el-dialog  :close-on-click-modal="false" v-dialogDrag :title="doc.title" :visible.sync="doc.open" width="800px" append-to-body >
+      <el-upload ref="doc"
+                 :limit="50"
+                 :headers="doc.headers"
+                 :action="doc.url + '?pType=' + doc.pType + '&pId=' + doc.pId"
+                 :disabled="doc.isUploading"
+                 :on-progress="handleFileDocProgress"
+                 :on-success="handleFileDocSuccess"
+                 :auto-upload="true"
+                 drag
+      >
+        <i class="el-icon-upload"></i>
+        <div class="el-upload__text">
+          将文件拖到此处,或
+          <em>点击上传</em>
+        </div>
+      </el-upload>
+      <el-table :data="doc.commonfileList" border>
+        <el-table-column label="文件名" align="center" prop="fileName" :show-overflow-tooltip="true">
+          <template slot-scope="scope">
+            <a  class="link-type"  @click="handleDownload(scope.row)">
+              <span>{{ scope.row.fileName }}</span>
+            </a>
+          </template>
+        </el-table-column>
+        <el-table-column label="大小(Kb)" align="center" prop="fileSize" :show-overflow-tooltip="true" width="80" />
+        <el-table-column label="上传人" align="center" prop="creator" :show-overflow-tooltip="true" width="120"/>
+        <el-table-column label="操作" align="center" width="220" class-name="small-padding fixed-width">
+          <template slot-scope="scope">
+            <el-button
+              size="mini"
+              type="text"
+              icon="el-icon-download"
+              @click="handleDownload(scope.row)"
+            >下载</el-button>
+            <el-button
+              size="mini"
+              type="text"
+              icon="el-icon-delete"
+              @click="handleDeleteDoc(scope.row)"
+            >删除</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listStandardQuestionnaire, getStandardQuestionnaire, delStandardQuestionnaire, addStandardQuestionnaire, updateStandardQuestionnaire } from "@/api/rc/standardquestionnaire";
+import { getToken } from "@/utils/auth";
+import { addCommonfile, allFileList, delCommonfile, updateCommonfile } from "@/api/rc/commonfile";
+
+export default {
+  name: "StandardQuestionnaire",
+  dicts: ['t_open_item_result', 't_open_item_type', 't_open_item_level', 't_open_item_status','t_sec_sub_chap_completion_status', 't_sec_sub_chap_yes_no_na', 't_sec_sub_chap_type', 't_sec_sub_chap_standard'],
+  data() {
+    return {
+      clientHeight:300,
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 问卷表格数据
+      questionnaireList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        chapterId: null,
+        year: null,
+        type: null,
+        directory: null,
+        code: null,
+        name: null,
+        yesNoNa: null,
+        minimumStandard: null,
+        remarks: null
+      },
+      // 表单参数
+      form: {},
+      openitemForm: {},
+      // 表单校验
+      rules: {
+      },
+      // 附件参数
+      doc: {
+        file: "",
+        // 是否显示弹出层(报告附件)
+        open: false,
+        // 弹出层标题(报告附件)
+        title: "附件",
+        // 是否禁用上传
+        isUploading: false,
+        // 是否更新已经存在的用户数据
+        updateSupport: 0,
+        // 报告附件上传位置编号
+        ids: 0,
+        // 设置上传的请求头部
+        headers: { Authorization: "Bearer " + getToken() },
+        // 上传的地址
+        url: process.env.VUE_APP_BASE_API + "/rc/commonfile/uploadFile",
+        commonfileList: null,
+        queryParams: {
+          pId: null,
+          pType: ''
+        },
+        pType: '',
+        pId: null,
+        form: {},
+      },
+    };
+  },
+  created() {
+    //设置表格高度对应屏幕高度
+    this.$nextTick(() => {
+      this.clientHeight = (document.body.clientHeight - 80) * 0.8
+    })
+    // this.getList();
+  },
+  methods: {
+    /** 附件按钮操作 */
+    handleDoc(row , type) {
+      var typeName = "";
+      if (type === "questionnaire-standard"){
+        typeName = "标准附件";
+        this.doc.pType = type
+        this.doc.queryParams.pType = type
+        this.doc.id = row.id;
+        this.doc.title = "标准附件(CODE " + row.code + ")";
+        this.doc.open = true;
+        this.doc.queryParams.pId = row.id
+        this.doc.pId = row.id
+        this.getFileList();
+      } else if (type === 'audit') {
+        this.$router.push({
+          path: '/rc/file',
+          query: {
+            linkId: row.id,
+            linkName: 'questionnaire',
+            auditResult: this.auditResult,
+          }
+        })
+      }
+    },
+    getFileList(){
+      allFileList(this.doc.queryParams).then(response => {
+        this.doc.commonfileList = response;
+      });
+    },
+    //附件上传中处理
+    handleFileDocProgress(event, file, fileList) {
+      this.doc.file = file;
+      this.doc.isUploading = true;
+    },
+    //附件上传成功处理
+    handleFileDocSuccess(response, file, fileList) {
+      this.doc.isUploading = false;
+      this.$alert(response.msg, '导入结果', { dangerouslyUseHTMLString: true });
+      this.getFileList()
+      this.$refs.doc.clearFiles();
+    },
+    // 文件下载处理
+    handleDownload(row) {
+      var name = row.fileName;
+      var url = row.fileUrl;
+      var suffix = url.substring(url.lastIndexOf("."), url.length);
+      const a = document.createElement('a')
+      a.setAttribute('download', name)
+      a.setAttribute('target', '_blank')
+      a.setAttribute('href', process.env.VUE_APP_BASE_API + url)
+      a.click()
+    },
+    /** 删除按钮操作 */
+    handleDeleteDoc(row) {
+      const ids = row.id || this.ids;
+      this.$confirm('是否确认删除?', '警告', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: "warning"
+      }).then(function() {
+        return delCommonfile(ids);
+      }).then(() => {
+        this.getFileList()
+        this.$message({
+          message: '删除成功',
+          type: 'success'
+        });
+      })
+    },
+    /** 编辑左侧章节 */
+    handleEditChapter() {
+      this.$router.push({
+        path: "/rc/editstandardchapter",
+        query: {
+        }
+      });
+    },
+    /** 查询问卷列表 */
+    getList(chapterId) {
+      this.loading = true;
+      this.loading = false;
+      if (chapterId != null) {
+        this.queryParams.chapterId = chapterId;
+      }
+      listStandardQuestionnaire(this.queryParams).then(response => {
+        this.questionnaireList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        chapterId: null,
+        year: null,
+        type: null,
+        directory: null,
+        code: null,
+        name: null,
+        yesNoNa: null,
+        minimumStandard: 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.form.chapterId = this.queryParams.chapterId;
+      this.open = true;
+      this.title = "添加问卷";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getStandardQuestionnaire(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) {
+            updateStandardQuestionnaire(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addStandardQuestionnaire(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 delStandardQuestionnaire(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('rc/standardquestionnaire/export', {
+        ...this.queryParams
+      }, `standardquestionnaire_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>

+ 31 - 0
ruoyi-ui/src/views/rc/standardtemplate/index.vue

@@ -0,0 +1,31 @@
+<template>
+  <div class="app-container">
+    <el-row :gutter="20">
+      <el-col :span="5" :xs="24">
+        <standard-chapter ref="standardchapter" @questionnaire="getQuestionnaire"></standard-chapter>
+      </el-col>
+      <el-col :span="19" :xs="24">
+        <standard-questionnaire ref="standardquestionnaire"></standard-questionnaire>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import StandardChapter from "../standardchapter";
+import StandardQuestionnaire from "../standardquestionnaire";
+
+export default {
+  name: "StandardTemplate",
+  components: { StandardChapter, StandardQuestionnaire },
+  mounted() {
+    this.$refs.standardchapter.getList();
+    this.$refs.standardquestionnaire.getList();
+  },
+  methods: {
+    getQuestionnaire(chapterId) {
+      this.$refs.standardquestionnaire.getList(chapterId);
+    }
+  }
+};
+</script>