diff --git a/danger-manage-admin/src/main/java/com/zehong/web/controller/resources/TEmergencyDrillController.java b/danger-manage-admin/src/main/java/com/zehong/web/controller/resources/TEmergencyDrillController.java
index e50da4253b551b432637d5c82ea29a98b9eb4eb5..e250bae5cad386ec615314ccc361a930c620943b 100644
--- a/danger-manage-admin/src/main/java/com/zehong/web/controller/resources/TEmergencyDrillController.java
+++ b/danger-manage-admin/src/main/java/com/zehong/web/controller/resources/TEmergencyDrillController.java
@@ -1,6 +1,8 @@
 package com.zehong.web.controller.resources;
 
 import java.util.List;
+
+import com.zehong.system.domain.DrillStatistics;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -22,7 +24,7 @@ import com.zehong.common.core.page.TableDataInfo;
 
 /**
  * 应急演练Controller
- * 
+ *
  * @author zehong
  * @date 2022-06-29
  */
@@ -100,4 +102,16 @@ public class TEmergencyDrillController extends BaseController
     {
         return toAjax(tEmergencyDrillService.deleteTEmergencyDrillByIds(drillIds));
     }
+
+
+    /**
+     * 应急演练统计查询
+     * */
+    @GetMapping("/countList")
+    public TableDataInfo countList(DrillStatistics drillStatistics)
+    {
+        startPage();
+        List<DrillStatistics> list = tEmergencyDrillService.countList(drillStatistics);
+        return getDataTable(list);
+    }
 }
diff --git a/danger-manage-admin/src/main/java/com/zehong/web/controller/safetyManagement/TStaffController.java b/danger-manage-admin/src/main/java/com/zehong/web/controller/safetyManagement/TStaffController.java
index 4716713905a78bc32d13d29fee5d84b6a4e8709c..cf2632286ae5ddb471b66e9025adae62912c1bfd 100644
--- a/danger-manage-admin/src/main/java/com/zehong/web/controller/safetyManagement/TStaffController.java
+++ b/danger-manage-admin/src/main/java/com/zehong/web/controller/safetyManagement/TStaffController.java
@@ -66,6 +66,18 @@ public class TStaffController extends BaseController
         return getDataTable(list);
     }
 
+    /**
+     * 无分页查询
+     * @param tStaff
+     * @return
+     */
+    @GetMapping("/TStaffList")
+    public TableDataInfo TStaffList(TStaffForm tStaff)
+    {
+        List<TStaffVo> list = tStaffService.selectTStaffList(tStaff);
+        return getDataTable(list);
+    }
+
     /**
      * 导出员工信息管理列表
      */
diff --git a/danger-manage-admin/src/main/java/com/zehong/web/controller/system/TBankSubjectController.java b/danger-manage-admin/src/main/java/com/zehong/web/controller/system/TBankSubjectController.java
new file mode 100644
index 0000000000000000000000000000000000000000..fefde4533564eba982ba6f5beb1e1dc0bdd25a8a
--- /dev/null
+++ b/danger-manage-admin/src/main/java/com/zehong/web/controller/system/TBankSubjectController.java
@@ -0,0 +1,103 @@
+package com.zehong.web.controller.system;
+
+import java.util.List;
+
+import com.zehong.system.domain.TBankSubject;
+import com.zehong.system.service.ITBankSubjectService;
+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.zehong.common.annotation.Log;
+import com.zehong.common.core.controller.BaseController;
+import com.zehong.common.core.domain.AjaxResult;
+import com.zehong.common.enums.BusinessType;
+import com.zehong.common.utils.poi.ExcelUtil;
+import com.zehong.common.core.page.TableDataInfo;
+
+/**
+ * 题库题目Controller
+ *
+ * @author zehong
+ * @date 2022-12-15
+ */
+@RestController
+@RequestMapping("/system/subject")
+public class TBankSubjectController extends BaseController
+{
+    @Autowired
+    private ITBankSubjectService tBankSubjectService;
+
+    /**
+     * 查询题库题目列表
+     */
+    //@PreAuthorize("@ss.hasPermi('system:subject:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TBankSubject tBankSubject)
+    {
+        startPage();
+        List<TBankSubject> list = tBankSubjectService.selectTBankSubjectList(tBankSubject);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出题库题目列表
+     */
+    //@PreAuthorize("@ss.hasPermi('system:subject:export')")
+    @Log(title = "题库题目", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult export(TBankSubject tBankSubject)
+    {
+        List<TBankSubject> list = tBankSubjectService.selectTBankSubjectList(tBankSubject);
+        ExcelUtil<TBankSubject> util = new ExcelUtil<TBankSubject>(TBankSubject.class);
+        return util.exportExcel(list, "题库题目数据");
+    }
+
+    /**
+     * 获取题库题目详细信息
+     */
+    //@PreAuthorize("@ss.hasPermi('system:subject:query')")
+    @GetMapping(value = "/{subjectId}")
+    public AjaxResult getInfo(@PathVariable("subjectId") Long subjectId)
+    {
+        return AjaxResult.success(tBankSubjectService.selectTBankSubjectById(subjectId));
+    }
+
+    /**
+     * 新增题库题目
+     */
+    //@PreAuthorize("@ss.hasPermi('system:subject:add')")
+    @Log(title = "题库题目", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TBankSubject tBankSubject)
+    {
+        return toAjax(tBankSubjectService.insertTBankSubject(tBankSubject));
+    }
+
+    /**
+     * 修改题库题目
+     */
+    //@PreAuthorize("@ss.hasPermi('system:subject:edit')")
+    @Log(title = "题库题目", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TBankSubject tBankSubject)
+    {
+        return toAjax(tBankSubjectService.updateTBankSubject(tBankSubject));
+    }
+
+    /**
+     * 删除题库题目
+     */
+    //@PreAuthorize("@ss.hasPermi('system:subject:remove')")
+    @Log(title = "题库题目", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{subjectIds}")
+    public AjaxResult remove(@PathVariable Long[] subjectIds)
+    {
+        return toAjax(tBankSubjectService.deleteTBankSubjectByIds(subjectIds));
+    }
+}
diff --git a/danger-manage-admin/src/main/java/com/zehong/web/controller/system/TTrainCourseBankController.java b/danger-manage-admin/src/main/java/com/zehong/web/controller/system/TTrainCourseBankController.java
index 7210237ec00cf3330d4f1328b7ab1d14aaaa5dce..063c504f2821ad619f0120f8e913ff452b9f4201 100644
--- a/danger-manage-admin/src/main/java/com/zehong/web/controller/system/TTrainCourseBankController.java
+++ b/danger-manage-admin/src/main/java/com/zehong/web/controller/system/TTrainCourseBankController.java
@@ -74,9 +74,10 @@ public class TTrainCourseBankController extends BaseController
     //@PreAuthorize("@ss.hasPermi('system:bank:add')")
     @Log(title = "bank", businessType = BusinessType.INSERT)
     @PostMapping
-    public AjaxResult add(@RequestBody TTrainCourseBank tTrainCourseBank)
+    public int add(@RequestBody TTrainCourseBank tTrainCourseBank)
     {
-        return toAjax(tTrainCourseBankService.insertTTrainCourseBank(tTrainCourseBank));
+        tTrainCourseBankService.insertTTrainCourseBank(tTrainCourseBank);
+        return Math.toIntExact(tTrainCourseBank.getBankId());
     }
 
     /**
diff --git a/danger-manage-admin/src/main/resources/application-dev.yml b/danger-manage-admin/src/main/resources/application-dev.yml
index e89714914aecde48b527b316b1584f2f57215e4e..53b3618cd39dfa78f9ebff24c1da6c2d6528aacb 100644
--- a/danger-manage-admin/src/main/resources/application-dev.yml
+++ b/danger-manage-admin/src/main/resources/application-dev.yml
@@ -28,9 +28,9 @@ spring:
             slave:
                 # 从数据源开关/默认关闭
                 enabled: false
-                url: 
-                username: 
-                password: 
+                url:
+                username:
+                password:
             # 初始连接数
             initialSize: 5
             # 最小连接池数量
@@ -50,7 +50,7 @@ spring:
             testWhileIdle: true
             testOnBorrow: false
             testOnReturn: false
-            webStatFilter: 
+            webStatFilter:
                 enabled: true
             statViewServlet:
                 enabled: true
@@ -73,13 +73,13 @@ spring:
     # redis 配置
     redis:
       # 地址
-      host: 127.0.0.1
+      host: 36.138.181.113
       # 端口,默认为6379
-      port: 6378
+      port: 6379
       # 数据库索引
       database: 1
       # 密码
-      password: Redis@2021
+      password: 1qaz2wsx3edc
       # 连接超时时间
       timeout: 10s
       lettuce:
@@ -120,4 +120,4 @@ config:
      sdk-key: C8MFKCRxMAsBSDG5W5cL1x1YirGREoojZvFtBzKv3bAP
      detect-face-max-num: 10
      detect-face-scale-val: 32
-     thread-pool-size: 5
\ No newline at end of file
+     thread-pool-size: 5
diff --git a/danger-manage-admin/src/main/resources/application-prd.yml b/danger-manage-admin/src/main/resources/application-prd.yml
index 9b1bbbc203c0ab417ba48b572823a8e07d55a020..94348f6c7355bd37dabce8d112d83a849a00a48d 100644
--- a/danger-manage-admin/src/main/resources/application-prd.yml
+++ b/danger-manage-admin/src/main/resources/application-prd.yml
@@ -21,16 +21,16 @@ spring:
         druid:
             # 主库数据源
             master:
-                url: jdbc:mysql://localhost:33060/danger_manage_area_a?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+                url: jdbc:mysql://localhost:3306/ry?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
                 username: root
-                password: zehong_/sjz!D
+                password: root
             # 从库数据源
             slave:
                 # 从数据源开关/默认关闭
                 enabled: false
-                url: 
-                username: 
-                password: 
+                url:
+                username:
+                password:
             # 初始连接数
             initialSize: 5
             # 最小连接池数量
@@ -50,7 +50,7 @@ spring:
             testWhileIdle: true
             testOnBorrow: false
             testOnReturn: false
-            webStatFilter: 
+            webStatFilter:
                 enabled: true
             statViewServlet:
                 enabled: true
@@ -73,13 +73,13 @@ spring:
     # redis 配置
     redis:
       # 地址
-      host: 127.0.0.1
+      host: localhost
       # 端口,默认为6379
-      port: 6378
+      port: 6379
       # 数据库索引
       database: 0
       # 密码
-      password: Redis@2021
+      password:
       # 连接超时时间
       timeout: 10s
       lettuce:
@@ -121,4 +121,4 @@ config:
      sdk-key: J1wqG4VVGJYLe5YYT2hQN3xHSqLEwrZJBBRQmuEXkZqc
      detect-face-max-num: 10
      detect-face-scale-val: 32
-     thread-pool-size: 5
\ No newline at end of file
+     thread-pool-size: 5
diff --git a/danger-manage-admin/src/main/resources/application-test.yml b/danger-manage-admin/src/main/resources/application-test.yml
index ccd42814266bdc387e71ca4bcadde0594e5d8490..5a78178269eaafde05bcd04203db9845e83b0e34 100644
--- a/danger-manage-admin/src/main/resources/application-test.yml
+++ b/danger-manage-admin/src/main/resources/application-test.yml
@@ -28,9 +28,9 @@ spring:
             slave:
                 # 从数据源开关/默认关闭
                 enabled: false
-                url: 
-                username: 
-                password: 
+                url:
+                username:
+                password:
             # 初始连接数
             initialSize: 5
             # 最小连接池数量
@@ -50,7 +50,7 @@ spring:
             testWhileIdle: true
             testOnBorrow: false
             testOnReturn: false
-            webStatFilter: 
+            webStatFilter:
                 enabled: true
             statViewServlet:
                 enabled: true
@@ -73,13 +73,13 @@ spring:
     # redis 配置
     redis:
       # 地址
-      host: 127.0.0.1
+      host: 36.138.181.113
       # 端口,默认为6379
-      port: 6378
+      port: 6379
       # 数据库索引
       database: 0
       # 密码
-      password: Redis@2021
+      password: 1qaz2wsx3edc
       # 连接超时时间
       timeout: 10s
       lettuce:
@@ -109,4 +109,4 @@ zehong:
   # 获取ip地址开关
   addressEnabled: false
   # 验证码类型 math 数组计算 char 字符验证
-  captchaType: math
\ No newline at end of file
+  captchaType: math
diff --git a/danger-manage-system/src/main/java/com/zehong/system/domain/DrillStatistics.java b/danger-manage-system/src/main/java/com/zehong/system/domain/DrillStatistics.java
new file mode 100644
index 0000000000000000000000000000000000000000..57cb0760ab3b5e762c8f226ed269958ac1f4ac38
--- /dev/null
+++ b/danger-manage-system/src/main/java/com/zehong/system/domain/DrillStatistics.java
@@ -0,0 +1,56 @@
+package com.zehong.system.domain;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.zehong.common.annotation.Excel;
+import java.util.Date;
+
+/**
+ * 演练统计
+ */
+public class DrillStatistics {
+
+    /** 演练时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "演练时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date drillTime;
+
+    /**演练总次数*/
+    private int totalNumberDrills;
+
+    /**参演人数*/
+    private int numberParticipants;
+
+    /**月份*/
+    private String mont;
+
+    public String getMont() {
+        return mont;
+    }
+
+    public void setMont(String mont) {
+        this.mont = mont;
+    }
+
+    public Date getDrillTime() {
+        return drillTime;
+    }
+
+    public void setDrillTime(Date drillTime) {
+        this.drillTime = drillTime;
+    }
+
+    public int getTotalNumberDrills() {
+        return totalNumberDrills;
+    }
+
+    public void setTotalNumberDrills(int totalNumberDrills) {
+        this.totalNumberDrills = totalNumberDrills;
+    }
+
+    public int getNumberParticipants() {
+        return numberParticipants;
+    }
+
+    public void setNumberParticipants(int numberParticipants) {
+        this.numberParticipants = numberParticipants;
+    }
+}
diff --git a/danger-manage-system/src/main/java/com/zehong/system/domain/TBankSubject.java b/danger-manage-system/src/main/java/com/zehong/system/domain/TBankSubject.java
new file mode 100644
index 0000000000000000000000000000000000000000..5ecc753d324807e5ddabdd7c5fef7c3dedef8067
--- /dev/null
+++ b/danger-manage-system/src/main/java/com/zehong/system/domain/TBankSubject.java
@@ -0,0 +1,110 @@
+package com.zehong.system.domain;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.zehong.common.annotation.Excel;
+import com.zehong.common.core.domain.BaseEntity;
+
+/**
+ * 题库题目对象 t_bank_subject
+ * 
+ * @author zehong
+ * @date 2022-12-15
+ */
+public class TBankSubject extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 题目id */
+    private Long subjectId;
+
+    /** 所属题库id */
+    @Excel(name = "所属题库id")
+    private Long bankId;
+
+    /** 题目内容 */
+    @Excel(name = "题目内容")
+    private String topicTitle;
+
+    /** 题目选项(json) */
+    @Excel(name = "题目选项", readConverterExp = "j=son")
+    private String topicOption;
+
+    /** 答案 */
+    @Excel(name = "答案")
+    private Integer answer;
+
+    /** 创建时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date datetime;
+
+    public void setSubjectId(Long subjectId) 
+    {
+        this.subjectId = subjectId;
+    }
+
+    public Long getSubjectId() 
+    {
+        return subjectId;
+    }
+    public void setBankId(Long bankId) 
+    {
+        this.bankId = bankId;
+    }
+
+    public Long getBankId() 
+    {
+        return bankId;
+    }
+    public void setTopicTitle(String topicTitle) 
+    {
+        this.topicTitle = topicTitle;
+    }
+
+    public String getTopicTitle() 
+    {
+        return topicTitle;
+    }
+    public void setTopicOption(String topicOption) 
+    {
+        this.topicOption = topicOption;
+    }
+
+    public String getTopicOption() 
+    {
+        return topicOption;
+    }
+    public void setAnswer(Integer answer) 
+    {
+        this.answer = answer;
+    }
+
+    public Integer getAnswer() 
+    {
+        return answer;
+    }
+    public void setDatetime(Date datetime) 
+    {
+        this.datetime = datetime;
+    }
+
+    public Date getDatetime() 
+    {
+        return datetime;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("subjectId", getSubjectId())
+            .append("bankId", getBankId())
+            .append("topicTitle", getTopicTitle())
+            .append("topicOption", getTopicOption())
+            .append("answer", getAnswer())
+            .append("datetime", getDatetime())
+            .toString();
+    }
+}
diff --git a/danger-manage-system/src/main/java/com/zehong/system/mapper/TBankSubjectMapper.java b/danger-manage-system/src/main/java/com/zehong/system/mapper/TBankSubjectMapper.java
new file mode 100644
index 0000000000000000000000000000000000000000..3be8c6e4420d41145b1752e825b02100f1d3b7f2
--- /dev/null
+++ b/danger-manage-system/src/main/java/com/zehong/system/mapper/TBankSubjectMapper.java
@@ -0,0 +1,61 @@
+package com.zehong.system.mapper;
+
+import java.util.List;
+import com.zehong.system.domain.TBankSubject;
+
+/**
+ * 题库题目Mapper接口
+ * 
+ * @author zehong
+ * @date 2022-12-15
+ */
+public interface TBankSubjectMapper 
+{
+    /**
+     * 查询题库题目
+     * 
+     * @param subjectId 题库题目ID
+     * @return 题库题目
+     */
+    public TBankSubject selectTBankSubjectById(Long subjectId);
+
+    /**
+     * 查询题库题目列表
+     * 
+     * @param tBankSubject 题库题目
+     * @return 题库题目集合
+     */
+    public List<TBankSubject> selectTBankSubjectList(TBankSubject tBankSubject);
+
+    /**
+     * 新增题库题目
+     * 
+     * @param tBankSubject 题库题目
+     * @return 结果
+     */
+    public int insertTBankSubject(TBankSubject tBankSubject);
+
+    /**
+     * 修改题库题目
+     * 
+     * @param tBankSubject 题库题目
+     * @return 结果
+     */
+    public int updateTBankSubject(TBankSubject tBankSubject);
+
+    /**
+     * 删除题库题目
+     * 
+     * @param subjectId 题库题目ID
+     * @return 结果
+     */
+    public int deleteTBankSubjectById(Long subjectId);
+
+    /**
+     * 批量删除题库题目
+     * 
+     * @param subjectIds 需要删除的数据ID
+     * @return 结果
+     */
+    public int deleteTBankSubjectByIds(Long[] subjectIds);
+}
diff --git a/danger-manage-system/src/main/java/com/zehong/system/mapper/TEmergencyDrillMapper.java b/danger-manage-system/src/main/java/com/zehong/system/mapper/TEmergencyDrillMapper.java
index 25982818af69eeb72e0e36871aa177fd5e0dfdd6..0d1c17f843d17111b5a8f862a30f06d5a20ff166 100644
--- a/danger-manage-system/src/main/java/com/zehong/system/mapper/TEmergencyDrillMapper.java
+++ b/danger-manage-system/src/main/java/com/zehong/system/mapper/TEmergencyDrillMapper.java
@@ -1,19 +1,21 @@
 package com.zehong.system.mapper;
 
 import java.util.List;
+
+import com.zehong.system.domain.DrillStatistics;
 import com.zehong.system.domain.TEmergencyDrill;
 
 /**
  * 应急演练Mapper接口
- * 
+ *
  * @author zehong
  * @date 2022-06-29
  */
-public interface TEmergencyDrillMapper 
+public interface TEmergencyDrillMapper
 {
     /**
      * 查询应急演练
-     * 
+     *
      * @param drillId 应急演练ID
      * @return 应急演练
      */
@@ -21,7 +23,7 @@ public interface TEmergencyDrillMapper
 
     /**
      * 查询应急演练列表
-     * 
+     *
      * @param tEmergencyDrill 应急演练
      * @return 应急演练集合
      */
@@ -29,7 +31,7 @@ public interface TEmergencyDrillMapper
 
     /**
      * 新增应急演练
-     * 
+     *
      * @param tEmergencyDrill 应急演练
      * @return 结果
      */
@@ -37,7 +39,7 @@ public interface TEmergencyDrillMapper
 
     /**
      * 修改应急演练
-     * 
+     *
      * @param tEmergencyDrill 应急演练
      * @return 结果
      */
@@ -45,7 +47,7 @@ public interface TEmergencyDrillMapper
 
     /**
      * 删除应急演练
-     * 
+     *
      * @param drillId 应急演练ID
      * @return 结果
      */
@@ -53,9 +55,16 @@ public interface TEmergencyDrillMapper
 
     /**
      * 批量删除应急演练
-     * 
+     *
      * @param drillIds 需要删除的数据ID
      * @return 结果
      */
     public int deleteTEmergencyDrillByIds(Long[] drillIds);
+
+    /**
+     * 应急演练统计查询
+     * @param drillStatistics
+     * @return
+     */
+    List<DrillStatistics> countList(DrillStatistics drillStatistics);
 }
diff --git a/danger-manage-system/src/main/java/com/zehong/system/service/ITBankSubjectService.java b/danger-manage-system/src/main/java/com/zehong/system/service/ITBankSubjectService.java
new file mode 100644
index 0000000000000000000000000000000000000000..432dc4b94fd9075288e2677d4991a311b9ed8987
--- /dev/null
+++ b/danger-manage-system/src/main/java/com/zehong/system/service/ITBankSubjectService.java
@@ -0,0 +1,61 @@
+package com.zehong.system.service;
+
+import java.util.List;
+import com.zehong.system.domain.TBankSubject;
+
+/**
+ * 题库题目Service接口
+ * 
+ * @author zehong
+ * @date 2022-12-15
+ */
+public interface ITBankSubjectService 
+{
+    /**
+     * 查询题库题目
+     * 
+     * @param subjectId 题库题目ID
+     * @return 题库题目
+     */
+    public TBankSubject selectTBankSubjectById(Long subjectId);
+
+    /**
+     * 查询题库题目列表
+     * 
+     * @param tBankSubject 题库题目
+     * @return 题库题目集合
+     */
+    public List<TBankSubject> selectTBankSubjectList(TBankSubject tBankSubject);
+
+    /**
+     * 新增题库题目
+     * 
+     * @param tBankSubject 题库题目
+     * @return 结果
+     */
+    public int insertTBankSubject(TBankSubject tBankSubject);
+
+    /**
+     * 修改题库题目
+     * 
+     * @param tBankSubject 题库题目
+     * @return 结果
+     */
+    public int updateTBankSubject(TBankSubject tBankSubject);
+
+    /**
+     * 批量删除题库题目
+     * 
+     * @param subjectIds 需要删除的题库题目ID
+     * @return 结果
+     */
+    public int deleteTBankSubjectByIds(Long[] subjectIds);
+
+    /**
+     * 删除题库题目信息
+     * 
+     * @param subjectId 题库题目ID
+     * @return 结果
+     */
+    public int deleteTBankSubjectById(Long subjectId);
+}
diff --git a/danger-manage-system/src/main/java/com/zehong/system/service/ITEmergencyDrillService.java b/danger-manage-system/src/main/java/com/zehong/system/service/ITEmergencyDrillService.java
index b7c695dfe80650fb5bf159330bde786d9b402d12..e6a55fc7ecbc3255bf1e771489339ab2136443c6 100644
--- a/danger-manage-system/src/main/java/com/zehong/system/service/ITEmergencyDrillService.java
+++ b/danger-manage-system/src/main/java/com/zehong/system/service/ITEmergencyDrillService.java
@@ -1,19 +1,21 @@
 package com.zehong.system.service;
 
 import java.util.List;
+
+import com.zehong.system.domain.DrillStatistics;
 import com.zehong.system.domain.TEmergencyDrill;
 
 /**
  * 应急演练Service接口
- * 
+ *
  * @author zehong
  * @date 2022-06-29
  */
-public interface ITEmergencyDrillService 
+public interface ITEmergencyDrillService
 {
     /**
      * 查询应急演练
-     * 
+     *
      * @param drillId 应急演练ID
      * @return 应急演练
      */
@@ -21,7 +23,7 @@ public interface ITEmergencyDrillService
 
     /**
      * 查询应急演练列表
-     * 
+     *
      * @param tEmergencyDrill 应急演练
      * @return 应急演练集合
      */
@@ -29,7 +31,7 @@ public interface ITEmergencyDrillService
 
     /**
      * 新增应急演练
-     * 
+     *
      * @param tEmergencyDrill 应急演练
      * @return 结果
      */
@@ -37,7 +39,7 @@ public interface ITEmergencyDrillService
 
     /**
      * 修改应急演练
-     * 
+     *
      * @param tEmergencyDrill 应急演练
      * @return 结果
      */
@@ -45,7 +47,7 @@ public interface ITEmergencyDrillService
 
     /**
      * 批量删除应急演练
-     * 
+     *
      * @param drillIds 需要删除的应急演练ID
      * @return 结果
      */
@@ -53,9 +55,16 @@ public interface ITEmergencyDrillService
 
     /**
      * 删除应急演练信息
-     * 
+     *
      * @param drillId 应急演练ID
      * @return 结果
      */
     public int deleteTEmergencyDrillById(Long drillId);
+
+    /**
+     * 应急演练统计查询
+     * @param drillStatistics
+     * @return
+     */
+    List<DrillStatistics> countList(DrillStatistics drillStatistics);
 }
diff --git a/danger-manage-system/src/main/java/com/zehong/system/service/impl/TBankSubjectServiceImpl.java b/danger-manage-system/src/main/java/com/zehong/system/service/impl/TBankSubjectServiceImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..48710bf6f5364f2356baa6cbcd8ecf2659c2d931
--- /dev/null
+++ b/danger-manage-system/src/main/java/com/zehong/system/service/impl/TBankSubjectServiceImpl.java
@@ -0,0 +1,93 @@
+package com.zehong.system.service.impl;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.zehong.system.mapper.TBankSubjectMapper;
+import com.zehong.system.domain.TBankSubject;
+import com.zehong.system.service.ITBankSubjectService;
+
+/**
+ * 题库题目Service业务层处理
+ * 
+ * @author zehong
+ * @date 2022-12-15
+ */
+@Service
+public class TBankSubjectServiceImpl implements ITBankSubjectService 
+{
+    @Autowired
+    private TBankSubjectMapper tBankSubjectMapper;
+
+    /**
+     * 查询题库题目
+     * 
+     * @param subjectId 题库题目ID
+     * @return 题库题目
+     */
+    @Override
+    public TBankSubject selectTBankSubjectById(Long subjectId)
+    {
+        return tBankSubjectMapper.selectTBankSubjectById(subjectId);
+    }
+
+    /**
+     * 查询题库题目列表
+     * 
+     * @param tBankSubject 题库题目
+     * @return 题库题目
+     */
+    @Override
+    public List<TBankSubject> selectTBankSubjectList(TBankSubject tBankSubject)
+    {
+        return tBankSubjectMapper.selectTBankSubjectList(tBankSubject);
+    }
+
+    /**
+     * 新增题库题目
+     * 
+     * @param tBankSubject 题库题目
+     * @return 结果
+     */
+    @Override
+    public int insertTBankSubject(TBankSubject tBankSubject)
+    {
+        return tBankSubjectMapper.insertTBankSubject(tBankSubject);
+    }
+
+    /**
+     * 修改题库题目
+     * 
+     * @param tBankSubject 题库题目
+     * @return 结果
+     */
+    @Override
+    public int updateTBankSubject(TBankSubject tBankSubject)
+    {
+        return tBankSubjectMapper.updateTBankSubject(tBankSubject);
+    }
+
+    /**
+     * 批量删除题库题目
+     * 
+     * @param subjectIds 需要删除的题库题目ID
+     * @return 结果
+     */
+    @Override
+    public int deleteTBankSubjectByIds(Long[] subjectIds)
+    {
+        return tBankSubjectMapper.deleteTBankSubjectByIds(subjectIds);
+    }
+
+    /**
+     * 删除题库题目信息
+     * 
+     * @param subjectId 题库题目ID
+     * @return 结果
+     */
+    @Override
+    public int deleteTBankSubjectById(Long subjectId)
+    {
+        return tBankSubjectMapper.deleteTBankSubjectById(subjectId);
+    }
+}
diff --git a/danger-manage-system/src/main/java/com/zehong/system/service/impl/TEmergencyDrillServiceImpl.java b/danger-manage-system/src/main/java/com/zehong/system/service/impl/TEmergencyDrillServiceImpl.java
index c30829d63c88120bb3ae0361eff417b9e0b1b854..a2855e9f53aead52ee71cda4ab20fe533ba6b661 100644
--- a/danger-manage-system/src/main/java/com/zehong/system/service/impl/TEmergencyDrillServiceImpl.java
+++ b/danger-manage-system/src/main/java/com/zehong/system/service/impl/TEmergencyDrillServiceImpl.java
@@ -2,6 +2,7 @@ package com.zehong.system.service.impl;
 
 import java.util.List;
 import com.zehong.common.utils.DateUtils;
+import com.zehong.system.domain.DrillStatistics;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.zehong.system.mapper.TEmergencyDrillMapper;
@@ -10,19 +11,19 @@ import com.zehong.system.service.ITEmergencyDrillService;
 
 /**
  * 应急演练Service业务层处理
- * 
+ *
  * @author zehong
  * @date 2022-06-29
  */
 @Service
-public class TEmergencyDrillServiceImpl implements ITEmergencyDrillService 
+public class TEmergencyDrillServiceImpl implements ITEmergencyDrillService
 {
     @Autowired
     private TEmergencyDrillMapper tEmergencyDrillMapper;
 
     /**
      * 查询应急演练
-     * 
+     *
      * @param drillId 应急演练ID
      * @return 应急演练
      */
@@ -34,7 +35,7 @@ public class TEmergencyDrillServiceImpl implements ITEmergencyDrillService
 
     /**
      * 查询应急演练列表
-     * 
+     *
      * @param tEmergencyDrill 应急演练
      * @return 应急演练
      */
@@ -46,7 +47,7 @@ public class TEmergencyDrillServiceImpl implements ITEmergencyDrillService
 
     /**
      * 新增应急演练
-     * 
+     *
      * @param tEmergencyDrill 应急演练
      * @return 结果
      */
@@ -59,7 +60,7 @@ public class TEmergencyDrillServiceImpl implements ITEmergencyDrillService
 
     /**
      * 修改应急演练
-     * 
+     *
      * @param tEmergencyDrill 应急演练
      * @return 结果
      */
@@ -71,7 +72,7 @@ public class TEmergencyDrillServiceImpl implements ITEmergencyDrillService
 
     /**
      * 批量删除应急演练
-     * 
+     *
      * @param drillIds 需要删除的应急演练ID
      * @return 结果
      */
@@ -83,7 +84,7 @@ public class TEmergencyDrillServiceImpl implements ITEmergencyDrillService
 
     /**
      * 删除应急演练信息
-     * 
+     *
      * @param drillId 应急演练ID
      * @return 结果
      */
@@ -92,4 +93,14 @@ public class TEmergencyDrillServiceImpl implements ITEmergencyDrillService
     {
         return tEmergencyDrillMapper.deleteTEmergencyDrillById(drillId);
     }
+
+    /**
+     * 应急演练统计查询
+     * @param drillStatistics
+     * @return
+     */
+    @Override
+    public List<DrillStatistics> countList(DrillStatistics drillStatistics) {
+        return tEmergencyDrillMapper.countList(drillStatistics);
+    }
 }
diff --git a/danger-manage-system/src/main/resources/mapper/system/TBankSubjectMapper.xml b/danger-manage-system/src/main/resources/mapper/system/TBankSubjectMapper.xml
new file mode 100644
index 0000000000000000000000000000000000000000..29588a07638e6fd8947e114f3327e618868710cc
--- /dev/null
+++ b/danger-manage-system/src/main/resources/mapper/system/TBankSubjectMapper.xml
@@ -0,0 +1,76 @@
+<?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.zehong.system.mapper.TBankSubjectMapper">
+    
+    <resultMap type="TBankSubject" id="TBankSubjectResult">
+        <result property="subjectId"    column="subject_id"    />
+        <result property="bankId"    column="bank_id"    />
+        <result property="topicTitle"    column="topic_title"    />
+        <result property="topicOption"    column="topic_option"    />
+        <result property="answer"    column="answer"    />
+        <result property="datetime"    column="datetime"    />
+    </resultMap>
+
+    <sql id="selectTBankSubjectVo">
+        select subject_id, bank_id, topic_title, topic_option, answer, datetime from t_bank_subject
+    </sql>
+
+    <select id="selectTBankSubjectList" parameterType="TBankSubject" resultMap="TBankSubjectResult">
+        <include refid="selectTBankSubjectVo"/>
+        <where>  
+            <if test="bankId != null "> and bank_id = #{bankId}</if>
+            <if test="topicTitle != null  and topicTitle != ''"> and topic_title = #{topicTitle}</if>
+            <if test="topicOption != null  and topicOption != ''"> and topic_option = #{topicOption}</if>
+            <if test="answer != null "> and answer = #{answer}</if>
+            <if test="datetime != null "> and datetime = #{datetime}</if>
+        </where>
+    </select>
+    
+    <select id="selectTBankSubjectById" parameterType="Long" resultMap="TBankSubjectResult">
+        <include refid="selectTBankSubjectVo"/>
+        where subject_id = #{subjectId}
+    </select>
+        
+    <insert id="insertTBankSubject" parameterType="TBankSubject" useGeneratedKeys="true" keyProperty="subjectId">
+        insert into t_bank_subject
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="bankId != null">bank_id,</if>
+            <if test="topicTitle != null">topic_title,</if>
+            <if test="topicOption != null">topic_option,</if>
+            <if test="answer != null">answer,</if>
+            <if test="datetime != null">datetime,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="bankId != null">#{bankId},</if>
+            <if test="topicTitle != null">#{topicTitle},</if>
+            <if test="topicOption != null">#{topicOption},</if>
+            <if test="answer != null">#{answer},</if>
+            <if test="datetime != null">#{datetime},</if>
+         </trim>
+    </insert>
+
+    <update id="updateTBankSubject" parameterType="TBankSubject">
+        update t_bank_subject
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="bankId != null">bank_id = #{bankId},</if>
+            <if test="topicTitle != null">topic_title = #{topicTitle},</if>
+            <if test="topicOption != null">topic_option = #{topicOption},</if>
+            <if test="answer != null">answer = #{answer},</if>
+            <if test="datetime != null">datetime = #{datetime},</if>
+        </trim>
+        where subject_id = #{subjectId}
+    </update>
+
+    <delete id="deleteTBankSubjectById" parameterType="Long">
+        delete from t_bank_subject where subject_id = #{subjectId}
+    </delete>
+
+    <delete id="deleteTBankSubjectByIds" parameterType="String">
+        delete from t_bank_subject where subject_id in 
+        <foreach item="subjectId" collection="array" open="(" separator="," close=")">
+            #{subjectId}
+        </foreach>
+    </delete>
+</mapper>
\ No newline at end of file
diff --git a/danger-manage-system/src/main/resources/mapper/system/TEmergencyDrillMapper.xml b/danger-manage-system/src/main/resources/mapper/system/TEmergencyDrillMapper.xml
index 33521a7a9f836f5bd134dfe17a8b3c82583cc723..77667cc8527997a3249925d174df3fc9f4648c44 100644
--- a/danger-manage-system/src/main/resources/mapper/system/TEmergencyDrillMapper.xml
+++ b/danger-manage-system/src/main/resources/mapper/system/TEmergencyDrillMapper.xml
@@ -106,4 +106,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             #{drillId}
         </foreach>
     </delete>
+
+    <!--应急演练统计查询-->
+    <select id="countList" resultType="com.zehong.system.domain.DrillStatistics">
+       select *  from (
+       select date_format(create_time, '%Y-%m') mont , count(*)as totalNumberDrills
+       from t_emergency_drill
+       group by date_format(create_time, '%Y-%m') ) t
+        <if test="mont != null  and mont != ''">
+            where mont =#{mont}
+        </if>
+    </select>
 </mapper>
diff --git a/danger-manage-system/src/main/resources/mapper/system/TTrainCourseBankMapper.xml b/danger-manage-system/src/main/resources/mapper/system/TTrainCourseBankMapper.xml
index 2980e6c2e0938618a29cc1fc10253a0d9580bea2..bf622390ffc4bc854c5ce0de71876cba69b916d2 100644
--- a/danger-manage-system/src/main/resources/mapper/system/TTrainCourseBankMapper.xml
+++ b/danger-manage-system/src/main/resources/mapper/system/TTrainCourseBankMapper.xml
@@ -3,7 +3,7 @@
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.zehong.system.mapper.TTrainCourseBankMapper">
-    
+
     <resultMap type="TTrainCourseBank" id="TTrainCourseBankResult">
         <result property="bankId"    column="bank_id"    />
         <result property="deptId"    column="dept_id"    />
@@ -21,16 +21,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 
     <select id="selectTTrainCourseBankList" parameterType="TTrainCourseBank" resultMap="TTrainCourseBankResult">
         <include refid="selectTTrainCourseBankVo"/>
-        <where>  
+        <where>
             <if test="bankName != null  and bankName != ''"> and bank_name like concat('%', #{bankName}, '%')</if>
         </where>
+        group by bank_id desc
     </select>
-    
+
     <select id="selectTTrainCourseBankById" parameterType="Long" resultMap="TTrainCourseBankResult">
         <include refid="selectTTrainCourseBankVo"/>
         where bank_id = #{bankId}
     </select>
-        
+
     <insert id="insertTTrainCourseBank" parameterType="TTrainCourseBank" useGeneratedKeys="true" keyProperty="bankId">
         insert into t_train_course_bank
         <trim prefix="(" suffix=")" suffixOverrides=",">
@@ -72,9 +73,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </delete>
 
     <delete id="deleteTTrainCourseBankByIds" parameterType="String">
-        delete from t_train_course_bank where bank_id in 
+        delete from t_train_course_bank where bank_id in
         <foreach item="bankId" collection="array" open="(" separator="," close=")">
             #{bankId}
         </foreach>
     </delete>
-</mapper>
\ No newline at end of file
+</mapper>
diff --git a/danger-manage-web/package.json b/danger-manage-web/package.json
index a139d7a562c456d219141d7793ab5aaed410db5d..6287610dfdf15336dc05136b5e88224970ab1c2f 100644
--- a/danger-manage-web/package.json
+++ b/danger-manage-web/package.json
@@ -33,7 +33,7 @@
   ],
   "repository": {},
   "dependencies": {
-    "@riophae/vue-treeselect": "0.4.0",
+    "@riophae/vue-treeselect": "^0.4.0",
     "axios": "0.21.0",
     "clipboard": "2.0.6",
     "core-js": "^3.19.1",
diff --git a/danger-manage-web/src/api/safetyManagement/staff.js b/danger-manage-web/src/api/safetyManagement/staff.js
index 1cf99f53110e5fc885e926a692a88858736b9bd0..d0dcd75206504dbbe45cb783d4ddc5e873564c96 100644
--- a/danger-manage-web/src/api/safetyManagement/staff.js
+++ b/danger-manage-web/src/api/safetyManagement/staff.js
@@ -10,6 +10,15 @@ export function listStaff(query) {
   })
 }
 
+// 查询员工信息管理列表  无分页
+export function TStaffList(query) {
+  return request({
+    url: '/safetyManagement/staff/TStaffList',
+    method: 'get',
+    params: query
+  })
+}
+
 // 查询员工信息管理详细
 export function getStaff(staffId) {
   return request({
diff --git a/danger-manage-web/src/api/system/emergencyDrill.js b/danger-manage-web/src/api/system/emergencyDrill.js
new file mode 100644
index 0000000000000000000000000000000000000000..0a9669233bfc054d96ef395358fc0df83f773eb8
--- /dev/null
+++ b/danger-manage-web/src/api/system/emergencyDrill.js
@@ -0,0 +1,54 @@
+import request from '@/utils/request'
+
+// 查询应急演练统计列表
+export function listDrill(query) {
+  return request({
+    url: '/system/drill/countList',
+    method: 'get',
+    params: query
+  })
+}
+
+
+// 查询应急演练详细
+export function getDrill(drillId) {
+  return request({
+    url: '/system/drill/' + drillId,
+    method: 'get'
+  })
+}
+
+// 新增应急演练
+export function addDrill(data) {
+  return request({
+    url: '/system/drill',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改应急演练
+export function updateDrill(data) {
+  return request({
+    url: '/system/drill',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除应急演练
+export function delDrill(drillId) {
+  return request({
+    url: '/system/drill/' + drillId,
+    method: 'delete'
+  })
+}
+
+// 导出应急演练
+export function exportDrill(query) {
+  return request({
+    url: '/system/drill/export',
+    method: 'get',
+    params: query
+  })
+}
diff --git a/danger-manage-web/src/views/system/bank/index.vue b/danger-manage-web/src/views/system/bank/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..f3639fb7ca96f67c49b5cb13e8e4972472f56882
--- /dev/null
+++ b/danger-manage-web/src/views/system/bank/index.vue
@@ -0,0 +1,297 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="题库名称" prop="bankName">
+        <el-input
+          v-model="queryParams.bankName"
+          placeholder="请输入题库名称"
+          clearable
+          size="small"
+          @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"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+		  :loading="exportLoading"
+          @click="handleExport"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="bankList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="题库名称" align="center" prop="bankName" />
+      <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="handleUpdate(scope.row)"
+          >修改</el-button>
+          <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"
+    />
+
+    <!-- 添加或修改bank对话框 -->
+    <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="bankName">
+          <el-input v-model="form.bankName" 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>
+  </div>
+</template>
+
+<script>
+import { listBank, getBank, delBank, addBank, updateBank, exportBank } from "@/api/system/bank";
+import { treeselect } from "@/api/system/dept";
+import Treeselect from "@riophae/vue-treeselect";
+import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+export default {
+  name: "Bank",
+  components: {
+    components: { Treeselect },
+  },
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 导出遮罩层
+      exportLoading: false,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // bank表格数据
+      bankList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 部门树选项
+      deptOptions: undefined,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        bankName: null,
+      },
+      // 表单参数
+      form: {
+      },
+      // 表单校验
+      rules: {
+        bankName: [
+          { required: true, message: "题库名称不能为空", trigger: "blur" }
+        ],
+      }
+    };
+  },
+  created() {
+    this.getList();
+    this.getTreeselect();
+  },
+  methods: {
+    // 节点单击事件
+    handleNodeClick(data) {
+      this.queryParams.deptId = data.id;
+      this.getList();
+    },
+    /** 查询bank列表 */
+    getList() {
+      this.loading = true;
+      listBank(this.queryParams).then(response => {
+        this.bankList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        bankId: null,
+        deptId: undefined,
+        bankName: null,
+        isDel: null,
+        createBy: null,
+        createTime: null,
+        updateBy: null,
+        updateTime: 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.bankId)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.getTreeselect();
+      this.reset();
+      this.open = true;
+      this.title = "添加题库";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.getTreeselect();
+      this.reset();
+      const bankId = row.bankId || this.ids
+      getBank(bankId).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改题库";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.bankId != null) {
+            updateBank(this.form).then(response => {
+              this.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addBank(this.form).then(response => {
+              console.log(response)
+              this.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const bankIds = row.bankId || this.ids;
+      this.$confirm('是否确认删除bank编号为"' + bankIds + '"的数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delBank(bankIds);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      const queryParams = this.queryParams;
+      this.$confirm('是否确认导出所有bank数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(() => {
+          this.exportLoading = true;
+          return exportBank(queryParams);
+        }).then(response => {
+          this.download(response.msg);
+          this.exportLoading = false;
+        }).catch(() => {});
+    },
+    /** 查询部门下拉树结构 */
+    getTreeselect() {
+      treeselect().then(response => {
+        console.log('返回值')
+        console.log(response.data)
+        this.deptOptions = response.data;
+      });
+    },
+  }
+};
+</script>
diff --git a/danger-manage-web/src/views/system/drill/index.vue b/danger-manage-web/src/views/system/drill/index.vue
index fbd4fbf83f7375c0e07dd3f6dcdec70c02f3662b..50acc30328ed7d7b24a7326f9349e0c1e34f8d79 100644
--- a/danger-manage-web/src/views/system/drill/index.vue
+++ b/danger-manage-web/src/views/system/drill/index.vue
@@ -142,7 +142,7 @@
     />
 
     <!-- 添加或修改应急演练对话框 -->
-    <el-dialog :title="title" :visible.sync="open" width="1200px" append-to-body>
+    <el-dialog :title="title" :visible.sync="open" width="1600px" append-to-body>
       <el-form ref="form" :model="form" :rules="rules" label-width="90px">
         <div class="division">
           <div class="div-kuang" style="width: 40%;">
@@ -188,14 +188,29 @@
               <el-input type="textarea" v-model="form.drillObjective" placeholder="请输入演练目的" />
             </el-form-item>
           </div>
-          <div class="div-kuang" style="width: 58%;margin-left: 2%">
-            <el-form-item label="参演人员" prop="drillPeople">
-              <el-input v-model="form.drillPeople" type="textarea" placeholder="请输入内容" />
-            </el-form-item>
+          <div class="div-kuang" style="width: 68%;margin-left: 2%">
+<!--            <el-form-item label="参演人员" prop="drillPeople">-->
+<!--              <el-input v-model="form.drillPeople" type="textarea" placeholder="请输入内容" />-->
+<!--            </el-form-item>-->
             <el-form-item label="演练内容">
               <editor v-model="form.drillContent" :min-height="240"/>
             </el-form-item>
           </div>
+          <div class="div-kuang" style="width: 95%;margin-left: 2%">
+            <el-form-item label="参演人员" prop="drillPeople">
+            <el-transfer
+              filterable
+              :filter-method="filterMethod"
+              filter-placeholder="请输入参演人员姓名"
+              v-model="value"
+              :titles="['员工信息', '参演人员']"
+              :data="data"
+              @change="handleChange">
+            </el-transfer>
+            </el-form-item>
+          </div>
+
+
         </div>
 
 
@@ -259,7 +274,6 @@
         <!--</el-form-item>-->
       </el-form>
     </el-dialog>
-
     <!--评估-->
     <el-dialog title="评估" :visible.sync="dialogFormVisible">
       <el-form  ref="form" :model="form">
@@ -280,8 +294,8 @@
 
 <script>
 import { listDrill, getDrill, delDrill, addDrill, updateDrill, exportDrill } from "@/api/system/drill";
+import { TStaffList } from "@/api/safetyManagement/staff";
 import Editor from '@/components/Editor';
-
 export default {
   name: "Drill",
   components: {
@@ -289,6 +303,14 @@ export default {
   },
   data() {
     return {
+      data: [],
+      value: [],
+      //选中下标
+      check:[],
+      filterMethod(query, item) {
+        return item.pinyin.indexOf(query) > -1;
+      },
+      test:null,
       // 遮罩层
       loading: true,
       readOnly:true,
@@ -357,6 +379,25 @@ export default {
     });
   },
   methods: {
+    /**穿梭框数据查询*/
+    generateData(){
+      const data = [];
+      TStaffList(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
+        response.rows.forEach((city, index) => {
+          data.push({
+            label: city.staffName,
+            key: index,
+            pinyin: city.staffName
+        });
+          })
+      });
+      this.value=['孙卓亚']
+      this.data=data;
+    },
+    /**参演人员选中信息方法  获取数组下标*/
+    handleChange(value, direction, movedKeys) {
+      this.check=value;
+    },
     /** 查询应急演练列表 */
     getList() {
       this.loading = true;
@@ -419,6 +460,12 @@ export default {
     },
     /** 新增按钮操作 */
     handleAdd() {
+      // listStaff(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
+      //   console.log(response.rows)
+      //   this.cities = response.rows.staffName;
+      //   generateData.cities=['shanghai', 'beijing', 'guangzhou', 'shenzhen', 'nanjing', 'xian', 'chengdu']
+      // });
+      this.generateData();
       this.reset();
       this.open = true;
       this.title = "添加应急演练";
@@ -459,11 +506,16 @@ export default {
               this.getList();
             });
           } else {
-            addDrill(this.form).then(response => {
-              this.msgSuccess("新增成功");
-              this.open = false;
-              this.getList();
-            });
+            this.check.forEach((city, index) => {
+              this.test=this.data[index]
+              console.log(this.test.label)
+            })
+
+            // addDrill(this.form).then(response => {
+            //   this.msgSuccess("新增成功");
+            //   this.open = false;
+            //   this.getList();
+            // });
           }
         }
       });
diff --git a/danger-manage-web/src/views/system/emergencyDrill/index.vue b/danger-manage-web/src/views/system/emergencyDrill/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..213435ff18c3bde39a14d0be2750231bb673c8bc
--- /dev/null
+++ b/danger-manage-web/src/views/system/emergencyDrill/index.vue
@@ -0,0 +1,303 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
+
+
+      <el-form-item label="演练月份" prop="releaseTime">
+        <el-date-picker
+          v-model="queryParams.mont"
+          value-format="yyyy-MM"
+          type="month"
+          placeholder="选择日期"
+        >
+        </el-date-picker>
+      </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-table v-loading="loading" :data="drillList" @selection-change="handleSelectionChange">
+      <!--<el-table-column type="selection" width="55" align="center" />-->
+      <el-table-column label="月份" align="center" prop="mont" />
+      <el-table-column label="演练总次数" align="center" prop="totalNumberDrills" />
+      <el-table-column label="参演人数" align="center" prop="numberParticipants" />
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+
+  </div>
+</template>
+
+<script>
+import { listDrill, getDrill, delDrill, addDrill, updateDrill, exportDrill } from "@/api/system/emergencyDrill";
+import { listStaff } from "@/api/safetyManagement/staff";
+import Editor from '@/components/Editor';
+export default {
+  name: "Drill",
+  components: {
+    Editor,
+  },
+  data() {
+    const generateData = _ => {
+
+      const data = [];
+       const cities = ['shanghai', 'beijing', 'guangzhou', 'shenzhen', 'nanjing', 'xian', 'chengdu'];
+      const pinyin = ['shanghai', 'beijing', 'guangzhou', 'shenzhen', 'nanjing', 'xian', 'chengdu'];
+      cities.forEach((city, index) => {
+        data.push({
+          label: city,
+          key: index,
+          pinyin: pinyin[index]
+        });
+      });
+      return data;
+    };
+    return {
+      data: generateData(),
+      value: [],
+      filterMethod(query, item) {
+        return item.pinyin.indexOf(query) > -1;
+      },
+      // 遮罩层
+      loading: true,
+      readOnly:true,
+      // 导出遮罩层
+      exportLoading: false,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 应急演练表格数据
+      drillList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      open2:false,
+      //评估
+      dialogFormVisible:false,
+      // 演练类型字典
+      drillTypeOptions: [],
+      // 演练形式字典
+      drillFormOptions: [],
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        mont:null,
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+
+      }
+    };
+  },
+  created() {
+    this.getList();
+    this.getDicts("t_drill_type").then(response => {
+      this.drillTypeOptions = response.data;
+    });
+    this.getDicts("t_drill_form").then(response => {
+      this.drillFormOptions = response.data;
+    });
+  },
+  methods: {
+    /** 查询应急演练列表 */
+    getList() {
+      this.loading = true;
+      listDrill(this.queryParams).then(response => {
+        this.drillList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 演练类型字典翻译
+    drillTypeFormat(row, column) {
+      return this.selectDictLabel(this.drillTypeOptions, row.drillType);
+    },
+    // 演练形式字典翻译
+    drillFormFormat(row, column) {
+      return this.selectDictLabel(this.drillFormOptions, row.drillForm);
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        drillId: null,
+        drillName: null,
+        drillAddress: null,
+        drillUnit: null,
+        drillTime: null,
+        drillType: null,
+        drillForm: null,
+        drillObjective: null,
+        drillPeople: null,
+        drillContent: null,
+        assessment: null,
+        createTime: null,
+        createBy: null,
+        isDel: null,
+        evaluate:null,
+        measures: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.drillId)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      listStaff(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
+        console.log(response.rows)
+        this.cities = response.rows.staffName;
+        generateData.cities=['shanghai', 'beijing', 'guangzhou', 'shenzhen', 'nanjing', 'xian', 'chengdu']
+      });
+      this.reset();
+      this.open = true;
+      this.title = "添加应急演练";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const drillId = row.drillId || this.ids
+      getDrill(drillId).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改应急演练";
+      });
+    },
+    /** 评估按钮操作 */
+    assessment(row) {
+      this.reset();
+      const drillId = row.drillId || this.ids
+      getDrill(drillId).then(response => {
+        this.form = response.data;
+        this.dialogFormVisible = true;
+      });
+    },
+    /*评估提交*/
+    submitAssessment(){
+
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        console.log(this.form.drillId)
+        if (valid) {
+          if (this.form.drillId != null) {
+            updateDrill(this.form).then(response => {
+              this.msgSuccess("修改成功");
+              this.open = false;
+              this.dialogFormVisible=false;
+              this.getList();
+            });
+          } else {
+            addDrill(this.form).then(response => {
+              this.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 详情按钮操作 */
+    handleDetail(row) {
+      getDrill(row.drillId).then(response => {
+        this.form = response.data;
+        this.form.drillType = this.selectDictLabel(this.drillTypeOptions, row.drillType);
+        this.form.drillForm = this.selectDictLabel(this.drillFormOptions, row.drillForm);
+        this.open2 = true;
+    });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      //const drillIds = row.drillId || this.ids;
+      this.$confirm('是否确认删除数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return updateDrill({drillId:row.drillId,isDel:1});
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      const queryParams = this.queryParams;
+      this.$confirm('是否确认导出所有应急演练数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(() => {
+          this.exportLoading = true;
+          return exportDrill(queryParams);
+        }).then(response => {
+          this.download(response.msg);
+          this.exportLoading = false;
+        }).catch(() => {});
+    }
+  }
+};
+</script>
+<style>
+  .div-kuang{
+    background: white;
+    padding-top:20px ;
+    padding-right: 20px;
+    border-radius: 10px;
+  }
+  .division{
+    display:flex;
+    flex-direction:row;
+    justify-content:flex-start;
+  }
+</style>
+<style lang="scss" scoped>
+  ::v-deep .el-select{
+    width: 100%;
+  }
+  ::v-deep .el-dialog__header{
+    border-bottom: 1px solid #ccc;
+  }
+  ::v-deep .el-dialog{
+    background: #f7f7f7;
+  }
+</style>
diff --git a/danger-manage-web/vue.config.js b/danger-manage-web/vue.config.js
index 4f87d9126d74ab88888e16b9cc8482ca3f8898ba..a50b531dc553312cea9fa5e4b7a2e71acf36b003 100644
--- a/danger-manage-web/vue.config.js
+++ b/danger-manage-web/vue.config.js
@@ -34,8 +34,8 @@ module.exports = {
     proxy: {
       // detail: https://cli.vuejs.org/config/#devserver-proxy
       [process.env.VUE_APP_BASE_API]: {
-        target: process.env.VUE_APP_TARGET,
-        //target: `http://192.168.31.87:8908/dangerManage`,
+        //target: process.env.VUE_APP_TARGET,
+         target: `http://192.168.2.2:8908/dangerManage`,
         changeOrigin: true,
         pathRewrite: {
           ['^' + process.env.VUE_APP_BASE_API]: ''