瀏覽代碼

ly eoeg 日常管理模块

ly 2 月之前
父節點
當前提交
eb942d7e5c
共有 26 個文件被更改,包括 2847 次插入48 次删除
  1. 103 0
      master/src/main/java/com/ruoyi/project/plant/controller/TEoegDailyManagementController.java
  2. 446 0
      master/src/main/java/com/ruoyi/project/plant/domain/TEoegDailyManagement.java
  3. 63 0
      master/src/main/java/com/ruoyi/project/plant/mapper/TEoegDailyManagementMapper.java
  4. 61 0
      master/src/main/java/com/ruoyi/project/plant/service/ITEoegDailyManagementService.java
  5. 93 0
      master/src/main/java/com/ruoyi/project/plant/service/impl/TEoegDailyManagementServiceImpl.java
  6. 6 7
      master/src/main/java/com/ruoyi/project/production/controller/TFurnanceTemperatureController.java
  7. 1 1
      master/src/main/java/com/ruoyi/project/training/controller/TTrainingCompanylevelController.java
  8. 1 1
      master/src/main/resources/application.yml
  9. 206 0
      master/src/main/resources/mybatis/plant/TEoegDailyManagementMapper.xml
  10. 1 0
      master/src/main/resources/mybatis/production/TLimsDataMapper.xml
  11. 二進制
      master/src/main/resources/static/template/plant/eoeg-daily-management.xlsx
  12. 1 1
      master/src/main/resources/vm/java/controller.java.vm
  13. 1 3
      master/src/main/resources/vm/sql/sql.vm
  14. 1 1
      master/src/main/resources/vm/vue/index.vue.vm
  15. 61 0
      ui/src/api/plant/eoeg-daily-management.js
  16. 3 4
      ui/src/api/production/temperature.js
  17. 14 0
      ui/src/router/index.js
  18. 1 1
      ui/src/views/login.vue
  19. 11 7
      ui/src/views/plant/EOEGorganization/index.vue
  20. 1040 0
      ui/src/views/plant/eoeg-daily-management/index.vue
  21. 1 1
      ui/src/views/production/temperature/coil.vue
  22. 10 10
      ui/src/views/training/bccdevice/index.vue
  23. 1 1
      ui/src/views/training/companylevel/index.vue
  24. 13 0
      ui/src/views/training/elearn/paper/exam.vue
  25. 698 0
      ui/src/views/training/process-diagram.vue
  26. 10 10
      ui/src/views/training/trainingbcc/deviceList.vue

+ 103 - 0
master/src/main/java/com/ruoyi/project/plant/controller/TEoegDailyManagementController.java

@@ -0,0 +1,103 @@
+package com.ruoyi.project.plant.controller;
+
+import java.util.List;
+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.framework.aspectj.lang.annotation.Log;
+import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
+import com.ruoyi.project.plant.domain.TEoegDailyManagement;
+import com.ruoyi.project.plant.service.ITEoegDailyManagementService;
+import com.ruoyi.framework.web.controller.BaseController;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.framework.web.page.TableDataInfo;
+
+/**
+ * 日常管理EOEGController
+ *
+ * @author ssy
+ * @date 2025-10-10
+ */
+@RestController
+@RequestMapping("/plant/eoeg-daily-management")
+public class TEoegDailyManagementController extends BaseController
+{
+    @Autowired
+    private ITEoegDailyManagementService tEoegDailyManagementService;
+
+    /**
+     * 查询日常管理EOEG列表
+     */
+    @PreAuthorize("@ss.hasPermi('plant:eoeg-daily-management:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TEoegDailyManagement tEoegDailyManagement)
+    {
+        startPage();
+        List<TEoegDailyManagement> list = tEoegDailyManagementService.selectTEoegDailyManagementList(tEoegDailyManagement);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出日常管理EOEG列表
+     */
+    @PreAuthorize("@ss.hasPermi('plant:eoeg-daily-management:list')")
+    @Log(title = "日常管理EOEG", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult export(TEoegDailyManagement tEoegDailyManagement)
+    {
+        List<TEoegDailyManagement> list = tEoegDailyManagementService.selectTEoegDailyManagementList(tEoegDailyManagement);
+        ExcelUtil<TEoegDailyManagement> util = new ExcelUtil<TEoegDailyManagement>(TEoegDailyManagement.class);
+        return util.exportExcel(list, "eoeg-daily-management");
+    }
+
+    /**
+     * 获取日常管理EOEG详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('plant:eoeg-daily-management:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return AjaxResult.success(tEoegDailyManagementService.selectTEoegDailyManagementById(id));
+    }
+
+    /**
+     * 新增日常管理EOEG
+     */
+    @PreAuthorize("@ss.hasPermi('plant:eoeg-daily-management:add')")
+    @Log(title = "日常管理EOEG", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TEoegDailyManagement tEoegDailyManagement)
+    {
+        return toAjax(tEoegDailyManagementService.insertTEoegDailyManagement(tEoegDailyManagement));
+    }
+
+    /**
+     * 修改日常管理EOEG
+     */
+    @PreAuthorize("@ss.hasPermi('plant:eoeg-daily-management:edit')")
+    @Log(title = "日常管理EOEG", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TEoegDailyManagement tEoegDailyManagement)
+    {
+        return toAjax(tEoegDailyManagementService.updateTEoegDailyManagement(tEoegDailyManagement));
+    }
+
+    /**
+     * 删除日常管理EOEG
+     */
+    @PreAuthorize("@ss.hasPermi('plant:eoeg-daily-management:remove')")
+    @Log(title = "日常管理EOEG", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(tEoegDailyManagementService.deleteTEoegDailyManagementByIds(ids));
+    }
+}

+ 446 - 0
master/src/main/java/com/ruoyi/project/plant/domain/TEoegDailyManagement.java

@@ -0,0 +1,446 @@
+package com.ruoyi.project.plant.domain;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.framework.aspectj.lang.annotation.Excel;
+import com.ruoyi.framework.web.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+/**
+ * 日常管理EOEG对象 t_eoeg_daily_management
+ *
+ * @author ssy
+ * @date 2025-10-10
+ */
+public class TEoegDailyManagement extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 主键ID */
+    private Long id;
+
+    /** 年份 */
+    @Excel(name = "年份")
+    private String year;
+
+    /** 开始月份 */
+    @Excel(name = "开始月份")
+    private String startMonth;
+
+    /** 结束月份 */
+    @Excel(name = "结束月份")
+    private String endMonth;
+
+    /** RC Code */
+    @Excel(name = "RC Code")
+    private String rcCode;
+
+    /** 主题 */
+    @Excel(name = "主题")
+    private String subject;
+
+    /** 工作内容 */
+    @Excel(name = "工作内容")
+    private String workContent;
+
+    /** 责任人 */
+    @Excel(name = "责任人")
+    private String responsiblePerson;
+
+    /** 频率 */
+    @Excel(name = "频率")
+    private String frequency;
+
+    /** 标准要求(如有) */
+    @Excel(name = "标准要求(如有)")
+    private String standard;
+
+    /** 完成情况 */
+    @Excel(name = "完成情况")
+    private String finishStatus;
+
+    /** Q1 1月完成情况 */
+    @Excel(name = "Q1 1月完成情况")
+    private String q1Jan;
+
+    /** Q1 2月完成情况 */
+    @Excel(name = "Q1 2月完成情况")
+    private String q1Feb;
+
+    /** Q1 3月完成情况 */
+    @Excel(name = "Q1 3月完成情况")
+    private String q1Mar;
+
+    /** Q2 4月完成情况 */
+    @Excel(name = "Q2 4月完成情况")
+    private String q2Apr;
+
+    /** Q2 5月完成情况 */
+    @Excel(name = "Q2 5月完成情况")
+    private String q2May;
+
+    /** Q2 6月完成情况 */
+    @Excel(name = "Q2 6月完成情况")
+    private String q2Jun;
+
+    /** Q3 7月完成情况 */
+    @Excel(name = "Q3 7月完成情况")
+    private String q3Jul;
+
+    /** Q3 8月完成情况 */
+    @Excel(name = "Q3 8月完成情况")
+    private String q3Aug;
+
+    /** Q3 9月完成情况 */
+    @Excel(name = "Q3 9月完成情况")
+    private String q3Sep;
+
+    /** Q4 10月完成情况 */
+    @Excel(name = "Q4 10月完成情况")
+    private String q4Oct;
+
+    /** Q4 11月完成情况 */
+    @Excel(name = "Q4 11月完成情况")
+    private String q4Nov;
+
+    /** Q4 12月完成情况 */
+    @Excel(name = "Q4 12月完成情况")
+    private String q4Dec;
+
+    /** 删除状态(0:正常 1:删除) */
+    private Long delFlag;
+
+    /** 创建人 */
+    @Excel(name = "创建人")
+    private String createrCode;
+
+    /** 创建时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd" , timezone = "GMT+8")
+    @Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date createdate;
+
+    /** 修改人 */
+    @Excel(name = "修改人")
+    private String updaterCode;
+
+    /** 修改时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd" , timezone = "GMT+8")
+    @Excel(name = "修改时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date updatedate;
+
+    /** 部门编号 */
+    @Excel(name = "部门编号")
+    private Long deptId;
+
+    /** 备注 */
+    @Excel(name = "备注")
+    private String remarks;
+
+    public void setId(Long id)
+    {
+        this.id = id;
+    }
+
+    public Long getId()
+    {
+        return id;
+    }
+    public void setYear(String year)
+    {
+        this.year = year;
+    }
+
+    public String getYear()
+    {
+        return year;
+    }
+    public void setStartMonth(String startMonth)
+    {
+        this.startMonth = startMonth;
+    }
+
+    public String getStartMonth()
+    {
+        return startMonth;
+    }
+    public void setEndMonth(String endMonth)
+    {
+        this.endMonth = endMonth;
+    }
+
+    public String getEndMonth()
+    {
+        return endMonth;
+    }
+    public void setRcCode(String rcCode)
+    {
+        this.rcCode = rcCode;
+    }
+
+    public String getRcCode()
+    {
+        return rcCode;
+    }
+    public void setSubject(String subject)
+    {
+        this.subject = subject;
+    }
+
+    public String getSubject()
+    {
+        return subject;
+    }
+    public void setWorkContent(String workContent)
+    {
+        this.workContent = workContent;
+    }
+
+    public String getWorkContent()
+    {
+        return workContent;
+    }
+    public void setResponsiblePerson(String responsiblePerson)
+    {
+        this.responsiblePerson = responsiblePerson;
+    }
+
+    public String getResponsiblePerson()
+    {
+        return responsiblePerson;
+    }
+    public void setFrequency(String frequency)
+    {
+        this.frequency = frequency;
+    }
+
+    public String getFrequency()
+    {
+        return frequency;
+    }
+    public void setStandard(String standard)
+    {
+        this.standard = standard;
+    }
+
+    public String getStandard()
+    {
+        return standard;
+    }
+    public void setFinishStatus(String finishStatus)
+    {
+        this.finishStatus = finishStatus;
+    }
+
+    public String getFinishStatus()
+    {
+        return finishStatus;
+    }
+    public void setQ1Jan(String q1Jan)
+    {
+        this.q1Jan = q1Jan;
+    }
+
+    public String getQ1Jan()
+    {
+        return q1Jan;
+    }
+    public void setQ1Feb(String q1Feb)
+    {
+        this.q1Feb = q1Feb;
+    }
+
+    public String getQ1Feb()
+    {
+        return q1Feb;
+    }
+    public void setQ1Mar(String q1Mar)
+    {
+        this.q1Mar = q1Mar;
+    }
+
+    public String getQ1Mar()
+    {
+        return q1Mar;
+    }
+    public void setQ2Apr(String q2Apr)
+    {
+        this.q2Apr = q2Apr;
+    }
+
+    public String getQ2Apr()
+    {
+        return q2Apr;
+    }
+    public void setQ2May(String q2May)
+    {
+        this.q2May = q2May;
+    }
+
+    public String getQ2May()
+    {
+        return q2May;
+    }
+    public void setQ2Jun(String q2Jun)
+    {
+        this.q2Jun = q2Jun;
+    }
+
+    public String getQ2Jun()
+    {
+        return q2Jun;
+    }
+    public void setQ3Jul(String q3Jul)
+    {
+        this.q3Jul = q3Jul;
+    }
+
+    public String getQ3Jul()
+    {
+        return q3Jul;
+    }
+    public void setQ3Aug(String q3Aug)
+    {
+        this.q3Aug = q3Aug;
+    }
+
+    public String getQ3Aug()
+    {
+        return q3Aug;
+    }
+    public void setQ3Sep(String q3Sep)
+    {
+        this.q3Sep = q3Sep;
+    }
+
+    public String getQ3Sep()
+    {
+        return q3Sep;
+    }
+    public void setQ4Oct(String q4Oct)
+    {
+        this.q4Oct = q4Oct;
+    }
+
+    public String getQ4Oct()
+    {
+        return q4Oct;
+    }
+    public void setQ4Nov(String q4Nov)
+    {
+        this.q4Nov = q4Nov;
+    }
+
+    public String getQ4Nov()
+    {
+        return q4Nov;
+    }
+    public void setQ4Dec(String q4Dec)
+    {
+        this.q4Dec = q4Dec;
+    }
+
+    public String getQ4Dec()
+    {
+        return q4Dec;
+    }
+    public void setDelFlag(Long delFlag)
+    {
+        this.delFlag = delFlag;
+    }
+
+    public Long getDelFlag()
+    {
+        return delFlag;
+    }
+    public void setCreaterCode(String createrCode)
+    {
+        this.createrCode = createrCode;
+    }
+
+    public String getCreaterCode()
+    {
+        return createrCode;
+    }
+    public void setCreatedate(Date createdate)
+    {
+        this.createdate = createdate;
+    }
+
+    public Date getCreatedate()
+    {
+        return createdate;
+    }
+    public void setUpdaterCode(String updaterCode)
+    {
+        this.updaterCode = updaterCode;
+    }
+
+    public String getUpdaterCode()
+    {
+        return updaterCode;
+    }
+    public void setUpdatedate(Date updatedate)
+    {
+        this.updatedate = updatedate;
+    }
+
+    public Date getUpdatedate()
+    {
+        return updatedate;
+    }
+    public void setDeptId(Long deptId)
+    {
+        this.deptId = deptId;
+    }
+
+    public Long getDeptId()
+    {
+        return deptId;
+    }
+    public void setRemarks(String remarks)
+    {
+        this.remarks = remarks;
+    }
+
+    public String getRemarks()
+    {
+        return remarks;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("year", getYear())
+            .append("startMonth", getStartMonth())
+            .append("endMonth", getEndMonth())
+            .append("rcCode", getRcCode())
+            .append("subject", getSubject())
+            .append("workContent", getWorkContent())
+            .append("responsiblePerson", getResponsiblePerson())
+            .append("frequency", getFrequency())
+            .append("standard", getStandard())
+            .append("finishStatus", getFinishStatus())
+            .append("q1Jan", getQ1Jan())
+            .append("q1Feb", getQ1Feb())
+            .append("q1Mar", getQ1Mar())
+            .append("q2Apr", getQ2Apr())
+            .append("q2May", getQ2May())
+            .append("q2Jun", getQ2Jun())
+            .append("q3Jul", getQ3Jul())
+            .append("q3Aug", getQ3Aug())
+            .append("q3Sep", getQ3Sep())
+            .append("q4Oct", getQ4Oct())
+            .append("q4Nov", getQ4Nov())
+            .append("q4Dec", getQ4Dec())
+            .append("delFlag", getDelFlag())
+            .append("createrCode", getCreaterCode())
+            .append("createdate", getCreatedate())
+            .append("updaterCode", getUpdaterCode())
+            .append("updatedate", getUpdatedate())
+            .append("deptId", getDeptId())
+            .append("remarks", getRemarks())
+            .toString();
+    }
+}

+ 63 - 0
master/src/main/java/com/ruoyi/project/plant/mapper/TEoegDailyManagementMapper.java

@@ -0,0 +1,63 @@
+package com.ruoyi.project.plant.mapper;
+
+import java.util.List;
+import com.ruoyi.framework.aspectj.lang.annotation.DataScope;
+import com.ruoyi.project.plant.domain.TEoegDailyManagement;
+
+/**
+ * 日常管理EOEGMapper接口
+ * 
+ * @author ssy
+ * @date 2025-10-10
+ */
+public interface TEoegDailyManagementMapper 
+{
+    /**
+     * 查询日常管理EOEG
+     * 
+     * @param id 日常管理EOEGID
+     * @return 日常管理EOEG
+     */
+    public TEoegDailyManagement selectTEoegDailyManagementById(Long id);
+
+    /**
+     * 查询日常管理EOEG列表
+     * 
+     * @param tEoegDailyManagement 日常管理EOEG
+     * @return 日常管理EOEG集合
+     */
+    @DataScope(deptAlias = "d")
+    public List<TEoegDailyManagement> selectTEoegDailyManagementList(TEoegDailyManagement tEoegDailyManagement);
+
+    /**
+     * 新增日常管理EOEG
+     * 
+     * @param tEoegDailyManagement 日常管理EOEG
+     * @return 结果
+     */
+    public int insertTEoegDailyManagement(TEoegDailyManagement tEoegDailyManagement);
+
+    /**
+     * 修改日常管理EOEG
+     * 
+     * @param tEoegDailyManagement 日常管理EOEG
+     * @return 结果
+     */
+    public int updateTEoegDailyManagement(TEoegDailyManagement tEoegDailyManagement);
+
+    /**
+     * 删除日常管理EOEG
+     * 
+     * @param id 日常管理EOEGID
+     * @return 结果
+     */
+    public int deleteTEoegDailyManagementById(Long id);
+
+    /**
+     * 批量删除日常管理EOEG
+     * 
+     * @param ids 需要删除的数据ID
+     * @return 结果
+     */
+    public int deleteTEoegDailyManagementByIds(Long[] ids);
+}

+ 61 - 0
master/src/main/java/com/ruoyi/project/plant/service/ITEoegDailyManagementService.java

@@ -0,0 +1,61 @@
+package com.ruoyi.project.plant.service;
+
+import java.util.List;
+import com.ruoyi.project.plant.domain.TEoegDailyManagement;
+
+/**
+ * 日常管理EOEGService接口
+ * 
+ * @author ssy
+ * @date 2025-10-10
+ */
+public interface ITEoegDailyManagementService 
+{
+    /**
+     * 查询日常管理EOEG
+     * 
+     * @param id 日常管理EOEGID
+     * @return 日常管理EOEG
+     */
+    public TEoegDailyManagement selectTEoegDailyManagementById(Long id);
+
+    /**
+     * 查询日常管理EOEG列表
+     * 
+     * @param tEoegDailyManagement 日常管理EOEG
+     * @return 日常管理EOEG集合
+     */
+    public List<TEoegDailyManagement> selectTEoegDailyManagementList(TEoegDailyManagement tEoegDailyManagement);
+
+    /**
+     * 新增日常管理EOEG
+     * 
+     * @param tEoegDailyManagement 日常管理EOEG
+     * @return 结果
+     */
+    public int insertTEoegDailyManagement(TEoegDailyManagement tEoegDailyManagement);
+
+    /**
+     * 修改日常管理EOEG
+     * 
+     * @param tEoegDailyManagement 日常管理EOEG
+     * @return 结果
+     */
+    public int updateTEoegDailyManagement(TEoegDailyManagement tEoegDailyManagement);
+
+    /**
+     * 批量删除日常管理EOEG
+     * 
+     * @param ids 需要删除的日常管理EOEGID
+     * @return 结果
+     */
+    public int deleteTEoegDailyManagementByIds(Long[] ids);
+
+    /**
+     * 删除日常管理EOEG信息
+     * 
+     * @param id 日常管理EOEGID
+     * @return 结果
+     */
+    public int deleteTEoegDailyManagementById(Long id);
+}

+ 93 - 0
master/src/main/java/com/ruoyi/project/plant/service/impl/TEoegDailyManagementServiceImpl.java

@@ -0,0 +1,93 @@
+package com.ruoyi.project.plant.service.impl;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.project.plant.mapper.TEoegDailyManagementMapper;
+import com.ruoyi.project.plant.domain.TEoegDailyManagement;
+import com.ruoyi.project.plant.service.ITEoegDailyManagementService;
+
+/**
+ * 日常管理EOEGService业务层处理
+ *
+ * @author ssy
+ * @date 2025-10-10
+ */
+@Service
+public class TEoegDailyManagementServiceImpl implements ITEoegDailyManagementService
+{
+    @Autowired
+    private TEoegDailyManagementMapper tEoegDailyManagementMapper;
+
+    /**
+     * 查询日常管理EOEG
+     *
+     * @param id 日常管理EOEGID
+     * @return 日常管理EOEG
+     */
+    @Override
+    public TEoegDailyManagement selectTEoegDailyManagementById(Long id)
+    {
+        return tEoegDailyManagementMapper.selectTEoegDailyManagementById(id);
+    }
+
+    /**
+     * 查询日常管理EOEG列表
+     *
+     * @param tEoegDailyManagement 日常管理EOEG
+     * @return 日常管理EOEG
+     */
+    @Override
+    public List<TEoegDailyManagement> selectTEoegDailyManagementList(TEoegDailyManagement tEoegDailyManagement)
+    {
+        return tEoegDailyManagementMapper.selectTEoegDailyManagementList(tEoegDailyManagement);
+    }
+
+    /**
+     * 新增日常管理EOEG
+     *
+     * @param tEoegDailyManagement 日常管理EOEG
+     * @return 结果
+     */
+    @Override
+    public int insertTEoegDailyManagement(TEoegDailyManagement tEoegDailyManagement)
+    {
+        return tEoegDailyManagementMapper.insertTEoegDailyManagement(tEoegDailyManagement);
+    }
+
+    /**
+     * 修改日常管理EOEG
+     *
+     * @param tEoegDailyManagement 日常管理EOEG
+     * @return 结果
+     */
+    @Override
+    public int updateTEoegDailyManagement(TEoegDailyManagement tEoegDailyManagement)
+    {
+        return tEoegDailyManagementMapper.updateTEoegDailyManagement(tEoegDailyManagement);
+    }
+
+    /**
+     * 批量删除日常管理EOEG
+     *
+     * @param ids 需要删除的日常管理EOEGID
+     * @return 结果
+     */
+    @Override
+    public int deleteTEoegDailyManagementByIds(Long[] ids)
+    {
+        return tEoegDailyManagementMapper.deleteTEoegDailyManagementByIds(ids);
+    }
+
+    /**
+     * 删除日常管理EOEG信息
+     *
+     * @param id 日常管理EOEGID
+     * @return 结果
+     */
+    @Override
+    public int deleteTEoegDailyManagementById(Long id)
+    {
+        return tEoegDailyManagementMapper.deleteTEoegDailyManagementById(id);
+    }
+}

+ 6 - 7
master/src/main/java/com/ruoyi/project/production/controller/TFurnanceTemperatureController.java

@@ -1307,9 +1307,8 @@ public class TFurnanceTemperatureController extends BaseController
     /**
      * 预测每个PASS达到阈值(默认1080)的日期(最近60天数据),仅返回一条结果,含各PASS预测日期
      */
-    @PreAuthorize("@ss.hasPermi('production:temperature:list')")
-    @GetMapping("/coilPredict1080")
-    public AjaxResult coilPredict1080(TFurnanceTemperature tFurnanceTemperature) {
+    @GetMapping("/predict/coilPredict1080")
+    public AjaxResult coilPredict1080() {
         try {
             // 组装最近60天时间范围
             Date today = new Date();
@@ -2211,7 +2210,7 @@ public class TFurnanceTemperatureController extends BaseController
             String slope = "0";
             String equation = "y = 0x + 0";
             String predictedDate = "-";
-            
+
             if (chartData.size() >= 2) {
                 // 构建日期->值的映射用于线性回归
                 Map<String, Double> dateValueMap = new LinkedHashMap<>();
@@ -2228,13 +2227,13 @@ public class TFurnanceTemperatureController extends BaseController
                     }
                     dateValueMap.put((String) point.get("date"), value);
                 }
-                
+
                 // 使用MathUtil进行线性回归
                 regressionResult = MathUtil.predictDateToReachLimit(dateValueMap, 1080.0);
                 if (regressionResult != null) {
                     equation = regressionResult.get("equation");
                     predictedDate = regressionResult.get("date");
-                    
+
                     // 提取斜率
                     try {
                         slope = equation.split("x")[0].split("=")[1].trim();
@@ -2252,7 +2251,7 @@ public class TFurnanceTemperatureController extends BaseController
                 predictPoint.put("day", chartData.size() + 1); // 预测点位的天数
                 chartData.add(predictPoint);
             }
-            
+
             Map<String, Object> result = new HashMap<>();
             result.put("furnace", furnace);
             result.put("passNo", passNo);

+ 1 - 1
master/src/main/java/com/ruoyi/project/training/controller/TTrainingCompanylevelController.java

@@ -110,7 +110,7 @@ public class TTrainingCompanylevelController extends BaseController {
                             for (int j = 0; j < companylevels.size(); j++) {
                                 TTrainingCompanylevel companylevel = companylevels.get(j);
                             if (companylevel.getId().equals(hisparticipant.getCompanyId())) {
-                                if (companylevel.getFrequency() != null) {
+                                if (companylevel.getFrequency() != null && companylevel.getFrequency().matches("\\d+")) {
                                     Long frequency = Long.parseLong(companylevel.getFrequency()) * 365 * 24 * 3600 * 1000;
                                     Long validPeriod = hisparticipant.getStartDate().getTime() + frequency;
                                     Long nowDate = new Date().getTime();

+ 1 - 1
master/src/main/resources/application.yml

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

+ 206 - 0
master/src/main/resources/mybatis/plant/TEoegDailyManagementMapper.xml

@@ -0,0 +1,206 @@
+<?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.project.plant.mapper.TEoegDailyManagementMapper">
+
+    <resultMap type="TEoegDailyManagement" id="TEoegDailyManagementResult">
+        <result property="id"    column="id"    />
+        <result property="year"    column="year"    />
+        <result property="startMonth"    column="start_month"    />
+        <result property="endMonth"    column="end_month"    />
+        <result property="rcCode"    column="rc_code"    />
+        <result property="subject"    column="subject"    />
+        <result property="workContent"    column="work_content"    />
+        <result property="responsiblePerson"    column="responsible_person"    />
+        <result property="frequency"    column="frequency"    />
+        <result property="standard"    column="standard"    />
+        <result property="finishStatus"    column="finish_status"    />
+        <result property="q1Jan"    column="q1_jan"    />
+        <result property="q1Feb"    column="q1_feb"    />
+        <result property="q1Mar"    column="q1_mar"    />
+        <result property="q2Apr"    column="q2_apr"    />
+        <result property="q2May"    column="q2_may"    />
+        <result property="q2Jun"    column="q2_jun"    />
+        <result property="q3Jul"    column="q3_jul"    />
+        <result property="q3Aug"    column="q3_aug"    />
+        <result property="q3Sep"    column="q3_sep"    />
+        <result property="q4Oct"    column="q4_oct"    />
+        <result property="q4Nov"    column="q4_nov"    />
+        <result property="q4Dec"    column="q4_dec"    />
+        <result property="delFlag"    column="del_flag"    />
+        <result property="createrCode"    column="creater_code"    />
+        <result property="createdate"    column="createdate"    />
+        <result property="updaterCode"    column="updater_code"    />
+        <result property="updatedate"    column="updatedate"    />
+        <result property="deptId"    column="dept_id"    />
+        <result property="remarks"    column="remarks"    />
+        <result property="deptName" column="dept_name" />
+    </resultMap>
+
+    <sql id="selectTEoegDailyManagementVo">
+        select d.id, d.year, d.start_month, d.end_month, d.rc_code, d.subject, d.work_content, d.responsible_person, d.frequency, d.standard, d.finish_status, d.q1_jan, d.q1_feb, d.q1_mar, d.q2_apr, d.q2_may, d.q2_jun, d.q3_jul, d.q3_aug, d.q3_sep, d.q4_oct, d.q4_nov, d.q4_dec, d.del_flag, d.creater_code, d.createdate, d.updater_code, d.updatedate, d.dept_id, d.remarks ,s.dept_name from t_eoeg_daily_management d
+      left join sys_dept s on s.dept_id = d.dept_id
+    </sql>
+
+    <select id="selectTEoegDailyManagementList" parameterType="TEoegDailyManagement" resultMap="TEoegDailyManagementResult">
+        <include refid="selectTEoegDailyManagementVo"/>
+        <where>
+            <if test="year != null  and year != ''"> and year = #{year}</if>
+            <if test="startMonth != null  and startMonth != ''"> and start_month = #{startMonth}</if>
+            <if test="endMonth != null  and endMonth != ''"> and end_month = #{endMonth}</if>
+            <if test="rcCode != null  and rcCode != ''"> and rc_code = #{rcCode}</if>
+            <if test="subject != null  and subject != ''"> and subject = #{subject}</if>
+            <if test="workContent != null  and workContent != ''"> and work_content = #{workContent}</if>
+            <if test="responsiblePerson != null  and responsiblePerson != ''"> and responsible_person = #{responsiblePerson}</if>
+            <if test="frequency != null  and frequency != ''"> and frequency = #{frequency}</if>
+            <if test="standard != null  and standard != ''"> and standard = #{standard}</if>
+            <if test="finishStatus != null  and finishStatus != ''"> and finish_status = #{finishStatus}</if>
+            <if test="q1Jan != null  and q1Jan != ''"> and q1_jan = #{q1Jan}</if>
+            <if test="q1Feb != null  and q1Feb != ''"> and q1_feb = #{q1Feb}</if>
+            <if test="q1Mar != null  and q1Mar != ''"> and q1_mar = #{q1Mar}</if>
+            <if test="q2Apr != null  and q2Apr != ''"> and q2_apr = #{q2Apr}</if>
+            <if test="q2May != null  and q2May != ''"> and q2_may = #{q2May}</if>
+            <if test="q2Jun != null  and q2Jun != ''"> and q2_jun = #{q2Jun}</if>
+            <if test="q3Jul != null  and q3Jul != ''"> and q3_jul = #{q3Jul}</if>
+            <if test="q3Aug != null  and q3Aug != ''"> and q3_aug = #{q3Aug}</if>
+            <if test="q3Sep != null  and q3Sep != ''"> and q3_sep = #{q3Sep}</if>
+            <if test="q4Oct != null  and q4Oct != ''"> and q4_oct = #{q4Oct}</if>
+            <if test="q4Nov != null  and q4Nov != ''"> and q4_nov = #{q4Nov}</if>
+            <if test="q4Dec != null  and q4Dec != ''"> and q4_dec = #{q4Dec}</if>
+            <if test="createrCode != null  and createrCode != ''"> and creater_code = #{createrCode}</if>
+            <if test="createdate != null "> and createdate = #{createdate}</if>
+            <if test="updaterCode != null  and updaterCode != ''"> and updater_code = #{updaterCode}</if>
+            <if test="updatedate != null "> and updatedate = #{updatedate}</if>
+            <if test="deptId != null "> and dept_id = #{deptId}</if>
+            <if test="remarks != null  and remarks != ''"> and remarks = #{remarks}</if>
+            and d.del_flag = 0
+        </where>
+        <!-- 数据范围过滤 -->
+        ${params.dataScope}
+    </select>
+
+    <select id="selectTEoegDailyManagementById" parameterType="Long" resultMap="TEoegDailyManagementResult">
+        <include refid="selectTEoegDailyManagementVo"/>
+        where id = #{id}
+    </select>
+
+    <insert id="insertTEoegDailyManagement" parameterType="TEoegDailyManagement">
+        <selectKey keyProperty="id" resultType="long" order="BEFORE">
+            SELECT seq_t_eoeg_daily_management.NEXTVAL as id FROM DUAL
+        </selectKey>
+        insert into t_eoeg_daily_management
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null">id,</if>
+            <if test="year != null">year,</if>
+            <if test="startMonth != null">start_month,</if>
+            <if test="endMonth != null">end_month,</if>
+            <if test="rcCode != null">rc_code,</if>
+            <if test="subject != null">subject,</if>
+            <if test="workContent != null">work_content,</if>
+            <if test="responsiblePerson != null">responsible_person,</if>
+            <if test="frequency != null">frequency,</if>
+            <if test="standard != null">standard,</if>
+            <if test="finishStatus != null">finish_status,</if>
+            <if test="q1Jan != null">q1_jan,</if>
+            <if test="q1Feb != null">q1_feb,</if>
+            <if test="q1Mar != null">q1_mar,</if>
+            <if test="q2Apr != null">q2_apr,</if>
+            <if test="q2May != null">q2_may,</if>
+            <if test="q2Jun != null">q2_jun,</if>
+            <if test="q3Jul != null">q3_jul,</if>
+            <if test="q3Aug != null">q3_aug,</if>
+            <if test="q3Sep != null">q3_sep,</if>
+            <if test="q4Oct != null">q4_oct,</if>
+            <if test="q4Nov != null">q4_nov,</if>
+            <if test="q4Dec != null">q4_dec,</if>
+            <if test="delFlag != null">del_flag,</if>
+            <if test="createrCode != null">creater_code,</if>
+            <if test="createdate != null">createdate,</if>
+            <if test="updaterCode != null">updater_code,</if>
+            <if test="updatedate != null">updatedate,</if>
+            <if test="deptId != null">dept_id,</if>
+            <if test="remarks != null">remarks,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null">#{id},</if>
+            <if test="year != null">#{year},</if>
+            <if test="startMonth != null">#{startMonth},</if>
+            <if test="endMonth != null">#{endMonth},</if>
+            <if test="rcCode != null">#{rcCode},</if>
+            <if test="subject != null">#{subject},</if>
+            <if test="workContent != null">#{workContent},</if>
+            <if test="responsiblePerson != null">#{responsiblePerson},</if>
+            <if test="frequency != null">#{frequency},</if>
+            <if test="standard != null">#{standard},</if>
+            <if test="finishStatus != null">#{finishStatus},</if>
+            <if test="q1Jan != null">#{q1Jan},</if>
+            <if test="q1Feb != null">#{q1Feb},</if>
+            <if test="q1Mar != null">#{q1Mar},</if>
+            <if test="q2Apr != null">#{q2Apr},</if>
+            <if test="q2May != null">#{q2May},</if>
+            <if test="q2Jun != null">#{q2Jun},</if>
+            <if test="q3Jul != null">#{q3Jul},</if>
+            <if test="q3Aug != null">#{q3Aug},</if>
+            <if test="q3Sep != null">#{q3Sep},</if>
+            <if test="q4Oct != null">#{q4Oct},</if>
+            <if test="q4Nov != null">#{q4Nov},</if>
+            <if test="q4Dec != null">#{q4Dec},</if>
+            <if test="delFlag != null">#{delFlag},</if>
+            <if test="createrCode != null">#{createrCode},</if>
+            <if test="createdate != null">#{createdate},</if>
+            <if test="updaterCode != null">#{updaterCode},</if>
+            <if test="updatedate != null">#{updatedate},</if>
+            <if test="deptId != null">#{deptId},</if>
+            <if test="remarks != null">#{remarks},</if>
+         </trim>
+    </insert>
+
+    <update id="updateTEoegDailyManagement" parameterType="TEoegDailyManagement">
+        update t_eoeg_daily_management
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="year != null">year = #{year},</if>
+            <if test="startMonth != null">start_month = #{startMonth},</if>
+            <if test="endMonth != null">end_month = #{endMonth},</if>
+            <if test="rcCode != null">rc_code = #{rcCode},</if>
+            <if test="subject != null">subject = #{subject},</if>
+            <if test="workContent != null">work_content = #{workContent},</if>
+            <if test="responsiblePerson != null">responsible_person = #{responsiblePerson},</if>
+            <if test="frequency != null">frequency = #{frequency},</if>
+            <if test="standard != null">standard = #{standard},</if>
+            <if test="finishStatus != null">finish_status = #{finishStatus},</if>
+            <if test="q1Jan != null">q1_jan = #{q1Jan},</if>
+            <if test="q1Feb != null">q1_feb = #{q1Feb},</if>
+            <if test="q1Mar != null">q1_mar = #{q1Mar},</if>
+            <if test="q2Apr != null">q2_apr = #{q2Apr},</if>
+            <if test="q2May != null">q2_may = #{q2May},</if>
+            <if test="q2Jun != null">q2_jun = #{q2Jun},</if>
+            <if test="q3Jul != null">q3_jul = #{q3Jul},</if>
+            <if test="q3Aug != null">q3_aug = #{q3Aug},</if>
+            <if test="q3Sep != null">q3_sep = #{q3Sep},</if>
+            <if test="q4Oct != null">q4_oct = #{q4Oct},</if>
+            <if test="q4Nov != null">q4_nov = #{q4Nov},</if>
+            <if test="q4Dec != null">q4_dec = #{q4Dec},</if>
+            <if test="delFlag != null">del_flag = #{delFlag},</if>
+            <if test="createrCode != null">creater_code = #{createrCode},</if>
+            <if test="createdate != null">createdate = #{createdate},</if>
+            <if test="updaterCode != null">updater_code = #{updaterCode},</if>
+            <if test="updatedate != null">updatedate = #{updatedate},</if>
+            <if test="deptId != null">dept_id = #{deptId},</if>
+            <if test="remarks != null">remarks = #{remarks},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <update id="deleteTEoegDailyManagementById" parameterType="Long">
+        update t_eoeg_daily_management set del_flag = 2 where id = #{id}
+    </update>
+
+    <update id="deleteTEoegDailyManagementByIds" parameterType="String">
+        update t_eoeg_daily_management set del_flag = 2 where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </update>
+
+</mapper>

+ 1 - 0
master/src/main/resources/mybatis/production/TLimsDataMapper.xml

@@ -22,6 +22,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="updaterCode"    column="updater_code"    />
         <result property="updatedate"    column="updatedate"    />
         <result property="remarks"    column="remarks"    />
+        <result property="deptId" column="dept_id" />
         <result property="deptName" column="dept_name" />
     </resultMap>
 

二進制
master/src/main/resources/static/template/plant/eoeg-daily-management.xlsx


+ 1 - 1
master/src/main/resources/vm/java/controller.java.vm

@@ -59,7 +59,7 @@ public class ${ClassName}Controller extends BaseController
     /**
      * 导出${functionName}列表
      */
-    @PreAuthorize("@ss.hasPermi('${permissionPrefix}:export')")
+    @PreAuthorize("@ss.hasPermi('${permissionPrefix}:list')")
     @Log(title = "${functionName}", businessType = BusinessType.EXPORT)
     @GetMapping("/export")
     public AjaxResult export(${ClassName} ${className})

+ 1 - 3
master/src/main/resources/vm/sql/sql.vm

@@ -15,8 +15,6 @@ values(seq_sys_menu.nextval, '${functionName}修改', ${table.menuId}, '3',  '#'
 insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
 values(seq_sys_menu.nextval, '${functionName}删除', ${table.menuId}, '4',  '#', '', 1,  0, 'F', '0', '0', '${permissionPrefix}:remove',       '#', 'admin', sysdate, 'ry', null, '');
 
-insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
-values(seq_sys_menu.nextval, '${functionName}导出', ${table.menuId}, '5',  '#', '', 1,  0, 'F', '0', '0', '${permissionPrefix}:export',       '#', 'admin', sysdate, 'ry', null, '');
 
 #if($pkColumn.increment)
 -- ${tableName}主键序列
@@ -26,4 +24,4 @@ start with 1000
 nomaxvalue
 nominvalue
 cache 20;
-#end
+#end

+ 1 - 1
master/src/main/resources/vm/vue/index.vue.vm

@@ -101,7 +101,7 @@
           icon="el-icon-download"
           size="mini"
           @click="handleExport"
-          v-hasPermi="['${moduleName}:${businessName}:export']"
+          v-hasPermi="['${moduleName}:${businessName}:list']"
         >导出</el-button>
       </el-col>
 	  <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>

+ 61 - 0
ui/src/api/plant/eoeg-daily-management.js

@@ -0,0 +1,61 @@
+import request from '@/utils/request'
+
+// 查询日常管理EOEG列表
+export function listEoeg_daily_management(query) {
+  return request({
+    url: '/plant/eoeg-daily-management/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询日常管理EOEG详细
+export function getEoeg_daily_management(id) {
+  return request({
+    url: '/plant/eoeg-daily-management/' + id,
+    method: 'get'
+  })
+}
+
+// 新增日常管理EOEG
+export function addEoeg_daily_management(data) {
+  return request({
+    url: '/plant/eoeg-daily-management',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改日常管理EOEG
+export function updateEoeg_daily_management(data) {
+  return request({
+    url: '/plant/eoeg-daily-management',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除日常管理EOEG
+export function delEoeg_daily_management(id) {
+  return request({
+    url: '/plant/eoeg-daily-management/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出日常管理EOEG
+export function exportEoeg_daily_management(query) {
+  return request({
+    url: '/plant/eoeg-daily-management/export',
+    method: 'get',
+    params: query
+  })
+}
+
+// 下载模板
+export function importTemplate() {
+  return request({
+    url: '/plant/eoeg-daily-management/importTemplate',
+    method: 'get'
+  })
+}

+ 3 - 4
ui/src/api/production/temperature.js

@@ -36,11 +36,10 @@ export function listCoil(query) {
 }
 
 // 预测各炉各PASS达到1080的日期(最近60天)
-export function listCoilPredict1080(query) {
+export function listCoilPredict1080() {
   return request({
-    url: '/production/temperature/coilPredict1080',
-    method: 'get',
-    params: query
+    url: '/production/temperature/predict/coilPredict1080',
+    method: 'get'
   })
 }
 

+ 14 - 0
ui/src/router/index.js

@@ -969,6 +969,20 @@ export const constantRoutes = [
       }
     ]
   },
+  // 工艺流程图
+  {
+    path: '/training',
+    component: Layout,
+    hidden: true,
+    children: [
+      {
+        path: 'process-diagram',
+        component: (resolve) => require(['@/views/training/process-diagram'], resolve),
+        name: 'ProcessDiagram',
+        meta: { title: '燃烧与热回收系统工艺流程图' }
+      }
+    ]
+  },
 ]
 export default new Router({
   base: '/cpms/',

+ 1 - 1
ui/src/views/login.vue

@@ -321,7 +321,7 @@ export default {
   color: #ffffff;
 }
 
-.el-checkbox {
+.login-form .el-checkbox {
   color: #ffffff;
 }
 

+ 11 - 7
ui/src/views/plant/EOEGorganization/index.vue

@@ -251,7 +251,7 @@ export default {
                   pId: this.staffmgrList[i].pId,
                   label: this.staffmgrList[i].name,
                   post: post,
-                  secretary: [[], []],
+                  secretary: [[], [], []],
                   img: 'http://47.114.101.16' + process.env.VUE_APP_BASE_API + this.staffmgrList[i].photo,
                   // img: 'https://cpms.basf-ypc.net.cn' + process.env.VUE_APP_BASE_API + this.staffmgrList[i].photo,
                   bz1: false,
@@ -370,12 +370,14 @@ export default {
         if(this.$store.state.user.homeType == 5) { //合成器生产主管和工程师再一个位置
           if (item.pId !== 0 && map[item.pId]) {
             // map[item.pId].children ? map[item.pId].children.push(item) : map[item.pId].children = [item];
-            if (item.post == '装置经理' || item.post == '安全专员' || item.post == '首席专家') {
+            if (item.post == '安全专员' || item.post == '首席专家') {
               map[item.pId].secretary ? map[item.pId].secretary[0].push(item) : map[item.pId].secretary[0] = [item];
+            } else if (item.post == '装置经理') {
+              map[item.pId].secretary ? map[item.pId].secretary[1].push(item) : map[item.pId].secretary[1] = [item];
             } else if (item.post == '生产主管' || item.post == '工长') {
-              map[item.pId].secretary[0].push(item)
+              map[item.pId].secretary[2].push(item)
             }else if ((item.post == '资深工程师' || item.post == '工程师') && map[item.pId].pId == 0) { //直属装置经理的资深工程师
-              map[item.pId].secretary ? map[item.pId].secretary[0].push(item) : map[item.pId].secretary[0] = [item];
+              map[item.pId].secretary ? map[item.pId].secretary[2].push(item) : map[item.pId].secretary[2] = [item];
             } else {
               map[item.pId].children ? map[item.pId].children.push(item) : map[item.pId].children = [item];
             }
@@ -383,12 +385,14 @@ export default {
         }else {
           if (item.pId !== 0 && map[item.pId]) {
             // map[item.pId].children ? map[item.pId].children.push(item) : map[item.pId].children = [item];
-            if (item.post == '装置经理' || item.post == '安全专员'|| item.post == '首席专家') {
+            if (item.post == '安全专员'|| item.post == '首席专家') {
               map[item.pId].secretary ? map[item.pId].secretary[0].push(item) : map[item.pId].secretary[0] = [item];
+            } else if (item.post == '装置经理') {
+              map[item.pId].secretary ? map[item.pId].secretary[1].push(item) : map[item.pId].secretary[1] = [item];
             } else if (item.post == '生产主管' || item.post == '工长') {
-              map[item.pId].secretary[1].push(item)
+              map[item.pId].secretary[2].push(item)
             }else if ((item.post == '资深工程师' || item.post == '工程师') && map[item.pId].pId == 0) { //直属装置经理的资深工程师
-              map[item.pId].secretary ? map[item.pId].secretary[0].push(item) : map[item.pId].secretary[0] = [item];
+              map[item.pId].secretary ? map[item.pId].secretary[2].push(item) : map[item.pId].secretary[2] = [item];
             } else {
               map[item.pId].children ? map[item.pId].children.push(item) : map[item.pId].children = [item];
             }

+ 1040 - 0
ui/src/views/plant/eoeg-daily-management/index.vue

@@ -0,0 +1,1040 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="年份" prop="year">
+        <el-date-picker
+          v-model="queryParams.year"
+          type="year"
+          placeholder="选择年份"
+          value-format="yyyy"
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="RC Code" prop="rcCode">
+        <el-input
+          v-model="queryParams.rcCode"
+          placeholder="请输入RC Code"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="主题" prop="subject">
+        <el-input
+          v-model="queryParams.subject"
+          placeholder="请输入主题"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="工作内容" prop="workContent">
+        <el-input
+          v-model="queryParams.workContent"
+          placeholder="请输入工作内容"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="完成情况" prop="finishStatus">
+        <el-select v-model="queryParams.finishStatus" placeholder="请选择完成情况" clearable size="small">
+          <el-option label="是" value="1" />
+          <el-option label="否" value="0" />
+        </el-select>
+      </el-form-item>
+
+      <el-form-item>
+        <el-button type="cyan" 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"
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['plant:eoeg-daily-management:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['plant:eoeg-daily-management:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['plant:eoeg-daily-management:remove']"
+        >删除</el-button>
+      </el-col>
+
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['plant:eoeg-daily-management:list']"
+        >导出</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="info"
+          icon="el-icon-upload2"
+          size="mini"
+          @click="handleImport"
+          v-hasPermi="['plant:eoeg-daily-management:import']"
+        >导入</el-button>
+      </el-col>
+	  <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="eoeg_daily_managementList" @selection-change="handleSelectionChange" :height="clientHeight" border class="eoeg-table">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="年份" align="center" prop="year" :show-overflow-tooltip="true"/>
+      <el-table-column label="开始月份" align="center" prop="startMonth" :show-overflow-tooltip="true"/>
+      <el-table-column label="结束月份" align="center" prop="endMonth" :show-overflow-tooltip="true"/>
+      <el-table-column label="RC Code" align="center" prop="rcCode" :show-overflow-tooltip="true"/>
+      <el-table-column label="主题" align="center" prop="subject" :show-overflow-tooltip="true"/>
+      <el-table-column label="工作内容" align="center" prop="workContent" :show-overflow-tooltip="true"/>
+      <el-table-column label="责任人" align="center" prop="responsiblePerson" >
+        <template slot-scope="scope">
+          {{ formatResponsiblePerson(scope.row.responsiblePerson) }}
+        </template>
+      </el-table-column>
+      <el-table-column label="频率" align="center" prop="frequency" :show-overflow-tooltip="true">
+        <template slot-scope="scope">
+          <span>{{ translateFrequency(scope.row.frequency) }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="标准要求(如有)" align="center" prop="standard" :show-overflow-tooltip="true"/>
+      <el-table-column label="完成情况" align="center" prop="finishStatus" width="100">
+        <template slot-scope="scope">
+          <el-select
+            v-model="scope.row.finishStatus"
+            size="mini"
+            placeholder=""
+            @change="handleFieldChange(scope.row, 'finishStatus')"
+            style="width: 80px;">
+            <el-option label="是" value="1"></el-option>
+            <el-option label="否" value="0"></el-option>
+          </el-select>
+        </template>
+      </el-table-column>
+      <el-table-column label="Q1" align="center">
+        <el-table-column label="1月" align="center" prop="q1Jan" width="100">
+          <template slot-scope="scope">
+            <el-select
+              v-model="scope.row.q1Jan"
+              size="mini"
+              placeholder=""
+              @change="handleFieldChange(scope.row, 'q1Jan')"
+              style="width: 80px;">
+              <el-option label="NA" value="NA"></el-option>
+              <el-option label="完成" value="完成"></el-option>
+            </el-select>
+          </template>
+        </el-table-column>
+        <el-table-column label="2月" align="center" prop="q1Feb" width="100">
+          <template slot-scope="scope">
+            <el-select
+              v-model="scope.row.q1Feb"
+              size="mini"
+              placeholder=""
+              @change="handleFieldChange(scope.row, 'q1Feb')"
+              style="width: 80px;">
+              <el-option label="NA" value="NA"></el-option>
+              <el-option label="完成" value="完成"></el-option>
+            </el-select>
+          </template>
+        </el-table-column>
+        <el-table-column label="3月" align="center" prop="q1Mar" width="100">
+          <template slot-scope="scope">
+            <el-select
+              v-model="scope.row.q1Mar"
+              size="mini"
+              placeholder=""
+              @change="handleFieldChange(scope.row, 'q1Mar')"
+              style="width: 80px;">
+              <el-option label="NA" value="NA"></el-option>
+              <el-option label="完成" value="完成"></el-option>
+            </el-select>
+          </template>
+        </el-table-column>
+      </el-table-column>
+      <el-table-column label="Q2" align="center">
+        <el-table-column label="4月" align="center" prop="q2Apr" width="100">
+          <template slot-scope="scope">
+            <el-select
+              v-model="scope.row.q2Apr"
+              size="mini"
+              placeholder=""
+              @change="handleFieldChange(scope.row, 'q2Apr')"
+              style="width: 80px;">
+              <el-option label="NA" value="NA"></el-option>
+              <el-option label="完成" value="完成"></el-option>
+            </el-select>
+          </template>
+        </el-table-column>
+        <el-table-column label="5月" align="center" prop="q2May" width="100">
+          <template slot-scope="scope">
+            <el-select
+              v-model="scope.row.q2May"
+              size="mini"
+              placeholder=""
+              @change="handleFieldChange(scope.row, 'q2May')"
+              style="width: 80px;">
+              <el-option label="NA" value="NA"></el-option>
+              <el-option label="完成" value="完成"></el-option>
+            </el-select>
+          </template>
+        </el-table-column>
+        <el-table-column label="6月" align="center" prop="q2Jun" width="100">
+          <template slot-scope="scope">
+            <el-select
+              v-model="scope.row.q2Jun"
+              size="mini"
+              placeholder=""
+              @change="handleFieldChange(scope.row, 'q2Jun')"
+              style="width: 80px;">
+              <el-option label="NA" value="NA"></el-option>
+              <el-option label="完成" value="完成"></el-option>
+            </el-select>
+          </template>
+        </el-table-column>
+      </el-table-column>
+      <el-table-column label="Q3" align="center">
+        <el-table-column label="7月" align="center" prop="q3Jul" width="100">
+          <template slot-scope="scope">
+            <el-select
+              v-model="scope.row.q3Jul"
+              size="mini"
+              placeholder=""
+              @change="handleFieldChange(scope.row, 'q3Jul')"
+              style="width: 80px;">
+              <el-option label="NA" value="NA"></el-option>
+              <el-option label="完成" value="完成"></el-option>
+            </el-select>
+          </template>
+        </el-table-column>
+        <el-table-column label="8月" align="center" prop="q3Aug" width="100">
+          <template slot-scope="scope">
+            <el-select
+              v-model="scope.row.q3Aug"
+              size="mini"
+              placeholder=""
+              @change="handleFieldChange(scope.row, 'q3Aug')"
+              style="width: 80px;">
+              <el-option label="NA" value="NA"></el-option>
+              <el-option label="完成" value="完成"></el-option>
+            </el-select>
+          </template>
+        </el-table-column>
+        <el-table-column label="9月" align="center" prop="q3Sep" width="100">
+          <template slot-scope="scope">
+            <el-select
+              v-model="scope.row.q3Sep"
+              size="mini"
+              placeholder=""
+              @change="handleFieldChange(scope.row, 'q3Sep')"
+              style="width: 80px;">
+              <el-option label="NA" value="NA"></el-option>
+              <el-option label="完成" value="完成"></el-option>
+            </el-select>
+          </template>
+        </el-table-column>
+      </el-table-column>
+      <el-table-column label="Q4" align="center">
+        <el-table-column label="10月" align="center" prop="q4Oct" width="100">
+          <template slot-scope="scope">
+            <el-select
+              v-model="scope.row.q4Oct"
+              size="mini"
+              placeholder=""
+              @change="handleFieldChange(scope.row, 'q4Oct')"
+              style="width: 80px;">
+              <el-option label="NA" value="NA"></el-option>
+              <el-option label="完成" value="完成"></el-option>
+            </el-select>
+          </template>
+        </el-table-column>
+        <el-table-column label="11月" align="center" prop="q4Nov" width="100">
+          <template slot-scope="scope">
+            <el-select
+              v-model="scope.row.q4Nov"
+              size="mini"
+              placeholder=""
+              @change="handleFieldChange(scope.row, 'q4Nov')"
+              style="width: 80px;">
+              <el-option label="NA" value="NA"></el-option>
+              <el-option label="完成" value="完成"></el-option>
+            </el-select>
+          </template>
+        </el-table-column>
+        <el-table-column label="12月" align="center" prop="q4Dec" width="100">
+          <template slot-scope="scope">
+            <el-select
+              v-model="scope.row.q4Dec"
+              size="mini"
+              placeholder=""
+              @change="handleFieldChange(scope.row, 'q4Dec')"
+              style="width: 80px;">
+              <el-option label="NA" value="NA"></el-option>
+              <el-option label="完成" value="完成"></el-option>
+            </el-select>
+          </template>
+        </el-table-column>
+      </el-table-column>
+      <el-table-column label="备注" align="center" prop="remarks" :show-overflow-tooltip="true"/>
+      <el-table-column label="操作" align="center" fixed="right" width="120" 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="['plant:eoeg-daily-management:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['plant:eoeg-daily-management: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"
+    />
+
+    <!-- 添加或修改日常管理EOEG对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="800px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="年份" prop="year">
+              <el-date-picker
+                v-model="form.year"
+                type="year"
+                placeholder="选择年份"
+                value-format="yyyy"
+                style="width: 100%"
+                :key="formResetKey"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="开始月份" prop="startMonth">
+              <el-date-picker
+                v-model="form.startMonth"
+                type="month"
+                placeholder="请选择开始月份"
+                value-format="yyyy-MM"
+                style="width: 100%">
+              </el-date-picker>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="结束月份" prop="endMonth">
+              <el-date-picker
+                v-model="form.endMonth"
+                type="month"
+                placeholder="请选择结束月份"
+                value-format="yyyy-MM"
+                style="width: 100%">
+              </el-date-picker>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="RC Code" prop="rcCode">
+              <el-input v-model="form.rcCode" placeholder="请输入RC Code" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="主题" prop="subject">
+              <el-input v-model="form.subject" placeholder="请输入主题" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="责任人" prop="responsiblePerson">
+              <el-select v-model="responsiblePersonArray" filterable multiple placeholder="请选择责任人" style="width: 100%" @change="handleResponsiblePersonChange">
+                <el-option
+                  v-for="staff in staffmgrOptions"
+                  :key="staff.staffid"
+                  :label="staff.name"
+                  :value="staff.staffid">
+                  <span style="float: left">{{ staff.name }}</span>
+                  <span style="float: right; color: #8492a6; font-size: 13px">{{ staff.staffid }}</span>
+                </el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="频率" prop="frequency">
+              <div style="display: flex; gap: 10px;">
+                <el-input-number
+                  v-model="frequencyNumber"
+                  :min="1"
+                  :max="12"
+                  controls-position="right"
+                  style="width: 80px;"
+                  placeholder="次数"
+                  @change="updateFrequency" />
+                <el-select v-model="frequencyUnit" placeholder="选择单位" style="flex: 1;" @change="updateFrequency">
+                  <el-option label="年(y)" value="y"></el-option>
+                  <el-option label="季度(r)" value="r"></el-option>
+                  <el-option label="月(m)" value="m"></el-option>
+                </el-select>
+              </div>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="完成情况" prop="finishStatus">
+              <el-select v-model="form.finishStatus" placeholder="请选择完成情况" style="width: 100%">
+                <el-option label="是" value="1"></el-option>
+                <el-option label="否" value="0"></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="工作内容" prop="workContent">
+              <el-input type="textarea" v-model="form.workContent" placeholder="请输入工作内容" :rows="1" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="标准要求(如有)" prop="standard">
+              <el-input type="textarea" v-model="form.standard" placeholder="请输入标准要求(如有)" :rows="1" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+        <!-- Q1季度 -->
+        <el-divider content-position="left">第一季度完成情况</el-divider>
+        <el-row :gutter="20">
+          <el-col :span="8">
+            <el-form-item label="1月" prop="q1Jan">
+              <el-select v-model="form.q1Jan" placeholder="请选择" style="width: 100%">
+                <el-option label="NA" value="NA"></el-option>
+                <el-option label="完成" value="完成"></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="2月" prop="q1Feb">
+              <el-select v-model="form.q1Feb" placeholder="请选择" style="width: 100%">
+                <el-option label="NA" value="NA"></el-option>
+                <el-option label="完成" value="完成"></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="3月" prop="q1Mar">
+              <el-select v-model="form.q1Mar" placeholder="请选择" style="width: 100%">
+                <el-option label="NA" value="NA"></el-option>
+                <el-option label="完成" value="完成"></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+        <!-- Q2季度 -->
+        <el-divider content-position="left">第二季度完成情况</el-divider>
+        <el-row :gutter="20">
+          <el-col :span="8">
+            <el-form-item label="4月" prop="q2Apr">
+              <el-select v-model="form.q2Apr" placeholder="请选择" style="width: 100%">
+                <el-option label="NA" value="NA"></el-option>
+                <el-option label="完成" value="完成"></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="5月" prop="q2May">
+              <el-select v-model="form.q2May" placeholder="请选择" style="width: 100%">
+                <el-option label="NA" value="NA"></el-option>
+                <el-option label="完成" value="完成"></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="6月" prop="q2Jun">
+              <el-select v-model="form.q2Jun" placeholder="请选择" style="width: 100%">
+                <el-option label="NA" value="NA"></el-option>
+                <el-option label="完成" value="完成"></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+        <!-- Q3季度 -->
+        <el-divider content-position="left">第三季度完成情况</el-divider>
+        <el-row :gutter="20">
+          <el-col :span="8">
+            <el-form-item label="7月" prop="q3Jul">
+              <el-select v-model="form.q3Jul" placeholder="请选择" style="width: 100%">
+                <el-option label="NA" value="NA"></el-option>
+                <el-option label="完成" value="完成"></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="8月" prop="q3Aug">
+              <el-select v-model="form.q3Aug" placeholder="请选择" style="width: 100%">
+                <el-option label="NA" value="NA"></el-option>
+                <el-option label="完成" value="完成"></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="9月" prop="q3Sep">
+              <el-select v-model="form.q3Sep" placeholder="请选择" style="width: 100%">
+                <el-option label="NA" value="NA"></el-option>
+                <el-option label="完成" value="完成"></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+        <!-- Q4季度 -->
+        <el-divider content-position="left">第四季度完成情况</el-divider>
+        <el-row :gutter="20">
+          <el-col :span="8">
+            <el-form-item label="10月" prop="q4Oct">
+              <el-select v-model="form.q4Oct" placeholder="请选择" style="width: 100%">
+                <el-option label="NA" value="NA"></el-option>
+                <el-option label="完成" value="完成"></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="11月" prop="q4Nov">
+              <el-select v-model="form.q4Nov" placeholder="请选择" style="width: 100%">
+                <el-option label="NA" value="NA"></el-option>
+                <el-option label="完成" value="完成"></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="12月" prop="q4Dec">
+              <el-select v-model="form.q4Dec" placeholder="请选择" style="width: 100%">
+                <el-option label="NA" value="NA"></el-option>
+                <el-option label="完成" value="完成"></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+        <!-- 备注 -->
+        <el-row :gutter="20">
+          <el-col :span="24">
+            <el-form-item label="备注" prop="remarks">
+              <el-input v-model="form.remarks" placeholder="请输入备注" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+      <!-- 用户导入对话框 -->
+      <el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
+          <el-upload
+                  ref="upload"
+                  :limit="1"
+                  accept=".xlsx, .xls"
+                  :headers="upload.headers"
+                  :action="upload.url + '?updateSupport=' + upload.updateSupport"
+                  :disabled="upload.isUploading"
+                  :on-progress="handleFileUploadProgress"
+                  :on-success="handleFileSuccess"
+                  :auto-upload="false"
+                  drag
+          >
+              <i class="el-icon-upload"></i>
+              <div class="el-upload__text">
+                  将文件拖到此处,或
+                  <em>点击上传</em>
+              </div>
+              <div class="el-upload__tip" slot="tip">
+                  <el-checkbox v-model="upload.updateSupport" />是否更新已经存在的用户数据
+                  <el-link type="info" style="font-size:12px" @click="importTemplate">下载模板</el-link>
+              </div>
+              <div class="el-upload__tip" style="color:red" slot="tip">提示:仅允许导入“xls”或“xlsx”格式文件!</div>
+          </el-upload>
+          <div slot="footer" class="dialog-footer">
+              <el-button type="primary" @click="submitFileForm">确 定</el-button>
+              <el-button @click="upload.open = false">取 消</el-button>
+          </div>
+      </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listEoeg_daily_management, getEoeg_daily_management, delEoeg_daily_management, addEoeg_daily_management, updateEoeg_daily_management, exportEoeg_daily_management, importTemplate} from "@/api/plant/eoeg-daily-management";
+import { treeselect } from "@/api/system/dept";
+import { getToken } from "@/utils/auth";
+import { listStaffmgrByDeptAndTeam } from "@/api/plant/staffmgr";
+import Treeselect from "@riophae/vue-treeselect";
+import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+import Editor from '@/components/Editor';
+
+export default {
+  name: "Eoeg-daily-management",
+  components: { Treeselect },
+  // components: { Editor },
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: false,
+      // 总条数
+      total: 0,
+      // 日常管理EOEG表格数据
+      eoeg_daily_managementList: [],
+      // 弹出层标题
+      title: "",
+      // 部门树选项
+      deptOptions: undefined,
+      clientHeight:300,
+      // 是否显示弹出层
+      open: false,
+      // 表单重置键
+      formResetKey: 0,
+      // 频率相关数据
+      frequencyNumber: 1,
+      frequencyUnit: 'm',
+      // 人员选项
+      staffmgrOptions: [],
+      // 负责人数组(用于多选)
+      responsiblePersonArray: [],
+      // 人员查询参数
+      staffmgrQueryParams: {
+        pageNum: 1,
+        pageSize: 10000,
+        unit: 10023
+      },
+        // 用户导入参数
+        upload: {
+            // 是否显示弹出层(用户导入)
+            open: false,
+            // 弹出层标题(用户导入)
+            title: "",
+            // 是否禁用上传
+            isUploading: false,
+            // 是否更新已经存在的用户数据
+            updateSupport: 0,
+            // 设置上传的请求头部
+            headers: { Authorization: "Bearer " + getToken() },
+            // 上传的地址
+            url: process.env.VUE_APP_BASE_API + "/plant/eoeg-daily-management/importData"
+        },
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 20,
+        year: new Date().getFullYear().toString(),
+        startMonth: null,
+        endMonth: null,
+        rcCode: null,
+        subject: null,
+        workContent: null,
+        responsiblePerson: null,
+        frequency: null,
+        standard: null,
+        finishStatus: null,
+        q1Jan: null,
+        q1Feb: null,
+        q1Mar: null,
+        q2Apr: null,
+        q2May: null,
+        q2Jun: null,
+        q3Jul: null,
+        q3Aug: null,
+        q3Sep: null,
+        q4Oct: null,
+        q4Nov: null,
+        q4Dec: null,
+        createrCode: null,
+        createdate: null,
+        updaterCode: null,
+        updatedate: null,
+        deptId: null,
+        remarks: null
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+      }
+    };
+  },
+  watch: {
+        // 根据名称筛选部门树
+        deptName(val) {
+            this.$refs.tree.filter(val);
+        }
+   },
+  created() {
+      //设置表格高度对应屏幕高度
+      this.$nextTick(() => {
+          this.clientHeight = document.body.clientHeight -250
+      })
+    this.getList();
+    this.getTreeselect();
+    this.getStaffmgrList();
+  },
+  methods: {
+    /** 查询日常管理EOEG列表 */
+    getList() {
+      this.loading = true;
+      listEoeg_daily_management(this.queryParams).then(response => {
+        this.eoeg_daily_managementList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+     /** 查询部门下拉树结构 */
+     getTreeselect() {
+          treeselect().then(response => {
+              this.deptOptions = response.data;
+          });
+     },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.formResetKey++;
+      this.form = {
+        id: null,
+        year: undefined,
+        startMonth: null,
+        endMonth: null,
+        rcCode: null,
+        subject: null,
+        workContent: null,
+        responsiblePerson: null,
+        frequency: null,
+        standard: null,
+        finishStatus: null,
+        q1Jan: null,
+        q1Feb: null,
+        q1Mar: null,
+        q2Apr: null,
+        q2May: null,
+        q2Jun: null,
+        q3Jul: null,
+        q3Aug: null,
+        q3Sep: null,
+        q4Oct: null,
+        q4Nov: null,
+        q4Dec: null,
+        delFlag: null,
+        createrCode: null,
+        createdate: null,
+        updaterCode: null,
+        updatedate: null,
+        deptId: null,
+        remarks: null
+      };
+      // 重置频率相关数据
+      this.frequencyNumber = 1;
+      this.frequencyUnit = 'm';
+      // 重置负责人数组
+      this.responsiblePersonArray = [];
+      this.resetForm("form");
+    },
+    // 获取人员列表
+    getStaffmgrList() {
+      listStaffmgrByDeptAndTeam(this.staffmgrQueryParams).then(response => {
+        this.staffmgrOptions = response.rows;
+      });
+    },
+    // 负责人变化处理
+    handleResponsiblePersonChange() {
+      // 将选中的staffid数组转换为逗号分隔的字符串
+      this.form.responsiblePerson = this.responsiblePersonArray.join(',');
+    },
+    // 解析负责人字符串为数组
+    parseResponsiblePerson() {
+      if (this.form.responsiblePerson) {
+        this.responsiblePersonArray = this.form.responsiblePerson.split(',');
+      } else {
+        this.responsiblePersonArray = [];
+      }
+    },
+    // 格式化负责人显示(将staffid转换为姓名)
+    formatResponsiblePerson(responsiblePerson) {
+      if (!responsiblePerson) {
+        return '';
+      }
+      const staffIds = responsiblePerson.split(',');
+      const names = staffIds.map(staffId => {
+        const staff = this.staffmgrOptions.find(s => s.staffid === staffId);
+        return staff ? staff.name : staffId;
+      });
+      return names.join(', ');
+    },
+    /** 表格字段直接修改保存 */
+    handleFieldChange(row, field) {
+      // 创建更新对象
+      const updateData = {
+        id: row.id,
+        year: row.year,
+        startMonth: row.startMonth,
+        endMonth: row.endMonth,
+        rcCode: row.rcCode,
+        subject: row.subject,
+        workContent: row.workContent,
+        responsiblePerson: row.responsiblePerson,
+        frequency: row.frequency,
+        standard: row.standard,
+        finishStatus: row.finishStatus,
+        q1Jan: row.q1Jan,
+        q1Feb: row.q1Feb,
+        q1Mar: row.q1Mar,
+        q2Apr: row.q2Apr,
+        q2May: row.q2May,
+        q2Jun: row.q2Jun,
+        q3Jul: row.q3Jul,
+        q3Aug: row.q3Aug,
+        q3Sep: row.q3Sep,
+        q4Oct: row.q4Oct,
+        q4Nov: row.q4Nov,
+        q4Dec: row.q4Dec,
+        deptId: row.deptId,
+        remarks: row.remarks
+      };
+
+      // 调用更新接口
+      updateEoeg_daily_management(updateData).then(response => {
+        this.msgSuccess("修改成功");
+        // 可选:重新加载列表以确保数据同步
+        // this.getList();
+      }).catch(() => {
+        this.msgError("修改失败");
+        // 失败时重新加载列表以恢复数据
+        this.getList();
+      });
+    },
+    /** 搜索按钮操作 */
+    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 = "添加日常管理EOEG";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getEoeg_daily_management(id).then(response => {
+        this.form = response.data;
+        // 解析频率字段
+        this.parseFrequency(this.form.frequency);
+        // 解析负责人字段
+        this.parseResponsiblePerson();
+        this.open = true;
+        this.title = "修改日常管理EOEG";
+      });
+    },
+    /** 更新频率字段 */
+    updateFrequency() {
+      if (this.frequencyNumber && this.frequencyUnit) {
+        this.form.frequency = this.frequencyNumber + this.frequencyUnit;
+      }
+    },
+    /** 解析频率字段 */
+    parseFrequency(frequency) {
+      if (frequency) {
+        // 匹配数字和单位
+        const match = frequency.match(/^(\d+)([ymr])$/);
+        if (match) {
+          this.frequencyNumber = parseInt(match[1]);
+          this.frequencyUnit = match[2];
+        }
+      } else {
+        this.frequencyNumber = 1;
+        this.frequencyUnit = 'm';
+      }
+    },
+    /** 翻译频率字段 */
+    translateFrequency(frequency) {
+      if (!frequency) return '';
+
+      // 匹配数字和单位
+      const match = frequency.match(/^(\d+)([ymr])$/);
+      if (match) {
+        const number = match[1];
+        const unit = match[2];
+
+        switch (unit) {
+          case 'y':
+            return `${number}年一次`;
+          case 'r':
+            return `${number}季度一次`;
+          case 'm':
+            return `${number}月一次`;
+          default:
+            return frequency;
+        }
+      }
+
+      return frequency;
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateEoeg_daily_management(this.form).then(response => {
+              this.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addEoeg_daily_management(this.form).then(response => {
+              this.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$confirm('是否确认删除?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delEoeg_daily_management(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        })
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      const queryParams = this.queryParams;
+      this.$confirm('是否确认导出所有日常管理EOEG数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return exportEoeg_daily_management(queryParams);
+        }).then(response => {
+          this.download(response.msg);
+        })
+    },
+      /** 导入按钮操作 */
+      handleImport() {
+          this.upload.title = "用户导入";
+          this.upload.open = true;
+      },
+      /** 下载模板操作 */
+      importTemplate() {
+          importTemplate().then(response => {
+              this.download(response.msg);
+          });
+      },
+      // 文件上传中处理
+      handleFileUploadProgress(event, file, fileList) {
+          this.upload.isUploading = true;
+      },
+      // 文件上传成功处理
+      handleFileSuccess(response, file, fileList) {
+          this.upload.open = false;
+          this.upload.isUploading = false;
+          this.$refs.upload.clearFiles();
+          this.$alert(response.msg, "导入结果", { dangerouslyUseHTMLString: true });
+          this.getList();
+      },
+      // 提交上传文件
+      submitFileForm() {
+          this.$refs.upload.submit();
+      }
+  }
+};
+</script>
+
+<style scoped>
+/* 表格内下拉框样式 - 无边框,只显示下拉箭头 - 仅作用于当前页面 */
+.eoeg-table ::v-deep .el-select .el-input__inner {
+  border: none;
+  background: transparent;
+  padding-right: 20px;
+  padding-left: 5px;
+  text-align: center;
+  cursor: pointer;
+}
+
+.eoeg-table ::v-deep .el-select .el-input__suffix {
+  right: 0;
+}
+
+.eoeg-table ::v-deep .el-select:hover .el-input__inner {
+  background-color: #f5f7fa;
+  border-radius: 4px;
+}
+
+.eoeg-table ::v-deep .el-select .el-input__icon {
+  line-height: 28px;
+}
+
+/* 聚焦时显示边框 */
+.eoeg-table ::v-deep .el-select .el-input.is-focus .el-input__inner {
+  border: 1px solid #409EFF;
+  background-color: #fff;
+}
+</style>

+ 1 - 1
ui/src/views/production/temperature/coil.vue

@@ -705,7 +705,7 @@
       async getPredict() {
         this.loadingPredict = true;
         try {
-          const res = await listCoilPredict1080({});
+          const res = await listCoilPredict1080();
           const list = res && res.data ? res.data : [];
           if (!list.length) {
             this.predictList = [];

+ 10 - 10
ui/src/views/training/bccdevice/index.vue

@@ -10,15 +10,15 @@
         </el-date-picker>
       </el-form-item>
 
-      <el-form-item label="学习时长min" prop="learnTime">
-        <el-input
-          v-model="queryParams.learnTime"
-          placeholder="请输入学习时长min"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
+<!--      <el-form-item label="学习时长min" prop="learnTime">-->
+<!--        <el-input-->
+<!--          v-model="queryParams.learnTime"-->
+<!--          placeholder="请输入学习时长min"-->
+<!--          clearable-->
+<!--          size="small"-->
+<!--          @keyup.enter.native="handleQuery"-->
+<!--        />-->
+<!--      </el-form-item>-->
       <el-form-item>
         <el-button type="cyan" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
         <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
@@ -68,7 +68,7 @@
       </el-table-column>
 
       <el-table-column label="需学习时长min" align="center" prop="trainingbcc.timerNeed" width="120" :show-overflow-tooltip="true"/>
-      <el-table-column label="已学习时长min" align="center" prop="learnTime" width="120" :show-overflow-tooltip="true"/>
+<!--      <el-table-column label="已学习时长min" align="center" prop="learnTime" width="120" :show-overflow-tooltip="true"/>-->
       <el-table-column label="考试状态" align="center" prop="examState"  :show-overflow-tooltip="true">
         <template v-slot="scope">
           <el-tag v-if="scope.row.examState == 1" size="small" type="success">合格</el-tag>

+ 1 - 1
ui/src/views/training/companylevel/index.vue

@@ -366,7 +366,7 @@ export default {
       },
       //人员表查询参数
       staffmgrQueryParams: {
-        units: "10,18,20,30",
+        // units: "10,18,20,30",
         leftYear: this.getNowTime(),
         actualpost: null
       },

+ 13 - 0
ui/src/views/training/elearn/paper/exam.vue

@@ -434,6 +434,19 @@ export default {
   ::v-deep
   .el-checkbox__label{
     line-height: 30px;
+    color: #606266 !important;
+  }
+
+  /* 确保未选择状态的checkbox文字颜色正常 */
+  ::v-deep
+  .el-checkbox:not(.is-checked) .el-checkbox__label{
+    color: #606266 !important;
+  }
+
+  /* 确保选中状态的checkbox文字颜色为蓝色 */
+  ::v-deep
+  .el-checkbox.is-checked .el-checkbox__label{
+    color: #409eff !important;
   }
 
   ::v-deep

+ 698 - 0
ui/src/views/training/process-diagram.vue

@@ -0,0 +1,698 @@
+<template>
+  <div class="process-diagram-container">
+    <div class="diagram-header">
+      <h2>燃烧与热回收系统工艺流程图</h2>
+    </div>
+
+    <div class="diagram-content">
+      <svg
+        width="1400"
+        height="900"
+        viewBox="0 0 1400 900"
+        class="process-svg"
+        @click="handleSvgClick"
+      >
+        <!-- 背景 -->
+        <rect width="100%" height="100%" fill="#f8f9fa"/>
+
+        <!-- 汽包 (左侧中央) -->
+        <ellipse
+          cx="200" cy="450"
+          rx="60" ry="100"
+          fill="#87CEEB"
+          stroke="#4682B4"
+          stroke-width="3"
+          @click="handleComponentClick('steam-drum', $event)"
+        />
+        <text x="200" y="450" text-anchor="middle" class="component-label">汽包</text>
+
+        <!-- 垂直热交换器堆栈 (右侧) -->
+        <rect
+          x="1000" y="100"
+          width="150" height="600"
+          fill="none"
+          stroke="#333"
+          stroke-width="3"
+        />
+
+        <!-- FPH-1 -->
+        <rect
+          x="1010" y="110"
+          width="130" height="50"
+          fill="#87CEEB"
+          stroke="#4682B4"
+          stroke-width="2"
+          @click="handleComponentClick('FPH-1', $event)"
+        />
+        <text x="1075" y="140" text-anchor="middle" class="component-label">FPH-1</text>
+
+        <!-- FPH-2 -->
+        <rect
+          x="1010" y="170"
+          width="130" height="50"
+          fill="#87CEEB"
+          stroke="#4682B4"
+          stroke-width="2"
+          @click="handleComponentClick('FPH-2', $event)"
+        />
+        <text x="1075" y="200" text-anchor="middle" class="component-label">FPH-2</text>
+
+        <!-- BFW -->
+        <rect
+          x="1010" y="230"
+          width="130" height="50"
+          fill="#87CEEB"
+          stroke="#4682B4"
+          stroke-width="2"
+          @click="handleComponentClick('BFW', $event)"
+        />
+        <text x="1075" y="260" text-anchor="middle" class="component-label">BFW</text>
+
+        <!-- MSH-1 -->
+        <rect
+          x="1010" y="290"
+          width="130" height="50"
+          fill="#87CEEB"
+          stroke="#4682B4"
+          stroke-width="2"
+          @click="handleComponentClick('MSH-1', $event)"
+        />
+        <text x="1075" y="320" text-anchor="middle" class="component-label">MSH-1</text>
+
+        <!-- HPSS-1 -->
+        <rect
+          x="1010" y="350"
+          width="130" height="50"
+          fill="#87CEEB"
+          stroke="#4682B4"
+          stroke-width="2"
+          @click="handleComponentClick('HPSS-1', $event)"
+        />
+        <text x="1075" y="380" text-anchor="middle" class="component-label">HPSS-1</text>
+
+        <!-- HPSS-2 -->
+        <rect
+          x="1010" y="410"
+          width="130" height="50"
+          fill="#87CEEB"
+          stroke="#4682B4"
+          stroke-width="2"
+          @click="handleComponentClick('HPSS-2', $event)"
+        />
+        <text x="1075" y="440" text-anchor="middle" class="component-label">HPSS-2</text>
+
+        <!-- MSH-2 -->
+        <rect
+          x="1010" y="470"
+          width="130" height="50"
+          fill="#87CEEB"
+          stroke="#4682B4"
+          stroke-width="2"
+          @click="handleComponentClick('MSH-2', $event)"
+        />
+        <text x="1075" y="500" text-anchor="middle" class="component-label">MSH-2</text>
+
+        <!-- MSH-3 -->
+        <rect
+          x="1010" y="530"
+          width="130" height="50"
+          fill="#87CEEB"
+          stroke="#4682B4"
+          stroke-width="2"
+          @click="handleComponentClick('MSH-3', $event)"
+        />
+        <text x="1075" y="560" text-anchor="middle" class="component-label">MSH-3</text>
+
+        <!-- 排气扇 -->
+        <circle
+          cx="1075" cy="80"
+          r="12"
+          fill="#666"
+          stroke="#333"
+          stroke-width="2"
+          @click="handleComponentClick('exhaust-fan', $event)"
+        />
+
+        <!-- 急冷器 (右侧中央) -->
+        <polygon
+          points="1200,350 1300,400 1200,450 1100,400"
+          fill="#87CEEB"
+          stroke="#4682B4"
+          stroke-width="3"
+          @click="handleComponentClick('quench-cooler', $event)"
+        />
+        <text x="1150" y="400" text-anchor="middle" class="component-label">急冷器</text>
+
+        <!-- 燃烧室1 (底部左侧) -->
+        <rect
+          x="150" y="650"
+          width="80" height="60"
+          fill="#FF6B6B"
+          stroke="#D63031"
+          stroke-width="2"
+          @click="handleComponentClick('fire-box-1', $event)"
+        />
+        <text x="190" y="685" text-anchor="middle" class="component-label">Fire box</text>
+
+        <!-- 燃烧室2 (底部右侧) -->
+        <rect
+          x="250" y="650"
+          width="80" height="60"
+          fill="#FF6B6B"
+          stroke="#D63031"
+          stroke-width="2"
+          @click="handleComponentClick('fire-box-2', $event)"
+        />
+        <text x="290" y="685" text-anchor="middle" class="component-label">Fire box</text>
+
+        <!-- SLE-1 -->
+        <rect
+          x="150" y="580"
+          width="80" height="50"
+          fill="#87CEEB"
+          stroke="#4682B4"
+          stroke-width="2"
+          @click="handleComponentClick('SLE-1', $event)"
+        />
+        <text x="190" y="610" text-anchor="middle" class="component-label">SLE</text>
+
+        <!-- SLE-2 -->
+        <rect
+          x="250" y="580"
+          width="80" height="50"
+          fill="#87CEEB"
+          stroke="#4682B4"
+          stroke-width="2"
+          @click="handleComponentClick('SLE-2', $event)"
+        />
+        <text x="290" y="610" text-anchor="middle" class="component-label">SLE</text>
+
+        <!-- 风门调节器 -->
+        <line x1="150" y1="720" x2="330" y2="720" stroke="#333" stroke-width="2"/>
+        <text x="240" y="740" text-anchor="middle" class="system-label">风门调节器</text>
+
+        <!-- 水/蒸汽管道 (蓝色) -->
+        <!-- 汽包到SLE -->
+        <line x1="200" y1="550" x2="190" y2="580" stroke="#4682B4" stroke-width="4"
+              @click="handleLineClick('steam-drum-to-SLE-1', $event)"/>
+        <line x1="200" y1="550" x2="290" y2="580" stroke="#4682B4" stroke-width="4"
+              @click="handleLineClick('steam-drum-to-SLE-2', $event)"/>
+
+        <!-- SLE到MSH-3 -->
+        <line x1="190" y1="580" x2="1010" y2="580" stroke="#4682B4" stroke-width="4"
+              @click="handleLineClick('SLE-to-MSH-3', $event)"/>
+        <line x1="290" y1="580" x2="1075" y2="580" stroke="#4682B4" stroke-width="4"
+              @click="handleLineClick('SLE-to-MSH-3-2', $event)"/>
+
+        <!-- 汽包到HPSS -->
+        <line x1="260" y1="400" x2="1010" y2="375" stroke="#4682B4" stroke-width="4"
+              @click="handleLineClick('steam-drum-to-HPSS-1', $event)"/>
+        <line x1="260" y1="400" x2="1075" y2="435" stroke="#4682B4" stroke-width="4"
+              @click="handleLineClick('steam-drum-to-HPSS-2', $event)"/>
+
+        <!-- BFW到急冷器 -->
+        <line x1="1075" y1="255" x2="1150" y2="350" stroke="#4682B4" stroke-width="4"
+              @click="handleLineClick('BFW-to-quench-cooler', $event)"/>
+
+        <!-- MSH-1到急冷器 -->
+        <line x1="1075" y1="315" x2="1150" y2="360" stroke="#4682B4" stroke-width="4"
+              @click="handleLineClick('MSH-1-to-quench-cooler', $event)"/>
+
+        <!-- 热气体/烟气管道 (黄色) -->
+        <!-- 燃烧室到SLE -->
+        <line x1="190" y1="650" x2="190" y2="630" stroke="#FFD700" stroke-width="4"
+              @click="handleLineClick('fire-box-1-to-SLE-1', $event)"/>
+        <line x1="290" y1="650" x2="290" y2="630" stroke="#FFD700" stroke-width="4"
+              @click="handleLineClick('fire-box-2-to-SLE-2', $event)"/>
+
+        <!-- SLE到热交换器堆栈 -->
+        <line x1="190" y1="580" x2="1010" y2="650" stroke="#FFD700" stroke-width="4"
+              @click="handleLineClick('SLE-1-to-heat-stack', $event)"/>
+        <line x1="290" y1="580" x2="1075" y2="650" stroke="#FFD700" stroke-width="4"
+              @click="handleLineClick('SLE-2-to-heat-stack', $event)"/>
+
+        <!-- 热交换器堆栈内部流动 -->
+        <line x1="1075" y1="650" x2="1075" y2="100" stroke="#FFD700" stroke-width="4"
+              @click="handleLineClick('heat-stack-flow', $event)"/>
+
+        <!-- 热交换器到急冷器 -->
+        <line x1="1075" y1="315" x2="1150" y2="370" stroke="#FFD700" stroke-width="4"
+              @click="handleLineClick('heat-stack-to-quench-cooler', $event)"/>
+
+        <!-- 燃料气管道 (红色) -->
+        <!-- 燃料气供应 -->
+        <line x1="50" y1="680" x2="150" y2="680" stroke="#FF4444" stroke-width="4"
+              @click="handleLineClick('fuel-gas-supply', $event)"/>
+        <line x1="50" y1="680" x2="250" y2="680" stroke="#FF4444" stroke-width="4"
+              @click="handleLineClick('fuel-gas-supply-2', $event)"/>
+
+        <!-- 燃料气到燃烧室 -->
+        <line x1="150" y1="680" x2="190" y2="650" stroke="#FF4444" stroke-width="4"
+              @click="handleLineClick('fuel-to-fire-box-1', $event)"/>
+        <line x1="250" y1="680" x2="290" y2="650" stroke="#FF4444" stroke-width="4"
+              @click="handleLineClick('fuel-to-fire-box-2', $event)"/>
+
+        <!-- 阀门和控制元件 -->
+        <!-- 主燃料切断阀 -->
+        <circle cx="100" cy="680" r="6" fill="#666" stroke="#333" stroke-width="2"
+                @click="handleComponentClick('main-fuel-valve', $event)"/>
+
+        <!-- 燃料气控制阀PCV -->
+        <circle cx="120" cy="680" r="6" fill="#666" stroke="#333" stroke-width="2"
+                @click="handleComponentClick('fuel-control-valve', $event)"/>
+
+        <!-- 流量计 -->
+        <circle cx="1075" cy="255" r="8" fill="#87CEEB" stroke="#4682B4" stroke-width="2"
+                @click="handleComponentClick('flow-meter-1', $event)"/>
+        <text x="1075" y="260" text-anchor="middle" class="flow-meter-label">8</text>
+
+        <circle cx="1150" cy="350" r="8" fill="#87CEEB" stroke="#4682B4" stroke-width="2"
+                @click="handleComponentClick('flow-meter-2', $event)"/>
+        <text x="1150" y="355" text-anchor="middle" class="flow-meter-label">8</text>
+
+        <!-- 汽包输入标签 -->
+        <text x="50" y="200" class="system-label">SS放空</text>
+        <text x="50" y="220" class="system-label">SS并网阀</text>
+        <text x="50" y="240" class="system-label">间排</text>
+        <text x="50" y="260" class="system-label">磷酸盐</text>
+        <text x="50" y="280" class="system-label">N130</text>
+        <text x="50" y="300" class="system-label">DS</text>
+        <text x="50" y="320" class="system-label">原料扫线</text>
+        <text x="50" y="340" class="system-label">原料根部阀</text>
+        <text x="50" y="360" class="system-label">原料切断阀</text>
+        <text x="50" y="380" class="system-label">原料控制阀</text>
+        <text x="50" y="400" class="system-label">烧焦空气</text>
+        <text x="50" y="420" class="system-label">DS扫线</text>
+        <text x="50" y="440" class="system-label">连排</text>
+
+        <!-- 急冷器标签 -->
+        <text x="1200" y="500" class="system-label">工艺水</text>
+        <text x="1200" y="520" class="system-label">急冷油</text>
+        <text x="1200" y="540" class="system-label">开工放空</text>
+        <text x="1200" y="560" class="system-label">减温水</text>
+
+        <!-- 电动阀标签 -->
+        <text x="1200" y="580" class="system-label">电动阀 1301</text>
+        <text x="1200" y="600" class="system-label">HV1302</text>
+        <text x="1200" y="620" class="system-label">电动阀 1303</text>
+
+        <!-- 文丘里标签 -->
+        <text x="100" y="700" class="system-label">文丘里</text>
+        <text x="200" y="700" class="system-label">文丘里</text>
+
+      </svg>
+    </div>
+
+    <!-- 信息面板 -->
+    <div class="info-panel" v-if="selectedComponent">
+      <h3>{{ selectedComponent.name }}</h3>
+      <p>{{ selectedComponent.description }}</p>
+      <div class="component-details">
+        <h4>技术参数:</h4>
+        <ul>
+          <li v-for="param in selectedComponent.parameters" :key="param">
+            {{ param }}
+          </li>
+        </ul>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'ProcessDiagram',
+  data() {
+    return {
+      svgWidth: 1400,
+      svgHeight: 900,
+      selectedComponent: null,
+      componentData: {
+        'steam-drum': {
+          name: '汽包',
+          description: '蒸汽锅炉的核心组件,用于储存和分离蒸汽与水',
+          parameters: [
+            '工作压力: 1.0-2.5 MPa',
+            '工作温度: 180-250°C',
+            '容量: 50-200 m³',
+            '材质: 碳钢/不锈钢'
+          ]
+        },
+        'fire-box-1': {
+          name: '燃烧室1',
+          description: '燃料燃烧产生热量的主要设备',
+          parameters: [
+            '燃烧温度: 800-1200°C',
+            '燃料消耗: 100-500 m³/h',
+            '热效率: 85-95%',
+            '燃烧方式: 强制通风'
+          ]
+        },
+        'fire-box-2': {
+          name: '燃烧室2',
+          description: '燃料燃烧产生热量的主要设备',
+          parameters: [
+            '燃烧温度: 800-1200°C',
+            '燃料消耗: 100-500 m³/h',
+            '热效率: 85-95%',
+            '燃烧方式: 强制通风'
+          ]
+        },
+        'quench-cooler': {
+          name: '急冷器',
+          description: '用于快速冷却高温气体的设备',
+          parameters: [
+            '冷却能力: 1000-5000 kW',
+            '冷却介质: 水/油',
+            '出口温度: 50-100°C',
+            '压力损失: <0.1 MPa'
+          ]
+        },
+        'FPH-1': {
+          name: 'FPH-1 热交换器',
+          description: '第一级热交换器,用于预热给水',
+          parameters: [
+            '换热面积: 500-2000 m²',
+            '传热系数: 1000-3000 W/m²·K',
+            '压降: <0.05 MPa',
+            '材质: 不锈钢'
+          ]
+        },
+        'FPH-2': {
+          name: 'FPH-2 热交换器',
+          description: '第二级热交换器,用于预热给水',
+          parameters: [
+            '换热面积: 500-2000 m²',
+            '传热系数: 1000-3000 W/m²·K',
+            '压降: <0.05 MPa',
+            '材质: 不锈钢'
+          ]
+        },
+        'BFW': {
+          name: '锅炉给水',
+          description: '向锅炉系统提供处理过的给水',
+          parameters: [
+            '给水温度: 100-150°C',
+            '给水压力: 2.0-4.0 MPa',
+            '水质要求: 除氧水',
+            '流量: 50-200 m³/h'
+          ]
+        },
+        'MSH-1': {
+          name: 'MSH-1 过热器',
+          description: '第一级过热器,提高蒸汽温度',
+          parameters: [
+            '过热温度: 300-400°C',
+            '过热压力: 1.5-2.5 MPa',
+            '换热面积: 300-1000 m²',
+            '材质: 合金钢'
+          ]
+        },
+        'MSH-2': {
+          name: 'MSH-2 过热器',
+          description: '第二级过热器,进一步提高蒸汽温度',
+          parameters: [
+            '过热温度: 350-450°C',
+            '过热压力: 1.5-2.5 MPa',
+            '换热面积: 300-1000 m²',
+            '材质: 合金钢'
+          ]
+        },
+        'MSH-3': {
+          name: 'MSH-3 过热器',
+          description: '第三级过热器,最终蒸汽温度控制',
+          parameters: [
+            '过热温度: 400-500°C',
+            '过热压力: 1.5-2.5 MPa',
+            '换热面积: 300-1000 m²',
+            '材质: 合金钢'
+          ]
+        },
+        'HPSS-1': {
+          name: 'HPSS-1 高压过热器',
+          description: '第一级高压过热器',
+          parameters: [
+            '工作压力: 2.0-4.0 MPa',
+            '工作温度: 400-500°C',
+            '换热面积: 200-800 m²',
+            '材质: 高温合金'
+          ]
+        },
+        'HPSS-2': {
+          name: 'HPSS-2 高压过热器',
+          description: '第二级高压过热器',
+          parameters: [
+            '工作压力: 2.0-4.0 MPa',
+            '工作温度: 450-550°C',
+            '换热面积: 200-800 m²',
+            '材质: 高温合金'
+          ]
+        },
+        'SLE-1': {
+          name: 'SLE-1 单元',
+          description: '第一级蒸汽发生单元',
+          parameters: [
+            '蒸汽产量: 10-50 t/h',
+            '工作压力: 1.0-2.5 MPa',
+            '工作温度: 180-250°C',
+            '热效率: 90-95%'
+          ]
+        },
+        'SLE-2': {
+          name: 'SLE-2 单元',
+          description: '第二级蒸汽发生单元',
+          parameters: [
+            '蒸汽产量: 10-50 t/h',
+            '工作压力: 1.0-2.5 MPa',
+            '工作温度: 180-250°C',
+            '热效率: 90-95%'
+          ]
+        },
+        'exhaust-fan': {
+          name: '排气扇',
+          description: '排出燃烧废气的风机',
+          parameters: [
+            '风量: 1000-5000 m³/h',
+            '风压: 1000-3000 Pa',
+            '功率: 10-50 kW',
+            '转速: 1000-3000 rpm'
+          ]
+        },
+        'main-fuel-valve': {
+          name: '主燃料切断阀',
+          description: '控制主燃料供应的安全切断阀',
+          parameters: [
+            '公称压力: 1.6-4.0 MPa',
+            '公称通径: DN50-DN200',
+            '阀体材质: 碳钢/不锈钢',
+            '密封材质: 软密封/硬密封'
+          ]
+        },
+        'fuel-control-valve': {
+          name: '燃料气控制阀 (PCV)',
+          description: '压力控制阀,调节燃料气压力',
+          parameters: [
+            '控制压力: 0.1-1.0 MPa',
+            '控制精度: ±1%',
+            '响应时间: <1s',
+            '材质: 不锈钢'
+          ]
+        },
+        'flow-meter-1': {
+          name: '流量计1',
+          description: '测量BFW流量的仪表',
+          parameters: [
+            '测量范围: 0-200 m³/h',
+            '精度等级: ±0.5%',
+            '工作压力: 0-4.0 MPa',
+            '工作温度: -20-150°C'
+          ]
+        },
+        'flow-meter-2': {
+          name: '流量计2',
+          description: '测量急冷器进水流量的仪表',
+          parameters: [
+            '测量范围: 0-100 m³/h',
+            '精度等级: ±0.5%',
+            '工作压力: 0-2.0 MPa',
+            '工作温度: -20-100°C'
+          ]
+        }
+      }
+    }
+  },
+  methods: {
+    handleComponentClick(componentId, event) {
+      event.stopPropagation()
+      this.selectedComponent = this.componentData[componentId]
+      this.$message({
+        message: `已选择组件: ${this.componentData[componentId].name}`,
+        type: 'info'
+      })
+    },
+
+    handleLineClick(lineId, event) {
+      event.stopPropagation()
+      const lineNames = {
+        'steam-drum-to-SLE-1': '汽包到SLE-1蒸汽管道',
+        'steam-drum-to-SLE-2': '汽包到SLE-2蒸汽管道',
+        'SLE-to-MSH-3': 'SLE到MSH-3给水管道',
+        'SLE-to-MSH-3-2': 'SLE到MSH-3给水管道2',
+        'steam-drum-to-HPSS-1': '汽包到HPSS-1蒸汽管道',
+        'steam-drum-to-HPSS-2': '汽包到HPSS-2蒸汽管道',
+        'BFW-to-quench-cooler': 'BFW到急冷器给水管道',
+        'MSH-1-to-quench-cooler': 'MSH-1到急冷器减温水管道',
+        'fire-box-1-to-SLE-1': '燃烧室1到SLE-1烟气管道',
+        'fire-box-2-to-SLE-2': '燃烧室2到SLE-2烟气管道',
+        'SLE-1-to-heat-stack': 'SLE-1到热交换器堆栈烟气管道',
+        'SLE-2-to-heat-stack': 'SLE-2到热交换器堆栈烟气管道',
+        'heat-stack-flow': '热交换器堆栈内部烟气流动',
+        'heat-stack-to-quench-cooler': '热交换器堆栈到急冷器烟气管道',
+        'fuel-gas-supply': '燃料气供应管道',
+        'fuel-gas-supply-2': '燃料气供应管道2',
+        'fuel-to-fire-box-1': '燃料气到燃烧室1管道',
+        'fuel-to-fire-box-2': '燃料气到燃烧室2管道'
+      }
+
+      this.$message({
+        message: `已选择管道: ${lineNames[lineId]}`,
+        type: 'success'
+      })
+    },
+
+    handleSvgClick() {
+      this.selectedComponent = null
+    }
+  }
+}
+</script>
+
+<style scoped>
+.process-diagram-container {
+  padding: 20px;
+  background-color: #f5f5f5;
+  min-height: 100vh;
+}
+
+.diagram-header {
+  text-align: center;
+  margin-bottom: 20px;
+  padding: 15px;
+  background: white;
+  border-radius: 8px;
+  box-shadow: 0 2px 4px rgba(0,0,0,0.1);
+}
+
+.diagram-header h2 {
+  margin: 0;
+  color: #333;
+  font-size: 24px;
+}
+
+.diagram-content {
+  background: white;
+  border-radius: 8px;
+  padding: 20px;
+  box-shadow: 0 2px 4px rgba(0,0,0,0.1);
+  overflow: auto;
+}
+
+.process-svg {
+  border: 1px solid #ddd;
+  border-radius: 4px;
+  cursor: crosshair;
+}
+
+.component-label {
+  font-size: 12px;
+  font-weight: bold;
+  fill: #333;
+  pointer-events: none;
+}
+
+.system-label {
+  font-size: 10px;
+  fill: #666;
+  pointer-events: none;
+}
+
+.flow-meter-label {
+  font-size: 10px;
+  font-weight: bold;
+  fill: #333;
+  pointer-events: none;
+}
+
+/* 悬停效果 */
+.process-svg rect:hover,
+.process-svg ellipse:hover,
+.process-svg polygon:hover,
+.process-svg circle:hover {
+  filter: drop-shadow(0 0 8px rgba(64, 158, 255, 0.6));
+  cursor: pointer;
+}
+
+.process-svg line:hover {
+  stroke-width: 6;
+  cursor: pointer;
+}
+
+/* 信息面板 */
+.info-panel {
+  position: fixed;
+  top: 20px;
+  right: 20px;
+  width: 350px;
+  background: white;
+  border-radius: 8px;
+  padding: 20px;
+  box-shadow: 0 4px 12px rgba(0,0,0,0.15);
+  z-index: 1000;
+  max-height: 80vh;
+  overflow-y: auto;
+}
+
+.info-panel h3 {
+  margin: 0 0 10px 0;
+  color: #333;
+  border-bottom: 2px solid #409eff;
+  padding-bottom: 5px;
+}
+
+.info-panel p {
+  margin: 0 0 15px 0;
+  color: #666;
+  line-height: 1.5;
+}
+
+.component-details h4 {
+  margin: 15px 0 8px 0;
+  color: #333;
+  font-size: 14px;
+}
+
+.component-details ul {
+  margin: 0;
+  padding-left: 20px;
+}
+
+.component-details li {
+  margin: 5px 0;
+  color: #666;
+  font-size: 13px;
+}
+
+/* 响应式设计 */
+@media (max-width: 768px) {
+  .info-panel {
+    position: relative;
+    width: 100%;
+    margin-top: 20px;
+  }
+
+  .process-svg {
+    width: 100%;
+    height: auto;
+  }
+}
+</style>

+ 10 - 10
ui/src/views/training/trainingbcc/deviceList.vue

@@ -21,15 +21,15 @@
         </el-select>
       </el-form-item>
 
-      <el-form-item label="学习时长min" prop="learnTime">
-        <el-input
-          v-model="queryParams.learnTime"
-          placeholder="请输入学习时长min"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
+<!--      <el-form-item label="学习时长min" prop="learnTime">-->
+<!--        <el-input-->
+<!--          v-model="queryParams.learnTime"-->
+<!--          placeholder="请输入学习时长min"-->
+<!--          clearable-->
+<!--          size="small"-->
+<!--          @keyup.enter.native="handleQuery"-->
+<!--        />-->
+<!--      </el-form-item>-->
       <el-form-item label="完成时间" prop="finishDate">
         <el-date-picker clearable size="small" style="width: 200px"
           v-model="queryParams.finishDate"
@@ -94,7 +94,7 @@
       </el-table-column>
       <el-table-column label="需学习时长min" align="center" prop="trainingbcc.timerNeed" width="120" :show-overflow-tooltip="true"/>
 
-      <el-table-column label="已学习时长min" align="center" prop="learnTime" width="120" :show-overflow-tooltip="true"/>
+<!--      <el-table-column label="已学习时长min" align="center" prop="learnTime" width="120" :show-overflow-tooltip="true"/>-->