Browse Source

```
feat(eoeg): 新增EOEG锁开锁关相关功能模块

新增了EOEG锁开锁关、审批流关联及申请变更三个核心业务模块,
包括对应的Controller、Service、Mapper和Domain类,支持数据导入、
导出、分页查询、新增、修改和删除操作,并完善了Excel模板下载功能。

同时优化了人员管理模块的查询逻辑,增加根据实际岗位查询用户信息接口,
并调整了相关Mapper和Service实现,移除了不必要的依赖和冗余代码。
```

jiangbiao 13 hours ago
parent
commit
cabe260781
37 changed files with 6708 additions and 12 deletions
  1. 3 0
      master/src/main/java/com/ruoyi/project/common/CommonController.java
  2. 103 0
      master/src/main/java/com/ruoyi/project/eoeg/controller/TEoegLockApplyController.java
  3. 103 0
      master/src/main/java/com/ruoyi/project/eoeg/controller/TEoegLockChangeController.java
  4. 211 0
      master/src/main/java/com/ruoyi/project/eoeg/controller/TEoegLockController.java
  5. 312 0
      master/src/main/java/com/ruoyi/project/eoeg/domain/TEoegLock.java
  6. 194 0
      master/src/main/java/com/ruoyi/project/eoeg/domain/TEoegLockApply.java
  7. 722 0
      master/src/main/java/com/ruoyi/project/eoeg/domain/TEoegLockChange.java
  8. 63 0
      master/src/main/java/com/ruoyi/project/eoeg/mapper/TEoegLockApplyMapper.java
  9. 63 0
      master/src/main/java/com/ruoyi/project/eoeg/mapper/TEoegLockChangeMapper.java
  10. 63 0
      master/src/main/java/com/ruoyi/project/eoeg/mapper/TEoegLockMapper.java
  11. 61 0
      master/src/main/java/com/ruoyi/project/eoeg/service/ITEoegLockApplyService.java
  12. 61 0
      master/src/main/java/com/ruoyi/project/eoeg/service/ITEoegLockChangeService.java
  13. 61 0
      master/src/main/java/com/ruoyi/project/eoeg/service/ITEoegLockService.java
  14. 93 0
      master/src/main/java/com/ruoyi/project/eoeg/service/impl/TEoegLockApplyServiceImpl.java
  15. 93 0
      master/src/main/java/com/ruoyi/project/eoeg/service/impl/TEoegLockChangeServiceImpl.java
  16. 93 0
      master/src/main/java/com/ruoyi/project/eoeg/service/impl/TEoegLockServiceImpl.java
  17. 5 2
      master/src/main/java/com/ruoyi/project/plant/controller/TStaffmgrController.java
  18. 2 4
      master/src/main/java/com/ruoyi/project/plant/mapper/TStaffmgrMapper.java
  19. 2 1
      master/src/main/java/com/ruoyi/project/plant/service/ITStaffmgrService.java
  20. 7 1
      master/src/main/java/com/ruoyi/project/plant/service/impl/TStaffmgrServiceImpl.java
  21. 116 0
      master/src/main/resources/mybatis/eoeg/TEoegLockApplyMapper.xml
  22. 301 0
      master/src/main/resources/mybatis/eoeg/TEoegLockChangeMapper.xml
  23. 156 0
      master/src/main/resources/mybatis/eoeg/TEoegLockMapper.xml
  24. 11 4
      master/src/main/resources/mybatis/plant/TStaffmgrMapper.xml
  25. 175 0
      master/src/main/resources/processes/eoeg/eoegLock.bpmn
  26. BIN
      master/src/main/resources/static/template/eoeg/eoegLock.xlsx
  27. 53 0
      ui/src/api/eoeg/eoegChange.js
  28. 61 0
      ui/src/api/eoeg/eoegLock.js
  29. 53 0
      ui/src/api/eoeg/lockApply.js
  30. 7 0
      ui/src/api/plant/staffmgr.js
  31. 655 0
      ui/src/views/eoeg/eoegChange/index.vue
  32. 57 0
      ui/src/views/eoeg/eoegLock/eoeg-dashboard.vue
  33. 469 0
      ui/src/views/eoeg/eoegLock/index.vue
  34. 588 0
      ui/src/views/eoeg/eoegLock/lock-levelA.vue
  35. 588 0
      ui/src/views/eoeg/eoegLock/lock-levelB.vue
  36. 588 0
      ui/src/views/eoeg/eoegLock/lock-levelC.vue
  37. 515 0
      ui/src/views/eoeg/lockApply/index.vue

+ 3 - 0
master/src/main/java/com/ruoyi/project/common/CommonController.java

@@ -463,6 +463,9 @@ public class CommonController extends BaseController
         }else if( type.equals("operationlist") ) {
             downloadname = "工艺事件清单导入模板.xlsx";
             url = "static/template/issue/OperationlistTmpl.xlsx";
+        } else if( type.equals("eoegLock") ) {
+            downloadname = "Eoeg锁开锁关导入模板.xlsx";
+            url = "static/template/eoeg/eoegLock.xlsx";
         }
 
         InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream(url);

+ 103 - 0
master/src/main/java/com/ruoyi/project/eoeg/controller/TEoegLockApplyController.java

@@ -0,0 +1,103 @@
+package com.ruoyi.project.eoeg.controller;
+
+import java.util.List;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.framework.aspectj.lang.annotation.Log;
+import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
+import com.ruoyi.project.eoeg.domain.TEoegLockApply;
+import com.ruoyi.project.eoeg.service.ITEoegLockApplyService;
+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;
+
+/**
+ * EOEG 审批流关联Controller
+ *
+ * @author ssy
+ * @date 2025-09-19
+ */
+@RestController
+@RequestMapping("/eoeg/lockApply")
+public class TEoegLockApplyController extends BaseController
+{
+    @Autowired
+    private ITEoegLockApplyService tEoegLockApplyService;
+
+    /**
+     * 查询EOEG 审批流关联列表
+     */
+    @PreAuthorize("@ss.hasPermi('eoeg:lockApply:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TEoegLockApply tEoegLockApply)
+    {
+        startPage();
+        List<TEoegLockApply> list = tEoegLockApplyService.selectTEoegLockApplyList(tEoegLockApply);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出EOEG 审批流关联列表
+     */
+    @PreAuthorize("@ss.hasPermi('eoeg:lockApply:export')")
+    @Log(title = "EOEG 审批流关联", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult export(TEoegLockApply tEoegLockApply)
+    {
+        List<TEoegLockApply> list = tEoegLockApplyService.selectTEoegLockApplyList(tEoegLockApply);
+        ExcelUtil<TEoegLockApply> util = new ExcelUtil<TEoegLockApply>(TEoegLockApply.class);
+        return util.exportExcel(list, "lockApply");
+    }
+
+    /**
+     * 获取EOEG 审批流关联详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('eoeg:lockApply:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return AjaxResult.success(tEoegLockApplyService.selectTEoegLockApplyById(id));
+    }
+
+    /**
+     * 新增EOEG 审批流关联
+     */
+    @PreAuthorize("@ss.hasPermi('eoeg:lockApply:add')")
+    @Log(title = "EOEG 审批流关联", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TEoegLockApply tEoegLockApply)
+    {
+        return toAjax(tEoegLockApplyService.insertTEoegLockApply(tEoegLockApply));
+    }
+
+    /**
+     * 修改EOEG 审批流关联
+     */
+    @PreAuthorize("@ss.hasPermi('eoeg:lockApply:edit')")
+    @Log(title = "EOEG 审批流关联", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TEoegLockApply tEoegLockApply)
+    {
+        return toAjax(tEoegLockApplyService.updateTEoegLockApply(tEoegLockApply));
+    }
+
+    /**
+     * 删除EOEG 审批流关联
+     */
+    @PreAuthorize("@ss.hasPermi('eoeg:lockApply:remove')")
+    @Log(title = "EOEG 审批流关联", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(tEoegLockApplyService.deleteTEoegLockApplyByIds(ids));
+    }
+}

+ 103 - 0
master/src/main/java/com/ruoyi/project/eoeg/controller/TEoegLockChangeController.java

@@ -0,0 +1,103 @@
+package com.ruoyi.project.eoeg.controller;
+
+import java.util.List;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.framework.aspectj.lang.annotation.Log;
+import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
+import com.ruoyi.project.eoeg.domain.TEoegLockChange;
+import com.ruoyi.project.eoeg.service.ITEoegLockChangeService;
+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;
+
+/**
+ * EOEG 锁开锁关申请Controller
+ *
+ * @author ssy
+ * @date 2025-09-19
+ */
+@RestController
+@RequestMapping("/eoeg/eoegChange")
+public class TEoegLockChangeController extends BaseController
+{
+    @Autowired
+    private ITEoegLockChangeService tEoegLockChangeService;
+
+    /**
+     * 查询EOEG 锁开锁关申请列表
+     */
+    @PreAuthorize("@ss.hasPermi('eoeg:eoegChange:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TEoegLockChange tEoegLockChange)
+    {
+        startPage();
+        List<TEoegLockChange> list = tEoegLockChangeService.selectTEoegLockChangeList(tEoegLockChange);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出EOEG 锁开锁关申请列表
+     */
+    @PreAuthorize("@ss.hasPermi('eoeg:eoegChange:export')")
+    @Log(title = "EOEG 锁开锁关申请", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult export(TEoegLockChange tEoegLockChange)
+    {
+        List<TEoegLockChange> list = tEoegLockChangeService.selectTEoegLockChangeList(tEoegLockChange);
+        ExcelUtil<TEoegLockChange> util = new ExcelUtil<TEoegLockChange>(TEoegLockChange.class);
+        return util.exportExcel(list, "eoegChange");
+    }
+
+    /**
+     * 获取EOEG 锁开锁关申请详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('eoeg:eoegChange:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return AjaxResult.success(tEoegLockChangeService.selectTEoegLockChangeById(id));
+    }
+
+    /**
+     * 新增EOEG 锁开锁关申请
+     */
+    @PreAuthorize("@ss.hasPermi('eoeg:eoegChange:add')")
+    @Log(title = "EOEG 锁开锁关申请", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TEoegLockChange tEoegLockChange)
+    {
+        return toAjax(tEoegLockChangeService.insertTEoegLockChange(tEoegLockChange));
+    }
+
+    /**
+     * 修改EOEG 锁开锁关申请
+     */
+    @PreAuthorize("@ss.hasPermi('eoeg:eoegChange:edit')")
+    @Log(title = "EOEG 锁开锁关申请", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TEoegLockChange tEoegLockChange)
+    {
+        return toAjax(tEoegLockChangeService.updateTEoegLockChange(tEoegLockChange));
+    }
+
+    /**
+     * 删除EOEG 锁开锁关申请
+     */
+    @PreAuthorize("@ss.hasPermi('eoeg:eoegChange:remove')")
+    @Log(title = "EOEG 锁开锁关申请", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(tEoegLockChangeService.deleteTEoegLockChangeByIds(ids));
+    }
+}

+ 211 - 0
master/src/main/java/com/ruoyi/project/eoeg/controller/TEoegLockController.java

@@ -0,0 +1,211 @@
+package com.ruoyi.project.eoeg.controller;
+
+import com.alibaba.fastjson.JSON;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.file.ExcelUtils;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.framework.aspectj.lang.annotation.Log;
+import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
+import com.ruoyi.framework.web.controller.BaseController;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.framework.web.page.TableDataInfo;
+import com.ruoyi.project.eoeg.domain.TEoegLock;
+import com.ruoyi.project.eoeg.service.ITEoegLockService;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * EOEG 锁开锁关Controller
+ *
+ * @author ssy
+ * @date 2025-09-19
+ */
+@RestController
+@RequestMapping("/eoeg/eoegLock")
+public class TEoegLockController extends BaseController {
+    @Autowired
+    private ITEoegLockService tEoegLockService;
+
+    /**
+     * 查询EOEG 锁开锁关列表
+     */
+    @PreAuthorize("@ss.hasPermi('eoeg:eoegLock:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TEoegLock tEoegLock) {
+        startPage();
+        List<TEoegLock> list = tEoegLockService.selectTEoegLockList(tEoegLock);
+        return getDataTable(list);
+    }
+
+    @PreAuthorize("@ss.hasPermi('eoeg:eoegLock:list')")
+    @GetMapping("/listLockBranch")
+    public TableDataInfo listLockBranch(TEoegLock tEoegLock) {
+        //查询所有锁数据
+        startPage();
+        List<TEoegLock> list = tEoegLockService.selectTEoegLockList(tEoegLock);
+        List<List<TEoegLock>> result = new ArrayList<>();//行元素
+        List<TEoegLock> item = new ArrayList<>();//列元素
+        int count = 1;//列统计
+        for (int i = 0; i < list.size(); i++) {
+            item.add(list.get(i));//添加列
+            if (count == 35) {//当列达到35个
+                count = 0;
+                result.add(item);//将所有列添加到行
+                item = new ArrayList<>();
+            } else if ((list.size() % 35) == (list.size() - i)) {//总数%35=它本身,即剩余锁个数不满35个时
+                item = new ArrayList<>(list.subList(i, list.size()));//将剩下的所有锁添加到列
+                for (int j = 0; j < (35 - (list.size() - i)); j++) {//填充空对象充满该行
+                    item.add(new TEoegLock());
+                }
+                result.add(item);
+                break;
+            }
+            count++;
+        }
+        return getDataTable(result);
+    }
+
+    /**
+     * 导出EOEG 锁开锁关列表
+     */
+    @PreAuthorize("@ss.hasPermi('eoeg:eoegLock:export')")
+    @Log(title = "EOEG 锁开锁关", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult export(TEoegLock tEoegLock) {
+        List<TEoegLock> list = tEoegLockService.selectTEoegLockList(tEoegLock);
+        ExcelUtil<TEoegLock> util = new ExcelUtil<TEoegLock>(TEoegLock.class);
+        return util.exportExcel(list, "eoegLock");
+    }
+
+    /**
+     * 获取EOEG 锁开锁关详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('eoeg:eoegLock:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id) {
+        return AjaxResult.success(tEoegLockService.selectTEoegLockById(id));
+    }
+
+    /**
+     * 新增EOEG 锁开锁关
+     */
+    @PreAuthorize("@ss.hasPermi('eoeg:eoegLock:add')")
+    @Log(title = "EOEG 锁开锁关", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TEoegLock tEoegLock) {
+        return toAjax(tEoegLockService.insertTEoegLock(tEoegLock));
+    }
+
+    /**
+     * 修改EOEG 锁开锁关
+     */
+    @PreAuthorize("@ss.hasPermi('eoeg:eoegLock:edit')")
+    @Log(title = "EOEG 锁开锁关", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TEoegLock tEoegLock) {
+        return toAjax(tEoegLockService.updateTEoegLock(tEoegLock));
+    }
+
+    /**
+     * 删除EOEG 锁开锁关
+     */
+    @PreAuthorize("@ss.hasPermi('eoeg:eoegLock:remove')")
+    @Log(title = "EOEG 锁开锁关", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids) {
+        return toAjax(tEoegLockService.deleteTEoegLockByIds(ids));
+    }
+
+    @PreAuthorize("@ss.hasPermi('eoeg:eoegLock:add')")
+    @Log(title = "EOEG 锁开锁关", businessType = BusinessType.INSERT)
+    @PostMapping("/importData")
+    public AjaxResult importData(@RequestParam("file") MultipartFile file) throws IOException {
+        //获取操作人员ID
+        Long userId = getUserId();
+        //报错行数统计
+        List<Integer> failRow = new ArrayList<>();
+        Workbook workbook = ExcelUtils.getWorkBook(file);
+        Sheet sheet = workbook.getSheetAt(0);
+        List<TEoegLock> list = new ArrayList<>();
+        int rowNum = sheet.getPhysicalNumberOfRows();
+        int failNumber = 0;
+        for (int i = 3; i < rowNum; i++) {
+            try {
+                logger.info("读取行数:" + i);
+                Row row = sheet.getRow(i);
+                int cellNum = row.getLastCellNum();
+                TEoegLock entity = new TEoegLock();
+                for (int j = 0; j < cellNum; j++) {
+                    Cell cell = row.getCell(j);
+                    String cellValue = ExcelUtils.getCellValue(cell);
+                    logger.info("cellValue:" + cellValue);
+                    if (j == 0) {
+                        entity.setUniqueIdentifier(cellValue);
+                    } else if (j == 1) {
+                        entity.setRiskLevel(cellValue);
+                    } else if (j == 2) {
+                        entity.setManagementLevel(cellValue);
+                    } else if (j == 3) {
+                        entity.setStature(cellValue);
+                    } else if (j == 4) {
+                        entity.setMedium(cellValue);
+                    } else if (j == 5) {
+                        entity.setPosition(cellValue);
+                    } else if (j == 6) {
+                        entity.setLocationDes(cellValue);
+                    } else if (j == 7) {
+                        entity.setValveStatus(StringUtils.isNotEmpty(cellValue) ? "LCHQ" : entity.getValveStatus());
+                    } else if (j == 8) {
+                        entity.setValveStatus(StringUtils.isNotEmpty(cellValue) ? "LOHQ" : entity.getValveStatus());
+                    } else if (j == 9) {
+                        entity.setValveType(cellValue);
+                    } else if (j == 10) {
+                        entity.setValveSize(cellValue);
+                    } else if (j == 11) {
+                        entity.setReasons(cellValue);
+                    } else if (j == 12) {
+                        entity.setRemarks(cellValue);
+                    }
+                }
+                entity.setCreaterCode(userId.toString());
+                entity.setCreatedate(new Date());
+                logger.info("entity:" + entity);
+                list.add(entity);
+            } catch (Exception e) {
+                logger.error("Exception:{}", e.getMessage());
+                failNumber++;
+                failRow.add(i + 1);
+            }
+        }
+        int successNumber = 0;
+        int failNum = 0;
+        for (TEoegLock t : list
+        ) {
+            failNum++;
+            try {
+                add(t);
+                successNumber++;
+            } catch (Exception e) {
+                failNumber++;
+                failRow.add(failNum + 1);
+                e.printStackTrace();
+            }
+        }
+        logger.info("list:" + JSON.toJSONString(list));
+        logger.info("successNumber:" + String.valueOf(successNumber));
+        logger.info("failNumber:" + String.valueOf(failNumber));
+        logger.info("failRow:" + String.valueOf(failRow));
+        return AjaxResult.success(String.valueOf(successNumber), failRow);
+    }
+}

+ 312 - 0
master/src/main/java/com/ruoyi/project/eoeg/domain/TEoegLock.java

@@ -0,0 +1,312 @@
+package com.ruoyi.project.eoeg.domain;
+
+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;
+
+import java.util.Date;
+
+/**
+ * EOEG 锁开锁关对象 t_eoeg_lock
+ *
+ * @author ssy
+ * @date 2025-09-19
+ */
+public class TEoegLock extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 唯一标识ID */
+    private Long id;
+
+    /** 唯一编号 */
+    @Excel(name = "唯一编号")
+    private String uniqueIdentifier;
+
+    /** 风险等级 */
+    @Excel(name = "风险等级")
+    private String riskLevel;
+    @Excel(name = "管理等级")
+    private String managementLevel;
+
+    /** STATURE */
+    @Excel(name = "STATURE")
+    private String stature;
+
+    /** 介质 */
+    @Excel(name = "介质")
+    private String medium;
+
+    /** 地点 */
+    @Excel(name = "地点")
+    private String position;
+
+    /** 位置描述 */
+    @Excel(name = "位置描述")
+    private String locationDes;
+
+    /** 阀门状态 */
+    @Excel(name = "阀门状态")
+    private String valveStatus;
+
+    /** 阀门类型 */
+    @Excel(name = "阀门类型")
+    private String valveType;
+
+    /** 尺寸 */
+    @Excel(name = "尺寸")
+    private String valveSize;
+
+    /** 锁开/锁关原因 */
+    @Excel(name = "锁开/锁关原因")
+    private String reasons;
+
+    /** 备注 */
+    @Excel(name = "备注")
+    private String remarks;
+
+    /** 状态 */
+    @Excel(name = "状态")
+    private Long status;
+
+    /** 删除标识 */
+    private Long delFlag;
+
+    /** 创建人 */
+    @Excel(name = "创建人")
+    private String createrCode;
+
+    /** 创建时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd" , timezone = "GMT+8")
+    @Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date createdate;
+
+    /** 修改人 */
+    @Excel(name = "修改人")
+    private Long updaterCode;
+
+    /** 修改时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd" , timezone = "GMT+8")
+    @Excel(name = "修改时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date updatedate;
+
+    /** 部门id */
+    @Excel(name = "部门id")
+    private Long deptId;
+    private String deptName;
+
+    public String getManagementLevel() {
+        return managementLevel;
+    }
+
+    public void setManagementLevel(String managementLevel) {
+        this.managementLevel = managementLevel;
+    }
+
+    public String getDeptName() {
+        return deptName;
+    }
+
+    public void setDeptName(String deptName) {
+        this.deptName = deptName;
+    }
+
+    public void setId(Long id)
+    {
+        this.id = id;
+    }
+
+    public Long getId()
+    {
+        return id;
+    }
+    public void setUniqueIdentifier(String uniqueIdentifier)
+    {
+        this.uniqueIdentifier = uniqueIdentifier;
+    }
+
+    public String getUniqueIdentifier()
+    {
+        return uniqueIdentifier;
+    }
+    public void setRiskLevel(String riskLevel)
+    {
+        this.riskLevel = riskLevel;
+    }
+
+    public String getRiskLevel()
+    {
+        return riskLevel;
+    }
+    public void setStature(String stature)
+    {
+        this.stature = stature;
+    }
+
+    public String getStature()
+    {
+        return stature;
+    }
+    public void setMedium(String medium)
+    {
+        this.medium = medium;
+    }
+
+    public String getMedium()
+    {
+        return medium;
+    }
+    public void setPosition(String position)
+    {
+        this.position = position;
+    }
+
+    public String getPosition()
+    {
+        return position;
+    }
+    public void setLocationDes(String locationDes)
+    {
+        this.locationDes = locationDes;
+    }
+
+    public String getLocationDes()
+    {
+        return locationDes;
+    }
+    public void setValveStatus(String valveStatus)
+    {
+        this.valveStatus = valveStatus;
+    }
+
+    public String getValveStatus()
+    {
+        return valveStatus;
+    }
+    public void setValveType(String valveType)
+    {
+        this.valveType = valveType;
+    }
+
+    public String getValveType()
+    {
+        return valveType;
+    }
+    public void setValveSize(String valveSize)
+    {
+        this.valveSize = valveSize;
+    }
+
+    public String getValveSize()
+    {
+        return valveSize;
+    }
+    public void setReasons(String reasons)
+    {
+        this.reasons = reasons;
+    }
+
+    public String getReasons()
+    {
+        return reasons;
+    }
+    public void setRemarks(String remarks)
+    {
+        this.remarks = remarks;
+    }
+
+    public String getRemarks()
+    {
+        return remarks;
+    }
+    public void setStatus(Long status)
+    {
+        this.status = status;
+    }
+
+    public Long getStatus()
+    {
+        return status;
+    }
+    public void setDelFlag(Long delFlag)
+    {
+        this.delFlag = delFlag;
+    }
+
+    public Long getDelFlag()
+    {
+        return delFlag;
+    }
+    public void setCreaterCode(String createrCode)
+    {
+        this.createrCode = createrCode;
+    }
+
+    public String getCreaterCode()
+    {
+        return createrCode;
+    }
+    public void setCreatedate(Date createdate)
+    {
+        this.createdate = createdate;
+    }
+
+    public Date getCreatedate()
+    {
+        return createdate;
+    }
+    public void setUpdaterCode(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 setDeptId(Long deptId)
+    {
+        this.deptId = deptId;
+    }
+
+    public Long getDeptId()
+    {
+        return deptId;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("uniqueIdentifier", getUniqueIdentifier())
+            .append("riskLevel", getRiskLevel())
+            .append("stature", getStature())
+            .append("medium", getMedium())
+            .append("position", getPosition())
+            .append("locationDes", getLocationDes())
+            .append("valveStatus", getValveStatus())
+            .append("valveType", getValveType())
+            .append("valveSize", getValveSize())
+            .append("reasons", getReasons())
+            .append("remarks", getRemarks())
+            .append("status", getStatus())
+            .append("delFlag", getDelFlag())
+            .append("createrCode", getCreaterCode())
+            .append("createdate", getCreatedate())
+            .append("updaterCode", getUpdaterCode())
+            .append("updatedate", getUpdatedate())
+            .append("deptId", getDeptId())
+            .toString();
+    }
+}

+ 194 - 0
master/src/main/java/com/ruoyi/project/eoeg/domain/TEoegLockApply.java

@@ -0,0 +1,194 @@
+package com.ruoyi.project.eoeg.domain;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.framework.aspectj.lang.annotation.Excel;
+import com.ruoyi.framework.web.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+/**
+ * EOEG 审批流关联对象 t_eoeg_lock_apply
+ *
+ * @author ssy
+ * @date 2025-09-19
+ */
+public class TEoegLockApply extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** id */
+    private Long id;
+
+    /** 申请单 id */
+    @Excel(name = "申请单 id")
+    private Long changeId;
+
+    /** 申请编号 */
+    @Excel(name = "申请编号")
+    private String apNo;
+
+    /** 流程id */
+    @Excel(name = "流程id")
+    private String processId;
+
+    /** 备注 */
+    @Excel(name = "备注")
+    private String remarks;
+
+    /** 状态 */
+    @Excel(name = "状态")
+    private Long status;
+
+    /** 状态 0 :正常 ;1:删除 */
+    private Long delFlag;
+
+    /** 创建人 */
+    @Excel(name = "创建人")
+    private String createrCode;
+
+    /** 创建时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd" , timezone = "GMT+8")
+    @Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date createdate;
+
+    /** 修改人 */
+    @Excel(name = "修改人")
+    private Long updaterCode;
+
+    /** 修改时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd" , timezone = "GMT+8")
+    @Excel(name = "修改时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date updatedate;
+
+    /** 部门编号 */
+    @Excel(name = "部门编号")
+    private Long deptId;
+
+    public void setId(Long id)
+    {
+        this.id = id;
+    }
+
+    public Long getId()
+    {
+        return id;
+    }
+    public void setChangeId(Long changeId)
+    {
+        this.changeId = changeId;
+    }
+
+    public Long getChangeId()
+    {
+        return changeId;
+    }
+    public void setApNo(String apNo)
+    {
+        this.apNo = apNo;
+    }
+
+    public String getApNo()
+    {
+        return apNo;
+    }
+    public void setProcessId(String processId)
+    {
+        this.processId = processId;
+    }
+
+    public String getProcessId()
+    {
+        return processId;
+    }
+    public void setRemarks(String remarks)
+    {
+        this.remarks = remarks;
+    }
+
+    public String getRemarks()
+    {
+        return remarks;
+    }
+    public void setStatus(Long status)
+    {
+        this.status = status;
+    }
+
+    public Long getStatus()
+    {
+        return status;
+    }
+    public void setDelFlag(Long delFlag)
+    {
+        this.delFlag = delFlag;
+    }
+
+    public Long getDelFlag()
+    {
+        return delFlag;
+    }
+    public void setCreaterCode(String createrCode)
+    {
+        this.createrCode = createrCode;
+    }
+
+    public String getCreaterCode()
+    {
+        return createrCode;
+    }
+    public void setCreatedate(Date createdate)
+    {
+        this.createdate = createdate;
+    }
+
+    public Date getCreatedate()
+    {
+        return createdate;
+    }
+    public void setUpdaterCode(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 setDeptId(Long deptId)
+    {
+        this.deptId = deptId;
+    }
+
+    public Long getDeptId()
+    {
+        return deptId;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("changeId", getChangeId())
+            .append("apNo", getApNo())
+            .append("processId", getProcessId())
+            .append("remarks", getRemarks())
+            .append("status", getStatus())
+            .append("delFlag", getDelFlag())
+            .append("createrCode", getCreaterCode())
+            .append("createdate", getCreatedate())
+            .append("updaterCode", getUpdaterCode())
+            .append("updatedate", getUpdatedate())
+            .append("deptId", getDeptId())
+            .toString();
+    }
+}

+ 722 - 0
master/src/main/java/com/ruoyi/project/eoeg/domain/TEoegLockChange.java

@@ -0,0 +1,722 @@
+package com.ruoyi.project.eoeg.domain;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.framework.aspectj.lang.annotation.Excel;
+import com.ruoyi.framework.web.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+/**
+ * EOEG 锁开锁关申请对象 t_eoeg_lock_change
+ *
+ * @author ssy
+ * @date 2025-09-19
+ */
+public class TEoegLockChange extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 唯一标识ID */
+    private Long id;
+
+    /** 组织保护措施变更描述 */
+    @Excel(name = "组织保护措施变更描述")
+    private String changeDescribe;
+
+    /** 状态变更原因 */
+    @Excel(name = "状态变更原因")
+    private String changeReason;
+
+    /** 申请人id */
+    @Excel(name = "申请人id")
+    private String applicant;
+
+    /** 申请人姓名 */
+    @Excel(name = "申请人姓名")
+    private String applicantName;
+
+    /** 申请时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd" , timezone = "GMT+8")
+    @Excel(name = "申请时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date applicationTime;
+
+    /** 安全评估及临时的安全措施 */
+    @Excel(name = "安全评估及临时的安全措施")
+    private String safa;
+
+    /** 安全评估人id */
+    @Excel(name = "安全评估人id")
+    private String safaer;
+
+    /** 安全评估人姓名 */
+    @Excel(name = "安全评估人姓名")
+    private String safaerName;
+
+    /** 安全评估时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd" , timezone = "GMT+8")
+    @Excel(name = "安全评估时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date safaTime;
+
+    /** 批准人id */
+    @Excel(name = "批准人id")
+    private String approver;
+
+    /** 批准人姓名 */
+    @Excel(name = "批准人姓名")
+    private String approverName;
+
+    /** 批准时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd" , timezone = "GMT+8")
+    @Excel(name = "批准时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date approveTime;
+
+    /** 临时安全措施执行人id */
+    @Excel(name = "临时安全措施执行人id")
+    private String executor;
+
+    /** 临时安全措施执行人姓名 */
+    @Excel(name = "临时安全措施执行人姓名")
+    private String executorName;
+
+    /** 临时安全措施执行时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd" , timezone = "GMT+8")
+    @Excel(name = "临时安全措施执行时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date executionTime;
+
+    /** 临时安全措施确认人id */
+    @Excel(name = "临时安全措施确认人id")
+    private String confirmer;
+
+    /** 临时安全措施确认人姓名 */
+    @Excel(name = "临时安全措施确认人姓名")
+    private String confirmerName;
+
+    /** 临时安全措施确认时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd" , timezone = "GMT+8")
+    @Excel(name = "临时安全措施确认时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date confirmTime;
+
+    /** 组织保护措施状态变更执行 */
+    @Excel(name = "组织保护措施状态变更执行")
+    private String changeExecution;
+
+    /** 变更执行人id */
+    @Excel(name = "变更执行人id")
+    private String changeExecutor;
+
+    /** 变更执行人姓名 */
+    @Excel(name = "变更执行人姓名")
+    private String changeExecutorName;
+
+    /** 变更执行时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd" , timezone = "GMT+8")
+    @Excel(name = "变更执行时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date changeExecutorTime;
+
+    /** 组织保护措施是否已经恢复至变更前的状态 */
+    @Excel(name = "组织保护措施是否已经恢复至变更前的状态")
+    private String resetConfirm;
+
+    /** 状态恢复,确认人1id */
+    @Excel(name = "状态恢复,确认人1id")
+    private String resetConfirmer1;
+
+    /** 状态恢复,确认人1姓名 */
+    @Excel(name = "状态恢复,确认人1姓名")
+    private String resetConfirmerName1;
+
+    /** 状态恢复,确认时间1 */
+    @JsonFormat(pattern = "yyyy-MM-dd" , timezone = "GMT+8")
+    @Excel(name = "状态恢复,确认时间1", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date resetConfirmTime1;
+
+    /** 状态恢复,确认人2id */
+    @Excel(name = "状态恢复,确认人2id")
+    private String resetConfirmer2;
+
+    /** 状态恢复,确认人2姓名 */
+    @Excel(name = "状态恢复,确认人2姓名")
+    private String resetConfirmerName2;
+
+    /** 状态恢复,确认时间2 */
+    @JsonFormat(pattern = "yyyy-MM-dd" , timezone = "GMT+8")
+    @Excel(name = "状态恢复,确认时间2", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date resetConfirmTime2;
+
+    /** 状态恢复后,之前采取的安全措施是否已撤销: */
+    @Excel(name = "状态恢复后,之前采取的安全措施是否已撤销:")
+    private String revokeConfirm;
+
+    /** 备注 */
+    @Excel(name = "备注")
+    private String remarks;
+
+    /** 状态 */
+    @Excel(name = "状态")
+    private Long status;
+
+    /** 状态 0 :正常 ;1:删除 */
+    private Long delFlag;
+
+    /** 创建人 */
+    @Excel(name = "创建人")
+    private String createrCode;
+
+    /** 创建时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd" , timezone = "GMT+8")
+    @Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date createdate;
+
+    /** 修改人 */
+    @Excel(name = "修改人")
+    private Long updaterCode;
+
+    /** 修改时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd" , timezone = "GMT+8")
+    @Excel(name = "修改时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date updatedate;
+
+    /** 部门编号 */
+    @Excel(name = "部门编号")
+    private Long deptId;
+
+    /** 申请状态1:申请中,2:已通过,3:已拒绝 */
+    @Excel(name = "申请状态1:申请中,2:已通过,3:已拒绝")
+    private String approveStatus;
+
+    /** 申请编号 */
+    @Excel(name = "申请编号")
+    private String apNo;
+
+    /** 流程id */
+    @Excel(name = "流程id")
+    private String processId;
+
+    /** 破锁编号 */
+    @Excel(name = "破锁编号")
+    private String lockNo;
+
+    /** 变更确认人id */
+    @Excel(name = "变更确认人id")
+    private String changeConfirmer;
+
+    /** 变更确认人姓名 */
+    @Excel(name = "变更确认人姓名")
+    private String changeConfirmerName;
+
+    /** 变更确认人确认时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd" , timezone = "GMT+8")
+    @Excel(name = "变更确认人确认时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date changeConfirmTime;
+
+    /** 班长id */
+    @Excel(name = "班长id")
+    private String monitor;
+
+    /** 班长姓名 */
+    @Excel(name = "班长姓名")
+    private String monitorName;
+
+    /** 班长确认时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd" , timezone = "GMT+8")
+    @Excel(name = "班长确认时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date monitorTime;
+
+    public void setId(Long id)
+    {
+        this.id = id;
+    }
+
+    public Long getId()
+    {
+        return id;
+    }
+    public void setChangeDescribe(String changeDescribe)
+    {
+        this.changeDescribe = changeDescribe;
+    }
+
+    public String getChangeDescribe()
+    {
+        return changeDescribe;
+    }
+    public void setChangeReason(String changeReason)
+    {
+        this.changeReason = changeReason;
+    }
+
+    public String getChangeReason()
+    {
+        return changeReason;
+    }
+    public void setApplicant(String applicant)
+    {
+        this.applicant = applicant;
+    }
+
+    public String getApplicant()
+    {
+        return applicant;
+    }
+    public void setApplicantName(String applicantName)
+    {
+        this.applicantName = applicantName;
+    }
+
+    public String getApplicantName()
+    {
+        return applicantName;
+    }
+    public void setApplicationTime(Date applicationTime)
+    {
+        this.applicationTime = applicationTime;
+    }
+
+    public Date getApplicationTime()
+    {
+        return applicationTime;
+    }
+    public void setSafa(String safa)
+    {
+        this.safa = safa;
+    }
+
+    public String getSafa()
+    {
+        return safa;
+    }
+    public void setSafaer(String safaer)
+    {
+        this.safaer = safaer;
+    }
+
+    public String getSafaer()
+    {
+        return safaer;
+    }
+    public void setSafaerName(String safaerName)
+    {
+        this.safaerName = safaerName;
+    }
+
+    public String getSafaerName()
+    {
+        return safaerName;
+    }
+    public void setSafaTime(Date safaTime)
+    {
+        this.safaTime = safaTime;
+    }
+
+    public Date getSafaTime()
+    {
+        return safaTime;
+    }
+    public void setApprover(String approver)
+    {
+        this.approver = approver;
+    }
+
+    public String getApprover()
+    {
+        return approver;
+    }
+    public void setApproverName(String approverName)
+    {
+        this.approverName = approverName;
+    }
+
+    public String getApproverName()
+    {
+        return approverName;
+    }
+    public void setApproveTime(Date approveTime)
+    {
+        this.approveTime = approveTime;
+    }
+
+    public Date getApproveTime()
+    {
+        return approveTime;
+    }
+    public void setExecutor(String executor)
+    {
+        this.executor = executor;
+    }
+
+    public String getExecutor()
+    {
+        return executor;
+    }
+    public void setExecutorName(String executorName)
+    {
+        this.executorName = executorName;
+    }
+
+    public String getExecutorName()
+    {
+        return executorName;
+    }
+    public void setExecutionTime(Date executionTime)
+    {
+        this.executionTime = executionTime;
+    }
+
+    public Date getExecutionTime()
+    {
+        return executionTime;
+    }
+    public void setConfirmer(String confirmer)
+    {
+        this.confirmer = confirmer;
+    }
+
+    public String getConfirmer()
+    {
+        return confirmer;
+    }
+    public void setConfirmerName(String confirmerName)
+    {
+        this.confirmerName = confirmerName;
+    }
+
+    public String getConfirmerName()
+    {
+        return confirmerName;
+    }
+    public void setConfirmTime(Date confirmTime)
+    {
+        this.confirmTime = confirmTime;
+    }
+
+    public Date getConfirmTime()
+    {
+        return confirmTime;
+    }
+    public void setChangeExecution(String changeExecution)
+    {
+        this.changeExecution = changeExecution;
+    }
+
+    public String getChangeExecution()
+    {
+        return changeExecution;
+    }
+    public void setChangeExecutor(String changeExecutor)
+    {
+        this.changeExecutor = changeExecutor;
+    }
+
+    public String getChangeExecutor()
+    {
+        return changeExecutor;
+    }
+    public void setChangeExecutorName(String changeExecutorName)
+    {
+        this.changeExecutorName = changeExecutorName;
+    }
+
+    public String getChangeExecutorName()
+    {
+        return changeExecutorName;
+    }
+    public void setChangeExecutorTime(Date changeExecutorTime)
+    {
+        this.changeExecutorTime = changeExecutorTime;
+    }
+
+    public Date getChangeExecutorTime()
+    {
+        return changeExecutorTime;
+    }
+    public void setResetConfirm(String resetConfirm)
+    {
+        this.resetConfirm = resetConfirm;
+    }
+
+    public String getResetConfirm()
+    {
+        return resetConfirm;
+    }
+    public void setResetConfirmer1(String resetConfirmer1)
+    {
+        this.resetConfirmer1 = resetConfirmer1;
+    }
+
+    public String getResetConfirmer1()
+    {
+        return resetConfirmer1;
+    }
+    public void setResetConfirmerName1(String resetConfirmerName1)
+    {
+        this.resetConfirmerName1 = resetConfirmerName1;
+    }
+
+    public String getResetConfirmerName1()
+    {
+        return resetConfirmerName1;
+    }
+    public void setResetConfirmTime1(Date resetConfirmTime1)
+    {
+        this.resetConfirmTime1 = resetConfirmTime1;
+    }
+
+    public Date getResetConfirmTime1()
+    {
+        return resetConfirmTime1;
+    }
+    public void setResetConfirmer2(String resetConfirmer2)
+    {
+        this.resetConfirmer2 = resetConfirmer2;
+    }
+
+    public String getResetConfirmer2()
+    {
+        return resetConfirmer2;
+    }
+    public void setResetConfirmerName2(String resetConfirmerName2)
+    {
+        this.resetConfirmerName2 = resetConfirmerName2;
+    }
+
+    public String getResetConfirmerName2()
+    {
+        return resetConfirmerName2;
+    }
+    public void setResetConfirmTime2(Date resetConfirmTime2)
+    {
+        this.resetConfirmTime2 = resetConfirmTime2;
+    }
+
+    public Date getResetConfirmTime2()
+    {
+        return resetConfirmTime2;
+    }
+    public void setRevokeConfirm(String revokeConfirm)
+    {
+        this.revokeConfirm = revokeConfirm;
+    }
+
+    public String getRevokeConfirm()
+    {
+        return revokeConfirm;
+    }
+    public void setRemarks(String remarks)
+    {
+        this.remarks = remarks;
+    }
+
+    public String getRemarks()
+    {
+        return remarks;
+    }
+    public void setStatus(Long status)
+    {
+        this.status = status;
+    }
+
+    public Long getStatus()
+    {
+        return status;
+    }
+    public void setDelFlag(Long delFlag)
+    {
+        this.delFlag = delFlag;
+    }
+
+    public Long getDelFlag()
+    {
+        return delFlag;
+    }
+    public void setCreaterCode(String createrCode)
+    {
+        this.createrCode = createrCode;
+    }
+
+    public String getCreaterCode()
+    {
+        return createrCode;
+    }
+    public void setCreatedate(Date createdate)
+    {
+        this.createdate = createdate;
+    }
+
+    public Date getCreatedate()
+    {
+        return createdate;
+    }
+    public void setUpdaterCode(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 setDeptId(Long deptId)
+    {
+        this.deptId = deptId;
+    }
+
+    public Long getDeptId()
+    {
+        return deptId;
+    }
+    public void setApproveStatus(String approveStatus)
+    {
+        this.approveStatus = approveStatus;
+    }
+
+    public String getApproveStatus()
+    {
+        return approveStatus;
+    }
+    public void setApNo(String apNo)
+    {
+        this.apNo = apNo;
+    }
+
+    public String getApNo()
+    {
+        return apNo;
+    }
+    public void setProcessId(String processId)
+    {
+        this.processId = processId;
+    }
+
+    public String getProcessId()
+    {
+        return processId;
+    }
+    public void setLockNo(String lockNo)
+    {
+        this.lockNo = lockNo;
+    }
+
+    public String getLockNo()
+    {
+        return lockNo;
+    }
+    public void setChangeConfirmer(String changeConfirmer)
+    {
+        this.changeConfirmer = changeConfirmer;
+    }
+
+    public String getChangeConfirmer()
+    {
+        return changeConfirmer;
+    }
+    public void setChangeConfirmerName(String changeConfirmerName)
+    {
+        this.changeConfirmerName = changeConfirmerName;
+    }
+
+    public String getChangeConfirmerName()
+    {
+        return changeConfirmerName;
+    }
+    public void setChangeConfirmTime(Date changeConfirmTime)
+    {
+        this.changeConfirmTime = changeConfirmTime;
+    }
+
+    public Date getChangeConfirmTime()
+    {
+        return changeConfirmTime;
+    }
+    public void setMonitor(String monitor)
+    {
+        this.monitor = monitor;
+    }
+
+    public String getMonitor()
+    {
+        return monitor;
+    }
+    public void setMonitorName(String monitorName)
+    {
+        this.monitorName = monitorName;
+    }
+
+    public String getMonitorName()
+    {
+        return monitorName;
+    }
+    public void setMonitorTime(Date monitorTime)
+    {
+        this.monitorTime = monitorTime;
+    }
+
+    public Date getMonitorTime()
+    {
+        return monitorTime;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("changeDescribe", getChangeDescribe())
+            .append("changeReason", getChangeReason())
+            .append("applicant", getApplicant())
+            .append("applicantName", getApplicantName())
+            .append("applicationTime", getApplicationTime())
+            .append("safa", getSafa())
+            .append("safaer", getSafaer())
+            .append("safaerName", getSafaerName())
+            .append("safaTime", getSafaTime())
+            .append("approver", getApprover())
+            .append("approverName", getApproverName())
+            .append("approveTime", getApproveTime())
+            .append("executor", getExecutor())
+            .append("executorName", getExecutorName())
+            .append("executionTime", getExecutionTime())
+            .append("confirmer", getConfirmer())
+            .append("confirmerName", getConfirmerName())
+            .append("confirmTime", getConfirmTime())
+            .append("changeExecution", getChangeExecution())
+            .append("changeExecutor", getChangeExecutor())
+            .append("changeExecutorName", getChangeExecutorName())
+            .append("changeExecutorTime", getChangeExecutorTime())
+            .append("resetConfirm", getResetConfirm())
+            .append("resetConfirmer1", getResetConfirmer1())
+            .append("resetConfirmerName1", getResetConfirmerName1())
+            .append("resetConfirmTime1", getResetConfirmTime1())
+            .append("resetConfirmer2", getResetConfirmer2())
+            .append("resetConfirmerName2", getResetConfirmerName2())
+            .append("resetConfirmTime2", getResetConfirmTime2())
+            .append("revokeConfirm", getRevokeConfirm())
+            .append("remarks", getRemarks())
+            .append("status", getStatus())
+            .append("delFlag", getDelFlag())
+            .append("createrCode", getCreaterCode())
+            .append("createdate", getCreatedate())
+            .append("updaterCode", getUpdaterCode())
+            .append("updatedate", getUpdatedate())
+            .append("deptId", getDeptId())
+            .append("approveStatus", getApproveStatus())
+            .append("apNo", getApNo())
+            .append("processId", getProcessId())
+            .append("lockNo", getLockNo())
+            .append("changeConfirmer", getChangeConfirmer())
+            .append("changeConfirmerName", getChangeConfirmerName())
+            .append("changeConfirmTime", getChangeConfirmTime())
+            .append("monitor", getMonitor())
+            .append("monitorName", getMonitorName())
+            .append("monitorTime", getMonitorTime())
+            .toString();
+    }
+}

+ 63 - 0
master/src/main/java/com/ruoyi/project/eoeg/mapper/TEoegLockApplyMapper.java

@@ -0,0 +1,63 @@
+package com.ruoyi.project.eoeg.mapper;
+
+import java.util.List;
+import com.ruoyi.framework.aspectj.lang.annotation.DataScope;
+import com.ruoyi.project.eoeg.domain.TEoegLockApply;
+
+/**
+ * EOEG 审批流关联Mapper接口
+ * 
+ * @author ssy
+ * @date 2025-09-19
+ */
+public interface TEoegLockApplyMapper 
+{
+    /**
+     * 查询EOEG 审批流关联
+     * 
+     * @param id EOEG 审批流关联ID
+     * @return EOEG 审批流关联
+     */
+    public TEoegLockApply selectTEoegLockApplyById(Long id);
+
+    /**
+     * 查询EOEG 审批流关联列表
+     * 
+     * @param tEoegLockApply EOEG 审批流关联
+     * @return EOEG 审批流关联集合
+     */
+    @DataScope(deptAlias = "d")
+    public List<TEoegLockApply> selectTEoegLockApplyList(TEoegLockApply tEoegLockApply);
+
+    /**
+     * 新增EOEG 审批流关联
+     * 
+     * @param tEoegLockApply EOEG 审批流关联
+     * @return 结果
+     */
+    public int insertTEoegLockApply(TEoegLockApply tEoegLockApply);
+
+    /**
+     * 修改EOEG 审批流关联
+     * 
+     * @param tEoegLockApply EOEG 审批流关联
+     * @return 结果
+     */
+    public int updateTEoegLockApply(TEoegLockApply tEoegLockApply);
+
+    /**
+     * 删除EOEG 审批流关联
+     * 
+     * @param id EOEG 审批流关联ID
+     * @return 结果
+     */
+    public int deleteTEoegLockApplyById(Long id);
+
+    /**
+     * 批量删除EOEG 审批流关联
+     * 
+     * @param ids 需要删除的数据ID
+     * @return 结果
+     */
+    public int deleteTEoegLockApplyByIds(Long[] ids);
+}

+ 63 - 0
master/src/main/java/com/ruoyi/project/eoeg/mapper/TEoegLockChangeMapper.java

@@ -0,0 +1,63 @@
+package com.ruoyi.project.eoeg.mapper;
+
+import java.util.List;
+import com.ruoyi.framework.aspectj.lang.annotation.DataScope;
+import com.ruoyi.project.eoeg.domain.TEoegLockChange;
+
+/**
+ * EOEG 锁开锁关申请Mapper接口
+ * 
+ * @author ssy
+ * @date 2025-09-19
+ */
+public interface TEoegLockChangeMapper 
+{
+    /**
+     * 查询EOEG 锁开锁关申请
+     * 
+     * @param id EOEG 锁开锁关申请ID
+     * @return EOEG 锁开锁关申请
+     */
+    public TEoegLockChange selectTEoegLockChangeById(Long id);
+
+    /**
+     * 查询EOEG 锁开锁关申请列表
+     * 
+     * @param tEoegLockChange EOEG 锁开锁关申请
+     * @return EOEG 锁开锁关申请集合
+     */
+    @DataScope(deptAlias = "d")
+    public List<TEoegLockChange> selectTEoegLockChangeList(TEoegLockChange tEoegLockChange);
+
+    /**
+     * 新增EOEG 锁开锁关申请
+     * 
+     * @param tEoegLockChange EOEG 锁开锁关申请
+     * @return 结果
+     */
+    public int insertTEoegLockChange(TEoegLockChange tEoegLockChange);
+
+    /**
+     * 修改EOEG 锁开锁关申请
+     * 
+     * @param tEoegLockChange EOEG 锁开锁关申请
+     * @return 结果
+     */
+    public int updateTEoegLockChange(TEoegLockChange tEoegLockChange);
+
+    /**
+     * 删除EOEG 锁开锁关申请
+     * 
+     * @param id EOEG 锁开锁关申请ID
+     * @return 结果
+     */
+    public int deleteTEoegLockChangeById(Long id);
+
+    /**
+     * 批量删除EOEG 锁开锁关申请
+     * 
+     * @param ids 需要删除的数据ID
+     * @return 结果
+     */
+    public int deleteTEoegLockChangeByIds(Long[] ids);
+}

+ 63 - 0
master/src/main/java/com/ruoyi/project/eoeg/mapper/TEoegLockMapper.java

@@ -0,0 +1,63 @@
+package com.ruoyi.project.eoeg.mapper;
+
+import java.util.List;
+import com.ruoyi.framework.aspectj.lang.annotation.DataScope;
+import com.ruoyi.project.eoeg.domain.TEoegLock;
+
+/**
+ * EOEG 锁开锁关Mapper接口
+ * 
+ * @author ssy
+ * @date 2025-09-19
+ */
+public interface TEoegLockMapper 
+{
+    /**
+     * 查询EOEG 锁开锁关
+     * 
+     * @param id EOEG 锁开锁关ID
+     * @return EOEG 锁开锁关
+     */
+    public TEoegLock selectTEoegLockById(Long id);
+
+    /**
+     * 查询EOEG 锁开锁关列表
+     * 
+     * @param tEoegLock EOEG 锁开锁关
+     * @return EOEG 锁开锁关集合
+     */
+    @DataScope(deptAlias = "d")
+    public List<TEoegLock> selectTEoegLockList(TEoegLock tEoegLock);
+
+    /**
+     * 新增EOEG 锁开锁关
+     * 
+     * @param tEoegLock EOEG 锁开锁关
+     * @return 结果
+     */
+    public int insertTEoegLock(TEoegLock tEoegLock);
+
+    /**
+     * 修改EOEG 锁开锁关
+     * 
+     * @param tEoegLock EOEG 锁开锁关
+     * @return 结果
+     */
+    public int updateTEoegLock(TEoegLock tEoegLock);
+
+    /**
+     * 删除EOEG 锁开锁关
+     * 
+     * @param id EOEG 锁开锁关ID
+     * @return 结果
+     */
+    public int deleteTEoegLockById(Long id);
+
+    /**
+     * 批量删除EOEG 锁开锁关
+     * 
+     * @param ids 需要删除的数据ID
+     * @return 结果
+     */
+    public int deleteTEoegLockByIds(Long[] ids);
+}

+ 61 - 0
master/src/main/java/com/ruoyi/project/eoeg/service/ITEoegLockApplyService.java

@@ -0,0 +1,61 @@
+package com.ruoyi.project.eoeg.service;
+
+import java.util.List;
+import com.ruoyi.project.eoeg.domain.TEoegLockApply;
+
+/**
+ * EOEG 审批流关联Service接口
+ * 
+ * @author ssy
+ * @date 2025-09-19
+ */
+public interface ITEoegLockApplyService 
+{
+    /**
+     * 查询EOEG 审批流关联
+     * 
+     * @param id EOEG 审批流关联ID
+     * @return EOEG 审批流关联
+     */
+    public TEoegLockApply selectTEoegLockApplyById(Long id);
+
+    /**
+     * 查询EOEG 审批流关联列表
+     * 
+     * @param tEoegLockApply EOEG 审批流关联
+     * @return EOEG 审批流关联集合
+     */
+    public List<TEoegLockApply> selectTEoegLockApplyList(TEoegLockApply tEoegLockApply);
+
+    /**
+     * 新增EOEG 审批流关联
+     * 
+     * @param tEoegLockApply EOEG 审批流关联
+     * @return 结果
+     */
+    public int insertTEoegLockApply(TEoegLockApply tEoegLockApply);
+
+    /**
+     * 修改EOEG 审批流关联
+     * 
+     * @param tEoegLockApply EOEG 审批流关联
+     * @return 结果
+     */
+    public int updateTEoegLockApply(TEoegLockApply tEoegLockApply);
+
+    /**
+     * 批量删除EOEG 审批流关联
+     * 
+     * @param ids 需要删除的EOEG 审批流关联ID
+     * @return 结果
+     */
+    public int deleteTEoegLockApplyByIds(Long[] ids);
+
+    /**
+     * 删除EOEG 审批流关联信息
+     * 
+     * @param id EOEG 审批流关联ID
+     * @return 结果
+     */
+    public int deleteTEoegLockApplyById(Long id);
+}

+ 61 - 0
master/src/main/java/com/ruoyi/project/eoeg/service/ITEoegLockChangeService.java

@@ -0,0 +1,61 @@
+package com.ruoyi.project.eoeg.service;
+
+import java.util.List;
+import com.ruoyi.project.eoeg.domain.TEoegLockChange;
+
+/**
+ * EOEG 锁开锁关申请Service接口
+ * 
+ * @author ssy
+ * @date 2025-09-19
+ */
+public interface ITEoegLockChangeService 
+{
+    /**
+     * 查询EOEG 锁开锁关申请
+     * 
+     * @param id EOEG 锁开锁关申请ID
+     * @return EOEG 锁开锁关申请
+     */
+    public TEoegLockChange selectTEoegLockChangeById(Long id);
+
+    /**
+     * 查询EOEG 锁开锁关申请列表
+     * 
+     * @param tEoegLockChange EOEG 锁开锁关申请
+     * @return EOEG 锁开锁关申请集合
+     */
+    public List<TEoegLockChange> selectTEoegLockChangeList(TEoegLockChange tEoegLockChange);
+
+    /**
+     * 新增EOEG 锁开锁关申请
+     * 
+     * @param tEoegLockChange EOEG 锁开锁关申请
+     * @return 结果
+     */
+    public int insertTEoegLockChange(TEoegLockChange tEoegLockChange);
+
+    /**
+     * 修改EOEG 锁开锁关申请
+     * 
+     * @param tEoegLockChange EOEG 锁开锁关申请
+     * @return 结果
+     */
+    public int updateTEoegLockChange(TEoegLockChange tEoegLockChange);
+
+    /**
+     * 批量删除EOEG 锁开锁关申请
+     * 
+     * @param ids 需要删除的EOEG 锁开锁关申请ID
+     * @return 结果
+     */
+    public int deleteTEoegLockChangeByIds(Long[] ids);
+
+    /**
+     * 删除EOEG 锁开锁关申请信息
+     * 
+     * @param id EOEG 锁开锁关申请ID
+     * @return 结果
+     */
+    public int deleteTEoegLockChangeById(Long id);
+}

+ 61 - 0
master/src/main/java/com/ruoyi/project/eoeg/service/ITEoegLockService.java

@@ -0,0 +1,61 @@
+package com.ruoyi.project.eoeg.service;
+
+import java.util.List;
+import com.ruoyi.project.eoeg.domain.TEoegLock;
+
+/**
+ * EOEG 锁开锁关Service接口
+ * 
+ * @author ssy
+ * @date 2025-09-19
+ */
+public interface ITEoegLockService 
+{
+    /**
+     * 查询EOEG 锁开锁关
+     * 
+     * @param id EOEG 锁开锁关ID
+     * @return EOEG 锁开锁关
+     */
+    public TEoegLock selectTEoegLockById(Long id);
+
+    /**
+     * 查询EOEG 锁开锁关列表
+     * 
+     * @param tEoegLock EOEG 锁开锁关
+     * @return EOEG 锁开锁关集合
+     */
+    public List<TEoegLock> selectTEoegLockList(TEoegLock tEoegLock);
+
+    /**
+     * 新增EOEG 锁开锁关
+     * 
+     * @param tEoegLock EOEG 锁开锁关
+     * @return 结果
+     */
+    public int insertTEoegLock(TEoegLock tEoegLock);
+
+    /**
+     * 修改EOEG 锁开锁关
+     * 
+     * @param tEoegLock EOEG 锁开锁关
+     * @return 结果
+     */
+    public int updateTEoegLock(TEoegLock tEoegLock);
+
+    /**
+     * 批量删除EOEG 锁开锁关
+     * 
+     * @param ids 需要删除的EOEG 锁开锁关ID
+     * @return 结果
+     */
+    public int deleteTEoegLockByIds(Long[] ids);
+
+    /**
+     * 删除EOEG 锁开锁关信息
+     * 
+     * @param id EOEG 锁开锁关ID
+     * @return 结果
+     */
+    public int deleteTEoegLockById(Long id);
+}

+ 93 - 0
master/src/main/java/com/ruoyi/project/eoeg/service/impl/TEoegLockApplyServiceImpl.java

@@ -0,0 +1,93 @@
+package com.ruoyi.project.eoeg.service.impl;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.project.eoeg.mapper.TEoegLockApplyMapper;
+import com.ruoyi.project.eoeg.domain.TEoegLockApply;
+import com.ruoyi.project.eoeg.service.ITEoegLockApplyService;
+
+/**
+ * EOEG 审批流关联Service业务层处理
+ *
+ * @author ssy
+ * @date 2025-09-19
+ */
+@Service
+public class TEoegLockApplyServiceImpl implements ITEoegLockApplyService
+{
+    @Autowired
+    private TEoegLockApplyMapper tEoegLockApplyMapper;
+
+    /**
+     * 查询EOEG 审批流关联
+     *
+     * @param id EOEG 审批流关联ID
+     * @return EOEG 审批流关联
+     */
+    @Override
+    public TEoegLockApply selectTEoegLockApplyById(Long id)
+    {
+        return tEoegLockApplyMapper.selectTEoegLockApplyById(id);
+    }
+
+    /**
+     * 查询EOEG 审批流关联列表
+     *
+     * @param tEoegLockApply EOEG 审批流关联
+     * @return EOEG 审批流关联
+     */
+    @Override
+    public List<TEoegLockApply> selectTEoegLockApplyList(TEoegLockApply tEoegLockApply)
+    {
+        return tEoegLockApplyMapper.selectTEoegLockApplyList(tEoegLockApply);
+    }
+
+    /**
+     * 新增EOEG 审批流关联
+     *
+     * @param tEoegLockApply EOEG 审批流关联
+     * @return 结果
+     */
+    @Override
+    public int insertTEoegLockApply(TEoegLockApply tEoegLockApply)
+    {
+        return tEoegLockApplyMapper.insertTEoegLockApply(tEoegLockApply);
+    }
+
+    /**
+     * 修改EOEG 审批流关联
+     *
+     * @param tEoegLockApply EOEG 审批流关联
+     * @return 结果
+     */
+    @Override
+    public int updateTEoegLockApply(TEoegLockApply tEoegLockApply)
+    {
+        return tEoegLockApplyMapper.updateTEoegLockApply(tEoegLockApply);
+    }
+
+    /**
+     * 批量删除EOEG 审批流关联
+     *
+     * @param ids 需要删除的EOEG 审批流关联ID
+     * @return 结果
+     */
+    @Override
+    public int deleteTEoegLockApplyByIds(Long[] ids)
+    {
+        return tEoegLockApplyMapper.deleteTEoegLockApplyByIds(ids);
+    }
+
+    /**
+     * 删除EOEG 审批流关联信息
+     *
+     * @param id EOEG 审批流关联ID
+     * @return 结果
+     */
+    @Override
+    public int deleteTEoegLockApplyById(Long id)
+    {
+        return tEoegLockApplyMapper.deleteTEoegLockApplyById(id);
+    }
+}

+ 93 - 0
master/src/main/java/com/ruoyi/project/eoeg/service/impl/TEoegLockChangeServiceImpl.java

@@ -0,0 +1,93 @@
+package com.ruoyi.project.eoeg.service.impl;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.project.eoeg.mapper.TEoegLockChangeMapper;
+import com.ruoyi.project.eoeg.domain.TEoegLockChange;
+import com.ruoyi.project.eoeg.service.ITEoegLockChangeService;
+
+/**
+ * EOEG 锁开锁关申请Service业务层处理
+ *
+ * @author ssy
+ * @date 2025-09-19
+ */
+@Service
+public class TEoegLockChangeServiceImpl implements ITEoegLockChangeService
+{
+    @Autowired
+    private TEoegLockChangeMapper tEoegLockChangeMapper;
+
+    /**
+     * 查询EOEG 锁开锁关申请
+     *
+     * @param id EOEG 锁开锁关申请ID
+     * @return EOEG 锁开锁关申请
+     */
+    @Override
+    public TEoegLockChange selectTEoegLockChangeById(Long id)
+    {
+        return tEoegLockChangeMapper.selectTEoegLockChangeById(id);
+    }
+
+    /**
+     * 查询EOEG 锁开锁关申请列表
+     *
+     * @param tEoegLockChange EOEG 锁开锁关申请
+     * @return EOEG 锁开锁关申请
+     */
+    @Override
+    public List<TEoegLockChange> selectTEoegLockChangeList(TEoegLockChange tEoegLockChange)
+    {
+        return tEoegLockChangeMapper.selectTEoegLockChangeList(tEoegLockChange);
+    }
+
+    /**
+     * 新增EOEG 锁开锁关申请
+     *
+     * @param tEoegLockChange EOEG 锁开锁关申请
+     * @return 结果
+     */
+    @Override
+    public int insertTEoegLockChange(TEoegLockChange tEoegLockChange)
+    {
+        return tEoegLockChangeMapper.insertTEoegLockChange(tEoegLockChange);
+    }
+
+    /**
+     * 修改EOEG 锁开锁关申请
+     *
+     * @param tEoegLockChange EOEG 锁开锁关申请
+     * @return 结果
+     */
+    @Override
+    public int updateTEoegLockChange(TEoegLockChange tEoegLockChange)
+    {
+        return tEoegLockChangeMapper.updateTEoegLockChange(tEoegLockChange);
+    }
+
+    /**
+     * 批量删除EOEG 锁开锁关申请
+     *
+     * @param ids 需要删除的EOEG 锁开锁关申请ID
+     * @return 结果
+     */
+    @Override
+    public int deleteTEoegLockChangeByIds(Long[] ids)
+    {
+        return tEoegLockChangeMapper.deleteTEoegLockChangeByIds(ids);
+    }
+
+    /**
+     * 删除EOEG 锁开锁关申请信息
+     *
+     * @param id EOEG 锁开锁关申请ID
+     * @return 结果
+     */
+    @Override
+    public int deleteTEoegLockChangeById(Long id)
+    {
+        return tEoegLockChangeMapper.deleteTEoegLockChangeById(id);
+    }
+}

+ 93 - 0
master/src/main/java/com/ruoyi/project/eoeg/service/impl/TEoegLockServiceImpl.java

@@ -0,0 +1,93 @@
+package com.ruoyi.project.eoeg.service.impl;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.project.eoeg.mapper.TEoegLockMapper;
+import com.ruoyi.project.eoeg.domain.TEoegLock;
+import com.ruoyi.project.eoeg.service.ITEoegLockService;
+
+/**
+ * EOEG 锁开锁关Service业务层处理
+ *
+ * @author ssy
+ * @date 2025-09-19
+ */
+@Service
+public class TEoegLockServiceImpl implements ITEoegLockService
+{
+    @Autowired
+    private TEoegLockMapper tEoegLockMapper;
+
+    /**
+     * 查询EOEG 锁开锁关
+     *
+     * @param id EOEG 锁开锁关ID
+     * @return EOEG 锁开锁关
+     */
+    @Override
+    public TEoegLock selectTEoegLockById(Long id)
+    {
+        return tEoegLockMapper.selectTEoegLockById(id);
+    }
+
+    /**
+     * 查询EOEG 锁开锁关列表
+     *
+     * @param tEoegLock EOEG 锁开锁关
+     * @return EOEG 锁开锁关
+     */
+    @Override
+    public List<TEoegLock> selectTEoegLockList(TEoegLock tEoegLock)
+    {
+        return tEoegLockMapper.selectTEoegLockList(tEoegLock);
+    }
+
+    /**
+     * 新增EOEG 锁开锁关
+     *
+     * @param tEoegLock EOEG 锁开锁关
+     * @return 结果
+     */
+    @Override
+    public int insertTEoegLock(TEoegLock tEoegLock)
+    {
+        return tEoegLockMapper.insertTEoegLock(tEoegLock);
+    }
+
+    /**
+     * 修改EOEG 锁开锁关
+     *
+     * @param tEoegLock EOEG 锁开锁关
+     * @return 结果
+     */
+    @Override
+    public int updateTEoegLock(TEoegLock tEoegLock)
+    {
+        return tEoegLockMapper.updateTEoegLock(tEoegLock);
+    }
+
+    /**
+     * 批量删除EOEG 锁开锁关
+     *
+     * @param ids 需要删除的EOEG 锁开锁关ID
+     * @return 结果
+     */
+    @Override
+    public int deleteTEoegLockByIds(Long[] ids)
+    {
+        return tEoegLockMapper.deleteTEoegLockByIds(ids);
+    }
+
+    /**
+     * 删除EOEG 锁开锁关信息
+     *
+     * @param id EOEG 锁开锁关ID
+     * @return 结果
+     */
+    @Override
+    public int deleteTEoegLockById(Long id)
+    {
+        return tEoegLockMapper.deleteTEoegLockById(id);
+    }
+}

+ 5 - 2
master/src/main/java/com/ruoyi/project/plant/controller/TStaffmgrController.java

@@ -29,7 +29,6 @@ import com.ruoyi.project.training.service.*;
 import com.ruoyi.project.training.spec.service.ITStPlanService;
 import com.ruoyi.project.training.spec.service.ITStSuccessorService;
 import org.apache.commons.lang.StringUtils;
-import org.apache.poi.ss.formula.functions.T;
 import org.apache.poi.ss.usermodel.Cell;
 import org.apache.poi.ss.usermodel.Row;
 import org.apache.poi.ss.usermodel.Sheet;
@@ -43,7 +42,6 @@ import javax.annotation.Resource;
 import java.io.IOException;
 import java.text.SimpleDateFormat;
 import java.time.LocalDate;
-import java.time.LocalDateTime;
 import java.util.*;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.ExecutorService;
@@ -118,6 +116,11 @@ public class TStaffmgrController extends BaseController {
         return AjaxResult.success(tStaffmgrService.selectSaiExecutors());
     }
 
+    @GetMapping("/listStaffmgrByActualposts")
+    public AjaxResult listStaffmgrByActualposts(TStaffmgr tStaffmgr) {
+        return AjaxResult.success(tStaffmgrService.selectUserInfoByStaffmgr(tStaffmgr));
+    }
+
     /**
      * 获取SAI验证人列表
      */

+ 2 - 4
master/src/main/java/com/ruoyi/project/plant/mapper/TStaffmgrMapper.java

@@ -1,13 +1,11 @@
 package com.ruoyi.project.plant.mapper;
 
 import com.ruoyi.framework.aspectj.lang.annotation.DataScope;
-import com.ruoyi.framework.web.domain.BaseEntity;
 import com.ruoyi.project.common.domain.DataEntity;
 import com.ruoyi.project.plant.domain.TStaffmgr;
 import com.ruoyi.project.system.domain.SysUser;
 
 import java.util.List;
-import java.util.Map;
 
 /**
  * 人员管理Mapper接口
@@ -172,8 +170,8 @@ public interface TStaffmgrMapper
     List<TStaffmgr> selectTStaffmgrByPost(SysUser sysUser);
 
     List<TStaffmgr> selectTMentorStaffmgrByPost(SysUser sysUser);
-
-    List<Map<String,Object>> selectUserInfoByStaffmgr(TStaffmgr tStaffmgr);
+    @DataScope(deptAlias = "d")
+    List<TStaffmgr> selectUserInfoByStaffmgr(TStaffmgr tStaffmgr);
 
     int deleteRetireTStaffmgrByIds(Long id);
 

+ 2 - 1
master/src/main/java/com/ruoyi/project/plant/service/ITStaffmgrService.java

@@ -47,7 +47,8 @@ public interface ITStaffmgrService
      */
     public List<TStaffmgr> selectTStaffmgrList(TStaffmgr tStaffmgr);
     public List<TStaffmgr> selectAllTStaffmgrList(TStaffmgr tStaffmgr);
-    
+    public List<TStaffmgr> selectUserInfoByStaffmgr(TStaffmgr tStaffmgr);
+
     /**
      * 查询人员管理列表(无数据权限过滤,供定时任务使用)
      *

+ 7 - 1
master/src/main/java/com/ruoyi/project/plant/service/impl/TStaffmgrServiceImpl.java

@@ -77,7 +77,13 @@ public class TStaffmgrServiceImpl implements ITStaffmgrService
     {
         return tStaffmgrMapper.selectAllTStaffmgrList(tStaffmgr);
     }
-    
+
+    @Override
+    public List<TStaffmgr> selectUserInfoByStaffmgr(TStaffmgr tStaffmgr)
+    {
+        return tStaffmgrMapper.selectUserInfoByStaffmgr(tStaffmgr);
+    }
+
     @Override
     public List<TStaffmgr> selectAllTStaffmgrListWithoutScope(TStaffmgr tStaffmgr)
     {

+ 116 - 0
master/src/main/resources/mybatis/eoeg/TEoegLockApplyMapper.xml

@@ -0,0 +1,116 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.project.eoeg.mapper.TEoegLockApplyMapper">
+    
+    <resultMap type="TEoegLockApply" id="TEoegLockApplyResult">
+        <result property="id"    column="id"    />
+        <result property="changeId"    column="change_id"    />
+        <result property="apNo"    column="ap_no"    />
+        <result property="processId"    column="process_id"    />
+        <result property="remarks"    column="remarks"    />
+        <result property="status"    column="status"    />
+        <result property="delFlag"    column="del_flag"    />
+        <result property="createrCode"    column="creater_code"    />
+        <result property="createdate"    column="createdate"    />
+        <result property="updaterCode"    column="updater_code"    />
+        <result property="updatedate"    column="updatedate"    />
+        <result property="deptId"    column="dept_id"    />
+        <result property="deptName" column="dept_name" />
+    </resultMap>
+
+    <sql id="selectTEoegLockApplyVo">
+        select d.id, d.change_id, d.ap_no, d.process_id, d.remarks, d.status, d.del_flag, d.creater_code, d.createdate, d.updater_code, d.updatedate, d.dept_id ,s.dept_name from t_eoeg_lock_apply d
+      left join sys_dept s on s.dept_id = d.dept_id
+    </sql>
+
+    <select id="selectTEoegLockApplyList" parameterType="TEoegLockApply" resultMap="TEoegLockApplyResult">
+        <include refid="selectTEoegLockApplyVo"/>
+        <where>  
+            <if test="changeId != null "> and change_id = #{changeId}</if>
+            <if test="apNo != null  and apNo != ''"> and ap_no = #{apNo}</if>
+            <if test="processId != null  and processId != ''"> and process_id = #{processId}</if>
+            <if test="remarks != null  and remarks != ''"> and remarks = #{remarks}</if>
+            <if test="status != null "> and status = #{status}</if>
+            <if test="createrCode != null  and createrCode != ''"> and creater_code = #{createrCode}</if>
+            <if test="createdate != null "> and createdate = #{createdate}</if>
+            <if test="updaterCode != null "> and updater_code = #{updaterCode}</if>
+            <if test="updatedate != null "> and updatedate = #{updatedate}</if>
+            <if test="deptId != null "> and dept_id = #{deptId}</if>
+            and d.del_flag = 0
+        </where>
+        <!-- 数据范围过滤 -->
+        ${params.dataScope}
+    </select>
+    
+    <select id="selectTEoegLockApplyById" parameterType="Long" resultMap="TEoegLockApplyResult">
+        <include refid="selectTEoegLockApplyVo"/>
+        where id = #{id}
+    </select>
+        
+    <insert id="insertTEoegLockApply" parameterType="TEoegLockApply">
+        <selectKey keyProperty="id" resultType="long" order="BEFORE">
+            SELECT seq_t_eoeg_lock_apply.NEXTVAL as id FROM DUAL
+        </selectKey>
+        insert into t_eoeg_lock_apply
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null">id,</if>
+            <if test="changeId != null">change_id,</if>
+            <if test="apNo != null">ap_no,</if>
+            <if test="processId != null">process_id,</if>
+            <if test="remarks != null">remarks,</if>
+            <if test="status != null">status,</if>
+            <if test="delFlag != null">del_flag,</if>
+            <if test="createrCode != null">creater_code,</if>
+            <if test="createdate != null">createdate,</if>
+            <if test="updaterCode != null">updater_code,</if>
+            <if test="updatedate != null">updatedate,</if>
+            <if test="deptId != null">dept_id,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null">#{id},</if>
+            <if test="changeId != null">#{changeId},</if>
+            <if test="apNo != null">#{apNo},</if>
+            <if test="processId != null">#{processId},</if>
+            <if test="remarks != null">#{remarks},</if>
+            <if test="status != null">#{status},</if>
+            <if test="delFlag != null">#{delFlag},</if>
+            <if test="createrCode != null">#{createrCode},</if>
+            <if test="createdate != null">#{createdate},</if>
+            <if test="updaterCode != null">#{updaterCode},</if>
+            <if test="updatedate != null">#{updatedate},</if>
+            <if test="deptId != null">#{deptId},</if>
+         </trim>
+    </insert>
+
+    <update id="updateTEoegLockApply" parameterType="TEoegLockApply">
+        update t_eoeg_lock_apply
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="changeId != null">change_id = #{changeId},</if>
+            <if test="apNo != null">ap_no = #{apNo},</if>
+            <if test="processId != null">process_id = #{processId},</if>
+            <if test="remarks != null">remarks = #{remarks},</if>
+            <if test="status != null">status = #{status},</if>
+            <if test="delFlag != null">del_flag = #{delFlag},</if>
+            <if test="createrCode != null">creater_code = #{createrCode},</if>
+            <if test="createdate != null">createdate = #{createdate},</if>
+            <if test="updaterCode != null">updater_code = #{updaterCode},</if>
+            <if test="updatedate != null">updatedate = #{updatedate},</if>
+            <if test="deptId != null">dept_id = #{deptId},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <update id="deleteTEoegLockApplyById" parameterType="Long">
+        update t_eoeg_lock_apply set del_flag = 2 where id = #{id}
+    </update>
+
+    <update id="deleteTEoegLockApplyByIds" parameterType="String">
+        update t_eoeg_lock_apply set del_flag = 2 where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </update>
+    
+</mapper>

+ 301 - 0
master/src/main/resources/mybatis/eoeg/TEoegLockChangeMapper.xml

@@ -0,0 +1,301 @@
+<?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.eoeg.mapper.TEoegLockChangeMapper">
+    
+    <resultMap type="TEoegLockChange" id="TEoegLockChangeResult">
+        <result property="id"    column="id"    />
+        <result property="changeDescribe"    column="change_describe"    />
+        <result property="changeReason"    column="change_reason"    />
+        <result property="applicant"    column="applicant"    />
+        <result property="applicantName"    column="applicant_name"    />
+        <result property="applicationTime"    column="application_time"    />
+        <result property="safa"    column="safa"    />
+        <result property="safaer"    column="safaer"    />
+        <result property="safaerName"    column="safaer_name"    />
+        <result property="safaTime"    column="safa_time"    />
+        <result property="approver"    column="approver"    />
+        <result property="approverName"    column="approver_name"    />
+        <result property="approveTime"    column="approve_time"    />
+        <result property="executor"    column="executor"    />
+        <result property="executorName"    column="executor_name"    />
+        <result property="executionTime"    column="execution_time"    />
+        <result property="confirmer"    column="confirmer"    />
+        <result property="confirmerName"    column="confirmer_name"    />
+        <result property="confirmTime"    column="confirm_time"    />
+        <result property="changeExecution"    column="change_execution"    />
+        <result property="changeExecutor"    column="change_executor"    />
+        <result property="changeExecutorName"    column="change_executor_name"    />
+        <result property="changeExecutorTime"    column="change_executor_time"    />
+        <result property="resetConfirm"    column="reset_confirm"    />
+        <result property="resetConfirmer1"    column="reset_confirmer1"    />
+        <result property="resetConfirmerName1"    column="reset_confirmer_name1"    />
+        <result property="resetConfirmTime1"    column="reset_confirm_time1"    />
+        <result property="resetConfirmer2"    column="reset_confirmer2"    />
+        <result property="resetConfirmerName2"    column="reset_confirmer_name2"    />
+        <result property="resetConfirmTime2"    column="reset_confirm_time2"    />
+        <result property="revokeConfirm"    column="revoke_confirm"    />
+        <result property="remarks"    column="remarks"    />
+        <result property="status"    column="status"    />
+        <result property="delFlag"    column="del_flag"    />
+        <result property="createrCode"    column="creater_code"    />
+        <result property="createdate"    column="createdate"    />
+        <result property="updaterCode"    column="updater_code"    />
+        <result property="updatedate"    column="updatedate"    />
+        <result property="deptId"    column="dept_id"    />
+        <result property="approveStatus"    column="approve_status"    />
+        <result property="apNo"    column="ap_no"    />
+        <result property="processId"    column="process_id"    />
+        <result property="lockNo"    column="lock_no"    />
+        <result property="changeConfirmer"    column="change_confirmer"    />
+        <result property="changeConfirmerName"    column="change_confirmer_name"    />
+        <result property="changeConfirmTime"    column="change_confirm_time"    />
+        <result property="monitor"    column="monitor"    />
+        <result property="monitorName"    column="monitor_name"    />
+        <result property="monitorTime"    column="monitor_time"    />
+        <result property="deptName" column="dept_name" />
+    </resultMap>
+
+    <sql id="selectTEoegLockChangeVo">
+        select d.id, d.change_describe, d.change_reason, d.applicant, d.applicant_name, d.application_time, d.safa, d.safaer, d.safaer_name, d.safa_time, d.approver, d.approver_name, d.approve_time, d.executor, d.executor_name, d.execution_time, d.confirmer, d.confirmer_name, d.confirm_time, d.change_execution, d.change_executor, d.change_executor_name, d.change_executor_time, d.reset_confirm, d.reset_confirmer1, d.reset_confirmer_name1, d.reset_confirm_time1, d.reset_confirmer2, d.reset_confirmer_name2, d.reset_confirm_time2, d.revoke_confirm, d.remarks, d.status, d.del_flag, d.creater_code, d.createdate, d.updater_code, d.updatedate, d.dept_id, d.approve_status, d.ap_no, d.process_id, d.lock_no, d.change_confirmer, d.change_confirmer_name, d.change_confirm_time, d.monitor, d.monitor_name, d.monitor_time ,s.dept_name from t_eoeg_lock_change d
+      left join sys_dept s on s.dept_id = d.dept_id
+    </sql>
+
+    <select id="selectTEoegLockChangeList" parameterType="TEoegLockChange" resultMap="TEoegLockChangeResult">
+        <include refid="selectTEoegLockChangeVo"/>
+        <where>  
+            <if test="changeDescribe != null  and changeDescribe != ''"> and change_describe = #{changeDescribe}</if>
+            <if test="changeReason != null  and changeReason != ''"> and change_reason = #{changeReason}</if>
+            <if test="applicant != null  and applicant != ''"> and applicant = #{applicant}</if>
+            <if test="applicantName != null  and applicantName != ''"> and applicant_name like concat(concat('%', #{applicantName}), '%')</if>
+            <if test="applicationTime != null "> and application_time = #{applicationTime}</if>
+            <if test="safa != null  and safa != ''"> and safa = #{safa}</if>
+            <if test="safaer != null  and safaer != ''"> and safaer = #{safaer}</if>
+            <if test="safaerName != null  and safaerName != ''"> and safaer_name like concat(concat('%', #{safaerName}), '%')</if>
+            <if test="safaTime != null "> and safa_time = #{safaTime}</if>
+            <if test="approver != null  and approver != ''"> and approver = #{approver}</if>
+            <if test="approverName != null  and approverName != ''"> and approver_name like concat(concat('%', #{approverName}), '%')</if>
+            <if test="approveTime != null "> and approve_time = #{approveTime}</if>
+            <if test="executor != null  and executor != ''"> and executor = #{executor}</if>
+            <if test="executorName != null  and executorName != ''"> and executor_name like concat(concat('%', #{executorName}), '%')</if>
+            <if test="executionTime != null "> and execution_time = #{executionTime}</if>
+            <if test="confirmer != null  and confirmer != ''"> and confirmer = #{confirmer}</if>
+            <if test="confirmerName != null  and confirmerName != ''"> and confirmer_name like concat(concat('%', #{confirmerName}), '%')</if>
+            <if test="confirmTime != null "> and confirm_time = #{confirmTime}</if>
+            <if test="changeExecution != null  and changeExecution != ''"> and change_execution = #{changeExecution}</if>
+            <if test="changeExecutor != null  and changeExecutor != ''"> and change_executor = #{changeExecutor}</if>
+            <if test="changeExecutorName != null  and changeExecutorName != ''"> and change_executor_name like concat(concat('%', #{changeExecutorName}), '%')</if>
+            <if test="changeExecutorTime != null "> and change_executor_time = #{changeExecutorTime}</if>
+            <if test="resetConfirm != null  and resetConfirm != ''"> and reset_confirm = #{resetConfirm}</if>
+            <if test="resetConfirmer1 != null  and resetConfirmer1 != ''"> and reset_confirmer1 = #{resetConfirmer1}</if>
+            <if test="resetConfirmerName1 != null  and resetConfirmerName1 != ''"> and reset_confirmer_name1 = #{resetConfirmerName1}</if>
+            <if test="resetConfirmTime1 != null "> and reset_confirm_time1 = #{resetConfirmTime1}</if>
+            <if test="resetConfirmer2 != null  and resetConfirmer2 != ''"> and reset_confirmer2 = #{resetConfirmer2}</if>
+            <if test="resetConfirmerName2 != null  and resetConfirmerName2 != ''"> and reset_confirmer_name2 = #{resetConfirmerName2}</if>
+            <if test="resetConfirmTime2 != null "> and reset_confirm_time2 = #{resetConfirmTime2}</if>
+            <if test="revokeConfirm != null  and revokeConfirm != ''"> and revoke_confirm = #{revokeConfirm}</if>
+            <if test="remarks != null  and remarks != ''"> and remarks = #{remarks}</if>
+            <if test="status != null "> and status = #{status}</if>
+            <if test="createrCode != null  and createrCode != ''"> and creater_code = #{createrCode}</if>
+            <if test="createdate != null "> and createdate = #{createdate}</if>
+            <if test="updaterCode != null "> and updater_code = #{updaterCode}</if>
+            <if test="updatedate != null "> and updatedate = #{updatedate}</if>
+            <if test="deptId != null "> and dept_id = #{deptId}</if>
+            <if test="approveStatus != null  and approveStatus != ''"> and approve_status = #{approveStatus}</if>
+            <if test="apNo != null  and apNo != ''"> and ap_no = #{apNo}</if>
+            <if test="processId != null  and processId != ''"> and process_id = #{processId}</if>
+            <if test="lockNo != null  and lockNo != ''"> and lock_no = #{lockNo}</if>
+            <if test="changeConfirmer != null  and changeConfirmer != ''"> and change_confirmer = #{changeConfirmer}</if>
+            <if test="changeConfirmerName != null  and changeConfirmerName != ''"> and change_confirmer_name like concat(concat('%', #{changeConfirmerName}), '%')</if>
+            <if test="changeConfirmTime != null "> and change_confirm_time = #{changeConfirmTime}</if>
+            <if test="monitor != null  and monitor != ''"> and monitor = #{monitor}</if>
+            <if test="monitorName != null  and monitorName != ''"> and monitor_name like concat(concat('%', #{monitorName}), '%')</if>
+            <if test="monitorTime != null "> and monitor_time = #{monitorTime}</if>
+            and d.del_flag = 0
+        </where>
+        <!-- 数据范围过滤 -->
+        ${params.dataScope}
+    </select>
+    
+    <select id="selectTEoegLockChangeById" parameterType="Long" resultMap="TEoegLockChangeResult">
+        <include refid="selectTEoegLockChangeVo"/>
+        where id = #{id}
+    </select>
+        
+    <insert id="insertTEoegLockChange" parameterType="TEoegLockChange">
+        <selectKey keyProperty="id" resultType="long" order="BEFORE">
+            SELECT seq_t_eoeg_lock_change.NEXTVAL as id FROM DUAL
+        </selectKey>
+        insert into t_eoeg_lock_change
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null">id,</if>
+            <if test="changeDescribe != null">change_describe,</if>
+            <if test="changeReason != null">change_reason,</if>
+            <if test="applicant != null">applicant,</if>
+            <if test="applicantName != null">applicant_name,</if>
+            <if test="applicationTime != null">application_time,</if>
+            <if test="safa != null">safa,</if>
+            <if test="safaer != null">safaer,</if>
+            <if test="safaerName != null">safaer_name,</if>
+            <if test="safaTime != null">safa_time,</if>
+            <if test="approver != null">approver,</if>
+            <if test="approverName != null">approver_name,</if>
+            <if test="approveTime != null">approve_time,</if>
+            <if test="executor != null">executor,</if>
+            <if test="executorName != null">executor_name,</if>
+            <if test="executionTime != null">execution_time,</if>
+            <if test="confirmer != null">confirmer,</if>
+            <if test="confirmerName != null">confirmer_name,</if>
+            <if test="confirmTime != null">confirm_time,</if>
+            <if test="changeExecution != null">change_execution,</if>
+            <if test="changeExecutor != null">change_executor,</if>
+            <if test="changeExecutorName != null">change_executor_name,</if>
+            <if test="changeExecutorTime != null">change_executor_time,</if>
+            <if test="resetConfirm != null">reset_confirm,</if>
+            <if test="resetConfirmer1 != null">reset_confirmer1,</if>
+            <if test="resetConfirmerName1 != null">reset_confirmer_name1,</if>
+            <if test="resetConfirmTime1 != null">reset_confirm_time1,</if>
+            <if test="resetConfirmer2 != null">reset_confirmer2,</if>
+            <if test="resetConfirmerName2 != null">reset_confirmer_name2,</if>
+            <if test="resetConfirmTime2 != null">reset_confirm_time2,</if>
+            <if test="revokeConfirm != null">revoke_confirm,</if>
+            <if test="remarks != null">remarks,</if>
+            <if test="status != null">status,</if>
+            <if test="delFlag != null">del_flag,</if>
+            <if test="createrCode != null">creater_code,</if>
+            <if test="createdate != null">createdate,</if>
+            <if test="updaterCode != null">updater_code,</if>
+            <if test="updatedate != null">updatedate,</if>
+            <if test="deptId != null">dept_id,</if>
+            <if test="approveStatus != null">approve_status,</if>
+            <if test="apNo != null">ap_no,</if>
+            <if test="processId != null">process_id,</if>
+            <if test="lockNo != null">lock_no,</if>
+            <if test="changeConfirmer != null">change_confirmer,</if>
+            <if test="changeConfirmerName != null">change_confirmer_name,</if>
+            <if test="changeConfirmTime != null">change_confirm_time,</if>
+            <if test="monitor != null">monitor,</if>
+            <if test="monitorName != null">monitor_name,</if>
+            <if test="monitorTime != null">monitor_time,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null">#{id},</if>
+            <if test="changeDescribe != null">#{changeDescribe},</if>
+            <if test="changeReason != null">#{changeReason},</if>
+            <if test="applicant != null">#{applicant},</if>
+            <if test="applicantName != null">#{applicantName},</if>
+            <if test="applicationTime != null">#{applicationTime},</if>
+            <if test="safa != null">#{safa},</if>
+            <if test="safaer != null">#{safaer},</if>
+            <if test="safaerName != null">#{safaerName},</if>
+            <if test="safaTime != null">#{safaTime},</if>
+            <if test="approver != null">#{approver},</if>
+            <if test="approverName != null">#{approverName},</if>
+            <if test="approveTime != null">#{approveTime},</if>
+            <if test="executor != null">#{executor},</if>
+            <if test="executorName != null">#{executorName},</if>
+            <if test="executionTime != null">#{executionTime},</if>
+            <if test="confirmer != null">#{confirmer},</if>
+            <if test="confirmerName != null">#{confirmerName},</if>
+            <if test="confirmTime != null">#{confirmTime},</if>
+            <if test="changeExecution != null">#{changeExecution},</if>
+            <if test="changeExecutor != null">#{changeExecutor},</if>
+            <if test="changeExecutorName != null">#{changeExecutorName},</if>
+            <if test="changeExecutorTime != null">#{changeExecutorTime},</if>
+            <if test="resetConfirm != null">#{resetConfirm},</if>
+            <if test="resetConfirmer1 != null">#{resetConfirmer1},</if>
+            <if test="resetConfirmerName1 != null">#{resetConfirmerName1},</if>
+            <if test="resetConfirmTime1 != null">#{resetConfirmTime1},</if>
+            <if test="resetConfirmer2 != null">#{resetConfirmer2},</if>
+            <if test="resetConfirmerName2 != null">#{resetConfirmerName2},</if>
+            <if test="resetConfirmTime2 != null">#{resetConfirmTime2},</if>
+            <if test="revokeConfirm != null">#{revokeConfirm},</if>
+            <if test="remarks != null">#{remarks},</if>
+            <if test="status != null">#{status},</if>
+            <if test="delFlag != null">#{delFlag},</if>
+            <if test="createrCode != null">#{createrCode},</if>
+            <if test="createdate != null">#{createdate},</if>
+            <if test="updaterCode != null">#{updaterCode},</if>
+            <if test="updatedate != null">#{updatedate},</if>
+            <if test="deptId != null">#{deptId},</if>
+            <if test="approveStatus != null">#{approveStatus},</if>
+            <if test="apNo != null">#{apNo},</if>
+            <if test="processId != null">#{processId},</if>
+            <if test="lockNo != null">#{lockNo},</if>
+            <if test="changeConfirmer != null">#{changeConfirmer},</if>
+            <if test="changeConfirmerName != null">#{changeConfirmerName},</if>
+            <if test="changeConfirmTime != null">#{changeConfirmTime},</if>
+            <if test="monitor != null">#{monitor},</if>
+            <if test="monitorName != null">#{monitorName},</if>
+            <if test="monitorTime != null">#{monitorTime},</if>
+         </trim>
+    </insert>
+
+    <update id="updateTEoegLockChange" parameterType="TEoegLockChange">
+        update t_eoeg_lock_change
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="changeDescribe != null">change_describe = #{changeDescribe},</if>
+            <if test="changeReason != null">change_reason = #{changeReason},</if>
+            <if test="applicant != null">applicant = #{applicant},</if>
+            <if test="applicantName != null">applicant_name = #{applicantName},</if>
+            <if test="applicationTime != null">application_time = #{applicationTime},</if>
+            <if test="safa != null">safa = #{safa},</if>
+            <if test="safaer != null">safaer = #{safaer},</if>
+            <if test="safaerName != null">safaer_name = #{safaerName},</if>
+            <if test="safaTime != null">safa_time = #{safaTime},</if>
+            <if test="approver != null">approver = #{approver},</if>
+            <if test="approverName != null">approver_name = #{approverName},</if>
+            <if test="approveTime != null">approve_time = #{approveTime},</if>
+            <if test="executor != null">executor = #{executor},</if>
+            <if test="executorName != null">executor_name = #{executorName},</if>
+            <if test="executionTime != null">execution_time = #{executionTime},</if>
+            <if test="confirmer != null">confirmer = #{confirmer},</if>
+            <if test="confirmerName != null">confirmer_name = #{confirmerName},</if>
+            <if test="confirmTime != null">confirm_time = #{confirmTime},</if>
+            <if test="changeExecution != null">change_execution = #{changeExecution},</if>
+            <if test="changeExecutor != null">change_executor = #{changeExecutor},</if>
+            <if test="changeExecutorName != null">change_executor_name = #{changeExecutorName},</if>
+            <if test="changeExecutorTime != null">change_executor_time = #{changeExecutorTime},</if>
+            <if test="resetConfirm != null">reset_confirm = #{resetConfirm},</if>
+            <if test="resetConfirmer1 != null">reset_confirmer1 = #{resetConfirmer1},</if>
+            <if test="resetConfirmerName1 != null">reset_confirmer_name1 = #{resetConfirmerName1},</if>
+            <if test="resetConfirmTime1 != null">reset_confirm_time1 = #{resetConfirmTime1},</if>
+            <if test="resetConfirmer2 != null">reset_confirmer2 = #{resetConfirmer2},</if>
+            <if test="resetConfirmerName2 != null">reset_confirmer_name2 = #{resetConfirmerName2},</if>
+            <if test="resetConfirmTime2 != null">reset_confirm_time2 = #{resetConfirmTime2},</if>
+            <if test="revokeConfirm != null">revoke_confirm = #{revokeConfirm},</if>
+            <if test="remarks != null">remarks = #{remarks},</if>
+            <if test="status != null">status = #{status},</if>
+            <if test="delFlag != null">del_flag = #{delFlag},</if>
+            <if test="createrCode != null">creater_code = #{createrCode},</if>
+            <if test="createdate != null">createdate = #{createdate},</if>
+            <if test="updaterCode != null">updater_code = #{updaterCode},</if>
+            <if test="updatedate != null">updatedate = #{updatedate},</if>
+            <if test="deptId != null">dept_id = #{deptId},</if>
+            <if test="approveStatus != null">approve_status = #{approveStatus},</if>
+            <if test="apNo != null">ap_no = #{apNo},</if>
+            <if test="processId != null">process_id = #{processId},</if>
+            <if test="lockNo != null">lock_no = #{lockNo},</if>
+            <if test="changeConfirmer != null">change_confirmer = #{changeConfirmer},</if>
+            <if test="changeConfirmerName != null">change_confirmer_name = #{changeConfirmerName},</if>
+            <if test="changeConfirmTime != null">change_confirm_time = #{changeConfirmTime},</if>
+            <if test="monitor != null">monitor = #{monitor},</if>
+            <if test="monitorName != null">monitor_name = #{monitorName},</if>
+            <if test="monitorTime != null">monitor_time = #{monitorTime},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <update id="deleteTEoegLockChangeById" parameterType="Long">
+        update t_eoeg_lock_change set del_flag = 2 where id = #{id}
+    </update>
+
+    <update id="deleteTEoegLockChangeByIds" parameterType="String">
+        update t_eoeg_lock_change set del_flag = 2 where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </update>
+    
+</mapper>

+ 156 - 0
master/src/main/resources/mybatis/eoeg/TEoegLockMapper.xml

@@ -0,0 +1,156 @@
+<?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.eoeg.mapper.TEoegLockMapper">
+    
+    <resultMap type="TEoegLock" id="TEoegLockResult">
+        <result property="id"    column="id"    />
+        <result property="uniqueIdentifier"    column="unique_identifier"    />
+        <result property="riskLevel"    column="risk_level"    />
+        <result property="managementLevel"    column="management_level"    />
+        <result property="stature"    column="stature"    />
+        <result property="medium"    column="medium"    />
+        <result property="position"    column="position"    />
+        <result property="locationDes"    column="location_des"    />
+        <result property="valveStatus"    column="valve_status"    />
+        <result property="valveType"    column="valve_type"    />
+        <result property="valveSize"    column="valve_size"    />
+        <result property="reasons"    column="reasons"    />
+        <result property="remarks"    column="remarks"    />
+        <result property="status"    column="status"    />
+        <result property="delFlag"    column="del_flag"    />
+        <result property="createrCode"    column="creater_code"    />
+        <result property="createdate"    column="createdate"    />
+        <result property="updaterCode"    column="updater_code"    />
+        <result property="updatedate"    column="updatedate"    />
+        <result property="deptId"    column="dept_id"    />
+        <result property="deptName" column="dept_name" />
+    </resultMap>
+
+    <sql id="selectTEoegLockVo">
+        select d.id, d.unique_identifier, d.risk_level, d.management_level, d.stature, d.medium, d.position, d.location_des, d.valve_status, d.valve_type, d.valve_size, d.reasons, d.remarks, d.status, d.del_flag, d.creater_code, d.createdate, d.updater_code, d.updatedate, d.dept_id ,s.dept_name from t_eoeg_lock d
+      left join sys_dept s on s.dept_id = d.dept_id
+    </sql>
+
+    <select id="selectTEoegLockList" parameterType="TEoegLock" resultMap="TEoegLockResult">
+        <include refid="selectTEoegLockVo"/>
+        <where>  
+            <if test="uniqueIdentifier != null  and uniqueIdentifier != ''"> and unique_identifier = #{uniqueIdentifier}</if>
+            <if test="riskLevel != null  and riskLevel != ''"> and risk_level = #{riskLevel}</if>
+            <if test="managementLevel != null  and managementLevel != ''"> and management_level = #{managementLevel}</if>
+            <if test="stature != null  and stature != ''"> and stature = #{stature}</if>
+            <if test="medium != null  and medium != ''"> and medium = #{medium}</if>
+            <if test="position != null  and position != ''"> and position = #{position}</if>
+            <if test="locationDes != null  and locationDes != ''"> and location_des = #{locationDes}</if>
+            <if test="valveStatus != null  and valveStatus != ''"> and valve_status = #{valveStatus}</if>
+            <if test="valveType != null  and valveType != ''"> and valve_type = #{valveType}</if>
+            <if test="valveSize != null  and valveSize != ''"> and valve_size = #{valveSize}</if>
+            <if test="reasons != null  and reasons != ''"> and reasons = #{reasons}</if>
+            <if test="remarks != null  and remarks != ''"> and remarks = #{remarks}</if>
+            <if test="status != null "> and status = #{status}</if>
+            <if test="createrCode != null  and createrCode != ''"> and creater_code = #{createrCode}</if>
+            <if test="createdate != null "> and createdate = #{createdate}</if>
+            <if test="updaterCode != null "> and updater_code = #{updaterCode}</if>
+            <if test="updatedate != null "> and updatedate = #{updatedate}</if>
+            <if test="deptId != null "> and dept_id = #{deptId}</if>
+            and d.del_flag = 0
+        </where>
+        <!-- 数据范围过滤 -->
+        ${params.dataScope}
+    </select>
+    
+    <select id="selectTEoegLockById" parameterType="Long" resultMap="TEoegLockResult">
+        <include refid="selectTEoegLockVo"/>
+        where id = #{id}
+    </select>
+        
+    <insert id="insertTEoegLock" parameterType="TEoegLock">
+        <selectKey keyProperty="id" resultType="long" order="BEFORE">
+            SELECT seq_t_eoeg_lock.NEXTVAL as id FROM DUAL
+        </selectKey>
+        insert into t_eoeg_lock
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null">id,</if>
+            <if test="uniqueIdentifier != null">unique_identifier,</if>
+            <if test="riskLevel != null">risk_level,</if>
+            <if test="managementLevel != null">management_level,</if>
+            <if test="stature != null">stature,</if>
+            <if test="medium != null">medium,</if>
+            <if test="position != null">position,</if>
+            <if test="locationDes != null">location_des,</if>
+            <if test="valveStatus != null">valve_status,</if>
+            <if test="valveType != null">valve_type,</if>
+            <if test="valveSize != null">valve_size,</if>
+            <if test="reasons != null">reasons,</if>
+            <if test="remarks != null">remarks,</if>
+            <if test="status != null">status,</if>
+            <if test="delFlag != null">del_flag,</if>
+            <if test="createrCode != null">creater_code,</if>
+            <if test="createdate != null">createdate,</if>
+            <if test="updaterCode != null">updater_code,</if>
+            <if test="updatedate != null">updatedate,</if>
+            <if test="deptId != null">dept_id,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null">#{id},</if>
+            <if test="uniqueIdentifier != null">#{uniqueIdentifier},</if>
+            <if test="riskLevel != null">#{riskLevel},</if>
+            <if test="managementLevel != null">#{managementLevel},</if>
+            <if test="stature != null">#{stature},</if>
+            <if test="medium != null">#{medium},</if>
+            <if test="position != null">#{position},</if>
+            <if test="locationDes != null">#{locationDes},</if>
+            <if test="valveStatus != null">#{valveStatus},</if>
+            <if test="valveType != null">#{valveType},</if>
+            <if test="valveSize != null">#{valveSize},</if>
+            <if test="reasons != null">#{reasons},</if>
+            <if test="remarks != null">#{remarks},</if>
+            <if test="status != null">#{status},</if>
+            <if test="delFlag != null">#{delFlag},</if>
+            <if test="createrCode != null">#{createrCode},</if>
+            <if test="createdate != null">#{createdate},</if>
+            <if test="updaterCode != null">#{updaterCode},</if>
+            <if test="updatedate != null">#{updatedate},</if>
+            <if test="deptId != null">#{deptId},</if>
+         </trim>
+    </insert>
+
+    <update id="updateTEoegLock" parameterType="TEoegLock">
+        update t_eoeg_lock
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="uniqueIdentifier != null">unique_identifier = #{uniqueIdentifier},</if>
+            <if test="riskLevel != null">risk_level = #{riskLevel},</if>
+            <if test="managementLevel != null">management_level = #{managementLevel},</if>
+            <if test="stature != null">stature = #{stature},</if>
+            <if test="medium != null">medium = #{medium},</if>
+            <if test="position != null">position = #{position},</if>
+            <if test="locationDes != null">location_des = #{locationDes},</if>
+            <if test="valveStatus != null">valve_status = #{valveStatus},</if>
+            <if test="valveType != null">valve_type = #{valveType},</if>
+            <if test="valveSize != null">valve_size = #{valveSize},</if>
+            <if test="reasons != null">reasons = #{reasons},</if>
+            <if test="remarks != null">remarks = #{remarks},</if>
+            <if test="status != null">status = #{status},</if>
+            <if test="delFlag != null">del_flag = #{delFlag},</if>
+            <if test="createrCode != null">creater_code = #{createrCode},</if>
+            <if test="createdate != null">createdate = #{createdate},</if>
+            <if test="updaterCode != null">updater_code = #{updaterCode},</if>
+            <if test="updatedate != null">updatedate = #{updatedate},</if>
+            <if test="deptId != null">dept_id = #{deptId},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <update id="deleteTEoegLockById" parameterType="Long">
+        update t_eoeg_lock set del_flag = 2 where id = #{id}
+    </update>
+
+    <update id="deleteTEoegLockByIds" parameterType="String">
+        update t_eoeg_lock set del_flag = 2 where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </update>
+    
+</mapper>

+ 11 - 4
master/src/main/resources/mybatis/plant/TStaffmgrMapper.xml

@@ -63,9 +63,15 @@
         and d.DEL_FLAG!=9
     </select>
 
-    <select id="selectUserInfoByStaffmgr" parameterType="TStaffmgr" resultType="map">
-        select b.USER_ID userId,b.NICK_NAME nickName from T_STAFFMGR a
-        left join SYS_USER b on a.STAFFID=b.STAFFID
+    <select id="selectUserInfoByStaffmgr" parameterType="TStaffmgr" resultMap="TStaffmgrResult">
+        select d.id, d.plant_code, d.staffid, d.name, d.photo, d.sex, d.birthday, d.unit,
+        d.team, d.actualpost, d.contact, d.del_flag, d.creater_code, d.createdate, d.updater_code,
+        d.updatedate, d.dept_id, d.remarks, d.education, d.en_ability, d.accident_num, d.mail,
+        d.skill_score, d.p_id , d.special_duty,d.region, s.dept_name,u.user_id
+
+        from t_staffmgr d
+        left join sys_dept s on s.dept_id = d.dept_id
+        left join SYS_USER u on d.staffid=u.staffid
         <where>
             <if test="actualposts != null  and actualposts != ''">
                 and actualpost in
@@ -74,7 +80,8 @@
                     #{item}
                 </foreach>
             </if>
-            and a.DEL_FLAG=0
+            and d.DEL_FLAG=0
+            and u.user_id is not null
         </where>
         ${params.dataScope}
     </select>

+ 175 - 0
master/src/main/resources/processes/eoeg/eoegLock.bpmn

@@ -0,0 +1,175 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test">
+  <process id="eoegLock" name="EOEG Lock" isExecutable="true">
+    <startEvent id="startevent1" name="Start"></startEvent>
+    <userTask id="applyTask" name="申请人提交申请" activiti:assignee="#{applyuser}"></userTask>
+    <sequenceFlow id="flow1" sourceRef="startevent1" targetRef="applyTask"></sequenceFlow>
+    <userTask id="pgrtask" name="评估人" activiti:candidateUsers="#{safaer}"></userTask>
+    <sequenceFlow id="flow2" sourceRef="applyTask" targetRef="pgrtask">
+      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${condition == 1}]]></conditionExpression>
+    </sequenceFlow>
+    <sequenceFlow id="flow3" name="驳回" sourceRef="pgrtask" targetRef="applyTask">
+      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${condition == 2}]]></conditionExpression>
+    </sequenceFlow>
+    <exclusiveGateway id="exclusivegateway" name="判断等级"></exclusiveGateway>
+    <sequenceFlow id="flow4" sourceRef="pgrtask" targetRef="exclusivegateway">
+      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${condition == 1}]]></conditionExpression>
+    </sequenceFlow>
+    <userTask id="pzrtask" name="批准人" activiti:candidateUsers="#{approver}"></userTask>
+    <sequenceFlow id="flow6" name="B 级风险" sourceRef="exclusivegateway" targetRef="pzrtask">
+      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${condition == 2}]]></conditionExpression>
+    </sequenceFlow>
+    <sequenceFlow id="flow8" name="驳回" sourceRef="pzrtask" targetRef="pgrtask">
+      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${condition == 2}]]></conditionExpression>
+    </sequenceFlow>
+    <userTask id="pgrtask2" name="评估人" activiti:candidateUsers="#{safaer}"></userTask>
+    <sequenceFlow id="flow9" name="C/D 级风险" sourceRef="exclusivegateway" targetRef="pgrtask2">
+      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${condition == 1}]]></conditionExpression>
+    </sequenceFlow>
+    <userTask id="csqrrtask" name="措施确认人" activiti:candidateUsers="#{safaer}"></userTask>
+    <sequenceFlow id="flow10" sourceRef="pgrtask2" targetRef="csqrrtask">
+      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${condition == 1}]]></conditionExpression>
+    </sequenceFlow>
+    <sequenceFlow id="flow11" sourceRef="pzrtask" targetRef="csqrrtask">
+      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${condition == 1}]]></conditionExpression>
+    </sequenceFlow>
+    <userTask id="bgqrrtask" name="变更确认人" activiti:candidateUsers="#{changeConfirmer}"></userTask>
+    <sequenceFlow id="flow12" sourceRef="csqrrtask" targetRef="bgqrrtask">
+      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${condition == 1}]]></conditionExpression>
+    </sequenceFlow>
+    <userTask id="bztask" name="班长" activiti:candidateUsers="#{monitor}"></userTask>
+    <sequenceFlow id="flow13" sourceRef="bgqrrtask" targetRef="bztask">
+      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${condition == 1}]]></conditionExpression>
+    </sequenceFlow>
+    <endEvent id="endevent1" name="End"></endEvent>
+    <sequenceFlow id="flow14" sourceRef="bztask" targetRef="endevent1">
+      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${condition == 1}]]></conditionExpression>
+    </sequenceFlow>
+    <endEvent id="endevent2" name="End"></endEvent>
+    <sequenceFlow id="flow15" name="拒绝" sourceRef="pgrtask" targetRef="endevent2">
+      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${condition == 0}]]></conditionExpression>
+    </sequenceFlow>
+    <sequenceFlow id="flow16" name="拒绝" sourceRef="pzrtask" targetRef="endevent2">
+      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${condition == 0}]]></conditionExpression>
+    </sequenceFlow>
+  </process>
+  <bpmndi:BPMNDiagram id="BPMNDiagram_eoegLock">
+    <bpmndi:BPMNPlane bpmnElement="eoegLock" id="BPMNPlane_eoegLock">
+      <bpmndi:BPMNShape bpmnElement="startevent1" id="BPMNShape_startevent1">
+        <omgdc:Bounds height="35.0" width="35.0" x="270.0" y="50.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="applyTask" id="BPMNShape_applyTask">
+        <omgdc:Bounds height="55.0" width="105.0" x="235.0" y="120.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="pgrtask" id="BPMNShape_pgrtask">
+        <omgdc:Bounds height="55.0" width="105.0" x="235.0" y="210.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="exclusivegateway" id="BPMNShape_exclusivegateway">
+        <omgdc:Bounds height="40.0" width="40.0" x="267.0" y="310.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="pzrtask" id="BPMNShape_pzrtask">
+        <omgdc:Bounds height="55.0" width="105.0" x="380.0" y="303.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="pgrtask2" id="BPMNShape_pgrtask2">
+        <omgdc:Bounds height="55.0" width="105.0" x="90.0" y="303.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="csqrrtask" id="BPMNShape_csqrrtask">
+        <omgdc:Bounds height="55.0" width="105.0" x="235.0" y="400.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="bgqrrtask" id="BPMNShape_bgqrrtask">
+        <omgdc:Bounds height="55.0" width="105.0" x="235.0" y="500.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="bztask" id="BPMNShape_bztask">
+        <omgdc:Bounds height="55.0" width="105.0" x="235.0" y="600.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="endevent1" id="BPMNShape_endevent1">
+        <omgdc:Bounds height="35.0" width="35.0" x="270.0" y="690.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="endevent2" id="BPMNShape_endevent2">
+        <omgdc:Bounds height="35.0" width="35.0" x="580.0" y="220.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge bpmnElement="flow1" id="BPMNEdge_flow1">
+        <omgdi:waypoint x="287.0" y="85.0"></omgdi:waypoint>
+        <omgdi:waypoint x="287.0" y="120.0"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="flow2" id="BPMNEdge_flow2">
+        <omgdi:waypoint x="287.0" y="175.0"></omgdi:waypoint>
+        <omgdi:waypoint x="287.0" y="210.0"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="flow3" id="BPMNEdge_flow3">
+        <omgdi:waypoint x="340.0" y="237.0"></omgdi:waypoint>
+        <omgdi:waypoint x="407.0" y="237.0"></omgdi:waypoint>
+        <omgdi:waypoint x="407.0" y="206.0"></omgdi:waypoint>
+        <omgdi:waypoint x="407.0" y="147.0"></omgdi:waypoint>
+        <omgdi:waypoint x="340.0" y="147.0"></omgdi:waypoint>
+        <bpmndi:BPMNLabel>
+          <omgdc:Bounds height="16.0" width="100.0" x="409.0" y="180.0"></omgdc:Bounds>
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="flow4" id="BPMNEdge_flow4">
+        <omgdi:waypoint x="287.0" y="265.0"></omgdi:waypoint>
+        <omgdi:waypoint x="287.0" y="310.0"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="flow6" id="BPMNEdge_flow6">
+        <omgdi:waypoint x="307.0" y="330.0"></omgdi:waypoint>
+        <omgdi:waypoint x="380.0" y="330.0"></omgdi:waypoint>
+        <bpmndi:BPMNLabel>
+          <omgdc:Bounds height="16.0" width="100.0" x="307.0" y="330.0"></omgdc:Bounds>
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="flow8" id="BPMNEdge_flow8">
+        <omgdi:waypoint x="432.0" y="303.0"></omgdi:waypoint>
+        <omgdi:waypoint x="432.0" y="243.0"></omgdi:waypoint>
+        <omgdi:waypoint x="420.0" y="237.0"></omgdi:waypoint>
+        <omgdi:waypoint x="340.0" y="237.0"></omgdi:waypoint>
+        <bpmndi:BPMNLabel>
+          <omgdc:Bounds height="16.0" width="100.0" x="432.0" y="267.0"></omgdc:Bounds>
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="flow9" id="BPMNEdge_flow9">
+        <omgdi:waypoint x="267.0" y="330.0"></omgdi:waypoint>
+        <omgdi:waypoint x="195.0" y="330.0"></omgdi:waypoint>
+        <bpmndi:BPMNLabel>
+          <omgdc:Bounds height="16.0" width="100.0" x="210.0" y="330.0"></omgdc:Bounds>
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="flow10" id="BPMNEdge_flow10">
+        <omgdi:waypoint x="142.0" y="358.0"></omgdi:waypoint>
+        <omgdi:waypoint x="142.0" y="427.0"></omgdi:waypoint>
+        <omgdi:waypoint x="235.0" y="427.0"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="flow11" id="BPMNEdge_flow11">
+        <omgdi:waypoint x="432.0" y="358.0"></omgdi:waypoint>
+        <omgdi:waypoint x="432.0" y="427.0"></omgdi:waypoint>
+        <omgdi:waypoint x="340.0" y="427.0"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="flow12" id="BPMNEdge_flow12">
+        <omgdi:waypoint x="287.0" y="455.0"></omgdi:waypoint>
+        <omgdi:waypoint x="287.0" y="500.0"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="flow13" id="BPMNEdge_flow13">
+        <omgdi:waypoint x="287.0" y="555.0"></omgdi:waypoint>
+        <omgdi:waypoint x="287.0" y="600.0"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="flow14" id="BPMNEdge_flow14">
+        <omgdi:waypoint x="287.0" y="655.0"></omgdi:waypoint>
+        <omgdi:waypoint x="287.0" y="690.0"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="flow15" id="BPMNEdge_flow15">
+        <omgdi:waypoint x="340.0" y="237.0"></omgdi:waypoint>
+        <omgdi:waypoint x="580.0" y="237.0"></omgdi:waypoint>
+        <bpmndi:BPMNLabel>
+          <omgdc:Bounds height="16.0" width="100.0" x="449.0" y="220.0"></omgdc:Bounds>
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="flow16" id="BPMNEdge_flow16">
+        <omgdi:waypoint x="485.0" y="330.0"></omgdi:waypoint>
+        <omgdi:waypoint x="597.0" y="330.0"></omgdi:waypoint>
+        <omgdi:waypoint x="597.0" y="255.0"></omgdi:waypoint>
+        <bpmndi:BPMNLabel>
+          <omgdc:Bounds height="16.0" width="100.0" x="529.0" y="315.0"></omgdc:Bounds>
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+    </bpmndi:BPMNPlane>
+  </bpmndi:BPMNDiagram>
+</definitions>

BIN
master/src/main/resources/static/template/eoeg/eoegLock.xlsx


+ 53 - 0
ui/src/api/eoeg/eoegChange.js

@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+// 查询EOEG 锁开锁关申请列表
+export function listEoegChange(query) {
+  return request({
+    url: '/eoeg/eoegChange/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询EOEG 锁开锁关申请详细
+export function getEoegChange(id) {
+  return request({
+    url: '/eoeg/eoegChange/' + id,
+    method: 'get'
+  })
+}
+
+// 新增EOEG 锁开锁关申请
+export function addEoegChange(data) {
+  return request({
+    url: '/eoeg/eoegChange',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改EOEG 锁开锁关申请
+export function updateEoegChange(data) {
+  return request({
+    url: '/eoeg/eoegChange',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除EOEG 锁开锁关申请
+export function delEoegChange(id) {
+  return request({
+    url: '/eoeg/eoegChange/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出EOEG 锁开锁关申请
+export function exportEoegChange(query) {
+  return request({
+    url: '/eoeg/eoegChange/export',
+    method: 'get',
+    params: query
+  })
+}

+ 61 - 0
ui/src/api/eoeg/eoegLock.js

@@ -0,0 +1,61 @@
+import request from '@/utils/request'
+
+// 查询EOEG 锁开锁关列表
+export function listEoegLock(query) {
+  return request({
+    url: '/eoeg/eoegLock/list',
+    method: 'get',
+    params: query
+  })
+}
+
+export function listEoegLockBranch(query) {
+  return request({
+    url: '/eoeg/eoegLock/listLockBranch',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询EOEG 锁开锁关详细
+export function getEoegLock(id) {
+  return request({
+    url: '/eoeg/eoegLock/' + id,
+    method: 'get'
+  })
+}
+
+// 新增EOEG 锁开锁关
+export function addEoegLock(data) {
+  return request({
+    url: '/eoeg/eoegLock',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改EOEG 锁开锁关
+export function updateEoegLock(data) {
+  return request({
+    url: '/eoeg/eoegLock',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除EOEG 锁开锁关
+export function delEoegLock(id) {
+  return request({
+    url: '/eoeg/eoegLock/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出EOEG 锁开锁关
+export function exportEoegLock(query) {
+  return request({
+    url: '/eoeg/eoegLock/export',
+    method: 'get',
+    params: query
+  })
+}

+ 53 - 0
ui/src/api/eoeg/lockApply.js

@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+// 查询EOEG 审批流关联列表
+export function listLockApply(query) {
+  return request({
+    url: '/eoeg/lockApply/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询EOEG 审批流关联详细
+export function getLockApply(id) {
+  return request({
+    url: '/eoeg/lockApply/' + id,
+    method: 'get'
+  })
+}
+
+// 新增EOEG 审批流关联
+export function addLockApply(data) {
+  return request({
+    url: '/eoeg/lockApply',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改EOEG 审批流关联
+export function updateLockApply(data) {
+  return request({
+    url: '/eoeg/lockApply',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除EOEG 审批流关联
+export function delLockApply(id) {
+  return request({
+    url: '/eoeg/lockApply/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出EOEG 审批流关联
+export function exportLockApply(query) {
+  return request({
+    url: '/eoeg/lockApply/export',
+    method: 'get',
+    params: query
+  })
+}

+ 7 - 0
ui/src/api/plant/staffmgr.js

@@ -57,6 +57,13 @@ export function listStaffmgr(query) {
     params: query
   })
 }
+export function listStaffmgrByActualposts(query) {
+  return request({
+    url: '/plant/staffmgr/listStaffmgrByActualposts',
+    method: 'get',
+    params: query
+  })
+}
 export function listAllStaffmgr(query) {
   return request({
     url: '/plant/staffmgr/getAllList',

+ 655 - 0
ui/src/views/eoeg/eoegChange/index.vue

@@ -0,0 +1,655 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
+
+      <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="['eoeg:eoegChange: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="['eoeg:eoegChange: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="['eoeg:eoegChange:remove']"
+        >删除
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['eoeg:eoegChange:export']"
+        >导出
+        </el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="eoegChangeList" @selection-change="handleSelectionChange"
+              :height="clientHeight" border>
+      <el-table-column type="selection" width="55" align="center" fixed="left"/>
+      <el-table-column label="申请状态" align="center" prop="approveStatus"
+                       :show-overflow-tooltip="true" width="150" fixed="left"/>
+      <el-table-column label="锁编号" align="center" prop="lockNo" :show-overflow-tooltip="true" width="200"
+                       fixed="left"/>
+      <el-table-column label="措施变更描述" align="center" prop="changeDescribe" :show-overflow-tooltip="true"
+                       width="200"/>
+      <el-table-column label="状态变更原因" align="center" prop="changeReason" :show-overflow-tooltip="true"
+                       width="200"/>
+      <el-table-column label="申请人" align="center" prop="applicantName" :show-overflow-tooltip="true" width="200"/>
+      <el-table-column label="申请时间" align="center" prop="applicationTime" width="100">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.applicationTime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="评估及临时的安全措施" align="center" prop="safa" :show-overflow-tooltip="true"
+                       width="200"/>
+      <el-table-column label="评估人" align="center" prop="safaerName" :show-overflow-tooltip="true" width="200"/>
+      <el-table-column label="评估时间" align="center" prop="safaTime" width="100">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.safaTime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="批准人" align="center" prop="approverName" :show-overflow-tooltip="true" width="200"/>
+      <el-table-column label="批准时间" align="center" prop="approveTime" width="100">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.approveTime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="措施确认人" align="center" prop="confirmerName"
+                       :show-overflow-tooltip="true" width="200"/>
+      <el-table-column label="措施确认时间" align="center" prop="confirmTime" width="100">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.confirmTime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="措施执行人" align="center" prop="executorName" :show-overflow-tooltip="true" width="200"/>
+      <el-table-column label="措施执行时间" align="center" prop="executionTime" width="100">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.executionTime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="变更确认人" align="center" prop="changeConfirmerName" :show-overflow-tooltip="true"
+                       width="200"/>
+      <el-table-column label="变更确认人确认时间" align="center" prop="changeConfirmTime" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.changeConfirmTime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="变更执行人" align="center" prop="changeExecutorName" :show-overflow-tooltip="true"
+                       width="200"/>
+      <el-table-column label="变更执行时间" align="center" prop="changeExecutorTime" width="100">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.changeExecutorTime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="班长" align="center" prop="monitorName" :show-overflow-tooltip="true" width="200"/>
+      <el-table-column label="班长确认时间" align="center" prop="monitorTime" width="100">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.monitorTime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="状态恢复后,之前采取的安全措施是否已撤销:" align="center" prop="revokeConfirm"
+                       :show-overflow-tooltip="true" width="200"/>
+      <el-table-column label="组织保护措施状态变更执行" align="center" prop="changeExecution"
+                       :show-overflow-tooltip="true" width="200"/>
+      <el-table-column label="组织保护措施是否已经恢复至变更前的状态" align="center" prop="resetConfirm"
+                       :show-overflow-tooltip="true" width="200"/>
+      <el-table-column label="确认人1" align="center" prop="resetConfirmerName1"
+                       :show-overflow-tooltip="true" width="200"/>
+      <el-table-column label="确认时间1" align="center" prop="resetConfirmTime1" width="100">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.resetConfirmTime1, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="确认人2" align="center" prop="resetConfirmerName2"
+                       :show-overflow-tooltip="true" width="200"/>
+      <el-table-column label="确认时间2" align="center" prop="resetConfirmTime2" width="100">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.resetConfirmTime2, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="备注" align="center" prop="remarks" :show-overflow-tooltip="true" width="200"/>
+      <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="['eoeg:eoegChange:edit']"
+          >修改
+          </el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['eoeg:eoegChange:remove']"
+          >删除
+          </el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改EOEG 锁开锁关申请对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="700px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="180px">
+        <el-form-item label="破锁编号" prop="lockNo">
+          <el-select v-model="form.lockNo" placeholder="请选择锁编号" multiple clearable size="small" filterable
+                     style="width: 100%">
+            <el-option v-for="item in lockList" :key="item.uniqueIdentifier" :label="item.uniqueIdentifier"
+                       :value="item.uniqueIdentifier">
+            </el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="组织保护措施变更描述" prop="changeDescribe">
+          <el-input type="textarea" v-model="form.changeDescribe" placeholder="请输入组织保护措施变更描述"/>
+        </el-form-item>
+        <el-form-item label="状态变更原因" prop="changeReason">
+          <el-input type="textarea" v-model="form.changeReason" placeholder="请输入状态变更原因"/>
+        </el-form-item>
+        <el-form-item label="安全评估及临时的安全措施" prop="safa">
+          <el-input type="textarea" v-model="form.safa" placeholder="请输入安全评估及临时的安全措施"/>
+        </el-form-item>
+        <el-form-item label="评估人" prop="safaer">
+          <el-select clearable filterable v-model="form.safaer">
+            <el-option v-for="item in staffmgrOptions" :key="item.userId" :label="item.name" :value="item.userId">
+            </el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="措施执行人" prop="executor">
+          <el-select clearable filterable v-model="form.executor" @change="compareToStaff('executor')">
+            <el-option v-for="item in classStaffOptions" :key="item.userId" :label="item.name" :value="item.userId">
+            </el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="变更执行人" prop="changeExecutor">
+          <el-select clearable filterable v-model="form.changeExecutor" @change="compareToStaff('changeExecutor')">
+            <el-option v-for="item in classStaffOptions" :key="item.userId" :label="item.name" :value="item.userId">
+            </el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="变更确认人" prop="changeConfirmer">
+          <el-select clearable filterable v-model="form.changeConfirmer" @change="compareToStaff('changeConfirmer')">
+            <el-option v-for="item in classStaffOptions" :key="item.userId" :label="item.name" :value="item.userId">
+            </el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="备注" prop="remarks">
+          <el-input v-model="form.remarks" 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>
+  </div>
+</template>
+
+<script>
+import {
+  listEoegChange,
+  getEoegChange,
+  delEoegChange,
+  addEoegChange,
+  updateEoegChange,
+  exportEoegChange,
+  importTemplate
+} from "@/api/eoeg/eoegChange";
+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 {listEoegLock} from "@/api/eoeg/eoegLock";
+import {listStaffmgr, listStaffmgrByActualposts} from "@/api/plant/staffmgr";
+
+export default {
+  name: "EoegChange",
+  components: {Treeselect},
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      lockList: [],
+      staffmgrOptions: [],
+      classStaffOptions: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: false,
+      // 总条数
+      total: 0,
+      // EOEG 锁开锁关申请表格数据
+      eoegChangeList: [],
+      // 弹出层标题
+      title: "",
+      // 部门树选项
+      deptOptions: undefined,
+      clientHeight: 300,
+      // 是否显示弹出层
+      open: false,
+      // 用户导入参数
+      upload: {
+        // 是否显示弹出层(用户导入)
+        open: false,
+        // 弹出层标题(用户导入)
+        title: "",
+        // 是否禁用上传
+        isUploading: false,
+        // 是否更新已经存在的用户数据
+        updateSupport: 0,
+        // 设置上传的请求头部
+        headers: {Authorization: "Bearer " + getToken()},
+        // 上传的地址
+        url: process.env.VUE_APP_BASE_API + "/eoeg/eoegChange/importData"
+      },
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 20,
+        changeDescribe: null,
+        changeReason: null,
+        applicant: null,
+        applicantName: null,
+        applicationTime: null,
+        safa: null,
+        safaer: null,
+        safaerName: null,
+        safaTime: null,
+        approver: null,
+        approverName: null,
+        approveTime: null,
+        executor: null,
+        executorName: null,
+        executionTime: null,
+        confirmer: null,
+        confirmerName: null,
+        confirmTime: null,
+        changeExecution: null,
+        changeExecutor: null,
+        changeExecutorName: null,
+        changeExecutorTime: null,
+        resetConfirm: null,
+        resetConfirmer1: null,
+        resetConfirmerName1: null,
+        resetConfirmTime1: null,
+        resetConfirmer2: null,
+        resetConfirmerName2: null,
+        resetConfirmTime2: null,
+        revokeConfirm: null,
+        remarks: null,
+        status: null,
+        createrCode: null,
+        createdate: null,
+        updaterCode: null,
+        updatedate: null,
+        deptId: null,
+        approveStatus: null,
+        apNo: null,
+        processId: null,
+        lockNo: null,
+        changeConfirmer: null,
+        changeConfirmerName: null,
+        changeConfirmTime: null,
+        monitor: null,
+        monitorName: null,
+        monitorTime: null
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        lockNo: [
+          { required: true, message: '锁编号不能为空', trigger: 'change' }
+        ],
+        changeDescribe: [
+          { required: true, message: '组织保护措施变更描述不能为空', trigger: 'blur' }
+        ],
+        changeReason: [
+          { required: true, message: '状态变更原因不能为空', trigger: 'blur' }
+        ],
+        safa: [
+          { required: true, message: '安全评估及临时的安全措施不能为空', trigger: 'blur' }
+        ],
+        safaer: [
+          { required: true, message: '评估人不能为空', trigger: 'change' }
+        ],
+        executor: [
+          { required: true, message: '措施执行人不能为空', trigger: 'change' }
+        ],
+        changeExecutor: [
+          { required: true, message: '变更执行人不能为空', trigger: 'change' }
+        ],
+        changeConfirmer: [
+          { required: true, message: '变更确认人不能为空', trigger: 'change' }
+        ],
+      }
+
+    };
+  },
+  watch: {
+    // 根据名称筛选部门树
+    deptName(val) {
+      this.$refs.tree.filter(val);
+    }
+  },
+  created() {
+    //设置表格高度对应屏幕高度
+    this.$nextTick(() => {
+      this.clientHeight = document.body.clientHeight - 250
+    })
+    this.getList();
+    this.getTreeselect();
+    this.getLockList();
+    this.getSaferList();
+    this.getClassStaffList();
+  },
+  methods: {
+    compareToStaff(field) {
+      // 定义验证规则:字段名和错误消息
+      const validationRules = [
+        {
+          fields: ['changeConfirmer', 'executor'],
+          message: '变更确认人不能与措施执行人为同一人!'
+        },
+        {
+          fields: ['changeConfirmer', 'changeExecutor'],
+          message: '变更确认人不能与变更执行人为同一人!'
+        },
+        {
+          fields: ['executor', 'changeExecutor'],
+          message: '措施执行人不能与变更执行人为同一人!'
+        }
+      ];
+      const isValidValue = (value) => {
+        return value !== null && value !== undefined && value !== '';
+      };
+
+      // 使用循环检查所有规则
+      for (const rule of validationRules) {
+        const [field1, field2] = rule.fields;
+        const value1 = this.form[field1];
+        const value2 = this.form[field2];
+
+        // 只有当两个字段都有有效值且相等时才提示
+        if (isValidValue(value1) && isValidValue(value2) && value1 === value2) {
+          this.$alert(rule.message, "警告", {dangerouslyUseHTMLString: true});
+          this.form[field] = null;
+          break;
+        }
+      }
+    },
+
+    getSaferList() {
+      listStaffmgrByActualposts({actualposts: "14,16,24,25,26"}).then(response => {
+        this.staffmgrOptions = response.data;
+      });
+    },
+    getClassStaffList() {
+      listStaffmgrByActualposts({actualposts: "10,11,12,34"}).then(response => {
+        this.classStaffOptions = response.data;
+      });
+    },
+    getLockList() {
+      listEoegLock({}).then(response => {
+        this.lockList = response.rows;
+      });
+    },
+    /** 查询EOEG 锁开锁关申请列表 */
+    getList() {
+      this.loading = true;
+      listEoegChange(this.queryParams).then(response => {
+        this.eoegChangeList = 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,
+        changeDescribe: null,
+        changeReason: null,
+        applicant: null,
+        applicantName: null,
+        applicationTime: null,
+        safa: null,
+        safaer: null,
+        safaerName: null,
+        safaTime: null,
+        approver: null,
+        approverName: null,
+        approveTime: null,
+        executor: null,
+        executorName: null,
+        executionTime: null,
+        confirmer: null,
+        confirmerName: null,
+        confirmTime: null,
+        changeExecution: null,
+        changeExecutor: null,
+        changeExecutorName: null,
+        changeExecutorTime: null,
+        resetConfirm: null,
+        resetConfirmer1: null,
+        resetConfirmerName1: null,
+        resetConfirmTime1: null,
+        resetConfirmer2: null,
+        resetConfirmerName2: null,
+        resetConfirmTime2: null,
+        revokeConfirm: null,
+        remarks: null,
+        status: 0,
+        delFlag: null,
+        createrCode: null,
+        createdate: null,
+        updaterCode: null,
+        updatedate: null,
+        deptId: null,
+        approveStatus: "0",
+        apNo: null,
+        processId: null,
+        lockNo: null,
+        changeConfirmer: null,
+        changeConfirmerName: null,
+        changeConfirmTime: null,
+        monitor: null,
+        monitorName: null,
+        monitorTime: 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 = "添加EOEG 锁开锁关申请";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getEoegChange(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改EOEG 锁开锁关申请";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateEoegChange(this.form).then(response => {
+              this.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addEoegChange(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 delEoegChange(ids);
+      }).then(() => {
+        this.getList();
+        this.msgSuccess("删除成功");
+      })
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      const queryParams = this.queryParams;
+      this.$confirm('是否确认导出所有EOEG 锁开锁关申请数据项?', "警告", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(function () {
+        return exportEoegChange(queryParams);
+      }).then(response => {
+        this.download(response.msg);
+      })
+    },
+    /** 导入按钮操作 */
+    handleImport() {
+      this.upload.title = "用户导入";
+      this.upload.open = true;
+    },
+    /** 下载模板操作 */
+    importTemplate() {
+      importTemplate().then(response => {
+        this.download(response.msg);
+      });
+    },
+    // 文件上传中处理
+    handleFileUploadProgress(event, file, fileList) {
+      this.upload.isUploading = true;
+    },
+    // 文件上传成功处理
+    handleFileSuccess(response, file, fileList) {
+      this.upload.open = false;
+      this.upload.isUploading = false;
+      this.$refs.upload.clearFiles();
+      this.$alert(response.msg, "导入结果", {dangerouslyUseHTMLString: true});
+      this.getList();
+    },
+    // 提交上传文件
+    submitFileForm() {
+      this.$refs.upload.submit();
+    }
+  }
+};
+</script>

+ 57 - 0
ui/src/views/eoeg/eoegLock/eoeg-dashboard.vue

@@ -0,0 +1,57 @@
+<template>
+  <div class="app-container" style="padding: 0 0 0 0">
+    <el-tabs type="border-card" v-model="activeName" @tab-click="handleClick">
+      <el-tab-pane label="B" name="first">
+        <LockLevelB item="B" typename="" v-if="isFirst" page-number="1"></LockLevelB>
+      </el-tab-pane>
+      <el-tab-pane label="C" name="second">
+        <LockLevelC item="C" typename="" v-if="isSecond" page-number="2"></LockLevelC>
+      </el-tab-pane>
+      <el-tab-pane label="D" name="third">
+        <LockLevelA item="D" typename="" v-if="isThird" page-number="3"></LockLevelA>
+      </el-tab-pane>
+    </el-tabs>
+  </div>
+</template>
+
+<script>
+import LockLevelA from "@/views/eoeg/eoegLock/lock-levelA.vue";
+import LockLevelB from "@/views/eoeg/eoegLock/lock-levelB.vue";
+import LockLevelC from "@/views/eoeg/eoegLock/lock-levelC.vue";
+
+export default {
+  name: "lock-dashboard",
+  components: {LockLevelC, LockLevelB, LockLevelA},
+  data() {
+    return {
+      // 默认第一个Tab
+      activeName: 'first',
+      isFirst: true,
+      isSecond: false,
+      isThird: false,
+    }
+  },
+  methods: {
+    handleClick(tab) {
+      if (tab.name === 'first') {
+        this.isFirst = true
+        this.isSecond = false
+        this.isThird = false
+      } else if (tab.name === 'second') {
+        this.isFirst = false
+        this.isSecond = true
+        this.isThird = false
+        this.isFourth = false
+      } else if (tab.name === 'third') {
+        this.isFirst = false
+        this.isSecond = false
+        this.isThird = true
+      }
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 469 - 0
ui/src/views/eoeg/eoegLock/index.vue

@@ -0,0 +1,469 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="唯一编号" prop="uniqueIdentifier">
+        <el-input
+          v-model="queryParams.uniqueIdentifier"
+          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>
+      </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="['eoeg:eoegLock: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="['eoeg:eoegLock: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="['eoeg:eoegLock:remove']"
+        >删除
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="info"
+          icon="el-icon-upload2"
+          size="mini"
+          @click="handleImport"
+          v-hasPermi="['eoeg:eoegLock:edit']"
+        >导入
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['eoeg:eoegLock:export']"
+        >导出
+        </el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="eoegLockList" @selection-change="handleSelectionChange" :height="clientHeight"
+              border>
+      <el-table-column type="selection" width="55" align="center"/>
+      <el-table-column label="唯一编号" align="center" prop="uniqueIdentifier" :show-overflow-tooltip="true"/>
+      <el-table-column label="风险等级" align="center" prop="riskLevel" :show-overflow-tooltip="true"/>
+      <el-table-column label="管理等级" align="center" prop="managementLevel" :show-overflow-tooltip="true"/>
+      <el-table-column label="STATURE" align="center" prop="stature" :show-overflow-tooltip="true"/>
+      <el-table-column label="介质" align="center" prop="medium" :show-overflow-tooltip="true"/>
+      <el-table-column label="地点" align="center" prop="position" :show-overflow-tooltip="true"/>
+      <el-table-column label="位置描述" align="center" prop="locationDes" :show-overflow-tooltip="true"/>
+      <el-table-column label="阀门状态" align="center" prop="valveStatus" :show-overflow-tooltip="true">
+        <template slot-scope="scope">
+          <el-tag v-if="scope.row.valveStatus === 'LCHQ'" type="danger">LCHQ</el-tag>
+          <el-tag v-else-if="scope.row.valveStatus === 'LOHQ'" type="success">LOHQ</el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column label="阀门类型" align="center" prop="valveType" :show-overflow-tooltip="true"/>
+      <el-table-column label="尺寸" align="center" prop="valveSize" :show-overflow-tooltip="true"/>
+      <el-table-column label="锁开/锁关原因" align="center" prop="reasons" :show-overflow-tooltip="true"/>
+      <el-table-column label="备注" align="center" prop="remarks" :show-overflow-tooltip="true"/>
+      <el-table-column label="操作" align="center" fixed="right" width="120" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['eoeg:eoegLock:edit']"
+          >修改
+          </el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['eoeg:eoegLock:remove']"
+          >删除
+          </el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改EOEG 锁开锁关对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="唯一编号" prop="uniqueIdentifier">
+          <el-input v-model="form.uniqueIdentifier" placeholder="请输入唯一编号"/>
+        </el-form-item>
+        <el-form-item label="风险等级" prop="riskLevel">
+          <el-input v-model="form.riskLevel" placeholder="请输入风险等级"/>
+        </el-form-item>
+        <el-form-item label="管理等级" prop="managementLevel">
+          <el-input v-model="form.managementLevel" placeholder="请输入管理等级"/>
+        </el-form-item>
+        <el-form-item label="STATURE" prop="stature">
+          <el-input v-model="form.stature" placeholder="请输入STATURE"/>
+        </el-form-item>
+        <el-form-item label="介质" prop="medium">
+          <el-input v-model="form.medium" placeholder="请输入介质"/>
+        </el-form-item>
+        <el-form-item label="地点" prop="position">
+          <el-input v-model="form.position" placeholder="请输入地点"/>
+        </el-form-item>
+        <el-form-item label="位置描述" prop="locationDes">
+          <el-input v-model="form.locationDes" placeholder="请输入位置描述"/>
+        </el-form-item>
+        <el-form-item label="阀门状态">
+          <el-radio-group v-model="form.valveStatus">
+            <el-radio border label="LCHQ" value="LCHQ"></el-radio>
+            <el-radio border label="LOHQ" value="LOHQ"></el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="阀门类型" prop="valveType">
+          <el-input v-model="form.valveType" placeholder="请输入阀门类型"/>
+        </el-form-item>
+        <el-form-item label="尺寸" prop="valveSize">
+          <el-input v-model="form.valveSize" placeholder="请输入尺寸"/>
+        </el-form-item>
+        <el-form-item label="锁开/锁关原因" prop="reasons">
+          <el-input v-model="form.reasons" placeholder="请输入锁开/锁关原因"/>
+        </el-form-item>
+        <el-form-item label="备注" prop="remarks">
+          <el-input v-model="form.remarks" placeholder="请输入备注"/>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+    <!-- 用户导入对话框 -->
+    <el-dialog :close-on-click-modal="false" v-dialogDrag :title="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"
+        :disabled="upload.isUploading"
+        :on-progress="handleFileUploadProgress"
+        :on-success="handleFileSuccess"
+        :auto-upload="false"
+        drag
+      >
+        <i class="el-icon-upload"></i>
+        <div class="el-upload__text">
+          {{ $t('将文件拖到此处,或') }}
+          <em>{{ $t('点击上传') }}</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">{{ $t('下载模板') }}</el-link>
+        </div>
+        <form ref="downloadFileForm" :action="upload.downloadAction" target="FORMSUBMIT">
+          <input name="type" :value="upload.type" hidden/>
+        </form>
+        <div class="el-upload__tip" style="color:red" slot="tip">{{ $t('提示:仅允许导入“xls”或“xlsx”格式文件!') }}</div>
+      </el-upload>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitFileForm">{{ $t('确 定') }}</el-button>
+        <el-button @click="upload.open = false">{{ $t('取 消') }}</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import {
+  listEoegLock,
+  getEoegLock,
+  delEoegLock,
+  addEoegLock,
+  updateEoegLock,
+  exportEoegLock,
+  importTemplate
+} from "@/api/eoeg/eoegLock";
+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";
+
+export default {
+  name: "EoegLock",
+  components: {Treeselect},
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: false,
+      // 总条数
+      total: 0,
+      // EOEG 锁开锁关表格数据
+      eoegLockList: [],
+      // 弹出层标题
+      title: "",
+      // 部门树选项
+      deptOptions: undefined,
+      clientHeight: 300,
+      // 是否显示弹出层
+      open: false,
+      // 用户导入参数
+      upload: {
+        downloadAction: process.env.VUE_APP_BASE_API + '/common/template',
+        //下载模板类型
+        type: "eoegLock",
+        // 是否显示弹出层(用户导入)
+        open: false,
+        // 弹出层标题(用户导入)
+        title: "",
+        // 是否禁用上传
+        isUploading: false,
+        // 是否更新已经存在的用户数据
+        updateSupport: 0,
+        // 设置上传的请求头部
+        headers: {Authorization: "Bearer " + getToken()},
+        // 上传的地址
+        url: process.env.VUE_APP_BASE_API + "/eoeg/eoegLock/importData"
+      },
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 20,
+        uniqueIdentifier: null,
+        riskLevel: null,
+        managementLevel: null,
+        stature: null,
+        medium: null,
+        position: null,
+        locationDes: null,
+        valveStatus: null,
+        valveType: null,
+        valveSize: null,
+        reasons: null,
+        remarks: null,
+        status: null,
+        createrCode: null,
+        createdate: null,
+        updaterCode: null,
+        updatedate: null,
+        deptId: null
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {}
+    };
+  },
+  watch: {
+    // 根据名称筛选部门树
+    deptName(val) {
+      this.$refs.tree.filter(val);
+    }
+  },
+  created() {
+    //设置表格高度对应屏幕高度
+    this.$nextTick(() => {
+      this.clientHeight = document.body.clientHeight - 250
+    })
+    this.getList();
+    this.getTreeselect();
+  },
+  methods: {
+    /** 查询EOEG 锁开锁关列表 */
+    getList() {
+      this.loading = true;
+      listEoegLock(this.queryParams).then(response => {
+        this.eoegLockList = 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,
+        uniqueIdentifier: null,
+        riskLevel: null,
+        managementLevel: null,
+        stature: null,
+        medium: null,
+        position: null,
+        locationDes: null,
+        valveStatus: "0",
+        valveType: null,
+        valveSize: null,
+        reasons: null,
+        remarks: null,
+        status: 0,
+        delFlag: null,
+        createrCode: null,
+        createdate: null,
+        updaterCode: null,
+        updatedate: null,
+        deptId: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length !== 1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加EOEG 锁开锁关";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getEoegLock(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改EOEG 锁开锁关";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateEoegLock(this.form).then(response => {
+              this.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addEoegLock(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 delEoegLock(ids);
+      }).then(() => {
+        this.getList();
+        this.msgSuccess("删除成功");
+      })
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      const queryParams = this.queryParams;
+      this.$confirm('是否确认导出所有EOEG 锁开锁关数据项?', "警告", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(function () {
+        return exportEoegLock(queryParams);
+      }).then(response => {
+        this.download(response.msg);
+      })
+    },
+    /** 导入按钮操作 */
+    handleImport() {
+      this.upload.title = "用户导入";
+      this.upload.open = true;
+    },
+    /** 下载模板操作 */
+    importTemplate() {
+      this.$refs['downloadFileForm'].submit()
+    },
+    // 文件上传中处理
+    handleFileUploadProgress(event, file, fileList) {
+      this.upload.isUploading = true;
+    },
+    // 文件上传成功处理
+    handleFileSuccess(response, file, fileList) {
+      this.upload.open = false;
+      this.upload.isUploading = false;
+      this.$refs.upload.clearFiles();
+      if (response.data[0] != null) {
+        this.$alert(this.$t('成功导入') + response.msg + this.$t('条数据') + "," + this.$t('第') + response.data + this.$t('行数据出现错误导入失败') + "。", this.$t('导入结果'), {dangerouslyUseHTMLString: true});
+      } else {
+        this.$alert(this.$t('成功导入') + response.msg + this.$t('条数据'), this.$t('导入结果'), {dangerouslyUseHTMLString: true});
+      }
+      this.getList();
+    },
+    // 提交上传文件
+    submitFileForm() {
+      this.$refs.upload.submit();
+    },
+  }
+};
+</script>

+ 588 - 0
ui/src/views/eoeg/eoegLock/lock-levelA.vue

@@ -0,0 +1,588 @@
+<template>
+  <div class="app-container" :style="`height:${height}px`" id="parent">
+    <el-row :gutter="10" class="mb8" style="z-index: 10;">
+      <el-tooltip class="top-right-btn" effect="dark" :content="$t('tagsView.refresh')" placement="top">
+        <el-button size="mini" circle icon="el-icon-refresh" @click="getList"/>
+      </el-tooltip>
+    </el-row>
+    <vue-draggable-resizable v-drag
+                             w="auto" h="auto" :draggable="dragMove" style="background-color:#fff;padding: 0px  20px">
+      <div class="zoom" @wheel.prevent="handleTableWheel($event)" ref="branch">
+        <table v-if="!loading&&data.length>0">
+          <tr>
+            <th>
+              <el-tag class="fwAndbg" size="medium" style="font-size: 12px;margin: 5px 10px;">LOHQ</el-tag>
+            </th>
+            <th>
+              <el-tag class="fwAndbr" size="medium" style="font-size: 12px;margin: 5px 10px;">LCHQ</el-tag>
+            </th>
+            <th colspan="25">
+              <span style="font-size: 40px">EOEG装置锁开&锁关摆放看板</span><br/>
+            </th>
+            <th colspan="5">
+            </th>
+          </tr>
+          <tr v-for="(list) in data">
+            <td v-for="(item) in list">
+              <el-button type="text"
+                         style="padding: 5px;height: 100%;font-weight: bold"
+                         :class="getCss(item)">
+                <svg-icon icon-class="key" style="font-size: 300%;" v-if="item.status!==2"/>
+                <i class="el-icon-circle-close" style="font-size: 300%" v-if="item.status===2"/>
+                <br/>
+                <br/>
+                <div v-if="item.uniqueIdentifier!=null">
+                  <span style="color: #fff;">{{ getFirstPart(item.uniqueIdentifier) }}</span>
+                  <br><br>
+                  <span style="color: #fff;">{{ getMiddlePart(item.uniqueIdentifier) }}</span>
+                  <br><br>
+                  <span style="color: #fff;">{{ getLastPart(item.uniqueIdentifier) }}</span>
+                </div>
+              </el-button>
+            </td>
+          </tr>
+        </table>
+        <el-empty v-else-if="loading" description="数据加载中..."></el-empty>
+        <el-empty v-else description=""></el-empty>
+      </div>
+    </vue-draggable-resizable>
+    <el-dialog :close-on-click-modal="false" :visible.sync="visible" title="锁详情">
+      <el-descriptions class="margin-top" :column="3" size="medium" border>
+        <el-descriptions-item label-style="width:200px">
+          <template slot="label">
+            删除原因
+          </template>
+          {{ this.lockData.remarks }}
+        </el-descriptions-item>
+      </el-descriptions>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="visible = false">返 回</el-button>
+      </div>
+    </el-dialog>
+
+    <el-dialog :close-on-click-modal="false" title="申请单详情" :visible.sync="detail.open1" width="50%" append-to-body>
+      <el-descriptions :column="2" border size="medium">
+        <el-descriptions-item label="安全阀位号" :label-style="labelStyle">{{ this.detail.data.devNo }}
+        </el-descriptions-item>
+        <el-descriptions-item label="单元" :label-style="labelStyle">{{ this.detail.data.unit }}</el-descriptions-item>
+        <el-descriptions-item label="离线原因" :span="2">{{ this.detail.data.offlineReason }}</el-descriptions-item>
+        <el-descriptions-item label="状态" :label-style="labelStyle">
+          <el-tag size="small" :type="statusFlag">{{ applyStatus[this.detail.data.status] }}</el-tag>
+        </el-descriptions-item>
+        <el-descriptions-item label="申请状态">
+          <el-tag size="small" :type="approveStatusFlag">{{ approveStatus[this.detail.data.approveStatus] }}</el-tag>
+        </el-descriptions-item>
+        <el-descriptions-item label="安全评估以及临时措施执行" :span="2" :label-style="labelStyle">
+          {{ this.detail.data.safa }}
+        </el-descriptions-item>
+        <el-descriptions-item label="安全阀锁开是否拆解" :label-style="labelStyle">
+          {{ this.detail.data.disassembly }}
+        </el-descriptions-item>
+        <el-descriptions-item label="破锁编号" :label-style="labelStyle">
+          {{ this.detail.data.lockNo }}
+        </el-descriptions-item>
+        <el-descriptions-item label="临时措施执行人" :label-style="labelStyle">
+          {{ this.detail.data.executorName }}
+        </el-descriptions-item>
+        <el-descriptions-item label="临时措施执行时间" :label-style="labelStyle">
+          <template>
+            <span>{{ parseTime(this.detail.data.executionTime, '{y}-{m}-{d} {h}:{i}') }}</span>
+          </template>
+        </el-descriptions-item>
+        <el-descriptions-item label="临时措施确认人" :label-style="labelStyle">
+          {{ this.detail.data.confirmerName }}
+        </el-descriptions-item>
+        <el-descriptions-item label="临时措施确认时间" :label-style="labelStyle">
+          <template>
+            <span>{{ parseTime(this.detail.data.temporaryTime, '{y}-{m}-{d} {h}:{i}') }}</span>
+          </template>
+        </el-descriptions-item>
+        <el-descriptions-item label="申请人" :label-style="labelStyle">
+          {{ this.detail.data.applicantName }}
+        </el-descriptions-item>
+        <el-descriptions-item label="申请时间" :label-style="labelStyle">
+          <template>
+            <span>{{ parseTime(this.detail.data.applicationTime, '{y}-{m}-{d} {h}:{i}') }}</span>
+          </template>
+        </el-descriptions-item>
+        <el-descriptions-item label="批准人" :label-style="labelStyle">
+          {{ this.detail.data.approverName }}
+        </el-descriptions-item>
+        <el-descriptions-item label="批准时间" :label-style="labelStyle">
+          <template>
+            <span>{{ parseTime(this.detail.data.approveTime, '{y}-{m}-{d} {h}:{i}') }}</span>
+          </template>
+        </el-descriptions-item>
+        <el-descriptions-item label="离线安全阀是否已经复位" :label-style="labelStyle">
+          {{ this.detail.data.resetConfirm }}
+        </el-descriptions-item>
+        <el-descriptions-item label="离线安全阀复位后现场是否存在泄漏" :label-style="labelStyle">
+          {{ this.detail.data.leakConfirm }}
+        </el-descriptions-item>
+        <el-descriptions-item label="离线安全复位后,之前采取的安全措施是否已撤销" :label-style="labelStyle">
+          {{ this.detail.data.revokeConfirm }}
+        </el-descriptions-item>
+        <el-descriptions-item label="离线安全复位后,是否已经重新上锁" :label-style="labelStyle">
+          {{ this.detail.data.lockConfirm }}
+        </el-descriptions-item>
+        <el-descriptions-item label="确认上锁人员" :label-style="labelStyle" :span="2">
+          {{ this.detail.data.lockConfirmer1Name }} {{ this.detail.data.lockConfirmer2Name }}
+        </el-descriptions-item>
+        <el-descriptions-item label="上述信息确认人" :label-style="labelStyle">
+          {{ this.detail.data.infoConfirmerName }}
+        </el-descriptions-item>
+        <el-descriptions-item label="确认时间" :label-style="labelStyle">
+          {{ this.detail.data.confirmTime }}
+        </el-descriptions-item>
+        <el-descriptions-item label="备注" :span="2" :label-style="labelStyle">
+          {{ this.detail.data.remarks }}
+        </el-descriptions-item>
+      </el-descriptions>
+    </el-dialog>
+    <el-dialog :close-on-click-modal="false" title="申请单详情" :visible.sync="detail.open2" width="50%" append-to-body>
+      <el-descriptions :column="2" border size="medium">
+        <el-descriptions-item label="组织保护措施变更播述" :span="2" :label-style="labelStyle">
+          {{ this.detail.data.changeDescribe }}
+        </el-descriptions-item>
+        <el-descriptions-item label="状态变更的原因" span="2" :label-style="labelStyle">
+          {{ this.detail.data.changeReason }}
+        </el-descriptions-item>
+        <el-descriptions-item label="申请人" :label-style="labelStyle">
+          {{ this.detail.data.applicantName }}
+        </el-descriptions-item>
+        <el-descriptions-item label="申请时间" :label-style="labelStyle">
+          <template>
+            <span>{{ parseTime(this.detail.data.applicationTime, '{y}-{m}-{d} {h}:{i}') }}</span>
+          </template>
+        </el-descriptions-item>
+        <el-descriptions-item label="状态" :label-style="labelStyle">
+          <el-tag size="small" :type="statusFlag">{{ applyStatus[this.detail.data.status] }}</el-tag>
+        </el-descriptions-item>
+        <el-descriptions-item label="申请状态">
+          <el-tag size="small" :type="approveStatusFlag">{{ approveStatus[this.detail.data.approveStatus] }}</el-tag>
+        </el-descriptions-item>
+        <el-descriptions-item label="安全评估及临时的安全措施" :span="2" :label-style="labelStyle">
+          {{ this.detail.data.safa }}
+        </el-descriptions-item>
+        <el-descriptions-item label="安全评估人" :label-style="labelStyle">
+          {{ this.detail.data.safaerName }}
+        </el-descriptions-item>
+        <el-descriptions-item label="安全评估时间" :label-style="labelStyle">
+          <template>
+            <span>{{ parseTime(this.detail.data.safaTime, '{y}-{m}-{d} {h}:{i}') }}</span>
+          </template>
+        </el-descriptions-item>
+        <el-descriptions-item label="批准人" :label-style="labelStyle">
+          {{ this.detail.data.approverName }}
+        </el-descriptions-item>
+        <el-descriptions-item label="批准时间" :label-style="labelStyle">
+          <template>
+            <span>{{ parseTime(this.detail.data.approveTime, '{y}-{m}-{d} {h}:{i}') }}</span>
+          </template>
+        </el-descriptions-item>
+        <el-descriptions-item label="临时措施执行人" :label-style="labelStyle">
+          {{ this.detail.data.executorName }}
+        </el-descriptions-item>
+        <el-descriptions-item label="临时措施执行时间" :label-style="labelStyle">
+          <template>
+            <span>{{ parseTime(this.detail.data.executionTime, '{y}-{m}-{d} {h}:{i}') }}</span>
+          </template>
+        </el-descriptions-item>
+        <el-descriptions-item label="临时措施确认人" :label-style="labelStyle">
+          {{ this.detail.data.confirmerName }}
+        </el-descriptions-item>
+        <el-descriptions-item label="临时措施确认时间" :label-style="labelStyle">
+          <template>
+            <span>{{ parseTime(this.detail.data.confirmTime, '{y}-{m}-{d} {h}:{i}') }}</span>
+          </template>
+        </el-descriptions-item>
+        <el-descriptions-item label="组织保护措施状态变更执行" :span="2" :label-style="labelStyle">
+          {{ this.detail.data.changeExecution }}
+        </el-descriptions-item>
+        <el-descriptions-item label="执行人" :label-style="labelStyle">
+          {{ this.detail.data.changeExecutorName }}
+        </el-descriptions-item>
+        <el-descriptions-item label="执行时间" :label-style="labelStyle">
+          <template>
+            <span>{{ parseTime(this.detail.data.changeExecutorTime, '{y}-{m}-{d} {h}:{i}') }}</span>
+          </template>
+        </el-descriptions-item>
+        <el-descriptions-item label="组织保护措施是否已经恢复至变更前的状态" :label-style="labelStyle">
+          {{ this.detail.data.resetConfirm }}
+        </el-descriptions-item>
+        <el-descriptions-item label="破锁编号" :label-style="labelStyle">
+          {{ this.detail.data.lockNo }}
+        </el-descriptions-item>
+        <el-descriptions-item label="状态恢复,确认人1" :label-style="labelStyle">
+          {{ this.detail.data.resetConfirmerName1 }}
+        </el-descriptions-item>
+        <el-descriptions-item label="确认时间" :label-style="labelStyle">
+          {{ this.detail.data.resetConfirmTime1 }}
+        </el-descriptions-item>
+        <el-descriptions-item label="状态恢复,确认人2" :label-style="labelStyle">
+          {{ this.detail.data.resetConfirmerName2 }}
+        </el-descriptions-item>
+        <el-descriptions-item label="确认时间" :label-style="labelStyle">
+          {{ this.detail.data.resetConfirmTime2 }}
+        </el-descriptions-item>
+        <el-descriptions-item label="状态恢复后,之前采取的安全措施是否已撤销" :span="2" :label-style="labelStyle">
+          {{ this.detail.data.revokeConfirm }}
+        </el-descriptions-item>
+        <el-descriptions-item label="备注" :span="2" :label-style="labelStyle">
+          {{ this.detail.data.remarks }}
+        </el-descriptions-item>
+      </el-descriptions>
+    </el-dialog>
+    <el-dialog :close-on-click-modal="false" title="申请单详情" :visible.sync="detail.open3" width="50%" append-to-body>
+      <el-empty description=""></el-empty>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import VueDraggableResizable from 'vue-draggable-resizable'
+import {getLock, listLockBranch, updateLock, getInfoByLock} from "@/api/apply/lock";
+import OfflinevalveDetail from "@/views/approve/approveDetail/offlinevalve-detail";
+import {listEoegLockBranch} from "@/api/eoeg/eoegLock";
+
+export default {
+  props: {
+    pageNumber: {default: 1}
+  },
+  components: {OfflinevalveDetail, VueDraggableResizable},
+  name: "lock-level-a",
+  directives: {
+    drag(el) {
+      const oDiv = el
+      // 拖拽时间标识
+      let firstTime = ''
+      let lastTime = ''
+      document.onselectstart = function () {
+        return false
+      }
+      oDiv.onmousedown = function (e) {
+        // 为了区分点击还是拖拽,使用时间差来判断,200毫秒内为点击,200毫秒外为拖拽,初始化为点击
+        document.getElementById('parent').setAttribute('drag-flag', false)
+        firstTime = new Date().getTime()
+        // 判断下当前时间与初始时间差,大于200毫秒则判断状态为拖拽
+
+
+        // 鼠标抬起时清除事件
+        document.onmouseup = function (e) {
+          lastTime = new Date().getTime()
+          console.log("firstTime:::" + firstTime)
+          console.log("lastTime:::" + lastTime)
+          console.log("lastTime-firstTime:::" + (lastTime - firstTime))
+          if (lastTime - firstTime > 150) {
+            document.getElementById('parent').setAttribute('drag-flag', true)
+          }
+          document.onmousemove = null
+          document.onmouseup = null
+        }
+        return false
+      }
+    }
+  },
+  data() {
+    return {// 详情对象
+      detail: {
+        open1: false,
+        open2: false,
+        open3: false,
+        data: {}
+      },
+      applyStatus: {0: "未完成", 1: "已完成"},
+      approveStatus: {1: "申请中", 2: "已通过", 3: "已拒绝"},
+      statusFlag: '',
+      approveStatusFlag: '',
+      //label样式
+      labelStyle: {'width': '200px'},
+      lockData: {},
+      clientHeight: 300,
+      dragMove: true,
+      drawer: false,
+      data: [],
+      status: 0,
+      id: null,
+      loading: true,
+      visible: false,
+      height: document.body.clientHeight - 155,
+      clickFlag: true,// 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 700,
+        uniqueIdentifier: null,
+        riskLevel: 'D',
+        managementLevel: null,
+        stature: null,
+        medium: null,
+        position: null,
+        locationDes: null,
+        valveStatus: null,
+        valveType: null,
+        valveSize: null,
+        reasons: null,
+        remarks: null,
+        status: null,
+        createrCode: null,
+        createdate: null,
+        updaterCode: null,
+        updatedate: null,
+        deptId: null
+      },
+    }
+  },
+  created() {
+    this.getList();
+  },
+  mounted() {
+    window.onresize = () => {    //写在mounted中,onresize事件会在页面大小被调整时触发
+      return (() => {
+        window.screenHeight = document.body.clientHeight - 155;
+        this.height = window.screenHeight;
+      })();
+    };
+
+  },
+  watch: {
+    height(val) {        //在watch中监听height,浏览器窗口大小变动时自适应高度。
+      this.height = val;
+      console.log(this.height, "新的高度");
+    },
+  },
+  methods: {
+    getCss(item) {
+      if (item.valveStatus == 'LCHQ') {//红背景
+        if (item.status == 0) {//白字
+          return 'fwAndbr'
+        } else if (item.status == 1) {//绿字
+          return 'fgAndbr'
+        } else {
+          return 'grey'
+        }
+      } else if (item.valveStatus == 'LOHQ') {//绿背景
+        if (item.status == 0) {//白字
+          return 'fwAndbg'
+        } else if (item.status == 1) {//红字
+          return 'frAndbg'
+        } else {
+          return 'grey'
+        }
+      } else {
+        return 'default'
+      }
+    },
+    /** 查询破锁管理列表 */
+    getList() {
+      this.loading = true;
+      listEoegLockBranch(this.queryParams).then(response => {
+        this.data = response.rows;
+        this.loading = false;
+      });
+    },
+    handleClick() {
+      setTimeout(function () {
+        // 点击事件触发时,判断当前状态是拖拽还是点击,若是拖拽,直接返回不继续执行
+        const isDrag = document.getElementById('parent').getAttribute('drag-flag')
+        if (isDrag == 'true') {
+          return
+        }
+      }, 50)
+    },
+    handleTableWheel(event) {
+      let obj = this.$refs['branch']
+      return this.tableZoom(obj, event)
+    },
+    tableZoom(obj, event) {
+      // 一开始默认是100%
+      let zoom = parseInt(obj.style.zoom, 10) || 100
+      // 滚轮滚一下wheelDelta的值增加或减少120
+      zoom += event.wheelDelta / 12
+      if (zoom > 25) {
+        obj.style.zoom = zoom + '%'
+      }
+      return false
+    },// 在你的组件方法或工具函数中定义以下函数
+
+    /**
+     * 获取第一个连字符之前的部分
+     * @param {string} str
+     * @returns {string}
+     */
+    getFirstPart(str) {
+      if (!str) return ''; // 处理空值或undefined
+      const dashIndex = str.indexOf('-');
+      if (dashIndex === -1) {
+        return str; // 如果没有连字符,返回整个字符串
+      }
+      return str.slice(0, dashIndex); // 使用 slice 获取从开始到第一个连字符的部分[1,2](@ref)
+    },
+
+    /**
+     * 获取第一个连字符和最后一个连字符之间的部分
+     * @param {string} str
+     * @returns {string}
+     */
+    getMiddlePart(str) {
+      if (!str) return '';
+      const firstDashIndex = str.indexOf('-');
+      const lastDashIndex = str.lastIndexOf('-');
+      // 检查是否至少找到两个不同的连字符
+      if (firstDashIndex === -1 || lastDashIndex === -1 || firstDashIndex === lastDashIndex) {
+        return ''; // 如果没有两个连字符,返回空字符串或其他默认值
+      }
+      return str.slice(firstDashIndex , lastDashIndex); // 使用 slice 获取中间部分(不包含两端的连字符)[1,2](@ref)
+    },
+
+    /**
+     * 获取最后一个连字符之后的部分
+     * @param {string} str
+     * @returns {string}
+     */
+    getLastPart(str) {
+      if (!str) return '';
+      const lastDashIndex = str.lastIndexOf('-');
+      if (lastDashIndex === -1) {
+        return ''; // 如果没有连字符,返回空字符串
+      }
+      return str.slice(lastDashIndex); // 使用 slice 获取从最后一个连字符后到末尾的部分[1,2](@ref)
+    },
+    openDialog(id, status, lockCode) {
+      // 点击事件触发时,判断当前状态是拖拽还是点击,若是拖拽,直接返回不继续执行
+      const isDrag = document.getElementById('parent').getAttribute('drag-flag')
+      if (isDrag === 'true') {
+        return
+      }
+      this.id = id
+      this.status = status
+      if (status == 2) {
+        this.visible = true;
+        this.lockData = {};
+        getLock(id).then(res => {
+          this.lockData = res.data
+        })
+      }
+      if (status == 1) {
+        this.statusFlag = '';
+        this.approveStatusFlag = '';
+        this.detail.open = true;
+        this.detail.data = {};
+        getInfoByLock(lockCode).then(res => {
+          if (res.data.type == 1) {
+            // this.detail.open1 = true
+            this.$router.push({path: '/process/offlinevalve', query: {lockNo: lockCode}});
+          }
+          if (res.data.type == 2) {
+            // this.detail.open2 = true
+            this.$router.push({path: '/process/safetychange', query: {lockNo: lockCode}});
+          }
+          if (res.data.type == 3) {
+            this.detail.open3 = true
+            return
+          }
+          this.detail.data = res.data.data
+          if (this.detail.data.status === 1) {
+            this.statusFlag = 'success';
+          }
+          if (this.detail.data.approveStatus === '2') {
+            this.approveStatusFlag = 'success';
+          } else if (this.detail.data.approveStatus === '1') {
+            this.approveStatusFlag = 'warning';
+          } else if (this.detail.data.approveStatus === '3') {
+            this.approveStatusFlag = 'danger';
+          }
+        })
+
+      }
+
+    }
+  }
+}
+</script>
+
+<style scoped>
+table {
+  width: auto;
+  border: 1px solid #d0d0d0;
+  border-collapse: collapse;
+}
+
+th {
+  height: 80px;
+  color: #4b4b4b;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+
+tr {
+  border: 1px solid #d0d0d0;
+  border-collapse: collapse;
+}
+
+td {
+  height: 200px;
+  border: 1px solid #d0d0d0;
+  border-collapse: collapse;
+  vertical-align: middle;
+  text-align: center;
+  padding: 20px 10px 20px 10px;
+}
+
+i {
+  font-size: 200%;
+  padding-bottom: 10px;
+}
+
+el-button {
+  width: 140px;
+  height: auto;
+}
+
+.default {
+  color: #fff;
+  background-color: #fff;
+}
+
+.fff {
+  background-color: #fff;
+}
+
+.fwAndbg {
+  color: #fff;
+  background-color: #67C23A;
+}
+
+.fwAndbr {
+  color: #fff;
+  background-color: #F56C6C;
+}
+
+.fgAndbr {
+  color: #67C23A;
+  background-color: #F56C6C;
+}
+
+.frAndbg {
+  color: #F56C6C;
+  background-color: #67C23A;
+}
+
+.green {
+  background-color: #67C23A;
+}
+
+.red {
+  background-color: #F56C6C;
+}
+
+.yellow {
+  background-color: #E6A23C;
+}
+
+.grey {
+  color: #fff;
+  background-color: #909399;
+}
+</style>

+ 588 - 0
ui/src/views/eoeg/eoegLock/lock-levelB.vue

@@ -0,0 +1,588 @@
+<template>
+  <div class="app-container" :style="`height:${height}px`" id="parent">
+    <el-row :gutter="10" class="mb8" style="z-index: 10;">
+      <el-tooltip class="top-right-btn" effect="dark" :content="$t('tagsView.refresh')" placement="top">
+        <el-button size="mini" circle icon="el-icon-refresh" @click="getList"/>
+      </el-tooltip>
+    </el-row>
+    <vue-draggable-resizable v-drag
+                             w="auto" h="auto" :draggable="dragMove" style="background-color:#fff;padding: 0px  20px">
+      <div class="zoom" @wheel.prevent="handleTableWheel($event)" ref="branch">
+        <table v-if="!loading&&data.length>0">
+          <tr>
+            <th>
+              <el-tag class="fwAndbg" size="medium" style="font-size: 12px;margin: 5px 10px;">LOHQ</el-tag>
+            </th>
+            <th>
+              <el-tag class="fwAndbr" size="medium" style="font-size: 12px;margin: 5px 10px;">LCHQ</el-tag>
+            </th>
+            <th colspan="25">
+              <span style="font-size: 40px">EOEG装置锁开&锁关摆放看板</span><br/>
+            </th>
+            <th colspan="5">
+            </th>
+          </tr>
+          <tr v-for="(list) in data">
+            <td v-for="(item) in list">
+              <el-button type="text"
+                         style="padding: 5px;height: 100%;font-weight: bold"
+                         :class="getCss(item)">
+                <svg-icon icon-class="key" style="font-size: 300%;" v-if="item.status!==2"/>
+                <i class="el-icon-circle-close" style="font-size: 300%" v-if="item.status===2"/>
+                <br/>
+                <br/>
+                <div v-if="item.uniqueIdentifier!=null">
+                  <span style="color: #fff;">{{ getFirstPart(item.uniqueIdentifier) }}</span>
+                  <br><br>
+                  <span style="color: #fff;">{{ getMiddlePart(item.uniqueIdentifier) }}</span>
+                  <br><br>
+                  <span style="color: #fff;">{{ getLastPart(item.uniqueIdentifier) }}</span>
+                </div>
+              </el-button>
+            </td>
+          </tr>
+        </table>
+        <el-empty v-else-if="loading" description="数据加载中..."></el-empty>
+        <el-empty v-else description=""></el-empty>
+      </div>
+    </vue-draggable-resizable>
+    <el-dialog :close-on-click-modal="false" :visible.sync="visible" title="锁详情">
+      <el-descriptions class="margin-top" :column="3" size="medium" border>
+        <el-descriptions-item label-style="width:200px">
+          <template slot="label">
+            删除原因
+          </template>
+          {{ this.lockData.remarks }}
+        </el-descriptions-item>
+      </el-descriptions>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="visible = false">返 回</el-button>
+      </div>
+    </el-dialog>
+
+    <el-dialog :close-on-click-modal="false" title="申请单详情" :visible.sync="detail.open1" width="50%" append-to-body>
+      <el-descriptions :column="2" border size="medium">
+        <el-descriptions-item label="安全阀位号" :label-style="labelStyle">{{ this.detail.data.devNo }}
+        </el-descriptions-item>
+        <el-descriptions-item label="单元" :label-style="labelStyle">{{ this.detail.data.unit }}</el-descriptions-item>
+        <el-descriptions-item label="离线原因" :span="2">{{ this.detail.data.offlineReason }}</el-descriptions-item>
+        <el-descriptions-item label="状态" :label-style="labelStyle">
+          <el-tag size="small" :type="statusFlag">{{ applyStatus[this.detail.data.status] }}</el-tag>
+        </el-descriptions-item>
+        <el-descriptions-item label="申请状态">
+          <el-tag size="small" :type="approveStatusFlag">{{ approveStatus[this.detail.data.approveStatus] }}</el-tag>
+        </el-descriptions-item>
+        <el-descriptions-item label="安全评估以及临时措施执行" :span="2" :label-style="labelStyle">
+          {{ this.detail.data.safa }}
+        </el-descriptions-item>
+        <el-descriptions-item label="安全阀锁开是否拆解" :label-style="labelStyle">
+          {{ this.detail.data.disassembly }}
+        </el-descriptions-item>
+        <el-descriptions-item label="破锁编号" :label-style="labelStyle">
+          {{ this.detail.data.lockNo }}
+        </el-descriptions-item>
+        <el-descriptions-item label="临时措施执行人" :label-style="labelStyle">
+          {{ this.detail.data.executorName }}
+        </el-descriptions-item>
+        <el-descriptions-item label="临时措施执行时间" :label-style="labelStyle">
+          <template>
+            <span>{{ parseTime(this.detail.data.executionTime, '{y}-{m}-{d} {h}:{i}') }}</span>
+          </template>
+        </el-descriptions-item>
+        <el-descriptions-item label="临时措施确认人" :label-style="labelStyle">
+          {{ this.detail.data.confirmerName }}
+        </el-descriptions-item>
+        <el-descriptions-item label="临时措施确认时间" :label-style="labelStyle">
+          <template>
+            <span>{{ parseTime(this.detail.data.temporaryTime, '{y}-{m}-{d} {h}:{i}') }}</span>
+          </template>
+        </el-descriptions-item>
+        <el-descriptions-item label="申请人" :label-style="labelStyle">
+          {{ this.detail.data.applicantName }}
+        </el-descriptions-item>
+        <el-descriptions-item label="申请时间" :label-style="labelStyle">
+          <template>
+            <span>{{ parseTime(this.detail.data.applicationTime, '{y}-{m}-{d} {h}:{i}') }}</span>
+          </template>
+        </el-descriptions-item>
+        <el-descriptions-item label="批准人" :label-style="labelStyle">
+          {{ this.detail.data.approverName }}
+        </el-descriptions-item>
+        <el-descriptions-item label="批准时间" :label-style="labelStyle">
+          <template>
+            <span>{{ parseTime(this.detail.data.approveTime, '{y}-{m}-{d} {h}:{i}') }}</span>
+          </template>
+        </el-descriptions-item>
+        <el-descriptions-item label="离线安全阀是否已经复位" :label-style="labelStyle">
+          {{ this.detail.data.resetConfirm }}
+        </el-descriptions-item>
+        <el-descriptions-item label="离线安全阀复位后现场是否存在泄漏" :label-style="labelStyle">
+          {{ this.detail.data.leakConfirm }}
+        </el-descriptions-item>
+        <el-descriptions-item label="离线安全复位后,之前采取的安全措施是否已撤销" :label-style="labelStyle">
+          {{ this.detail.data.revokeConfirm }}
+        </el-descriptions-item>
+        <el-descriptions-item label="离线安全复位后,是否已经重新上锁" :label-style="labelStyle">
+          {{ this.detail.data.lockConfirm }}
+        </el-descriptions-item>
+        <el-descriptions-item label="确认上锁人员" :label-style="labelStyle" :span="2">
+          {{ this.detail.data.lockConfirmer1Name }} {{ this.detail.data.lockConfirmer2Name }}
+        </el-descriptions-item>
+        <el-descriptions-item label="上述信息确认人" :label-style="labelStyle">
+          {{ this.detail.data.infoConfirmerName }}
+        </el-descriptions-item>
+        <el-descriptions-item label="确认时间" :label-style="labelStyle">
+          {{ this.detail.data.confirmTime }}
+        </el-descriptions-item>
+        <el-descriptions-item label="备注" :span="2" :label-style="labelStyle">
+          {{ this.detail.data.remarks }}
+        </el-descriptions-item>
+      </el-descriptions>
+    </el-dialog>
+    <el-dialog :close-on-click-modal="false" title="申请单详情" :visible.sync="detail.open2" width="50%" append-to-body>
+      <el-descriptions :column="2" border size="medium">
+        <el-descriptions-item label="组织保护措施变更播述" :span="2" :label-style="labelStyle">
+          {{ this.detail.data.changeDescribe }}
+        </el-descriptions-item>
+        <el-descriptions-item label="状态变更的原因" span="2" :label-style="labelStyle">
+          {{ this.detail.data.changeReason }}
+        </el-descriptions-item>
+        <el-descriptions-item label="申请人" :label-style="labelStyle">
+          {{ this.detail.data.applicantName }}
+        </el-descriptions-item>
+        <el-descriptions-item label="申请时间" :label-style="labelStyle">
+          <template>
+            <span>{{ parseTime(this.detail.data.applicationTime, '{y}-{m}-{d} {h}:{i}') }}</span>
+          </template>
+        </el-descriptions-item>
+        <el-descriptions-item label="状态" :label-style="labelStyle">
+          <el-tag size="small" :type="statusFlag">{{ applyStatus[this.detail.data.status] }}</el-tag>
+        </el-descriptions-item>
+        <el-descriptions-item label="申请状态">
+          <el-tag size="small" :type="approveStatusFlag">{{ approveStatus[this.detail.data.approveStatus] }}</el-tag>
+        </el-descriptions-item>
+        <el-descriptions-item label="安全评估及临时的安全措施" :span="2" :label-style="labelStyle">
+          {{ this.detail.data.safa }}
+        </el-descriptions-item>
+        <el-descriptions-item label="安全评估人" :label-style="labelStyle">
+          {{ this.detail.data.safaerName }}
+        </el-descriptions-item>
+        <el-descriptions-item label="安全评估时间" :label-style="labelStyle">
+          <template>
+            <span>{{ parseTime(this.detail.data.safaTime, '{y}-{m}-{d} {h}:{i}') }}</span>
+          </template>
+        </el-descriptions-item>
+        <el-descriptions-item label="批准人" :label-style="labelStyle">
+          {{ this.detail.data.approverName }}
+        </el-descriptions-item>
+        <el-descriptions-item label="批准时间" :label-style="labelStyle">
+          <template>
+            <span>{{ parseTime(this.detail.data.approveTime, '{y}-{m}-{d} {h}:{i}') }}</span>
+          </template>
+        </el-descriptions-item>
+        <el-descriptions-item label="临时措施执行人" :label-style="labelStyle">
+          {{ this.detail.data.executorName }}
+        </el-descriptions-item>
+        <el-descriptions-item label="临时措施执行时间" :label-style="labelStyle">
+          <template>
+            <span>{{ parseTime(this.detail.data.executionTime, '{y}-{m}-{d} {h}:{i}') }}</span>
+          </template>
+        </el-descriptions-item>
+        <el-descriptions-item label="临时措施确认人" :label-style="labelStyle">
+          {{ this.detail.data.confirmerName }}
+        </el-descriptions-item>
+        <el-descriptions-item label="临时措施确认时间" :label-style="labelStyle">
+          <template>
+            <span>{{ parseTime(this.detail.data.confirmTime, '{y}-{m}-{d} {h}:{i}') }}</span>
+          </template>
+        </el-descriptions-item>
+        <el-descriptions-item label="组织保护措施状态变更执行" :span="2" :label-style="labelStyle">
+          {{ this.detail.data.changeExecution }}
+        </el-descriptions-item>
+        <el-descriptions-item label="执行人" :label-style="labelStyle">
+          {{ this.detail.data.changeExecutorName }}
+        </el-descriptions-item>
+        <el-descriptions-item label="执行时间" :label-style="labelStyle">
+          <template>
+            <span>{{ parseTime(this.detail.data.changeExecutorTime, '{y}-{m}-{d} {h}:{i}') }}</span>
+          </template>
+        </el-descriptions-item>
+        <el-descriptions-item label="组织保护措施是否已经恢复至变更前的状态" :label-style="labelStyle">
+          {{ this.detail.data.resetConfirm }}
+        </el-descriptions-item>
+        <el-descriptions-item label="破锁编号" :label-style="labelStyle">
+          {{ this.detail.data.lockNo }}
+        </el-descriptions-item>
+        <el-descriptions-item label="状态恢复,确认人1" :label-style="labelStyle">
+          {{ this.detail.data.resetConfirmerName1 }}
+        </el-descriptions-item>
+        <el-descriptions-item label="确认时间" :label-style="labelStyle">
+          {{ this.detail.data.resetConfirmTime1 }}
+        </el-descriptions-item>
+        <el-descriptions-item label="状态恢复,确认人2" :label-style="labelStyle">
+          {{ this.detail.data.resetConfirmerName2 }}
+        </el-descriptions-item>
+        <el-descriptions-item label="确认时间" :label-style="labelStyle">
+          {{ this.detail.data.resetConfirmTime2 }}
+        </el-descriptions-item>
+        <el-descriptions-item label="状态恢复后,之前采取的安全措施是否已撤销" :span="2" :label-style="labelStyle">
+          {{ this.detail.data.revokeConfirm }}
+        </el-descriptions-item>
+        <el-descriptions-item label="备注" :span="2" :label-style="labelStyle">
+          {{ this.detail.data.remarks }}
+        </el-descriptions-item>
+      </el-descriptions>
+    </el-dialog>
+    <el-dialog :close-on-click-modal="false" title="申请单详情" :visible.sync="detail.open3" width="50%" append-to-body>
+      <el-empty description=""></el-empty>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import VueDraggableResizable from 'vue-draggable-resizable'
+import {getLock, listLockBranch, updateLock, getInfoByLock} from "@/api/apply/lock";
+import OfflinevalveDetail from "@/views/approve/approveDetail/offlinevalve-detail";
+import {listEoegLockBranch} from "@/api/eoeg/eoegLock";
+
+export default {
+  props: {
+    pageNumber: {default: 1}
+  },
+  components: {OfflinevalveDetail, VueDraggableResizable},
+  name: "lock-level-b",
+  directives: {
+    drag(el) {
+      const oDiv = el
+      // 拖拽时间标识
+      let firstTime = ''
+      let lastTime = ''
+      document.onselectstart = function () {
+        return false
+      }
+      oDiv.onmousedown = function (e) {
+        // 为了区分点击还是拖拽,使用时间差来判断,200毫秒内为点击,200毫秒外为拖拽,初始化为点击
+        document.getElementById('parent').setAttribute('drag-flag', false)
+        firstTime = new Date().getTime()
+        // 判断下当前时间与初始时间差,大于200毫秒则判断状态为拖拽
+
+
+        // 鼠标抬起时清除事件
+        document.onmouseup = function (e) {
+          lastTime = new Date().getTime()
+          console.log("firstTime:::" + firstTime)
+          console.log("lastTime:::" + lastTime)
+          console.log("lastTime-firstTime:::" + (lastTime - firstTime))
+          if (lastTime - firstTime > 150) {
+            document.getElementById('parent').setAttribute('drag-flag', true)
+          }
+          document.onmousemove = null
+          document.onmouseup = null
+        }
+        return false
+      }
+    }
+  },
+  data() {
+    return {// 详情对象
+      detail: {
+        open1: false,
+        open2: false,
+        open3: false,
+        data: {}
+      },
+      applyStatus: {0: "未完成", 1: "已完成"},
+      approveStatus: {1: "申请中", 2: "已通过", 3: "已拒绝"},
+      statusFlag: '',
+      approveStatusFlag: '',
+      //label样式
+      labelStyle: {'width': '200px'},
+      lockData: {},
+      clientHeight: 300,
+      dragMove: true,
+      drawer: false,
+      data: [],
+      status: 0,
+      id: null,
+      loading: true,
+      visible: false,
+      height: document.body.clientHeight - 155,
+      clickFlag: true,// 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 700,
+        uniqueIdentifier: null,
+        riskLevel: 'B',
+        managementLevel: null,
+        stature: null,
+        medium: null,
+        position: null,
+        locationDes: null,
+        valveStatus: null,
+        valveType: null,
+        valveSize: null,
+        reasons: null,
+        remarks: null,
+        status: null,
+        createrCode: null,
+        createdate: null,
+        updaterCode: null,
+        updatedate: null,
+        deptId: null
+      },
+    }
+  },
+  created() {
+    this.getList();
+  },
+  mounted() {
+    window.onresize = () => {    //写在mounted中,onresize事件会在页面大小被调整时触发
+      return (() => {
+        window.screenHeight = document.body.clientHeight - 155;
+        this.height = window.screenHeight;
+      })();
+    };
+
+  },
+  watch: {
+    height(val) {        //在watch中监听height,浏览器窗口大小变动时自适应高度。
+      this.height = val;
+      console.log(this.height, "新的高度");
+    },
+  },
+  methods: {
+    getCss(item) {
+      if (item.valveStatus == 'LCHQ') {//红背景
+        if (item.status == 0) {//白字
+          return 'fwAndbr'
+        } else if (item.status == 1) {//绿字
+          return 'fgAndbr'
+        } else {
+          return 'grey'
+        }
+      } else if (item.valveStatus == 'LOHQ') {//绿背景
+        if (item.status == 0) {//白字
+          return 'fwAndbg'
+        } else if (item.status == 1) {//红字
+          return 'frAndbg'
+        } else {
+          return 'grey'
+        }
+      } else {
+        return 'default'
+      }
+    },
+    /** 查询破锁管理列表 */
+    getList() {
+      this.loading = true;
+      listEoegLockBranch(this.queryParams).then(response => {
+        this.data = response.rows;
+        this.loading = false;
+      });
+    },
+    handleClick() {
+      setTimeout(function () {
+        // 点击事件触发时,判断当前状态是拖拽还是点击,若是拖拽,直接返回不继续执行
+        const isDrag = document.getElementById('parent').getAttribute('drag-flag')
+        if (isDrag == 'true') {
+          return
+        }
+      }, 50)
+    },
+    handleTableWheel(event) {
+      let obj = this.$refs['branch']
+      return this.tableZoom(obj, event)
+    },
+    tableZoom(obj, event) {
+      // 一开始默认是100%
+      let zoom = parseInt(obj.style.zoom, 10) || 100
+      // 滚轮滚一下wheelDelta的值增加或减少120
+      zoom += event.wheelDelta / 12
+      if (zoom > 25) {
+        obj.style.zoom = zoom + '%'
+      }
+      return false
+    },// 在你的组件方法或工具函数中定义以下函数
+
+    /**
+     * 获取第一个连字符之前的部分
+     * @param {string} str
+     * @returns {string}
+     */
+    getFirstPart(str) {
+      if (!str) return ''; // 处理空值或undefined
+      const dashIndex = str.indexOf('-');
+      if (dashIndex === -1) {
+        return str; // 如果没有连字符,返回整个字符串
+      }
+      return str.slice(0, dashIndex); // 使用 slice 获取从开始到第一个连字符的部分[1,2](@ref)
+    },
+
+    /**
+     * 获取第一个连字符和最后一个连字符之间的部分
+     * @param {string} str
+     * @returns {string}
+     */
+    getMiddlePart(str) {
+      if (!str) return '';
+      const firstDashIndex = str.indexOf('-');
+      const lastDashIndex = str.lastIndexOf('-');
+      // 检查是否至少找到两个不同的连字符
+      if (firstDashIndex === -1 || lastDashIndex === -1 || firstDashIndex === lastDashIndex) {
+        return ''; // 如果没有两个连字符,返回空字符串或其他默认值
+      }
+      return str.slice(firstDashIndex , lastDashIndex); // 使用 slice 获取中间部分(不包含两端的连字符)[1,2](@ref)
+    },
+
+    /**
+     * 获取最后一个连字符之后的部分
+     * @param {string} str
+     * @returns {string}
+     */
+    getLastPart(str) {
+      if (!str) return '';
+      const lastDashIndex = str.lastIndexOf('-');
+      if (lastDashIndex === -1) {
+        return ''; // 如果没有连字符,返回空字符串
+      }
+      return str.slice(lastDashIndex); // 使用 slice 获取从最后一个连字符后到末尾的部分[1,2](@ref)
+    },
+    openDialog(id, status, lockCode) {
+      // 点击事件触发时,判断当前状态是拖拽还是点击,若是拖拽,直接返回不继续执行
+      const isDrag = document.getElementById('parent').getAttribute('drag-flag')
+      if (isDrag === 'true') {
+        return
+      }
+      this.id = id
+      this.status = status
+      if (status == 2) {
+        this.visible = true;
+        this.lockData = {};
+        getLock(id).then(res => {
+          this.lockData = res.data
+        })
+      }
+      if (status == 1) {
+        this.statusFlag = '';
+        this.approveStatusFlag = '';
+        this.detail.open = true;
+        this.detail.data = {};
+        getInfoByLock(lockCode).then(res => {
+          if (res.data.type == 1) {
+            // this.detail.open1 = true
+            this.$router.push({path: '/process/offlinevalve', query: {lockNo: lockCode}});
+          }
+          if (res.data.type == 2) {
+            // this.detail.open2 = true
+            this.$router.push({path: '/process/safetychange', query: {lockNo: lockCode}});
+          }
+          if (res.data.type == 3) {
+            this.detail.open3 = true
+            return
+          }
+          this.detail.data = res.data.data
+          if (this.detail.data.status === 1) {
+            this.statusFlag = 'success';
+          }
+          if (this.detail.data.approveStatus === '2') {
+            this.approveStatusFlag = 'success';
+          } else if (this.detail.data.approveStatus === '1') {
+            this.approveStatusFlag = 'warning';
+          } else if (this.detail.data.approveStatus === '3') {
+            this.approveStatusFlag = 'danger';
+          }
+        })
+
+      }
+
+    }
+  }
+}
+</script>
+
+<style scoped>
+table {
+  width: auto;
+  border: 1px solid #d0d0d0;
+  border-collapse: collapse;
+}
+
+th {
+  height: 80px;
+  color: #4b4b4b;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+
+tr {
+  border: 1px solid #d0d0d0;
+  border-collapse: collapse;
+}
+
+td {
+  height: 200px;
+  border: 1px solid #d0d0d0;
+  border-collapse: collapse;
+  vertical-align: middle;
+  text-align: center;
+  padding: 20px 10px 20px 10px;
+}
+
+i {
+  font-size: 200%;
+  padding-bottom: 10px;
+}
+
+el-button {
+  width: 140px;
+  height: auto;
+}
+
+.default {
+  color: #fff;
+  background-color: #fff;
+}
+
+.fff {
+  background-color: #fff;
+}
+
+.fwAndbg {
+  color: #fff;
+  background-color: #67C23A;
+}
+
+.fwAndbr {
+  color: #fff;
+  background-color: #F56C6C;
+}
+
+.fgAndbr {
+  color: #67C23A;
+  background-color: #F56C6C;
+}
+
+.frAndbg {
+  color: #F56C6C;
+  background-color: #67C23A;
+}
+
+.green {
+  background-color: #67C23A;
+}
+
+.red {
+  background-color: #F56C6C;
+}
+
+.yellow {
+  background-color: #E6A23C;
+}
+
+.grey {
+  color: #fff;
+  background-color: #909399;
+}
+</style>

+ 588 - 0
ui/src/views/eoeg/eoegLock/lock-levelC.vue

@@ -0,0 +1,588 @@
+<template>
+  <div class="app-container" :style="`height:${height}px`" id="parent">
+    <el-row :gutter="10" class="mb8" style="z-index: 10;">
+      <el-tooltip class="top-right-btn" effect="dark" :content="$t('tagsView.refresh')" placement="top">
+        <el-button size="mini" circle icon="el-icon-refresh" @click="getList"/>
+      </el-tooltip>
+    </el-row>
+    <vue-draggable-resizable v-drag
+                             w="auto" h="auto" :draggable="dragMove" style="background-color:#fff;padding: 0px  20px">
+      <div class="zoom" @wheel.prevent="handleTableWheel($event)" ref="branch">
+        <table v-if="!loading&&data.length>0">
+          <tr>
+            <th>
+              <el-tag class="fwAndbg" size="medium" style="font-size: 12px;margin: 5px 10px;">LOHQ</el-tag>
+            </th>
+            <th>
+              <el-tag class="fwAndbr" size="medium" style="font-size: 12px;margin: 5px 10px;">LCHQ</el-tag>
+            </th>
+            <th colspan="25">
+              <span style="font-size: 40px">EOEG装置锁开&锁关摆放看板</span><br/>
+            </th>
+            <th colspan="5">
+            </th>
+          </tr>
+          <tr v-for="(list) in data">
+            <td v-for="(item) in list">
+              <el-button type="text"
+                         style="padding: 5px;height: 100%;font-weight: bold"
+                         :class="getCss(item)">
+                <svg-icon icon-class="key" style="font-size: 300%;" v-if="item.status!==2"/>
+                <i class="el-icon-circle-close" style="font-size: 300%" v-if="item.status===2"/>
+                <br/>
+                <br/>
+                <div v-if="item.uniqueIdentifier!=null">
+                  <span style="color: #fff;">{{ getFirstPart(item.uniqueIdentifier) }}</span>
+                  <br><br>
+                  <span style="color: #fff;">{{ getMiddlePart(item.uniqueIdentifier) }}</span>
+                  <br><br>
+                  <span style="color: #fff;">{{ getLastPart(item.uniqueIdentifier) }}</span>
+                </div>
+              </el-button>
+            </td>
+          </tr>
+        </table>
+        <el-empty v-else-if="loading" description="数据加载中..."></el-empty>
+        <el-empty v-else description=""></el-empty>
+      </div>
+    </vue-draggable-resizable>
+    <el-dialog :close-on-click-modal="false" :visible.sync="visible" title="锁详情">
+      <el-descriptions class="margin-top" :column="3" size="medium" border>
+        <el-descriptions-item label-style="width:200px">
+          <template slot="label">
+            删除原因
+          </template>
+          {{ this.lockData.remarks }}
+        </el-descriptions-item>
+      </el-descriptions>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="visible = false">返 回</el-button>
+      </div>
+    </el-dialog>
+
+    <el-dialog :close-on-click-modal="false" title="申请单详情" :visible.sync="detail.open1" width="50%" append-to-body>
+      <el-descriptions :column="2" border size="medium">
+        <el-descriptions-item label="安全阀位号" :label-style="labelStyle">{{ this.detail.data.devNo }}
+        </el-descriptions-item>
+        <el-descriptions-item label="单元" :label-style="labelStyle">{{ this.detail.data.unit }}</el-descriptions-item>
+        <el-descriptions-item label="离线原因" :span="2">{{ this.detail.data.offlineReason }}</el-descriptions-item>
+        <el-descriptions-item label="状态" :label-style="labelStyle">
+          <el-tag size="small" :type="statusFlag">{{ applyStatus[this.detail.data.status] }}</el-tag>
+        </el-descriptions-item>
+        <el-descriptions-item label="申请状态">
+          <el-tag size="small" :type="approveStatusFlag">{{ approveStatus[this.detail.data.approveStatus] }}</el-tag>
+        </el-descriptions-item>
+        <el-descriptions-item label="安全评估以及临时措施执行" :span="2" :label-style="labelStyle">
+          {{ this.detail.data.safa }}
+        </el-descriptions-item>
+        <el-descriptions-item label="安全阀锁开是否拆解" :label-style="labelStyle">
+          {{ this.detail.data.disassembly }}
+        </el-descriptions-item>
+        <el-descriptions-item label="破锁编号" :label-style="labelStyle">
+          {{ this.detail.data.lockNo }}
+        </el-descriptions-item>
+        <el-descriptions-item label="临时措施执行人" :label-style="labelStyle">
+          {{ this.detail.data.executorName }}
+        </el-descriptions-item>
+        <el-descriptions-item label="临时措施执行时间" :label-style="labelStyle">
+          <template>
+            <span>{{ parseTime(this.detail.data.executionTime, '{y}-{m}-{d} {h}:{i}') }}</span>
+          </template>
+        </el-descriptions-item>
+        <el-descriptions-item label="临时措施确认人" :label-style="labelStyle">
+          {{ this.detail.data.confirmerName }}
+        </el-descriptions-item>
+        <el-descriptions-item label="临时措施确认时间" :label-style="labelStyle">
+          <template>
+            <span>{{ parseTime(this.detail.data.temporaryTime, '{y}-{m}-{d} {h}:{i}') }}</span>
+          </template>
+        </el-descriptions-item>
+        <el-descriptions-item label="申请人" :label-style="labelStyle">
+          {{ this.detail.data.applicantName }}
+        </el-descriptions-item>
+        <el-descriptions-item label="申请时间" :label-style="labelStyle">
+          <template>
+            <span>{{ parseTime(this.detail.data.applicationTime, '{y}-{m}-{d} {h}:{i}') }}</span>
+          </template>
+        </el-descriptions-item>
+        <el-descriptions-item label="批准人" :label-style="labelStyle">
+          {{ this.detail.data.approverName }}
+        </el-descriptions-item>
+        <el-descriptions-item label="批准时间" :label-style="labelStyle">
+          <template>
+            <span>{{ parseTime(this.detail.data.approveTime, '{y}-{m}-{d} {h}:{i}') }}</span>
+          </template>
+        </el-descriptions-item>
+        <el-descriptions-item label="离线安全阀是否已经复位" :label-style="labelStyle">
+          {{ this.detail.data.resetConfirm }}
+        </el-descriptions-item>
+        <el-descriptions-item label="离线安全阀复位后现场是否存在泄漏" :label-style="labelStyle">
+          {{ this.detail.data.leakConfirm }}
+        </el-descriptions-item>
+        <el-descriptions-item label="离线安全复位后,之前采取的安全措施是否已撤销" :label-style="labelStyle">
+          {{ this.detail.data.revokeConfirm }}
+        </el-descriptions-item>
+        <el-descriptions-item label="离线安全复位后,是否已经重新上锁" :label-style="labelStyle">
+          {{ this.detail.data.lockConfirm }}
+        </el-descriptions-item>
+        <el-descriptions-item label="确认上锁人员" :label-style="labelStyle" :span="2">
+          {{ this.detail.data.lockConfirmer1Name }} {{ this.detail.data.lockConfirmer2Name }}
+        </el-descriptions-item>
+        <el-descriptions-item label="上述信息确认人" :label-style="labelStyle">
+          {{ this.detail.data.infoConfirmerName }}
+        </el-descriptions-item>
+        <el-descriptions-item label="确认时间" :label-style="labelStyle">
+          {{ this.detail.data.confirmTime }}
+        </el-descriptions-item>
+        <el-descriptions-item label="备注" :span="2" :label-style="labelStyle">
+          {{ this.detail.data.remarks }}
+        </el-descriptions-item>
+      </el-descriptions>
+    </el-dialog>
+    <el-dialog :close-on-click-modal="false" title="申请单详情" :visible.sync="detail.open2" width="50%" append-to-body>
+      <el-descriptions :column="2" border size="medium">
+        <el-descriptions-item label="组织保护措施变更播述" :span="2" :label-style="labelStyle">
+          {{ this.detail.data.changeDescribe }}
+        </el-descriptions-item>
+        <el-descriptions-item label="状态变更的原因" span="2" :label-style="labelStyle">
+          {{ this.detail.data.changeReason }}
+        </el-descriptions-item>
+        <el-descriptions-item label="申请人" :label-style="labelStyle">
+          {{ this.detail.data.applicantName }}
+        </el-descriptions-item>
+        <el-descriptions-item label="申请时间" :label-style="labelStyle">
+          <template>
+            <span>{{ parseTime(this.detail.data.applicationTime, '{y}-{m}-{d} {h}:{i}') }}</span>
+          </template>
+        </el-descriptions-item>
+        <el-descriptions-item label="状态" :label-style="labelStyle">
+          <el-tag size="small" :type="statusFlag">{{ applyStatus[this.detail.data.status] }}</el-tag>
+        </el-descriptions-item>
+        <el-descriptions-item label="申请状态">
+          <el-tag size="small" :type="approveStatusFlag">{{ approveStatus[this.detail.data.approveStatus] }}</el-tag>
+        </el-descriptions-item>
+        <el-descriptions-item label="安全评估及临时的安全措施" :span="2" :label-style="labelStyle">
+          {{ this.detail.data.safa }}
+        </el-descriptions-item>
+        <el-descriptions-item label="安全评估人" :label-style="labelStyle">
+          {{ this.detail.data.safaerName }}
+        </el-descriptions-item>
+        <el-descriptions-item label="安全评估时间" :label-style="labelStyle">
+          <template>
+            <span>{{ parseTime(this.detail.data.safaTime, '{y}-{m}-{d} {h}:{i}') }}</span>
+          </template>
+        </el-descriptions-item>
+        <el-descriptions-item label="批准人" :label-style="labelStyle">
+          {{ this.detail.data.approverName }}
+        </el-descriptions-item>
+        <el-descriptions-item label="批准时间" :label-style="labelStyle">
+          <template>
+            <span>{{ parseTime(this.detail.data.approveTime, '{y}-{m}-{d} {h}:{i}') }}</span>
+          </template>
+        </el-descriptions-item>
+        <el-descriptions-item label="临时措施执行人" :label-style="labelStyle">
+          {{ this.detail.data.executorName }}
+        </el-descriptions-item>
+        <el-descriptions-item label="临时措施执行时间" :label-style="labelStyle">
+          <template>
+            <span>{{ parseTime(this.detail.data.executionTime, '{y}-{m}-{d} {h}:{i}') }}</span>
+          </template>
+        </el-descriptions-item>
+        <el-descriptions-item label="临时措施确认人" :label-style="labelStyle">
+          {{ this.detail.data.confirmerName }}
+        </el-descriptions-item>
+        <el-descriptions-item label="临时措施确认时间" :label-style="labelStyle">
+          <template>
+            <span>{{ parseTime(this.detail.data.confirmTime, '{y}-{m}-{d} {h}:{i}') }}</span>
+          </template>
+        </el-descriptions-item>
+        <el-descriptions-item label="组织保护措施状态变更执行" :span="2" :label-style="labelStyle">
+          {{ this.detail.data.changeExecution }}
+        </el-descriptions-item>
+        <el-descriptions-item label="执行人" :label-style="labelStyle">
+          {{ this.detail.data.changeExecutorName }}
+        </el-descriptions-item>
+        <el-descriptions-item label="执行时间" :label-style="labelStyle">
+          <template>
+            <span>{{ parseTime(this.detail.data.changeExecutorTime, '{y}-{m}-{d} {h}:{i}') }}</span>
+          </template>
+        </el-descriptions-item>
+        <el-descriptions-item label="组织保护措施是否已经恢复至变更前的状态" :label-style="labelStyle">
+          {{ this.detail.data.resetConfirm }}
+        </el-descriptions-item>
+        <el-descriptions-item label="破锁编号" :label-style="labelStyle">
+          {{ this.detail.data.lockNo }}
+        </el-descriptions-item>
+        <el-descriptions-item label="状态恢复,确认人1" :label-style="labelStyle">
+          {{ this.detail.data.resetConfirmerName1 }}
+        </el-descriptions-item>
+        <el-descriptions-item label="确认时间" :label-style="labelStyle">
+          {{ this.detail.data.resetConfirmTime1 }}
+        </el-descriptions-item>
+        <el-descriptions-item label="状态恢复,确认人2" :label-style="labelStyle">
+          {{ this.detail.data.resetConfirmerName2 }}
+        </el-descriptions-item>
+        <el-descriptions-item label="确认时间" :label-style="labelStyle">
+          {{ this.detail.data.resetConfirmTime2 }}
+        </el-descriptions-item>
+        <el-descriptions-item label="状态恢复后,之前采取的安全措施是否已撤销" :span="2" :label-style="labelStyle">
+          {{ this.detail.data.revokeConfirm }}
+        </el-descriptions-item>
+        <el-descriptions-item label="备注" :span="2" :label-style="labelStyle">
+          {{ this.detail.data.remarks }}
+        </el-descriptions-item>
+      </el-descriptions>
+    </el-dialog>
+    <el-dialog :close-on-click-modal="false" title="申请单详情" :visible.sync="detail.open3" width="50%" append-to-body>
+      <el-empty description=""></el-empty>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import VueDraggableResizable from 'vue-draggable-resizable'
+import {getLock, listLockBranch, updateLock, getInfoByLock} from "@/api/apply/lock";
+import OfflinevalveDetail from "@/views/approve/approveDetail/offlinevalve-detail";
+import {listEoegLockBranch} from "@/api/eoeg/eoegLock";
+
+export default {
+  props: {
+    pageNumber: {default: 1}
+  },
+  components: {OfflinevalveDetail, VueDraggableResizable},
+  name: "lock-level-c",
+  directives: {
+    drag(el) {
+      const oDiv = el
+      // 拖拽时间标识
+      let firstTime = ''
+      let lastTime = ''
+      document.onselectstart = function () {
+        return false
+      }
+      oDiv.onmousedown = function (e) {
+        // 为了区分点击还是拖拽,使用时间差来判断,200毫秒内为点击,200毫秒外为拖拽,初始化为点击
+        document.getElementById('parent').setAttribute('drag-flag', false)
+        firstTime = new Date().getTime()
+        // 判断下当前时间与初始时间差,大于200毫秒则判断状态为拖拽
+
+
+        // 鼠标抬起时清除事件
+        document.onmouseup = function (e) {
+          lastTime = new Date().getTime()
+          console.log("firstTime:::" + firstTime)
+          console.log("lastTime:::" + lastTime)
+          console.log("lastTime-firstTime:::" + (lastTime - firstTime))
+          if (lastTime - firstTime > 150) {
+            document.getElementById('parent').setAttribute('drag-flag', true)
+          }
+          document.onmousemove = null
+          document.onmouseup = null
+        }
+        return false
+      }
+    }
+  },
+  data() {
+    return {// 详情对象
+      detail: {
+        open1: false,
+        open2: false,
+        open3: false,
+        data: {}
+      },
+      applyStatus: {0: "未完成", 1: "已完成"},
+      approveStatus: {1: "申请中", 2: "已通过", 3: "已拒绝"},
+      statusFlag: '',
+      approveStatusFlag: '',
+      //label样式
+      labelStyle: {'width': '200px'},
+      lockData: {},
+      clientHeight: 300,
+      dragMove: true,
+      drawer: false,
+      data: [],
+      status: 0,
+      id: null,
+      loading: true,
+      visible: false,
+      height: document.body.clientHeight - 155,
+      clickFlag: true,// 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 700,
+        uniqueIdentifier: null,
+        riskLevel: 'C',
+        managementLevel: null,
+        stature: null,
+        medium: null,
+        position: null,
+        locationDes: null,
+        valveStatus: null,
+        valveType: null,
+        valveSize: null,
+        reasons: null,
+        remarks: null,
+        status: null,
+        createrCode: null,
+        createdate: null,
+        updaterCode: null,
+        updatedate: null,
+        deptId: null
+      },
+    }
+  },
+  created() {
+    this.getList();
+  },
+  mounted() {
+    window.onresize = () => {    //写在mounted中,onresize事件会在页面大小被调整时触发
+      return (() => {
+        window.screenHeight = document.body.clientHeight - 155;
+        this.height = window.screenHeight;
+      })();
+    };
+
+  },
+  watch: {
+    height(val) {        //在watch中监听height,浏览器窗口大小变动时自适应高度。
+      this.height = val;
+      console.log(this.height, "新的高度");
+    },
+  },
+  methods: {
+    getCss(item) {
+      if (item.valveStatus == 'LCHQ') {//红背景
+        if (item.status == 0) {//白字
+          return 'fwAndbr'
+        } else if (item.status == 1) {//绿字
+          return 'fgAndbr'
+        } else {
+          return 'grey'
+        }
+      } else if (item.valveStatus == 'LOHQ') {//绿背景
+        if (item.status == 0) {//白字
+          return 'fwAndbg'
+        } else if (item.status == 1) {//红字
+          return 'frAndbg'
+        } else {
+          return 'grey'
+        }
+      } else {
+        return 'default'
+      }
+    },
+    /** 查询破锁管理列表 */
+    getList() {
+      this.loading = true;
+      listEoegLockBranch(this.queryParams).then(response => {
+        this.data = response.rows;
+        this.loading = false;
+      });
+    },
+    handleClick() {
+      setTimeout(function () {
+        // 点击事件触发时,判断当前状态是拖拽还是点击,若是拖拽,直接返回不继续执行
+        const isDrag = document.getElementById('parent').getAttribute('drag-flag')
+        if (isDrag == 'true') {
+          return
+        }
+      }, 50)
+    },
+    handleTableWheel(event) {
+      let obj = this.$refs['branch']
+      return this.tableZoom(obj, event)
+    },
+    tableZoom(obj, event) {
+      // 一开始默认是100%
+      let zoom = parseInt(obj.style.zoom, 10) || 100
+      // 滚轮滚一下wheelDelta的值增加或减少120
+      zoom += event.wheelDelta / 12
+      if (zoom > 25) {
+        obj.style.zoom = zoom + '%'
+      }
+      return false
+    },// 在你的组件方法或工具函数中定义以下函数
+
+    /**
+     * 获取第一个连字符之前的部分
+     * @param {string} str
+     * @returns {string}
+     */
+    getFirstPart(str) {
+      if (!str) return ''; // 处理空值或undefined
+      const dashIndex = str.indexOf('-');
+      if (dashIndex === -1) {
+        return str; // 如果没有连字符,返回整个字符串
+      }
+      return str.slice(0, dashIndex); // 使用 slice 获取从开始到第一个连字符的部分[1,2](@ref)
+    },
+
+    /**
+     * 获取第一个连字符和最后一个连字符之间的部分
+     * @param {string} str
+     * @returns {string}
+     */
+    getMiddlePart(str) {
+      if (!str) return '';
+      const firstDashIndex = str.indexOf('-');
+      const lastDashIndex = str.lastIndexOf('-');
+      // 检查是否至少找到两个不同的连字符
+      if (firstDashIndex === -1 || lastDashIndex === -1 || firstDashIndex === lastDashIndex) {
+        return ''; // 如果没有两个连字符,返回空字符串或其他默认值
+      }
+      return str.slice(firstDashIndex , lastDashIndex); // 使用 slice 获取中间部分(不包含两端的连字符)[1,2](@ref)
+    },
+
+    /**
+     * 获取最后一个连字符之后的部分
+     * @param {string} str
+     * @returns {string}
+     */
+    getLastPart(str) {
+      if (!str) return '';
+      const lastDashIndex = str.lastIndexOf('-');
+      if (lastDashIndex === -1) {
+        return ''; // 如果没有连字符,返回空字符串
+      }
+      return str.slice(lastDashIndex); // 使用 slice 获取从最后一个连字符后到末尾的部分[1,2](@ref)
+    },
+    openDialog(id, status, lockCode) {
+      // 点击事件触发时,判断当前状态是拖拽还是点击,若是拖拽,直接返回不继续执行
+      const isDrag = document.getElementById('parent').getAttribute('drag-flag')
+      if (isDrag === 'true') {
+        return
+      }
+      this.id = id
+      this.status = status
+      if (status == 2) {
+        this.visible = true;
+        this.lockData = {};
+        getLock(id).then(res => {
+          this.lockData = res.data
+        })
+      }
+      if (status == 1) {
+        this.statusFlag = '';
+        this.approveStatusFlag = '';
+        this.detail.open = true;
+        this.detail.data = {};
+        getInfoByLock(lockCode).then(res => {
+          if (res.data.type == 1) {
+            // this.detail.open1 = true
+            this.$router.push({path: '/process/offlinevalve', query: {lockNo: lockCode}});
+          }
+          if (res.data.type == 2) {
+            // this.detail.open2 = true
+            this.$router.push({path: '/process/safetychange', query: {lockNo: lockCode}});
+          }
+          if (res.data.type == 3) {
+            this.detail.open3 = true
+            return
+          }
+          this.detail.data = res.data.data
+          if (this.detail.data.status === 1) {
+            this.statusFlag = 'success';
+          }
+          if (this.detail.data.approveStatus === '2') {
+            this.approveStatusFlag = 'success';
+          } else if (this.detail.data.approveStatus === '1') {
+            this.approveStatusFlag = 'warning';
+          } else if (this.detail.data.approveStatus === '3') {
+            this.approveStatusFlag = 'danger';
+          }
+        })
+
+      }
+
+    }
+  }
+}
+</script>
+
+<style scoped>
+table {
+  width: auto;
+  border: 1px solid #d0d0d0;
+  border-collapse: collapse;
+}
+
+th {
+  height: 80px;
+  color: #4b4b4b;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+
+tr {
+  border: 1px solid #d0d0d0;
+  border-collapse: collapse;
+}
+
+td {
+  height: 200px;
+  border: 1px solid #d0d0d0;
+  border-collapse: collapse;
+  vertical-align: middle;
+  text-align: center;
+  padding: 20px 10px 20px 10px;
+}
+
+i {
+  font-size: 200%;
+  padding-bottom: 10px;
+}
+
+el-button {
+  width: 140px;
+  height: auto;
+}
+
+.default {
+  color: #fff;
+  background-color: #fff;
+}
+
+.fff {
+  background-color: #fff;
+}
+
+.fwAndbg {
+  color: #fff;
+  background-color: #67C23A;
+}
+
+.fwAndbr {
+  color: #fff;
+  background-color: #F56C6C;
+}
+
+.fgAndbr {
+  color: #67C23A;
+  background-color: #F56C6C;
+}
+
+.frAndbg {
+  color: #F56C6C;
+  background-color: #67C23A;
+}
+
+.green {
+  background-color: #67C23A;
+}
+
+.red {
+  background-color: #F56C6C;
+}
+
+.yellow {
+  background-color: #E6A23C;
+}
+
+.grey {
+  color: #fff;
+  background-color: #909399;
+}
+</style>

+ 515 - 0
ui/src/views/eoeg/lockApply/index.vue

@@ -0,0 +1,515 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="申请单 id" prop="changeId">
+        <el-input
+          v-model="queryParams.changeId"
+          placeholder="请输入申请单 id"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="申请编号" prop="apNo">
+        <el-input
+          v-model="queryParams.apNo"
+          placeholder="请输入申请编号"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="流程id" prop="processId">
+        <el-input
+          v-model="queryParams.processId"
+          placeholder="请输入流程id"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="备注" prop="remarks">
+        <el-input
+          v-model="queryParams.remarks"
+          placeholder="请输入备注"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="状态" prop="status">
+        <el-select v-model="queryParams.status" placeholder="请选择状态" clearable size="small">
+          <el-option label="请选择字典生成" value="" />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="创建人" prop="createrCode">
+        <el-input
+          v-model="queryParams.createrCode"
+          placeholder="请输入创建人"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="创建时间" prop="createdate">
+        <el-date-picker clearable size="small" style="width: 200px"
+          v-model="queryParams.createdate"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="选择创建时间">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="修改人" prop="updaterCode">
+        <el-input
+          v-model="queryParams.updaterCode"
+          placeholder="请输入修改人"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="修改时间" prop="updatedate">
+        <el-date-picker clearable size="small" style="width: 200px"
+          v-model="queryParams.updatedate"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="选择修改时间">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="部门编号" prop="deptId">
+        <el-input
+          v-model="queryParams.deptId"
+          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>
+      </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="['eoeg:lockApply: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="['eoeg:lockApply: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="['eoeg:lockApply:remove']"
+        >删除</el-button>
+      </el-col>
+        <el-col :span="1.5">
+            <el-button
+                    type="info"
+                    icon="el-icon-upload2"
+                    size="mini"
+                    @click="handleImport"
+                    v-hasPermi="['eoeg:lockApply:edit']"
+            >导入</el-button>
+        </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['eoeg:lockApply:export']"
+        >导出</el-button>
+      </el-col>
+	  <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="lockApplyList" @selection-change="handleSelectionChange" :height="clientHeight" border>
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="id" align="center" prop="id" :show-overflow-tooltip="true"/>
+      <el-table-column label="申请单 id" align="center" prop="changeId" :show-overflow-tooltip="true"/>
+      <el-table-column label="申请编号" align="center" prop="apNo" :show-overflow-tooltip="true"/>
+      <el-table-column label="流程id" align="center" prop="processId" :show-overflow-tooltip="true"/>
+      <el-table-column label="备注" align="center" prop="remarks" :show-overflow-tooltip="true"/>
+      <el-table-column label="状态" align="center" prop="status" :show-overflow-tooltip="true"/>
+      <el-table-column label="创建人" align="center" prop="createrCode" :show-overflow-tooltip="true"/>
+      <el-table-column label="创建时间" align="center" prop="createdate" width="100">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.createdate, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="修改人" align="center" prop="updaterCode" :show-overflow-tooltip="true"/>
+      <el-table-column label="修改时间" align="center" prop="updatedate" width="100">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.updatedate, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="部门编号" align="center" prop="deptId" :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="['eoeg:lockApply:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['eoeg:lockApply:remove']"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改EOEG 审批流关联对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="申请单 id" prop="changeId">
+          <el-input v-model="form.changeId" placeholder="请输入申请单 id" />
+        </el-form-item>
+        <el-form-item label="申请编号" prop="apNo">
+          <el-input v-model="form.apNo" placeholder="请输入申请编号" />
+        </el-form-item>
+        <el-form-item label="流程id" prop="processId">
+          <el-input v-model="form.processId" placeholder="请输入流程id" />
+        </el-form-item>
+        <el-form-item label="备注" prop="remarks">
+          <el-input v-model="form.remarks" placeholder="请输入备注" />
+        </el-form-item>
+        <el-form-item label="状态">
+          <el-radio-group v-model="form.status">
+            <el-radio label="1">请选择字典生成</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="状态 0 :正常 ;1:删除" prop="delFlag">
+          <el-input v-model="form.delFlag" placeholder="请输入状态 0 :正常 ;1:删除" />
+        </el-form-item>
+        <el-form-item label="创建人" prop="createrCode">
+          <el-input v-model="form.createrCode" placeholder="请输入创建人" />
+        </el-form-item>
+        <el-form-item label="创建时间" prop="createdate">
+          <el-date-picker clearable size="small" style="width: 200px"
+            v-model="form.createdate"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="选择创建时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="修改人" prop="updaterCode">
+          <el-input v-model="form.updaterCode" placeholder="请输入修改人" />
+        </el-form-item>
+        <el-form-item label="修改时间" prop="updatedate">
+          <el-date-picker clearable size="small" style="width: 200px"
+            v-model="form.updatedate"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="选择修改时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="部门编号" prop="deptId">
+          <el-input v-model="form.deptId" placeholder="请输入部门编号" />
+        </el-form-item>
+          <el-form-item label="归属部门" prop="deptId">
+              <treeselect v-model="form.deptId" :options="deptOptions" :show-count="true" 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>
+  </div>
+</template>
+
+<script>
+import { listLockApply, getLockApply, delLockApply, addLockApply, updateLockApply, exportLockApply, importTemplate} from "@/api/eoeg/lockApply";
+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";
+
+export default {
+  name: "LockApply",
+  components: { Treeselect },
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: false,
+      // 总条数
+      total: 0,
+      // EOEG 审批流关联表格数据
+      lockApplyList: [],
+      // 弹出层标题
+      title: "",
+      // 部门树选项
+      deptOptions: undefined,
+      clientHeight:300,
+      // 是否显示弹出层
+      open: false,
+        // 用户导入参数
+        upload: {
+            // 是否显示弹出层(用户导入)
+            open: false,
+            // 弹出层标题(用户导入)
+            title: "",
+            // 是否禁用上传
+            isUploading: false,
+            // 是否更新已经存在的用户数据
+            updateSupport: 0,
+            // 设置上传的请求头部
+            headers: { Authorization: "Bearer " + getToken() },
+            // 上传的地址
+            url: process.env.VUE_APP_BASE_API + "/eoeg/lockApply/importData"
+        },
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 20,
+        changeId: null,
+        apNo: null,
+        processId: null,
+        remarks: null,
+        status: null,
+        createrCode: null,
+        createdate: null,
+        updaterCode: null,
+        updatedate: null,
+        deptId: null
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+      }
+    };
+  },
+  watch: {
+        // 根据名称筛选部门树
+        deptName(val) {
+            this.$refs.tree.filter(val);
+        }
+   },
+  created() {
+      //设置表格高度对应屏幕高度
+      this.$nextTick(() => {
+          this.clientHeight = document.body.clientHeight -250
+      })
+    this.getList();
+    this.getTreeselect();
+  },
+  methods: {
+    /** 查询EOEG 审批流关联列表 */
+    getList() {
+      this.loading = true;
+      listLockApply(this.queryParams).then(response => {
+        this.lockApplyList = 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,
+        changeId: null,
+        apNo: null,
+        processId: null,
+        remarks: null,
+        status: 0,
+        delFlag: null,
+        createrCode: null,
+        createdate: null,
+        updaterCode: null,
+        updatedate: null,
+        deptId: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加EOEG 审批流关联";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getLockApply(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改EOEG 审批流关联";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateLockApply(this.form).then(response => {
+              this.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addLockApply(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 delLockApply(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        })
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      const queryParams = this.queryParams;
+      this.$confirm('是否确认导出所有EOEG 审批流关联数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return exportLockApply(queryParams);
+        }).then(response => {
+          this.download(response.msg);
+        })
+    },
+      /** 导入按钮操作 */
+      handleImport() {
+          this.upload.title = "用户导入";
+          this.upload.open = true;
+      },
+      /** 下载模板操作 */
+      importTemplate() {
+          importTemplate().then(response => {
+              this.download(response.msg);
+          });
+      },
+      // 文件上传中处理
+      handleFileUploadProgress(event, file, fileList) {
+          this.upload.isUploading = true;
+      },
+      // 文件上传成功处理
+      handleFileSuccess(response, file, fileList) {
+          this.upload.open = false;
+          this.upload.isUploading = false;
+          this.$refs.upload.clearFiles();
+          this.$alert(response.msg, "导入结果", { dangerouslyUseHTMLString: true });
+          this.getList();
+      },
+      // 提交上传文件
+      submitFileForm() {
+          this.$refs.upload.submit();
+      }
+  }
+};
+</script>