From d5653a35b810786e67616d0e9cee8dcb23c0622e Mon Sep 17 00:00:00 2001
From: 15036302109 <zhp5211314>
Date: Tue, 12 Dec 2023 17:32:58 +0800
Subject: [PATCH] =?UTF-8?q?=E5=BA=94=E6=80=A5=E6=95=91=E6=8F=B4=E9=98=9F?=
 =?UTF-8?q?=E4=BC=8D=E7=AE=A1=E7=90=86=E5=92=8C=E4=BA=BA=E5=91=98=E4=BF=A1?=
 =?UTF-8?q?=E6=81=AF=E5=8A=9F=E8=83=BD=E5=AE=8C=E6=88=90,=E4=BA=BA?=
 =?UTF-8?q?=E5=91=98=E4=BF=A1=E6=81=AF=E7=BC=BA=E4=B8=AA=E5=AF=BC=E5=85=A5?=
 =?UTF-8?q?=E5=8A=9F=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../ehs/EhsRescueTeamController.java          | 148 ++++++
 .../ehs/EhsRescueTeamWorkerController.java    | 150 ++++++
 .../ruoyi/common/core/domain/ExcelExp.java    |  21 +
 .../ruoyi/common/utils/ExcelExportUtil.java   |  81 +++
 .../ehsRescueTeam/domain/EhsRescueTeam.java   |  53 ++
 .../domain/RescueTeamImportTemplate.java      |  20 +
 .../mapper/EhsRescueTeamMapper.java           |  44 ++
 .../service/IEhsRescueTeamService.java        |  46 ++
 .../impl/EhsRescueTeamServiceImpl.java        | 123 +++++
 .../ehsRescueTeam/vo/TeamResponseVo.java      |  10 +
 .../domain/EhsRescueTeamWorker.java           |  92 ++++
 .../mapper/EhsRescueTeamWorkerMapper.java     |  33 ++
 .../service/IEhsRescueTeamWorkerService.java  |  34 ++
 .../impl/EhsRescueTeamWorkerServiceImpl.java  |  74 +++
 .../mapper/ehs/EhsRescueTeamMapper.xml        |  56 +++
 .../mapper/ehs/EhsRescueTeamWorkerMapper.xml  |  62 +++
 ruoyi-ui/src/api/ehs/ehsRescueTeam.js         |  44 ++
 ruoyi-ui/src/api/ehs/ehsRescueTeamWorker.js   |  52 ++
 ruoyi-ui/src/components/upload/upload.vue     | 107 ++++
 ruoyi-ui/src/views/ehs/ehsDocument/index.vue  |  45 +-
 .../src/views/ehs/ehsRescueTeam/index.vue     | 373 ++++++++++++++
 .../views/ehs/ehsRescueTeamWorker/index.vue   | 461 ++++++++++++++++++
 22 files changed, 2099 insertions(+), 30 deletions(-)
 create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/web/controller/ehs/EhsRescueTeamController.java
 create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/web/controller/ehs/EhsRescueTeamWorkerController.java
 create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/core/domain/ExcelExp.java
 create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/utils/ExcelExportUtil.java
 create mode 100644 ruoyi-system/src/main/java/com/ruoyi/ehsRescueTeam/domain/EhsRescueTeam.java
 create mode 100644 ruoyi-system/src/main/java/com/ruoyi/ehsRescueTeam/domain/RescueTeamImportTemplate.java
 create mode 100644 ruoyi-system/src/main/java/com/ruoyi/ehsRescueTeam/mapper/EhsRescueTeamMapper.java
 create mode 100644 ruoyi-system/src/main/java/com/ruoyi/ehsRescueTeam/service/IEhsRescueTeamService.java
 create mode 100644 ruoyi-system/src/main/java/com/ruoyi/ehsRescueTeam/service/impl/EhsRescueTeamServiceImpl.java
 create mode 100644 ruoyi-system/src/main/java/com/ruoyi/ehsRescueTeam/vo/TeamResponseVo.java
 create mode 100644 ruoyi-system/src/main/java/com/ruoyi/ehsRescueTeamWorker/domain/EhsRescueTeamWorker.java
 create mode 100644 ruoyi-system/src/main/java/com/ruoyi/ehsRescueTeamWorker/mapper/EhsRescueTeamWorkerMapper.java
 create mode 100644 ruoyi-system/src/main/java/com/ruoyi/ehsRescueTeamWorker/service/IEhsRescueTeamWorkerService.java
 create mode 100644 ruoyi-system/src/main/java/com/ruoyi/ehsRescueTeamWorker/service/impl/EhsRescueTeamWorkerServiceImpl.java
 create mode 100644 ruoyi-system/src/main/resources/mapper/ehs/EhsRescueTeamMapper.xml
 create mode 100644 ruoyi-system/src/main/resources/mapper/ehs/EhsRescueTeamWorkerMapper.xml
 create mode 100644 ruoyi-ui/src/api/ehs/ehsRescueTeam.js
 create mode 100644 ruoyi-ui/src/api/ehs/ehsRescueTeamWorker.js
 create mode 100644 ruoyi-ui/src/components/upload/upload.vue
 create mode 100644 ruoyi-ui/src/views/ehs/ehsRescueTeam/index.vue
 create mode 100644 ruoyi-ui/src/views/ehs/ehsRescueTeamWorker/index.vue

diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/ehs/EhsRescueTeamController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/ehs/EhsRescueTeamController.java
new file mode 100644
index 0000000..5518086
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/ehs/EhsRescueTeamController.java
@@ -0,0 +1,148 @@
+package com.ruoyi.web.controller.ehs;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Arrays;
+import javax.servlet.http.HttpServletResponse;
+
+import com.ruoyi.common.core.domain.ExcelExp;
+import com.ruoyi.common.utils.ExcelExportUtil;
+import com.ruoyi.ehsRescueTeam.domain.RescueTeamImportTemplate;
+import com.ruoyi.ehsRescueTeamWorker.service.IEhsRescueTeamWorkerService;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+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 io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.ehsRescueTeam.domain.EhsRescueTeam;
+import com.ruoyi.ehsRescueTeam.service.IEhsRescueTeamService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+import org.springframework.web.multipart.MultipartFile;
+
+/**
+ * 应急救援队伍管理Controller
+ *
+ * @author ruoyi
+ * @date 2023-12-11
+ */
+@Api(tags = "应急救援队伍管理管理")
+@RestController
+@RequestMapping("/ehs/ehsRescueTeam")
+public class EhsRescueTeamController extends BaseController {
+    @Autowired
+    private IEhsRescueTeamService ehsRescueTeamService;
+
+    @Autowired
+    private IEhsRescueTeamWorkerService ehsRescueTeamWorkerService;
+
+    /**
+     * 查询应急救援队伍管理列表
+     */
+    @PreAuthorize("@ss.hasPermi('ehs:ehsRescueTeam:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(EhsRescueTeam ehsRescueTeam) {
+        startPage();
+        List<EhsRescueTeam> list = ehsRescueTeamService.selectEhsRescueTeamList(ehsRescueTeam);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出应急救援队伍管理列表
+     */
+    @PreAuthorize("@ss.hasPermi('ehs:ehsRescueTeam:export')")
+    @Log(title = "应急救援队伍管理", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, EhsRescueTeam ehsRescueTeam) {
+        List<EhsRescueTeam> list = ehsRescueTeamService.selectEhsRescueTeamList(ehsRescueTeam);
+        ExcelUtil<EhsRescueTeam> util = new ExcelUtil<EhsRescueTeam>(EhsRescueTeam.class);
+        util.exportExcel(response, list, "应急救援队伍管理数据");
+    }
+
+    /**
+     * 下载批量导入模板
+     */
+    @PostMapping("/importTemplate")
+    public void importTemplate(HttpServletResponse response) throws IOException {
+        List<EhsRescueTeam> ehsRescueTeamList = new ArrayList<>();
+        String[] header =
+                {"队伍名称#",
+                        "队伍级别#",
+                        "备注#"};
+        ExcelExp e1 = new ExcelExp("应急救援队伍信息", header, ehsRescueTeamList, EhsRescueTeam.class);
+        List<ExcelExp> mysheet = new ArrayList<>();
+        mysheet.add(e1);
+        ExcelExportUtil.exportManySheetExcel("应急救援队伍信息批量导入模板", mysheet, response);
+    }
+
+    /**
+     * 批量导入
+     */
+    @PostMapping("/importData")
+    public AjaxResult importHubManage(MultipartFile file, Boolean updateSupport) throws Exception {
+        ExcelUtil<RescueTeamImportTemplate> util = new ExcelUtil<>(RescueTeamImportTemplate.class);
+        List<RescueTeamImportTemplate> list = util.importExcel(file.getInputStream());
+        String message = ehsRescueTeamService.importRescueTeam(list, updateSupport);
+        return AjaxResult.success(message);
+    }
+
+    /**
+     * 获取应急救援队伍管理详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('ehs:ehsRescueTeam:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id) {
+        return success(ehsRescueTeamService.selectEhsRescueTeamById(id));
+    }
+
+    /**
+     * 新增应急救援队伍管理
+     */
+    @ApiOperation("新增应急救援队伍管理")
+    @PreAuthorize("@ss.hasPermi('ehs:ehsRescueTeam:add')")
+    @Log(title = "应急救援队伍管理", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody EhsRescueTeam ehsRescueTeam) {
+        return toAjax(ehsRescueTeamService.save(ehsRescueTeam));
+    }
+
+    /**
+     * 修改应急救援队伍管理
+     */
+    @ApiOperation("修改应急救援队伍管理")
+    @PreAuthorize("@ss.hasPermi('ehs:ehsRescueTeam:edit')")
+    @Log(title = "应急救援队伍管理", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody EhsRescueTeam ehsRescueTeam) {
+        return toAjax(ehsRescueTeamService.updateById(ehsRescueTeam));
+    }
+
+    /**
+     * 删除应急救援队伍管理
+     */
+    @ApiOperation("删除应急救援队伍管理")
+    @PreAuthorize("@ss.hasPermi('ehs:ehsRescueTeam:remove')")
+    @Log(title = "应急救援队伍管理", businessType = BusinessType.DELETE)
+    @Transactional
+    @DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids) {
+        // 根据队伍ids删除队伍
+        ehsRescueTeamService.removeByIds(Arrays.asList(ids));
+        // 根据队伍ids删除队伍中的队员
+        boolean result = ehsRescueTeamWorkerService.removeWorkerByTeamIds(Arrays.asList(ids));
+        return toAjax(result);
+    }
+}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/ehs/EhsRescueTeamWorkerController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/ehs/EhsRescueTeamWorkerController.java
new file mode 100644
index 0000000..7b9a59d
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/ehs/EhsRescueTeamWorkerController.java
@@ -0,0 +1,150 @@
+package com.ruoyi.web.controller.ehs;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.ExcelExp;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.ExcelExportUtil;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.ehsRescueTeam.domain.EhsRescueTeam;
+import com.ruoyi.ehsRescueTeam.domain.RescueTeamImportTemplate;
+import com.ruoyi.ehsRescueTeam.service.IEhsRescueTeamService;
+import com.ruoyi.ehsRescueTeam.vo.TeamResponseVo;
+import com.ruoyi.ehsRescueTeamWorker.domain.EhsRescueTeamWorker;
+import com.ruoyi.ehsRescueTeamWorker.service.IEhsRescueTeamWorkerService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * 应急救援队人员信息Controller
+ *
+ * @author ruoyi
+ * @date 2023-12-11
+ */
+@Api(tags = "应急救援队人员信息管理")
+@RestController
+@RequestMapping("/ehs/ehsRescueTeamWorker")
+public class EhsRescueTeamWorkerController extends BaseController {
+    @Autowired
+    private IEhsRescueTeamWorkerService ehsRescueTeamWorkerService;
+    @Autowired
+    private IEhsRescueTeamService ehsRescueTeamService;
+
+    /**
+     * 查询应急救援队人员信息列表
+     */
+    //@PreAuthorize("@ss.hasPermi('ehs:ehsRescueTeamWorker:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(EhsRescueTeamWorker ehsRescueTeamWorker) {
+        startPage();
+        List<EhsRescueTeamWorker> list = ehsRescueTeamWorkerService.selectEhsRescueTeamWorkerList(ehsRescueTeamWorker);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出应急救援队人员信息列表
+     */
+    //@PreAuthorize("@ss.hasPermi('ehs:ehsRescueTeamWorker:export')")
+    @Log(title = "应急救援队人员信息", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, EhsRescueTeamWorker ehsRescueTeamWorker) {
+        List<EhsRescueTeamWorker> list = ehsRescueTeamWorkerService.selectEhsRescueTeamWorkerList(ehsRescueTeamWorker);
+        ExcelUtil<EhsRescueTeamWorker> util = new ExcelUtil<EhsRescueTeamWorker>(EhsRescueTeamWorker.class);
+        util.exportExcel(response, list, "应急救援队人员信息数据");
+    }
+
+    /**
+     * 获取应急救援队人员信息详细信息
+     */
+    //@PreAuthorize("@ss.hasPermi('ehs:ehsRescueTeamWorker:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id) {
+        return success(ehsRescueTeamWorkerService.selectEhsRescueTeamWorkerById(id));
+    }
+
+    /**
+     * 根据队伍id获取队伍信息
+     */
+    @GetMapping(value = "/getTeamInfo/{rescueTeamId}")
+    public AjaxResult getTeamInfo(@PathVariable("rescueTeamId") Long rescueTeamId) {
+        TeamResponseVo teamResponseVo = ehsRescueTeamService.getTeamInfoByTeamId(rescueTeamId);
+        return success(teamResponseVo);
+    }
+
+    /**
+     * 新增应急救援队人员信息
+     */
+    @ApiOperation("新增应急救援队人员信息")
+    //@PreAuthorize("@ss.hasPermi('ehs:ehsRescueTeamWorker:add')")
+    @Log(title = "应急救援队人员信息", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody EhsRescueTeamWorker ehsRescueTeamWorker) {
+        return toAjax(ehsRescueTeamWorkerService.save(ehsRescueTeamWorker));
+    }
+
+    /**
+     * 修改应急救援队人员信息
+     */
+    @ApiOperation("修改应急救援队人员信息")
+    //@PreAuthorize("@ss.hasPermi('ehs:ehsRescueTeamWorker:edit')")
+    @Log(title = "应急救援队人员信息", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody EhsRescueTeamWorker ehsRescueTeamWorker) {
+        return toAjax(ehsRescueTeamWorkerService.updateById(ehsRescueTeamWorker));
+    }
+
+    /**
+     * 删除应急救援队人员信息
+     */
+    @ApiOperation("删除应急救援队人员信息")
+    //@PreAuthorize("@ss.hasPermi('ehs:ehsRescueTeamWorker:remove')")
+    @Log(title = "应急救援队人员信息", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids) {
+        return toAjax(ehsRescueTeamWorkerService.removeByIds(Arrays.asList(ids)));
+    }
+
+    /**
+     * 下载批量导入模板
+     */
+    @PostMapping("/importTemplate")
+    public void importTemplate(HttpServletResponse response) throws IOException {
+        List<EhsRescueTeamWorker> teamWorkerList = new ArrayList<>();
+        String[] header =
+                {"人员姓名#",
+                        "性别(0男 1女)#",
+                        "出生年月(格式为2023-12-12)#",
+                        "身份证号#",
+                        "联系方式#",
+                        "工作年限#",
+                        "救援技能特长#",
+                        "备注#"};
+        ExcelExp e1 = new ExcelExp("应急救援队伍人员信息", header, teamWorkerList, EhsRescueTeamWorker.class);
+        List<ExcelExp> mysheet = new ArrayList<>();
+        mysheet.add(e1);
+        ExcelExportUtil.exportManySheetExcel("应急救援队伍人员信息批量导入模板", mysheet, response);
+    }
+
+
+    /**
+     * 批量导入
+     */
+    @PostMapping("/importData")
+    public AjaxResult importHubManage(MultipartFile file, Boolean updateSupport) throws Exception {
+        ExcelUtil<RescueTeamImportTemplate> util = new ExcelUtil<>(RescueTeamImportTemplate.class);
+        List<RescueTeamImportTemplate> list = util.importExcel(file.getInputStream());
+        String message = ehsRescueTeamService.importRescueTeam(list, updateSupport);
+        return AjaxResult.success(message);
+    }
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/ExcelExp.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/ExcelExp.java
new file mode 100644
index 0000000..865b872
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/ExcelExp.java
@@ -0,0 +1,21 @@
+package com.ruoyi.common.core.domain;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class ExcelExp {
+
+    private  String fileName;// sheet的名称
+    private  String[] handers;// sheet里的标题
+    private  List dataset;// sheet里的数据集
+    private Class clazz;
+
+    public ExcelExp(String fileName, String[] handers, List dataset, Class clazz) {
+        this.fileName = fileName;
+        this.handers = handers;
+        this.dataset = dataset;
+        this.clazz=clazz;
+    }
+}
\ No newline at end of file
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/ExcelExportUtil.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/ExcelExportUtil.java
new file mode 100644
index 0000000..87e51f2
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/ExcelExportUtil.java
@@ -0,0 +1,81 @@
+package com.ruoyi.common.utils;
+
+import cn.hutool.json.JSONUtil;
+import com.alibaba.fastjson2.JSONObject;
+import com.ruoyi.common.core.domain.ExcelExp;
+import org.apache.poi.hssf.usermodel.*;
+import org.apache.poi.ss.usermodel.HorizontalAlignment;
+import org.apache.poi.ss.usermodel.VerticalAlignment;
+
+import javax.servlet.http.HttpServletResponse;
+import java.net.URLEncoder;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * 多sheet 导出
+ */
+public class ExcelExportUtil {
+    public static void exportManySheetExcel(String fileName, List<ExcelExp> mysheets, HttpServletResponse response) {
+        HSSFWorkbook wb = new HSSFWorkbook();//创建工作薄
+        List<ExcelExp> sheets = mysheets;
+        //表头样式
+        HSSFCellStyle style = wb.createCellStyle();
+        style.setVerticalAlignment(VerticalAlignment.CENTER);// 垂直
+        style.setAlignment(HorizontalAlignment.CENTER);// 水平
+        //字体样式
+        HSSFFont fontStyle = wb.createFont();
+        fontStyle.setFontName("微软雅黑");
+        fontStyle.setFontHeightInPoints((short) 12);
+        style.setFont(fontStyle);
+        for (ExcelExp excel : sheets) {
+            //新建一个sheet
+            HSSFSheet sheet = wb.createSheet(excel.getFileName());//获取该sheet名称
+            String[] handers = excel.getHanders();//获取sheet的标题名
+            String[] header = new String[handers.length];
+            String[] code = new String[handers.length];
+            for (int i = 0; i < handers.length; i++) {
+                String[] temp = handers[i].split("#");//由两部分组成
+                header[i] = temp[0];//#号之前的是标题汉字
+                if (temp.length > 1) {
+                    code[i] = temp[1];  //#号之后的是查询出得映射字段
+                }
+            }
+            HSSFRow rowFirst = sheet.createRow(0);//第一个sheet的第一行为标题
+            //写标题
+            for (int i = 0; i < header.length; i++) {
+                //获取第一行的每个单元格
+                HSSFCell cell = rowFirst.createCell(i);
+                //往单元格里写数据
+                cell.setCellValue(header[i]);
+                cell.setCellStyle(style); //加样式
+                sheet.setColumnWidth(i, 10000); //设置每列的列宽
+            }
+            //写数据集
+            List clazz = Collections.singletonList(excel.getClazz());
+            clazz = excel.getDataset();
+            for (int i = 0; i < clazz.size(); i++) {  //获取多少行
+                HSSFRow row = sheet.createRow(i + 1); //设置行
+                String json = JSONUtil.parse(clazz.get(i)).toString();
+                JSONObject jsonObject = JSONObject.parseObject(json);  //转换成json
+                for (int j = 0; j < header.length; j++) {
+                    row.createCell(j).setCellValue((String) jsonObject.get(code[j]));  //填充指定的单元格
+                }
+            }
+        }
+
+        //下载
+        try {
+            HSSFWorkbook hssfWorkbook = new HSSFWorkbook();
+            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+            response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName + ".xls", "utf-8"));
+            response.setHeader("Cache-Control", "No-cache");
+            response.flushBuffer();
+            wb.write(response.getOutputStream());
+            wb.close();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+}
\ No newline at end of file
diff --git a/ruoyi-system/src/main/java/com/ruoyi/ehsRescueTeam/domain/EhsRescueTeam.java b/ruoyi-system/src/main/java/com/ruoyi/ehsRescueTeam/domain/EhsRescueTeam.java
new file mode 100644
index 0000000..36e7a54
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/ehsRescueTeam/domain/EhsRescueTeam.java
@@ -0,0 +1,53 @@
+package com.ruoyi.ehsRescueTeam.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.ToString;
+import lombok.experimental.Accessors;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 应急救援队伍管理对象 ehs_rescue_team
+ *
+ * @author ruoyi
+ * @date 2023-12-11
+ */
+@Data
+@ToString
+@NoArgsConstructor
+@Accessors(chain = true)
+@TableName("ehs_rescue_team")
+public class EhsRescueTeam extends BaseEntity {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 队伍名称
+     */
+    @Excel(name = "队伍名称")
+    private String teamName;
+
+    /**
+     * 队伍级别
+     */
+    @Excel(name = "队伍级别")
+    private String teamLevel;
+
+    /**
+     * 救援人员数量
+     */
+    @Excel(name = "救援人员数量")
+    @TableField(exist = false)
+    private Long rescueWorkerNum;
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/ehsRescueTeam/domain/RescueTeamImportTemplate.java b/ruoyi-system/src/main/java/com/ruoyi/ehsRescueTeam/domain/RescueTeamImportTemplate.java
new file mode 100644
index 0000000..92a1a10
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/ehsRescueTeam/domain/RescueTeamImportTemplate.java
@@ -0,0 +1,20 @@
+package com.ruoyi.ehsRescueTeam.domain;
+
+import com.ruoyi.common.annotation.Excel;
+import lombok.Data;
+
+@Data
+public class RescueTeamImportTemplate {
+    /** 队伍名称 */
+    @Excel(name = "队伍名称",type = Excel.Type.ALL)
+    private String teamName;
+
+    /** 队伍级别 */
+    @Excel(name = "队伍级别",type = Excel.Type.ALL)
+    private String teamLevel;
+
+    /** 备注 */
+    @Excel(name = "备注",type = Excel.Type.ALL)
+    private String remark;
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/ehsRescueTeam/mapper/EhsRescueTeamMapper.java b/ruoyi-system/src/main/java/com/ruoyi/ehsRescueTeam/mapper/EhsRescueTeamMapper.java
new file mode 100644
index 0000000..cb465ed
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/ehsRescueTeam/mapper/EhsRescueTeamMapper.java
@@ -0,0 +1,44 @@
+package com.ruoyi.ehsRescueTeam.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.ehsRescueTeam.domain.EhsRescueTeam;
+import com.ruoyi.ehsRescueTeam.vo.TeamResponseVo;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 应急救援队伍管理Mapper接口
+ *
+ * @author ruoyi
+ * @date 2023-12-11
+ */
+public interface EhsRescueTeamMapper extends BaseMapper<EhsRescueTeam> {
+    /**
+     * 查询应急救援队伍管理
+     *
+     * @param id 应急救援队伍管理主键
+     * @return 应急救援队伍管理
+     */
+    public EhsRescueTeam selectEhsRescueTeamById(Long id);
+
+    /**
+     * 查询应急救援队伍管理列表
+     *
+     * @param ehsRescueTeam 应急救援队伍管理
+     * @return 应急救援队伍管理集合
+     */
+    public List<EhsRescueTeam> selectEhsRescueTeamList(EhsRescueTeam ehsRescueTeam);
+
+    /**
+     * 根据营救救援队伍id,查询该队伍人数
+     * @param id
+     * @return
+     */
+    Long getWorkerNumByTeamId(@Param("id") Long id);
+
+    /**
+     * 根据队伍id获取队伍信息
+     */
+    TeamResponseVo getTeamInfoByTeamId(Long rescueTeamId);
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/ehsRescueTeam/service/IEhsRescueTeamService.java b/ruoyi-system/src/main/java/com/ruoyi/ehsRescueTeam/service/IEhsRescueTeamService.java
new file mode 100644
index 0000000..3a61f63
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/ehsRescueTeam/service/IEhsRescueTeamService.java
@@ -0,0 +1,46 @@
+package com.ruoyi.ehsRescueTeam.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.ehsRescueTeam.domain.EhsRescueTeam;
+import com.ruoyi.ehsRescueTeam.domain.RescueTeamImportTemplate;
+import com.ruoyi.ehsRescueTeam.vo.TeamResponseVo;
+
+import java.util.List;
+
+/**
+ * 应急救援队伍管理Service接口
+ *
+ * @author ruoyi
+ * @date 2023-12-11
+ */
+public interface IEhsRescueTeamService extends IService<EhsRescueTeam> {
+
+    /**
+     * 查询应急救援队伍管理
+     *
+     * @param id 应急救援队伍管理主键
+     * @return 应急救援队伍管理
+     */
+    public EhsRescueTeam selectEhsRescueTeamById(Long id);
+
+    /**
+     * 查询应急救援队伍管理列表
+     *
+     * @param ehsRescueTeam 应急救援队伍管理
+     * @return 应急救援队伍管理集合
+     */
+    public List<EhsRescueTeam> selectEhsRescueTeamList(EhsRescueTeam ehsRescueTeam);
+
+    /**
+     * 导入模板数据
+     * @param list
+     * @param updateSupport
+     * @return
+     */
+    public String importRescueTeam(List<RescueTeamImportTemplate> list, Boolean updateSupport) throws Exception;
+
+    /**
+     * 根据队伍id获取队伍信息
+     */
+    TeamResponseVo getTeamInfoByTeamId(Long rescueTeamId);
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/ehsRescueTeam/service/impl/EhsRescueTeamServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/ehsRescueTeam/service/impl/EhsRescueTeamServiceImpl.java
new file mode 100644
index 0000000..6aefcbb
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/ehsRescueTeam/service/impl/EhsRescueTeamServiceImpl.java
@@ -0,0 +1,123 @@
+package com.ruoyi.ehsRescueTeam.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.ehsRescueTeam.domain.EhsRescueTeam;
+import com.ruoyi.ehsRescueTeam.domain.RescueTeamImportTemplate;
+import com.ruoyi.ehsRescueTeam.mapper.EhsRescueTeamMapper;
+import com.ruoyi.ehsRescueTeam.service.IEhsRescueTeamService;
+import com.ruoyi.ehsRescueTeam.vo.TeamResponseVo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 应急救援队伍管理Service业务层处理
+ *
+ * @author ruoyi
+ * @date 2023-12-11
+ */
+@Service
+public class EhsRescueTeamServiceImpl extends ServiceImpl<EhsRescueTeamMapper, EhsRescueTeam> implements IEhsRescueTeamService {
+
+    @Autowired
+    private EhsRescueTeamMapper ehsRescueTeamMapper;
+
+    /**
+     * 查询应急救援队伍管理
+     *
+     * @param id 应急救援队伍管理主键
+     * @return 应急救援队伍管理
+     */
+    @Override
+    public EhsRescueTeam selectEhsRescueTeamById(Long id) {
+        return ehsRescueTeamMapper.selectEhsRescueTeamById(id);
+    }
+
+
+    /**
+     * 查询应急救援队伍管理列表
+     *
+     * @param ehsRescueTeam 应急救援队伍管理
+     * @return 应急救援队伍管理
+     */
+    @Override
+    public List<EhsRescueTeam> selectEhsRescueTeamList(EhsRescueTeam ehsRescueTeam) {
+        List<EhsRescueTeam> ehsRescueTeamList = ehsRescueTeamMapper.selectEhsRescueTeamList(ehsRescueTeam);
+        ehsRescueTeamList.stream().forEach(item->{
+            Long count = ehsRescueTeamMapper.getWorkerNumByTeamId(item.getId());
+            if (count != null){
+                item.setRescueWorkerNum(count);
+            }
+        });
+
+        return ehsRescueTeamList;
+    }
+
+    /**
+     * 根据队伍id获取队伍信息
+     */
+    @Override
+    public TeamResponseVo getTeamInfoByTeamId(Long rescueTeamId) {
+        return ehsRescueTeamMapper.getTeamInfoByTeamId(rescueTeamId);
+    }
+
+    /**
+     * 导入模板数据
+     * @param list
+     * @param updateSupport
+     * @return
+     */
+    @Override
+    public String importRescueTeam(List<RescueTeamImportTemplate> list, Boolean updateSupport) throws Exception {
+        if (StringUtils.isNull(list) || list.size() == 0) {
+            throw new Exception("导入救援队伍信息数据不能为空!");
+        }
+        int successNum = 0;
+        int failureNum = 0;
+
+        StringBuilder successMsg = new StringBuilder();
+        StringBuilder failureMsg = new StringBuilder();
+        for (RescueTeamImportTemplate rescueTeamTemplate : list) {
+
+            EhsRescueTeam temp = new EhsRescueTeam();
+            /**
+             * 因为是插入数据,所以id需要处理,如果id是String类型,那么生成个uuid插入到数据库
+             * 如果id是整数,并且自动递增,那么无需设置id
+             */
+            // temp.setId(IdUtils.fastSimpleUUID());
+            temp.setTeamName(rescueTeamTemplate.getTeamName());  //队伍名称
+            temp.setTeamLevel(rescueTeamTemplate.getTeamLevel()); //队伍级别
+            temp.setRemark(rescueTeamTemplate.getRemark()); // 备注
+            try {
+                //插入数据
+                this.save(temp);
+                successNum++;
+                successMsg.append("<br />" + successNum + "、应急救援队伍信息" + temp.getTeamName() + "导入成功");
+            } catch (Exception e) {
+                e.printStackTrace();
+                log.error(e.getLocalizedMessage());
+                failureNum++;
+                successMsg.append("<br /><font color='red'>" + failureNum + "、应急救援队伍信息" + temp.getTeamName() + "导入异常,请联系管理员!</font>");
+                continue;
+            }
+        }
+        return successMsg.toString();
+    }
+
+
+
+    private LambdaQueryWrapper<EhsRescueTeam> buildQueryWrapper(EhsRescueTeam query) {
+        Map<String, Object> params = query.getParams();
+        LambdaQueryWrapper<EhsRescueTeam> lqw = Wrappers.lambdaQuery();
+        lqw.like(StringUtils.isNotBlank(query.getTeamName()), EhsRescueTeam::getTeamName, query.getTeamName());
+        lqw.like(StringUtils.isNotBlank(query.getTeamLevel()), EhsRescueTeam::getTeamLevel, query.getTeamLevel());
+        lqw.orderByDesc(EhsRescueTeam::getCreateTime);
+        return lqw;
+    }
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/ehsRescueTeam/vo/TeamResponseVo.java b/ruoyi-system/src/main/java/com/ruoyi/ehsRescueTeam/vo/TeamResponseVo.java
new file mode 100644
index 0000000..786276b
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/ehsRescueTeam/vo/TeamResponseVo.java
@@ -0,0 +1,10 @@
+package com.ruoyi.ehsRescueTeam.vo;
+
+import lombok.Data;
+
+@Data
+public class TeamResponseVo {
+
+    private Long rescueTeamId;
+    private String rescueTeamName;
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/ehsRescueTeamWorker/domain/EhsRescueTeamWorker.java b/ruoyi-system/src/main/java/com/ruoyi/ehsRescueTeamWorker/domain/EhsRescueTeamWorker.java
new file mode 100644
index 0000000..060c334
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/ehsRescueTeamWorker/domain/EhsRescueTeamWorker.java
@@ -0,0 +1,92 @@
+package com.ruoyi.ehsRescueTeamWorker.domain;
+
+import java.util.Date;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.ToString;
+import lombok.experimental.Accessors;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 应急救援队人员信息对象 ehs_rescue_team_worker
+ *
+ * @author ruoyi
+ * @date 2023-12-11
+ */
+@Data
+@ToString
+@NoArgsConstructor
+@Accessors(chain = true)
+@TableName("ehs_rescue_team_worker")
+public class EhsRescueTeamWorker extends BaseEntity {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 应急救援队伍id
+     */
+    @Excel(name = "应急救援队伍id")
+    private Long rescueTeamId;
+
+    /**
+     * 应急救援队伍名称
+     */
+    @Excel(name = "应急救援队伍名称")
+    private String rescueTeamName;
+
+    /**
+     * 人员姓名
+     */
+    @Excel(name = "人员姓名")
+    private String workerName;
+
+    /**
+     * 性别
+     */
+    @Excel(name = "性别")
+    private Integer gender;
+
+    /**
+     * 出生年月
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "出生年月", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date birthday;
+
+    /**
+     * 身份证号
+     */
+    @Excel(name = "身份证号")
+    private String idCard;
+
+    /**
+     * 联系方式
+     */
+    @Excel(name = "联系方式")
+    private String phone;
+
+    /**
+     * 工作年限
+     */
+    @Excel(name = "工作年限")
+    private String workYear;
+
+    /**
+     * 救援技能特长
+     */
+    @Excel(name = "救援技能特长")
+    private String speciality;
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/ehsRescueTeamWorker/mapper/EhsRescueTeamWorkerMapper.java b/ruoyi-system/src/main/java/com/ruoyi/ehsRescueTeamWorker/mapper/EhsRescueTeamWorkerMapper.java
new file mode 100644
index 0000000..56032f7
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/ehsRescueTeamWorker/mapper/EhsRescueTeamWorkerMapper.java
@@ -0,0 +1,33 @@
+package com.ruoyi.ehsRescueTeamWorker.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.ehsRescueTeamWorker.domain.EhsRescueTeamWorker;
+
+import java.util.List;
+
+/**
+ * 应急救援队人员信息Mapper接口
+ *
+ * @author ruoyi
+ * @date 2023-12-11
+ */
+public interface EhsRescueTeamWorkerMapper extends BaseMapper<EhsRescueTeamWorker> {
+    /**
+     * 查询应急救援队人员信息
+     *
+     * @param id 应急救援队人员信息主键
+     * @return 应急救援队人员信息
+     */
+    public EhsRescueTeamWorker selectEhsRescueTeamWorkerById(Long id);
+
+    /**
+     * 查询应急救援队人员信息列表
+     *
+     * @param ehsRescueTeamWorker 应急救援队人员信息
+     * @return 应急救援队人员信息集合
+     */
+    public List<EhsRescueTeamWorker> selectEhsRescueTeamWorkerList(EhsRescueTeamWorker ehsRescueTeamWorker);
+
+    // 根据队伍ids删除队伍中的队员
+    boolean removeWorkerByTeamIds(List<Long> teamIds);
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/ehsRescueTeamWorker/service/IEhsRescueTeamWorkerService.java b/ruoyi-system/src/main/java/com/ruoyi/ehsRescueTeamWorker/service/IEhsRescueTeamWorkerService.java
new file mode 100644
index 0000000..06e0c15
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/ehsRescueTeamWorker/service/IEhsRescueTeamWorkerService.java
@@ -0,0 +1,34 @@
+package com.ruoyi.ehsRescueTeamWorker.service;
+
+import java.util.List;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.ehsRescueTeamWorker.domain.EhsRescueTeamWorker;
+
+/**
+ * 应急救援队人员信息Service接口
+ *
+ * @author ruoyi
+ * @date 2023-12-11
+ */
+public interface IEhsRescueTeamWorkerService extends IService<EhsRescueTeamWorker> {
+
+    /**
+     * 查询应急救援队人员信息
+     *
+     * @param id 应急救援队人员信息主键
+     * @return 应急救援队人员信息
+     */
+    public EhsRescueTeamWorker selectEhsRescueTeamWorkerById(Long id);
+
+    /**
+     * 查询应急救援队人员信息列表
+     *
+     * @param ehsRescueTeamWorker 应急救援队人员信息
+     * @return 应急救援队人员信息集合
+     */
+    public List<EhsRescueTeamWorker> selectEhsRescueTeamWorkerList(EhsRescueTeamWorker ehsRescueTeamWorker);
+
+    // 根据队伍ids删除队伍中的队员
+    boolean removeWorkerByTeamIds(List<Long> teamIds);
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/ehsRescueTeamWorker/service/impl/EhsRescueTeamWorkerServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/ehsRescueTeamWorker/service/impl/EhsRescueTeamWorkerServiceImpl.java
new file mode 100644
index 0000000..d075d4a
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/ehsRescueTeamWorker/service/impl/EhsRescueTeamWorkerServiceImpl.java
@@ -0,0 +1,74 @@
+package com.ruoyi.ehsRescueTeamWorker.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import org.springframework.stereotype.Service;
+import org.springframework.beans.factory.annotation.Autowired;
+import com.ruoyi.common.utils.StringUtils;
+
+import java.util.List;
+import java.util.Map;
+
+import com.ruoyi.ehsRescueTeamWorker.mapper.EhsRescueTeamWorkerMapper;
+import com.ruoyi.ehsRescueTeamWorker.domain.EhsRescueTeamWorker;
+import com.ruoyi.ehsRescueTeamWorker.service.IEhsRescueTeamWorkerService;
+
+/**
+ * 应急救援队人员信息Service业务层处理
+ *
+ * @author ruoyi
+ * @date 2023-12-11
+ */
+@Service
+public class EhsRescueTeamWorkerServiceImpl extends ServiceImpl<EhsRescueTeamWorkerMapper, EhsRescueTeamWorker> implements IEhsRescueTeamWorkerService {
+
+    @Autowired
+    private EhsRescueTeamWorkerMapper ehsRescueTeamWorkerMapper;
+
+    /**
+     * 查询应急救援队人员信息
+     *
+     * @param id 应急救援队人员信息主键
+     * @return 应急救援队人员信息
+     */
+    @Override
+    public EhsRescueTeamWorker selectEhsRescueTeamWorkerById(Long id) {
+        return ehsRescueTeamWorkerMapper.selectEhsRescueTeamWorkerById(id);
+    }
+
+    /**
+     * 查询应急救援队人员信息列表
+     *
+     * @param ehsRescueTeamWorker 应急救援队人员信息
+     * @return 应急救援队人员信息
+     */
+    @Override
+    public List<EhsRescueTeamWorker> selectEhsRescueTeamWorkerList(EhsRescueTeamWorker ehsRescueTeamWorker) {
+        return ehsRescueTeamWorkerMapper.selectEhsRescueTeamWorkerList(ehsRescueTeamWorker);
+    }
+
+    // 根据队伍ids删除队伍中的队员
+    @Override
+    public boolean removeWorkerByTeamIds(List<Long> teamIds) {
+        return ehsRescueTeamWorkerMapper.removeWorkerByTeamIds(teamIds);
+    }
+
+
+    private LambdaQueryWrapper<EhsRescueTeamWorker> buildQueryWrapper(EhsRescueTeamWorker query) {
+        Map<String, Object> params = query.getParams();
+        LambdaQueryWrapper<EhsRescueTeamWorker> lqw = Wrappers.lambdaQuery();
+        lqw.eq(query.getRescueTeamId() != null, EhsRescueTeamWorker::getRescueTeamId, query.getRescueTeamId());
+        lqw.like(StringUtils.isNotBlank(query.getRescueTeamName()), EhsRescueTeamWorker::getRescueTeamName, query.getRescueTeamName());
+        lqw.like(StringUtils.isNotBlank(query.getWorkerName()), EhsRescueTeamWorker::getWorkerName, query.getWorkerName());
+        lqw.eq(query.getGender() != null, EhsRescueTeamWorker::getGender, query.getGender());
+        lqw.eq(query.getBirthday() != null, EhsRescueTeamWorker::getBirthday, query.getBirthday());
+        lqw.eq(StringUtils.isNotBlank(query.getIdCard()), EhsRescueTeamWorker::getIdCard, query.getIdCard());
+        lqw.eq(StringUtils.isNotBlank(query.getPhone()), EhsRescueTeamWorker::getPhone, query.getPhone());
+        lqw.eq(StringUtils.isNotBlank(query.getWorkYear()), EhsRescueTeamWorker::getWorkYear, query.getWorkYear());
+        lqw.eq(StringUtils.isNotBlank(query.getSpeciality()), EhsRescueTeamWorker::getSpeciality, query.getSpeciality());
+        lqw.orderByDesc(EhsRescueTeamWorker::getCreateTime);
+        return lqw;
+    }
+
+}
diff --git a/ruoyi-system/src/main/resources/mapper/ehs/EhsRescueTeamMapper.xml b/ruoyi-system/src/main/resources/mapper/ehs/EhsRescueTeamMapper.xml
new file mode 100644
index 0000000..ac1570a
--- /dev/null
+++ b/ruoyi-system/src/main/resources/mapper/ehs/EhsRescueTeamMapper.xml
@@ -0,0 +1,56 @@
+<?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.ehsRescueTeam.mapper.EhsRescueTeamMapper">
+
+    <resultMap type="EhsRescueTeam" id="EhsRescueTeamResult">
+            <result property="id"    column="id"    />
+            <result property="teamName"    column="team_name"    />
+            <result property="teamLevel"    column="team_level"    />
+            <!--<result property="rescueWorkerNum"    column="rescue_worker_num"    />-->
+            <result property="createBy"    column="create_by"    />
+            <result property="createTime"    column="create_time"    />
+            <result property="updateBy"    column="update_by"    />
+            <result property="updateTime"    column="update_time"    />
+            <result property="remark"    column="remark"    />
+            <result property="deptId"    column="dept_id"    />
+            <result property="createUserId"    column="create_user_id"    />
+            <result property="updateUserId"    column="update_user_id"    />
+    </resultMap>
+
+    <sql id="selectEhsRescueTeamVo">
+        select id, team_name, team_level,  create_by, create_time, update_by, update_time, remark, dept_id, create_user_id, update_user_id from ehs_rescue_team
+    </sql>
+
+    <select id="selectEhsRescueTeamList" parameterType="EhsRescueTeam" resultMap="EhsRescueTeamResult">
+        <include refid="selectEhsRescueTeamVo"/>
+        <where>
+                        <if test="teamName != null  and teamName != ''"> and team_name like concat('%', #{teamName}, '%')</if>
+                        <if test="teamLevel != null  and teamLevel != ''"> and team_level like concat('%', #{teamLevel}, '%')</if>
+        </where>
+    </select>
+
+    <select id="selectEhsRescueTeamById" parameterType="Long" resultMap="EhsRescueTeamResult">
+            <include refid="selectEhsRescueTeamVo"/>
+            where id = #{id}
+    </select>
+    <select id="getWorkerNumByTeamId" resultType="java.lang.Long">
+        SELECT IFNULL(
+		  (SELECT COUNT(1) FROM
+			  ehs_rescue_team t,
+			  ehs_rescue_team_worker w
+		  WHERE
+			  t.id = w.rescue_team_id
+			  AND t.id = #{id}
+		  GROUP BY
+			t.id),  0)
+    </select>
+    <select id="getTeamInfoByTeamId" resultType="com.ruoyi.ehsRescueTeam.vo.TeamResponseVo">
+        SELECT id as rescueTeamId,team_name as rescueTeamName
+        FROM ehs_rescue_team
+        WHERE id = #{rescueTeamId}
+    </select>
+
+
+</mapper>
\ No newline at end of file
diff --git a/ruoyi-system/src/main/resources/mapper/ehs/EhsRescueTeamWorkerMapper.xml b/ruoyi-system/src/main/resources/mapper/ehs/EhsRescueTeamWorkerMapper.xml
new file mode 100644
index 0000000..2e3d9ac
--- /dev/null
+++ b/ruoyi-system/src/main/resources/mapper/ehs/EhsRescueTeamWorkerMapper.xml
@@ -0,0 +1,62 @@
+<?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.ehsRescueTeamWorker.mapper.EhsRescueTeamWorkerMapper">
+
+    <resultMap type="EhsRescueTeamWorker" id="EhsRescueTeamWorkerResult">
+            <result property="id"    column="id"    />
+            <result property="rescueTeamId"    column="rescue_team_id"    />
+            <result property="rescueTeamName"    column="rescue_team_name"    />
+            <result property="workerName"    column="worker_name"    />
+            <result property="gender"    column="gender"    />
+            <result property="birthday"    column="birthday"    />
+            <result property="idCard"    column="id_card"    />
+            <result property="phone"    column="phone"    />
+            <result property="workYear"    column="work_year"    />
+            <result property="speciality"    column="speciality"    />
+            <result property="createBy"    column="create_by"    />
+            <result property="createTime"    column="create_time"    />
+            <result property="updateBy"    column="update_by"    />
+            <result property="updateTime"    column="update_time"    />
+            <result property="remark"    column="remark"    />
+            <result property="deptId"    column="dept_id"    />
+            <result property="createUserId"    column="create_user_id"    />
+            <result property="updateUserId"    column="update_user_id"    />
+    </resultMap>
+
+    <sql id="selectEhsRescueTeamWorkerVo">
+        select id, rescue_team_id, rescue_team_name, worker_name, gender, birthday, id_card, phone, work_year, speciality, create_by, create_time, update_by, update_time, remark, dept_id, create_user_id, update_user_id from ehs_rescue_team_worker
+    </sql>
+
+    <select id="selectEhsRescueTeamWorkerList" parameterType="EhsRescueTeamWorker" resultMap="EhsRescueTeamWorkerResult">
+        <include refid="selectEhsRescueTeamWorkerVo"/>
+        <where>
+                        <if test="rescueTeamId != null "> and rescue_team_id = #{rescueTeamId}</if>
+                        <if test="rescueTeamName != null  and rescueTeamName != ''"> and rescue_team_name like concat('%', #{rescueTeamName}, '%')</if>
+                        <if test="workerName != null  and workerName != ''"> and worker_name like concat('%', #{workerName}, '%')</if>
+                        <if test="gender != null "> and gender = #{gender}</if>
+                        <if test="birthday != null "> and birthday = #{birthday}</if>
+                        <if test="idCard != null  and idCard != ''"> and id_card = #{idCard}</if>
+                        <if test="phone != null  and phone != ''"> and phone = #{phone}</if>
+                        <if test="workYear != null  and workYear != ''"> and work_year = #{workYear}</if>
+                        <if test="speciality != null  and speciality != ''"> and speciality = #{speciality}</if>
+        </where>
+    </select>
+
+    <select id="selectEhsRescueTeamWorkerById" parameterType="Long" resultMap="EhsRescueTeamWorkerResult">
+            <include refid="selectEhsRescueTeamWorkerVo"/>
+            where id = #{id}
+    </select>
+
+    <delete id="removeWorkerByTeamIds">
+        delete from ehs_rescue_team_worker
+        where rescue_team_id in
+        <foreach collection="list" separator="," open="(" close=")" item="items">
+            #{items}
+        </foreach>
+    </delete>
+
+
+
+</mapper>
\ No newline at end of file
diff --git a/ruoyi-ui/src/api/ehs/ehsRescueTeam.js b/ruoyi-ui/src/api/ehs/ehsRescueTeam.js
new file mode 100644
index 0000000..26672c7
--- /dev/null
+++ b/ruoyi-ui/src/api/ehs/ehsRescueTeam.js
@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询应急救援队伍管理列表
+export function listEhsRescueTeam(query) {
+  return request({
+    url: '/ehs/ehsRescueTeam/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询应急救援队伍管理详细
+export function getEhsRescueTeam(id) {
+  return request({
+    url: '/ehs/ehsRescueTeam/' + id,
+    method: 'get'
+  })
+}
+
+// 新增应急救援队伍管理
+export function addEhsRescueTeam(data) {
+  return request({
+    url: '/ehs/ehsRescueTeam',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改应急救援队伍管理
+export function updateEhsRescueTeam(data) {
+  return request({
+    url: '/ehs/ehsRescueTeam',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除应急救援队伍管理
+export function delEhsRescueTeam(id) {
+  return request({
+    url: '/ehs/ehsRescueTeam/' + id,
+    method: 'delete'
+  })
+}
diff --git a/ruoyi-ui/src/api/ehs/ehsRescueTeamWorker.js b/ruoyi-ui/src/api/ehs/ehsRescueTeamWorker.js
new file mode 100644
index 0000000..27bf848
--- /dev/null
+++ b/ruoyi-ui/src/api/ehs/ehsRescueTeamWorker.js
@@ -0,0 +1,52 @@
+import request from '@/utils/request'
+
+// 查询应急救援队人员信息列表
+export function listEhsRescueTeamWorker(query) {
+  return request({
+    url: '/ehs/ehsRescueTeamWorker/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询应急救援队人员信息详细
+export function getEhsRescueTeamWorker(id) {
+  return request({
+    url: '/ehs/ehsRescueTeamWorker/' + id,
+    method: 'get'
+  })
+}
+
+// 新增会话框查询队伍信息
+export function getTeamInfo(rescueTeamId) {
+  return request({
+      url: '/ehs/ehsRescueTeamWorker/getTeamInfo/' + rescueTeamId,
+    method: 'get'
+  })
+}
+
+// 新增应急救援队人员信息
+export function addEhsRescueTeamWorker(data) {
+  return request({
+    url: '/ehs/ehsRescueTeamWorker',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改应急救援队人员信息
+export function updateEhsRescueTeamWorker(data) {
+  return request({
+    url: '/ehs/ehsRescueTeamWorker',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除应急救援队人员信息
+export function delEhsRescueTeamWorker(id) {
+  return request({
+    url: '/ehs/ehsRescueTeamWorker/' + id,
+    method: 'delete'
+  })
+}
diff --git a/ruoyi-ui/src/components/upload/upload.vue b/ruoyi-ui/src/components/upload/upload.vue
new file mode 100644
index 0000000..ca4f297
--- /dev/null
+++ b/ruoyi-ui/src/components/upload/upload.vue
@@ -0,0 +1,107 @@
+<template>
+  <el-dialog
+    :title="upload.title"
+    :visible.sync="upload.open"
+    width="400px"
+    append-to-body
+  >
+    <el-upload
+      ref="upload"
+      :limit="3"
+      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 text-center" slot="tip">
+        <div class="el-upload__tip" slot="tip">
+          <el-checkbox v-model="upload.updateSupport" />
+          是否更新已经存在的用户数据
+        </div>
+        <span>仅允许导入xls、xlsx格式文件。</span>
+        <el-link
+          type="primary"
+          :underline="false"
+          style="font-size: 12px; vertical-align: baseline"
+          @click="importTemplate"
+          >下载模板</el-link
+        >
+      </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>
+</template>
+
+  <script>
+import { getToken } from "@/utils/auth";
+export default {
+  data() {
+    return {
+      // 用户导入参数
+      upload: {
+        // 是否显示弹出层(用户导入)
+        open: false,
+        // 弹出层标题(用户导入)
+        title: "",
+        // 是否禁用上传
+        isUploading: false,
+        // 是否更新已经存在的用户数据
+        updateSupport: false,
+        // 设置上传的请求头部
+        headers: { Authorization: "Bearer " + getToken() },
+        // 上传的地址
+        url: process.env.VUE_APP_BASE_API + "/system/user/importData",
+      },
+    };
+  },
+  props: {
+    downUrl: {
+      type: String,
+    },
+    temName: {
+      type: String,
+    },
+  },
+  created() {},
+  methods: {
+    /** 下载模板操作 */
+    importTemplate() {
+      this.download(this.downUrl, {}, `${this.temName}.xls`);
+    },
+    // 文件上传中处理
+    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(
+        "<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" +
+          response.msg +
+          "</div>",
+        "导入结果",
+        { dangerouslyUseHTMLString: true }
+      );
+      //   this.getList();
+      this.$emit("ok");
+    },
+    // 提交上传文件
+    submitFileForm() {
+      this.$refs.upload.submit();
+    },
+  },
+};
+</script>
+
+  <style></style>
diff --git a/ruoyi-ui/src/views/ehs/ehsDocument/index.vue b/ruoyi-ui/src/views/ehs/ehsDocument/index.vue
index 54f36e2..7793a7e 100644
--- a/ruoyi-ui/src/views/ehs/ehsDocument/index.vue
+++ b/ruoyi-ui/src/views/ehs/ehsDocument/index.vue
@@ -215,15 +215,6 @@
           </template>
         </el-table-column>
 
-<!--        <el-table-column label="流转状态" align="center" prop="docTransferStatus">
-&lt;!&ndash;          <template slot-scope="scope">
-            <dict-tag :options="dict.type.doc_status" :value="scope.row.docTransferStatus"/>
-          </template>&ndash;&gt;
-&lt;!&ndash;          <el-select v-model="docTransferStatus" placeholder="请选择流转状态" clearable>
-            <el-option label="未处理" value="0"> </el-option>
-            <el-option label="已处理" value="1"> </el-option>
-          </el-select>&ndash;&gt;
-        </el-table-column>-->
         <el-table-column label="流转状态" align="center" prop="docTransferStatus">
           <template slot-scope="scope">
             <span v-if="scope.row.docTransferStatus == '0'">借出</span>
@@ -238,27 +229,26 @@
     <!--公文借出会话框-->
     <el-dialog :title="title2" :visible.sync="open2" width="600px" append-to-body>
 
-      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+      <el-form :disabled="true" ref="form" :model="form" :rules="rules" label-width="80px">
         <el-form-item label="公文名称" prop="documentName">
           <el-input v-model="form.documentName" placeholder="请输入公文名称"/>
         </el-form-item>
-        <el-form-item label="流转人" prop="transferName">
-          <el-input v-model="form.transferName" placeholder="请输入流转人"/>
-        </el-form-item>
-        <!--<el-form-item label="拟稿部门" prop="draftDept">
-          <el-input v-model="form.draftDept" placeholder="请输入拟稿部门" />
-        </el-form-item>-->
 
-        <el-form-item label="流转时间" prop="transferTime">
-          <el-date-picker clearable
-                          v-model="form.transferTime"
-                          type="date"
-                          value-format="yyyy-MM-dd HH:mm:ss"
-                          placeholder="请选择流转时间"
-          >
-          </el-date-picker>
-        </el-form-item>
+        <el-form label-width="80px" :model="form">
+          <el-form-item label="流转人" prop="transferName">
+            <el-input v-model="form.transferName" placeholder="请输入流转人"/>
+         </el-form-item>
 
+          <el-form-item label="流转时间" prop="transferTime">
+            <el-date-picker clearable
+                            v-model="form.transferTime"
+                            type="datetime"
+                            value-format="yyyy-MM-dd HH:mm:ss"
+                            placeholder="请选择流转时间"
+            >
+            </el-date-picker>
+          </el-form-item>
+        </el-form>
       </el-form>
 
       <div slot="footer" class="dialog-footer">
@@ -432,11 +422,6 @@ export default {
         this.$modal.msgSuccess('归还成功')
         this.getList()
       })
-      /* lendEhsDoc(this.form).then(response => {
-        this.$modal.msgSuccess('借出成功')
-        this.open2 = false
-        this.getList()
-      }) */
     },
     /** 流转记录按钮操作 */
     transferRecord(row) {
diff --git a/ruoyi-ui/src/views/ehs/ehsRescueTeam/index.vue b/ruoyi-ui/src/views/ehs/ehsRescueTeam/index.vue
new file mode 100644
index 0000000..d00943e
--- /dev/null
+++ b/ruoyi-ui/src/views/ehs/ehsRescueTeam/index.vue
@@ -0,0 +1,373 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="队伍名称" prop="teamName">
+        <el-input
+          v-model="queryParams.teamName"
+          placeholder="请输入队伍名称"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="队伍级别" prop="teamLevel">
+        <el-input
+          v-model="queryParams.teamLevel"
+          placeholder="请输入队伍级别"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['ehs:ehsRescueTeam:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['ehs:ehsRescueTeam:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['ehs:ehsRescueTeam:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['ehs:ehsRescueTeam:export']"
+        >导出</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="info"
+          plain
+          icon="el-icon-upload2"
+          size="mini"
+          @click="handleImport"
+        >批量导入</el-button
+        >
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="ehsRescueTeamList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+<!--      <el-table-column label="主键" align="center" prop="id" />-->
+      <el-table-column label="序号" align="center">
+        <template slot-scope="scope">
+          <span>{{ Number(scope.$index) + 1 }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="队伍名称" align="center" prop="teamName" />
+      <el-table-column label="队伍级别" align="center" prop="teamLevel" />
+      <el-table-column label="救援人员数量" align="center" prop="rescueWorkerNum" />
+      <el-table-column label="备注" align="center" prop="remark" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+<!--          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="getWorker(scope.row)"
+          >人员信息</el-button>-->
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="getWorker(scope.row)"
+          >人员信息</el-button>
+<!--          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['ehs:ehsRescueTeam:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['ehs:ehsRescueTeam: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"
+    />
+
+    <!-- 添加或修改应急救援队伍管理对话框 -->
+    <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="teamName">
+          <el-input v-model="form.teamName" placeholder="请输入队伍名称" />
+        </el-form-item>
+        <el-form-item label="队伍级别" prop="teamLevel">
+          <el-input v-model="form.teamLevel" placeholder="请输入队伍级别" />
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" 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-drawer
+      title="人员信息管理"
+      :visible.sync="drawer1"
+      size="70%"
+      v-if="drawer1"
+    >
+      <tdh :id="id"></tdh>
+    </el-drawer>
+
+    <!-- 导入 -->
+    <importUpload
+      ref="uploadRef"
+      @ok="upLoadOk"
+      downUrl="/ehs/ehsRescueTeam/importTemplate"
+      temName="应急救援队伍导入模板"
+    ></importUpload>
+  </div>
+</template>
+
+<script>
+import { listEhsRescueTeam, getEhsRescueTeam, delEhsRescueTeam, addEhsRescueTeam, updateEhsRescueTeam } from "@/api/ehs/ehsRescueTeam";
+import { listEhsRescueTeamWorker, getEhsRescueTeamWorker, delEhsRescueTeamWorker, addEhsRescueTeamWorker, updateEhsRescueTeamWorker } from "@/api/ehs/ehsRescueTeamWorker";
+import importUpload from "@/components/upload/upload";
+import tdh from "../ehsRescueTeamWorker/index.vue"
+export default {
+  name: "EhsRescueTeam",
+  components: {
+    importUpload,
+    tdh,
+  },
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 应急救援队伍管理表格数据
+      ehsRescueTeamList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 队伍id
+      //rescueTeamId: "",
+      // 队伍名称
+      //rescueTeamName: "",
+      id: "",
+      drawer1: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        teamName: null,
+        teamLevel: null,
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询应急救援队伍管理列表 */
+    getList() {
+      this.loading = true;
+      listEhsRescueTeam(this.queryParams).then(response => {
+        this.ehsRescueTeamList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        teamName: null,
+        teamLevel: null,
+        rescueWorkerNum: null,
+        createBy: null,
+        createTime: null,
+        updateBy: null,
+        updateTime: null,
+        remark: null,
+        deptId: null,
+        createUserId: null,
+        updateUserId: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加应急救援队伍管理";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getEhsRescueTeam(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改应急救援队伍管理";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateEhsRescueTeam(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addEhsRescueTeam(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('是否确认删除应急救援队伍管理编号为"' + ids + '"的数据项?').then(function() {
+        return delEhsRescueTeam(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('ehs/ehsRescueTeam/export', {
+        ...this.queryParams
+      }, `ehsRescueTeam_${new Date().getTime()}.xlsx`)
+    },
+    /** 批量导入 */
+    handleImport() {
+      console.log(this.$refs.uploadRef.upload);
+      this.$refs.uploadRef.upload.open = true;
+      this.$refs.uploadRef.upload.title = "应急救援队伍导入";
+      this.$refs.uploadRef.upload.url =
+        process.env.VUE_APP_BASE_API + "/ehs/ehsRescueTeam/importData";
+    },
+    /** 导入成功 */
+    upLoadOk() {
+      // console.log("导入成功")
+      this.getList();
+    },
+    /** 人员信息 */
+    getWorker(row) {
+      console.log(row);
+      this.id = row.id;
+      console.log(this.id);
+      //this.rescueTeamId = row.id;
+      //this.rescueTeamName = row.teamName;
+      this.drawer1 = true;
+      // this.$router.push({
+      //   path: "/smModel/tdh",
+      //   query: {
+      //     id: row.id,
+      //   },
+      // });
+    },
+    /* getWorker(row) {
+      const id = Math.ceil(Math.random()*1000)  ;
+      const rescueTeamId = row.id;
+      const rescueTeamName = row.teamName;
+      console.log(rescueTeamId)
+      console.log(rescueTeamName)
+      //this.$router.push({path:'/ehs/ehsRescueTeamWorker/index/' + id,query:{rescueTeamId:rescueTeamId,rescueTeamName:rescueTeamName}})
+      //this.$router.push({path:'/ehs/ehsRescueTeamWorker/index'})
+      //this.$router.push({path:'/ehsTeam/ehsRescueTeamWorker/index'})
+      //this.$router.push({path:'/ehs/ehsRescueTeamWorker/index'})
+      this.$router.push({path:'/ehs/ehsRescueTeamWorker/index/' + id,query:{rescueTeamId:rescueTeamId,rescueTeamName:rescueTeamName}})
+    }, */
+
+
+
+  }
+};
+</script>
diff --git a/ruoyi-ui/src/views/ehs/ehsRescueTeamWorker/index.vue b/ruoyi-ui/src/views/ehs/ehsRescueTeamWorker/index.vue
new file mode 100644
index 0000000..d09ff42
--- /dev/null
+++ b/ruoyi-ui/src/views/ehs/ehsRescueTeamWorker/index.vue
@@ -0,0 +1,461 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+<!--      <el-form-item label="应急救援队伍id" prop="rescueTeamId">
+        <el-input
+          v-model="queryParams.rescueTeamId"
+          placeholder="请输入应急救援队伍id"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>-->
+      <el-form-item label="应急救援队伍名称" prop="rescueTeamName">
+        <el-input
+          v-model="queryParams.rescueTeamName"
+          placeholder="请输入应急救援队伍名称"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="人员姓名" prop="workerName">
+        <el-input
+          v-model="queryParams.workerName"
+          placeholder="请输入人员姓名"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="性别" prop="gender">
+        <el-select v-model="queryParams.gender" placeholder="请选择性别" clearable>
+          <el-option
+            v-for="dict in dict.type.sys_user_sex"
+            :key="dict.value"
+            :label="dict.label"
+            :value="dict.value"
+          />
+        </el-select>
+      </el-form-item>
+<!--      <el-form-item label="出生年月" prop="birthday">
+        <el-date-picker clearable
+          v-model="queryParams.birthday"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="请选择出生年月">
+        </el-date-picker>
+      </el-form-item>-->
+<!--      <el-form-item label="身份证号" prop="idCard">
+        <el-input
+          v-model="queryParams.idCard"
+          placeholder="请输入身份证号"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>-->
+      <el-form-item label="联系方式" prop="phone">
+        <el-input
+          v-model="queryParams.phone"
+          placeholder="请输入联系方式"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+<!--      <el-form-item label="工作年限" prop="workYear">
+        <el-input
+          v-model="queryParams.workYear"
+          placeholder="请输入工作年限"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>-->
+<!--      <el-form-item label="救援技能特长" prop="speciality">
+        <el-input
+          v-model="queryParams.speciality"
+          placeholder="请输入救援技能特长"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>-->
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <!--v-hasPermi="['ehs:ehsRescueTeamWorker:add']"-->
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <!--v-hasPermi="['ehs:ehsRescueTeamWorker:edit']"-->
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <!--v-hasPermi="['ehs:ehsRescueTeamWorker:remove']"-->
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <!--v-hasPermi="['ehs:ehsRescueTeamWorker:export']"-->
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+
+        >导出</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="info"
+          plain
+          icon="el-icon-upload2"
+          size="mini"
+          @click="handleImport"
+        >批量导入</el-button
+        >
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="ehsRescueTeamWorkerList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+<!--      <el-table-column label="主键" align="center" prop="id" />-->
+      <el-table-column label="序号" align="center">
+        <template slot-scope="scope">
+          <span>{{ Number(scope.$index) + 1 }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="应急救援队伍id" align="center" prop="rescueTeamId" />
+      <el-table-column label="应急救援队伍名称" align="center" prop="rescueTeamName" />
+      <el-table-column label="人员姓名" align="center" prop="workerName" />
+      <el-table-column label="性别" align="center" prop="gender">
+        <template slot-scope="scope">
+          <dict-tag :options="dict.type.sys_user_sex" :value="scope.row.gender"/>
+        </template>
+      </el-table-column>
+      <el-table-column label="出生年月" align="center" prop="birthday" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.birthday, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="身份证号" align="center" prop="idCard" />
+      <el-table-column label="联系方式" align="center" prop="phone" />
+      <el-table-column label="工作年限" align="center" prop="workYear" />
+      <el-table-column label="救援技能特长" align="center" prop="speciality" />
+      <el-table-column label="备注" align="center" prop="remark" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <!--v-hasPermi="['ehs:ehsRescueTeamWorker:edit']"-->
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+
+          >修改</el-button>
+          <!--v-hasPermi="['ehs:ehsRescueTeamWorker:remove']"-->
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改应急救援队人员信息对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px" :disabled="true">
+        <el-form-item label="应急救援队伍id" prop="rescueTeamId">
+          <el-input v-model="form.rescueTeamId" placeholder="请输入应急救援队伍id" />
+        </el-form-item>
+        <el-form-item label="应急救援队伍名称" prop="rescueTeamName">
+          <el-input v-model="form.rescueTeamName" placeholder="请输入应急救援队伍名称" />
+        </el-form-item>
+        <el-form label-width="80px" :model="form">
+          <el-form-item label="人员姓名" prop="workerName">
+            <el-input v-model="form.workerName" placeholder="请输入人员姓名" />
+          </el-form-item>
+          <el-form-item label="性别" prop="gender">
+            <el-select v-model="form.gender" placeholder="请选择性别">
+              <el-option
+                v-for="dict in dict.type.sys_user_sex"
+                :key="dict.value"
+                :label="dict.label"
+                :value="parseInt(dict.value)"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="出生年月" prop="birthday">
+            <el-date-picker clearable
+              v-model="form.birthday"
+              type="date"
+              value-format="yyyy-MM-dd"
+              placeholder="请选择出生年月">
+            </el-date-picker>
+          </el-form-item>
+          <el-form-item label="身份证号" prop="idCard">
+            <el-input v-model="form.idCard" placeholder="请输入身份证号" />
+          </el-form-item>
+          <el-form-item label="联系方式" prop="phone">
+            <el-input v-model="form.phone" placeholder="请输入联系方式" />
+          </el-form-item>
+          <el-form-item label="工作年限" prop="workYear">
+            <el-input v-model="form.workYear" placeholder="请输入工作年限" />
+          </el-form-item>
+          <el-form-item label="救援技能特长" prop="speciality">
+            <el-input v-model="form.speciality" placeholder="请输入救援技能特长" />
+          </el-form-item>
+          <el-form-item label="备注" prop="remark">
+            <el-input v-model="form.remark" placeholder="请输入备注" />
+          </el-form-item>
+        </el-form>
+      </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>
+
+    <!-- 导入 -->
+    <importUpload
+      ref="uploadRef"
+      @ok="upLoadOk"
+      downUrl="/ehs/ehsRescueTeamWorker/importTemplate"
+      temName="应急救援队伍人员导入模板"
+    ></importUpload>
+  </div>
+</template>
+
+<script>
+import {
+  listEhsRescueTeamWorker,
+  getEhsRescueTeamWorker,
+  delEhsRescueTeamWorker,
+  addEhsRescueTeamWorker,
+  updateEhsRescueTeamWorker,
+  getTeamInfo
+} from '@/api/ehs/ehsRescueTeamWorker'
+import importUpload from "@/components/upload/upload";
+
+export default {
+  name: "EhsRescueTeamWorker",
+  components: {
+    importUpload,
+  },
+  dicts: ['sys_user_sex'],
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 应急救援队人员信息表格数据
+      ehsRescueTeamWorkerList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        rescueTeamId: null,
+        rescueTeamName: null,
+        workerName: null,
+        gender: null,
+        birthday: null,
+        idCard: null,
+        phone: null,
+        workYear: null,
+        speciality: null,
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+      }
+    };
+  },
+  props: {
+    // rescueTeamId
+    id: {
+      type: Number
+    }
+  },
+  created() {
+    this.queryParams.rescueTeamId =this.id;
+    this.form.rescueTeamId = this.id;
+    this.getList();
+  },
+  methods: {
+    /** 查询应急救援队人员信息列表 */
+    getList() {
+      this.loading = true;
+      listEhsRescueTeamWorker(this.queryParams).then(response => {
+        this.ehsRescueTeamWorkerList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        rescueTeamId: null,
+        rescueTeamName: null,
+        workerName: null,
+        gender: null,
+        birthday: null,
+        idCard: null,
+        phone: null,
+        workYear: null,
+        speciality: null,
+        createBy: null,
+        createTime: null,
+        updateBy: null,
+        updateTime: null,
+        remark: null,
+        deptId: null,
+        createUserId: null,
+        updateUserId: 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 = "添加应急救援队人员信息";
+      const rescueTeamId = this.id;
+      getTeamInfo(rescueTeamId).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "新增应急救援队人员信息";
+      });
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getEhsRescueTeamWorker(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改应急救援队人员信息";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateEhsRescueTeamWorker(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addEhsRescueTeamWorker(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('是否确认删除应急救援队人员信息编号为"' + ids + '"的数据项?').then(function() {
+        return delEhsRescueTeamWorker(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('ehs/ehsRescueTeamWorker/export', {
+        ...this.queryParams
+      }, `ehsRescueTeamWorker_${new Date().getTime()}.xlsx`)
+    },
+    /** 批量导入 */
+    handleImport() {
+      console.log(this.$refs.uploadRef.upload);
+      this.$refs.uploadRef.upload.open = true;
+      this.$refs.uploadRef.upload.title = "应急救援队伍人员导入";
+      this.$refs.uploadRef.upload.url =
+        process.env.VUE_APP_BASE_API + "/ehs/ehsRescueTeamWorker/importData";
+    },
+    /** 导入成功 */
+    upLoadOk() {
+      // console.log("导入成功")
+      this.getList();
+    },
+  }
+};
+</script>