Browse Source

LY 特种设备 每週檢查

ly 1 year ago
parent
commit
a7df89355c
42 changed files with 932 additions and 272 deletions
  1. 47 0
      master/src/main/java/com/ruoyi/common/utils/file/FileUploadUtils.java
  2. 3 2
      master/src/main/java/com/ruoyi/framework/config/SecurityConfig.java
  3. 10 2
      master/src/main/java/com/ruoyi/project/listener/semsWeekCheck/WeekcheckEndFailListener.java
  4. 2 0
      master/src/main/java/com/ruoyi/project/listener/semsWeekCheck/WeekcheckEndSuccessListener.java
  5. 31 0
      master/src/main/java/com/ruoyi/project/officeConvert/OfficeConvertController.java
  6. 30 1
      master/src/main/java/com/ruoyi/project/sems/safecheck/controller/TSpecDailycheckController.java
  7. 37 1
      master/src/main/java/com/ruoyi/project/sems/safecheck/controller/TSpecPersonweekcheckController.java
  8. 81 17
      master/src/main/java/com/ruoyi/project/sems/safecheck/controller/TSpecWeekcheckController.java
  9. 24 0
      master/src/main/java/com/ruoyi/project/sems/safecheck/domain/TSpecDailycheck.java
  10. 24 0
      master/src/main/java/com/ruoyi/project/sems/safecheck/domain/TSpecPersonweekcheck.java
  11. 29 5
      master/src/main/java/com/ruoyi/project/sems/safecheck/domain/TSpecWeekcheck.java
  12. 3 0
      master/src/main/java/com/ruoyi/project/sems/safecheck/mapper/TSpecPersonweekcheckMapper.java
  13. 3 4
      master/src/main/java/com/ruoyi/project/system/controller/SysUserController.java
  14. 4 1
      master/src/main/resources/mybatis/sems/safecheck/TSpecDailycheckMapper.xml
  15. 14 2
      master/src/main/resources/mybatis/sems/safecheck/TSpecPersonweekcheckMapper.xml
  16. 8 1
      master/src/main/resources/mybatis/sems/safecheck/TSpecWeekcheckMapper.xml
  17. 1 1
      master/src/main/resources/mybatis/training/newstaff/TTnFirstplanMapper.xml
  18. 1 0
      master/src/main/resources/mybatis/training/newstaff/TTnFirstplanTmplMapper.xml
  19. 3 3
      master/src/main/resources/mybatis/training/newstaff/TTnNewMapper.xml
  20. 1 1
      master/src/main/resources/mybatis/training/newstaff/TTnSchoolplanMapper.xml
  21. 1 0
      master/src/main/resources/mybatis/training/newstaff/TTnSchoolplanTmplMapper.xml
  22. 1 0
      master/src/main/resources/mybatis/training/newstaff/TTnTransferplanMapper.xml
  23. 1 0
      master/src/main/resources/mybatis/training/newstaff/TTnTransferplanTmplMapper.xml
  24. BIN
      master/src/main/resources/static/word/sems/check/weekcheck.docx
  25. 3 1
      ui/src/api/sems/safecheck/personweekcheck.js
  26. 1 1
      ui/src/api/sems/safecheck/weekcheck.js
  27. 8 0
      ui/src/api/system/user.js
  28. 0 1
      ui/src/assets/styles/index.scss
  29. 11 0
      ui/src/assets/styles/ruoyi.scss
  30. 5 1
      ui/src/views/approve/approveDetail/semsWeekCheck-detail.vue
  31. 5 1
      ui/src/views/dashboard/hcq/BrithChart.vue
  32. 2 2
      ui/src/views/dashboard/hcq/PanelGroup.vue
  33. 26 8
      ui/src/views/dashboard/hcq/PieChart.vue
  34. 4 1
      ui/src/views/hcqhome.vue
  35. 91 78
      ui/src/views/sems/safecheck/dailycheck/index.vue
  36. 101 57
      ui/src/views/sems/safecheck/personweekcheck/index.vue
  37. 125 38
      ui/src/views/sems/safecheck/weekcheck/index.vue
  38. 4 1
      ui/src/views/system/user/index.vue
  39. 23 13
      ui/src/views/system/user/profile/userInfo.vue
  40. 149 0
      ui/src/views/system/user/profile/userSign.vue
  41. 9 2
      ui/src/views/training/trainingrecords/index.vue
  42. 6 26
      ui/src/views/training/workcertificateCbps/index.vue

+ 47 - 0
master/src/main/java/com/ruoyi/common/utils/file/FileUploadUtils.java

@@ -84,6 +84,26 @@ public class FileUploadUtils
         }
     }
 
+    /**
+     * 根据文件路径上传
+     *
+     * @param baseDir 相对应用的基目录
+     * @param file 上传的文件
+     * @return 文件名称
+     * @throws IOException
+     */
+    public static final String uploadAndChangeName(String baseDir, MultipartFile file , String newName) throws IOException
+    {
+        try
+        {
+            return upload(baseDir, file,newName, MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION);
+        }
+        catch (Exception e)
+        {
+            throw new IOException(e.getMessage(), e);
+        }
+    }
+
     /**
      * 文件上传
      *
@@ -114,6 +134,33 @@ public class FileUploadUtils
         return pathFileName;
     }
 
+    /**
+     * 文件上传
+     *
+     * @param baseDir 相对应用的基目录
+     * @param file 上传的文件
+     * @return 返回上传成功的文件名
+     * @throws FileSizeLimitExceededException 如果超出最大大小
+     * @throws FileNameLengthLimitExceededException 文件名太长
+     * @throws IOException 比如读写文件出错时
+     * @throws InvalidExtensionException 文件校验异常
+     */
+    public static final String upload(String baseDir, MultipartFile file,String newName, String[] allowedExtension)
+            throws FileSizeLimitExceededException, IOException, FileNameLengthLimitExceededException,
+            InvalidExtensionException
+    {
+        int fileNamelength = file.getOriginalFilename().length();
+        if (fileNamelength > FileUploadUtils.DEFAULT_FILE_NAME_LENGTH)
+        {
+            throw new FileNameLengthLimitExceededException(FileUploadUtils.DEFAULT_FILE_NAME_LENGTH);
+        }
+
+        assertAllowed(file, allowedExtension);
+        File desc = getAbsoluteFile(baseDir, newName);
+        file.transferTo(desc);
+        String pathFileName = getPathFileName(baseDir, newName);
+        return pathFileName;
+    }
     /**
      * 编码文件名
      */

+ 3 - 2
master/src/main/java/com/ruoyi/framework/config/SecurityConfig.java

@@ -129,8 +129,9 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
                 .antMatchers("/invoice/bookingworkticket/word").anonymous()
                 .antMatchers("/monitor/log/download").anonymous()
                 .antMatchers("/safecheck/dailycheck/downloadDailycheck").anonymous()
-
-
+                .antMatchers("/safecheck/dailycheck/downloadDailycheckPdf").anonymous()
+                .antMatchers("/safecheck/weekcheck/downloadWeekcheck").anonymous()
+                .antMatchers("/safecheck/weekcheck/downloadWeekcheckPdf").anonymous()
                 // 除上面外的所有请求全部需要鉴权认证
                 .anyRequest().authenticated()
                 .and()

+ 10 - 2
master/src/main/java/com/ruoyi/project/listener/semsWeekCheck/WeekcheckEndFailListener.java

@@ -8,6 +8,8 @@ import com.ruoyi.common.utils.SpringContextUtils;
 import com.ruoyi.project.sems.domain.TApprove;
 import com.ruoyi.project.sems.domain.TReportYlgd;
 import com.ruoyi.project.sems.domain.TReportYlrq;
+import com.ruoyi.project.sems.safecheck.domain.TSpecWeekcheck;
+import com.ruoyi.project.sems.safecheck.service.ITSpecWeekcheckService;
 import com.ruoyi.project.sems.service.ITApproveService;
 import com.ruoyi.project.sems.service.ITReportYlgdService;
 import com.ruoyi.project.sems.service.ITReportYlrqService;
@@ -20,6 +22,7 @@ import org.springframework.stereotype.Service;
 
 import java.io.Serializable;
 import java.util.Date;
+import java.util.Map;
 
 @Service("weekcheckEndFailListener")
 public class WeekcheckEndFailListener implements Serializable, ExecutionListener {
@@ -29,8 +32,13 @@ public class WeekcheckEndFailListener implements Serializable, ExecutionListener
     @Override
     public void notify(DelegateExecution delegateExecution) {
         String id = delegateExecution.getProcessInstanceBusinessKey();
-        logger.info("delegateExecution--------------------------------" + delegateExecution);
-        logger.info("审批id--------------------------------" + id);
 
+        Map variableInstances = delegateExecution.getVariableInstances();
+        logger.debug("参数--------------------------------" + JSON.toJSONString(variableInstances));
+        logger.debug("审批id--------------------------------" + id);
+        ITSpecWeekcheckService itSpecWeekcheckService = (ITSpecWeekcheckService) SpringContextUtils.getBean("tSpecWeekcheckServiceImpl");
+        TSpecWeekcheck t = itSpecWeekcheckService.selectTSpecWeekcheckById(Long.parseLong(id));
+        t.setStatus(2);
+        itSpecWeekcheckService.updateTSpecWeekcheck(t);
     }
 }

+ 2 - 0
master/src/main/java/com/ruoyi/project/listener/semsWeekCheck/WeekcheckEndSuccessListener.java

@@ -12,6 +12,7 @@ import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
 
 import java.io.Serializable;
+import java.util.Date;
 import java.util.Map;
 
 @Service("weekcheckEndSuccessListener")
@@ -30,6 +31,7 @@ public class WeekcheckEndSuccessListener implements Serializable, ExecutionListe
         ITSpecWeekcheckService itSpecWeekcheckService = (ITSpecWeekcheckService) SpringContextUtils.getBean("tSpecWeekcheckServiceImpl");
         TSpecWeekcheck t = itSpecWeekcheckService.selectTSpecWeekcheckById(Long.parseLong(id));
         t.setStatus(1);
+        t.setSafeDirDate(new Date());
         itSpecWeekcheckService.updateTSpecWeekcheck(t);
 
     }

+ 31 - 0
master/src/main/java/com/ruoyi/project/officeConvert/OfficeConvertController.java

@@ -139,6 +139,37 @@ public class OfficeConvertController {
         return   new AjaxResult(HttpStatus.SUCCESS,successMsg,pathFileName) ;
     }
 
+    public String wordTransPdf(String filepath) {
+        // 获取HttpServletResponse
+        String newFilePath=filepath.replace("/profile","");
+        // 需要转换的文件路径
+        File file = new File(RuoYiConfig.getProfile()+newFilePath);
+        boolean  flag= file.exists();
+        if(flag==false){
+           logger.error("文件不存在");
+        }
+        String converterPdf ="";  //生成的文件名
+        try {
+            // 转换之后文件生成的本地地址
+            File newFile = new File(RuoYiConfig.getProfile());
+            if (!newFile.exists()) {
+                newFile.mkdirs();
+            }
+            String name =file.getName();
+            int t=name.lastIndexOf(".");
+            String newName=name.substring(0,t);
+            //预约开票的word文档
+            converterPdf =  newName+".pdf";
+            // 文件转化
+            documentConverter.convert(file).to(new File(RuoYiConfig.getProfile() + File.separator +"temp" + File.separator +converterPdf)).execute();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        //最后应该返回转换后的文件名称
+        String pathFileName = Constants.RESOURCE_PREFIX+ File.separator +"temp" + File.separator + converterPdf;
+        return  pathFileName;
+    }
+
 
     /**
     PPT文件需要根据不同格式类型区分一下

+ 30 - 1
master/src/main/java/com/ruoyi/project/sems/safecheck/controller/TSpecDailycheckController.java

@@ -21,6 +21,7 @@ import com.ruoyi.common.utils.document.ZipUtil;
 import com.ruoyi.common.utils.file.FileUploadUtils;
 import com.ruoyi.framework.config.RuoYiConfig;
 import com.ruoyi.project.apply.domain.TApplyOfflinevalve;
+import com.ruoyi.project.officeConvert.OfficeConvertController;
 import com.ruoyi.project.system.domain.SysUser;
 import com.ruoyi.project.system.service.ISysUserService;
 import io.jsonwebtoken.lang.Assert;
@@ -52,7 +53,8 @@ public class TSpecDailycheckController extends BaseController {
     private ITSpecDailycheckService tSpecDailycheckService;
     @Autowired
     private ISysUserService userService;
-
+    @Autowired
+    private OfficeConvertController officeConvertController;
     /**
      * 查询每日安全检查列表
      */
@@ -142,6 +144,33 @@ public class TSpecDailycheckController extends BaseController {
 
     }
 
+    /**
+     * @return
+     * @throws IOException
+     */
+    @RequestMapping("/downloadDailycheckPdf")
+    public AjaxResult downloadDailycheckPdf(@RequestParam String id, HttpServletRequest request, HttpServletResponse response) throws Exception {
+        String[] ids = id.split(",");
+        OutputStream out = null;
+        out = response.getOutputStream();
+        //存放所有文件路径
+        List<String> list = new ArrayList<>();
+        for (int i = 0; i < ids.length; i++) {
+            String url = PreView(Long.parseLong(ids[i]));
+            // 将路径字符串转换为Path对象
+            Path path = Paths.get(url);
+            // 获取文件名
+            String fileName = path.getFileName().toString();
+            fileName = officeConvertController.wordTransPdf(url);
+            String newFilePath=fileName.replace("/profile","");
+            logger.info("fileName:" + newFilePath);
+            list.add(newFilePath);
+        }
+        logger.info(JSON.toJSONString(list));
+        return ZipUtil.createZip(RuoYiConfig.getProfile() + "", "",  "每日安全检查报告PDF.zip", list, response);
+
+    }
+
     /**
      * @param id
      * @return

+ 37 - 1
master/src/main/java/com/ruoyi/project/sems/safecheck/controller/TSpecPersonweekcheckController.java

@@ -1,6 +1,8 @@
 package com.ruoyi.project.sems.safecheck.controller;
 
 import java.util.List;
+
+import com.ruoyi.project.sems.safecheck.mapper.TSpecPersonweekcheckMapper;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -20,6 +22,8 @@ import com.ruoyi.framework.web.domain.AjaxResult;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.framework.web.page.TableDataInfo;
 
+import javax.annotation.Resource;
+
 /**
  * 每周个人安全检查Controller
  *
@@ -32,7 +36,8 @@ public class TSpecPersonweekcheckController extends BaseController
 {
     @Autowired
     private ITSpecPersonweekcheckService tSpecPersonweekcheckService;
-
+    @Resource
+    private TSpecPersonweekcheckMapper tSpecPersonweekcheckMapper;
     /**
      * 查询每周个人安全检查列表
      */
@@ -45,6 +50,37 @@ public class TSpecPersonweekcheckController extends BaseController
         return getDataTable(list);
     }
 
+    /**
+     * 查询每周个人安全检查列表
+     */
+    @GetMapping("/getWeekcheckByWeek")
+    public AjaxResult getWeekcheckByWeek(TSpecPersonweekcheck tSpecPersonweekcheck)
+    {
+        List<TSpecPersonweekcheck> list = tSpecPersonweekcheckMapper.selectTSpecPersonweekcheckListByWeek(tSpecPersonweekcheck);
+        TSpecPersonweekcheck res = new TSpecPersonweekcheck();
+        String lastWeekrisk = "";
+        String thisWeekRisk = "";
+        String nextWeekWork = "";
+        if (list.size() > 0) {
+            for (TSpecPersonweekcheck t: list
+                 ) {
+                if (!"无".equals(t.getLastWeekRisk())) {
+                    lastWeekrisk = lastWeekrisk + t.getCheckerName() + ":" + t.getLastWeekRisk()+ "\n";
+                }
+                if (!"无".equals(t.getThisWeekRisk())) {
+                    thisWeekRisk = thisWeekRisk + t.getCheckerName() + ":" + t.getThisWeekRisk()+ "\n";
+                }
+                if (!"无".equals(t.getNextWeekWork())) {
+                    nextWeekWork = nextWeekWork + t.getCheckerName() + ":" + t.getNextWeekWork()+ "\n";
+                }
+            }
+        }
+        res.setLastWeekRisk(lastWeekrisk);
+        res.setThisWeekRisk(thisWeekRisk);
+        res.setNextWeekWork(nextWeekWork);
+        return AjaxResult.success(res);
+    }
+
     /**
      * 导出每周个人安全检查列表
      */

+ 81 - 17
master/src/main/java/com/ruoyi/project/sems/safecheck/controller/TSpecWeekcheckController.java

@@ -3,14 +3,17 @@ 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 java.io.OutputStream;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.*;
 
+import com.alibaba.fastjson.JSON;
 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.document.ZipUtil;
 import com.ruoyi.common.utils.file.FileUploadUtils;
 import com.ruoyi.framework.config.RuoYiConfig;
 import com.ruoyi.project.approve.damain.DevTask;
@@ -22,6 +25,7 @@ import com.ruoyi.project.listener.semsWeekCheck.SafeAdminTaskCreateListener;
 import com.ruoyi.project.listener.semsWeekCheck.SafeDirTaskCreateListener;
 import com.ruoyi.project.listener.semsWeekCheck.WeekcheckEndFailListener;
 import com.ruoyi.project.listener.semsWeekCheck.WeekcheckEndSuccessListener;
+import com.ruoyi.project.officeConvert.OfficeConvertController;
 import com.ruoyi.project.sems.safecheck.domain.TSpecDailycheck;
 import com.ruoyi.project.system.domain.SysUser;
 import com.ruoyi.project.system.service.ISysUserService;
@@ -35,14 +39,7 @@ import org.activiti.engine.runtime.ProcessInstance;
 import org.activiti.engine.task.Task;
 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 org.springframework.web.bind.annotation.*;
 import com.ruoyi.framework.aspectj.lang.annotation.Log;
 import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
 import com.ruoyi.project.sems.safecheck.domain.TSpecWeekcheck;
@@ -52,6 +49,9 @@ import com.ruoyi.framework.web.domain.AjaxResult;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.framework.web.page.TableDataInfo;
 
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
 /**
  * 每周安全排查Controller
  *
@@ -72,6 +72,8 @@ public class TSpecWeekcheckController extends BaseController
     private TaskService taskService;
     @Autowired
     private ISysUserService sysUserService;
+    @Autowired
+    private OfficeConvertController officeConvertController;
     /**
      * 查询每周安全排查列表
      */
@@ -117,6 +119,8 @@ public class TSpecWeekcheckController extends BaseController
     {
         long userId = getUserId();
         tSpecWeekcheck.setCreaterCode(userId);
+        tSpecWeekcheck.setSafeAdminId(String.valueOf(userId));
+        tSpecWeekcheck.setSafeAdminDate(tSpecWeekcheck.getCheckDate());
 
         SysUser admin = sysUserService.selectUserById(Long.valueOf(tSpecWeekcheck.getSafeAdminId()));
         tSpecWeekcheck.setSafeAdminName(admin.getNickName());
@@ -127,10 +131,8 @@ public class TSpecWeekcheckController extends BaseController
         //开始工作流、监听
         Map<String, Object> variables = new HashMap<>();
 
-        variables.put("safeAdmin", tSpecWeekcheck.getSafeAdminId());
         variables.put("safeDir", tSpecWeekcheck.getSafeDirId());
 
-        variables.put("safeAdminTaskCreateListener", new SafeAdminTaskCreateListener());
         variables.put("safeDirTaskCreateListener", new SafeDirTaskCreateListener());
         variables.put("weekcheckEndFailListener", new WeekcheckEndFailListener());
         variables.put("weekcheckEndSuccessListener", new WeekcheckEndSuccessListener());
@@ -167,6 +169,55 @@ public class TSpecWeekcheckController extends BaseController
         return toAjax(tSpecWeekcheckService.deleteTSpecWeekcheckByIds(ids));
     }
 
+    /**
+     * @return
+     * @throws IOException
+     */
+    @RequestMapping("/downloadWeekcheck")
+    public AjaxResult downloadDailycheck(@RequestParam String id, HttpServletRequest request, HttpServletResponse response) throws Exception {
+        String[] ids = id.split(",");
+        OutputStream out = null;
+        out = response.getOutputStream();
+        //存放所有文件路径
+        List<String> list = new ArrayList<>();
+        for (int i = 0; i < ids.length; i++) {
+            String url = PreView(Long.parseLong(ids[i]));
+            // 将路径字符串转换为Path对象
+            Path path = Paths.get(url);
+            // 获取文件名
+            String fileName = path.getFileName().toString();
+            list.add(fileName);
+        }
+        logger.info(JSON.toJSONString(list));
+        return ZipUtil.createZip(RuoYiConfig.getProfile() + "/sems/weekcheck/", "",  "每周安全检查报告.zip", list, response);
+    }
+
+    /**
+     * @return
+     * @throws IOException
+     */
+    @RequestMapping("/downloadWeekcheckPdf")
+    public AjaxResult downloadWeekcheckPdf(@RequestParam String id, HttpServletRequest request, HttpServletResponse response) throws Exception {
+        String[] ids = id.split(",");
+        OutputStream out = null;
+        out = response.getOutputStream();
+        //存放所有文件路径
+        List<String> list = new ArrayList<>();
+        for (int i = 0; i < ids.length; i++) {
+            String url = PreView(Long.parseLong(ids[i]));
+            // 将路径字符串转换为Path对象
+            Path path = Paths.get(url);
+            // 获取文件名
+            String fileName = path.getFileName().toString();
+            fileName = officeConvertController.wordTransPdf(url);
+            String newFilePath=fileName.replace("/profile","");
+            logger.info("fileName:" + newFilePath);
+            list.add(newFilePath);
+        }
+        logger.info(JSON.toJSONString(list));
+        return ZipUtil.createZip(RuoYiConfig.getProfile() + "", "",  "每周安全检查报告PDF版.zip", list, response);
+    }
+
     /**
      * @param id
      * @return
@@ -229,6 +280,10 @@ public class TSpecWeekcheckController extends BaseController
         } else {
             params.put("safeAdmin", Texts.of(safeAdmin.getNickName()).fontSize(10).bold().create());
         }
+        if (tSpecWeekcheck.getSafeAdminDate() != null) {
+            params.put("safeAdminDate", Texts.of(DateUtils.dateTime(tSpecWeekcheck.getSafeAdminDate())).fontSize(11).bold().create());
+
+        }
 
         SysUser safeDir = userService.selectUserById(Long.parseLong(tSpecWeekcheck.getSafeDirId()));
         if (safeDir.getSignUrl() != null && new File(fileName(safeDir.getSignUrl())).exists()) {
@@ -236,6 +291,11 @@ public class TSpecWeekcheckController extends BaseController
         } else {
             params.put("safeDir", Texts.of(safeDir.getNickName()).fontSize(10).bold().create());
         }
+        if (tSpecWeekcheck.getSafeDirDate() != null) {
+            params.put("safeDirDate", Texts.of(DateUtils.dateTime(tSpecWeekcheck.getSafeDirDate())).fontSize(11).bold().create());
+
+        }
+
         // 渲染文本
         return params;
     }
@@ -302,10 +362,14 @@ public class TSpecWeekcheckController extends BaseController
         Map<String, Object> param = new HashMap<>();
         param.put("condition", devTask.getCondition());
 
-//        String taskName = task.getName();//实例名
-//        if (taskName.equals("安全总监")) {
-//            devTask.getBusinessKey();
-//        }
+        String taskName = task.getName();//实例名
+        if (taskName.equals("安全总监")) {
+
+            String id = devTask.getBusinessKey();
+            TSpecWeekcheck t = tSpecWeekcheckService.selectTSpecWeekcheckById(Long.parseLong(id));
+            t.setSafeDirSug(devTask.getComment());
+            tSpecWeekcheckService.updateTSpecWeekcheck(t);
+        }
         ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
         TaskService taskService = processEngine.getTaskService();
         //认领任务

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

@@ -44,6 +44,14 @@ public class TSpecDailycheck extends BaseEntity
     @Excel(name = "检查日期", width = 30, dateFormat = "yyyy-MM-dd")
     private Date checkDate;
 
+    /** 查询开始日期 */
+    @JsonFormat(pattern = "yyyy-MM-dd" , timezone = "GMT+8")
+    private Date startDate;
+
+    /** 查询结束日期 */
+    @JsonFormat(pattern = "yyyy-MM-dd" , timezone = "GMT+8")
+    private Date endDate;
+
     /** 安全员用户id */
     private Long checkerId;
 
@@ -257,6 +265,22 @@ public class TSpecDailycheck extends BaseEntity
         this.checkerName = checkerName;
     }
 
+    public Date getStartDate() {
+        return startDate;
+    }
+
+    public void setStartDate(Date startDate) {
+        this.startDate = startDate;
+    }
+
+    public Date getEndDate() {
+        return endDate;
+    }
+
+    public void setEndDate(Date endDate) {
+        this.endDate = endDate;
+    }
+
     @Override
     public String toString() {
         return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)

+ 24 - 0
master/src/main/java/com/ruoyi/project/sems/safecheck/domain/TSpecPersonweekcheck.java

@@ -50,6 +50,14 @@ public class TSpecPersonweekcheck extends BaseEntity
     @Excel(name = "检查日期", width = 30, dateFormat = "yyyy-MM-dd")
     private Date checkDate;
 
+    /** 查询开始日期 */
+    @JsonFormat(pattern = "yyyy-MM-dd" , timezone = "GMT+8")
+    private Date startDate;
+
+    /** 查询结束日期 */
+    @JsonFormat(pattern = "yyyy-MM-dd" , timezone = "GMT+8")
+    private Date endDate;
+
     /** 安全员用户id */
     @Excel(name = "安全员用户id")
     private Long checkerId;
@@ -212,6 +220,22 @@ public class TSpecPersonweekcheck extends BaseEntity
         this.checkerName = checkerName;
     }
 
+    public Date getStartDate() {
+        return startDate;
+    }
+
+    public void setStartDate(Date startDate) {
+        this.startDate = startDate;
+    }
+
+    public Date getEndDate() {
+        return endDate;
+    }
+
+    public void setEndDate(Date endDate) {
+        this.endDate = endDate;
+    }
+
     @Override
     public String toString() {
         return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)

+ 29 - 5
master/src/main/java/com/ruoyi/project/sems/safecheck/domain/TSpecWeekcheck.java

@@ -52,6 +52,14 @@ public class TSpecWeekcheck extends BaseEntity
     @Excel(name = "检查日期", width = 30, dateFormat = "yyyy-MM-dd")
     private Date checkDate;
 
+    /** 查询开始日期 */
+    @JsonFormat(pattern = "yyyy-MM-dd" , timezone = "GMT+8")
+    private Date startDate;
+
+    /** 查询结束日期 */
+    @JsonFormat(pattern = "yyyy-MM-dd" , timezone = "GMT+8")
+    private Date endDate;
+
     /** 安全员用户id */
     @Excel(name = "安全员用户id")
     private Long checkerId;
@@ -103,7 +111,7 @@ public class TSpecWeekcheck extends BaseEntity
     /** 检查日期 */
     @JsonFormat(pattern = "yyyy-MM-dd" , timezone = "GMT+8")
     @Excel(name = "安全管理员日期", width = 30, dateFormat = "yyyy-MM-dd")
-    private Date safeAdmindDate;
+    private Date safeAdminDate;
 
     /** 检查日期 */
     @JsonFormat(pattern = "yyyy-MM-dd" , timezone = "GMT+8")
@@ -299,12 +307,12 @@ public class TSpecWeekcheck extends BaseEntity
         this.status = status;
     }
 
-    public Date getSafeAdmindDate() {
-        return safeAdmindDate;
+    public Date getSafeAdminDate() {
+        return safeAdminDate;
     }
 
-    public void setSafeAdmindDate(Date safeAdmindDate) {
-        this.safeAdmindDate = safeAdmindDate;
+    public void setSafeAdminDate(Date safeAdminDate) {
+        this.safeAdminDate = safeAdminDate;
     }
 
     public Date getSafeDirDate() {
@@ -315,6 +323,22 @@ public class TSpecWeekcheck extends BaseEntity
         this.safeDirDate = safeDirDate;
     }
 
+    public Date getStartDate() {
+        return startDate;
+    }
+
+    public void setStartDate(Date startDate) {
+        this.startDate = startDate;
+    }
+
+    public Date getEndDate() {
+        return endDate;
+    }
+
+    public void setEndDate(Date endDate) {
+        this.endDate = endDate;
+    }
+
     @Override
     public String toString() {
         return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)

+ 3 - 0
master/src/main/java/com/ruoyi/project/sems/safecheck/mapper/TSpecPersonweekcheckMapper.java

@@ -30,6 +30,7 @@ public interface TSpecPersonweekcheckMapper
     @DataScopePlant(deptAlias = "d")
     public List<TSpecPersonweekcheck> selectTSpecPersonweekcheckList(TSpecPersonweekcheck tSpecPersonweekcheck);
 
+    List<TSpecPersonweekcheck> selectTSpecPersonweekcheckListByWeek(TSpecPersonweekcheck tSpecPersonweekcheck);
     /**
      * 新增每周个人安全检查
      *
@@ -61,4 +62,6 @@ public interface TSpecPersonweekcheckMapper
      * @return 结果
      */
     public int deleteTSpecPersonweekcheckByIds(Long[] ids);
+
+
 }

+ 3 - 4
master/src/main/java/com/ruoyi/project/system/controller/SysUserController.java

@@ -1,9 +1,8 @@
 package com.ruoyi.project.system.controller;
 
+import com.alibaba.fastjson.JSON;
 import com.ruoyi.common.constant.UserConstants;
-import com.ruoyi.common.utils.SecurityUtils;
-import com.ruoyi.common.utils.ServletUtils;
-import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.*;
 import com.ruoyi.common.utils.file.FileUploadUtils;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.framework.aspectj.lang.annotation.Log;
@@ -176,7 +175,7 @@ public class SysUserController extends BaseController
     {
         if (!file.isEmpty())
         {
-            String avatar = FileUploadUtils.upload(RuoYiConfig.getFilePath("/userSign"), file);
+            String avatar = FileUploadUtils.uploadAndChangeName(RuoYiConfig.getFilePath("/userSign"), file , DateUtils.dateTime() + "/" + IdUtils.fastUUID().substring(5) + "/" +"sign.png");
             return AjaxResult.success(avatar);
         }
         return AjaxResult.error("上传图片异常,请联系管理员");

+ 4 - 1
master/src/main/resources/mybatis/sems/safecheck/TSpecDailycheckMapper.xml

@@ -33,8 +33,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     <select id="selectTSpecDailycheckList" parameterType="TSpecDailycheck" resultMap="TSpecDailycheckResult">
         <include refid="selectTSpecDailycheckVo"/>
         <where>
-            <if test="plantCode != null  and plantCode != ''"> and plant_code = #{plantCode}</if>
+            <if test="plantCode != null  and plantCode != ''"> and plant_code like concat(concat('%',  #{plantCode}), '%')</if>
             <if test="checkDate != null "> and check_date = #{checkDate}</if>
+            <if test="startDate != null ">and check_date <![CDATA[>=]]> #{startDate}</if>
+            <if test="endDate != null">and check_date <![CDATA[<=]]>#{endDate}</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>
@@ -48,6 +50,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </where>
         <!-- 数据范围过滤 -->
         ${params.dataScopePlant}
+        order by d.check_date desc
     </select>
 
     <select id="selectTSpecDailycheckById" parameterType="Long" resultMap="TSpecDailycheckResult">

+ 14 - 2
master/src/main/resources/mybatis/sems/safecheck/TSpecPersonweekcheckMapper.xml

@@ -29,9 +29,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     <select id="selectTSpecPersonweekcheckList" parameterType="TSpecPersonweekcheck" resultMap="TSpecPersonweekcheckResult">
         <include refid="selectTSpecPersonweekcheckVo"/>
         <where>
-            <if test="plantCode != null  and plantCode != ''"> and plant_code = #{plantCode}</if>
-            <if test="checkDate != null "> and check_date = #{checkDate}</if>
+            <if test="plantCode != null  and plantCode != ''"> and plant_code like concat(concat('%',  #{plantCode}), '%')</if>
+            <if test="startDate != null ">and check_date <![CDATA[>=]]> #{startDate}</if>
+            <if test="endDate != null">and check_date <![CDATA[<=]]>#{endDate}</if>
             <if test="weekNo != null  and weekNo != ''"> and week_no = #{weekNo}</if>
+            <if test="checkDate != null "> and check_date = #{checkDate}</if>
             <if test="lastWeekRisk != null  and lastWeekRisk != ''"> and last_week_risk = #{lastWeekRisk}</if>
             <if test="thisWeekRisk != null  and thisWeekRisk != ''"> and this_week_risk = #{thisWeekRisk}</if>
             <if test="safeCondition != null  and safeCondition != ''"> and safe_condition = #{safeCondition}</if>
@@ -40,6 +42,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </where>
         <!-- 数据范围过滤 -->
         ${params.dataScopePlant}
+        order by d.check_date desc
+    </select>
+
+    <select id="selectTSpecPersonweekcheckListByWeek" parameterType="TSpecPersonweekcheck" resultMap="TSpecPersonweekcheckResult">
+        <include refid="selectTSpecPersonweekcheckVo"/>
+        <where>
+            <if test="weekNo != null  and weekNo != ''"> and d.week_no = #{weekNo}</if>
+                    <if test="checkDate != null "> and TO_CHAR(d.check_date, 'YYYY') = TO_CHAR(#{checkDate}, 'YYYY')</if>
+            and d.del_flag = 0
+        </where>
     </select>
 
     <select id="selectTSpecPersonweekcheckById" parameterType="Long" resultMap="TSpecPersonweekcheckResult">

+ 8 - 1
master/src/main/resources/mybatis/sems/safecheck/TSpecWeekcheckMapper.xml

@@ -37,7 +37,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     <select id="selectTSpecWeekcheckList" parameterType="TSpecWeekcheck" resultMap="TSpecWeekcheckResult">
         <include refid="selectTSpecWeekcheckVo"/>
         <where>
-            <if test="plantCode != null  and plantCode != ''"> and plant_code = #{plantCode}</if>
+            <if test="plantCode != null  and plantCode != ''"> and plant_code like concat(concat('%',  #{plantCode}), '%')</if>
+            <if test="startDate != null ">and check_date <![CDATA[>=]]> #{startDate}</if>
+            <if test="endDate != null">and check_date <![CDATA[<=]]>#{endDate}</if>
             <if test="checkDate != null "> and check_date = #{checkDate}</if>
             <if test="checkerId != null "> and checker_id = #{checkerId}</if>
             <if test="lastWeekRisk != null  and lastWeekRisk != ''"> and last_week_risk = #{lastWeekRisk}</if>
@@ -49,6 +51,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             and d.del_flag = 0
         </where>
         <!-- 数据范围过滤 -->
+        order by d.check_date desc
     </select>
 
     <select id="selectTSpecWeekcheckById" parameterType="Long" resultMap="TSpecWeekcheckResult">
@@ -82,6 +85,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="nextWeekWork != null">next_week_work,</if>
             <if test="safeAdminSug != null">safe_admin_sug,</if>
             <if test="safeDirSug != null">safe_dir_sug,</if>
+            <if test="safeAdminDate != null">safe_admin_date,</if>
+            <if test="safeDirDate != null">safe_dir_date,</if>
          </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="id != null">#{id},</if>
@@ -104,6 +109,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="nextWeekWork != null">#{nextWeekWork},</if>
             <if test="safeAdminSug != null">#{safeAdminSug},</if>
             <if test="safeDirSug != null">#{safeDirSug},</if>
+            <if test="safeAdminDate != null">#{safeAdminDate},</if>
+            <if test="safeDirDate != null">#{safeDirSug},</if>
          </trim>
     </insert>
 

+ 1 - 1
master/src/main/resources/mybatis/training/newstaff/TTnFirstplanMapper.xml

@@ -46,11 +46,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="trainer != null  and trainer != ''"> and trainer = #{trainer}</if>
             <if test="courseDate != null "> and course_date = #{courseDate}</if>
             <if test="planStatus != null "> and plan_status = #{planStatus}</if>
-
             and d.del_flag = 0
         </where>
         <!-- 数据范围过滤 -->
         ${params.dataScope}
+        order by d.course_day
     </select>
 
     <select id="selectTTnFirstplanListByNewId" parameterType="TTnFirstplan" resultMap="TTnFirstplanResult">

+ 1 - 0
master/src/main/resources/mybatis/training/newstaff/TTnFirstplanTmplMapper.xml

@@ -49,6 +49,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </where>
         <!-- 数据范围过滤 -->
         ${params.dataScope}
+        order by d.course_day
     </select>
 
     <select id="selectTTnFirstplanTmplById" parameterType="Long" resultMap="TTnFirstplanTmplResult">

+ 3 - 3
master/src/main/resources/mybatis/training/newstaff/TTnNewMapper.xml

@@ -27,10 +27,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </resultMap>
 
     <sql id="selectTTnNewVo">
-        select d.new_id, d.staff_id,u.nick_name as staffName,u2.nick_name as mentorStaffName, d.name, d.del_flag, d.creater_code, d.createdate, d.updater_code, d.updatedate, d.dept_id, d.plan_status, d.plan_year, d.startdate, d.enddate, d.mentor_staff_id, d.plan_type, d.remarks ,s.dept_name from t_tn_new d
+        select d.new_id, d.staff_id,u.name as staffName,u2.name as mentorStaffName, d.name, d.del_flag, d.creater_code, d.createdate, d.updater_code, d.updatedate, d.dept_id, d.plan_status, d.plan_year, d.startdate, d.enddate, d.mentor_staff_id, d.plan_type, d.remarks ,s.dept_name from t_tn_new d
       left join sys_dept s on s.dept_id = d.dept_id
-      left join sys_user u on d.staff_id = u.staffid and u.del_flag = 0
-      left join sys_user u2 on d.mentor_staff_id = u2.staffid and u2.del_flag = 0
+      left join t_staffmgr u on d.staff_id = u.staffid and u.del_flag = 0
+      left join t_staffmgr u2 on d.mentor_staff_id = u2.staffid and u2.del_flag = 0
     </sql>
 
     <select id="selectTTnNewList" parameterType="TTnNew" resultMap="TTnNewResult">

+ 1 - 1
master/src/main/resources/mybatis/training/newstaff/TTnSchoolplanMapper.xml

@@ -44,11 +44,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="courseDate != null "> and course_date = #{courseDate}</if>
             <if test="assess != null  and assess != ''"> and assess = #{assess}</if>
             <if test="planStatus != null "> and plan_status = #{planStatus}</if>
-
             and d.del_flag = 0
         </where>
         <!-- 数据范围过滤 -->
         ${params.dataScope}
+        order by d.course_day
     </select>
 
     <select id="selectTTnSchoolplanListByNewId" parameterType="TTnSchoolplan" resultMap="TTnSchoolplanResult">

+ 1 - 0
master/src/main/resources/mybatis/training/newstaff/TTnSchoolplanTmplMapper.xml

@@ -41,6 +41,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </where>
         <!-- 数据范围过滤 -->
         ${params.dataScope}
+        order by d.course_day
     </select>
 
     <select id="selectTTnSchoolplanTmplById" parameterType="Long" resultMap="TTnSchoolplanTmplResult">

+ 1 - 0
master/src/main/resources/mybatis/training/newstaff/TTnTransferplanMapper.xml

@@ -44,6 +44,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </where>
         <!-- 数据范围过滤 -->
         ${params.dataScope}
+        order by d.course_day
     </select>
 
     <select id="selectTTnTransferplanListByNewId" parameterType="TTnTransferplan" resultMap="TTnTransferplanResult">

+ 1 - 0
master/src/main/resources/mybatis/training/newstaff/TTnTransferplanTmplMapper.xml

@@ -41,6 +41,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </where>
         <!-- 数据范围过滤 -->
         ${params.dataScope}
+        order by d.course_day
     </select>
 
     <select id="selectTTnTransferplanTmplById" parameterType="Long" resultMap="TTnTransferplanTmplResult">

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


+ 3 - 1
ui/src/api/sems/safecheck/personweekcheck.js

@@ -9,6 +9,8 @@ export function listPersonweekcheck(query) {
   })
 }
 
+
+
 // 查询每周个人安全检查详细
 export function getPersonweekcheck(id) {
   return request({
@@ -50,4 +52,4 @@ export function exportPersonweekcheck(query) {
     method: 'get',
     params: query
   })
-}
+}

+ 1 - 1
ui/src/api/sems/safecheck/weekcheck.js

@@ -12,7 +12,7 @@ export function listWeekcheck(query) {
 // 查询每周安全排查
 export function getWeekcheckByWeek(query) {
   return request({
-    url: '/safecheck/weekcheck/getWeekcheckByWeek',
+    url: '/safecheck/personweekcheck/getWeekcheckByWeek',
     method: 'get',
     params: query
   })

+ 8 - 0
ui/src/api/system/user.js

@@ -133,6 +133,14 @@ export function uploadAvatar(data) {
     data: data
   })
 }
+// 用户签名上传
+export function uploadSign(data) {
+  return request({
+    url: '/system/user/uploadFile',
+    method: 'post',
+    data: data
+  })
+}
 
 // 下载用户导入模板
 export function importTemplate() {

+ 0 - 1
ui/src/assets/styles/index.scss

@@ -481,4 +481,3 @@ aside {
     border-top: 2px solid;
   }
 }
-

+ 11 - 0
ui/src/assets/styles/ruoyi.scss

@@ -227,6 +227,17 @@
 	overflow: hidden;
 }
 
+ .sign-upload-preview {
+   position: absolute;
+   top: 50%;
+   transform: translate(50%, -50%);
+   width: 200px; /* 修改为长方形的宽度 */
+   height: 100px; /* 修改为长方形的高度 */
+   box-shadow: 0 0 4px #ccc;
+   overflow: hidden;
+ }
+
+
 /* 拖拽列样式 */
 .sortable-ghost{
 	opacity: .8;

+ 5 - 1
ui/src/views/approve/approveDetail/semsWeekCheck-detail.vue

@@ -186,6 +186,9 @@ export default {
       });
       getWeekcheck(id).then(response => {
         this.dataForm = response.data;
+        if (!this.dataForm.safeDirSug) {
+          this.dataForm.safeDirSug = '已阅'
+        }
       });
     },
 
@@ -230,7 +233,8 @@ export default {
       this.submitDisabled = true
 
       this.taskForm.condition = val
-      this.taskForm.govFiles = this.dataForm.files
+      this.taskForm.comment = this.dataForm.safeDirSug
+      this.taskForm.businessKey = this.dataForm.id
       handle(this.taskForm).then(response => {
         this.submitDisabled = false
         this.msgSuccess(this.$t('处理成功'));

+ 5 - 1
ui/src/views/dashboard/hcq/BrithChart.vue

@@ -57,6 +57,10 @@ export default {
           trigger: 'item',
           formatter: "{b}: {c} " + " | " + "{d}%"
         },
+        color: [
+          '#87CA8B',
+          '#FBD44A'
+        ],
         title:
           {
             text: '',
@@ -72,7 +76,7 @@ export default {
             padding:[0,0]
           },
           selectedMode: true,
-          data: [],
+          data:['已完成','未完成']
         },
         series: [
           {

+ 2 - 2
ui/src/views/dashboard/hcq/PanelGroup.vue

@@ -107,10 +107,10 @@ export default {
 
 <style lang="scss" scoped>
 .panel-group {
-  margin-top: 18px;
+  margin-top: -12px;
 
   .card-panel-col {
-    margin-bottom: 32px;
+    margin-bottom: 16px;
   }
   .item {
     margin-bottom: 0px;

+ 26 - 8
ui/src/views/dashboard/hcq/PieChart.vue

@@ -58,22 +58,40 @@ export default {
           trigger: 'item',
           formatter: '{a} <br/>{b} : {c} ({d}%)'
         },
+        color: [
+          '#87CA8B',
+          '#FBD44A'
+        ],
         legend: {
-          left: 'center',
-          bottom: '10',
+          orient: 'vertical',
+          left: 'left',
+          itemWidth: 10,
+          itemHeight: 10,
+          textStyle: {
+            fontSize: 12,
+            padding:[0,0]
+          },
+          selectedMode: true,
           data:['已完成','未完成']
         },
         series: [
           {
-            name: '已完成',
-            selectedMode: 'single',
+            name: '',
             type: 'pie',
-            radius: ['10%', '55%'],
-            center: ['50%', '38%'],
+            selectedMode: 'single',
+            label: {
+              position: 'outside',
+              fontSize: 10,
+            },
+            animationEasing: 'cubicInOut',
+            animationDuration: 1300,
+            labelLine: {
+              show: true
+            },
             data: [{name: '已完成',value: 1} , {name: '未完成',value: 6}],
-            animationDuration: 2600
           }
-        ]
+        ],
+
       })
     }
   }

+ 4 - 1
ui/src/views/hcqhome.vue

@@ -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">装置培训完成情况</span>
           </div>
         </div>
         <div class="chart-wrapper">
@@ -136,4 +136,7 @@ export default {
     padding: 8px;
   }
 }
+.card-name {
+  font-size: 16px;
+}
 </style>

+ 91 - 78
ui/src/views/sems/safecheck/dailycheck/index.vue

@@ -11,54 +11,32 @@
         />
       </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
+          v-model="chooseDate"
+          @change="handleQuery"
+          type="daterange"
+          style="width: 508px"
+          align="right"
+          unlink-panels
+          :range-separator="$t('至')"
+          :start-placeholder="$t('开始日期')"
+          :end-placeholder="$t('结束日期')"
+          value-format="yyyy-MM-dd"
+          :picker-options="pickerOptions">
         </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 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>
         <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>
@@ -98,24 +76,25 @@
         >删除
         </el-button>
       </el-col>
+
       <el-col :span="1.5">
         <el-button
-          type="warning"
+          type="primary"
           icon="el-icon-download"
           size="mini"
-          @click="handleExport"
-          v-hasPermi="['safecheck:dailycheck:export']"
-        >导出
+          :disabled="multiple"
+          @click="handleDownload"
+        >批量下载Word
         </el-button>
       </el-col>
       <el-col :span="1.5">
         <el-button
-          type="danger"
-          icon="el-icon-delete"
+          type="primary"
+          icon="el-icon-download"
           size="mini"
           :disabled="multiple"
-          @click="handleDownload"
-        >批量下载
+          @click="handleDownloadPdf"
+        >批量下载PDF
         </el-button>
       </el-col>
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
@@ -133,9 +112,8 @@
       <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="cSafety" :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"/>
@@ -221,7 +199,7 @@
             <tr>
               <td>2</td>
               <td>设备本体</td>
-              <td>设备定期检验、自行检查、设备本体、安全附件、安全保护装置、有无事故隐患等</td>
+              <td>设备定期检验、自行检查、设备本体有无事故隐患等</td>
               <td style="width: 150px;">
                 <div class="radio-group-horizontal">
                   <el-radio-group v-model="form.cDevice">
@@ -234,7 +212,7 @@
             <tr>
               <td>3</td>
               <td>安全附件或安全保护装置</td>
-              <td>安全阀、爆破片、紧急切断阀、压力表、液位计、壁温测试仪表、阻火器等</td>
+              <td>安全阀、爆破片等</td>
               <td>
                 <el-radio-group v-model="form.cSafety">
                   <el-radio label="√">√</el-radio>
@@ -242,17 +220,6 @@
                 </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>
@@ -369,6 +336,9 @@
     <form ref="downloadForm2" :action="downloadWordAction" target="FORMSUBMIT">
       <input name="id" v-model="downloadForm2.id" hidden/>
     </form>
+    <form ref="downloadFormPdf" :action="downloadWordActionPdf" target="FORMSUBMIT">
+      <input name="id" v-model="downloadFormPdf.id" hidden/>
+    </form>
   </div>
 </template>
 
@@ -460,12 +430,46 @@ export default {
         cOther: null,
         explain: null
       },
+      //日期快速选择
+      pickerOptions: {
+        shortcuts: [{
+          text: this.$t('最近一周'),
+          onClick(picker) {
+            const end = new Date();
+            const start = new Date();
+            start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
+            picker.$emit('pick', [start, end]);
+          }
+        }, {
+          text: this.$t('最近一个月'),
+          onClick(picker) {
+            const end = new Date();
+            const start = new Date();
+            start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
+            picker.$emit('pick', [start, end]);
+          }
+        }, {
+          text: this.$t('最近三个月'),
+          onClick(picker) {
+            const end = new Date();
+            const start = new Date();
+            start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
+            picker.$emit('pick', [start, end]);
+          }
+        }]
+      },
+      //日期选择器
+      chooseDate: [],
       // 表单参数
       form: {},
       downloadForm2: {
         id: '',
       },
       downloadWordAction: process.env.VUE_APP_BASE_API + '/safecheck/dailycheck/downloadDailycheck',
+      downloadFormPdf: {
+        id: '',
+      },
+      downloadWordActionPdf: process.env.VUE_APP_BASE_API + '/safecheck/dailycheck/downloadDailycheckPdf',
       // 表单校验
       rules: {
         plantCode: [
@@ -542,11 +546,17 @@ export default {
     /** 搜索按钮操作 */
     handleQuery() {
       this.queryParams.pageNum = 1;
+      if (this.chooseDate == null) {
+        this.chooseDate = []
+      }
+      this.queryParams.startDate = this.chooseDate[0]
+      this.queryParams.endDate = this.chooseDate[1]
       this.getList();
     },
     /** 重置按钮操作 */
     resetQuery() {
       this.resetForm("queryForm");
+      this.chooseDate = "";
       this.handleQuery();
     },
     // 多选框选中数据
@@ -608,15 +618,18 @@ export default {
     handleDownload() {
       const ids = this.ids;
       this.downloadForm2.id = ids.join(',')
-      this.$refs['downloadForm2'].submit()
+      this.$nextTick(() => {
+        this.$refs['downloadForm2'].submit()
+      })
+
+    },
+    handleDownloadPdf() {
+      const ids = this.ids;
+      this.downloadFormPdf.id = ids.join(',')
+      this.$nextTick(() => {
+        this.$refs['downloadFormPdf'].submit()
+      })
 
-      // this.$confirm('是否确认下载选中每日安全检查数据项?', "警告", {
-      //   confirmButtonText: "确定",
-      //   cancelButtonText: "取消",
-      //   type: "warning"
-      // }).then(function () {
-      //   this.$refs['downloadForm2'].submit()
-      // })
     },
     /** 导出按钮操作 */
     handleExport() {

+ 101 - 57
ui/src/views/sems/safecheck/personweekcheck/index.vue

@@ -11,11 +11,18 @@
         />
       </el-form-item>
       <el-form-item label="检查日期" prop="checkDate">
-        <el-date-picker clearable size="small" style="width: 200px"
-          v-model="queryParams.checkDate"
-          type="date"
+        <el-date-picker
+          v-model="chooseDate"
+          @change="handleQuery"
+          type="daterange"
+          style="width: 508px"
+          align="right"
+          unlink-panels
+          :range-separator="$t('至')"
+          :start-placeholder="$t('开始日期')"
+          :end-placeholder="$t('结束日期')"
           value-format="yyyy-MM-dd"
-          placeholder="选择检查日期">
+          :picker-options="pickerOptions">
         </el-date-picker>
       </el-form-item>
       <el-form-item label="周" prop="weekNo">
@@ -27,42 +34,7 @@
           @keyup.enter.native="handleQuery"
         />
       </el-form-item>
-      <el-form-item label="上周安全风险隐患问题整改核实情况" prop="lastWeekRisk">
-        <el-input
-          v-model="queryParams.lastWeekRisk"
-          placeholder="请输入上周安全风险隐患问题整改核实情况"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="本周主要安全风险隐患和整改情况" prop="thisWeekRisk">
-        <el-input
-          v-model="queryParams.thisWeekRisk"
-          placeholder="请输入本周主要安全风险隐患和整改情况"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="本周安全管理情况评价" prop="safeCondition">
-        <el-input
-          v-model="queryParams.safeCondition"
-          placeholder="请输入本周安全管理情况评价"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="下周工作重点" prop="nextWeekWork">
-        <el-input
-          v-model="queryParams.nextWeekWork"
-          placeholder="请输入下周工作重点"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
+
       <el-form-item>
         <el-button type="cyan" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
         <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
@@ -157,19 +129,33 @@
     <el-dialog :title="title" :visible.sync="open" width="900px" append-to-body>
       <el-form ref="form" :model="form" :rules="rules" label-width="150px">
         <el-form-item label="装置名称" prop="plantCode">
-          <el-input v-model="form.plantCode" placeholder="请输入装置名称" />
-        </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>
-        <el-form-item label="周" prop="weekNo">
-          <el-input v-model="form.weekNo" placeholder="请输入周" />
+          <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-row>
+          <el-col :span="12">
+            <el-form-item  label-width="150px" label="检查日期" prop="checkDate">
+              <el-date-picker clearable size="small" style="width: 200px" @change="calculateWeekNumber"
+                              v-model="form.checkDate"
+                              type="date"
+                              value-format="yyyy-MM-dd"
+                              placeholder="选择检查日期">
+              </el-date-picker>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label-width="150px" label="周" prop="weekNo">
+              <el-input v-model="form.weekNo" placeholder="请输入周" />
+            </el-form-item>
+          </el-col>
+        </el-row>
         <el-form-item label="上周安全风险隐患问题整改核实情况" prop="lastWeekRisk">
           <el-input v-model="form.lastWeekRisk" placeholder="请输入上周安全风险隐患问题整改核实情况" />
         </el-form-item>
@@ -177,7 +163,10 @@
           <el-input v-model="form.thisWeekRisk" placeholder="请输入本周主要安全风险隐患和整改情况" />
         </el-form-item>
         <el-form-item label="本周安全管理情况评价" prop="safeCondition">
-          <el-input v-model="form.safeCondition" placeholder="请输入本周安全管理情况评价" />
+          <el-radio-group v-model="form.safeCondition">
+            <el-radio label="安全风险可控,无较大(质量)安全风险隐患">安全风险可控,无较大(质量)安全风险隐患</el-radio>
+            <el-radio label="存在安全风险隐患,需尽快采取防范措施">存在安全风险隐患,需尽快采取防范措施</el-radio>
+          </el-radio-group>
         </el-form-item>
         <el-form-item label="下周工作重点" prop="nextWeekWork">
           <el-input v-model="form.nextWeekWork" placeholder="请输入下周工作重点" />
@@ -227,6 +216,8 @@ 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";
+import {getWeekcheckByWeek} from "@/api/sems/safecheck/weekcheck";
 
 export default {
   name: "Personweekcheck",
@@ -251,6 +242,7 @@ export default {
       title: "",
       // 部门树选项
       deptOptions: undefined,
+      plantOptions: [],
       clientHeight:300,
       // 是否显示弹出层
       open: false,
@@ -281,6 +273,36 @@ export default {
         safeCondition: null,
         nextWeekWork: null
       },
+      //日期快速选择
+      pickerOptions: {
+        shortcuts: [{
+          text: this.$t('最近一周'),
+          onClick(picker) {
+            const end = new Date();
+            const start = new Date();
+            start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
+            picker.$emit('pick', [start, end]);
+          }
+        }, {
+          text: this.$t('最近一个月'),
+          onClick(picker) {
+            const end = new Date();
+            const start = new Date();
+            start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
+            picker.$emit('pick', [start, end]);
+          }
+        }, {
+          text: this.$t('最近三个月'),
+          onClick(picker) {
+            const end = new Date();
+            const start = new Date();
+            start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
+            picker.$emit('pick', [start, end]);
+          }
+        }]
+      },
+      //日期选择器
+      chooseDate: [],
       // 表单参数
       form: {},
       // 表单校验
@@ -300,6 +322,12 @@ export default {
           this.clientHeight = document.body.clientHeight -250
       })
     this.getList();
+    let plantParams = {
+      pType: 1
+    }
+    mylistPlant(plantParams).then(response => {
+      this.plantOptions = response.data;
+    });
     this.getTreeselect();
   },
   methods: {
@@ -336,21 +364,27 @@ export default {
         checkDate: null,
         checkerId: null,
         weekNo: null,
-        lastWeekRisk: null,
-        thisWeekRisk: null,
-        safeCondition: null,
-        nextWeekWork: null
+        lastWeekRisk: '无',
+        thisWeekRisk: '无',
+        safeCondition: '安全风险可控,无较大(质量)安全风险隐患',
+        nextWeekWork: '无'
       };
       this.resetForm("form");
     },
     /** 搜索按钮操作 */
     handleQuery() {
       this.queryParams.pageNum = 1;
+      if (this.chooseDate == null) {
+        this.chooseDate = []
+      }
+      this.queryParams.startDate = this.chooseDate[0]
+      this.queryParams.endDate = this.chooseDate[1]
       this.getList();
     },
     /** 重置按钮操作 */
     resetQuery() {
       this.resetForm("queryForm");
+      this.chooseDate = "";
       this.handleQuery();
     },
     // 多选框选中数据
@@ -395,6 +429,16 @@ export default {
         }
       });
     },
+    calculateWeekNumber() {
+      console.log(this.form.checkDate)
+      if (this.form.checkDate) {
+        const date = new Date(this.form.checkDate);
+        const yearStart = new Date(date.getFullYear(), 0, 1);
+        const days = Math.floor((date - yearStart) / (24 * 60 * 60 * 1000));
+        const weekNumber = Math.ceil((days + yearStart.getDay() + 1) / 7);
+        this.form.weekNo = weekNumber;
+      }
+    },
     /** 删除按钮操作 */
     handleDelete(row) {
       const ids = row.id || this.ids;

+ 125 - 38
ui/src/views/sems/safecheck/weekcheck/index.vue

@@ -2,11 +2,18 @@
   <div class="app-container">
     <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
       <el-form-item label="检查日期" prop="checkDate">
-        <el-date-picker clearable size="small" style="width: 200px"
-          v-model="queryParams.checkDate"
-          type="date"
+        <el-date-picker
+          v-model="chooseDate"
+          @change="handleQuery"
+          type="daterange"
+          style="width: 508px"
+          align="right"
+          unlink-panels
+          :range-separator="$t('至')"
+          :start-placeholder="$t('开始日期')"
+          :end-placeholder="$t('结束日期')"
           value-format="yyyy-MM-dd"
-          placeholder="选择检查日期">
+          :picker-options="pickerOptions">
         </el-date-picker>
       </el-form-item>
 
@@ -36,24 +43,35 @@
           v-hasPermi="['safecheck:weekcheck: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:weekcheck:remove']"-->
+<!--        >删除</el-button>-->
+<!--      </el-col>-->
       <el-col :span="1.5">
         <el-button
-          type="danger"
-          icon="el-icon-delete"
+          type="primary"
+          icon="el-icon-download"
           size="mini"
           :disabled="multiple"
-          @click="handleDelete"
-          v-hasPermi="['safecheck:weekcheck:remove']"
-        >删除</el-button>
+          @click="handleDownload"
+        >批量下载Word
+        </el-button>
       </el-col>
       <el-col :span="1.5">
         <el-button
-          type="warning"
+          type="primary"
           icon="el-icon-download"
           size="mini"
-          @click="handleExport"
-          v-hasPermi="['safecheck:weekcheck:export']"
-        >导出</el-button>
+          :disabled="multiple"
+          @click="handleDownloadPdf"
+        >批量下载PDF
+        </el-button>
       </el-col>
 	  <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
@@ -81,6 +99,7 @@
       <el-table-column label="操作" align="center" fixed="right" width="120" class-name="small-padding fixed-width">
         <template slot-scope="scope">
           <el-button
+            v-if="scope.row.status == 0"
             size="mini"
             type="text"
             icon="el-icon-edit"
@@ -88,6 +107,7 @@
             v-hasPermi="['safecheck:weekcheck:edit']"
           >修改</el-button>
           <el-button
+            v-if="scope.row.status == 2"
             size="mini"
             type="text"
             icon="el-icon-delete"
@@ -135,10 +155,10 @@
         </el-row>
 
         <el-form-item label-width="150px" label="上周安全风险隐患问题整改核实情况" prop="lastWeekRisk">
-          <el-input v-model="form.lastWeekRisk" type="textarea" placeholder="请输入内容" />
+          <el-input v-model="form.lastWeekRisk"  :autosize="{ minRows: 2, maxRows: 9}" type="textarea" placeholder="请输入内容" />
         </el-form-item>
         <el-form-item label-width="150px" label="本周主要安全风险隐患和整改情况" prop="thisWeekRisk">
-          <el-input v-model="form.thisWeekRisk" type="textarea" placeholder="请输入内容" />
+          <el-input v-model="form.thisWeekRisk" :autosize="{ minRows: 2, maxRows: 9}" type="textarea" placeholder="请输入内容" />
         </el-form-item>
         <el-form-item label-width="150px" label="本周安全管理情况评价">
           <el-radio-group v-model="form.safeCondition">
@@ -147,19 +167,19 @@
           </el-radio-group>
         </el-form-item>
         <el-form-item label-width="150px" label="下周工作重点" prop="nextWeekWork">
-          <el-input v-model="form.nextWeekWork" type="textarea" placeholder="请输入内容" />
-        </el-form-item>
-        <el-form-item label-width="150px" label="安全管理员" prop="safeAdminId">
-          <el-select v-model="form.safeAdminId" filterable placeholder="安全管理员">
-            <el-option
-              v-for="item in userOption"
-              :key="item.userId"
-              :label="item.nickName"
-              :value="item.userId"
-              >
-            </el-option>
-          </el-select>
+          <el-input v-model="form.nextWeekWork" :autosize="{ minRows: 2, maxRows: 9}" type="textarea" placeholder="请输入内容" />
         </el-form-item>
+<!--        <el-form-item label-width="150px" label="安全管理员" prop="safeAdminId">-->
+<!--          <el-select v-model="form.safeAdminId" filterable placeholder="安全管理员">-->
+<!--            <el-option-->
+<!--              v-for="item in userOption"-->
+<!--              :key="item.userId"-->
+<!--              :label="item.nickName"-->
+<!--              :value="item.userId"-->
+<!--              >-->
+<!--            </el-option>-->
+<!--          </el-select>-->
+<!--        </el-form-item>-->
         <el-form-item label-width="150px" label="安全管理员意见" prop="safeAdminSug">
           <el-input v-model="form.safeAdminSug" type="textarea" placeholder="请输入内容" />
         </el-form-item>
@@ -174,9 +194,9 @@
             </el-option>
           </el-select>
         </el-form-item>
-        <el-form-item label-width="150px" label="安全总监意见" prop="safeDirSug">
-          <el-input v-model="form.safeDirSug" type="textarea" placeholder="请输入内容" />
-        </el-form-item>
+<!--        <el-form-item label-width="150px" label="安全总监意见" prop="safeDirSug">-->
+<!--          <el-input v-model="form.safeDirSug" type="textarea" placeholder="请输入内容" />-->
+<!--        </el-form-item>-->
       </el-form>
       <div slot="footer" class="dialog-footer">
         <el-button type="primary" @click="submitForm">确 定</el-button>
@@ -231,12 +251,17 @@
         </el-carousel>
       </div>
     </el-dialog>
-
+    <form ref="downloadForm2" :action="downloadWordAction" target="FORMSUBMIT">
+      <input name="id" v-model="downloadForm2.id" hidden/>
+    </form>
+    <form ref="downloadFormPdf" :action="downloadWordActionPdf" target="FORMSUBMIT">
+      <input name="id" v-model="downloadFormPdf.id" hidden/>
+    </form>
   </div>
 </template>
 
 <script>
-import {wordView, listWeekcheck, getWeekcheck, delWeekcheck, addWeekcheck, updateWeekcheck, exportWeekcheck, importTemplate} from "@/api/sems/safecheck/weekcheck";
+import {wordView,getWeekcheckByWeek, listWeekcheck, getWeekcheck, delWeekcheck, addWeekcheck, updateWeekcheck, exportWeekcheck, importTemplate} from "@/api/sems/safecheck/weekcheck";
 import { treeselect } from "@/api/system/dept";
 import { getToken } from "@/utils/auth";
 import Treeselect from "@riophae/vue-treeselect";
@@ -311,8 +336,46 @@ export default {
         safeAdminSug: null,
         safeDirSug: null
       },
+      //日期快速选择
+      pickerOptions: {
+        shortcuts: [{
+          text: this.$t('最近一周'),
+          onClick(picker) {
+            const end = new Date();
+            const start = new Date();
+            start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
+            picker.$emit('pick', [start, end]);
+          }
+        }, {
+          text: this.$t('最近一个月'),
+          onClick(picker) {
+            const end = new Date();
+            const start = new Date();
+            start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
+            picker.$emit('pick', [start, end]);
+          }
+        }, {
+          text: this.$t('最近三个月'),
+          onClick(picker) {
+            const end = new Date();
+            const start = new Date();
+            start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
+            picker.$emit('pick', [start, end]);
+          }
+        }]
+      },
+      //日期选择器
+      chooseDate: [],
       // 表单参数
       form: {},
+      downloadForm2: {
+        id: '',
+      },
+      downloadWordAction: process.env.VUE_APP_BASE_API + '/safecheck/weekcheck/downloadWeekcheck',
+      downloadFormPdf: {
+        id: '',
+      },
+      downloadWordActionPdf: process.env.VUE_APP_BASE_API + '/safecheck/weekcheck/downloadWeekcheckPdf',
       // 表单校验
       rules: {
 
@@ -364,6 +427,11 @@ export default {
         type = 'success';
         return <el-tag type={type}>{s}</el-tag>;
       }
+      if (row.status === 2) {
+        let s = '已取消'
+        type = 'danger';
+        return <el-tag type={type}>{s}</el-tag>;
+      }
     },
     calculateWeekNumber() {
        console.log(this.form.checkDate)
@@ -378,14 +446,11 @@ export default {
       queryData.checkDate = this.form.checkDate
       queryData.weekNo =  this.form.weekNo
       getWeekcheckByWeek(queryData).then(response => {
-        response.data.safeAdminId = parseInt(response.data.safeAdminId)
-        response.data.safeDirId = parseInt(response.data.safeDirId)
-        this.form = response.data;
-        this.open = true;
+        this.form.lastWeekRisk = response.data.lastWeekRisk;
+        this.form.thisWeekRisk = response.data.thisWeekRisk;
+        this.form.nextWeekWork = response.data.nextWeekWork;
         this.title = "修改每周安全排查";
       });
-
-
     },
     // 取消按钮
     cancel() {
@@ -421,11 +486,17 @@ export default {
     /** 搜索按钮操作 */
     handleQuery() {
       this.queryParams.pageNum = 1;
+      if (this.chooseDate == null) {
+        this.chooseDate = []
+      }
+      this.queryParams.startDate = this.chooseDate[0]
+      this.queryParams.endDate = this.chooseDate[1]
       this.getList();
     },
     /** 重置按钮操作 */
     resetQuery() {
       this.resetForm("queryForm");
+      this.chooseDate = "";
       this.handleQuery();
     },
     // 多选框选中数据
@@ -438,6 +509,7 @@ export default {
     handleAdd() {
       this.reset();
       this.open = true;
+      this.form.safeAdminSug = '无'
       this.title = "添加每周安全排查";
     },
     /** 修改按钮操作 */
@@ -595,7 +667,22 @@ export default {
         window.open(this.pdf.pdfUrl)
       }
     },
+    handleDownload() {
+      const ids = this.ids;
+      this.downloadForm2.id = ids.join(',')
 
+      this.$nextTick(() => {
+        this.$refs['downloadForm2'].submit()
+      })
+    },
+    handleDownloadPdf() {
+      const ids = this.ids;
+      this.downloadFormPdf.id = ids.join(',')
+      this.$nextTick(() => {
+        this.$refs['downloadFormPdf'].submit()
+      })
+
+    },
   }
 };
 </script>

+ 4 - 1
ui/src/views/system/user/index.vue

@@ -352,6 +352,7 @@
                 <img v-if="imageUrl" :src="imageUrl" class="avatar">
                 <i v-else class="el-icon-plus avatar-uploader-icon"></i>
               </el-upload>
+
             </el-form-item>
           </el-col>
         </el-row>
@@ -449,10 +450,11 @@ import { getToken } from "@/utils/auth";
 import {userDeptTreeselect, treeselect} from "@/api/system/dept";
 import Treeselect from "@riophae/vue-treeselect";
 import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+import userAvatar from "./profile/userAvatar";
 
 export default {
   name: "User",
-  components: { Treeselect },
+  components: { Treeselect,userAvatar },
   data() {
     return {
       // 遮罩层
@@ -754,6 +756,7 @@ export default {
         }
       });
     },
+
     /** 删除按钮操作 */
     handleDelete(row) {
       const userIds = row.userId || this.ids;

+ 23 - 13
ui/src/views/system/user/profile/userInfo.vue

@@ -29,18 +29,20 @@
       </el-select>
     </el-form-item>
     <el-form-item :label="$t('签名')">
-        <el-upload
-          v-if="imageUrl"
-          class="avatar-uploader"
-          :action="signPic.url"
-          :headers="signPic.headers"
-          :show-file-list="false"
-          :on-success="handleAvatarSuccess"
-          :before-upload="beforeAvatarUpload"
-        >
-          <img v-if="user.imageUrl" :src="user.imageUrl" class="avatar">
-          <i v-else class="el-icon-plus avatar-uploader-icon"></i>
-        </el-upload>
+<!--        <el-upload-->
+<!--          v-if="imageUrl"-->
+<!--          class="avatar-uploader"-->
+<!--          :action="signPic.url"-->
+<!--          :headers="signPic.headers"-->
+<!--          :show-file-list="false"-->
+<!--          :on-success="handleAvatarSuccess"-->
+<!--          :before-upload="beforeAvatarUpload"-->
+<!--        >-->
+<!--          <img v-if="user.imageUrl" :src="user.imageUrl" class="avatar">-->
+<!--          <i v-else class="el-icon-plus avatar-uploader-icon"></i>-->
+<!--        </el-upload>-->
+
+      <userSign :user="user" @updateUser="updateUser"/>
     </el-form-item>
     <el-form-item>
       <el-button type="primary" size="mini" @click="submit">保存</el-button>
@@ -52,8 +54,10 @@
 <script>
 import { updateUserProfile } from "@/api/system/user";
 import {getToken} from "@/utils/auth";
-
+import userSign from "./userSign";
 export default {
+  components: { userSign },
+
   props: {
     user: {
       type: Object
@@ -109,6 +113,12 @@ export default {
         }
       });
     },
+    updateUser(newUrl) {
+      // 更新父组件中的用户数据
+      this.user.imageUrl = newUrl;
+      this.$forceUpdate();
+      console.log(newUrl)
+    },
     close() {
       this.$store.dispatch("tagsView/delView", this.$route);
       this.$router.push({ path: "/index" });

+ 149 - 0
ui/src/views/system/user/profile/userSign.vue

@@ -0,0 +1,149 @@
+<template>
+  <div>
+<!--    <img v-bind:src="options.img" @click="editCropper()" title="点击上传签名" class="img-circle img-lg" />-->
+    <img v-if="options.img" :src="options.img" @click="editCropper()" style="width: 200px; height: 100px;" class="avatar">
+    <img v-else :src="user.imageUrl" @click="editCropper()" style="width: 200px; height: 100px;" class="avatar">
+
+    <el-dialog  :close-on-click-modal="false" v-dialogDrag :title="title" :visible.sync="open" width="800px" append-to-body @opened="modalOpened">
+      <el-row>
+        <el-col :xs="24" :md="12" :style="{height: '350px'}">
+          <vue-cropper
+            ref="cropper"
+            :img="options.img"
+            :info="true"
+            :autoCrop="options.autoCrop"
+            :autoCropWidth="options.autoCropWidth"
+            :autoCropHeight="options.autoCropHeight"
+            :fixedBox="options.fixedBox"
+            @realTime="realTime"
+            v-if="visible"
+          />
+        </el-col>
+        <el-col :xs="24" :md="12" :style="{height: '350px'}">
+          <div class="sign-upload-preview">
+            <img :src="previews.url" :style="previews.img" />
+          </div>
+        </el-col>
+      </el-row>
+      <br />
+      <el-row>
+        <el-col :lg="2" :md="2">
+          <el-upload action="#" :http-request="requestUpload" :show-file-list="false" :before-upload="beforeUpload">
+            <el-button size="small">
+              上传
+              <i class="el-icon-upload el-icon--right"></i>
+            </el-button>
+          </el-upload>
+        </el-col>
+        <el-col :lg="{span: 1, offset: 2}" :md="2">
+          <el-button icon="el-icon-plus" size="small" @click="changeScale(1)"></el-button>
+        </el-col>
+        <el-col :lg="{span: 1, offset: 1}" :md="2">
+          <el-button icon="el-icon-minus" size="small" @click="changeScale(-1)"></el-button>
+        </el-col>
+        <el-col :lg="{span: 1, offset: 1}" :md="2">
+          <el-button icon="el-icon-refresh-left" size="small" @click="rotateLeft()"></el-button>
+        </el-col>
+        <el-col :lg="{span: 1, offset: 1}" :md="2">
+          <el-button icon="el-icon-refresh-right" size="small" @click="rotateRight()"></el-button>
+        </el-col>
+        <el-col :lg="{span: 2, offset: 6}" :md="2">
+          <el-button type="primary" size="small" @click="uploadImg()">提 交</el-button>
+        </el-col>
+      </el-row>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import store from "@/store";
+import { VueCropper } from "vue-cropper";
+import { uploadSign } from "@/api/system/user";
+
+export default {
+  components: { VueCropper },
+  props: {
+    user: {
+      type: Object
+    }
+  },
+  data() {
+    return {
+      // 是否显示弹出层
+      open: false,
+      // 是否显示cropper
+      visible: false,
+      // 弹出层标题
+      title: "修改签名",
+      options: {
+        img: this.user.imageUrl, //裁剪图片的地址
+        autoCrop: true, // 是否默认生成截图框
+        autoCropWidth: 200, // 默认生成截图框宽度
+        autoCropHeight: 100, // 默认生成截图框高度
+        fixedBox: true // 固定截图框大小 不允许改变
+      },
+      previews: {}
+    };
+  },
+  methods: {
+    // 编辑头像
+    editCropper() {
+      this.open = true;
+    },
+    // 打开弹出层结束时的回调
+    modalOpened() {
+      this.visible = true;
+    },
+    // 覆盖默认的上传行为
+    requestUpload() {
+    },
+    // 向左旋转
+    rotateLeft() {
+      this.$refs.cropper.rotateLeft();
+    },
+    // 向右旋转
+    rotateRight() {
+      this.$refs.cropper.rotateRight();
+    },
+    // 图片缩放
+    changeScale(num) {
+      num = num || 1;
+      this.$refs.cropper.changeScale(num);
+    },
+    // 上传预处理
+    beforeUpload(file) {
+      if (file.type.indexOf("image/") == -1) {
+        this.msgError("文件格式错误,请上传图片类型,如:JPG,PNG后缀的文件。");
+      } else {
+        const reader = new FileReader();
+        reader.readAsDataURL(file);
+        reader.onload = () => {
+          this.options.img = reader.result;
+        };
+      }
+    },
+
+    // 上传图片
+    uploadImg() {
+      this.$refs.cropper.getCropBlob(data => {
+        let formData = new FormData();
+        formData.append("file", data);
+        uploadSign(formData).then(response => {
+          this.open = false;
+          this.options.img = process.env.VUE_APP_BASE_API + response.msg;
+          this.user.signUrl = response.msg
+          this.$nextTick(() => {
+            this.$emit('updateUser', this.options.img);
+          })
+          this.msgSuccess(this.$t('修改成功'));
+          this.visible = false;
+        });
+      });
+    },
+    // 实时预览
+    realTime(data) {
+      this.previews = data;
+    }
+  }
+};
+</script>

+ 9 - 2
ui/src/views/training/trainingrecords/index.vue

@@ -385,7 +385,7 @@
       </div>
     </el-dialog>
     <!-- 公司级培训跟踪矩阵对话框 -->
-    <el-dialog  :close-on-click-modal="false" v-dialogDrag :title="companyTrainingTitle" :visible.sync="companyTrainingOpen" width="1400px"
+    <el-dialog class="noneHoveTable"  :close-on-click-modal="false" v-dialogDrag :title="companyTrainingTitle" :visible.sync="companyTrainingOpen" width="1400px"
                append-to-body @close="closeDialog()">
       <div>
         <svg-icon icon-class="rectangleGreen" class="rectangleGreen"></svg-icon>
@@ -1637,7 +1637,10 @@ export default {
   color: black;
 }
 
-.el-dialog__body {
+::v-deep.el-table tbody tr:hover > td {
+  background-color: transparent !important;
+}
+  .el-dialog__body {
   padding-top: 0px
 }
 
@@ -1656,4 +1659,8 @@ export default {
   height: 30px !important;
   margin-bottom: -8px;
 }
+
+
 </style>
+
+

+ 6 - 26
ui/src/views/training/workcertificateCbps/index.vue

@@ -238,8 +238,8 @@
     />
 
     <!-- 添加或修改作业证书一览对话框 -->
-    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
-      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+    <el-dialog :title="title" :visible.sync="open" width="800px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="160px">
         <el-form-item label="装置名称" prop="plantCode">
           <el-select v-model="form.plantCode" placeholder="请选择装置名称">
             <el-option
@@ -266,9 +266,6 @@
             ></el-option>
           </el-select>
         </el-form-item>
-        <el-form-item label="压力容器" prop="container">
-          <el-input v-model="form.container" placeholder="请输入压力容器" />
-        </el-form-item>
         <el-form-item label="压力容器取证日期" prop="containerDate">
           <el-date-picker clearable size="small" style="width: 200px"
             v-model="form.containerDate"
@@ -285,9 +282,6 @@
             placeholder="选择压力容器证有效期">
           </el-date-picker>
         </el-form-item>
-        <el-form-item label="压力管道" prop="pipe">
-          <el-input v-model="form.pipe" placeholder="请输入压力管道" />
-        </el-form-item>
         <el-form-item label="压力管道取证日期" prop="pipeDate">
           <el-date-picker clearable size="small" style="width: 200px"
             v-model="form.pipeDate"
@@ -304,9 +298,6 @@
             placeholder="选择压力管道证有效期">
           </el-date-picker>
         </el-form-item>
-        <el-form-item label="技术工人上岗证" prop="worker">
-          <el-input v-model="form.worker" placeholder="请输入技术工人上岗证" />
-        </el-form-item>
         <el-form-item label="技术工人上岗证取证日期" prop="workerDate">
           <el-date-picker clearable size="small" style="width: 200px"
             v-model="form.workerDate"
@@ -323,9 +314,6 @@
             placeholder="选择技术工人上岗证有效期">
           </el-date-picker>
         </el-form-item>
-        <el-form-item label="班组长安全培训" prop="foreman">
-          <el-input v-model="form.foreman" placeholder="请输入班组长安全培训" />
-        </el-form-item>
         <el-form-item label="班组长安全培训取证日期" prop="foremanDate">
           <el-date-picker clearable size="small" style="width: 200px"
             v-model="form.foremanDate"
@@ -342,9 +330,7 @@
             placeholder="选择班组长安全培训有效期">
           </el-date-picker>
         </el-form-item>
-        <el-form-item label="制冷与空调" prop="ac">
-          <el-input v-model="form.ac" placeholder="请输入制冷与空调" />
-        </el-form-item>
+
         <el-form-item label="制冷与空调取证日期" prop="acDate">
           <el-date-picker clearable size="small" style="width: 200px"
             v-model="form.acDate"
@@ -361,9 +347,7 @@
             placeholder="选择制冷与空调有效期">
           </el-date-picker>
         </el-form-item>
-        <el-form-item label="建筑物消防员职业资格证" prop="firefighter">
-          <el-input v-model="form.firefighter" placeholder="请输入建筑物消防员职业资格证" />
-        </el-form-item>
+
         <el-form-item label="建筑物消防员取证日期" prop="firefighterDate">
           <el-date-picker clearable size="small" style="width: 200px"
             v-model="form.firefighterDate"
@@ -380,9 +364,7 @@
             placeholder="选择建筑物消防员有效期">
           </el-date-picker>
         </el-form-item>
-        <el-form-item label="专职安全管理人员" prop="safety">
-          <el-input v-model="form.safety" placeholder="请输入专职安全管理人员" />
-        </el-form-item>
+
         <el-form-item label="安全员取证日期" prop="safetyDate">
           <el-date-picker clearable size="small" style="width: 200px"
             v-model="form.safetyDate"
@@ -399,9 +381,7 @@
             placeholder="选择安全员有效期">
           </el-date-picker>
         </el-form-item>
-        <el-form-item label="TDS" prop="tds">
-          <el-input v-model="form.tds" placeholder="请输入TDS" />
-        </el-form-item>
+
         <el-form-item label="TDS取证日期" prop="tdsDate">
           <el-date-picker clearable size="small" style="width: 200px"
             v-model="form.tdsDate"