ly 1 год назад
Родитель
Сommit
a55db7fb56
39 измененных файлов с 2231 добавлено и 38 удалено
  1. 19 0
      master/src/main/java/com/ruoyi/project/common/controller/CBPSHomeDataController.java
  2. 240 0
      master/src/main/java/com/ruoyi/project/sems/safecheck/controller/TSpecDailycheckController.java
  3. 283 0
      master/src/main/java/com/ruoyi/project/sems/safecheck/domain/TSpecDailycheck.java
  4. 64 0
      master/src/main/java/com/ruoyi/project/sems/safecheck/mapper/TSpecDailycheckMapper.java
  5. 61 0
      master/src/main/java/com/ruoyi/project/sems/safecheck/service/ITSpecDailycheckService.java
  6. 93 0
      master/src/main/java/com/ruoyi/project/sems/safecheck/service/impl/TSpecDailycheckServiceImpl.java
  7. 3 1
      master/src/main/java/com/ruoyi/project/training/controller/TTrainingParticipantsController.java
  8. 41 0
      master/src/main/java/com/ruoyi/project/training/controller/TTrainingrecordsController.java
  9. 7 1
      master/src/main/java/com/ruoyi/project/training/controller/TWorkcertificateCbpsController.java
  10. 12 8
      master/src/main/java/com/ruoyi/project/training/mapper/TTrainingrecordsMapper.java
  11. 6 0
      master/src/main/java/com/ruoyi/project/training/mapper/TWorkcertificateCbpsMapper.java
  12. 1 1
      master/src/main/resources/application.yml
  13. 8 0
      master/src/main/resources/mybatis/sems/TSpecdevCcMapper.xml
  14. 8 0
      master/src/main/resources/mybatis/sems/TSpecdevDtMapper.xml
  15. 8 0
      master/src/main/resources/mybatis/sems/TSpecdevDzsbMapper.xml
  16. 10 0
      master/src/main/resources/mybatis/sems/TSpecdevGlMapper.xml
  17. 18 0
      master/src/main/resources/mybatis/sems/TSpecdevYlgdMapper.xml
  18. 8 0
      master/src/main/resources/mybatis/sems/TSpecdevYlrqMapper.xml
  19. 140 0
      master/src/main/resources/mybatis/sems/safecheck/TSpecDailycheckMapper.xml
  20. 12 0
      master/src/main/resources/mybatis/training/TTrainingrecordsMapper.xml
  21. 29 0
      master/src/main/resources/mybatis/training/TWorkcertificateCbpsMapper.xml
  22. BIN
      master/src/main/resources/static/word/sems/check/dailycheck.docx
  23. 12 4
      ui/src/api/common/homedataCbpb.js
  24. 61 0
      ui/src/api/sems/safecheck/dailycheck.js
  25. 126 0
      ui/src/views/dashboard/hcq/LineChart.vue
  26. 6 5
      ui/src/views/dashboard/hcq/PanelGroup.vue
  27. 4 5
      ui/src/views/dashboard/hcq/PieChart.vue
  28. 135 0
      ui/src/views/dashboard/hcq/workcertificateChart.vue
  29. 30 11
      ui/src/views/hcqhome.vue
  30. 1 1
      ui/src/views/production/day/index.vue
  31. 721 0
      ui/src/views/sems/safecheck/dailycheck/index.vue
  32. 3 0
      ui/src/views/sems/safecheck/index.vue
  33. 10 0
      ui/src/views/sems/specCc/index.vue
  34. 10 0
      ui/src/views/sems/specDt/index.vue
  35. 10 0
      ui/src/views/sems/specDzsb/index.vue
  36. 10 0
      ui/src/views/sems/specGl/index.vue
  37. 10 0
      ui/src/views/sems/specYlgd/index.vue
  38. 10 0
      ui/src/views/sems/specYlrq/index.vue
  39. 1 1
      ui/src/views/training/newstaff/tnNew/index.vue

+ 19 - 0
master/src/main/java/com/ruoyi/project/common/controller/CBPSHomeDataController.java

@@ -13,12 +13,14 @@ import com.ruoyi.project.ehs.service.ITFireapprovalService;
 import com.ruoyi.project.ehs.service.ITHealthapprovalService;
 import com.ruoyi.project.ehs.service.ITSafetyapprovalService;
 import com.ruoyi.project.training.domain.TTraining;
+import com.ruoyi.project.training.mapper.TWorkcertificateCbpsMapper;
 import com.ruoyi.project.training.service.ITTrainingService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.annotation.Resource;
 import java.text.SimpleDateFormat;
 import java.util.*;
 
@@ -42,6 +44,8 @@ public class CBPSHomeDataController extends BaseController {
 
     @Autowired
     private ITTrainingService tTrainingService;
+    @Resource
+    private TWorkcertificateCbpsMapper tWorkcertificateCbpsMapper;
 
     @GetMapping("/countNum")
     public AjaxResult getCountNum() {
@@ -182,4 +186,19 @@ public class CBPSHomeDataController extends BaseController {
         result.put("nextReview",nextReviews);
         return AjaxResult.success(result);
     }
+
+    @GetMapping("/getWorkcetificate")
+    public AjaxResult getWorkcetificate() {
+        Map<String, Object> result = new HashMap<>();
+        Map<String, Object> map = tWorkcertificateCbpsMapper.selectDateNotNull();
+        Map<String, Object> map1 = tWorkcertificateCbpsMapper.selectDateWarn();
+        result.put("cerAll" , map);
+        result.put("cerWarn" , map1);
+
+        return AjaxResult.success(result);
+
+
+    };
+
+
 }

+ 240 - 0
master/src/main/java/com/ruoyi/project/sems/safecheck/controller/TSpecDailycheckController.java

@@ -0,0 +1,240 @@
+package com.ruoyi.project.sems.safecheck.controller;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.data.Pictures;
+import com.deepoove.poi.data.Texts;
+import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.file.FileUploadUtils;
+import com.ruoyi.framework.config.RuoYiConfig;
+import com.ruoyi.project.apply.domain.TApplyOfflinevalve;
+import com.ruoyi.project.system.domain.SysUser;
+import com.ruoyi.project.system.service.ISysUserService;
+import io.jsonwebtoken.lang.Assert;
+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.sems.safecheck.domain.TSpecDailycheck;
+import com.ruoyi.project.sems.safecheck.service.ITSpecDailycheckService;
+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;
+
+/**
+ * 每日安全检查Controller
+ *
+ * @author Li
+ * @date 2023-08-17
+ */
+@RestController
+@RequestMapping("/safecheck/dailycheck")
+public class TSpecDailycheckController extends BaseController
+{
+    @Autowired
+    private ITSpecDailycheckService tSpecDailycheckService;
+    @Autowired
+    private ISysUserService userService;
+
+    /**
+     * 查询每日安全检查列表
+     */
+    @PreAuthorize("@ss.hasPermi('safecheck:dailycheck:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TSpecDailycheck tSpecDailycheck)
+    {
+        startPage();
+        List<TSpecDailycheck> list = tSpecDailycheckService.selectTSpecDailycheckList(tSpecDailycheck);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出每日安全检查列表
+     */
+    @PreAuthorize("@ss.hasPermi('safecheck:dailycheck:export')")
+    @Log(title = "每日安全检查", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult export(TSpecDailycheck tSpecDailycheck)
+    {
+        List<TSpecDailycheck> list = tSpecDailycheckService.selectTSpecDailycheckList(tSpecDailycheck);
+        ExcelUtil<TSpecDailycheck> util = new ExcelUtil<TSpecDailycheck>(TSpecDailycheck.class);
+        return util.exportExcel(list, "dailycheck");
+    }
+
+    /**
+     * 获取每日安全检查详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('safecheck:dailycheck:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return AjaxResult.success(tSpecDailycheckService.selectTSpecDailycheckById(id));
+    }
+
+    /**
+     * 新增每日安全检查
+     */
+    @PreAuthorize("@ss.hasPermi('safecheck:dailycheck:add')")
+    @Log(title = "每日安全检查", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TSpecDailycheck tSpecDailycheck)
+    {
+        long userId = getUserId();
+        tSpecDailycheck.setCheckerId(userId);
+        tSpecDailycheck.setCreaterCode(userId);
+        return toAjax(tSpecDailycheckService.insertTSpecDailycheck(tSpecDailycheck));
+    }
+
+    /**
+     * 修改每日安全检查
+     */
+    @PreAuthorize("@ss.hasPermi('safecheck:dailycheck:edit')")
+    @Log(title = "每日安全检查", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TSpecDailycheck tSpecDailycheck)
+    {
+        return toAjax(tSpecDailycheckService.updateTSpecDailycheck(tSpecDailycheck));
+    }
+
+    /**
+     * 删除每日安全检查
+     */
+    @PreAuthorize("@ss.hasPermi('safecheck:dailycheck:remove')")
+    @Log(title = "每日安全检查", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(tSpecDailycheckService.deleteTSpecDailycheckByIds(ids));
+    }
+
+    /**
+     * @param id
+     * @return
+     * @throws IOException
+     */
+    @GetMapping("/wordView/{id}")
+    public AjaxResult wordView(@PathVariable Long id) throws IOException {
+        //根据ID查询并生成
+        String url = PreView(id);
+        return AjaxResult.success(url);
+    }
+
+    /**
+     * @param id 生成文件名
+     * @return
+     * @throws IOException
+     */
+    public String PreView(Long id) throws IOException {
+        //根据ID查询并生成
+        TSpecDailycheck t = tSpecDailycheckService.selectTSpecDailycheckById(id);
+        String url = this.createcheck(t);
+        return url;
+    }
+
+    /**
+     * 生成wordt
+     */
+    public String createcheck(TSpecDailycheck tSpecDailycheck) throws IOException {
+        //生成word
+        //渲染文本
+        Map<String, Object> params = getWordData(tSpecDailycheck);
+        // 模板路径
+        String templatePath = "static/word/sems/check/dailycheck.docx";
+        // 生成word的路径
+        String fileDir = RuoYiConfig.getProfile() + "/" + "sems/dailycheck";
+        // 生成word的文件名称
+        String fileName = tSpecDailycheck.getId() + ".docx";
+        String wordPath = this.createWord(templatePath, fileDir, fileName, params);
+        return wordPath;
+    }
+
+    /**
+     * 获取word数据
+     */
+    public Map<String, Object> getWordData(TSpecDailycheck tSpecDailycheck) {
+        Map<String, Object> params = new HashMap<>();
+        params.put("plantCode", Texts.of(tSpecDailycheck.getPlantCode()).fontSize(11).bold().create());
+        params.put("checkDate", Texts.of(DateUtils.dateTime(tSpecDailycheck.getCheckDate())).fontSize(11).bold().create());
+        params.put("cPerson", Texts.of(tSpecDailycheck.getcPerson()).fontSize(10).bold().create());
+        params.put("cDevice", Texts.of(tSpecDailycheck.getcDevice()).fontSize(10).bold().create());
+        params.put("cSafety", Texts.of(tSpecDailycheck.getcSafety()).fontSize(10).bold().create());
+        params.put("cEnv", Texts.of(tSpecDailycheck.getcEnv()).fontSize(10).bold().create());
+        params.put("cGov", Texts.of(tSpecDailycheck.getcGov()).fontSize(10).bold().create());
+        params.put("cComplaint", Texts.of(tSpecDailycheck.getcComplaint()).fontSize(10).bold().create());
+        params.put("cOpinion", Texts.of(tSpecDailycheck.getcOpinion()).fontSize(10).bold().create());
+        params.put("cOther", Texts.of(tSpecDailycheck.getcOther()).fontSize(10).bold().create());
+        params.put("explain", Texts.of(tSpecDailycheck.getExplain()).fontSize(10).bold().create());
+
+
+            SysUser sysUser = userService.selectUserById(tSpecDailycheck.getCheckerId());
+            if (sysUser.getSignUrl() != null && new File(fileName(sysUser.getSignUrl())).exists()) {
+                params.put("checkerNameP", Pictures.ofLocal(fileName(sysUser.getSignUrl())).size(80, 40).create());
+            } else {
+                params.put("checkerName", Texts.of(sysUser.getNickName()).fontSize(10).bold().create());
+            }
+        // 渲染文本
+        return params;
+    }
+
+    /**
+     * @param templatePath word模板文件路径
+     * @param fileDir      生成的文件存放地址
+     * @param fileName     生成的文件名
+     * @param paramMap     参数集合
+     * @return 返回word生成的路径
+     */
+    public String createWord(String templatePath, String fileDir, String fileName, Map<String, Object> paramMap) throws IOException {
+        Assert.notNull(templatePath, "word模板文件路径不能为空");
+        Assert.notNull(fileDir, "生成的文件存放地址不能为空");
+        Assert.notNull(fileName, "生成的文件名不能为空");
+        File dir = new File(fileDir);
+        if (!dir.exists()) {
+            logger.info("目录不存在,创建文件夹{}!", fileDir);
+            dir.mkdirs();
+        }
+        fileName = fileName.replaceAll("/", "_"); //替换文件中敏感字段
+        logger.info("目录文件{}!", fileName);
+        String filePath = fileDir + "/" + fileName;
+        logger.info("目录{}!", filePath);
+        // 读取模板渲染参数
+        InputStream is = getClass().getClassLoader().getResourceAsStream(templatePath);
+        XWPFTemplate template = XWPFTemplate.compile(is).render(paramMap);
+        try {
+            // 将模板参数写入路径
+            template.writeToFile(filePath);
+            template.close();
+        } catch (Exception e) {
+            logger.error("生成word异常{}", e.getMessage());
+            e.printStackTrace();
+        }
+        String pathFileName = FileUploadUtils.getPathFileName(RuoYiConfig.getFilePath("/" + "sems/dailycheck"), fileName);
+        return pathFileName;
+    }
+
+    /**
+     * @param
+     * @return 映射签名的文件名
+     * @throws IOException
+     */
+    public String fileName(String filepath) {
+        String newFilePath = filepath.replace("/profile", "");
+        String pathName = RuoYiConfig.getProfile() + newFilePath;
+        return pathName;
+    }
+}

+ 283 - 0
master/src/main/java/com/ruoyi/project/sems/safecheck/domain/TSpecDailycheck.java

@@ -0,0 +1,283 @@
+package com.ruoyi.project.sems.safecheck.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;
+
+/**
+ * 每日安全检查对象 t_spec_dailycheck
+ *
+ * @author Li
+ * @date 2023-08-17
+ */
+public class TSpecDailycheck extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 唯一标识ID */
+    private Long id;
+
+    /** 装置名称 */
+    @Excel(name = "装置名称")
+    private String plantCode;
+
+    /** 状态 0 :正常 ;-1:删除 */
+    private Long delFlag;
+
+    /** 创建人 */
+    private Long createrCode;
+
+    /** 创建时间 */
+    private Date createdate;
+
+    /** 修改人 */
+    private Long updaterCode;
+
+    /** 修改时间 */
+    private Date updatedate;
+
+    /** 检查日期 */
+    @JsonFormat(pattern = "yyyy-MM-dd" , timezone = "GMT+8")
+    @Excel(name = "检查日期", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date checkDate;
+
+    /** 安全员用户id */
+    private Long checkerId;
+
+    @Excel(name = "安全员用户")
+    private String checkerName;
+
+    /** 人员 */
+    @Excel(name = "人员")
+    private String cPerson;
+
+    /** 设备本体 */
+    @Excel(name = "设备本体")
+    private String cDevice;
+
+    /** 安全附件 */
+    @Excel(name = "安全附件")
+    private String cSafety;
+
+    /** 环境 */
+    @Excel(name = "环境")
+    private String cEnv;
+
+    /** 政府 */
+    @Excel(name = "政府")
+    private String cGov;
+
+    /** 投诉举报 */
+    @Excel(name = "投诉举报")
+    private String cComplaint;
+
+    /** 舆情信息 */
+    @Excel(name = "舆情信息")
+    private String cOpinion;
+
+    /** 其他 */
+    @Excel(name = "其他")
+    private String cOther;
+
+    /** 说明 */
+    @Excel(name = "说明")
+    private String explain;
+
+    public void setId(Long id)
+    {
+        this.id = id;
+    }
+
+    public Long getId()
+    {
+        return id;
+    }
+    public void setPlantCode(String plantCode)
+    {
+        this.plantCode = plantCode;
+    }
+
+    public String getPlantCode()
+    {
+        return plantCode;
+    }
+    public void setDelFlag(Long delFlag)
+    {
+        this.delFlag = delFlag;
+    }
+
+    public Long getDelFlag()
+    {
+        return delFlag;
+    }
+    public void setCreaterCode(Long createrCode)
+    {
+        this.createrCode = createrCode;
+    }
+
+    public Long getCreaterCode()
+    {
+        return createrCode;
+    }
+    public void setCreatedate(Date createdate)
+    {
+        this.createdate = createdate;
+    }
+
+    public Date getCreatedate()
+    {
+        return createdate;
+    }
+    public void setUpdaterCode(Long updaterCode)
+    {
+        this.updaterCode = updaterCode;
+    }
+
+    public Long getUpdaterCode()
+    {
+        return updaterCode;
+    }
+    public void setUpdatedate(Date updatedate)
+    {
+        this.updatedate = updatedate;
+    }
+
+    public Date getUpdatedate()
+    {
+        return updatedate;
+    }
+    public void setCheckDate(Date checkDate)
+    {
+        this.checkDate = checkDate;
+    }
+
+    public Date getCheckDate()
+    {
+        return checkDate;
+    }
+    public void setCheckerId(Long checkerId)
+    {
+        this.checkerId = checkerId;
+    }
+
+    public Long getCheckerId()
+    {
+        return checkerId;
+    }
+    public void setcPerson(String cPerson)
+    {
+        this.cPerson = cPerson;
+    }
+
+    public String getcPerson()
+    {
+        return cPerson;
+    }
+    public void setcDevice(String cDevice)
+    {
+        this.cDevice = cDevice;
+    }
+
+    public String getcDevice()
+    {
+        return cDevice;
+    }
+    public void setcSafety(String cSafety)
+    {
+        this.cSafety = cSafety;
+    }
+
+    public String getcSafety()
+    {
+        return cSafety;
+    }
+    public void setcEnv(String cEnv)
+    {
+        this.cEnv = cEnv;
+    }
+
+    public String getcEnv()
+    {
+        return cEnv;
+    }
+    public void setcGov(String cGov)
+    {
+        this.cGov = cGov;
+    }
+
+    public String getcGov()
+    {
+        return cGov;
+    }
+    public void setcComplaint(String cComplaint)
+    {
+        this.cComplaint = cComplaint;
+    }
+
+    public String getcComplaint()
+    {
+        return cComplaint;
+    }
+    public void setcOpinion(String cOpinion)
+    {
+        this.cOpinion = cOpinion;
+    }
+
+    public String getcOpinion()
+    {
+        return cOpinion;
+    }
+    public void setcOther(String cOther)
+    {
+        this.cOther = cOther;
+    }
+
+    public String getcOther()
+    {
+        return cOther;
+    }
+    public void setExplain(String explain)
+    {
+        this.explain = explain;
+    }
+
+    public String getExplain()
+    {
+        return explain;
+    }
+
+    public String getCheckerName() {
+        return checkerName;
+    }
+
+    public void setCheckerName(String checkerName) {
+        this.checkerName = checkerName;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("plantCode", getPlantCode())
+            .append("delFlag", getDelFlag())
+            .append("createrCode", getCreaterCode())
+            .append("createdate", getCreatedate())
+            .append("updaterCode", getUpdaterCode())
+            .append("updatedate", getUpdatedate())
+            .append("checkDate", getCheckDate())
+            .append("checkerId", getCheckerId())
+            .append("cPerson", getcPerson())
+            .append("cDevice", getcDevice())
+            .append("cSafety", getcSafety())
+            .append("cEnv", getcEnv())
+            .append("cGov", getcGov())
+            .append("cComplaint", getcComplaint())
+            .append("cOpinion", getcOpinion())
+            .append("cOther", getcOther())
+            .append("explain", getExplain())
+            .toString();
+    }
+}

+ 64 - 0
master/src/main/java/com/ruoyi/project/sems/safecheck/mapper/TSpecDailycheckMapper.java

@@ -0,0 +1,64 @@
+package com.ruoyi.project.sems.safecheck.mapper;
+
+import java.util.List;
+import com.ruoyi.framework.aspectj.lang.annotation.DataScope;
+import com.ruoyi.framework.aspectj.lang.annotation.DataScopePlant;
+import com.ruoyi.project.sems.safecheck.domain.TSpecDailycheck;
+
+/**
+ * 每日安全检查Mapper接口
+ *
+ * @author Li
+ * @date 2023-08-17
+ */
+public interface TSpecDailycheckMapper
+{
+    /**
+     * 查询每日安全检查
+     *
+     * @param id 每日安全检查ID
+     * @return 每日安全检查
+     */
+    public TSpecDailycheck selectTSpecDailycheckById(Long id);
+
+    /**
+     * 查询每日安全检查列表
+     *
+     * @param tSpecDailycheck 每日安全检查
+     * @return 每日安全检查集合
+     */
+    @DataScopePlant(deptAlias = "d")
+    public List<TSpecDailycheck> selectTSpecDailycheckList(TSpecDailycheck tSpecDailycheck);
+
+    /**
+     * 新增每日安全检查
+     *
+     * @param tSpecDailycheck 每日安全检查
+     * @return 结果
+     */
+    public int insertTSpecDailycheck(TSpecDailycheck tSpecDailycheck);
+
+    /**
+     * 修改每日安全检查
+     *
+     * @param tSpecDailycheck 每日安全检查
+     * @return 结果
+     */
+    public int updateTSpecDailycheck(TSpecDailycheck tSpecDailycheck);
+
+    /**
+     * 删除每日安全检查
+     *
+     * @param id 每日安全检查ID
+     * @return 结果
+     */
+    public int deleteTSpecDailycheckById(Long id);
+
+    /**
+     * 批量删除每日安全检查
+     *
+     * @param ids 需要删除的数据ID
+     * @return 结果
+     */
+    public int deleteTSpecDailycheckByIds(Long[] ids);
+}

+ 61 - 0
master/src/main/java/com/ruoyi/project/sems/safecheck/service/ITSpecDailycheckService.java

@@ -0,0 +1,61 @@
+package com.ruoyi.project.sems.safecheck.service;
+
+import java.util.List;
+import com.ruoyi.project.sems.safecheck.domain.TSpecDailycheck;
+
+/**
+ * 每日安全检查Service接口
+ * 
+ * @author Li
+ * @date 2023-08-17
+ */
+public interface ITSpecDailycheckService 
+{
+    /**
+     * 查询每日安全检查
+     * 
+     * @param id 每日安全检查ID
+     * @return 每日安全检查
+     */
+    public TSpecDailycheck selectTSpecDailycheckById(Long id);
+
+    /**
+     * 查询每日安全检查列表
+     * 
+     * @param tSpecDailycheck 每日安全检查
+     * @return 每日安全检查集合
+     */
+    public List<TSpecDailycheck> selectTSpecDailycheckList(TSpecDailycheck tSpecDailycheck);
+
+    /**
+     * 新增每日安全检查
+     * 
+     * @param tSpecDailycheck 每日安全检查
+     * @return 结果
+     */
+    public int insertTSpecDailycheck(TSpecDailycheck tSpecDailycheck);
+
+    /**
+     * 修改每日安全检查
+     * 
+     * @param tSpecDailycheck 每日安全检查
+     * @return 结果
+     */
+    public int updateTSpecDailycheck(TSpecDailycheck tSpecDailycheck);
+
+    /**
+     * 批量删除每日安全检查
+     * 
+     * @param ids 需要删除的每日安全检查ID
+     * @return 结果
+     */
+    public int deleteTSpecDailycheckByIds(Long[] ids);
+
+    /**
+     * 删除每日安全检查信息
+     * 
+     * @param id 每日安全检查ID
+     * @return 结果
+     */
+    public int deleteTSpecDailycheckById(Long id);
+}

+ 93 - 0
master/src/main/java/com/ruoyi/project/sems/safecheck/service/impl/TSpecDailycheckServiceImpl.java

@@ -0,0 +1,93 @@
+package com.ruoyi.project.sems.safecheck.service.impl;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.project.sems.safecheck.mapper.TSpecDailycheckMapper;
+import com.ruoyi.project.sems.safecheck.domain.TSpecDailycheck;
+import com.ruoyi.project.sems.safecheck.service.ITSpecDailycheckService;
+
+/**
+ * 每日安全检查Service业务层处理
+ *
+ * @author Li
+ * @date 2023-08-17
+ */
+@Service
+public class TSpecDailycheckServiceImpl implements ITSpecDailycheckService
+{
+    @Autowired
+    private TSpecDailycheckMapper tSpecDailycheckMapper;
+
+    /**
+     * 查询每日安全检查
+     *
+     * @param id 每日安全检查ID
+     * @return 每日安全检查
+     */
+    @Override
+    public TSpecDailycheck selectTSpecDailycheckById(Long id)
+    {
+        return tSpecDailycheckMapper.selectTSpecDailycheckById(id);
+    }
+
+    /**
+     * 查询每日安全检查列表
+     *
+     * @param tSpecDailycheck 每日安全检查
+     * @return 每日安全检查
+     */
+    @Override
+    public List<TSpecDailycheck> selectTSpecDailycheckList(TSpecDailycheck tSpecDailycheck)
+    {
+        return tSpecDailycheckMapper.selectTSpecDailycheckList(tSpecDailycheck);
+    }
+
+    /**
+     * 新增每日安全检查
+     *
+     * @param tSpecDailycheck 每日安全检查
+     * @return 结果
+     */
+    @Override
+    public int insertTSpecDailycheck(TSpecDailycheck tSpecDailycheck)
+    {
+        return tSpecDailycheckMapper.insertTSpecDailycheck(tSpecDailycheck);
+    }
+
+    /**
+     * 修改每日安全检查
+     *
+     * @param tSpecDailycheck 每日安全检查
+     * @return 结果
+     */
+    @Override
+    public int updateTSpecDailycheck(TSpecDailycheck tSpecDailycheck)
+    {
+        return tSpecDailycheckMapper.updateTSpecDailycheck(tSpecDailycheck);
+    }
+
+    /**
+     * 批量删除每日安全检查
+     *
+     * @param ids 需要删除的每日安全检查ID
+     * @return 结果
+     */
+    @Override
+    public int deleteTSpecDailycheckByIds(Long[] ids)
+    {
+        return tSpecDailycheckMapper.deleteTSpecDailycheckByIds(ids);
+    }
+
+    /**
+     * 删除每日安全检查信息
+     *
+     * @param id 每日安全检查ID
+     * @return 结果
+     */
+    @Override
+    public int deleteTSpecDailycheckById(Long id)
+    {
+        return tSpecDailycheckMapper.deleteTSpecDailycheckById(id);
+    }
+}

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

@@ -53,6 +53,8 @@ public class TTrainingParticipantsController extends BaseController
         return getDataTable(list);
     }
 
+
+
     /**
      * 查询人员-公司级培训关系列表
      */
@@ -64,7 +66,7 @@ public class TTrainingParticipantsController extends BaseController
         List<List> companyLevelList = new ArrayList<>();
         List<TTrainingCompanylevel> tTrainingCompanylevels = tTrainingCompanylevelService.selectTTrainingCompanylevelList(new TTrainingCompanylevel());
         TStaffmgr staffmgr = new TStaffmgr();
-        staffmgr.setUnits("10,18,20");
+        staffmgr.setUnits("10,18,20,30");
         staffmgr.setLeftYear(String.valueOf(Calendar.getInstance().YEAR));
         List<TStaffmgr> staffmgrs = tStaffmgrService.selectRecordList(staffmgr);
         try {

+ 41 - 0
master/src/main/java/com/ruoyi/project/training/controller/TTrainingrecordsController.java

@@ -10,12 +10,14 @@ import com.alibaba.fastjson.JSON;
 import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.common.utils.file.ExcelUtils;
 import com.ruoyi.project.plant.domain.TStaffmgr;
+import com.ruoyi.project.plant.mapper.TStaffmgrMapper;
 import com.ruoyi.project.plant.service.ITStaffmgrService;
 import com.ruoyi.project.system.domain.SysDept;
 import com.ruoyi.project.system.domain.SysDictData;
 import com.ruoyi.project.system.service.ISysDeptService;
 import com.ruoyi.project.system.service.ISysDictTypeService;
 import com.ruoyi.project.training.domain.*;
+import com.ruoyi.project.training.mapper.TTrainingrecordsMapper;
 import com.ruoyi.project.training.service.ITTrainingParticipantsService;
 import org.apache.poi.ss.usermodel.*;
 import org.apache.velocity.util.ArrayListWrapper;
@@ -31,6 +33,8 @@ import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.framework.web.page.TableDataInfo;
 import org.springframework.web.multipart.MultipartFile;
 
+import javax.annotation.Resource;
+
 /**
  * 培训成绩Controller
  *
@@ -55,6 +59,10 @@ public class TTrainingrecordsController extends BaseController
 
     @Autowired
     private ITTrainingParticipantsService tTrainingParticipantsService;
+    @Resource
+    private TTrainingrecordsMapper tTrainingrecordsMapper;
+    @Resource
+    private TStaffmgrMapper tStaffmgrMapper;
 
     /**
      * 查询培训成绩列表
@@ -63,11 +71,44 @@ public class TTrainingrecordsController extends BaseController
     @GetMapping("/list")
     public TableDataInfo list(TTrainingrecords tTrainingrecords)
     {
+        try {
+            //  同步人员
+            syncData();
+        }catch (Exception e) {
+            logger.error(JSON.toJSONString(e));
+        };
         startPage();
         List<TTrainingrecords> list = tTrainingrecordsService.selectTTrainingrecordsList(tTrainingrecords);
         return getDataTable(list);
     }
 
+    public AjaxResult syncData() {
+        List<String> delList = tTrainingrecordsMapper.queryNeedDeleteIds();
+        if (delList.size() > 0){
+            for (String id : delList
+            ) {
+                tTrainingrecordsMapper.selectTTrainingrecordsBystaffId(Long.parseLong(id));
+            }
+        }
+        List<String> addList = tTrainingrecordsMapper.queryNeedInsertIds();
+        if (addList.size() > 0) {
+            for (String id: addList
+            ) {
+                TStaffmgr tStaffmgr = tStaffmgrMapper.selectTStaffmgrByStaffId(id);
+                TTrainingrecords tTrainingrecords = new TTrainingrecords();
+                tTrainingrecords.setStaffId(tStaffmgr.getId());
+                tTrainingrecords.setPlantCode(tStaffmgr.getPlantCode());
+                tTrainingrecords.setName(tStaffmgr.getName());
+                tTrainingrecords.setEmployeeid(tStaffmgr.getStaffid());
+                tTrainingrecords.setClasses(tStaffmgr.getTeam());
+                tTrainingrecords.setDeptId(tStaffmgr.getDeptId());
+                tTrainingrecordsService.insertTTrainingrecords(tTrainingrecords);
+            }
+        }
+
+        return AjaxResult.success();
+    }
+
     /**
      * 导出培训成绩列表
      */

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

@@ -2,6 +2,7 @@ package com.ruoyi.project.training.controller;
 
 import java.util.List;
 
+import com.alibaba.fastjson.JSON;
 import com.ruoyi.project.plant.domain.TStaffmgr;
 import com.ruoyi.project.plant.mapper.TStaffmgrMapper;
 import com.ruoyi.project.training.mapper.TWorkcertificateCbpsMapper;
@@ -50,7 +51,12 @@ public class TWorkcertificateCbpsController extends BaseController
     @GetMapping("/list")
     public TableDataInfo list(TWorkcertificateCbps tWorkcertificateCbps)
     {
-        syncData();
+        try {
+            //  同步人员
+            syncData();
+        }catch (Exception e) {
+            logger.error(JSON.toJSONString(e));
+        };
         startPage();
         List<TWorkcertificateCbps> list = tWorkcertificateCbpsService.selectTWorkcertificateCbpsList(tWorkcertificateCbps);
         return getDataTable(list);

+ 12 - 8
master/src/main/java/com/ruoyi/project/training/mapper/TTrainingrecordsMapper.java

@@ -6,15 +6,15 @@ import com.ruoyi.project.training.domain.TTrainingrecords;
 
 /**
  * 培训成绩Mapper接口
- * 
+ *
  * @author ruoyi
  * @date 2020-12-02
  */
-public interface TTrainingrecordsMapper 
+public interface TTrainingrecordsMapper
 {
     /**
      * 查询培训成绩
-     * 
+     *
      * @param id 培训成绩ID
      * @return 培训成绩
      */
@@ -30,7 +30,7 @@ public interface TTrainingrecordsMapper
 
     /**
      * 查询培训成绩列表
-     * 
+     *
      * @param tTrainingrecords 培训成绩
      * @return 培训成绩集合
      */
@@ -47,7 +47,7 @@ public interface TTrainingrecordsMapper
 
     /**
      * 新增培训成绩
-     * 
+     *
      * @param tTrainingrecords 培训成绩
      * @return 结果
      */
@@ -55,7 +55,7 @@ public interface TTrainingrecordsMapper
 
     /**
      * 修改培训成绩
-     * 
+     *
      * @param tTrainingrecords 培训成绩
      * @return 结果
      */
@@ -63,7 +63,7 @@ public interface TTrainingrecordsMapper
 
     /**
      * 删除培训成绩
-     * 
+     *
      * @param id 培训成绩ID
      * @return 结果
      */
@@ -71,9 +71,13 @@ public interface TTrainingrecordsMapper
 
     /**
      * 批量删除培训成绩
-     * 
+     *
      * @param ids 需要删除的数据ID
      * @return 结果
      */
     public int deleteTTrainingrecordsByIds(Long[] ids);
+
+    List<String> queryNeedDeleteIds();
+
+    List<String> queryNeedInsertIds();
 }

+ 6 - 0
master/src/main/java/com/ruoyi/project/training/mapper/TWorkcertificateCbpsMapper.java

@@ -1,6 +1,8 @@
 package com.ruoyi.project.training.mapper;
 
 import java.util.List;
+import java.util.Map;
+
 import com.ruoyi.framework.aspectj.lang.annotation.DataScope;
 import com.ruoyi.project.training.domain.TWorkcertificateCbps;
 
@@ -66,4 +68,8 @@ public interface TWorkcertificateCbpsMapper
     List<String> queryNeedInsertIds();
 
     int deleteTWorkcertificateCbpsByStaffId(String id);
+
+    Map<String,Object> selectDateNotNull();
+
+    Map<String, Object> selectDateWarn();
 }

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

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

+ 8 - 0
master/src/main/resources/mybatis/sems/TSpecdevCcMapper.xml

@@ -85,6 +85,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="status != null "> and d.status = #{status}</if>
             <if test="approveStatus != null ">and approve_status = #{approveStatus}</if>
             <if test="warnFlag != null ">and warn_Flag = #{warnFlag}</if>
+            <if test="searchValue != null  and searchValue != ''">
+                and
+                (plant_code like concat(concat('%', #{searchValue}), '%')
+                or unit like concat(concat('%', #{searchValue}), '%')
+                or devname like concat(concat('%', #{searchValue}), '%')
+                or devno like concat(concat('%', #{searchValue}), '%')
+                )
+            </if>
             and d.del_flag = 0
         </where>
         <!-- 数据范围过滤 -->

+ 8 - 0
master/src/main/resources/mybatis/sems/TSpecdevDtMapper.xml

@@ -66,6 +66,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="status != null "> and d.status = #{status}</if>
             <if test="approveStatus != null ">and approve_status = #{approveStatus}</if>
             <if test="warnFlag != null ">and warn_Flag = #{warnFlag}</if>
+            <if test="searchValue != null  and searchValue != ''">
+                and
+                (plant_code like concat(concat('%', #{searchValue}), '%')
+                or unit like concat(concat('%', #{searchValue}), '%')
+                or devname like concat(concat('%', #{searchValue}), '%')
+                or devno like concat(concat('%', #{searchValue}), '%')
+                )
+            </if>
             and d.del_flag = 0
         </where>
         <!-- 数据范围过滤 -->

+ 8 - 0
master/src/main/resources/mybatis/sems/TSpecdevDzsbMapper.xml

@@ -66,6 +66,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="status != null "> and d.status = #{status}</if>
             <if test="approveStatus != null ">and approve_status = #{approveStatus}</if>
             <if test="warnFlag != null ">and warn_Flag = #{warnFlag}</if>
+            <if test="searchValue != null  and searchValue != ''">
+                and
+                (plant_code like concat(concat('%', #{searchValue}), '%')
+                or unit like concat(concat('%', #{searchValue}), '%')
+                or devname like concat(concat('%', #{searchValue}), '%')
+                or devno like concat(concat('%', #{searchValue}), '%')
+                )
+            </if>
             and d.del_flag = 0
         </where>
         <!-- 数据范围过滤 -->

+ 10 - 0
master/src/main/resources/mybatis/sems/TSpecdevGlMapper.xml

@@ -90,6 +90,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="status != null "> and d.status = #{status}</if>
             <if test="approveStatus != null ">and approve_status = #{approveStatus}</if>
             <if test="warnFlag != null ">and warn_Flag = #{warnFlag}</if>
+            <if test="searchValue != null  and searchValue != ''">
+                and
+                (plant_code like concat(concat('%', #{searchValue}), '%')
+                or unit like concat(concat('%', #{searchValue}), '%')
+                or devname like concat(concat('%', #{searchValue}), '%')
+                or regno like concat(concat('%', #{searchValue}), '%')
+                or devno like concat(concat('%', #{searchValue}), '%')
+                or useno like concat(concat('%', #{searchValue}), '%')
+               )
+            </if>
             and d.del_flag = 0
         </where>
         <!-- 数据范围过滤 -->

+ 18 - 0
master/src/main/resources/mybatis/sems/TSpecdevYlgdMapper.xml

@@ -162,6 +162,24 @@
             <if test="status != null ">and d.status = #{status}</if>
             <if test="approveStatus != null ">and approve_status = #{approveStatus}</if>
             <if test="warnFlag != null ">and warn_Flag = #{warnFlag}</if>
+            <if test="searchValue != null  and searchValue != ''">
+                and
+                (plant_code like concat(concat('%', #{searchValue}), '%')
+                or unit like concat(concat('%', #{searchValue}), '%')
+                or devname like concat(concat('%', #{searchValue}), '%')
+                or material like concat(concat('%', #{searchValue}), '%')
+                or devno like concat(concat('%', #{searchValue}), '%')
+                or dia like concat(concat('%', #{searchValue}), '%')
+                or schedule_no like concat(concat('%', #{searchValue}), '%')
+                or length like concat(concat('%', #{searchValue}), '%')
+                or starting like concat(concat('%', #{searchValue}), '%')
+                or ending like concat(concat('%', #{searchValue}), '%')
+                or des_pressure like concat(concat('%', #{searchValue}), '%')
+                or des_temp like concat(concat('%', #{searchValue}), '%')
+                or opt_pressure like concat(concat('%', #{searchValue}), '%')
+                or opt_temp like concat(concat('%', #{searchValue}), '%')
+                )
+            </if>
             and d.del_flag = 0
         </where>
         <!-- 数据范围过滤 -->

+ 8 - 0
master/src/main/resources/mybatis/sems/TSpecdevYlrqMapper.xml

@@ -136,6 +136,14 @@
             <if test="status != null ">and d.status = #{status}</if>
             <if test="approveStatus != null ">and approve_status = #{approveStatus}</if>
             <if test="warnFlag != null ">and warn_Flag = #{warnFlag}</if>
+            <if test="searchValue != null  and searchValue != ''">
+                and
+                (plant_code like concat(concat('%', #{searchValue}), '%')
+                or unit like concat(concat('%', #{searchValue}), '%')
+                or devname like concat(concat('%', #{searchValue}), '%')
+                or devno like concat(concat('%', #{searchValue}), '%')
+                )
+            </if>
             and d.del_flag = 0
         </where>
         <!-- 数据范围过滤 -->

+ 140 - 0
master/src/main/resources/mybatis/sems/safecheck/TSpecDailycheckMapper.xml

@@ -0,0 +1,140 @@
+<?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.sems.safecheck.mapper.TSpecDailycheckMapper">
+
+    <resultMap type="TSpecDailycheck" id="TSpecDailycheckResult">
+        <result property="id"    column="id"    />
+        <result property="plantCode"    column="plant_code"    />
+        <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="checkDate"    column="check_date"    />
+        <result property="checkerId"    column="checker_id"    />
+        <result property="cPerson"    column="c_person"    />
+        <result property="cDevice"    column="c_device"    />
+        <result property="cSafety"    column="c_safety"    />
+        <result property="cEnv"    column="c_env"    />
+        <result property="cGov"    column="c_gov"    />
+        <result property="cComplaint"    column="c_complaint"    />
+        <result property="cOpinion"    column="c_opinion"    />
+        <result property="cOther"    column="c_other"    />
+        <result property="explain"    column="explain"    />
+    </resultMap>
+
+    <sql id="selectTSpecDailycheckVo">
+        select d.id,s.nick_name as checkerName, d.plant_code, d.del_flag, d.creater_code, d.createdate, d.updater_code, d.updatedate, d.check_date, d.checker_id, d.c_person, d.c_device, d.c_safety, d.c_env, d.c_gov, d.c_complaint, d.c_opinion, d.c_other, d.explain  from t_spec_dailycheck d
+        left join sys_user s on d.checker_id = s.user_id
+    </sql>
+
+    <select id="selectTSpecDailycheckList" parameterType="TSpecDailycheck" resultMap="TSpecDailycheckResult">
+        <include refid="selectTSpecDailycheckVo"/>
+        <where>
+            <if test="plantCode != null  and plantCode != ''"> and plant_code = #{plantCode}</if>
+            <if test="checkDate != null "> and check_date = #{checkDate}</if>
+            <if test="cPerson != null  and cPerson != ''"> and c_person = #{cPerson}</if>
+            <if test="cDevice != null  and cDevice != ''"> and c_device = #{cDevice}</if>
+            <if test="cSafety != null  and cSafety != ''"> and c_safety = #{cSafety}</if>
+            <if test="cEnv != null  and cEnv != ''"> and c_env = #{cEnv}</if>
+            <if test="cGov != null  and cGov != ''"> and c_gov = #{cGov}</if>
+            <if test="cComplaint != null  and cComplaint != ''"> and c_complaint = #{cComplaint}</if>
+            <if test="cOpinion != null  and cOpinion != ''"> and c_opinion = #{cOpinion}</if>
+            <if test="cOther != null  and cOther != ''"> and c_other = #{cOther}</if>
+            <if test="explain != null  and explain != ''"> and explain = #{explain}</if>
+            and d.del_flag = 0
+        </where>
+        <!-- 数据范围过滤 -->
+        ${params.dataScopePlant}
+    </select>
+
+    <select id="selectTSpecDailycheckById" parameterType="Long" resultMap="TSpecDailycheckResult">
+        <include refid="selectTSpecDailycheckVo"/>
+        where id = #{id}
+    </select>
+
+    <insert id="insertTSpecDailycheck" parameterType="TSpecDailycheck">
+        <selectKey keyProperty="id" resultType="long" order="BEFORE">
+            SELECT seq_t_spec_dailycheck.NEXTVAL as id FROM DUAL
+        </selectKey>
+        insert into t_spec_dailycheck
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null">id,</if>
+            <if test="plantCode != null and plantCode != ''">plant_code,</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="checkDate != null">check_date,</if>
+            <if test="checkerId != null">checker_id,</if>
+            <if test="cPerson != null">c_person,</if>
+            <if test="cDevice != null">c_device,</if>
+            <if test="cSafety != null">c_safety,</if>
+            <if test="cEnv != null">c_env,</if>
+            <if test="cGov != null">c_gov,</if>
+            <if test="cComplaint != null">c_complaint,</if>
+            <if test="cOpinion != null">c_opinion,</if>
+            <if test="cOther != null">c_other,</if>
+            <if test="explain != null">explain,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null">#{id},</if>
+            <if test="plantCode != null and plantCode != ''">#{plantCode},</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="checkDate != null">#{checkDate},</if>
+            <if test="checkerId != null">#{checkerId},</if>
+            <if test="cPerson != null">#{cPerson},</if>
+            <if test="cDevice != null">#{cDevice},</if>
+            <if test="cSafety != null">#{cSafety},</if>
+            <if test="cEnv != null">#{cEnv},</if>
+            <if test="cGov != null">#{cGov},</if>
+            <if test="cComplaint != null">#{cComplaint},</if>
+            <if test="cOpinion != null">#{cOpinion},</if>
+            <if test="cOther != null">#{cOther},</if>
+            <if test="explain != null">#{explain},</if>
+         </trim>
+    </insert>
+
+    <update id="updateTSpecDailycheck" parameterType="TSpecDailycheck">
+        update t_spec_dailycheck
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="plantCode != null and plantCode != ''">plant_code = #{plantCode},</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="checkDate != null">check_date = #{checkDate},</if>
+            <if test="checkerId != null">checker_id = #{checkerId},</if>
+            <if test="cPerson != null">c_person = #{cPerson},</if>
+            <if test="cDevice != null">c_device = #{cDevice},</if>
+            <if test="cSafety != null">c_safety = #{cSafety},</if>
+            <if test="cEnv != null">c_env = #{cEnv},</if>
+            <if test="cGov != null">c_gov = #{cGov},</if>
+            <if test="cComplaint != null">c_complaint = #{cComplaint},</if>
+            <if test="cOpinion != null">c_opinion = #{cOpinion},</if>
+            <if test="cOther != null">c_other = #{cOther},</if>
+            <if test="explain != null">explain = #{explain},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <update id="deleteTSpecDailycheckById" parameterType="Long">
+        update t_spec_dailycheck set del_flag = 2 where id = #{id}
+    </update>
+
+    <update id="deleteTSpecDailycheckByIds" parameterType="String">
+        update t_spec_dailycheck set del_flag = 2 where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </update>
+
+</mapper>

+ 12 - 0
master/src/main/resources/mybatis/training/TTrainingrecordsMapper.xml

@@ -221,4 +221,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </foreach>
     </update>
 
+    <select id="queryNeedDeleteIds" resultType="String">
+        SELECT b.EMPLOYEEID from t_trainingrecords b where b.del_flag = 0
+            minus
+        SELECT a.STAFFID FROM "T_STAFFMGR" a where  a.del_flag = 0 and unit in (10,18,20,30)
+    </select>
+
+    <select id="queryNeedInsertIds" resultType="String">
+        SELECT a.STAFFID FROM "T_STAFFMGR" a where  a.del_flag = 0 and unit in (10,18,20,30)
+            minus
+        SELECT b.EMPLOYEEID from t_trainingrecords b where b.del_flag = 0
+    </select>
+
 </mapper>

+ 29 - 0
master/src/main/resources/mybatis/training/TWorkcertificateCbpsMapper.xml

@@ -267,6 +267,35 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </select>
 
 
+    <select id="selectDateNotNull" resultType="map">
+        SELECT
+            COUNT(CASE WHEN container_date IS NOT NULL THEN 1 END) AS container,
+            COUNT(CASE WHEN pipe_date IS NOT NULL THEN 1 END) AS pipe,
+            COUNT(CASE WHEN worker_date IS NOT NULL THEN 1 END) AS worker,
+            COUNT(CASE WHEN foreman_date IS NOT NULL THEN 1 END) AS foreman,
+            COUNT(CASE WHEN ac_date IS NOT NULL THEN 1 END) AS ac,
+            COUNT(CASE WHEN firefighter_date IS NOT NULL THEN 1 END) AS firefighter,
+            COUNT(CASE WHEN safety_date IS NOT NULL THEN 1 END) AS safety,
+            COUNT(CASE WHEN tds_date IS NOT NULL THEN 1 END) AS tds
+        FROM
+            t_workcertificate_cbps
+    </select>
+
+    <select id="selectDateWarn" resultType="map">
+        SELECT
+        COUNT(CASE WHEN container_date IS NOT NULL AND container_date <![CDATA[ <= ]]> sysdate + 30 THEN 1 END) AS container,
+        COUNT(CASE WHEN pipe_date IS NOT NULL AND pipe_date <![CDATA[ <= ]]> sysdate + 30 THEN 1 END) AS pipe,
+        COUNT(CASE WHEN worker_date IS NOT NULL AND worker_date <![CDATA[ <= ]]> sysdate + 30 THEN 1 END) AS worker,
+        COUNT(CASE WHEN foreman_date IS NOT NULL AND foreman_date <![CDATA[ <= ]]> sysdate + 30 THEN 1 END) AS foreman,
+        COUNT(CASE WHEN ac_date IS NOT NULL AND ac_date <![CDATA[ <= ]]> sysdate + 30 THEN 1 END) AS ac,
+        COUNT(CASE WHEN firefighter_date IS NOT NULL AND firefighter_date <![CDATA[ <= ]]> sysdate + 30 THEN 1 END) AS firefighter,
+        COUNT(CASE WHEN safety_date IS NOT NULL AND safety_date <![CDATA[ <= ]]> sysdate + 30 THEN 1 END) AS safety,
+        COUNT(CASE WHEN tds_date IS NOT NULL AND tds_date <![CDATA[ <= ]]> sysdate + 30 THEN 1 END) AS tds
+        FROM
+        t_workcertificate_cbps
+    </select>
+
+
 
 
 </mapper>

BIN
master/src/main/resources/static/word/sems/check/dailycheck.docx


+ 12 - 4
ui/src/api/common/homedataCbpb.js

@@ -3,28 +3,36 @@ import request from '@/utils/request'
 // 查询4个统计
 export function countNum() {
   return request({
-    url: '/byx/home/countNum',
+    url: '/cbps/home/countNum',
     method: 'get',
   })
 }
 // 查询装置程序清单统计
 export function procedureCount() {
   return request({
-    url: '/byx/home/procedureCount',
+    url: '/cbps/home/procedureCount',
     method: 'get',
   })
 }
 // 统计培训
 export function trainCount() {
   return request({
-    url: '/byx/home/trainCount',
+    url: '/cbps/home/trainCount',
     method: 'get',
   })
 }
 // 根据时间统计
 export function getLine() {
   return request({
-    url: '/byx/home/getLine',
+    url: '/cbps/home/getLine',
+    method: 'get',
+  })
+}
+
+// 根据时间统计
+export function getWorkcetificate() {
+  return request({
+    url: '/cbps/home/getWorkcetificate',
     method: 'get',
   })
 }

+ 61 - 0
ui/src/api/sems/safecheck/dailycheck.js

@@ -0,0 +1,61 @@
+import request from '@/utils/request'
+
+// 查询每日安全检查列表
+export function listDailycheck(query) {
+  return request({
+    url: '/safecheck/dailycheck/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询每日安全检查详细
+export function getDailycheck(id) {
+  return request({
+    url: '/safecheck/dailycheck/' + id,
+    method: 'get'
+  })
+}
+
+// 新增每日安全检查
+export function addDailycheck(data) {
+  return request({
+    url: '/safecheck/dailycheck',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改每日安全检查
+export function updateDailycheck(data) {
+  return request({
+    url: '/safecheck/dailycheck',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除每日安全检查
+export function delDailycheck(id) {
+  return request({
+    url: '/safecheck/dailycheck/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出每日安全检查
+export function exportDailycheck(query) {
+  return request({
+    url: '/safecheck/dailycheck/export',
+    method: 'get',
+    params: query
+  })
+}
+
+//获取word url
+export function wordView(id) {
+  return request({
+    url: '/safecheck/dailycheck/wordView/' + id,
+    method: 'get',
+  })
+}

+ 126 - 0
ui/src/views/dashboard/hcq/LineChart.vue

@@ -0,0 +1,126 @@
+<template>
+  <div :class="className" :style="{height:height,width:width}"/>
+</template>
+
+<script>
+import echarts from 'echarts'
+
+require('echarts/theme/macarons') // echarts theme
+import resize from '../mixins/resize'
+import {getLine} from "@/api/common/homedataCbpb";
+
+export default {
+  mixins: [resize],
+  props: {
+    className: {
+      type: String,
+      default: 'chart'
+    },
+    width: {
+      type: String,
+      default: '100%'
+    },
+    height: {
+      type: String,
+      default: '350px'
+    },
+    autoResize: {
+      type: Boolean,
+      default: true
+    },
+    chartData: {
+      type: Object,
+      required: true
+    }
+  },
+  data() {
+    return {
+      chart: null,
+      nextEdit: [],
+      nextReview: [],
+      monthList: [],
+    }
+  },
+  mounted() {
+    this.$nextTick(() => {
+      getLine().then(res => {
+        for (const item of res.data.nextEdit) {
+          this.monthList.push(item.dataMonth);
+          this.nextEdit.push(item.dataCount);
+        }
+        for (const item of res.data.nextReview) {
+          this.nextReview.push(item.dataCount);
+        }
+        this.initChart()
+      })
+    })
+  },
+  beforeDestroy() {
+    if (!this.chart) {
+      return
+    }
+    this.chart.dispose()
+    this.chart = null
+  },
+  methods: {
+    initChart() {
+      this.chart = echarts.init(this.$el, 'macarons')
+      this.chart.setOption(
+        {
+          xAxis: {
+            data: this.monthList,
+            axisTick: {
+              show: false
+            }
+          },
+          grid: {
+            left: 10,
+            right: 30,
+            bottom: 20,
+            top: 30,
+            containLabel: true
+          },
+          tooltip: {
+            trigger: 'axis',
+            axisPointer: {
+              type: 'shadow' // 修改为柱状图的显示方式
+            },
+          },
+          yAxis: {
+            axisTick: {
+              show: false
+            }
+          },
+          legend: {
+            data: ['下次修订日期', '下次回顾日期']
+          },
+          series: [
+            {
+              name: '下次修订日期',
+              type: 'bar', // 将类型修改为柱状图
+              barWidth: '20%', // 设置柱状图的宽度
+              itemStyle: {
+                normal: {
+                }
+              },
+              data: this.nextEdit // 确保数据适用于柱状图
+            },
+            {
+              name: '下次回顾日期',
+              type: 'bar', // 将类型修改为柱状图
+              barWidth: '20%', // 设置柱状图的宽度
+              itemStyle: {
+                normal: {
+                }
+              },
+              data: this.nextReview // 确保数据适用于柱状图
+            }
+          ]
+        }
+
+
+      )
+    }
+  }
+}
+</script>

+ 6 - 5
ui/src/views/dashboard/hcq/PanelGroup.vue

@@ -1,7 +1,7 @@
 <template>
   <el-row :gutter="40" class="panel-group">
     <el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
-      <div class="card-panel" @click="handleSetLineChartData('newVisitis')">
+      <div class="card-panel" @click="handleSetLineChartData('/ehs/approval/safetyapproval')">
         <div class="card-panel-icon-wrapper icon-people">
           <svg-icon icon-class="anquan" class-name="card-panel-icon"/>
         </div>
@@ -16,7 +16,7 @@
       </div>
     </el-col>
     <el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
-      <div class="card-panel" @click="handleSetLineChartData('messages')">
+      <div class="card-panel" @click="handleSetLineChartData('/ehs/approval/environapproval')">
         <div class="card-panel-icon-wrapper icon-message">
           <svg-icon icon-class="huanbao" class-name="card-panel-icon"/>
         </div>
@@ -31,7 +31,7 @@
       </div>
     </el-col>
     <el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
-      <div class="card-panel" @click="handleSetLineChartData('purchases')">
+      <div class="card-panel" @click="handleSetLineChartData('/ehs/approval/fireapproval')">
         <div class="card-panel-icon-wrapper icon-money">
           <svg-icon icon-class="xiaofang" class-name="card-panel-icon"/>
         </div>
@@ -46,7 +46,7 @@
       </div>
     </el-col>
     <el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
-      <div class="card-panel" @click="handleSetLineChartData('shoppings')">
+      <div class="card-panel" @click="handleSetLineChartData('/ehs/approval/healthapproval')">
         <div class="card-panel-icon-wrapper icon-shopping">
           <svg-icon icon-class="weisheng" class-name="card-panel-icon"/>
         </div>
@@ -98,7 +98,8 @@ export default {
   },
   methods: {
     handleSetLineChartData(type) {
-      this.$emit('handleSetLineChartData', type)
+      this.$router.push(type);
+
     }
   }
 }

+ 4 - 5
ui/src/views/dashboard/hcq/PieChart.vue

@@ -61,17 +61,16 @@ export default {
         legend: {
           left: 'center',
           bottom: '10',
-          data:this.trainingType
+          data:['已完成','未完成']
         },
         series: [
           {
-            name: '',
+            name: '已完成',
+            selectedMode: 'single',
             type: 'pie',
-            roseType: 'radius',
             radius: ['10%', '55%'],
             center: ['50%', '38%'],
-            data: this.trainData,
-            animationEasing: 'cubicInOut',
+            data: [{name: '已完成',value: 1} , {name: '未完成',value: 6}],
             animationDuration: 2600
           }
         ]

+ 135 - 0
ui/src/views/dashboard/hcq/workcertificateChart.vue

@@ -0,0 +1,135 @@
+<template>
+  <div :class="className" :style="{height:height,width:width}"/>
+</template>
+
+<script>
+import echarts from 'echarts'
+
+require('echarts/theme/macarons') // echarts theme
+import resize from '../mixins/resize'
+import {getWorkcetificate} from "@/api/common/homedataCbpb";
+
+export default {
+  mixins: [resize],
+  props: {
+    className: {
+      type: String,
+      default: 'chart'
+    },
+    width: {
+      type: String,
+      default: '100%'
+    },
+    height: {
+      type: String,
+      default: '350px'
+    },
+    autoResize: {
+      type: Boolean,
+      default: true
+    },
+    chartData: {
+      type: Object,
+      required: true
+    }
+  },
+  data() {
+    return {
+      chart: null,
+      nextEdit: [],
+      nextReview: [],
+      monthList: [],
+    }
+  },
+  mounted() {
+    this.$nextTick(() => {
+      getWorkcetificate().then(res => {
+          let CERALL = res.data.cerAll;
+          this.nextEdit= [CERALL.CONTAINER ,CERALL.PIPE ,CERALL.WORKER ,CERALL.FOREMAN ,CERALL.AC ,CERALL.FIREFIGHTER ,CERALL.SAFETY ,CERALL.TDS]
+        let CERWARN = res.data.cerWarn;
+          this.nextReview= [CERWARN.CONTAINER ,CERWARN.PIPE ,CERWARN.WORKER ,CERWARN.FOREMAN ,CERWARN.AC ,CERWARN.FIREFIGHTER ,CERWARN.SAFETY ,CERWARN.TDS]
+        this.initChart()
+      })
+    })
+  },
+  beforeDestroy() {
+    if (!this.chart) {
+      return
+    }
+    this.chart.dispose()
+    this.chart = null
+  },
+  methods: {
+    initChart() {
+      this.chart = echarts.init(this.$el, 'macarons')
+      this.chart.setOption(
+        {
+          xAxis: {
+            data: [
+              '压力容器',
+              '压力管道',
+              '技术工人\n上岗证',
+              '班组长安全\n培训',
+              '制冷与空调',
+              '建筑物消防员\n职业资格证',
+              '专职安全\n管理人员',
+              'TDS'
+            ],
+            axisTick: {
+              show: true
+            }
+          },
+          grid: {
+            left: 10,
+            right: 30,
+            bottom: 20,
+            top: 30,
+            containLabel: true
+          },
+          tooltip: {
+            trigger: 'axis',
+            axisPointer: {
+              type: 'shadow' // 修改为柱状图的显示方式
+            },
+          },
+          yAxis: {
+            axisTick: {
+              show: false
+            },
+            interval: 1 // 设置纵轴的单位间隔为1
+          },
+          legend: {
+            data: ['总数', '预警数']
+          },
+          series: [
+            {
+              name: '总数',
+              type: 'bar', // 将类型修改为柱状图
+              barWidth: '20%', // 设置柱状图的宽度
+              itemStyle: {
+                normal: {
+                  color: '#60c6fc' // 设置第二个序列为红色
+                }
+              },
+              data: this.nextEdit // 确保数据适用于柱状图
+            },
+            {
+              name: '预警数',
+              type: 'bar', // 将类型修改为柱状图
+              barWidth: '20%', // 设置柱状图的宽度
+              itemStyle: {
+                normal: {
+                  color: '#fd806e' // 设置第二个序列为红色
+                }
+              },
+              data: this.nextReview // 确保数据适用于柱状图
+            }
+          ]
+        }
+
+
+      )
+    }
+  }
+}
+</script>

+ 30 - 11
ui/src/views/hcqhome.vue

@@ -7,7 +7,7 @@
       <el-col :xs="24" :sm="24" :lg="8">
         <div>
           <div class="card-head">
-            <span class="card-name">{{ $t('程序状态') }}</span>
+            <span class="card-name">{{ $t('程序数量') }}</span>
           </div>
         </div>
         <div class="chart-wrapper">
@@ -17,7 +17,7 @@
       <el-col :xs="24" :sm="24" :lg="8">
         <div>
           <div class="card-head">
-            <span class="card-name">{{ $t('培训状态') }}</span>
+            <span class="card-name">{{ $t('培训完成情况') }}</span>
           </div>
         </div>
         <div class="chart-wrapper">
@@ -32,18 +32,37 @@
       <el-col :xs="24" :sm="24" :lg="8">
         <div>
           <div class="card-head">
-            <span class="card-name">{{ $t('新员工培训') }}</span>
+            <span class="card-name">{{ $t('新员工培训完成率') }}</span>
           </div>
         </div>
         <div class="chart-wrapper">
-          <brith-chart />
+          <birth-chart />
         </div>
       </el-col>
     </el-row>
 
-
     <el-row style="background:#fff;padding:16px 16px 0;margin-bottom:32px;">
-      <line-chart :chart-data="lineChartData" />
+      <el-col :xs="24" :sm="24" :lg="10">
+        <div>
+          <div class="card-head">
+            <span class="card-name">程序清单到期提醒</span>
+          </div>
+        </div>
+        <div class="chart-wrapper">
+          <line-chart :chart-data="lineChartData" />
+        </div>
+      </el-col>
+      <el-col :xs="24" :sm="24" :lg="14">
+        <div>
+          <div class="card-head">
+            <span class="card-name">员工证书统计</span>
+          </div>
+        </div>
+        <div class="chart-wrapper">
+          <workcertificate-chart :chart-data="lineChartData" />
+        </div>
+      </el-col>
+
     </el-row>
 
   </div>
@@ -51,11 +70,11 @@
 
 <script>
 import PanelGroup from './dashboard/hcq/PanelGroup'
-import LineChart from './dashboard/LineChart'
+import LineChart from './dashboard/hcq/LineChart'
 import RaddarChart from './dashboard/hcq/RaddarChart'
 import PieChart from './dashboard/hcq/PieChart'
-import BarChart from './dashboard/BarChart'
-import BrithChart from "./dashboard/hcq/BrithChart";
+import WorkcertificateChart from "./dashboard/hcq/workcertificateChart";
+import BirthChart from './dashboard/hcq/BrithChart'
 
 const lineChartData = {
   newVisitis: {
@@ -79,12 +98,12 @@ const lineChartData = {
 export default {
   name: 'Index',
   components: {
+    WorkcertificateChart,
     PanelGroup,
     LineChart,
     RaddarChart,
     PieChart,
-    BarChart,
-    BrithChart
+    BirthChart
   },
   data() {
     return {

+ 1 - 1
ui/src/views/production/day/index.vue

@@ -75,7 +75,7 @@
       </el-col>
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
-<!--    <iframe src="https://bbs.hupu.com/all-gambia" width="800" height="600" frameborder="0"></iframe>-->
+<!--    <iframe src="http://47.114.101.16:8080/cpms/index.html#/production/sai/apply" width="800" height="600" frameborder="0"></iframe>-->
 
     <el-table v-loading="loading" :data="dayList" @selection-change="handleSelectionChange" :height="clientHeight" border>
       <el-table-column type="selection" width="55" align="center" />

+ 721 - 0
ui/src/views/sems/safecheck/dailycheck/index.vue

@@ -0,0 +1,721 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="装置名称" prop="plantCode">
+        <el-input
+          v-model="queryParams.plantCode"
+          placeholder="请输入装置名称"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="检查日期" prop="checkDate">
+        <el-date-picker clearable size="small" style="width: 200px"
+          v-model="queryParams.checkDate"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="选择检查日期">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="人员" prop="cPerson">
+        <el-select v-model="queryParams.cPerson" placeholder="请选择人员" clearable size="small">
+          <el-option label="请选择字典生成" value="" />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="设备本体" prop="cDevice">
+        <el-select v-model="queryParams.cDevice" placeholder="请选择设备本体" clearable size="small">
+          <el-option label="√" value="√" />
+          <el-option label="×" value="×" />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="安全附件" prop="cSafety">
+        <el-select v-model="queryParams.cSafety" placeholder="请选择安全附件" clearable size="small">
+          <el-option label="请选择字典生成" value="" />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="环境" prop="cEnv">
+        <el-select v-model="queryParams.cEnv" placeholder="请选择环境" clearable size="small">
+          <el-option label="请选择字典生成" value="" />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="政府" prop="cGov">
+        <el-select v-model="queryParams.cGov" placeholder="请选择政府" clearable size="small">
+          <el-option label="请选择字典生成" value="" />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="投诉举报" prop="cComplaint">
+        <el-select v-model="queryParams.cComplaint" placeholder="请选择投诉举报" clearable size="small">
+          <el-option label="请选择字典生成" value="" />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="舆情信息" prop="cOpinion">
+        <el-select v-model="queryParams.cOpinion" placeholder="请选择舆情信息" clearable size="small">
+          <el-option label="请选择字典生成" value="" />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="其他" prop="cOther">
+        <el-select v-model="queryParams.cOther" placeholder="请选择其他" clearable size="small">
+          <el-option label="请选择字典生成" value="" />
+        </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="['safecheck:dailycheck: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="['safecheck:dailycheck: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="['safecheck:dailycheck:remove']"
+        >删除</el-button>
+      </el-col>
+        <el-col :span="1.5">
+            <el-button
+                    type="info"
+                    icon="el-icon-upload2"
+                    size="mini"
+                    @click="handleImport"
+                    v-hasPermi="['safecheck:dailycheck:edit']"
+            >导入</el-button>
+        </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['safecheck:dailycheck:export']"
+        >导出</el-button>
+      </el-col>
+	  <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="dailycheckList" @selection-change="handleSelectionChange" :height="clientHeight" border>
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="装置名称" align="center" prop="plantCode" :show-overflow-tooltip="true"/>
+      <el-table-column label="检查日期" align="center" prop="checkDate" width="100">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.checkDate, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="安全员" align="center" prop="checkerName" :show-overflow-tooltip="true"/>
+      <el-table-column label="人员" align="center" prop="cPerson" :show-overflow-tooltip="true"/>
+      <el-table-column label="设备本体" align="center" prop="cDevice" :show-overflow-tooltip="true"/>
+      <el-table-column label="安全附件" align="center" prop="cSafety" :show-overflow-tooltip="true"/>
+      <el-table-column label="环境" align="center" prop="cEnv" :show-overflow-tooltip="true"/>
+      <el-table-column label="政府" align="center" prop="cGov" :show-overflow-tooltip="true"/>
+      <el-table-column label="投诉举报" align="center" prop="cComplaint" :show-overflow-tooltip="true"/>
+      <el-table-column label="舆情信息" align="center" prop="cOpinion" :show-overflow-tooltip="true"/>
+      <el-table-column label="其他" align="center" prop="cOther" :show-overflow-tooltip="true"/>
+      <el-table-column label="说明" align="center" prop="explain" :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="['safecheck:dailycheck:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['safecheck:dailycheck:remove']"
+          >删除</el-button>
+          <el-button
+                     size="mini"
+                     type="text"
+                     icon="el-icon-document"
+                     @click="wordView(scope.row)"
+          >预览
+          </el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改每日安全检查对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="900px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item :label="$t('装置')" prop="plantCode">
+          <el-select v-model="form.plantCode" :placeholder="$t('请选择')+ $t('装置')" filterable clearable size="small"
+                     >
+            <el-option
+              v-for="dict in plantOptions"
+              :key="dict.name"
+              :label="dict.name"
+              :value="dict.name"
+            />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="检查日期" prop="checkDate">
+          <el-date-picker clearable size="small" style="width: 200px"
+                          v-model="form.checkDate"
+                          type="date"
+                          value-format="yyyy-MM-dd"
+                          placeholder="选择检查日期">
+          </el-date-picker>
+        </el-form-item>
+        <div class="checklist-table">
+        <table cellpadding="10" cellspacing="0" border="1" style="width:100%">
+          <tr>
+            <th>序号</th>
+            <th>检查项目</th>
+            <th>检查内容</th>
+            <th>检查结果</th>
+          </tr>
+          <tr>
+            <td>1</td>
+            <td>人员</td>
+            <td>按检查项目细化,如:人员配备、违章作业、安全教育等</td>
+            <td >
+              <el-radio-group v-model="form.cPerson">
+                <el-radio label="√">√</el-radio>
+                <el-radio label="×">X</el-radio>
+              </el-radio-group>
+            </td>
+          </tr>
+          <tr>
+            <td>2</td>
+            <td>设备本体</td>
+            <td>设备定期检验、自行检查、设备本体、安全附件、安全保护装置、有无事故隐患等</td>
+            <td style="width: 150px;">
+              <div class="radio-group-horizontal">
+              <el-radio-group v-model="form.cDevice">
+                <el-radio label="√">√</el-radio>
+                <el-radio label="×">X</el-radio>
+              </el-radio-group>
+              </div>
+            </td>
+          </tr>
+          <tr>
+            <td>3</td>
+            <td>安全附件或安全保护装置</td>
+            <td>安全阀、爆破片、紧急切断阀、压力表、液位计、壁温测试仪表、阻火器等</td>
+            <td>
+              <el-radio-group v-model="form.cSafety">
+                <el-radio label="√">√</el-radio>
+                <el-radio label="×">X</el-radio>
+              </el-radio-group>
+            </td>
+          </tr>
+          <tr>
+            <td>4</td>
+            <td>环境</td>
+            <td>安全通道、照明、防火、防雷、防风、防雨、防冻、防腐设施以及警示标志、排放口、的设置等</td>
+            <td>
+              <el-radio-group v-model="form.cEnv">
+                <el-radio label="√">√</el-radio>
+                <el-radio label="×">X</el-radio>
+              </el-radio-group>
+            </td>
+          </tr>
+          <tr>
+            <td>5</td>
+            <td>政府监督、通报、预警</td>
+            <td>发现不合格项</td>
+            <td>
+              <el-radio-group v-model="form.cGov">
+                <el-radio label="√">√</el-radio>
+                <el-radio label="×">X</el-radio>
+              </el-radio-group>
+            </td>
+          </tr>
+          <tr>
+            <td>6</td>
+            <td>投诉举报</td>
+            <td>发现不合格项</td>
+            <td>
+              <el-radio-group v-model="form.cComplaint">
+                <el-radio label="√">√</el-radio>
+                <el-radio label="×">X</el-radio>
+              </el-radio-group>
+            </td>
+          </tr>
+          <tr>
+            <td>7</td>
+            <td>舆情信息</td>
+            <td>发现不合格项</td>
+            <td>
+              <el-radio-group v-model="form.cOpinion">
+                <el-radio label="√">√</el-radio>
+                <el-radio label="×">X</el-radio>
+              </el-radio-group>
+            </td>
+          </tr>
+          <tr>
+            <td>8</td>
+            <td>其它</td>
+            <td>锅炉、压力容器、压力管道、电梯、起重机械场车六大类特种设备可能危及安全的其它情况</td>
+            <td>
+              <el-radio-group v-model="form.cOther">
+                <el-radio label="√">√</el-radio>
+                <el-radio label="×">X</el-radio>
+              </el-radio-group>
+            </td>
+          </tr>
+          <tr>
+<!--            <td colspan="4">-->
+<!--              不合格情况说明及采取的防范措施:-->
+<!--              <el-form-item label="不合格情况说明及采取的防范措施:" prop="explain">-->
+<!--                <el-input v-model="form.explain" type="textarea" placeholder="请输入内容" />-->
+<!--              </el-form-item>-->
+<!--            </td>-->
+          </tr>
+        </table>
+        </div>
+        <el-form-item label="不合格情况说明及采取的防范措施" prop="explain">
+          <el-input v-model="form.explain" :rows="5" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+      <!-- 用户导入对话框 -->
+      <el-dialog :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>
+    <el-dialog  :close-on-click-modal="false" v-loading="loadingFlash" element-loading-background="rgba(0,0,0,0.2)" v-dialogDrag :title="pdf.title"
+                :visible.sync="pdf.open" width="1300px" :center="true" append-to-body>
+      <div style="margin-top: -60px;float: right;margin-right: 40px;">
+        <el-button size="mini" type="text" @click="openPdf">{{ $t('新页面打开PDF') }}</el-button>
+      </div>
+      <div style="margin-top: -30px">
+        <iframe id="iFrame" class="iframe-html" :src="pdf.pdfUrl" frameborder="0" width="100%" height="700px"
+                v-if="ppt"></iframe>
+      </div>
+      <div style="padding: 30px; width: 100%; height: 100%;">
+        <el-carousel class="" ref="carousel" arrow="always" v-if="pptView"
+                     height="700px" trigger="click" :autoplay="false" indicator-position="outside">
+          <el-carousel-item class="lun_img" v-for="item in imgs" v-bind:key="item">
+            <img :src="item" width="100%" height="100%" object-fit="cover"/>
+          </el-carousel-item>
+        </el-carousel>
+      </div>
+    </el-dialog>
+
+  </div>
+</template>
+
+<script>
+import {wordView, listDailycheck, getDailycheck, delDailycheck, addDailycheck, updateDailycheck, exportDailycheck, importTemplate} from "@/api/sems/safecheck/dailycheck";
+import { treeselect } from "@/api/system/dept";
+import { getToken } from "@/utils/auth";
+import Treeselect from "@riophae/vue-treeselect";
+import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+import {mylistPlant} from "@/api/system/plant";
+
+export default {
+  name: "Dailycheck",
+  components: { Treeselect },
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: false,
+      // 总条数
+      total: 0,
+      // 每日安全检查表格数据
+      dailycheckList: [],
+      // 弹出层标题
+      title: "",
+      pptView: false,
+      ppt: false,
+      loadingFlash: false,
+      // 部门树选项
+      deptOptions: undefined,
+      plantOptions: [],
+      clientHeight:300,
+      // 是否显示弹出层
+      open: false,
+        // 用户导入参数
+        upload: {
+            // 是否显示弹出层(用户导入)
+            open: false,
+            // 弹出层标题(用户导入)
+            title: "",
+            // 是否禁用上传
+            isUploading: false,
+            // 是否更新已经存在的用户数据
+            updateSupport: 0,
+            // 设置上传的请求头部
+            headers: { Authorization: "Bearer " + getToken() },
+            // 上传的地址
+            url: process.env.VUE_APP_BASE_API + "/safecheck/dailycheck/importData"
+        },
+      pdf: {
+        title: '',
+        pdfUrl: '',
+        numPages: null,
+        open: false,
+        pageNum: 1,
+        pageTotalNum: 1,
+        loadedRatio: 0,
+      },
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 20,
+        plantCode: null,
+        checkDate: null,
+        cPerson: null,
+        cDevice: null,
+        cSafety: null,
+        cEnv: null,
+        cGov: null,
+        cComplaint: null,
+        cOpinion: null,
+        cOther: null,
+        explain: null
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        plantCode: [
+          { required: true, message: "装置名称不能为空", trigger: "blur" }
+        ],
+      }
+    };
+  },
+  watch: {
+        // 根据名称筛选部门树
+        deptName(val) {
+            this.$refs.tree.filter(val);
+        }
+   },
+  created() {
+      //设置表格高度对应屏幕高度
+      this.$nextTick(() => {
+          this.clientHeight = document.body.clientHeight -250
+      })
+    this.getList();
+    this.getTreeselect();
+    let plantParams = {
+      pType: 1
+    }
+    mylistPlant(plantParams).then(response => {
+      this.plantOptions = response.data;
+    });
+  },
+  methods: {
+    /** 查询每日安全检查列表 */
+    getList() {
+      this.loading = true;
+      listDailycheck(this.queryParams).then(response => {
+        this.dailycheckList = 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.form = {
+        id: null,
+        plantCode: null,
+        delFlag: null,
+        createrCode: null,
+        createdate: null,
+        updaterCode: null,
+        updatedate: null,
+        checkDate: null,
+        checkerId: null,
+        cPerson: "0",
+        cDevice: "0",
+        cSafety: "0",
+        cEnv: "0",
+        cGov: "0",
+        cComplaint: "0",
+        cOpinion: "0",
+        cOther: "0",
+        explain: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加每日安全检查";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getDailycheck(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改每日安全检查";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateDailycheck(this.form).then(response => {
+              this.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addDailycheck(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 delDailycheck(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        })
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      const queryParams = this.queryParams;
+      this.$confirm('是否确认导出所有每日安全检查数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return exportDailycheck(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();
+      },
+      wordView(row) {
+        wordView(row.id).then(response => {
+          console.log(response.msg)
+          this.handleSee("每日检查记录", response.msg)
+        });
+      },
+    handleSee(fileName, url) {
+      //office预览
+      this.loadingFlash = true
+      this.pdf.open = true
+      this.pdf.title = fileName
+      this.pdf.pdfUrl = ""
+      this.pptView = false
+      this.ppt = true
+      //如果是PDF等直接可以打开的就不调接口,否则调用接口
+      if (fileName.endsWith('pdf')) {
+        this.pdf.pdfUrl = process.env.VUE_APP_BASE_API + '/pdf/web/viewer.html?file=' + process.env.VUE_APP_BASE_API + url
+        this.loadingFlash = false
+      } else {
+        const formatDate = new FormData();
+        formatDate.append("filepath", url)
+        //调用文件预览api
+        let res = this.officeConvert.bookConvertCommon(formatDate)
+        //查看接受全局方法的返回结果 console.log(res)
+        //利用.then方法接受Promise对象
+        res.then((result) => {
+          //关闭加载中
+          this.loadingFlash = false
+          if (result.msg.includes("csv")) {
+            this.pdf.pdfUrl = process.env.VUE_APP_BASE_API + result.data
+            this.$alert(result.msg, this.$t('检查乱码'), {dangerouslyUseHTMLString: true});
+            //    this.$message({message: result.msg, center: true,type:'warning',  offset:400, });
+          } else if (result.msg.includes("不存在")) {
+            //文件不存在时提示
+            this.pdf.pdfUrl = ""
+            this.$alert(result.msg, this.$t('预览失败'), {dangerouslyUseHTMLString: true});
+            //    this.$message({message: result.msg, center: true,type:'warning',  offset:400, });
+            this.pdf.open = false
+          } else if (result.msg.includes("不支持此格式")) {
+            this.pdf.pdfUrl = ""
+            this.$alert(result.msg, this.$t('预览失败'), {dangerouslyUseHTMLString: true});
+            //    this.$message({message: result.msg, center: true,type:'warning',  offset:400, });
+            this.pdf.open = false
+          } else {
+            //成功时直接给地址
+            this.pdf.pdfUrl = process.env.VUE_APP_BASE_API + result.data
+          }
+        }).catch(result => {
+          //请求失败,关闭loading,pdf地址直接为为空,不显示
+          this.pdf.pdfUrl = ""
+          this.loadingFlash = false;
+        })
+      }
+    },
+    //文件预览
+    openPdf() {
+      //ppt就跳路由预览,office就直接打开文件新页面
+      const didi = {imgs: this.imgs}
+      if (this.pptView == true && this.ppt == false) {
+        let routeUrl = this.$router.resolve({
+          path: "/cpms/index.html#/pptyulan",
+          query: didi
+        });
+        window.open("/cpms/index.html#/pptyulan?id=" + this.pdf.pdfUrl, '_blank')
+        console.log(this.imgs)
+      } else {
+        window.open(this.pdf.pdfUrl)
+      }
+    },
+  }
+};
+</script>
+<style scoped>
+
+.checklist-table {
+  margin-top: 20px;
+  margin-bottom: 20px;
+}
+
+.checklist-table table {
+  width: 100%;
+  border-collapse: collapse;
+}
+
+.checklist-table th,
+.checklist-table td {
+  padding: 10px;
+  border: 1px solid #ccc;
+  text-align: center;
+}
+
+.checklist-table th {
+  background-color: #f5f5f5;
+}
+.radio-group-horizontal {
+  display: flex;
+  justify-content: space-around;
+  align-items: center;
+}
+</style>

+ 3 - 0
ui/src/views/sems/safecheck/index.vue

@@ -0,0 +1,3 @@
+<template >
+  <router-view />
+</template>

+ 10 - 0
ui/src/views/sems/specCc/index.vue

@@ -1,6 +1,15 @@
 <template>
   <div class="app-container">
     <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item :label="$t('关键字')" prop="searchValue" label-width="50">
+        <el-input
+          v-model="queryParams.searchValue"
+          :placeholder="$t('请输入') + $t('关键字')"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
       <el-form-item :label="$t('装置')" prop="plantCode" label-width="50">
         <el-input
           v-model="queryParams.plantCode"
@@ -665,6 +674,7 @@ export default {
       },
       // 查询参数
       queryParams: {
+        searchValue: null,
         pageNum: 1,
         pageSize: 20,
         orderByColumn: null,

+ 10 - 0
ui/src/views/sems/specDt/index.vue

@@ -1,6 +1,15 @@
 <template>
   <div class="app-container">
     <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item :label="$t('关键字')" prop="searchValue" label-width="50">
+        <el-input
+          v-model="queryParams.searchValue"
+          :placeholder="$t('请输入') + $t('关键字')"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
       <el-form-item :label="$t('装置')" prop="plantCode" label-width="50">
         <el-input
           v-model="queryParams.plantCode"
@@ -616,6 +625,7 @@ export default {
       },
       // 查询参数
       queryParams: {
+        searchValue: null,
         pageNum: 1,
         pageSize: 20,
         orderByColumn: null,

+ 10 - 0
ui/src/views/sems/specDzsb/index.vue

@@ -1,6 +1,15 @@
 <template>
   <div class="app-container">
     <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item :label="$t('关键字')" prop="searchValue" label-width="50">
+        <el-input
+          v-model="queryParams.searchValue"
+          :placeholder="$t('请输入') + $t('关键字')"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
       <el-form-item :label="$t('装置')" prop="plantCode">
         <el-input
           v-model="queryParams.plantCode"
@@ -636,6 +645,7 @@ export default {
       },
       // 查询参数
       queryParams: {
+        searchValue: null,
         pageNum: 1,
         pageSize: 20,
         orderByColumn: null,

+ 10 - 0
ui/src/views/sems/specGl/index.vue

@@ -1,6 +1,15 @@
 <template>
   <div class="app-container">
     <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item :label="$t('关键字')" prop="searchValue" label-width="50">
+        <el-input
+          v-model="queryParams.searchValue"
+          :placeholder="$t('请输入') + $t('关键字')"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
       <el-form-item :label="$t('装置名称')" prop="plantCode">
         <el-input
           v-model="queryParams.plantCode"
@@ -711,6 +720,7 @@ export default {
       },
       // 查询参数
       queryParams: {
+        searchValue: null,
         pageNum: 1,
         pageSize: 20,
         orderByColumn: null,

+ 10 - 0
ui/src/views/sems/specYlgd/index.vue

@@ -1,6 +1,15 @@
 <template>
   <div class="app-container">
     <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item :label="$t('关键字')" prop="searchValue" label-width="50">
+        <el-input
+          v-model="queryParams.searchValue"
+          :placeholder="$t('请输入') + $t('关键字')"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
       <el-form-item :label="$t('装置')" prop="plantCode">
         <el-input
           v-model="queryParams.plantCode"
@@ -843,6 +852,7 @@ export default {
       },
       // 查询参数
       queryParams: {
+        searchValue: null,
         dataForm: 0,
         pageNum: 1,
         orderByColumn: null,

+ 10 - 0
ui/src/views/sems/specYlrq/index.vue

@@ -1,6 +1,15 @@
 <template>
   <div class="app-container">
     <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item :label="$t('关键字')" prop="searchValue" label-width="50">
+        <el-input
+          v-model="queryParams.searchValue"
+          :placeholder="$t('请输入') + $t('关键字')"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
       <el-form-item :label="$t('装置名称')" prop="plantCode">
         <el-input
           v-model="queryParams.plantCode"
@@ -775,6 +784,7 @@ export default {
       },
       // 查询参数
       queryParams: {
+        searchValue: null,
         pageNum: 1,
         pageSize: 20,
         orderByColumn: null,

+ 1 - 1
ui/src/views/training/newstaff/tnNew/index.vue

@@ -158,7 +158,7 @@
         </template>
       </el-table-column>
       <el-table-column label="备注" align="center" prop="remarks" :show-overflow-tooltip="true" width="100"/>
-      <el-table-column label="操作" align="center" fixed="right" width="120" class-name="small-padding fixed-width">
+      <el-table-column label="操作" align="center" fixed="right"  class-name="small-padding fixed-width">
         <template slot-scope="scope">
           <el-button
             size="mini"