Quellcode durchsuchen

Merge branch 'dev' into dev-api

LAPTOP-17SO984B\cnlis vor 5 Monaten
Ursprung
Commit
08a72155d9
35 geänderte Dateien mit 12252 neuen und 101 gelöschten Zeilen
  1. 381 73
      pla-sim/01_SQL/03_dev_backup/pla-chem-sim-dev-1.sql
  2. 2 2
      ruoyi-ui/.env.development
  3. 2 2
      ruoyi-ui/.env.production
  4. 2 2
      ruoyi-ui/.env.staging
  5. BIN
      ruoyi-ui/public/favicon.ico
  6. BIN
      ruoyi-ui/src/assets/images/login-background.jpg
  7. BIN
      ruoyi-ui/src/assets/logo/logo.png
  8. 6 6
      ruoyi-ui/src/layout/components/Navbar.vue
  9. 159 2
      ruoyi-ui/src/router/index.js
  10. 11 6
      ruoyi-ui/src/views/login.vue
  11. 111 0
      ruoyi-ui/src/views/people/exam/exam1.vue
  12. 306 0
      ruoyi-ui/src/views/people/exam/exam2.vue
  13. 229 0
      ruoyi-ui/src/views/people/exam/exam3.vue
  14. 681 0
      ruoyi-ui/src/views/people/exam/index.vue
  15. 72 0
      ruoyi-ui/src/views/people/practice/index.vue
  16. 302 0
      ruoyi-ui/src/views/people/practice/practice2.vue
  17. 229 0
      ruoyi-ui/src/views/people/practice/practice3.vue
  18. 238 0
      ruoyi-ui/src/views/people/score/index.vue
  19. 250 0
      ruoyi-ui/src/views/people/train/index.vue
  20. 114 0
      ruoyi-ui/src/views/people/train/train1.vue
  21. 301 0
      ruoyi-ui/src/views/people/train/train2.vue
  22. 229 0
      ruoyi-ui/src/views/people/train/train3.vue
  23. 477 0
      ruoyi-ui/src/views/peoples/classes/index.vue
  24. 395 0
      ruoyi-ui/src/views/peoples/current/index.vue
  25. 1092 0
      ruoyi-ui/src/views/peoples/exams/index.vue
  26. 459 0
      ruoyi-ui/src/views/peoples/major/index.vue
  27. 614 0
      ruoyi-ui/src/views/peoples/present/index.vue
  28. 849 0
      ruoyi-ui/src/views/peoples/score/index.vue
  29. 508 0
      ruoyi-ui/src/views/peoples/student/index.vue
  30. 3132 0
      ruoyi-ui/src/views/peoples/task/index.vue
  31. 1092 0
      ruoyi-ui/src/views/peoples/trains/index.vue
  32. 1 1
      ruoyi-ui/src/views/register.vue
  33. 4 4
      ruoyi-ui/src/views/system/user/profile/index.vue
  34. 2 2
      ruoyi-ui/src/views/system/user/profile/userInfo.vue
  35. 2 1
      ruoyi-ui/vue.config.js

+ 381 - 73
pla-sim/01_SQL/03_dev_backup/pla-chem-sim-dev-1.sql

@@ -1,17 +1,17 @@
 /*
  Navicat Premium Dump SQL
 
- Source Server         : 120.46.205.190
+ Source Server         : qdhome.iot321.top
  Source Server Type    : MySQL
- Source Server Version : 50738 (5.7.38-log)
- Source Host           : 120.46.205.190:3306
+ Source Server Version : 50740 (5.7.40-log)
+ Source Host           : qdhome.iot321.top:33003
  Source Schema         : pla-chem-sim-dev-1
 
  Target Server Type    : MySQL
- Target Server Version : 50738 (5.7.38-log)
+ Target Server Version : 50740 (5.7.40-log)
  File Encoding         : 65001
 
- Date: 06/12/2024 11:29:03
+ Date: 10/12/2024 21:25:13
 */
 
 SET NAMES utf8mb4;
@@ -44,7 +44,7 @@ CREATE TABLE `gen_table`  (
   `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
   `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
   PRIMARY KEY (`table_id`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '代码生成业务表' ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '代码生成业务表' ROW_FORMAT = DYNAMIC;
 
 -- ----------------------------
 -- Records of gen_table
@@ -78,7 +78,7 @@ CREATE TABLE `gen_table_column`  (
   `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者',
   `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
   PRIMARY KEY (`column_id`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '代码生成业务表字段' ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '代码生成业务表字段' ROW_FORMAT = DYNAMIC;
 
 -- ----------------------------
 -- Records of gen_table_column
@@ -95,7 +95,7 @@ CREATE TABLE `qrtz_blob_triggers`  (
   `blob_data` blob NULL COMMENT '存放持久化Trigger对象',
   PRIMARY KEY (`sched_name`, `trigger_name`, `trigger_group`) USING BTREE,
   CONSTRAINT `qrtz_blob_triggers_ibfk_1` FOREIGN KEY (`sched_name`, `trigger_name`, `trigger_group`) REFERENCES `qrtz_triggers` (`sched_name`, `trigger_name`, `trigger_group`) ON DELETE RESTRICT ON UPDATE RESTRICT
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'Blob类型的触发器表' ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'Blob类型的触发器表' ROW_FORMAT = DYNAMIC;
 
 -- ----------------------------
 -- Records of qrtz_blob_triggers
@@ -110,7 +110,7 @@ CREATE TABLE `qrtz_calendars`  (
   `calendar_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '日历名称',
   `calendar` blob NOT NULL COMMENT '存放持久化calendar对象',
   PRIMARY KEY (`sched_name`, `calendar_name`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '日历信息表' ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '日历信息表' ROW_FORMAT = DYNAMIC;
 
 -- ----------------------------
 -- Records of qrtz_calendars
@@ -128,7 +128,7 @@ CREATE TABLE `qrtz_cron_triggers`  (
   `time_zone_id` varchar(80) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '时区',
   PRIMARY KEY (`sched_name`, `trigger_name`, `trigger_group`) USING BTREE,
   CONSTRAINT `qrtz_cron_triggers_ibfk_1` FOREIGN KEY (`sched_name`, `trigger_name`, `trigger_group`) REFERENCES `qrtz_triggers` (`sched_name`, `trigger_name`, `trigger_group`) ON DELETE RESTRICT ON UPDATE RESTRICT
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'Cron类型的触发器表' ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'Cron类型的触发器表' ROW_FORMAT = DYNAMIC;
 
 -- ----------------------------
 -- Records of qrtz_cron_triggers
@@ -153,7 +153,7 @@ CREATE TABLE `qrtz_fired_triggers`  (
   `is_nonconcurrent` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '是否并发',
   `requests_recovery` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '是否接受恢复执行',
   PRIMARY KEY (`sched_name`, `entry_id`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '已触发的触发器表' ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '已触发的触发器表' ROW_FORMAT = DYNAMIC;
 
 -- ----------------------------
 -- Records of qrtz_fired_triggers
@@ -175,7 +175,7 @@ CREATE TABLE `qrtz_job_details`  (
   `requests_recovery` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '是否接受恢复执行',
   `job_data` blob NULL COMMENT '存放持久化job对象',
   PRIMARY KEY (`sched_name`, `job_name`, `job_group`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '任务详细信息表' ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '任务详细信息表' ROW_FORMAT = DYNAMIC;
 
 -- ----------------------------
 -- Records of qrtz_job_details
@@ -189,7 +189,7 @@ CREATE TABLE `qrtz_locks`  (
   `sched_name` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '调度名称',
   `lock_name` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '悲观锁名称',
   PRIMARY KEY (`sched_name`, `lock_name`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '存储的悲观锁信息表' ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '存储的悲观锁信息表' ROW_FORMAT = DYNAMIC;
 
 -- ----------------------------
 -- Records of qrtz_locks
@@ -203,7 +203,7 @@ CREATE TABLE `qrtz_paused_trigger_grps`  (
   `sched_name` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '调度名称',
   `trigger_group` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'qrtz_triggers表trigger_group的外键',
   PRIMARY KEY (`sched_name`, `trigger_group`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '暂停的触发器表' ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '暂停的触发器表' ROW_FORMAT = DYNAMIC;
 
 -- ----------------------------
 -- Records of qrtz_paused_trigger_grps
@@ -219,7 +219,7 @@ CREATE TABLE `qrtz_scheduler_state`  (
   `last_checkin_time` bigint(13) NOT NULL COMMENT '上次检查时间',
   `checkin_interval` bigint(13) NOT NULL COMMENT '检查间隔时间',
   PRIMARY KEY (`sched_name`, `instance_name`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '调度器状态表' ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '调度器状态表' ROW_FORMAT = DYNAMIC;
 
 -- ----------------------------
 -- Records of qrtz_scheduler_state
@@ -238,7 +238,7 @@ CREATE TABLE `qrtz_simple_triggers`  (
   `times_triggered` bigint(10) NOT NULL COMMENT '已经触发的次数',
   PRIMARY KEY (`sched_name`, `trigger_name`, `trigger_group`) USING BTREE,
   CONSTRAINT `qrtz_simple_triggers_ibfk_1` FOREIGN KEY (`sched_name`, `trigger_name`, `trigger_group`) REFERENCES `qrtz_triggers` (`sched_name`, `trigger_name`, `trigger_group`) ON DELETE RESTRICT ON UPDATE RESTRICT
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '简单触发器的信息表' ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '简单触发器的信息表' ROW_FORMAT = DYNAMIC;
 
 -- ----------------------------
 -- Records of qrtz_simple_triggers
@@ -265,7 +265,7 @@ CREATE TABLE `qrtz_simprop_triggers`  (
   `bool_prop_2` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'Boolean类型的trigger的第二个参数',
   PRIMARY KEY (`sched_name`, `trigger_name`, `trigger_group`) USING BTREE,
   CONSTRAINT `qrtz_simprop_triggers_ibfk_1` FOREIGN KEY (`sched_name`, `trigger_name`, `trigger_group`) REFERENCES `qrtz_triggers` (`sched_name`, `trigger_name`, `trigger_group`) ON DELETE RESTRICT ON UPDATE RESTRICT
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '同步机制的行锁表' ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '同步机制的行锁表' ROW_FORMAT = DYNAMIC;
 
 -- ----------------------------
 -- Records of qrtz_simprop_triggers
@@ -295,7 +295,7 @@ CREATE TABLE `qrtz_triggers`  (
   PRIMARY KEY (`sched_name`, `trigger_name`, `trigger_group`) USING BTREE,
   INDEX `sched_name`(`sched_name`, `job_name`, `job_group`) USING BTREE,
   CONSTRAINT `qrtz_triggers_ibfk_1` FOREIGN KEY (`sched_name`, `job_name`, `job_group`) REFERENCES `qrtz_job_details` (`sched_name`, `job_name`, `job_group`) ON DELETE RESTRICT ON UPDATE RESTRICT
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '触发器详细信息表' ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '触发器详细信息表' ROW_FORMAT = DYNAMIC;
 
 -- ----------------------------
 -- Records of qrtz_triggers
@@ -309,7 +309,7 @@ CREATE TABLE `sim_add_on_dept`  (
   `dept_id` bigint(20) NOT NULL COMMENT '班级ID/部门ID',
   `major_id` bigint(20) NOT NULL COMMENT '专业ID',
   PRIMARY KEY (`dept_id`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'sim-班级/部门附加表' ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'sim-班级/部门附加表' ROW_FORMAT = DYNAMIC;
 
 -- ----------------------------
 -- Records of sim_add_on_dept
@@ -322,7 +322,7 @@ DROP TABLE IF EXISTS `sim_add_on_user`;
 CREATE TABLE `sim_add_on_user`  (
   `user_id` bigint(20) NOT NULL COMMENT '用户ID',
   PRIMARY KEY (`user_id`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'sim-学员/教师/用户附加表' ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'sim-学员/教师/用户附加表' ROW_FORMAT = DYNAMIC;
 
 -- ----------------------------
 -- Records of sim_add_on_user
@@ -338,7 +338,7 @@ CREATE TABLE `sim_component`  (
   `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '更换件名称',
   `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
   PRIMARY KEY (`component_id`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'sim-更换件表' ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'sim-更换件表' ROW_FORMAT = DYNAMIC;
 
 -- ----------------------------
 -- Records of sim_component
@@ -358,7 +358,7 @@ CREATE TABLE `sim_fault`  (
   `hareware_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '硬件指令编码',
   `order_num` int(4) NULL DEFAULT NULL COMMENT '显示顺序',
   PRIMARY KEY (`fault_id`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'sim-故障表' ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'sim-故障表' ROW_FORMAT = DYNAMIC;
 
 -- ----------------------------
 -- Records of sim_fault
@@ -373,7 +373,7 @@ CREATE TABLE `sim_major`  (
   `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '专业名称',
   `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
   PRIMARY KEY (`major_id`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'sim-专业表' ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'sim-专业表' ROW_FORMAT = DYNAMIC;
 
 -- ----------------------------
 -- Records of sim_major
@@ -396,7 +396,7 @@ CREATE TABLE `sim_real_exam`  (
   `logout_time` datetime NULL DEFAULT NULL COMMENT '登出时间',
   `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
   PRIMARY KEY (`real_exam_id`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'sim-考试表' ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'sim-考试表' ROW_FORMAT = DYNAMIC;
 
 -- ----------------------------
 -- Records of sim_real_exam
@@ -420,7 +420,7 @@ CREATE TABLE `sim_real_exam_collection`  (
   `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
   `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
   PRIMARY KEY (`real_exam_collection_id`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'sim-考试集合表' ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'sim-考试集合表' ROW_FORMAT = DYNAMIC;
 
 -- ----------------------------
 -- Records of sim_real_exam_collection
@@ -435,7 +435,7 @@ CREATE TABLE `sim_real_exam_collection_dept`  (
   `real_exam_collection_id` bigint(20) NULL DEFAULT NULL COMMENT '正式考试集合ID',
   `dept_id` bigint(20) NULL DEFAULT NULL COMMENT '班级ID/部门ID',
   PRIMARY KEY (`rel_id`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'sim-考试集合班级关联表' ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'sim-考试集合班级关联表' ROW_FORMAT = DYNAMIC;
 
 -- ----------------------------
 -- Records of sim_real_exam_collection_dept
@@ -454,7 +454,7 @@ CREATE TABLE `sim_real_exam_component`  (
   `create_by_user_id` bigint(20) NULL DEFAULT NULL COMMENT '创建学员ID/用户ID',
   `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
   PRIMARY KEY (`rel_id`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'sim-考试更换件关联表' ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'sim-考试更换件关联表' ROW_FORMAT = DYNAMIC;
 
 -- ----------------------------
 -- Records of sim_real_exam_component
@@ -473,13 +473,43 @@ CREATE TABLE `sim_real_exam_fault`  (
   `minus` int(2) NULL DEFAULT NULL COMMENT '减分值',
   `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
   PRIMARY KEY (`ref_id`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'sim-考试故障关联表' ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'sim-考试故障关联表' ROW_FORMAT = DYNAMIC;
 
 -- ----------------------------
 -- Records of sim_real_exam_fault
 -- ----------------------------
 
 -- ----------------------------
+-- Table structure for sim_sim
+-- ----------------------------
+DROP TABLE IF EXISTS `sim_sim`;
+CREATE TABLE `sim_sim`  (
+  `sim_sim_id` bigint(20) NOT NULL,
+  `sim_type` char(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
+  `sn` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '模拟器序列号',
+  `operation_num` int(4) NULL DEFAULT NULL COMMENT '操作编号',
+  `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`sim_sim_id`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'sim-模拟器表' ROW_FORMAT = DYNAMIC;
+
+-- ----------------------------
+-- Records of sim_sim
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for sim_sim_hardware_com
+-- ----------------------------
+DROP TABLE IF EXISTS `sim_sim_hardware_com`;
+CREATE TABLE `sim_sim_hardware_com`  (
+  `sim_sim_hardware_com_id` bigint(20) NOT NULL,
+  PRIMARY KEY (`sim_sim_hardware_com_id`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC;
+
+-- ----------------------------
+-- Records of sim_sim_hardware_com
+-- ----------------------------
+
+-- ----------------------------
 -- Table structure for sim_task
 -- ----------------------------
 DROP TABLE IF EXISTS `sim_task`;
@@ -492,7 +522,7 @@ CREATE TABLE `sim_task`  (
   `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
   `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
   PRIMARY KEY (`task_id`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'sim-任务表' ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'sim-任务表' ROW_FORMAT = DYNAMIC;
 
 -- ----------------------------
 -- Records of sim_task
@@ -507,7 +537,7 @@ CREATE TABLE `sim_task_fault`  (
   `task_id` bigint(20) NOT NULL,
   `fault_id` bigint(20) NOT NULL,
   PRIMARY KEY (`rel_id`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'sim-任务故障关联表' ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'sim-任务故障关联表' ROW_FORMAT = DYNAMIC;
 
 -- ----------------------------
 -- Records of sim_task_fault
@@ -527,7 +557,7 @@ CREATE TABLE `sim_test`  (
   `address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
   `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
   PRIMARY KEY (`test_id`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'sim-test' ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'sim-test' ROW_FORMAT = DYNAMIC;
 
 -- ----------------------------
 -- Records of sim_test
@@ -549,7 +579,7 @@ CREATE TABLE `sys_config`  (
   `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
   `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
   PRIMARY KEY (`config_id`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 100 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '参数配置表' ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '参数配置表' ROW_FORMAT = DYNAMIC;
 
 -- ----------------------------
 -- Records of sys_config
@@ -581,21 +611,14 @@ CREATE TABLE `sys_dept`  (
   `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者',
   `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
   PRIMARY KEY (`dept_id`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 200 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '部门表' ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB AUTO_INCREMENT = 112 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '部门表' ROW_FORMAT = DYNAMIC;
 
 -- ----------------------------
 -- Records of sys_dept
 -- ----------------------------
-INSERT INTO `sys_dept` VALUES (100, 0, '0', '若依科技', 0, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', '2024-12-06 11:22:07', '', NULL);
-INSERT INTO `sys_dept` VALUES (101, 100, '0,100', '深圳总公司', 1, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', '2024-12-06 11:22:07', '', NULL);
-INSERT INTO `sys_dept` VALUES (102, 100, '0,100', '长沙分公司', 2, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', '2024-12-06 11:22:07', '', NULL);
-INSERT INTO `sys_dept` VALUES (103, 101, '0,100,101', '研发部门', 1, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', '2024-12-06 11:22:07', '', NULL);
-INSERT INTO `sys_dept` VALUES (104, 101, '0,100,101', '市场部门', 2, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', '2024-12-06 11:22:07', '', NULL);
-INSERT INTO `sys_dept` VALUES (105, 101, '0,100,101', '测试部门', 3, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', '2024-12-06 11:22:07', '', NULL);
-INSERT INTO `sys_dept` VALUES (106, 101, '0,100,101', '财务部门', 4, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', '2024-12-06 11:22:07', '', NULL);
-INSERT INTO `sys_dept` VALUES (107, 101, '0,100,101', '运维部门', 5, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', '2024-12-06 11:22:07', '', NULL);
-INSERT INTO `sys_dept` VALUES (108, 102, '0,100,102', '市场部门', 1, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', '2024-12-06 11:22:07', '', NULL);
-INSERT INTO `sys_dept` VALUES (109, 102, '0,100,102', '财务部门', 2, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', '2024-12-06 11:22:07', '', NULL);
+INSERT INTO `sys_dept` VALUES (100, 0, '0', '维修模拟训练平台', 0, '', '15888888888', 'ry@qq.com', '0', '0', 'admin', '2024-12-06 11:22:07', 'admin', '2024-12-09 20:21:48');
+INSERT INTO `sys_dept` VALUES (110, 100, '0,100', '测试班级1', 1, NULL, NULL, NULL, '0', '0', 'admin', '2024-12-09 21:46:32', '', NULL);
+INSERT INTO `sys_dept` VALUES (111, 100, '0,100', '测试班级2', 2, NULL, NULL, NULL, '0', '0', 'admin', '2024-12-09 21:51:23', '', NULL);
 
 -- ----------------------------
 -- Table structure for sys_dict_data
@@ -617,7 +640,7 @@ CREATE TABLE `sys_dict_data`  (
   `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
   `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
   PRIMARY KEY (`dict_code`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 100 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '字典数据表' ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB AUTO_INCREMENT = 35 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '字典数据表' ROW_FORMAT = DYNAMIC;
 
 -- ----------------------------
 -- Records of sys_dict_data
@@ -651,6 +674,11 @@ INSERT INTO `sys_dict_data` VALUES (26, 8, '生成代码', '8', 'sys_oper_type',
 INSERT INTO `sys_dict_data` VALUES (27, 9, '清空数据', '9', 'sys_oper_type', '', 'danger', 'N', '0', 'admin', '2024-12-06 11:22:07', '', NULL, '清空操作');
 INSERT INTO `sys_dict_data` VALUES (28, 1, '成功', '0', 'sys_common_status', '', 'primary', 'N', '0', 'admin', '2024-12-06 11:22:07', '', NULL, '正常状态');
 INSERT INTO `sys_dict_data` VALUES (29, 2, '失败', '1', 'sys_common_status', '', 'danger', 'N', '0', 'admin', '2024-12-06 11:22:07', '', NULL, '停用状态');
+INSERT INTO `sys_dict_data` VALUES (30, 1, 'FZD04B型侦毒器', '1', 'sim_equip_type', NULL, 'default', 'N', '0', 'admin', '2024-12-09 09:50:17', '', NULL, NULL);
+INSERT INTO `sys_dict_data` VALUES (31, 2, 'FZB006型毒剂报警器', '2', 'sim_equip_type', NULL, 'default', 'N', '0', 'admin', '2024-12-09 09:50:26', '', NULL, NULL);
+INSERT INTO `sys_dict_data` VALUES (32, 3, '防化兵用毒剂报警器', '3', 'sim_equip_type', NULL, 'default', 'N', '0', 'admin', '2024-12-09 09:50:39', '', NULL, NULL);
+INSERT INTO `sys_dict_data` VALUES (33, 1, '随机', '1', 'sys_topic_way', NULL, 'default', 'N', '0', 'admin', '2024-12-10 01:57:03', '', NULL, NULL);
+INSERT INTO `sys_dict_data` VALUES (34, 2, '自选', '2', 'sys_topic_way', NULL, 'default', 'N', '0', 'admin', '2024-12-10 01:57:10', 'admin', '2024-12-10 01:57:20', NULL);
 
 -- ----------------------------
 -- Table structure for sys_dict_type
@@ -668,7 +696,7 @@ CREATE TABLE `sys_dict_type`  (
   `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
   PRIMARY KEY (`dict_id`) USING BTREE,
   UNIQUE INDEX `dict_type`(`dict_type`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 100 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '字典类型表' ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB AUTO_INCREMENT = 13 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '字典类型表' ROW_FORMAT = DYNAMIC;
 
 -- ----------------------------
 -- Records of sys_dict_type
@@ -683,6 +711,8 @@ INSERT INTO `sys_dict_type` VALUES (7, '通知类型', 'sys_notice_type', '0', '
 INSERT INTO `sys_dict_type` VALUES (8, '通知状态', 'sys_notice_status', '0', 'admin', '2024-12-06 11:22:07', '', NULL, '通知状态列表');
 INSERT INTO `sys_dict_type` VALUES (9, '操作类型', 'sys_oper_type', '0', 'admin', '2024-12-06 11:22:07', '', NULL, '操作类型列表');
 INSERT INTO `sys_dict_type` VALUES (10, '系统状态', 'sys_common_status', '0', 'admin', '2024-12-06 11:22:07', '', NULL, '登录状态列表');
+INSERT INTO `sys_dict_type` VALUES (11, '模拟器型号', 'sim_equip_type', '0', 'admin', '2024-12-09 09:49:57', 'admin', '2024-12-10 01:55:10', NULL);
+INSERT INTO `sys_dict_type` VALUES (12, '出题方式', 'sys_topic_way', '0', 'admin', '2024-12-10 01:54:56', '', NULL, '出题方式');
 
 -- ----------------------------
 -- Table structure for sys_job
@@ -703,7 +733,7 @@ CREATE TABLE `sys_job`  (
   `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
   `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注信息',
   PRIMARY KEY (`job_id`, `job_name`, `job_group`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 100 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '定时任务调度表' ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '定时任务调度表' ROW_FORMAT = DYNAMIC;
 
 -- ----------------------------
 -- Records of sys_job
@@ -726,7 +756,7 @@ CREATE TABLE `sys_job_log`  (
   `exception_info` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '异常信息',
   `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
   PRIMARY KEY (`job_log_id`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '定时任务调度日志表' ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '定时任务调度日志表' ROW_FORMAT = DYNAMIC;
 
 -- ----------------------------
 -- Records of sys_job_log
@@ -749,13 +779,136 @@ CREATE TABLE `sys_logininfor`  (
   PRIMARY KEY (`info_id`) USING BTREE,
   INDEX `idx_sys_logininfor_s`(`status`) USING BTREE,
   INDEX `idx_sys_logininfor_lt`(`login_time`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 102 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '系统访问记录' ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB AUTO_INCREMENT = 225 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '系统访问记录' ROW_FORMAT = DYNAMIC;
 
 -- ----------------------------
 -- Records of sys_logininfor
 -- ----------------------------
 INSERT INTO `sys_logininfor` VALUES (100, 'admin', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '1', '验证码错误', '2024-12-06 11:24:41');
 INSERT INTO `sys_logininfor` VALUES (101, 'admin', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2024-12-06 11:24:44');
+INSERT INTO `sys_logininfor` VALUES (102, 'admin', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2024-12-06 17:27:41');
+INSERT INTO `sys_logininfor` VALUES (103, 'admin', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '0', '退出成功', '2024-12-06 17:59:12');
+INSERT INTO `sys_logininfor` VALUES (104, 'admin', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2024-12-06 17:59:51');
+INSERT INTO `sys_logininfor` VALUES (105, 'admin', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2024-12-06 19:41:42');
+INSERT INTO `sys_logininfor` VALUES (106, 'admin', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2024-12-07 10:53:00');
+INSERT INTO `sys_logininfor` VALUES (107, 'admin', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2024-12-07 11:54:39');
+INSERT INTO `sys_logininfor` VALUES (108, 'admin', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '0', '退出成功', '2024-12-07 11:56:21');
+INSERT INTO `sys_logininfor` VALUES (109, 'admin', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2024-12-07 11:56:38');
+INSERT INTO `sys_logininfor` VALUES (110, 'admin', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2024-12-07 12:15:03');
+INSERT INTO `sys_logininfor` VALUES (111, 'admin', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2024-12-07 12:49:23');
+INSERT INTO `sys_logininfor` VALUES (112, 'admin', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '1', '验证码错误', '2024-12-07 17:43:25');
+INSERT INTO `sys_logininfor` VALUES (113, 'admin', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2024-12-07 17:43:26');
+INSERT INTO `sys_logininfor` VALUES (114, 'admin', '27.210.73.124', 'XX XX', 'Chrome 13', 'Windows 10', '0', '登录成功', '2024-12-07 17:43:26');
+INSERT INTO `sys_logininfor` VALUES (115, 'admin', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2024-12-07 17:43:27');
+INSERT INTO `sys_logininfor` VALUES (116, 'admin', '27.210.73.124', 'XX XX', 'Chrome 13', 'Windows 10', '0', '登录成功', '2024-12-07 17:43:27');
+INSERT INTO `sys_logininfor` VALUES (117, 'admin', '27.210.73.124', 'XX XX', 'Chrome 13', 'Windows 10', '0', '登录成功', '2024-12-07 17:43:27');
+INSERT INTO `sys_logininfor` VALUES (118, 'admin', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2024-12-07 17:43:27');
+INSERT INTO `sys_logininfor` VALUES (119, 'admin', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2024-12-07 17:43:27');
+INSERT INTO `sys_logininfor` VALUES (120, 'admin', '112.9.126.202', 'XX XX', 'Chrome 13', 'Windows 10', '0', '登录成功', '2024-12-07 17:43:27');
+INSERT INTO `sys_logininfor` VALUES (121, 'admin', '112.9.126.202', 'XX XX', 'Chrome 13', 'Windows 10', '0', '登录成功', '2024-12-07 17:43:27');
+INSERT INTO `sys_logininfor` VALUES (122, 'admin', '27.210.73.124', 'XX XX', 'Chrome 13', 'Windows 10', '0', '登录成功', '2024-12-07 17:43:27');
+INSERT INTO `sys_logininfor` VALUES (123, 'admin', '27.210.73.124', 'XX XX', 'Chrome 13', 'Windows 10', '0', '登录成功', '2024-12-07 17:43:27');
+INSERT INTO `sys_logininfor` VALUES (124, 'admin', '27.210.73.124', 'XX XX', 'Chrome 13', 'Windows 10', '0', '登录成功', '2024-12-07 17:43:27');
+INSERT INTO `sys_logininfor` VALUES (125, 'admin', '112.9.126.202', 'XX XX', 'Chrome 13', 'Windows 10', '0', '登录成功', '2024-12-07 17:43:27');
+INSERT INTO `sys_logininfor` VALUES (126, 'admin', '27.210.73.124', 'XX XX', 'Chrome 13', 'Windows 10', '0', '登录成功', '2024-12-07 17:43:27');
+INSERT INTO `sys_logininfor` VALUES (127, 'admin', '27.210.73.124', 'XX XX', 'Chrome 13', 'Windows 10', '0', '登录成功', '2024-12-07 17:43:27');
+INSERT INTO `sys_logininfor` VALUES (128, 'admin', '112.9.126.202', 'XX XX', 'Chrome 13', 'Windows 10', '1', '验证码已失效', '2024-12-07 18:50:42');
+INSERT INTO `sys_logininfor` VALUES (129, 'admin', '111.193.138.237', 'XX XX', 'Chrome 12', 'Windows 10', '0', '登录成功', '2024-12-07 18:50:42');
+INSERT INTO `sys_logininfor` VALUES (130, 'admin', '111.193.138.237', 'XX XX', 'Chrome 12', 'Windows 10', '0', '登录成功', '2024-12-07 18:50:42');
+INSERT INTO `sys_logininfor` VALUES (131, 'admin', '112.9.126.202', 'XX XX', 'Chrome 13', 'Windows 10', '0', '登录成功', '2024-12-07 18:50:42');
+INSERT INTO `sys_logininfor` VALUES (132, 'admin', '112.9.126.202', 'XX XX', 'Chrome 13', 'Windows 10', '0', '登录成功', '2024-12-07 18:50:42');
+INSERT INTO `sys_logininfor` VALUES (133, 'admin', '111.193.138.237', 'XX XX', 'Chrome 12', 'Windows 10', '1', '验证码已失效', '2024-12-08 11:31:50');
+INSERT INTO `sys_logininfor` VALUES (134, 'admin', '121.40.49.195', 'XX XX', 'Unknown', 'Unknown', '1', '验证码已失效', '2024-12-08 11:31:50');
+INSERT INTO `sys_logininfor` VALUES (135, 'admin', '120.26.6.209', 'XX XX', 'Unknown', 'Unknown', '1', '验证码已失效', '2024-12-08 11:31:50');
+INSERT INTO `sys_logininfor` VALUES (136, 'admin', '121.40.34.84', 'XX XX', 'Unknown', 'Unknown', '1', '验证码已失效', '2024-12-08 11:31:50');
+INSERT INTO `sys_logininfor` VALUES (137, 'admin', '111.193.138.237', 'XX XX', 'Chrome 12', 'Windows 10', '1', '验证码已失效', '2024-12-08 11:31:50');
+INSERT INTO `sys_logininfor` VALUES (138, 'admin', '111.193.138.237', 'XX XX', 'Chrome 12', 'Linux', '0', '登录成功', '2024-12-08 11:31:50');
+INSERT INTO `sys_logininfor` VALUES (139, 'admin', '172.30.90.26', '内网IP', 'Chrome 13', 'Windows 10', '1', '验证码错误', '2024-12-08 13:26:05');
+INSERT INTO `sys_logininfor` VALUES (140, 'admin', '172.30.90.26', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2024-12-08 13:26:09');
+INSERT INTO `sys_logininfor` VALUES (141, 'admin', '172.30.90.26', '内网IP', 'Chrome 13', 'Windows 10', '0', '退出成功', '2024-12-08 13:27:13');
+INSERT INTO `sys_logininfor` VALUES (142, 'admin', '192.168.9.101', '内网IP', 'Chrome 13', 'Windows 10', '1', '验证码错误', '2024-12-08 18:44:55');
+INSERT INTO `sys_logininfor` VALUES (143, 'admin', '192.168.9.101', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2024-12-08 18:44:59');
+INSERT INTO `sys_logininfor` VALUES (144, 'admin', '192.168.9.101', '内网IP', 'Chrome 13', 'Windows 10', '0', '退出成功', '2024-12-08 18:46:59');
+INSERT INTO `sys_logininfor` VALUES (145, 'admin', '192.168.9.101', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2024-12-08 18:47:08');
+INSERT INTO `sys_logininfor` VALUES (146, 'admin', '192.168.9.101', '内网IP', 'Chrome 13', 'Windows 10', '1', '用户不存在/密码错误', '2024-12-08 22:08:38');
+INSERT INTO `sys_logininfor` VALUES (147, 'admin', '192.168.9.101', '内网IP', 'Chrome 13', 'Windows 10', '1', '用户不存在/密码错误', '2024-12-08 22:08:48');
+INSERT INTO `sys_logininfor` VALUES (148, 'admin', '192.168.9.101', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2024-12-08 22:08:59');
+INSERT INTO `sys_logininfor` VALUES (149, 'admin', '192.168.9.101', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2024-12-08 23:56:59');
+INSERT INTO `sys_logininfor` VALUES (150, 'admin', '192.168.9.101', '内网IP', 'Chrome 13', 'Windows 10', '0', '退出成功', '2024-12-08 23:57:23');
+INSERT INTO `sys_logininfor` VALUES (151, 'admin', '192.168.9.101', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2024-12-08 23:57:33');
+INSERT INTO `sys_logininfor` VALUES (152, 'admin', '192.168.9.101', '内网IP', 'Chrome 13', 'Windows 10', '0', '退出成功', '2024-12-08 23:58:24');
+INSERT INTO `sys_logininfor` VALUES (153, 'admin', '192.168.9.101', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2024-12-08 23:58:39');
+INSERT INTO `sys_logininfor` VALUES (154, 'admin', '192.168.9.101', '内网IP', 'Chrome 13', 'Windows 10', '0', '退出成功', '2024-12-08 23:58:44');
+INSERT INTO `sys_logininfor` VALUES (155, 'admin', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '1', '用户不存在/密码错误', '2024-12-09 09:11:49');
+INSERT INTO `sys_logininfor` VALUES (156, 'admin', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '1', '用户不存在/密码错误', '2024-12-09 09:12:22');
+INSERT INTO `sys_logininfor` VALUES (157, 'admin', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '1', '用户不存在/密码错误', '2024-12-09 09:13:14');
+INSERT INTO `sys_logininfor` VALUES (158, 'admin', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '1', '用户不存在/密码错误', '2024-12-09 09:15:26');
+INSERT INTO `sys_logininfor` VALUES (159, 'admin', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '1', '验证码错误', '2024-12-09 09:16:06');
+INSERT INTO `sys_logininfor` VALUES (160, 'admin', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2024-12-09 09:16:30');
+INSERT INTO `sys_logininfor` VALUES (161, 'admin', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2024-12-09 09:35:23');
+INSERT INTO `sys_logininfor` VALUES (162, 'admin', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '0', '退出成功', '2024-12-09 09:35:36');
+INSERT INTO `sys_logininfor` VALUES (163, 'admin', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2024-12-09 09:36:23');
+INSERT INTO `sys_logininfor` VALUES (164, 'admin', '60.209.103.71', 'XX XX', 'Chrome 13', 'Windows 10', '1', '验证码已失效', '2024-12-09 18:44:21');
+INSERT INTO `sys_logininfor` VALUES (165, 'admin', '60.209.103.71', 'XX XX', 'Chrome 13', 'Windows 10', '1', '验证码错误', '2024-12-09 18:44:27');
+INSERT INTO `sys_logininfor` VALUES (166, 'admin', '60.209.103.71', 'XX XX', 'Chrome 13', 'Windows 10', '0', '登录成功', '2024-12-09 18:44:32');
+INSERT INTO `sys_logininfor` VALUES (167, 'admin', '60.209.103.71', 'XX XX', 'Chrome 13', 'Windows 10', '0', '退出成功', '2024-12-09 18:44:37');
+INSERT INTO `sys_logininfor` VALUES (168, 'admin', '60.209.103.71', 'XX XX', 'Chrome 13', 'Windows 10', '1', '验证码已失效', '2024-12-09 18:47:34');
+INSERT INTO `sys_logininfor` VALUES (169, 'admin', '60.209.103.71', 'XX XX', 'Chrome 13', 'Windows 10', '0', '登录成功', '2024-12-09 18:47:38');
+INSERT INTO `sys_logininfor` VALUES (170, 'admin', '112.255.69.94', 'XX XX', 'Chrome 11', 'Windows 10', '0', '登录成功', '2024-12-09 18:48:22');
+INSERT INTO `sys_logininfor` VALUES (171, 'admin', '60.209.103.71', 'XX XX', 'Chrome 13', 'Windows 10', '0', '退出成功', '2024-12-09 18:48:51');
+INSERT INTO `sys_logininfor` VALUES (172, 'admin', '60.209.103.71', 'XX XX', 'Chrome 13', 'Windows 10', '0', '登录成功', '2024-12-09 18:49:02');
+INSERT INTO `sys_logininfor` VALUES (173, 'admin', '60.209.103.71', 'XX XX', 'Chrome 13', 'Windows 10', '0', '退出成功', '2024-12-09 18:50:11');
+INSERT INTO `sys_logininfor` VALUES (174, 'admin', '60.209.103.71', 'XX XX', 'Chrome 13', 'Windows 10', '0', '登录成功', '2024-12-09 18:50:21');
+INSERT INTO `sys_logininfor` VALUES (175, 'admin', '60.209.103.71', 'XX XX', 'Chrome 13', 'Windows 10', '0', '退出成功', '2024-12-09 18:51:11');
+INSERT INTO `sys_logininfor` VALUES (176, 'admin', '60.209.103.71', 'XX XX', 'Chrome 13', 'Windows 10', '1', '用户不存在/密码错误', '2024-12-09 18:51:32');
+INSERT INTO `sys_logininfor` VALUES (177, 'admin', '60.209.103.71', 'XX XX', 'Chrome 13', 'Windows 10', '0', '登录成功', '2024-12-09 19:00:21');
+INSERT INTO `sys_logininfor` VALUES (178, 'admin', '60.209.103.71', 'XX XX', 'Chrome 13', 'Windows 10', '0', '退出成功', '2024-12-09 19:01:39');
+INSERT INTO `sys_logininfor` VALUES (179, 'admin', '112.255.69.94', 'XX XX', 'Chrome 11', 'Windows 10', '0', '退出成功', '2024-12-09 19:18:55');
+INSERT INTO `sys_logininfor` VALUES (180, 'admin', '112.255.69.94', 'XX XX', 'Chrome 11', 'Windows 10', '0', '登录成功', '2024-12-09 19:19:20');
+INSERT INTO `sys_logininfor` VALUES (181, 'admin', '112.255.69.94', 'XX XX', 'Chrome 11', 'Windows 10', '0', '退出成功', '2024-12-09 19:28:02');
+INSERT INTO `sys_logininfor` VALUES (182, 'admin', '112.255.69.94', 'XX XX', 'Chrome 11', 'Windows 10', '1', '用户不存在/密码错误', '2024-12-09 19:29:19');
+INSERT INTO `sys_logininfor` VALUES (183, 'admin', '112.255.69.94', 'XX XX', 'Chrome 11', 'Windows 10', '0', '登录成功', '2024-12-09 19:29:35');
+INSERT INTO `sys_logininfor` VALUES (184, 'admin', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '1', '用户不存在/密码错误', '2024-12-09 20:09:52');
+INSERT INTO `sys_logininfor` VALUES (185, 'admin', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '1', '用户不存在/密码错误', '2024-12-09 20:10:46');
+INSERT INTO `sys_logininfor` VALUES (186, 'admin', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2024-12-09 20:11:25');
+INSERT INTO `sys_logininfor` VALUES (187, 'admin', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '0', '退出成功', '2024-12-09 20:40:36');
+INSERT INTO `sys_logininfor` VALUES (188, 'admin', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2024-12-09 08:10:06');
+INSERT INTO `sys_logininfor` VALUES (189, 'admin', '60.209.103.71', 'XX XX', 'Chrome 13', 'Windows 10', '0', '登录成功', '2024-12-09 08:34:57');
+INSERT INTO `sys_logininfor` VALUES (190, 'admin', '60.209.103.71', 'XX XX', 'Chrome 13', 'Windows 10', '0', '退出成功', '2024-12-09 08:35:35');
+INSERT INTO `sys_logininfor` VALUES (191, 'admin', '60.209.103.71', 'XX XX', 'Chrome 13', 'Windows 10', '1', '用户不存在/密码错误', '2024-12-09 08:37:32');
+INSERT INTO `sys_logininfor` VALUES (192, 'admin', '60.209.103.71', 'XX XX', 'Chrome 13', 'Windows 10', '1', '验证码错误', '2024-12-09 08:37:39');
+INSERT INTO `sys_logininfor` VALUES (193, 'admin', '60.209.103.71', 'XX XX', 'Chrome 13', 'Windows 10', '0', '登录成功', '2024-12-09 08:37:42');
+INSERT INTO `sys_logininfor` VALUES (194, 'admin', '60.209.103.71', 'XX XX', 'Chrome 13', 'Windows 10', '0', '退出成功', '2024-12-09 08:39:33');
+INSERT INTO `sys_logininfor` VALUES (195, 'admin', '60.209.103.71', 'XX XX', 'Chrome 13', 'Windows 10', '0', '登录成功', '2024-12-09 08:39:45');
+INSERT INTO `sys_logininfor` VALUES (196, 'admin', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2024-12-09 20:57:31');
+INSERT INTO `sys_logininfor` VALUES (197, 'admin', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2024-12-09 20:58:50');
+INSERT INTO `sys_logininfor` VALUES (198, 'teacher', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2024-12-09 21:02:34');
+INSERT INTO `sys_logininfor` VALUES (199, 'teacher', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '0', '退出成功', '2024-12-09 21:05:25');
+INSERT INTO `sys_logininfor` VALUES (200, 'teacher', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2024-12-09 21:14:55');
+INSERT INTO `sys_logininfor` VALUES (201, 'teacher', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2024-12-09 21:15:01');
+INSERT INTO `sys_logininfor` VALUES (202, 'admin', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '0', '退出成功', '2024-12-09 22:12:09');
+INSERT INTO `sys_logininfor` VALUES (203, 'admin', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2024-12-09 22:17:23');
+INSERT INTO `sys_logininfor` VALUES (204, 'admin', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '1', '验证码错误', '2024-12-09 22:17:36');
+INSERT INTO `sys_logininfor` VALUES (205, 'admin', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '0', '退出成功', '2024-12-09 22:41:47');
+INSERT INTO `sys_logininfor` VALUES (206, 'admin', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2024-12-09 22:49:23');
+INSERT INTO `sys_logininfor` VALUES (207, 'admin', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2024-12-09 22:52:16');
+INSERT INTO `sys_logininfor` VALUES (208, 'admin', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2024-12-10 00:32:46');
+INSERT INTO `sys_logininfor` VALUES (209, 'teacher', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2024-12-10 00:33:08');
+INSERT INTO `sys_logininfor` VALUES (210, 'admin', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2024-12-10 01:00:23');
+INSERT INTO `sys_logininfor` VALUES (211, 'teacher', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2024-12-10 01:14:01');
+INSERT INTO `sys_logininfor` VALUES (212, 'admin', '127.0.0.1', '内网IP', 'Firefox 13', 'Windows 10', '0', '登录成功', '2024-12-10 01:30:42');
+INSERT INTO `sys_logininfor` VALUES (213, 'teacher', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '0', '退出成功', '2024-12-10 01:40:48');
+INSERT INTO `sys_logininfor` VALUES (214, 'teacher', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2024-12-10 01:42:10');
+INSERT INTO `sys_logininfor` VALUES (215, 'admin', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '0', '退出成功', '2024-12-10 04:41:09');
+INSERT INTO `sys_logininfor` VALUES (216, 'admin', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2024-12-10 04:42:49');
+INSERT INTO `sys_logininfor` VALUES (217, 'admin', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '1', '用户不存在/密码错误', '2024-12-10 08:03:10');
+INSERT INTO `sys_logininfor` VALUES (218, 'admin', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '1', '验证码错误', '2024-12-10 08:03:16');
+INSERT INTO `sys_logininfor` VALUES (219, 'admin', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2024-12-10 08:03:19');
+INSERT INTO `sys_logininfor` VALUES (220, 'admin', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2024-12-10 08:04:05');
+INSERT INTO `sys_logininfor` VALUES (221, 'admin', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2024-12-10 08:09:23');
+INSERT INTO `sys_logininfor` VALUES (222, 'admin', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '0', '退出成功', '2024-12-10 08:15:59');
+INSERT INTO `sys_logininfor` VALUES (223, 'admin', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '0', '退出成功', '2024-12-10 08:18:27');
+INSERT INTO `sys_logininfor` VALUES (224, 'admin', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2024-12-10 08:18:51');
 
 -- ----------------------------
 -- Table structure for sys_menu
@@ -783,20 +936,19 @@ CREATE TABLE `sys_menu`  (
   `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
   `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注',
   PRIMARY KEY (`menu_id`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 2000 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '菜单权限表' ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB AUTO_INCREMENT = 2025 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '菜单权限表' ROW_FORMAT = DYNAMIC;
 
 -- ----------------------------
 -- Records of sys_menu
 -- ----------------------------
-INSERT INTO `sys_menu` VALUES (1, '系统管理', 0, 1, 'system', NULL, '', '', 1, 0, 'M', '0', '0', '', 'system', 'admin', '2024-12-06 11:22:07', '', NULL, '系统管理目录');
-INSERT INTO `sys_menu` VALUES (2, '系统监控', 0, 2, 'monitor', NULL, '', '', 1, 0, 'M', '0', '0', '', 'monitor', 'admin', '2024-12-06 11:22:07', '', NULL, '系统监控目录');
-INSERT INTO `sys_menu` VALUES (3, '系统工具', 0, 3, 'tool', NULL, '', '', 1, 0, 'M', '0', '0', '', 'tool', 'admin', '2024-12-06 11:22:07', '', NULL, '系统工具目录');
-INSERT INTO `sys_menu` VALUES (4, '若依官网', 0, 4, 'http://ruoyi.vip', NULL, '', '', 0, 0, 'M', '0', '0', '', 'guide', 'admin', '2024-12-06 11:22:07', '', NULL, '若依官网地址');
+INSERT INTO `sys_menu` VALUES (1, '系统管理', 0, 1, 'system', NULL, '', '', 1, 0, 'M', '0', '0', '', 'system', 'admin', '2024-12-06 11:22:07', 'admin', '2024-12-09 09:48:29', '系统管理目录');
+INSERT INTO `sys_menu` VALUES (2, '系统监控', 0, 2, 'monitor', NULL, '', '', 1, 0, 'M', '0', '0', '', 'monitor', 'admin', '2024-12-06 11:22:07', 'admin', '2024-12-09 09:28:55', '系统监控目录');
+INSERT INTO `sys_menu` VALUES (3, '系统工具', 0, 3, 'tool', NULL, '', '', 1, 0, 'M', '0', '0', '', 'tool', 'admin', '2024-12-06 11:22:07', 'admin', '2024-12-09 09:28:49', '系统工具目录');
 INSERT INTO `sys_menu` VALUES (100, '用户管理', 1, 1, 'user', 'system/user/index', '', '', 1, 0, 'C', '0', '0', 'system:user:list', 'user', 'admin', '2024-12-06 11:22:07', '', NULL, '用户管理菜单');
 INSERT INTO `sys_menu` VALUES (101, '角色管理', 1, 2, 'role', 'system/role/index', '', '', 1, 0, 'C', '0', '0', 'system:role:list', 'peoples', 'admin', '2024-12-06 11:22:07', '', NULL, '角色管理菜单');
 INSERT INTO `sys_menu` VALUES (102, '菜单管理', 1, 3, 'menu', 'system/menu/index', '', '', 1, 0, 'C', '0', '0', 'system:menu:list', 'tree-table', 'admin', '2024-12-06 11:22:07', '', NULL, '菜单管理菜单');
-INSERT INTO `sys_menu` VALUES (103, '部门管理', 1, 4, 'dept', 'system/dept/index', '', '', 1, 0, 'C', '0', '0', 'system:dept:list', 'tree', 'admin', '2024-12-06 11:22:07', '', NULL, '部门管理菜单');
-INSERT INTO `sys_menu` VALUES (104, '岗位管理', 1, 5, 'post', 'system/post/index', '', '', 1, 0, 'C', '0', '0', 'system:post:list', 'post', 'admin', '2024-12-06 11:22:07', '', NULL, '岗位管理菜单');
+INSERT INTO `sys_menu` VALUES (103, '班级管理', 2000, 1, 'dept', 'system/dept/index', '', '', 1, 0, 'C', '0', '0', 'system:dept:list', 'tree', 'admin', '2024-12-06 11:22:07', 'admin', '2024-12-10 01:00:39', '部门管理菜单');
+INSERT INTO `sys_menu` VALUES (104, '岗位管理', 1, 5, 'post', 'system/post/index', '', '', 1, 1, 'C', '1', '1', 'system:post:list', 'post', 'admin', '2024-12-06 11:22:07', 'admin', '2024-12-09 22:17:58', '岗位管理菜单');
 INSERT INTO `sys_menu` VALUES (105, '字典管理', 1, 6, 'dict', 'system/dict/index', '', '', 1, 0, 'C', '0', '0', 'system:dict:list', 'dict', 'admin', '2024-12-06 11:22:07', '', NULL, '字典管理菜单');
 INSERT INTO `sys_menu` VALUES (106, '参数设置', 1, 7, 'config', 'system/config/index', '', '', 1, 0, 'C', '0', '0', 'system:config:list', 'edit', 'admin', '2024-12-06 11:22:07', '', NULL, '参数设置菜单');
 INSERT INTO `sys_menu` VALUES (107, '通知公告', 1, 8, 'notice', 'system/notice/index', '', '', 1, 0, 'C', '0', '0', 'system:notice:list', 'message', 'admin', '2024-12-06 11:22:07', '', NULL, '通知公告菜单');
@@ -828,10 +980,10 @@ INSERT INTO `sys_menu` VALUES (1012, '菜单查询', 102, 1, '', '', '', '', 1,
 INSERT INTO `sys_menu` VALUES (1013, '菜单新增', 102, 2, '', '', '', '', 1, 0, 'F', '0', '0', 'system:menu:add', '#', 'admin', '2024-12-06 11:22:07', '', NULL, '');
 INSERT INTO `sys_menu` VALUES (1014, '菜单修改', 102, 3, '', '', '', '', 1, 0, 'F', '0', '0', 'system:menu:edit', '#', 'admin', '2024-12-06 11:22:07', '', NULL, '');
 INSERT INTO `sys_menu` VALUES (1015, '菜单删除', 102, 4, '', '', '', '', 1, 0, 'F', '0', '0', 'system:menu:remove', '#', 'admin', '2024-12-06 11:22:07', '', NULL, '');
-INSERT INTO `sys_menu` VALUES (1016, '部门查询', 103, 1, '', '', '', '', 1, 0, 'F', '0', '0', 'system:dept:query', '#', 'admin', '2024-12-06 11:22:07', '', NULL, '');
-INSERT INTO `sys_menu` VALUES (1017, '部门新增', 103, 2, '', '', '', '', 1, 0, 'F', '0', '0', 'system:dept:add', '#', 'admin', '2024-12-06 11:22:07', '', NULL, '');
-INSERT INTO `sys_menu` VALUES (1018, '部门修改', 103, 3, '', '', '', '', 1, 0, 'F', '0', '0', 'system:dept:edit', '#', 'admin', '2024-12-06 11:22:07', '', NULL, '');
-INSERT INTO `sys_menu` VALUES (1019, '部门删除', 103, 4, '', '', '', '', 1, 0, 'F', '0', '0', 'system:dept:remove', '#', 'admin', '2024-12-06 11:22:07', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1016, '班级查询', 103, 1, '', '', '', '', 1, 0, 'F', '0', '0', 'system:dept:query', '#', 'admin', '2024-12-06 11:22:07', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1017, '班级新增', 103, 2, '', '', '', '', 1, 0, 'F', '0', '0', 'system:dept:add', '#', 'admin', '2024-12-06 11:22:07', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1018, '班级修改', 103, 3, '', '', '', '', 1, 0, 'F', '0', '0', 'system:dept:edit', '#', 'admin', '2024-12-06 11:22:07', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (1019, '班级删除', 103, 4, '', '', '', '', 1, 0, 'F', '0', '0', 'system:dept:remove', '#', 'admin', '2024-12-06 11:22:07', '', NULL, '');
 INSERT INTO `sys_menu` VALUES (1020, '岗位查询', 104, 1, '', '', '', '', 1, 0, 'F', '0', '0', 'system:post:query', '#', 'admin', '2024-12-06 11:22:07', '', NULL, '');
 INSERT INTO `sys_menu` VALUES (1021, '岗位新增', 104, 2, '', '', '', '', 1, 0, 'F', '0', '0', 'system:post:add', '#', 'admin', '2024-12-06 11:22:07', '', NULL, '');
 INSERT INTO `sys_menu` VALUES (1022, '岗位修改', 104, 3, '', '', '', '', 1, 0, 'F', '0', '0', 'system:post:edit', '#', 'admin', '2024-12-06 11:22:07', '', NULL, '');
@@ -873,6 +1025,31 @@ INSERT INTO `sys_menu` VALUES (1057, '生成删除', 116, 3, '#', '', '', '', 1,
 INSERT INTO `sys_menu` VALUES (1058, '导入代码', 116, 4, '#', '', '', '', 1, 0, 'F', '0', '0', 'tool:gen:import', '#', 'admin', '2024-12-06 11:22:07', '', NULL, '');
 INSERT INTO `sys_menu` VALUES (1059, '预览代码', 116, 5, '#', '', '', '', 1, 0, 'F', '0', '0', 'tool:gen:preview', '#', 'admin', '2024-12-06 11:22:07', '', NULL, '');
 INSERT INTO `sys_menu` VALUES (1060, '生成代码', 116, 6, '#', '', '', '', 1, 0, 'F', '0', '0', 'tool:gen:code', '#', 'admin', '2024-12-06 11:22:07', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (2000, '学生信息管理', 0, 40, 'peoples', NULL, NULL, '', 1, 0, 'M', '0', '0', NULL, 'peoples', 'admin', '2024-12-06 17:46:22', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (2001, '专业管理', 2000, 2, 'major', 'peoples/major/index', NULL, '', 1, 0, 'C', '0', '0', '', 'theme', 'admin', '2024-12-02 14:25:27', 'admin', '2024-12-10 05:00:32', '');
+INSERT INTO `sys_menu` VALUES (2002, '班级管理1', 2000, 2, 'classes', 'peoples/classes/index', NULL, '', 1, 1, 'C', '1', '1', '', '#', 'admin', '2024-12-02 14:26:28', 'admin', '2024-12-09 22:21:51', '');
+INSERT INTO `sys_menu` VALUES (2003, '学生管理', 2000, 3, 'student', 'peoples/student/index', NULL, '', 1, 0, 'C', '0', '0', NULL, '#', 'admin', '2024-12-02 14:27:44', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (2004, '训练任务管理', 0, 50, 'task', 'peoples/task/index', NULL, '', 1, 0, 'C', '0', '0', 'peoples:task:list', 'tab', 'admin', '2024-12-02 14:18:41', 'admin', '2024-12-03 09:50:05', '');
+INSERT INTO `sys_menu` VALUES (2005, '学生成绩管理', 0, 60, 'score', 'peoples/score/index', NULL, '', 1, 0, 'C', '0', '0', '', 'chart', 'admin', '2024-12-02 14:20:20', 'admin', '2024-12-04 08:53:43', '');
+INSERT INTO `sys_menu` VALUES (2006, '学生考试管理', 0, 70, 'exams', NULL, NULL, '', 1, 0, 'M', '0', '0', '', 'chart', 'admin', '2024-12-02 14:31:21', 'admin', '2024-12-03 09:50:23', '');
+INSERT INTO `sys_menu` VALUES (2007, '考试列表', 2006, 1, 'exams', 'peoples/exams/index', NULL, '', 1, 0, 'C', '0', '0', NULL, '#', 'admin', '2024-12-02 14:33:26', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (2008, '当前考试', 2006, 2, 'present', 'peoples/present/index', NULL, '', 1, 0, 'C', '0', '0', NULL, '#', 'admin', '2024-12-02 14:34:05', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (2009, '学生练习管理', 0, 80, 'trains', NULL, NULL, '', 1, 0, 'M', '0', '0', '', 'example', 'admin', '2024-12-02 14:32:08', 'admin', '2024-12-03 09:50:38', '');
+INSERT INTO `sys_menu` VALUES (2010, '练习列表', 2009, 1, 'trains', 'peoples/trains/index', NULL, '', 1, 0, 'C', '0', '0', NULL, '#', 'admin', '2024-12-02 14:35:01', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (2011, '当前练习', 2009, 2, 'current', 'peoples/current/index', NULL, '', 1, 0, 'C', '0', '0', NULL, '#', 'admin', '2024-12-02 14:36:05', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (2012, '考试管理', 0, 200, 'exam', '', NULL, '', 1, 0, 'M', '0', '0', '', 'chart', 'admin', '2024-12-02 14:09:42', 'admin', '2024-12-09 10:47:32', '');
+INSERT INTO `sys_menu` VALUES (2013, '练习管理', 0, 300, 'train', '', NULL, '', 1, 0, 'M', '0', '0', '', 'example', 'admin', '2024-12-02 14:11:53', 'admin', '2024-12-09 10:47:37', '');
+INSERT INTO `sys_menu` VALUES (2014, '自主练习管理', 0, 400, 'practice', 'people/practice/index', NULL, '', 1, 0, 'C', '0', '0', '', 'eye-open', 'admin', '2024-12-02 14:16:57', 'admin', '2024-12-09 10:47:41', '');
+INSERT INTO `sys_menu` VALUES (2015, '成绩管理', 2012, 2, 'score', 'people/score/index', NULL, '', 1, 1, 'C', '0', '0', '', 'chart', 'admin', '2024-12-02 14:04:13', 'admin', '2024-12-06 20:10:00', '');
+INSERT INTO `sys_menu` VALUES (2016, '考试列表', 2012, 1, 'exam', 'people/exam/index', NULL, '', 1, 1, 'C', '0', '0', '', 'job', 'admin', '2024-12-05 15:28:27', 'admin', '2024-12-06 20:10:15', '');
+INSERT INTO `sys_menu` VALUES (2017, '练习列表', 2013, 1, 'train', 'people/train/index', NULL, '', 1, 0, 'C', '0', '0', NULL, 'example', 'admin', '2024-12-05 15:31:18', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (2018, '练习成绩', 2013, 2, 'train', 'people/train/score', NULL, '', 1, 0, 'C', '1', '0', '', 'exit-fullscreen', 'admin', '2024-12-05 15:32:50', 'admin', '2024-12-05 15:33:08', '');
+INSERT INTO `sys_menu` VALUES (2019, '教师管理', 0, 7, 'teacher', 'teacher/index', NULL, '', 1, 0, 'C', '0', '0', 'system:teacher:list', 'user', 'admin', '2024-12-05 09:15:50', 'admin', '2024-12-10 01:26:53', '');
+INSERT INTO `sys_menu` VALUES (2020, '教师 查询', 2019, 1, '', NULL, NULL, '', 1, 0, 'F', '0', '0', 'system:teacher:query', '#', 'admin', '2024-12-10 01:28:39', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (2021, '教师新增', 2019, 2, '', NULL, NULL, '', 1, 0, 'F', '0', '0', 'system:teacher:add', '#', 'admin', '2024-12-10 01:32:11', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (2022, '教师修改', 2019, 3, '', NULL, NULL, '', 1, 0, 'F', '0', '0', 'system:teacher:edit', '#', 'admin', '2024-12-10 01:32:40', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (2023, '教师删除', 2019, 4, '', NULL, NULL, '', 1, 0, 'F', '0', '0', 'system:teacher:remove', '#', 'admin', '2024-12-10 01:33:09', '', NULL, '');
+INSERT INTO `sys_menu` VALUES (2024, '重置密码', 2019, 5, '', NULL, NULL, '', 1, 0, 'F', '0', '0', 'system:teacher:resetPwd', '#', 'admin', '2024-12-10 01:34:25', '', NULL, '');
 
 -- ----------------------------
 -- Table structure for sys_notice
@@ -890,7 +1067,7 @@ CREATE TABLE `sys_notice`  (
   `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
   `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
   PRIMARY KEY (`notice_id`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 10 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '通知公告表' ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '通知公告表' ROW_FORMAT = DYNAMIC;
 
 -- ----------------------------
 -- Records of sys_notice
@@ -924,11 +1101,88 @@ CREATE TABLE `sys_oper_log`  (
   INDEX `idx_sys_oper_log_bt`(`business_type`) USING BTREE,
   INDEX `idx_sys_oper_log_s`(`status`) USING BTREE,
   INDEX `idx_sys_oper_log_ot`(`oper_time`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 100 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '操作日志记录' ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB AUTO_INCREMENT = 177 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '操作日志记录' ROW_FORMAT = DYNAMIC;
 
 -- ----------------------------
 -- Records of sys_oper_log
 -- ----------------------------
+INSERT INTO `sys_oper_log` VALUES (100, '菜单管理', 3, 'com.ruoyi.web.controller.system.SysMenuController.remove()', 'DELETE', 1, 'admin', '研发部门', '/system/menu/4', '127.0.0.1', '内网IP', '{}', '{\"msg\":\"菜单已分配,不允许删除\",\"code\":601}', 0, NULL, '2024-12-06 17:33:05', 93);
+INSERT INTO `sys_oper_log` VALUES (101, '角色管理', 2, 'com.ruoyi.web.controller.system.SysRoleController.edit()', 'PUT', 1, 'admin', '研发部门', '/system/role', '127.0.0.1', '内网IP', '{\"admin\":false,\"createTime\":\"2024-12-06 11:22:07\",\"dataScope\":\"2\",\"delFlag\":\"0\",\"deptCheckStrictly\":true,\"flag\":false,\"menuCheckStrictly\":true,\"menuIds\":[1,100,1000,1001,1002,1003,1004,1005,1006,101,1007,1008,1009,1010,1011,102,1012,1013,1014,1015,103,1016,1017,1018,1019,104,1020,1021,1022,1023,1024,105,1025,1026,1027,1028,1029,106,1030,1031,1032,1033,1034,107,1035,1036,1037,1038,108,500,1039,1040,1041,501,1042,1043,1044,1045,2,109,1046,1047,1048,110,1049,1050,1051,1052,1053,1054,111,112,113,114,3,115,116,1055,1056,1057,1058,1059,1060,117],\"params\":{},\"remark\":\"普通角色\",\"roleId\":2,\"roleKey\":\"common\",\"roleName\":\"普通角色\",\"roleSort\":2,\"status\":\"0\",\"updateBy\":\"admin\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2024-12-06 17:33:17', 359);
+INSERT INTO `sys_oper_log` VALUES (102, '角色管理', 1, 'com.ruoyi.web.controller.system.SysRoleController.add()', 'POST', 1, 'admin', '研发部门', '/system/role', '127.0.0.1', '内网IP', '{\"admin\":false,\"createBy\":\"admin\",\"deptCheckStrictly\":true,\"deptIds\":[],\"flag\":false,\"menuCheckStrictly\":true,\"menuIds\":[],\"params\":{},\"roleId\":100,\"roleKey\":\"peoples\",\"roleName\":\"教师角色\",\"roleSort\":3,\"status\":\"0\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2024-12-06 17:34:09', 210);
+INSERT INTO `sys_oper_log` VALUES (103, '角色管理', 1, 'com.ruoyi.web.controller.system.SysRoleController.add()', 'POST', 1, 'admin', '研发部门', '/system/role', '127.0.0.1', '内网IP', '{\"admin\":false,\"createBy\":\"admin\",\"deptCheckStrictly\":true,\"deptIds\":[],\"flag\":false,\"menuCheckStrictly\":true,\"menuIds\":[],\"params\":{},\"roleId\":101,\"roleKey\":\"people\",\"roleName\":\"学员角色\",\"roleSort\":4,\"status\":\"0\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2024-12-06 17:34:26', 169);
+INSERT INTO `sys_oper_log` VALUES (104, '角色管理', 1, 'com.ruoyi.web.controller.system.SysRoleController.add()', 'POST', 1, 'admin', '研发部门', '/system/role', '127.0.0.1', '内网IP', '{\"admin\":false,\"createBy\":\"admin\",\"deptCheckStrictly\":true,\"deptIds\":[],\"flag\":false,\"menuCheckStrictly\":true,\"menuIds\":[],\"params\":{},\"roleId\":102,\"roleKey\":\"manage\",\"roleName\":\"管理端\",\"roleSort\":5,\"status\":\"0\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2024-12-06 17:34:50', 167);
+INSERT INTO `sys_oper_log` VALUES (105, '菜单管理', 3, 'com.ruoyi.web.controller.system.SysMenuController.remove()', 'DELETE', 1, 'admin', '研发部门', '/system/menu/4', '127.0.0.1', '内网IP', '{}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2024-12-06 17:37:49', 99);
+INSERT INTO `sys_oper_log` VALUES (106, '菜单管理', 1, 'com.ruoyi.web.controller.system.SysMenuController.add()', 'POST', 1, 'admin', '研发部门', '/system/menu', '127.0.0.1', '内网IP', '{\"children\":[],\"createBy\":\"admin\",\"icon\":\"peoples\",\"isCache\":\"0\",\"isFrame\":\"1\",\"menuName\":\"学生信息管理\",\"menuType\":\"M\",\"orderNum\":4,\"params\":{},\"parentId\":0,\"path\":\"peoples\",\"status\":\"0\",\"visible\":\"0\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2024-12-06 17:46:22', 249);
+INSERT INTO `sys_oper_log` VALUES (107, '菜单管理', 2, 'com.ruoyi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '研发部门', '/system/menu', '127.0.0.1', '内网IP', '{\"children\":[],\"component\":\"\",\"createTime\":\"2024-12-02 14:09:42\",\"icon\":\"chart\",\"isCache\":\"0\",\"isFrame\":\"1\",\"menuId\":2012,\"menuName\":\"考试管理\",\"menuType\":\"M\",\"orderNum\":200,\"params\":{},\"parentId\":0,\"path\":\"exam\",\"perms\":\"\",\"routeName\":\"\",\"status\":\"0\",\"updateBy\":\"admin\",\"visible\":\"0\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2024-12-06 20:09:14', 324);
+INSERT INTO `sys_oper_log` VALUES (108, '菜单管理', 2, 'com.ruoyi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '研发部门', '/system/menu', '127.0.0.1', '内网IP', '{\"children\":[],\"component\":\"people/score/index\",\"createTime\":\"2024-12-02 14:04:13\",\"icon\":\"chart\",\"isCache\":\"1\",\"isFrame\":\"1\",\"menuId\":2015,\"menuName\":\"成绩管理\",\"menuType\":\"C\",\"orderNum\":2,\"params\":{},\"parentId\":2012,\"path\":\"score\",\"perms\":\"\",\"routeName\":\"\",\"status\":\"0\",\"updateBy\":\"admin\",\"visible\":\"0\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2024-12-06 20:10:00', 416);
+INSERT INTO `sys_oper_log` VALUES (109, '菜单管理', 2, 'com.ruoyi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '研发部门', '/system/menu', '127.0.0.1', '内网IP', '{\"children\":[],\"component\":\"people/exam/index\",\"createTime\":\"2024-12-05 15:28:27\",\"icon\":\"job\",\"isCache\":\"1\",\"isFrame\":\"1\",\"menuId\":2016,\"menuName\":\"考试列表\",\"menuType\":\"C\",\"orderNum\":1,\"params\":{},\"parentId\":2012,\"path\":\"exam\",\"perms\":\"\",\"routeName\":\"\",\"status\":\"0\",\"updateBy\":\"admin\",\"visible\":\"0\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2024-12-06 20:10:15', 355);
+INSERT INTO `sys_oper_log` VALUES (110, '菜单管理', 2, 'com.ruoyi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '研发部门', '/system/menu', '127.0.0.1', '内网IP', '{\"children\":[],\"component\":\"\",\"createTime\":\"2024-12-02 14:11:53\",\"icon\":\"example\",\"isCache\":\"0\",\"isFrame\":\"1\",\"menuId\":2013,\"menuName\":\"练习管理\",\"menuType\":\"M\",\"orderNum\":300,\"params\":{},\"parentId\":0,\"path\":\"train\",\"perms\":\"\",\"routeName\":\"\",\"status\":\"0\",\"updateBy\":\"admin\",\"visible\":\"0\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2024-12-06 20:12:09', 446);
+INSERT INTO `sys_oper_log` VALUES (111, '字典类型', 9, 'com.ruoyi.web.controller.system.SysDictTypeController.refreshCache()', 'DELETE', 1, 'admin', '研发部门', '/system/dict/type/refreshCache', '127.0.0.1', '内网IP', '{}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2024-12-06 20:13:24', 1467);
+INSERT INTO `sys_oper_log` VALUES (112, '个人信息', 2, 'com.ruoyi.web.controller.system.SysProfileController.updatePwd()', 'PUT', 1, 'admin', '研发部门', '/system/user/profile/updatePwd', '192.168.9.101', '内网IP', '{}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2024-12-08 18:46:51', 233);
+INSERT INTO `sys_oper_log` VALUES (113, '菜单管理', 2, 'com.ruoyi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '研发部门', '/system/menu', '127.0.0.1', '内网IP', '{\"children\":[],\"createTime\":\"2024-12-06 11:22:07\",\"icon\":\"system\",\"isCache\":\"0\",\"isFrame\":\"1\",\"menuId\":1,\"menuName\":\"系统管理\",\"menuType\":\"M\",\"orderNum\":1,\"params\":{},\"parentId\":0,\"path\":\"system\",\"perms\":\"\",\"query\":\"\",\"routeName\":\"\",\"status\":\"0\",\"updateBy\":\"admin\",\"visible\":\"1\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2024-12-09 09:28:39', 112);
+INSERT INTO `sys_oper_log` VALUES (114, '菜单管理', 2, 'com.ruoyi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '研发部门', '/system/menu', '127.0.0.1', '内网IP', '{\"children\":[],\"createTime\":\"2024-12-06 11:22:07\",\"icon\":\"tool\",\"isCache\":\"0\",\"isFrame\":\"1\",\"menuId\":3,\"menuName\":\"系统工具\",\"menuType\":\"M\",\"orderNum\":3,\"params\":{},\"parentId\":0,\"path\":\"tool\",\"perms\":\"\",\"query\":\"\",\"routeName\":\"\",\"status\":\"0\",\"updateBy\":\"admin\",\"visible\":\"1\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2024-12-09 09:28:49', 78);
+INSERT INTO `sys_oper_log` VALUES (115, '菜单管理', 2, 'com.ruoyi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '研发部门', '/system/menu', '127.0.0.1', '内网IP', '{\"children\":[],\"createTime\":\"2024-12-06 11:22:07\",\"icon\":\"monitor\",\"isCache\":\"0\",\"isFrame\":\"1\",\"menuId\":2,\"menuName\":\"系统监控\",\"menuType\":\"M\",\"orderNum\":2,\"params\":{},\"parentId\":0,\"path\":\"monitor\",\"perms\":\"\",\"query\":\"\",\"routeName\":\"\",\"status\":\"0\",\"updateBy\":\"admin\",\"visible\":\"1\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2024-12-09 09:28:55', 73);
+INSERT INTO `sys_oper_log` VALUES (116, '菜单管理', 2, 'com.ruoyi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '研发部门', '/system/menu', '127.0.0.1', '内网IP', '{\"children\":[],\"component\":\"\",\"createTime\":\"2024-12-02 14:09:42\",\"icon\":\"chart\",\"isCache\":\"0\",\"isFrame\":\"1\",\"menuId\":2012,\"menuName\":\"考试管理\",\"menuType\":\"M\",\"orderNum\":200,\"params\":{},\"parentId\":0,\"path\":\"exam\",\"perms\":\"\",\"routeName\":\"\",\"status\":\"0\",\"updateBy\":\"admin\",\"visible\":\"1\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2024-12-09 09:29:12', 75);
+INSERT INTO `sys_oper_log` VALUES (117, '菜单管理', 2, 'com.ruoyi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '研发部门', '/system/menu', '127.0.0.1', '内网IP', '{\"children\":[],\"component\":\"\",\"createTime\":\"2024-12-02 14:11:53\",\"icon\":\"example\",\"isCache\":\"0\",\"isFrame\":\"1\",\"menuId\":2013,\"menuName\":\"练习管理\",\"menuType\":\"M\",\"orderNum\":300,\"params\":{},\"parentId\":0,\"path\":\"train\",\"perms\":\"\",\"routeName\":\"\",\"status\":\"0\",\"updateBy\":\"admin\",\"visible\":\"1\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2024-12-09 09:29:16', 82);
+INSERT INTO `sys_oper_log` VALUES (118, '菜单管理', 2, 'com.ruoyi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '研发部门', '/system/menu', '127.0.0.1', '内网IP', '{\"children\":[],\"component\":\"people/practice/index\",\"createTime\":\"2024-12-02 14:16:57\",\"icon\":\"eye-open\",\"isCache\":\"0\",\"isFrame\":\"1\",\"menuId\":2014,\"menuName\":\"自主练习管理\",\"menuType\":\"C\",\"orderNum\":400,\"params\":{},\"parentId\":0,\"path\":\"practice\",\"perms\":\"\",\"routeName\":\"\",\"status\":\"0\",\"updateBy\":\"admin\",\"visible\":\"1\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2024-12-09 09:29:19', 80);
+INSERT INTO `sys_oper_log` VALUES (119, '菜单管理', 2, 'com.ruoyi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '研发部门', '/system/menu', '127.0.0.1', '内网IP', '{\"children\":[],\"createTime\":\"2024-12-06 11:22:07\",\"icon\":\"system\",\"isCache\":\"0\",\"isFrame\":\"1\",\"menuId\":1,\"menuName\":\"系统管理\",\"menuType\":\"M\",\"orderNum\":1,\"params\":{},\"parentId\":0,\"path\":\"system\",\"perms\":\"\",\"query\":\"\",\"routeName\":\"\",\"status\":\"0\",\"updateBy\":\"admin\",\"visible\":\"0\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2024-12-09 09:48:29', 101);
+INSERT INTO `sys_oper_log` VALUES (120, '字典类型', 1, 'com.ruoyi.web.controller.system.SysDictTypeController.add()', 'POST', 1, 'admin', '研发部门', '/system/dict/type', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"dictName\":\"型号\",\"dictType\":\"sim_equip_type\",\"params\":{},\"status\":\"0\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2024-12-09 09:49:57', 110);
+INSERT INTO `sys_oper_log` VALUES (121, '字典数据', 1, 'com.ruoyi.web.controller.system.SysDictDataController.add()', 'POST', 1, 'admin', '研发部门', '/system/dict/data', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"default\":false,\"dictLabel\":\"FZD04B型侦毒器\",\"dictSort\":1,\"dictType\":\"sim_equip_type\",\"dictValue\":\"1\",\"listClass\":\"default\",\"params\":{},\"status\":\"0\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2024-12-09 09:50:17', 100);
+INSERT INTO `sys_oper_log` VALUES (122, '字典数据', 1, 'com.ruoyi.web.controller.system.SysDictDataController.add()', 'POST', 1, 'admin', '研发部门', '/system/dict/data', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"default\":false,\"dictLabel\":\"FZB006型毒剂报警器\",\"dictSort\":2,\"dictType\":\"sim_equip_type\",\"dictValue\":\"2\",\"listClass\":\"default\",\"params\":{},\"status\":\"0\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2024-12-09 09:50:26', 96);
+INSERT INTO `sys_oper_log` VALUES (123, '字典数据', 1, 'com.ruoyi.web.controller.system.SysDictDataController.add()', 'POST', 1, 'admin', '研发部门', '/system/dict/data', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"cssClass\":\"\",\"default\":false,\"dictLabel\":\"防化兵用毒剂报警器\",\"dictSort\":3,\"dictType\":\"sim_equip_type\",\"dictValue\":\"3\",\"listClass\":\"default\",\"params\":{},\"status\":\"0\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2024-12-09 09:50:39', 97);
+INSERT INTO `sys_oper_log` VALUES (124, '菜单管理', 2, 'com.ruoyi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '研发部门', '/system/menu', '127.0.0.1', '内网IP', '{\"children\":[],\"component\":\"\",\"createTime\":\"2024-12-02 14:09:42\",\"icon\":\"chart\",\"isCache\":\"0\",\"isFrame\":\"1\",\"menuId\":2012,\"menuName\":\"考试管理\",\"menuType\":\"M\",\"orderNum\":200,\"params\":{},\"parentId\":0,\"path\":\"exam\",\"perms\":\"\",\"routeName\":\"\",\"status\":\"0\",\"updateBy\":\"admin\",\"visible\":\"0\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2024-12-09 10:47:32', 142);
+INSERT INTO `sys_oper_log` VALUES (125, '菜单管理', 2, 'com.ruoyi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '研发部门', '/system/menu', '127.0.0.1', '内网IP', '{\"children\":[],\"component\":\"\",\"createTime\":\"2024-12-02 14:11:53\",\"icon\":\"example\",\"isCache\":\"0\",\"isFrame\":\"1\",\"menuId\":2013,\"menuName\":\"练习管理\",\"menuType\":\"M\",\"orderNum\":300,\"params\":{},\"parentId\":0,\"path\":\"train\",\"perms\":\"\",\"routeName\":\"\",\"status\":\"0\",\"updateBy\":\"admin\",\"visible\":\"0\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2024-12-09 10:47:37', 80);
+INSERT INTO `sys_oper_log` VALUES (126, '菜单管理', 2, 'com.ruoyi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '研发部门', '/system/menu', '127.0.0.1', '内网IP', '{\"children\":[],\"component\":\"people/practice/index\",\"createTime\":\"2024-12-02 14:16:57\",\"icon\":\"eye-open\",\"isCache\":\"0\",\"isFrame\":\"1\",\"menuId\":2014,\"menuName\":\"自主练习管理\",\"menuType\":\"C\",\"orderNum\":400,\"params\":{},\"parentId\":0,\"path\":\"practice\",\"perms\":\"\",\"routeName\":\"\",\"status\":\"0\",\"updateBy\":\"admin\",\"visible\":\"0\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2024-12-09 10:47:41', 86);
+INSERT INTO `sys_oper_log` VALUES (127, '个人信息', 2, 'com.ruoyi.web.controller.system.SysProfileController.updatePwd()', 'PUT', 1, 'admin', '研发部门', '/system/user/profile/updatePwd', '60.209.103.71', 'XX XX', '{}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2024-12-09 18:50:06', 274);
+INSERT INTO `sys_oper_log` VALUES (128, '用户头像', 2, 'com.ruoyi.web.controller.system.SysProfileController.avatar()', 'POST', 1, 'admin', '研发部门', '/system/user/profile/avatar', '112.255.69.94', 'XX XX', '', '{\"msg\":\"操作成功\",\"imgUrl\":\"/profile/avatar/2024/12/09/微信截图_20241209184952_20241209055018A001.png\",\"code\":200}', 0, NULL, '2024-12-09 18:50:16', 610);
+INSERT INTO `sys_oper_log` VALUES (129, '字典类型', 9, 'com.ruoyi.web.controller.system.SysDictTypeController.refreshCache()', 'DELETE', 1, 'admin', '研发部门', '/system/dict/type/refreshCache', '127.0.0.1', '内网IP', '{}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2024-12-09 20:12:55', 1306);
+INSERT INTO `sys_oper_log` VALUES (130, '字典类型', 9, 'com.ruoyi.web.controller.system.SysDictTypeController.refreshCache()', 'DELETE', 1, 'admin', '研发部门', '/system/dict/type/refreshCache', '127.0.0.1', '内网IP', '{}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2024-12-09 20:14:02', 1498);
+INSERT INTO `sys_oper_log` VALUES (131, '参数管理', 9, 'com.ruoyi.web.controller.system.SysConfigController.refreshCache()', 'DELETE', 1, 'admin', '研发部门', '/system/config/refreshCache', '127.0.0.1', '内网IP', '{}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2024-12-09 20:14:33', 1061);
+INSERT INTO `sys_oper_log` VALUES (132, '参数管理', 9, 'com.ruoyi.web.controller.system.SysConfigController.refreshCache()', 'DELETE', 1, 'admin', '研发部门', '/system/config/refreshCache', '127.0.0.1', '内网IP', '{}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2024-12-09 20:19:59', 237);
+INSERT INTO `sys_oper_log` VALUES (133, '部门管理', 2, 'com.ruoyi.web.controller.system.SysDeptController.edit()', 'PUT', 1, 'admin', '研发部门', '/system/dept', '127.0.0.1', '内网IP', '{\"ancestors\":\"0\",\"children\":[],\"deptId\":100,\"deptName\":\"维修模拟训练平台\",\"email\":\"ry@qq.com\",\"leader\":\"\",\"orderNum\":0,\"params\":{},\"parentId\":0,\"phone\":\"15888888888\",\"status\":\"0\",\"updateBy\":\"admin\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2024-12-09 20:21:49', 735);
+INSERT INTO `sys_oper_log` VALUES (134, '用户头像', 2, 'com.ruoyi.web.controller.system.SysProfileController.avatar()', 'POST', 1, 'admin', '研发部门', '/system/user/profile/avatar', '60.209.103.71', 'XX XX', '', '{\"msg\":\"操作成功\",\"imgUrl\":\"/profile/avatar/2024/12/09/1e30e924b899a901061ca77917950a7b0208f550_20241209083810A001.jpg\",\"code\":200}', 0, NULL, '2024-12-09 08:38:10', 110);
+INSERT INTO `sys_oper_log` VALUES (135, '用户管理', 1, 'com.ruoyi.web.controller.system.SysUserController.add()', 'POST', 1, 'admin', '研发部门', '/system/user', '127.0.0.1', '内网IP', '{\"admin\":false,\"createBy\":\"admin\",\"nickName\":\"teacher\",\"params\":{},\"postIds\":[],\"roleIds\":[100],\"status\":\"0\",\"userId\":3,\"userName\":\"teacher\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2024-12-09 20:59:48', 296);
+INSERT INTO `sys_oper_log` VALUES (136, '用户管理', 1, 'com.ruoyi.web.controller.system.SysUserController.add()', 'POST', 1, 'admin', '研发部门', '/system/user', '127.0.0.1', '内网IP', '{\"admin\":false,\"createBy\":\"admin\",\"nickName\":\"xueyuan001\",\"params\":{},\"postIds\":[],\"roleIds\":[101],\"status\":\"0\",\"userId\":4,\"userName\":\"xueyuan001\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2024-12-09 21:01:02', 244);
+INSERT INTO `sys_oper_log` VALUES (137, '用户管理', 1, 'com.ruoyi.web.controller.system.SysUserController.add()', 'POST', 1, 'admin', '研发部门', '/system/user', '127.0.0.1', '内网IP', '{\"admin\":false,\"createBy\":\"admin\",\"nickName\":\"xueyuan002\",\"params\":{},\"postIds\":[],\"roleIds\":[101],\"status\":\"0\",\"userId\":5,\"userName\":\"xueyuan002\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2024-12-09 21:01:17', 245);
+INSERT INTO `sys_oper_log` VALUES (138, '用户管理', 1, 'com.ruoyi.web.controller.system.SysUserController.add()', 'POST', 1, 'admin', '研发部门', '/system/user', '127.0.0.1', '内网IP', '{\"admin\":false,\"createBy\":\"admin\",\"nickName\":\"manage\",\"params\":{},\"postIds\":[],\"roleIds\":[102],\"status\":\"0\",\"userId\":6,\"userName\":\"manage\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2024-12-09 21:02:02', 307);
+INSERT INTO `sys_oper_log` VALUES (139, '角色管理', 2, 'com.ruoyi.web.controller.system.SysRoleController.edit()', 'PUT', 1, 'admin', '研发部门', '/system/role', '127.0.0.1', '内网IP', '{\"admin\":false,\"createTime\":\"2024-12-06 17:34:09\",\"dataScope\":\"1\",\"delFlag\":\"0\",\"deptCheckStrictly\":true,\"flag\":false,\"menuCheckStrictly\":true,\"menuIds\":[2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011],\"params\":{},\"roleId\":100,\"roleKey\":\"peoples\",\"roleName\":\"教师角色\",\"roleSort\":3,\"status\":\"0\",\"updateBy\":\"admin\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2024-12-09 21:03:08', 190);
+INSERT INTO `sys_oper_log` VALUES (140, '角色管理', 2, 'com.ruoyi.web.controller.system.SysRoleController.edit()', 'PUT', 1, 'admin', '研发部门', '/system/role', '127.0.0.1', '内网IP', '{\"admin\":false,\"createTime\":\"2024-12-06 17:34:26\",\"dataScope\":\"1\",\"delFlag\":\"0\",\"deptCheckStrictly\":true,\"flag\":false,\"menuCheckStrictly\":true,\"menuIds\":[2012,2016,2015,2013,2017,2018,2014],\"params\":{},\"roleId\":101,\"roleKey\":\"people\",\"roleName\":\"学员角色\",\"roleSort\":4,\"status\":\"0\",\"updateBy\":\"admin\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2024-12-09 21:04:24', 176);
+INSERT INTO `sys_oper_log` VALUES (141, '角色管理', 2, 'com.ruoyi.web.controller.system.SysRoleController.edit()', 'PUT', 1, 'admin', '研发部门', '/system/role', '127.0.0.1', '内网IP', '{\"admin\":false,\"createTime\":\"2024-12-06 17:34:50\",\"dataScope\":\"1\",\"delFlag\":\"0\",\"deptCheckStrictly\":true,\"flag\":false,\"menuCheckStrictly\":true,\"menuIds\":[2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2016,2015,2013,2017,2018,2014],\"params\":{},\"roleId\":102,\"roleKey\":\"manage\",\"roleName\":\"管理端\",\"roleSort\":5,\"status\":\"0\",\"updateBy\":\"admin\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2024-12-09 21:04:50', 187);
+INSERT INTO `sys_oper_log` VALUES (142, '部门管理', 1, 'com.ruoyi.web.controller.system.SysDeptController.add()', 'POST', 1, 'admin', '研发部门', '/system/dept', '127.0.0.1', '内网IP', '{\"ancestors\":\"0,100\",\"children\":[],\"createBy\":\"admin\",\"deptName\":\"测试班级1\",\"orderNum\":1,\"params\":{},\"parentId\":100,\"status\":\"0\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2024-12-09 21:46:32', 79);
+INSERT INTO `sys_oper_log` VALUES (143, '部门管理', 1, 'com.ruoyi.web.controller.system.SysDeptController.add()', 'POST', 1, 'admin', '研发部门', '/system/dept', '127.0.0.1', '内网IP', '{\"ancestors\":\"0,100\",\"children\":[],\"createBy\":\"admin\",\"deptName\":\"测试班级2\",\"orderNum\":2,\"params\":{},\"parentId\":100,\"status\":\"0\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2024-12-09 21:51:24', 79);
+INSERT INTO `sys_oper_log` VALUES (144, '部门管理', 3, 'com.ruoyi.web.controller.system.SysDeptController.remove()', 'DELETE', 1, 'admin', '研发部门', '/system/dept/101', '127.0.0.1', '内网IP', '{}', '{\"msg\":\"存在下级部门,不允许删除\",\"code\":601}', 0, NULL, '2024-12-09 21:57:54', 19);
+INSERT INTO `sys_oper_log` VALUES (145, '菜单管理', 2, 'com.ruoyi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', NULL, '/system/menu', '127.0.0.1', '内网IP', '{\"children\":[],\"component\":\"system/post/index\",\"createTime\":\"2024-12-06 11:22:07\",\"icon\":\"post\",\"isCache\":\"1\",\"isFrame\":\"1\",\"menuId\":104,\"menuName\":\"岗位管理\",\"menuType\":\"C\",\"orderNum\":5,\"params\":{},\"parentId\":1,\"path\":\"post\",\"perms\":\"system:post:list\",\"query\":\"\",\"routeName\":\"\",\"status\":\"1\",\"updateBy\":\"admin\",\"visible\":\"1\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2024-12-09 22:17:58', 72);
+INSERT INTO `sys_oper_log` VALUES (146, '菜单管理', 2, 'com.ruoyi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', NULL, '/system/menu', '127.0.0.1', '内网IP', '{\"children\":[],\"component\":\"system/dept/index\",\"createTime\":\"2024-12-06 11:22:07\",\"icon\":\"tree\",\"isCache\":\"0\",\"isFrame\":\"1\",\"menuId\":103,\"menuName\":\"班级管理\",\"menuType\":\"C\",\"orderNum\":4,\"params\":{},\"parentId\":2000,\"path\":\"dept\",\"perms\":\"system:dept:list\",\"query\":\"\",\"routeName\":\"\",\"status\":\"0\",\"visible\":\"0\"}', '{\"msg\":\"修改菜单\'班级管理\'失败,菜单名称已存在\",\"code\":500}', 0, NULL, '2024-12-09 22:21:29', 19);
+INSERT INTO `sys_oper_log` VALUES (147, '菜单管理', 2, 'com.ruoyi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', NULL, '/system/menu', '127.0.0.1', '内网IP', '{\"children\":[],\"component\":\"peoples/classes/index\",\"createTime\":\"2024-12-02 14:26:28\",\"icon\":\"#\",\"isCache\":\"1\",\"isFrame\":\"1\",\"menuId\":2002,\"menuName\":\"班级管理1\",\"menuType\":\"C\",\"orderNum\":2,\"params\":{},\"parentId\":2000,\"path\":\"classes\",\"perms\":\"\",\"routeName\":\"\",\"status\":\"1\",\"updateBy\":\"admin\",\"visible\":\"1\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2024-12-09 22:21:51', 54);
+INSERT INTO `sys_oper_log` VALUES (148, '菜单管理', 2, 'com.ruoyi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', NULL, '/system/menu', '127.0.0.1', '内网IP', '{\"children\":[],\"component\":\"system/dept/index\",\"createTime\":\"2024-12-06 11:22:07\",\"icon\":\"tree\",\"isCache\":\"0\",\"isFrame\":\"1\",\"menuId\":103,\"menuName\":\"班级管理\",\"menuType\":\"C\",\"orderNum\":2,\"params\":{},\"parentId\":1,\"path\":\"dept\",\"perms\":\"system:dept:list\",\"query\":\"\",\"routeName\":\"\",\"status\":\"0\",\"updateBy\":\"admin\",\"visible\":\"0\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2024-12-09 22:22:06', 40);
+INSERT INTO `sys_oper_log` VALUES (149, '菜单管理', 2, 'com.ruoyi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', NULL, '/system/menu', '127.0.0.1', '内网IP', '{\"children\":[],\"component\":\"system/dept/index\",\"createTime\":\"2024-12-06 11:22:07\",\"icon\":\"tree\",\"isCache\":\"0\",\"isFrame\":\"1\",\"menuId\":103,\"menuName\":\"班级管理\",\"menuType\":\"C\",\"orderNum\":2,\"params\":{},\"parentId\":2000,\"path\":\"dept\",\"perms\":\"system:dept:list\",\"query\":\"\",\"routeName\":\"\",\"status\":\"0\",\"updateBy\":\"admin\",\"visible\":\"0\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2024-12-09 22:22:14', 42);
+INSERT INTO `sys_oper_log` VALUES (150, '角色管理', 2, 'com.ruoyi.web.controller.system.SysRoleController.edit()', 'PUT', 1, 'admin', NULL, '/system/role', '127.0.0.1', '内网IP', '{\"admin\":false,\"createTime\":\"2024-12-06 17:34:09\",\"dataScope\":\"1\",\"delFlag\":\"0\",\"deptCheckStrictly\":true,\"flag\":false,\"menuCheckStrictly\":true,\"menuIds\":[2000,2001,103,1016,1017,1018,1019,2003,2004,2005,2006,2007,2008,2009,2010,2011],\"params\":{},\"roleId\":100,\"roleKey\":\"peoples\",\"roleName\":\"教师角色\",\"roleSort\":3,\"status\":\"0\",\"updateBy\":\"admin\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2024-12-10 00:34:46', 247);
+INSERT INTO `sys_oper_log` VALUES (151, '部门管理', 1, 'com.ruoyi.web.controller.system.SysDeptController.add()', 'POST', 1, 'admin', NULL, '/system/dept', '127.0.0.1', '内网IP', '{\"children\":[],\"createBy\":\"admin\",\"deptName\":\"测试班级3\",\"orderNum\":3,\"params\":{},\"status\":\"0\"}', NULL, 1, 'Cannot invoke \"com.ruoyi.common.core.domain.entity.SysDept.getStatus()\" because \"info\" is null', '2024-12-10 00:48:28', 40);
+INSERT INTO `sys_oper_log` VALUES (152, '部门管理', 1, 'com.ruoyi.web.controller.system.SysDeptController.add()', 'POST', 1, 'admin', NULL, '/system/dept', '127.0.0.1', '内网IP', '{\"children\":[],\"createBy\":\"admin\",\"deptName\":\"测试班级3\",\"orderNum\":3,\"params\":{},\"status\":\"0\"}', NULL, 1, 'Cannot invoke \"com.ruoyi.common.core.domain.entity.SysDept.getStatus()\" because \"info\" is null', '2024-12-10 00:48:45', 37);
+INSERT INTO `sys_oper_log` VALUES (153, '菜单管理', 2, 'com.ruoyi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', NULL, '/system/menu', '127.0.0.1', '内网IP', '{\"children\":[],\"component\":\"system/dept/index\",\"createTime\":\"2024-12-06 11:22:07\",\"icon\":\"tree\",\"isCache\":\"0\",\"isFrame\":\"1\",\"menuId\":103,\"menuName\":\"班级管理\",\"menuType\":\"C\",\"orderNum\":1,\"params\":{},\"parentId\":2000,\"path\":\"dept\",\"perms\":\"system:dept:list\",\"query\":\"\",\"routeName\":\"\",\"status\":\"0\",\"updateBy\":\"admin\",\"visible\":\"0\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2024-12-10 01:00:39', 75);
+INSERT INTO `sys_oper_log` VALUES (154, '菜单管理', 2, 'com.ruoyi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', NULL, '/system/menu', '127.0.0.1', '内网IP', '{\"children\":[],\"component\":\"peoples/major/index\",\"createTime\":\"2024-12-02 14:25:27\",\"icon\":\"#\",\"isCache\":\"0\",\"isFrame\":\"1\",\"menuId\":2001,\"menuName\":\"专业管理\",\"menuType\":\"C\",\"orderNum\":2,\"params\":{},\"parentId\":2000,\"path\":\"major\",\"perms\":\"\",\"routeName\":\"\",\"status\":\"0\",\"updateBy\":\"admin\",\"visible\":\"0\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2024-12-10 01:00:48', 56);
+INSERT INTO `sys_oper_log` VALUES (155, '部门管理', 1, 'com.ruoyi.web.controller.system.SysDeptController.add()', 'POST', 1, 'admin', NULL, '/system/dept', '127.0.0.1', '内网IP', '{\"children\":[],\"createBy\":\"admin\",\"deptName\":\"1111\",\"orderNum\":2,\"params\":{},\"status\":\"0\"}', NULL, 1, 'Cannot invoke \"com.ruoyi.common.core.domain.entity.SysDept.getStatus()\" because \"info\" is null', '2024-12-10 01:02:01', 47);
+INSERT INTO `sys_oper_log` VALUES (156, '部门管理', 1, 'com.ruoyi.web.controller.system.SysDeptController.add()', 'POST', 1, 'admin', NULL, '/system/dept', '127.0.0.1', '内网IP', '{\"children\":[],\"createBy\":\"admin\",\"deptName\":\"2222\",\"orderNum\":3333,\"params\":{},\"status\":\"0\"}', NULL, 1, 'Cannot invoke \"com.ruoyi.common.core.domain.entity.SysDept.getStatus()\" because \"info\" is null', '2024-12-10 01:03:49', 33);
+INSERT INTO `sys_oper_log` VALUES (157, '部门管理', 1, 'com.ruoyi.web.controller.system.SysDeptController.add()', 'POST', 1, 'admin', NULL, '/system/dept', '127.0.0.1', '内网IP', '{\"children\":[],\"createBy\":\"admin\",\"deptName\":\"111\",\"orderNum\":2,\"params\":{},\"status\":\"0\"}', NULL, 1, 'Cannot invoke \"com.ruoyi.common.core.domain.entity.SysDept.getStatus()\" because \"info\" is null', '2024-12-10 01:07:25', 34);
+INSERT INTO `sys_oper_log` VALUES (158, '部门管理', 1, 'com.ruoyi.web.controller.system.SysDeptController.add()', 'POST', 1, 'admin', NULL, '/system/dept', '127.0.0.1', '内网IP', '{\"ancestors\":\"0,110\",\"children\":[],\"createBy\":\"admin\",\"deptName\":\"2222\",\"orderNum\":3333,\"params\":{},\"parentId\":110,\"status\":\"0\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2024-12-10 01:07:52', 71);
+INSERT INTO `sys_oper_log` VALUES (159, '部门管理', 1, 'com.ruoyi.web.controller.system.SysDeptController.add()', 'POST', 1, 'admin', NULL, '/system/dept', '127.0.0.1', '内网IP', '{\"children\":[],\"createBy\":\"admin\",\"deptName\":\"222\",\"orderNum\":333,\"params\":{},\"status\":\"0\"}', NULL, 1, 'Cannot invoke \"com.ruoyi.common.core.domain.entity.SysDept.getStatus()\" because \"info\" is null', '2024-12-10 01:08:30', 35);
+INSERT INTO `sys_oper_log` VALUES (160, '部门管理', 1, 'com.ruoyi.web.controller.system.SysDeptController.add()', 'POST', 1, 'admin', NULL, '/system/dept', '127.0.0.1', '内网IP', '{\"children\":[],\"createBy\":\"admin\",\"deptName\":\"222\",\"orderNum\":333,\"params\":{},\"status\":\"0\"}', NULL, 1, 'Cannot invoke \"com.ruoyi.common.core.domain.entity.SysDept.getStatus()\" because \"info\" is null', '2024-12-10 01:11:24', 40);
+INSERT INTO `sys_oper_log` VALUES (161, '菜单管理', 2, 'com.ruoyi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', NULL, '/system/menu', '127.0.0.1', '内网IP', '{\"children\":[],\"component\":\"teacher/index\",\"createTime\":\"2024-12-05 09:15:50\",\"icon\":\"user\",\"isCache\":\"0\",\"isFrame\":\"1\",\"menuId\":2019,\"menuName\":\"教师管理\",\"menuType\":\"C\",\"orderNum\":7,\"params\":{},\"parentId\":0,\"path\":\"teacher\",\"perms\":\"system:teacher:list\",\"routeName\":\"\",\"status\":\"0\",\"updateBy\":\"admin\",\"visible\":\"0\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2024-12-10 01:26:20', 55);
+INSERT INTO `sys_oper_log` VALUES (162, '菜单管理', 2, 'com.ruoyi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', NULL, '/system/menu', '127.0.0.1', '内网IP', '{\"children\":[],\"component\":\"system/teacher/index\",\"createTime\":\"2024-12-05 09:15:50\",\"icon\":\"user\",\"isCache\":\"0\",\"isFrame\":\"1\",\"menuId\":2019,\"menuName\":\"教师管理\",\"menuType\":\"C\",\"orderNum\":7,\"params\":{},\"parentId\":0,\"path\":\"teacher\",\"perms\":\"system:teacher:list\",\"routeName\":\"\",\"status\":\"0\",\"updateBy\":\"admin\",\"visible\":\"0\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2024-12-10 01:26:36', 55);
+INSERT INTO `sys_oper_log` VALUES (163, '菜单管理', 2, 'com.ruoyi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', NULL, '/system/menu', '127.0.0.1', '内网IP', '{\"children\":[],\"component\":\"teacher/index\",\"createTime\":\"2024-12-05 09:15:50\",\"icon\":\"user\",\"isCache\":\"0\",\"isFrame\":\"1\",\"menuId\":2019,\"menuName\":\"教师管理\",\"menuType\":\"C\",\"orderNum\":7,\"params\":{},\"parentId\":0,\"path\":\"teacher\",\"perms\":\"system:teacher:list\",\"routeName\":\"\",\"status\":\"0\",\"updateBy\":\"admin\",\"visible\":\"0\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2024-12-10 01:26:53', 77);
+INSERT INTO `sys_oper_log` VALUES (164, '菜单管理', 1, 'com.ruoyi.web.controller.system.SysMenuController.add()', 'POST', 1, 'admin', NULL, '/system/menu', '127.0.0.1', '内网IP', '{\"children\":[],\"createBy\":\"admin\",\"isCache\":\"0\",\"isFrame\":\"1\",\"menuName\":\"教师 查询\",\"menuType\":\"F\",\"orderNum\":1,\"params\":{},\"parentId\":2019,\"perms\":\"system:teacher:query\",\"status\":\"0\",\"visible\":\"0\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2024-12-10 01:28:39', 59);
+INSERT INTO `sys_oper_log` VALUES (165, '角色管理', 2, 'com.ruoyi.web.controller.system.SysRoleController.edit()', 'PUT', 1, 'admin', NULL, '/system/role', '127.0.0.1', '内网IP', '{\"admin\":false,\"createTime\":\"2024-12-06 17:34:50\",\"dataScope\":\"1\",\"delFlag\":\"0\",\"deptCheckStrictly\":true,\"flag\":false,\"menuCheckStrictly\":true,\"menuIds\":[2000,2019,2020,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2016,2015,2013,2017,2018,2014],\"params\":{},\"roleId\":102,\"roleKey\":\"manage\",\"roleName\":\"管理端\",\"roleSort\":5,\"status\":\"0\",\"updateBy\":\"admin\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2024-12-10 01:28:59', 207);
+INSERT INTO `sys_oper_log` VALUES (166, '菜单管理', 1, 'com.ruoyi.web.controller.system.SysMenuController.add()', 'POST', 1, 'admin', NULL, '/system/menu', '127.0.0.1', '内网IP', '{\"children\":[],\"createBy\":\"admin\",\"isCache\":\"0\",\"isFrame\":\"1\",\"menuName\":\"教师新增\",\"menuType\":\"F\",\"orderNum\":2,\"params\":{},\"parentId\":2019,\"perms\":\"system:teacher:add\",\"status\":\"0\",\"visible\":\"0\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2024-12-10 01:32:11', 54);
+INSERT INTO `sys_oper_log` VALUES (167, '菜单管理', 1, 'com.ruoyi.web.controller.system.SysMenuController.add()', 'POST', 1, 'admin', NULL, '/system/menu', '127.0.0.1', '内网IP', '{\"children\":[],\"createBy\":\"admin\",\"isCache\":\"0\",\"isFrame\":\"1\",\"menuName\":\"教师修改\",\"menuType\":\"F\",\"orderNum\":3,\"params\":{},\"parentId\":2019,\"perms\":\"system:teacher:edit\",\"status\":\"0\",\"visible\":\"0\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2024-12-10 01:32:40', 53);
+INSERT INTO `sys_oper_log` VALUES (168, '菜单管理', 1, 'com.ruoyi.web.controller.system.SysMenuController.add()', 'POST', 1, 'admin', NULL, '/system/menu', '127.0.0.1', '内网IP', '{\"children\":[],\"createBy\":\"admin\",\"isCache\":\"0\",\"isFrame\":\"1\",\"menuName\":\"教师删除\",\"menuType\":\"F\",\"orderNum\":4,\"params\":{},\"parentId\":2019,\"perms\":\"system:teacher:remove\",\"status\":\"0\",\"visible\":\"0\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2024-12-10 01:33:09', 57);
+INSERT INTO `sys_oper_log` VALUES (169, '菜单管理', 1, 'com.ruoyi.web.controller.system.SysMenuController.add()', 'POST', 1, 'admin', NULL, '/system/menu', '127.0.0.1', '内网IP', '{\"children\":[],\"createBy\":\"admin\",\"isCache\":\"0\",\"isFrame\":\"1\",\"menuName\":\"重置密码\",\"menuType\":\"F\",\"orderNum\":5,\"params\":{},\"parentId\":2019,\"perms\":\"system:teacher:resetPwd\",\"status\":\"0\",\"visible\":\"0\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2024-12-10 01:34:25', 53);
+INSERT INTO `sys_oper_log` VALUES (170, '字典类型', 1, 'com.ruoyi.web.controller.system.SysDictTypeController.add()', 'POST', 1, 'admin', NULL, '/system/dict/type', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"dictName\":\"出题方式\",\"dictType\":\"sys_topic_way\",\"params\":{},\"remark\":\"出题方式\",\"status\":\"0\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2024-12-10 01:54:56', 129);
+INSERT INTO `sys_oper_log` VALUES (171, '字典类型', 2, 'com.ruoyi.web.controller.system.SysDictTypeController.edit()', 'PUT', 1, 'admin', NULL, '/system/dict/type', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2024-12-09 09:49:57\",\"dictId\":11,\"dictName\":\"模拟器型号\",\"dictType\":\"sim_equip_type\",\"params\":{},\"status\":\"0\",\"updateBy\":\"admin\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2024-12-10 01:55:10', 186);
+INSERT INTO `sys_oper_log` VALUES (172, '字典类型', 1, 'com.ruoyi.web.controller.system.SysDictTypeController.add()', 'POST', 1, 'admin', NULL, '/system/dict/type', '127.0.0.1', '内网IP', '{\"dictName\":\"出题方式\",\"dictType\":\"sys_topic_way\",\"params\":{},\"remark\":\"出题方式\",\"status\":\"0\"}', NULL, 1, '\r\n### Error querying database.  Cause: com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure\n\nThe last packet successfully received from the server was 77,461 milliseconds ago. The last packet sent successfully to the server was 77,472 milliseconds ago.\r\n### The error may exist in file [D:\\phpstudy_pro\\WWW\\java\\lujunfanghua\\ruoyi-system\\target\\classes\\mapper\\system\\SysDictTypeMapper.xml]\r\n### The error may involve com.ruoyi.system.mapper.SysDictTypeMapper.checkDictTypeUnique-Inline\r\n### The error occurred while setting parameters\r\n### SQL: select dict_id, dict_name, dict_type, status, create_by, create_time, remark    from sys_dict_type         where dict_type = ? limit 1\r\n### Cause: com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure\n\nThe last packet successfully received from the server was 77,461 milliseconds ago. The last packet sent successfully to the server was 77,472 milliseconds ago.\n; Communications link failure\n\nThe last packet successfully received from the server was 77,461 milliseconds ago. The last packet sent successfully to the server was 77,472 milliseconds ago.; nested exception is com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure\n\nThe last packet successfully received from the server was 77,461 milliseconds ago. The last packet sent successfully to the server was 77,472 milliseconds ago.', '2024-12-10 01:55:11', 19278);
+INSERT INTO `sys_oper_log` VALUES (173, '字典数据', 1, 'com.ruoyi.web.controller.system.SysDictDataController.add()', 'POST', 1, 'admin', NULL, '/system/dict/data', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"default\":false,\"dictLabel\":\"随机\",\"dictSort\":1,\"dictType\":\"sys_topic_way\",\"dictValue\":\"1\",\"listClass\":\"default\",\"params\":{},\"status\":\"0\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2024-12-10 01:57:03', 60);
+INSERT INTO `sys_oper_log` VALUES (174, '字典数据', 1, 'com.ruoyi.web.controller.system.SysDictDataController.add()', 'POST', 1, 'admin', NULL, '/system/dict/data', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"default\":false,\"dictLabel\":\"2\",\"dictSort\":2,\"dictType\":\"sys_topic_way\",\"dictValue\":\"自选\",\"listClass\":\"default\",\"params\":{},\"status\":\"0\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2024-12-10 01:57:10', 54);
+INSERT INTO `sys_oper_log` VALUES (175, '字典数据', 2, 'com.ruoyi.web.controller.system.SysDictDataController.edit()', 'PUT', 1, 'admin', NULL, '/system/dict/data', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2024-12-10 01:57:10\",\"default\":false,\"dictCode\":34,\"dictLabel\":\"自选\",\"dictSort\":2,\"dictType\":\"sys_topic_way\",\"dictValue\":\"2\",\"isDefault\":\"N\",\"listClass\":\"default\",\"params\":{},\"status\":\"0\",\"updateBy\":\"admin\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2024-12-10 01:57:21', 70);
+INSERT INTO `sys_oper_log` VALUES (176, '菜单管理', 2, 'com.ruoyi.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', NULL, '/system/menu', '127.0.0.1', '内网IP', '{\"children\":[],\"component\":\"peoples/major/index\",\"createTime\":\"2024-12-02 14:25:27\",\"icon\":\"theme\",\"isCache\":\"0\",\"isFrame\":\"1\",\"menuId\":2001,\"menuName\":\"专业管理\",\"menuType\":\"C\",\"orderNum\":2,\"params\":{},\"parentId\":2000,\"path\":\"major\",\"perms\":\"\",\"routeName\":\"\",\"status\":\"0\",\"updateBy\":\"admin\",\"visible\":\"0\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2024-12-10 05:00:32', 72);
 
 -- ----------------------------
 -- Table structure for sys_post
@@ -946,7 +1200,7 @@ CREATE TABLE `sys_post`  (
   `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
   `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
   PRIMARY KEY (`post_id`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '岗位信息表' ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '岗位信息表' ROW_FORMAT = DYNAMIC;
 
 -- ----------------------------
 -- Records of sys_post
@@ -976,13 +1230,16 @@ CREATE TABLE `sys_role`  (
   `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
   `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
   PRIMARY KEY (`role_id`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 100 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '角色信息表' ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB AUTO_INCREMENT = 103 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '角色信息表' ROW_FORMAT = DYNAMIC;
 
 -- ----------------------------
 -- Records of sys_role
 -- ----------------------------
 INSERT INTO `sys_role` VALUES (1, '超级管理员', 'admin', 1, '1', 1, 1, '0', '0', 'admin', '2024-12-06 11:22:07', '', NULL, '超级管理员');
-INSERT INTO `sys_role` VALUES (2, '普通角色', 'common', 2, '2', 1, 1, '0', '0', 'admin', '2024-12-06 11:22:07', '', NULL, '普通角色');
+INSERT INTO `sys_role` VALUES (2, '普通角色', 'common', 2, '2', 1, 1, '0', '0', 'admin', '2024-12-06 11:22:07', 'admin', '2024-12-06 17:33:16', '普通角色');
+INSERT INTO `sys_role` VALUES (100, '教师角色', 'peoples', 3, '1', 1, 1, '0', '0', 'admin', '2024-12-06 17:34:09', 'admin', '2024-12-10 00:34:45', NULL);
+INSERT INTO `sys_role` VALUES (101, '学员角色', 'people', 4, '1', 1, 1, '0', '0', 'admin', '2024-12-06 17:34:26', 'admin', '2024-12-09 21:04:24', NULL);
+INSERT INTO `sys_role` VALUES (102, '管理端', 'manage', 5, '1', 1, 1, '0', '0', 'admin', '2024-12-06 17:34:50', 'admin', '2024-12-10 01:28:59', NULL);
 
 -- ----------------------------
 -- Table structure for sys_role_dept
@@ -992,7 +1249,7 @@ CREATE TABLE `sys_role_dept`  (
   `role_id` bigint(20) NOT NULL COMMENT '角色ID',
   `dept_id` bigint(20) NOT NULL COMMENT '部门ID',
   PRIMARY KEY (`role_id`, `dept_id`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '角色和部门关联表' ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '角色和部门关联表' ROW_FORMAT = DYNAMIC;
 
 -- ----------------------------
 -- Records of sys_role_dept
@@ -1009,7 +1266,7 @@ CREATE TABLE `sys_role_menu`  (
   `role_id` bigint(20) NOT NULL COMMENT '角色ID',
   `menu_id` bigint(20) NOT NULL COMMENT '菜单ID',
   PRIMARY KEY (`role_id`, `menu_id`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '角色和菜单关联表' ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '角色和菜单关联表' ROW_FORMAT = DYNAMIC;
 
 -- ----------------------------
 -- Records of sys_role_menu
@@ -1017,7 +1274,6 @@ CREATE TABLE `sys_role_menu`  (
 INSERT INTO `sys_role_menu` VALUES (2, 1);
 INSERT INTO `sys_role_menu` VALUES (2, 2);
 INSERT INTO `sys_role_menu` VALUES (2, 3);
-INSERT INTO `sys_role_menu` VALUES (2, 4);
 INSERT INTO `sys_role_menu` VALUES (2, 100);
 INSERT INTO `sys_role_menu` VALUES (2, 101);
 INSERT INTO `sys_role_menu` VALUES (2, 102);
@@ -1099,6 +1355,50 @@ INSERT INTO `sys_role_menu` VALUES (2, 1057);
 INSERT INTO `sys_role_menu` VALUES (2, 1058);
 INSERT INTO `sys_role_menu` VALUES (2, 1059);
 INSERT INTO `sys_role_menu` VALUES (2, 1060);
+INSERT INTO `sys_role_menu` VALUES (100, 103);
+INSERT INTO `sys_role_menu` VALUES (100, 1016);
+INSERT INTO `sys_role_menu` VALUES (100, 1017);
+INSERT INTO `sys_role_menu` VALUES (100, 1018);
+INSERT INTO `sys_role_menu` VALUES (100, 1019);
+INSERT INTO `sys_role_menu` VALUES (100, 2000);
+INSERT INTO `sys_role_menu` VALUES (100, 2001);
+INSERT INTO `sys_role_menu` VALUES (100, 2003);
+INSERT INTO `sys_role_menu` VALUES (100, 2004);
+INSERT INTO `sys_role_menu` VALUES (100, 2005);
+INSERT INTO `sys_role_menu` VALUES (100, 2006);
+INSERT INTO `sys_role_menu` VALUES (100, 2007);
+INSERT INTO `sys_role_menu` VALUES (100, 2008);
+INSERT INTO `sys_role_menu` VALUES (100, 2009);
+INSERT INTO `sys_role_menu` VALUES (100, 2010);
+INSERT INTO `sys_role_menu` VALUES (100, 2011);
+INSERT INTO `sys_role_menu` VALUES (101, 2012);
+INSERT INTO `sys_role_menu` VALUES (101, 2013);
+INSERT INTO `sys_role_menu` VALUES (101, 2014);
+INSERT INTO `sys_role_menu` VALUES (101, 2015);
+INSERT INTO `sys_role_menu` VALUES (101, 2016);
+INSERT INTO `sys_role_menu` VALUES (101, 2017);
+INSERT INTO `sys_role_menu` VALUES (101, 2018);
+INSERT INTO `sys_role_menu` VALUES (102, 2000);
+INSERT INTO `sys_role_menu` VALUES (102, 2001);
+INSERT INTO `sys_role_menu` VALUES (102, 2002);
+INSERT INTO `sys_role_menu` VALUES (102, 2003);
+INSERT INTO `sys_role_menu` VALUES (102, 2004);
+INSERT INTO `sys_role_menu` VALUES (102, 2005);
+INSERT INTO `sys_role_menu` VALUES (102, 2006);
+INSERT INTO `sys_role_menu` VALUES (102, 2007);
+INSERT INTO `sys_role_menu` VALUES (102, 2008);
+INSERT INTO `sys_role_menu` VALUES (102, 2009);
+INSERT INTO `sys_role_menu` VALUES (102, 2010);
+INSERT INTO `sys_role_menu` VALUES (102, 2011);
+INSERT INTO `sys_role_menu` VALUES (102, 2012);
+INSERT INTO `sys_role_menu` VALUES (102, 2013);
+INSERT INTO `sys_role_menu` VALUES (102, 2014);
+INSERT INTO `sys_role_menu` VALUES (102, 2015);
+INSERT INTO `sys_role_menu` VALUES (102, 2016);
+INSERT INTO `sys_role_menu` VALUES (102, 2017);
+INSERT INTO `sys_role_menu` VALUES (102, 2018);
+INSERT INTO `sys_role_menu` VALUES (102, 2019);
+INSERT INTO `sys_role_menu` VALUES (102, 2020);
 
 -- ----------------------------
 -- Table structure for sys_student
@@ -1113,7 +1413,7 @@ CREATE TABLE `sys_student`  (
   `student_status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '状态(0正常 1停用)',
   `student_birthday` datetime NULL DEFAULT NULL COMMENT '生日',
   PRIMARY KEY (`student_id`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '学生信息表' ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '学生信息表' ROW_FORMAT = DYNAMIC;
 
 -- ----------------------------
 -- Records of sys_student
@@ -1144,13 +1444,17 @@ CREATE TABLE `sys_user`  (
   `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
   `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
   PRIMARY KEY (`user_id`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 100 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '用户信息表' ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '用户信息表' ROW_FORMAT = DYNAMIC;
 
 -- ----------------------------
 -- Records of sys_user
 -- ----------------------------
-INSERT INTO `sys_user` VALUES (1, 103, 'admin', '若依', '00', 'ry@163.com', '15888888888', '1', '', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '127.0.0.1', '2024-12-06 11:24:45', 'admin', '2024-12-06 11:22:07', '', '2024-12-06 11:24:44', '管理员');
-INSERT INTO `sys_user` VALUES (2, 105, 'ry', '若依', '00', 'ry@qq.com', '15666666666', '1', '', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '127.0.0.1', '2024-12-06 11:22:07', 'admin', '2024-12-06 11:22:07', '', NULL, '测试员');
+INSERT INTO `sys_user` VALUES (1, 103, 'admin', '调试', '00', 'ry@163.com', '15888888888', '1', '/profile/avatar/2024/12/09/1e30e924b899a901061ca77917950a7b0208f550_20241209083810A001.jpg', '$2a$10$8kl4ldMIc0CSTR8mPhFfK.5hEolFp2rHeennmyaozJIIJZ8g4dRqu', '0', '0', '127.0.0.1', '2024-12-10 21:18:51', 'admin', '2024-12-06 11:22:07', '', '2024-12-10 08:18:51', '调试员');
+INSERT INTO `sys_user` VALUES (2, 105, 'ry', '测试', '00', 'ry@qq.com', '15666666666', '1', '', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '127.0.0.1', '2024-12-06 11:22:07', 'admin', '2024-12-06 11:22:07', '', NULL, '测试员');
+INSERT INTO `sys_user` VALUES (3, NULL, 'teacher', 'teacher', '00', '', '', '0', '', '$2a$10$ypkyVSiKf0ZUHkgqxavjxehMyyCE.3.RsqgzIfAczo9BlL3OUcwh2', '0', '0', '127.0.0.1', '2024-12-10 14:42:11', 'admin', '2024-12-09 20:59:48', '', '2024-12-10 01:42:10', NULL);
+INSERT INTO `sys_user` VALUES (4, NULL, 'xueyuan001', 'xueyuan001', '00', '', '', '0', '', '$2a$10$ko91b23YN.gCB3FyjUAil.QKH1SMq0dL8KmHeXTSNoNVOlYbjwBvO', '0', '0', '', NULL, 'admin', '2024-12-09 21:01:02', '', NULL, NULL);
+INSERT INTO `sys_user` VALUES (5, NULL, 'xueyuan002', 'xueyuan002', '00', '', '', '0', '', '$2a$10$C79uVod2zLyEq2LbDfD.Q.iN8OMNKXweifLuUM9lb3YC1iuvd0O/K', '0', '0', '', NULL, 'admin', '2024-12-09 21:01:17', '', NULL, NULL);
+INSERT INTO `sys_user` VALUES (6, NULL, 'manage', 'manage', '00', '', '', '0', '', '$2a$10$k5IwVDsUp7MKC7qXiOVtNOr.sdm3N9cukcUBfEK3XYG4LdxSp.4Wy', '0', '0', '', NULL, 'admin', '2024-12-09 21:02:02', '', NULL, NULL);
 
 -- ----------------------------
 -- Table structure for sys_user_post
@@ -1160,7 +1464,7 @@ CREATE TABLE `sys_user_post`  (
   `user_id` bigint(20) NOT NULL COMMENT '用户ID',
   `post_id` bigint(20) NOT NULL COMMENT '岗位ID',
   PRIMARY KEY (`user_id`, `post_id`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '用户与岗位关联表' ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '用户与岗位关联表' ROW_FORMAT = DYNAMIC;
 
 -- ----------------------------
 -- Records of sys_user_post
@@ -1176,12 +1480,16 @@ CREATE TABLE `sys_user_role`  (
   `user_id` bigint(20) NOT NULL COMMENT '用户ID',
   `role_id` bigint(20) NOT NULL COMMENT '角色ID',
   PRIMARY KEY (`user_id`, `role_id`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '用户和角色关联表' ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '用户和角色关联表' ROW_FORMAT = DYNAMIC;
 
 -- ----------------------------
 -- Records of sys_user_role
 -- ----------------------------
 INSERT INTO `sys_user_role` VALUES (1, 1);
 INSERT INTO `sys_user_role` VALUES (2, 2);
+INSERT INTO `sys_user_role` VALUES (3, 100);
+INSERT INTO `sys_user_role` VALUES (4, 101);
+INSERT INTO `sys_user_role` VALUES (5, 101);
+INSERT INTO `sys_user_role` VALUES (6, 102);
 
 SET FOREIGN_KEY_CHECKS = 1;

+ 2 - 2
ruoyi-ui/.env.development

@@ -1,10 +1,10 @@
 # 页面标题
-VUE_APP_TITLE = 若依管理系统
+VUE_APP_TITLE = 维修模拟训练平台
 
 # 开发环境配置
 ENV = 'development'
 
-# 若依管理系统/开发环境
+# 维修模拟训练平台/开发环境
 VUE_APP_BASE_API = '/dev-api'
 
 # 路由懒加载

+ 2 - 2
ruoyi-ui/.env.production

@@ -1,8 +1,8 @@
 # 页面标题
-VUE_APP_TITLE = 若依管理系统
+VUE_APP_TITLE = 维修模拟训练平台
 
 # 生产环境配置
 ENV = 'production'
 
-# 若依管理系统/生产环境
+# 若维修模拟训练平台/生产环境
 VUE_APP_BASE_API = '/prod-api'

+ 2 - 2
ruoyi-ui/.env.staging

@@ -1,10 +1,10 @@
 # 页面标题
-VUE_APP_TITLE = 若依管理系统
+VUE_APP_TITLE = 维修模拟训练平台
 
 NODE_ENV = production
 
 # 测试环境配置
 ENV = 'staging'
 
-# 若依管理系统/测试环境
+# 维修模拟训练平台/测试环境
 VUE_APP_BASE_API = '/stage-api'

BIN
ruoyi-ui/public/favicon.ico


BIN
ruoyi-ui/src/assets/images/login-background.jpg


BIN
ruoyi-ui/src/assets/logo/logo.png


+ 6 - 6
ruoyi-ui/src/layout/components/Navbar.vue

@@ -7,7 +7,7 @@
 
     <div class="right-menu">
       <template v-if="device!=='mobile'">
-        <search id="header-search" class="right-menu-item" />
+        <!-- <search id="header-search" class="right-menu-item" />
 
         <el-tooltip content="源码地址" effect="dark" placement="bottom">
           <ruo-yi-git id="ruoyi-git" class="right-menu-item hover-effect" />
@@ -15,13 +15,13 @@
 
         <el-tooltip content="文档地址" effect="dark" placement="bottom">
           <ruo-yi-doc id="ruoyi-doc" class="right-menu-item hover-effect" />
-        </el-tooltip>
+        </el-tooltip> -->
 
         <screenfull id="screenfull" class="right-menu-item hover-effect" />
 
-        <el-tooltip content="布局大小" effect="dark" placement="bottom">
+        <!-- <el-tooltip content="布局大小" effect="dark" placement="bottom">
           <size-select id="size-select" class="right-menu-item hover-effect" />
-        </el-tooltip>
+        </el-tooltip> -->
 
       </template>
 
@@ -34,9 +34,9 @@
           <router-link to="/user/profile">
             <el-dropdown-item>个人中心</el-dropdown-item>
           </router-link>
-          <el-dropdown-item @click.native="setting = true">
+          <!-- <el-dropdown-item @click.native="setting = true">
             <span>布局设置</span>
-          </el-dropdown-item>
+          </el-dropdown-item> -->
           <el-dropdown-item divided @click.native="logout">
             <span>退出登录</span>
           </el-dropdown-item>

+ 159 - 2
ruoyi-ui/src/router/index.js

@@ -68,9 +68,9 @@ export const constantRoutes = [
     children: [
       {
         path: 'index',
-        component: () => import('@/views/index'),
+        component: () => import('@/views/system/user/profile/index'),
         name: 'Index',
-        meta: { title: '首页', icon: 'dashboard', affix: true }
+        meta: { title: '个人中心', icon: 'dashboard', affix: true }
       }
     ]
   },
@@ -92,6 +92,163 @@ export const constantRoutes = [
 
 // 动态路由,基于用户权限动态去加载
 export const dynamicRoutes = [
+  // 第一步,准备考试
+  {
+    path: '/people/exam-exam1',
+    component: Layout,
+    hidden: true,
+    permissions: ['people:exam:edit'],
+    children: [
+      {
+        path: 'examid/:userId(\\d+)',
+        component: () => import('@/views/people/exam/exam1'),
+        name: 'exam1',
+        meta: { title: '准备考试', activeMenu: '/people/exam' }
+      }
+    ]
+  },
+  //正在考试
+  {
+    path: '/people/exam-exam2',
+    component: Layout,
+    hidden: true,
+    permissions: ['people:exam:edit'],
+    children: [
+      {
+        path: 'examid/:userId(\\d+)',
+        component: () => import('@/views/people/exam/exam2'),
+        name: 'exam2',
+        meta: { title: '正在考试', activeMenu: '/people/exam' }
+      }
+    ]
+  },
+  //得分分析
+  {
+    path: '/people/exam-exam3',
+    component: Layout,
+    hidden: true,
+    permissions: ['people:exam:edit'],
+    children: [
+      {
+        path: 'examid/:userId(\\d+)',
+        component: () => import('@/views/people/exam/exam3'),
+        name: 'exam3',
+        meta: { title: '得分分析', activeMenu: '/people/exam' }
+      }
+    ]
+  },
+
+   // 第一步,准备练习
+   {
+    path: '/people/train-train1',
+    component: Layout,
+    hidden: true,
+    permissions: ['people:exam:edit'],
+    children: [
+      {
+        path: 'trainid/:userId(\\d+)',
+        component: () => import('@/views/people/train/train1'),
+        name: 'train1',
+        meta: { title: '准备练习', activeMenu: '/people/train' }
+      }
+    ]
+  },
+  //正在练习
+  {
+    path: '/people/train-train2',
+    component: Layout,
+    hidden: true,
+    permissions: ['people:train:edit'],
+    children: [
+      {
+        path: 'trainid/:userId(\\d+)',
+        component: () => import('@/views/people/train/train2'),
+        name: 'train2',
+        meta: { title: '正在练习', activeMenu: '/people/train' }
+      }
+    ]
+  },
+  //得分分析 
+  {
+    path: '/people/train-train3',
+    component: Layout,
+    hidden: true,
+    permissions: ['people:train:edit'],
+    children: [
+      {
+        path: 'trainid/:userId(\\d+)',
+        component: () => import('@/views/people/train/train3'),
+        name: 'train3',
+        meta: { title: '得分分析', activeMenu: '/people/train' }
+      }
+    ]
+  },
+
+
+  // 自主练习
+  {
+    path: '/people/practice-practice2',
+    component: Layout,
+    hidden: true,
+    permissions: ['people:practice:edit'],
+    children: [
+      {
+        path: 'practiceid/:userId(\\d+)',
+        component: () => import('@/views/people/practice/practice2'),
+        name: 'practice2',
+        meta: { title: '正在练习', activeMenu: '/people/practice' }
+      }
+    ]
+  },
+//得分分析 
+{
+  path: '/people/practice-practice3',
+  component: Layout,
+  hidden: true,
+  permissions: ['people:train:edit'],
+  children: [
+    {
+      path: 'practiceid/:userId(\\d+)',
+      component: () => import('@/views/people/practice/practice3'),
+      name: 'train3',
+      meta: { title: '得分分析', activeMenu: '/people/practice' }
+    }
+  ]
+},
+
+
+
+  // 正在考试
+  {
+    path: '/peoples/present',
+    component: Layout,
+    hidden: true,
+    permissions: ['monitor:job:list'],
+    children: [
+      {
+        path: 'ids/:kaoshiId(\\d+)',
+        component: () => import('@/views/peoples/present'),
+        name: 'Present',
+        meta: { title: '当前考试', activeMenu: '/peoples/present' }
+      }
+    ]
+  },
+   // 正在练习
+   {
+    path: '/peoples/current',
+    component: Layout,
+    hidden: true,
+    permissions: ['monitor:job:list'],
+    children: [
+      {
+        path: 'ids/:lianxiId(\\d+)',
+        component: () => import('@/views/peoples/current'),
+        name: 'Present',
+        meta: { title: '当前练习', activeMenu: '/peoples/current' }
+      }
+    ]
+  },
+
   {
     path: '/system/user-auth',
     component: Layout,

+ 11 - 6
ruoyi-ui/src/views/login.vue

@@ -1,17 +1,18 @@
 <template>
   <div class="login">
     <el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form">
-      <h3 class="title">若依后台管理系统</h3>
+      <h3 class="title">登&nbsp;&nbsp;&nbsp;录</h3>
       <el-form-item prop="username">
         <el-input
           v-model="loginForm.username"
           type="text"
           auto-complete="off"
-          placeholder="账号"
+          placeholder="账号/学号"
         >
           <svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" />
         </el-input>
       </el-form-item>
+
       <el-form-item prop="password">
         <el-input
           v-model="loginForm.password"
@@ -55,9 +56,9 @@
       </el-form-item>
     </el-form>
     <!--  底部  -->
-    <div class="el-login-footer">
+    <!-- <div class="el-login-footer">
       <span>Copyright © 2018-2024 ruoyi.vip All Rights Reserved.</span>
-    </div>
+    </div> -->
   </div>
 </template>
 
@@ -80,7 +81,7 @@ export default {
       },
       loginRules: {
         username: [
-          { required: true, trigger: "blur", message: "请输入您的账号" }
+          { required: true, trigger: "blur", message: "请输入您的账号/学号" }
         ],
         password: [
           { required: true, trigger: "blur", message: "请输入您的密码" }
@@ -173,7 +174,8 @@ export default {
 .login-form {
   border-radius: 6px;
   background: #ffffff;
-  width: 400px;
+  width: 450px;
+  margin-left: 40%;
   padding: 25px 25px 5px 25px;
   .el-input {
     height: 38px;
@@ -216,4 +218,7 @@ export default {
 .login-code-img {
   height: 38px;
 }
+.el-form-item{
+  margin-bottom: 35px;
+}
 </style>

+ 111 - 0
ruoyi-ui/src/views/people/exam/exam1.vue

@@ -0,0 +1,111 @@
+<template>
+  <div class="app-container" style="width: 80%;">
+
+    <el-descriptions title="基本信息" :column="2" border style="color: #6379bb;padding-left: 20%">
+      <el-descriptions-item label="当前模式">88</el-descriptions-item>
+      <el-descriptions-item label="模拟类型">90</el-descriptions-item>
+      <el-descriptions-item label="模拟状态">30</el-descriptions-item>
+      <el-descriptions-item label="考试学员">30</el-descriptions-item>
+      <el-descriptions-item label="学员座号">30</el-descriptions-item>
+    </el-descriptions>
+
+    <el-descriptions title="注意事项" :column="1" border style="margin-top: 2%;color: #6379bb;padding-left: 20%"></el-descriptions>
+    <div class="shixiang">
+        <div>1.注意事项111</div>
+        <div>2.注意事项222</div>
+        <div>3.注意事项333</div>
+    </div>
+
+    <el-form ref="elForm" :model="form" size="medium" label-width="100px" style="margin-top: 10%;">
+        <el-form-item size="large">
+            <el-button type="primary" @click="submitForm" >开始考试</el-button>
+        </el-form-item>
+    </el-form>
+
+  </div>
+</template>
+
+<style>
+.el-form-item__content{
+  /* margin-top: 15%; */
+  text-align: center;
+}
+.shixiang{
+    color: rgb(192, 74, 84);
+    height: 30px;
+    line-height: 30px;
+    padding-left: 22%
+}
+</style>
+
+<script>
+import { getAuthRole, updateAuthRole } from "@/api/system/user";
+
+export default {
+  name: "AuthRole",
+  data() {
+    return {
+       // 遮罩层
+      loading: true,
+      // 分页信息
+      total: 0,
+      pageNum: 1,
+      pageSize: 10,
+      // 选中角色编号
+      roleIds:[],
+      // 角色信息
+      roles: [],
+      // 用户信息
+      form: {}
+    };
+  },
+  created() {
+    const userId = this.$route.params && this.$route.params.userId;
+    if (userId) {
+      this.loading = true;
+      getAuthRole(userId).then((response) => {
+        this.form = response.user;
+        this.roles = response.roles;
+        this.total = this.roles.length;
+        this.$nextTick(() => {
+          this.roles.forEach((row) => {
+            if (row.flag) {
+              this.$refs.table.toggleRowSelection(row);
+            }
+          });
+        });
+        this.loading = false;
+      });
+    }
+  },
+  methods: {
+    /** 单击选中行数据 */
+    clickRow(row) {
+      this.$refs.table.toggleRowSelection(row);
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.roleIds = selection.map((item) => item.roleId);
+    },
+    // 保存选中的数据编号
+    getRowKey(row) {
+      return row.roleId;
+    },
+    /** 提交按钮 */
+    submitForm() {
+      const userId = this.form.userId;
+      const roleIds = this.roleIds.join(",");
+    //   updateAuthRole({ userId: userId, roleIds: roleIds }).then((response) => {
+    //     this.$modal.msgSuccess("授权成功");
+    //     this.close();
+    //   });
+    this.$router.push("/people/exam-exam2/examid/" + userId);
+    },
+    /** 关闭按钮 */
+    close() {
+      const obj = { path: "/system/user" };
+      this.$tab.closeOpenPage(obj);
+    },
+  },
+};
+</script>

+ 306 - 0
ruoyi-ui/src/views/people/exam/exam2.vue

@@ -0,0 +1,306 @@
+<template>
+  <div class="app-container">
+    <div style="margin-top:3%">  
+    <div class="readme">正在考试中,考试时间 30 分钟</div>
+    <div class="djs">距离考试结束还有{{ time }}</div>
+    </div>
+
+    <el-row>
+      <h4 class="h4">更换件列表</h4>
+
+      <el-table
+      :data="tableData"  border
+      style="text-align:center;margin-top:1%;"
+      max-height="550">
+      <el-table-column
+        prop="name"
+        label="更换件类型"
+        >
+        <template slot-scope="scope">
+          <el-input v-model="scope.row.address" ></el-input>
+        </template>
+      </el-table-column>
+
+      <el-table-column
+        prop="number"
+        label="状态">
+        <template slot-scope="scope">
+          <el-input v-model="scope.row.address" ></el-input>
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="reason"
+        label="申请时间" >
+        <template slot-scope="scope">
+          <el-input v-model="scope.row.address" ></el-input>
+        </template>
+      </el-table-column>
+      <el-table-column
+        fixed="right"
+        label="操作">
+        <template slot-scope="scope">
+          <el-button
+            @click.native.prevent="AddRow(scope.$index, tableData)"
+            type="text"
+            size="small">
+            追加
+          </el-button>
+          <el-button
+            @click.native.prevent="deleteRow(scope.$index, tableData)"
+            type="text"
+            size="small">
+            移除
+          </el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+  </el-row>
+
+  <el-row>
+    <h4 class="h4">维修报告列表</h4>
+    <el-table
+      :data="tableData1"  border
+      style="text-align:center;margin-top:1%;"
+      max-height="550">
+      <el-table-column
+        prop="name"
+        label="故障现象">
+        <template slot-scope="scope">
+          <el-input v-model="scope.row.address" ></el-input>
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="number"
+        label="可能原因">
+        <template slot-scope="scope">
+          <el-input v-model="scope.row.address" ></el-input>
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="reason"
+        label="故障部位" >
+        <template slot-scope="scope">
+          <el-input v-model="scope.row.address" ></el-input>
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="reason"
+        label="排除方法" >
+        <template slot-scope="scope">
+          <el-input v-model="scope.row.address" ></el-input>
+        </template>
+      </el-table-column>
+      <el-table-column
+        fixed="right"
+        label="操作">
+        <template slot-scope="scope">
+          <el-button
+            @click.native.prevent="AddRow1(scope.$index, tableData1)"
+            type="text"
+            size="small">
+            追加
+          </el-button>
+          <el-button
+            @click.native.prevent="deleteRow1(scope.$index, tableData1)"
+            type="text"
+            size="small">
+            移除
+          </el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+  </el-row>
+  <el-form ref="elForm" :model="formData" :rules="rules" size="medium"  style="margin-top: 1%;text-align: center;">
+    <el-form-item label="修复结论" prop="field101">
+      <el-select v-model="formData.field101" placeholder="请选择修复结论" clearable :style="{width: '95%'}">
+        <el-option v-for="(item, index) in field101Options" :key="index" :label="item.label"
+          :value="item.value" :disabled="item.disabled"></el-option>
+      </el-select>
+    </el-form-item>
+    <el-form-item size="large">
+        <el-button type="primary" @click="submitForm" style="width: 8%;">交卷</el-button>
+    </el-form-item>
+  </el-form>
+  </div>
+</template>
+
+<style>
+.readme {
+  margin-top:2%;
+  text-align: center;
+  line-height:8px;
+  font-size:22px;
+}
+.djs {
+  margin-top:2%;
+  text-align: center;
+  line-height:8px;
+  font-size:22px;
+  color:red;
+  margin-bottom: 3%;
+}
+</style>
+
+<script>
+import { getAuthRole, updateAuthRole } from "@/api/system/user";
+
+export default {
+  name: "AuthRole",
+  data() {
+    return {
+      duration: 1800, // 假设倒计时1800秒
+      tableData: [{
+        name: '1111',
+        number: '',
+        reason: ''
+      }, {
+        name: '2222',
+        number: '',
+        reason: ''
+      }],
+
+      tableData1: [{
+        name: '',
+        number: '',
+        reason: '',
+        reason: ''
+      }, {
+        name: '',
+        number: '',
+        reason: '',
+        reason: ''
+      }],
+      formData: {
+        field101: undefined,
+      },
+      rules: {
+        field101: [{
+          required: true,
+          message: '请选择下拉选择',
+          trigger: 'change'
+        }],
+      },
+      field101Options: [{
+        "label": "选项一",
+        "value": 1
+      }, {
+        "label": "选项二",
+        "value": 2
+      }, {
+        "label": "选项三",
+        "value": 3
+      }],
+       // 遮罩层
+      loading: true,
+      // 分页信息
+      total: 0,
+      pageNum: 1,
+      pageSize: 10,
+      // 选中角色编号
+      roleIds:[],
+      // 角色信息
+      roles: [],
+      // 用户信息
+      form: {},
+      // 列信息
+      columns: [
+        { key: 0, label: `更换件类型`, visible: true },
+        { key: 1, label: `状态`, visible: true },
+        { key: 2, label: `申请时间`, visible: true },
+      ],
+    };
+  },
+  created() {
+    const userId = this.$route.params && this.$route.params.userId;
+    if (userId) {
+      this.loading = true;
+      getAuthRole(userId).then((response) => {
+        this.form = response.user;
+        this.roles = response.roles;
+        this.total = this.roles.length;
+        this.$nextTick(() => {
+          this.roles.forEach((row) => {
+            if (row.flag) {
+              this.$refs.table.toggleRowSelection(row);
+            }
+          });
+        });
+        this.loading = false;
+      });
+    }
+  },
+  methods: {
+    deleteRow(index, rows) {
+      console.log(index+"@@@@")
+      console.log(rows+"####")
+      rows.splice(index, 1);
+    },
+    AddRow(index, rows) {
+      const newRow = {
+        name: '',
+        number: '',
+        reason: '',
+      };
+      this.tableData.push(newRow); // 追加新行
+    },
+    deleteRow1(index, rows) {
+      console.log(index+"@@@@")
+      console.log(rows+"####")
+      rows.splice(index, 1);
+    },
+    AddRow1(index, rows) {
+      const newRow = {
+        name: '',
+        number: '',
+        reason: '',
+      };
+      this.tableData1.push(newRow); // 追加新行
+    },
+    /** 单击选中行数据 */
+    clickRow(row) {
+      this.$refs.table.toggleRowSelection(row);
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.roleIds = selection.map((item) => item.roleId);
+    },
+    // 保存选中的数据编号
+    getRowKey(row) {
+      return row.roleId;
+    },
+    /** 提交按钮 */
+    submitForm() {
+      const userId = this.form.userId;
+      const roleIds = this.roleIds.join(",");
+    //   updateAuthRole({ userId: userId, roleIds: roleIds }).then((response) => {
+    //     this.$modal.msgSuccess("授权成功");
+    //     this.close();
+    //   });
+    // this.$router.push("/people/exam-exam3/examid/" + userId);
+    this.$router.push("/exam/exam");
+    },
+    /** 关闭按钮 */
+    close() {
+      const obj = { path: "/system/user" };
+      this.$tab.closeOpenPage(obj);
+    },
+  },
+  computed: {
+      time() {
+        //let hours = Math.floor(this.duration / 3600);
+        let minutes = Math.floor((this.duration % 3600) / 60);
+        let seconds = this.duration % 60;
+        return `${minutes}分${seconds}秒`;
+      },
+    },
+  mounted() {
+    let timer = setInterval(() => {
+      this.duration--;
+      if (this.duration <= 0) {
+        clearInterval(timer);
+      }
+    }, 1000);
+  },
+
+};
+</script>

+ 229 - 0
ruoyi-ui/src/views/people/exam/exam3.vue

@@ -0,0 +1,229 @@
+<template>
+  <div class="app-container">
+    <div>  
+      <div class="djs">得分成绩/满分成绩: <span class="df">50</span>/100</div>
+    </div>
+    <el-table
+      :data="tableData"
+      :span-method="arraySpanMethod"
+      border
+      style="width: 100%;margin-top:1%">
+      <el-table-column
+        prop="id"
+        label="序号"
+        width="180">
+      </el-table-column>
+      <el-table-column
+        prop="name"
+        label="评分标准">
+      </el-table-column>
+      <el-table-column
+        prop="name2"
+
+        label="扣分">
+      </el-table-column>
+      <el-table-column
+        prop="name3"
+        label="维修情况">
+        <template scope="scope">
+            <span v-if="scope.row.name3==='排除'" style="color: green">排除</span>
+            <span v-else-if="scope.row.name3==='未排除'" style="color: red">未排除</span>
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="name4"
+        label="题目">
+      </el-table-column>
+    </el-table>
+
+    <el-table
+      :data="tableData1"
+      :span-method="arraySpanMethod"
+      border
+      style="width: 100%;">
+      <el-table-column
+        prop="id"
+        label="序号"
+        width="180">
+      </el-table-column>
+      <el-table-column
+        prop="name"
+        label="评分标准">
+      </el-table-column>
+      <el-table-column
+        prop="name2"
+        label="扣分">
+      </el-table-column>
+      <el-table-column 
+        prop="name3"
+        label="报告情况">
+        <template scope="scope">
+            <span v-if="scope.row.name3==='正确'" style="color: green">正确</span>
+            <span v-else-if="scope.row.name3==='错误'" style="color: red">错误</span>
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="name4"
+        label="学生答题情况">
+      </el-table-column>
+    </el-table>
+
+    <el-form ref="elForm" :model="formData"  size="medium" label-width="100px" style="margin-top: 2%;text-align: center;">
+        <el-form-item size="large">
+            <el-button type="primary" @click="submitForm" style="width: 8%;">结束</el-button>
+        </el-form-item>
+    </el-form>
+
+  </div>
+</template>
+<style>
+.djs{
+  margin-right: 5%;
+  text-align: right;
+  line-height:8px;
+  font-size:20px;
+}
+.df {
+  color:red;
+}
+</style>
+<script>
+  export default {
+    data() {
+      return {
+        tableData: [{
+          id:'一.故障排除(75分)',
+          name: '',
+          name2: '',
+          name3: '',
+          name4: '',
+        },{
+          id:1,
+          name: '故障一未排除扣25分',
+          name2: '',
+          name3: '排除',
+          name4: '',
+        }, {
+          id:2,
+          name: '故障二未排除扣25分',
+          name2: '',
+          name3: '未排除',
+          name4: '',
+        }, {
+          id:3,
+          name: '故障三未排除扣25分',
+          name2: '',
+          name3: '排除',
+          name4: '',
+        }],
+
+        tableData1: [{
+          id:'二.修理报告表(15分)',
+          name: '',
+          name2: '',
+          name3: '',
+          name4: '',
+        },{
+          id:1,
+          name: '故障现象少写或错写1条扣1分',
+          name2: '',
+          name3: '正确',
+          name4: '',
+        }, {
+          id:2,
+          name: '可能原因少写或错写1条扣1分',
+          name2: '',
+          name3: '错误',
+          name4: '',
+        }, {
+          id:3,
+          name: '故障部位少写或错写1条扣1分',
+          name2: '',
+          name3: '正确',
+          name4: '',
+        }, {
+          id:4,
+          name: '排除方法少写或错写1条扣1分',
+          name2: '',
+          name3: '正确',
+          name4: '',
+        }, {
+          id:5,
+          name: '修复结论错扣2分',
+          name2: '',
+          name3: '正确',
+          name4: '',
+        }, {
+          id:'三.维修时间(10分)',
+          name: '',
+          name2: '',
+          name3: '',
+          name4: '',
+        }, {
+          id:'按没超过1分钟扣1分的比例扣分',
+          name: '',
+          name2: '',
+          name3: '',
+          name4: '',
+        }, {
+          id:'扣分小计',
+          name: '',
+          name2: '超时:',
+          name3: '',
+          name4: '',
+        }, {
+          id:'五.成绩',
+          name: '',
+          name2: '-50',
+          name3: '',
+          name4: '',
+        }, {
+          id:'说明',
+          name: '',
+          name2: '',
+          name3: '',
+          name4: '',
+        }],
+      };
+    },
+    methods: {
+      //首页合并
+      arraySpanMethod({ row, column, rowIndex, columnIndex }) {
+        if (rowIndex === 0) {
+          if (columnIndex === 0) {
+            return [1, 5];
+          } else {
+            return [0, 0];
+          }
+        }
+        if (rowIndex === 6) {
+          if (columnIndex === 0) {
+            return [1, 5];
+          } else {
+            return [0, 0];
+          }
+        }
+        //按每超时1分钟扣分的比例扣分
+        if (rowIndex>6) {
+          if (columnIndex === 0) {
+            return [1, 2];
+          }else if(columnIndex ===2){
+            return [1, 3];
+          } else {
+            return [0, 0];
+          }
+        }
+      },
+      /** 结束按钮 */
+      submitForm() {
+        this.$router.push("/exam/exam");
+        // const userId = this.form.userId;
+        // const roleIds = this.roleIds.join(",");
+        // updateAuthRole({ userId: userId, roleIds: roleIds }).then((response) => {
+        //   this.$modal.msgSuccess("授权成功");
+        //   this.close();
+        // });
+      },
+    }
+  };
+</script>

+ 681 - 0
ruoyi-ui/src/views/people/exam/index.vue

@@ -0,0 +1,681 @@
+<template>
+  <div class="app-container">
+    <el-row>
+      <!--用户数据1-->
+        <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+          <el-form-item label="考试名称" prop="userName">
+            <el-input
+              v-model="queryParams.userName"
+              placeholder="请输入考试名称"
+              clearable
+              style="width: 150px"
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+          <el-form-item label="考试时间">
+            <el-date-picker
+              v-model="dateRange"
+              style="width: 240px"
+              value-format="yyyy-MM-dd"
+              type="daterange"
+              range-separator="-"
+              start-placeholder="开始日期"
+              end-placeholder="结束日期"
+            ></el-date-picker>
+          </el-form-item>
+          <el-form-item label="模拟器类型" prop="userName">
+            <el-input
+              v-model="queryParams.userName"
+              placeholder="请输入模拟器类型"
+              clearable
+              style="width: 240px"
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+          <el-form-item label="考试状态" prop="status">
+            <el-select
+              v-model="queryParams.status"
+              placeholder="考试状态"
+              clearable
+              style="width: 150px"
+            >
+              <el-option
+                v-for="dict in dict.type.sys_normal_disable"
+                :key="dict.value"
+                :label="dict.label"
+                :value="dict.value"
+              />
+            </el-select>
+          </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="['simulator:task: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="['simulator:user: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="['simulator:user:remove']"
+            >删除</el-button>
+          </el-col>
+          <right-toolbar :showSearch.sync="showSearch" @queryTable="getList" :columns="columns"></right-toolbar>
+        </el-row> -->
+
+        <el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange">
+          <el-table-column type="selection" width="50" align="center" />
+          <el-table-column label="考试名称" align="center" key="userName" prop="userName" v-if="columns[0].visible" :show-overflow-tooltip="true" />
+          <el-table-column label="考试时间" align="center" key="kaoshiTime" prop="kaoshiTime" v-if="columns[1].visible" :show-overflow-tooltip="true" />
+          <el-table-column label="模拟器类型" align="center" key="liexing" prop="liexing" v-if="columns[2].visible" :show-overflow-tooltip="true" />
+          <el-table-column label="创建老师" align="center" key="creater" prop="creater" v-if="columns[3].visible" :show-overflow-tooltip="true" />
+          <el-table-column label="考试状态" align="center" key="status" v-if="columns[4].visible">
+            <template slot-scope="scope">
+              <el-switch
+                v-model="scope.row.status"
+                active-value="0"
+                inactive-value="1"
+                @change="handleStatusChange(scope.row)"
+              ></el-switch>
+            </template>
+          </el-table-column>
+          <el-table-column
+            label="操作"
+            align="center"
+            width="160"
+            class-name="small-padding fixed-width"
+          >
+            <template slot-scope="scope">
+              <el-button
+                size="mini"
+                type="text"
+                icon="el-icon-thumb"
+                @click="handleInto(scope.row)" 
+                v-hasPermi="['simulator:user: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-row>
+
+    <!-- 添加或修改用户配置对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="70%" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="型号">
+              <!-- v-model="form.monitype" -->
+              <el-select v-model="selectedEquip"  placeholder="请选择模拟器型号">
+                <el-option
+                  value="请选择"
+                >请选择</el-option>
+                <el-option
+                  v-for="dict in dict.type.sim_equip_type"
+                  :key="dict.value"
+                  :label="dict.label"
+                  :value="dict.value"
+                ></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="任务名称" prop="userName">
+              <el-input  placeholder="请输入任务名称" maxlength="30" />
+            </el-form-item>
+          </el-col>
+          <div style="text-align: right;">
+            <el-button @click="toggleSelection(tableData)">选择全部</el-button>
+            <el-button @click="toggleSelection()">取消选择</el-button>
+          </div>
+        </el-row>
+        
+          
+       
+        <el-table 
+          :data="tableData" border ref="multipleTable" @selection-change="handleSelectionRow" 
+          :span-method="objectSpanMethod" 
+          style="width:100%;text-align:center;margin-left:10px; margin-top:10px">
+          <el-table-column
+            prop="xinghao"
+            label="型号">
+          </el-table-column>
+          <el-table-column
+            prop="xianxiang"
+            label="故障现象">
+          </el-table-column>
+          <el-table-column
+            prop="name"
+            label="故障部位">
+          </el-table-column>
+          <el-table-column
+          type="selection" prop="ids"
+            label="ID"
+          width="55"></el-table-column>
+        </el-table>
+      </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>
+<style>
+  .el-table__header tr th .cell{
+    text-align: center;
+  }
+  .el-table__row .cell {
+    text-align: center;
+  }
+  /* .el-form-item__label{
+    width: 85px !important;
+  } */
+</style>
+<script>
+import { listUser, getUser, delUser, addUser, updateUser, resetUserPwd, changeUserStatus, deptTreeSelect } from "@/api/system/user";
+import { getToken } from "@/utils/auth";
+import Treeselect from "@riophae/vue-treeselect";
+import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+
+export default {
+  // name: "Task",
+  dicts: ['sim_equip_type'],
+  components: { Treeselect },
+  data() {
+    return {
+      multipleSelection: [],
+      selectedEquip: '',
+      selectedZjEquip: '',
+      
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 用户表格数据
+      userList: null,
+      // 弹出层标题
+      title: "",
+      // 部门树选项
+      deptOptions: undefined,
+      // 是否显示弹出层
+      open: false,
+      //自检弹出框
+      zijianopen:false,
+      // 部门名称
+      deptName: undefined,
+      // 默认密码
+      initPassword: undefined,
+      // 日期范围
+      dateRange: [],
+      // 岗位选项
+      postOptions: [],
+      // 角色选项
+      roleOptions: [],
+      // 表单参数
+      form: {},
+      defaultProps: {
+        children: "children",
+        label: "label"
+      },
+      // 用户导入参数
+      upload: {
+        // 是否显示弹出层(用户导入)
+        open: false,
+        // 弹出层标题(用户导入)
+        title: "",
+        // 是否禁用上传
+        isUploading: false,
+        // 是否更新已经存在的用户数据
+        updateSupport: 0,
+        // 设置上传的请求头部
+        headers: { Authorization: "Bearer " + getToken() },
+        // 上传的地址
+        url: process.env.VUE_APP_BASE_API + "/simulator/user/importData"
+      },
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        userName: undefined,
+        phonenumber: undefined,
+        status: undefined,
+        deptId: undefined
+      },
+      // 列信息
+      columns: [
+        { key: 0, label: `考试名称`, visible: true },
+        { key: 1, label: `考试时间`, visible: true },
+        { key: 2, label: `模拟器类型`, visible: true },
+        { key: 3, label: `考试状态`, visible: true },
+        { key: 4, label: `创建老师`, visible: true },
+      ],
+      // 表单校验
+      rules: {
+      }
+    };
+  },
+  watch: {
+    // 根据名称筛选部门树
+    deptName(val) {
+      this.$refs.tree.filter(val);
+    },
+    
+    
+  },
+  created() {
+    this.getList();
+    //this.getDeptTree();
+    this.getConfigKey("sys.user.initPassword").then(response => {
+      this.initPassword = response.msg;
+    });
+  },
+  methods: {
+    objectSpanMethod({ row, column, rowIndex, columnIndex }) {
+      // console.log(this.selectedEquip+'@@@')
+      //第一列型号
+      if(columnIndex === 0) {
+        if(this.selectedEquip==2){
+          if(rowIndex==0){
+            return { rowspan: 13, colspan: 1 };
+          }
+          return { rowspan: 0, colspan: 0 };
+        }else if(this.selectedEquip==3){
+          if(rowIndex==0){
+            return { rowspan: 16, colspan: 1 };
+          }
+          return { rowspan: 0, colspan: 0};
+        }else{
+          if(rowIndex==0){
+            return { rowspan: 11, colspan: 1 };
+          }else if(rowIndex==11){
+            return { rowspan: 13, colspan: 1 };
+          }else if(rowIndex==24){
+            return { rowspan: 16, colspan: 1 };
+          }else{
+            return { rowspan: 0, colspan: 0 };
+          }
+        }
+      }
+
+      //第二列故障现象
+      if(columnIndex === 1) {
+        if(this.selectedEquip==2){
+          // console.log(rowIndex+'####')
+          if(rowIndex<9 && rowIndex % 2 === 0){
+            return { rowspan: 2, colspan: 1 };
+          }else if((rowIndex>9&&rowIndex<13)){
+            return { rowspan: 1, colspan: 1 };
+          }else{
+            return { rowspan: 0, colspan: 0 };
+          } 
+        }else if(this.selectedEquip==3){
+          if(rowIndex<7 && rowIndex % 2 === 0){
+            return { rowspan: 2, colspan: 1 };
+          }else if((rowIndex==8)){
+            return { rowspan: 3, colspan: 1 };
+          }else if(rowIndex==11){
+            return { rowspan: 2, colspan: 1 };
+          }else if(rowIndex>12 && rowIndex<16){
+            return { rowspan: 1, colspan: 1 };
+          }else{
+            return { rowspan: 0, colspan: 0 };
+          } 
+        }else{
+          if(rowIndex<7 && rowIndex % 2 === 0){
+            return { rowspan: 2, colspan: 1 };
+          }else if((rowIndex>7&&rowIndex<11) || (rowIndex>20&&rowIndex<24) || (rowIndex>36)){
+            return { rowspan: 1, colspan: 1 };
+          }else if((rowIndex==35) || (rowIndex>10 && rowIndex<20) && rowIndex % 2 === 1){
+            return { rowspan: 2, colspan: 1 };
+          }else if(rowIndex>23 && rowIndex<32 && rowIndex % 2 === 0){
+            return { rowspan: 2, colspan: 1 };
+          }else if(rowIndex==32){
+            return { rowspan: 3, colspan: 1 };
+          }else{
+            return { rowspan: 0, colspan: 0 };
+          }
+        }
+        
+      }
+      //故障部位 和 选择
+      if(columnIndex === 2 || columnIndex === 3){
+        //return { rowspan: 1, colspan: 1 };
+      }
+    },
+    
+    objectSpanMethod1({ row, column, rowIndex, columnIndex }) {
+      //第二列故障现象
+      if(columnIndex === 0) {
+        if(rowIndex<7 && rowIndex % 2 === 0){
+          return { rowspan: 2, colspan: 1 };
+        }else if((rowIndex>7&&rowIndex<11) || (rowIndex>20&&rowIndex<24) || (rowIndex>36)){
+          return { rowspan: 1, colspan: 1 };
+        }else if((rowIndex==35) || (rowIndex>10 && rowIndex<20) && rowIndex % 2 === 1){
+          return { rowspan: 2, colspan: 1 };
+        }else if(rowIndex>23 && rowIndex<32 && rowIndex % 2 === 0){
+          return { rowspan: 2, colspan: 1 };
+        }else if(rowIndex==32){
+          return { rowspan: 3, colspan: 1 };
+        }else{
+          return { rowspan: 0, colspan: 0 };
+        }
+      }
+    },
+    // 根据选择的option获取新的数据
+    // getNewTableData(option) {
+    //   // 逻辑处理返回新的数据数组
+    //   return [
+    //     // ...新数据
+    //   ];
+    // },
+    toggleSelection(rows) {
+      if (rows) {
+        rows.forEach(row => {
+          this.$refs.multipleTable.toggleRowSelection(row);
+          console.log(row.ids+'###')
+          console.log(row.name+'@@@')
+        });
+      } else {
+        this.$refs.multipleTable.clearSelection();
+      }
+    },
+    handleSelectionRow(val) {
+      this.multipleSelection = val;
+    },
+    /** 查询用户列表 */
+    getList() {
+      this.loading = true;
+      listUser(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
+          //将返回值注释
+          this.userList = response.rows;
+          this.total = response.total;
+          this.loading = false;
+        }
+      );
+    },
+    /** 查询部门下拉树结构 */
+    getDeptTree() {
+      deptTreeSelect().then(response => {
+        this.deptOptions = response.data;
+      });
+    },
+    // 筛选节点
+    filterNode(value, data) {
+      if (!value) return true;
+      return data.label.indexOf(value) !== -1;
+    },
+    // 节点单击事件
+    handleNodeClick(data) {
+      this.queryParams.deptId = data.id;
+      this.handleQuery();
+    },
+    // 用户状态修改
+    handleStatusChange(row) {
+      let text = row.status === "0" ? "启用" : "停用";
+      this.$modal.confirm('确认要"' + text + '""' + row.userName + '"用户吗?').then(function() {
+        return changeUserStatus(row.userId, row.status);
+      }).then(() => {
+        this.$modal.msgSuccess(text + "成功");
+      }).catch(function() {
+        row.status = row.status === "0" ? "1" : "0";
+      });
+    },
+    //清除故障
+    clearFaultChange(row,number,nametext){
+      console.log()
+      // console.log(nametext+'###')
+      // console.log(row[nametext]+'@@@')
+      // console.log(row.name1+'@@@')
+      let text1 = '清除所有模拟器故障';
+      console.log(nametext + '###name1');
+      if(nametext != 'all'){
+        text1 = '清除'+ number +'号坐席模拟器故障';
+      }
+      this.$modal.confirm('确认要"' + text1 + '"吗?').then(function() {
+        // return changeUserStatus(row.userId, row.status);
+      }).then(() => {
+        this.$modal.msgSuccess(text1 + "成功");
+      }).catch(function() {
+        // row.status = row.status === "0" ? "1" : "0";
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.zijianopen = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        userId: undefined,
+        deptId: undefined,
+        userName: undefined,
+        
+        password: undefined,
+        phonenumber: undefined,
+        email: undefined,
+        sex: undefined,
+        status: "0",
+        remark: undefined,
+        postIds: [],
+        roleIds: []
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.dateRange = [];
+      this.resetForm("queryForm");
+      this.queryParams.deptId = undefined;
+      this.$refs.tree.setCurrentKey(null);
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.userId);
+      this.single = selection.length != 1;
+      this.multiple = !selection.length;
+    },
+    // 更多操作触发
+    handleCommand(command, row) {
+      switch (command) {
+        case "handleResetPwd":
+          this.handleResetPwd(row);
+          break;
+        case "handleAuthRole":
+          this.handleAuthRole(row);
+          break;
+        default:
+          break;
+      }
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      getUser().then(response => {
+        this.postOptions = response.posts;
+        this.roleOptions = response.roles;
+        this.open = true;
+        this.title = "新增训练任务";
+        this.form.password = this.initPassword;
+      });
+    },
+    /* 故障设置自检 **/
+    handleInspect() {
+      //this.reset();
+      getUser().then(response => {
+        //this.postOptions = response.posts;
+        //this.roleOptions = response.roles;
+        this.zijianopen = true;
+        this.title = "故障设置自检";
+      });
+    },
+
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const userId = row.userId || this.ids;
+      getUser(userId).then(response => {
+        this.form = response.data;
+        this.postOptions = response.posts;
+        this.roleOptions = response.roles;
+        this.$set(this.form, "postIds", response.postIds);
+        this.$set(this.form, "roleIds", response.roleIds);
+        this.open = true;
+        this.title = "修改用户";
+        this.form.password = "";
+      });
+    },
+    /** 重置密码按钮操作 */
+    handleResetPwd(row) {
+      this.$prompt('请输入"' + row.userName + '"的新密码', "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        closeOnClickModal: false,
+        inputPattern: /^.{5,20}$/,
+        inputErrorMessage: "用户密码长度必须介于 5 和 20 之间",
+        inputValidator: (value) => {
+          if (/<|>|"|'|\||\\/.test(value)) {
+            return "不能包含非法字符:< > \" ' \\\ |"
+          }
+        },
+      }).then(({ value }) => {
+          resetUserPwd(row.userId, value).then(response => {
+            this.$modal.msgSuccess("修改成功,新密码是:" + value);
+          });
+        }).catch(() => {});
+    },
+
+    /** 进入操作 */
+    handleInto: function(row) {
+      const userId = row.userId;
+      console.log(userId)
+      this.$router.push("/people/exam-exam1/examid/" + userId);
+    },
+    /** 提交按钮 */
+    submitForm: function() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.userId != undefined) {
+            updateUser(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addUser(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const userIds = row.userId || this.ids;
+      this.$modal.confirm('是否确认删除用户编号为"' + userIds + '"的数据项?').then(function() {
+        return delUser(userIds);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    //训练任务下发
+    handleIssued(row) {
+      const userIds = row.userId || this.ids;
+      this.$modal.confirm('是否确定编号为"' + userIds + '"的训练任务?').then(function() {
+        //return delUser(userIds);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('simulator/user/export', {
+        ...this.queryParams
+      }, `user_${new Date().getTime()}.xlsx`)
+    },
+    /** 导入按钮操作 */
+    handleImport() {
+      this.upload.title = "用户导入";
+      this.upload.open = true;
+    },
+    /** 下载模板操作 */
+    importTemplate() {
+      this.download('simulator/user/importTemplate', {
+      }, `user_template_${new Date().getTime()}.xlsx`)
+    },
+    // 文件上传中处理
+    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();
+    },
+    // 提交上传文件
+    submitFileForm() {
+      this.$refs.upload.submit();
+    }
+  }
+};
+</script>

+ 72 - 0
ruoyi-ui/src/views/people/practice/index.vue

@@ -0,0 +1,72 @@
+<template>
+  <div class="app-container">
+    <el-form ref="elForm" :model="formData" :rules="rules" size="medium" label-width="100px">
+      <el-form-item label="模拟器类型" prop="field101">
+        <el-select v-model="formData.field101" placeholder="请选择模拟器类型" clearable :style="{width: '95%'}">
+          <el-option v-for="(item, index) in field101Options" :key="index" :label="item.label"
+            :value="item.value" :disabled="item.disabled"></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item size="large">
+        <el-button type="primary" @click="submitForm" >开始练习</el-button>
+      </el-form-item>
+    </el-form>
+  </div>
+</template>
+<script>
+export default {
+  components: {},
+  props: [],
+  data() {
+    return {
+      formData: {
+        field101: undefined,
+      },
+      rules: {
+        field101: [{
+          required: true,
+          message: '请选择下拉选择',
+          trigger: 'change'
+        }],
+      },
+      field101Options: [{
+        "label": "选项一",
+        "value": 1
+      }, {
+        "label": "选项二",
+        "value": 2
+      }, {
+        "label": "选项三",
+        "value": 3
+      }],
+    }
+  },
+  computed: {},
+  watch: {},
+  created() {},
+  mounted() {},
+  methods: {
+    submitForm() {
+      // this.$refs['elForm'].validate(valid => {
+      //   if (!valid) return
+      //   // TODO 提交表单
+      // })
+      const userId = 1;//当前用户
+      this.$router.push("/people/practice-practice2/practiceid/" + userId);
+    },
+    resetForm() {
+      this.$refs['elForm'].resetFields()
+    },
+  }
+}
+
+</script>
+<style>
+.el-form-item__content{
+  /* margin-top: 15%; */
+  text-align: center;
+}
+.el-form-item__label{
+  width: 95px !important;
+}
+</style>

+ 302 - 0
ruoyi-ui/src/views/people/practice/practice2.vue

@@ -0,0 +1,302 @@
+<template>
+  <div class="app-container">
+    <div style="margin-top:3%">  
+    <div class="readme">正在练习中,考试时间 30 分钟</div>
+    <div class="djs">距离考试结束还有{{ time }}</div>
+    </div>
+
+    <el-row>
+      <h4 class="h4">更换件列表</h4>
+
+      <el-table
+      :data="tableData"  border
+      style="text-align:center;margin-top:1%;"
+      max-height="550">
+      <el-table-column
+        prop="name"
+        label="更换件类型"
+        >
+        <template slot-scope="scope">
+          <el-input v-model="scope.row.address" ></el-input>
+        </template>
+      </el-table-column>
+
+      <el-table-column
+        prop="number"
+        label="状态">
+        <template slot-scope="scope">
+          <el-input v-model="scope.row.address" ></el-input>
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="reason"
+        label="申请时间" >
+        <template slot-scope="scope">
+          <el-input v-model="scope.row.address" ></el-input>
+        </template>
+      </el-table-column>
+      <el-table-column
+        fixed="right"
+        label="操作">
+        <template slot-scope="scope">
+          <el-button
+            @click.native.prevent="AddRow(scope.$index, tableData)"
+            type="text"
+            size="small">
+            追加
+          </el-button>
+          <el-button
+            @click.native.prevent="deleteRow(scope.$index, tableData)"
+            type="text"
+            size="small">
+            移除
+          </el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+  </el-row>
+
+  <el-row>
+    <h4 class="h4">维修报告列表</h4>
+    <el-table
+      :data="tableData1"  border
+      style="text-align:center;margin-top:1%;"
+      max-height="550">
+      <el-table-column
+        prop="name"
+        label="故障现象">
+        <template slot-scope="scope">
+          <el-input v-model="scope.row.address" ></el-input>
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="number"
+        label="可能原因">
+        <template slot-scope="scope">
+          <el-input v-model="scope.row.address" ></el-input>
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="reason"
+        label="故障部位" >
+        <template slot-scope="scope">
+          <el-input v-model="scope.row.address" ></el-input>
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="reason"
+        label="排除方法" >
+        <template slot-scope="scope">
+          <el-input v-model="scope.row.address" ></el-input>
+        </template>
+      </el-table-column>
+      <el-table-column
+        fixed="right"
+        label="操作">
+        <template slot-scope="scope">
+          <el-button
+            @click.native.prevent="AddRow1(scope.$index, tableData1)"
+            type="text"
+            size="small">
+            追加
+          </el-button>
+          <el-button
+            @click.native.prevent="deleteRow1(scope.$index, tableData1)"
+            type="text"
+            size="small">
+            移除
+          </el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+  </el-row>
+  <el-form ref="elForm" :model="formData" :rules="rules" size="medium"  style="margin-top: 1%;text-align: center;">
+    <el-form-item label="修复结论" prop="field101">
+      <el-select v-model="formData.field101" placeholder="请选择修复结论" clearable :style="{width: '95%'}">
+        <el-option v-for="(item, index) in field101Options" :key="index" :label="item.label"
+          :value="item.value" :disabled="item.disabled"></el-option>
+      </el-select>
+    </el-form-item>
+    <el-form-item size="large">
+        <el-button type="primary" @click="submitForm" style="width: 8%;">交卷</el-button>
+    </el-form-item>
+  </el-form>
+  </div>
+</template>
+
+<style>
+.readme {
+  margin-top:2%;
+  text-align: center;
+  line-height:8px;
+  font-size:22px;
+}
+.djs {
+  margin-top:2%;
+  text-align: center;
+  line-height:8px;
+  font-size:22px;
+  color:red;
+  margin-bottom: 3%;
+}
+</style>
+
+<script>
+import { getAuthRole, updateAuthRole } from "@/api/system/user";
+
+export default {
+  name: "AuthRole",
+  data() {
+    return {
+      duration: 1800, // 假设倒计时1800秒
+      tableData: [{
+        name: '1111',
+        number: '',
+        reason: ''
+      }, {
+        name: '2222',
+        number: '',
+        reason: ''
+      }],
+
+      tableData1: [{
+        name: '',
+        number: '',
+        reason: '',
+        reason: ''
+      }, {
+        name: '',
+        number: '',
+        reason: '',
+        reason: ''
+      }],
+      formData: {
+        field101: undefined,
+      },
+      rules: {
+        field101: [{
+          required: true,
+          message: '请选择下拉选择',
+          trigger: 'change'
+        }],
+      },
+      field101Options: [{
+        "label": "选项一",
+        "value": 1
+      }, {
+        "label": "选项二",
+        "value": 2
+      }, {
+        "label": "选项三",
+        "value": 3
+      }],
+       // 遮罩层
+      loading: true,
+      // 分页信息
+      total: 0,
+      pageNum: 1,
+      pageSize: 10,
+      // 选中角色编号
+      roleIds:[],
+      // 角色信息
+      roles: [],
+      // 用户信息
+      form: {},
+      // 列信息
+      columns: [
+        { key: 0, label: `更换件类型`, visible: true },
+        { key: 1, label: `状态`, visible: true },
+        { key: 2, label: `申请时间`, visible: true },
+      ],
+    };
+  },
+  created() {
+    const userId = this.$route.params && this.$route.params.userId;
+    if (userId) {
+      this.loading = true;
+      getAuthRole(userId).then((response) => {
+        this.form = response.user;
+        this.roles = response.roles;
+        this.total = this.roles.length;
+        this.$nextTick(() => {
+          this.roles.forEach((row) => {
+            if (row.flag) {
+              // this.$refs.table.toggleRowSelection(row);
+            }
+          });
+        });
+        this.loading = false;
+      });
+    }
+  },
+  methods: {
+    deleteRow(index, rows) {
+      console.log(index+"@@@@")
+      console.log(rows+"####")
+      rows.splice(index, 1);
+    },
+    AddRow(index, rows) {
+      const newRow = {
+        name: '',
+        number: '',
+        reason: '',
+      };
+      this.tableData.push(newRow); // 追加新行
+    },
+    deleteRow1(index, rows) {
+      console.log(index+"@@@@")
+      console.log(rows+"####")
+      rows.splice(index, 1);
+    },
+    AddRow1(index, rows) {
+      const newRow = {
+        name: '',
+        number: '',
+        reason: '',
+      };
+      this.tableData1.push(newRow); // 追加新行
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.roleIds = selection.map((item) => item.roleId);
+    },
+    // 保存选中的数据编号
+    getRowKey(row) {
+      return row.roleId;
+    },
+    /** 提交按钮 */
+    submitForm() {
+      // const userId = this.form.userId;
+      // const roleIds = this.roleIds.join(",");
+    //   updateAuthRole({ userId: userId, roleIds: roleIds }).then((response) => {
+    //     this.$modal.msgSuccess("授权成功");
+    //     this.close();
+    //   });
+      const userId = 1;//当前用户
+      this.$router.push("/people/practice-practice3/practiceid/" + userId);
+    },
+    /** 关闭按钮 */
+    close() {
+      const obj = { path: "/system/user" };
+      this.$tab.closeOpenPage(obj);
+    },
+  },
+  computed: {
+      time() {
+        //let hours = Math.floor(this.duration / 3600);
+        let minutes = Math.floor((this.duration % 3600) / 60);
+        let seconds = this.duration % 60;
+        return `${minutes}分${seconds}秒`;
+      },
+    },
+  mounted() {
+    let timer = setInterval(() => {
+      this.duration--;
+      if (this.duration <= 0) {
+        clearInterval(timer);
+      }
+    }, 1000);
+  },
+
+};
+</script>

+ 229 - 0
ruoyi-ui/src/views/people/practice/practice3.vue

@@ -0,0 +1,229 @@
+<template>
+  <div class="app-container">
+    <div>  
+      <div class="djs">得分成绩/满分成绩: <span class="df">50</span>/100</div>
+    </div>
+    <el-table
+      :data="tableData"
+      :span-method="arraySpanMethod"
+      border
+      style="width: 100%;margin-top:1%">
+      <el-table-column
+        prop="id"
+        label="序号"
+        width="180">
+      </el-table-column>
+      <el-table-column
+        prop="name"
+        label="评分标准">
+      </el-table-column>
+      <el-table-column
+        prop="name2"
+
+        label="扣分">
+      </el-table-column>
+      <el-table-column
+        prop="name3"
+        label="维修情况">
+        <template scope="scope">
+            <span v-if="scope.row.name3==='排除'" style="color: green">排除</span>
+            <span v-else-if="scope.row.name3==='未排除'" style="color: red">未排除</span>
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="name4"
+        label="题目">
+      </el-table-column>
+    </el-table>
+
+    <el-table
+      :data="tableData1"
+      :span-method="arraySpanMethod"
+      border
+      style="width: 100%;">
+      <el-table-column
+        prop="id"
+        label="序号"
+        width="180">
+      </el-table-column>
+      <el-table-column
+        prop="name"
+        label="评分标准">
+      </el-table-column>
+      <el-table-column
+        prop="name2"
+        label="扣分">
+      </el-table-column>
+      <el-table-column 
+        prop="name3"
+        label="报告情况">
+        <template scope="scope">
+            <span v-if="scope.row.name3==='正确'" style="color: green">正确</span>
+            <span v-else-if="scope.row.name3==='错误'" style="color: red">错误</span>
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="name4"
+        label="学生答题情况">
+      </el-table-column>
+    </el-table>
+
+    <el-form ref="elForm" :model="formData"  size="medium" label-width="100px" style="margin-top: 2%;text-align: center;">
+        <el-form-item size="large">
+            <el-button type="primary" @click="submitForm" style="width: 8%;">结束</el-button>
+        </el-form-item>
+    </el-form>
+
+  </div>
+</template>
+<style>
+.djs{
+  margin-right: 5%;
+  text-align: right;
+  line-height:8px;
+  font-size:20px;
+}
+.df {
+  color:red;
+}
+</style>
+<script>
+  export default {
+    data() {
+      return {
+        tableData: [{
+          id:'一.故障排除(75分)',
+          name: '',
+          name2: '',
+          name3: '',
+          name4: '',
+        },{
+          id:1,
+          name: '故障一未排除扣25分',
+          name2: '',
+          name3: '排除',
+          name4: '',
+        }, {
+          id:2,
+          name: '故障二未排除扣25分',
+          name2: '',
+          name3: '未排除',
+          name4: '',
+        }, {
+          id:3,
+          name: '故障三未排除扣25分',
+          name2: '',
+          name3: '排除',
+          name4: '',
+        }],
+
+        tableData1: [{
+          id:'二.修理报告表(15分)',
+          name: '',
+          name2: '',
+          name3: '',
+          name4: '',
+        },{
+          id:1,
+          name: '故障现象少写或错写1条扣1分',
+          name2: '',
+          name3: '正确',
+          name4: '',
+        }, {
+          id:2,
+          name: '可能原因少写或错写1条扣1分',
+          name2: '',
+          name3: '错误',
+          name4: '',
+        }, {
+          id:3,
+          name: '故障部位少写或错写1条扣1分',
+          name2: '',
+          name3: '正确',
+          name4: '',
+        }, {
+          id:4,
+          name: '排除方法少写或错写1条扣1分',
+          name2: '',
+          name3: '正确',
+          name4: '',
+        }, {
+          id:5,
+          name: '修复结论错扣2分',
+          name2: '',
+          name3: '正确',
+          name4: '',
+        }, {
+          id:'三.维修时间(10分)',
+          name: '',
+          name2: '',
+          name3: '',
+          name4: '',
+        }, {
+          id:'按没超过1分钟扣1分的比例扣分',
+          name: '',
+          name2: '',
+          name3: '',
+          name4: '',
+        }, {
+          id:'扣分小计',
+          name: '',
+          name2: '超时:',
+          name3: '',
+          name4: '',
+        }, {
+          id:'五.成绩',
+          name: '',
+          name2: '-50',
+          name3: '',
+          name4: '',
+        }, {
+          id:'说明',
+          name: '',
+          name2: '',
+          name3: '',
+          name4: '',
+        }],
+      };
+    },
+    methods: {
+      //首页合并
+      arraySpanMethod({ row, column, rowIndex, columnIndex }) {
+        if (rowIndex === 0) {
+          if (columnIndex === 0) {
+            return [1, 5];
+          } else {
+            return [0, 0];
+          }
+        }
+        if (rowIndex === 6) {
+          if (columnIndex === 0) {
+            return [1, 5];
+          } else {
+            return [0, 0];
+          }
+        }
+        //按每超时1分钟扣分的比例扣分
+        if (rowIndex>6) {
+          if (columnIndex === 0) {
+            return [1, 2];
+          }else if(columnIndex ===2){
+            return [1, 3];
+          } else {
+            return [0, 0];
+          }
+        }
+      },
+      /** 结束按钮 */
+      submitForm() {
+        this.$router.push("/practice");
+        // const userId = this.form.userId;
+        // const roleIds = this.roleIds.join(",");
+        // updateAuthRole({ userId: userId, roleIds: roleIds }).then((response) => {
+        //   this.$modal.msgSuccess("授权成功");
+        //   this.close();
+        // });
+      },
+    }
+  };
+</script>

+ 238 - 0
ruoyi-ui/src/views/people/score/index.vue

@@ -0,0 +1,238 @@
+<template>
+  <div class="app-container">
+    <el-row>
+      <!--考试成绩数据1-->
+        <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+          <el-form-item label="学员学号" prop="userName">
+            <el-input
+              v-model="queryParams.userName"
+              placeholder="请输入学员学号"
+              clearable
+              style="width: 150px"
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+          <el-form-item label="学员姓名" prop="userName">
+            <el-input
+              v-model="queryParams.userName"
+              placeholder="请输入学员姓名"
+              clearable
+              style="width: 150px"
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+          <el-form-item label="模拟器类型" prop="userName">
+            <el-input
+              v-model="queryParams.userName"
+              placeholder="请输入模拟器类型"
+              clearable
+              style="width: 240px"
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+          <el-form-item label="区队/班级" prop="userName">
+            <el-input
+              v-model="queryParams.userName"
+              placeholder="请输入区队/班级"
+              clearable
+              style="width: 150px"
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+          <el-form-item label="专业名称" prop="userName">
+            <el-input
+              v-model="queryParams.userName"
+              placeholder="请输入专业名称"
+              clearable
+              style="width: 150px"
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+          <el-form-item label="考试名称" prop="userName">
+            <el-input
+              v-model="queryParams.userName"
+              placeholder="请输入考试名称"
+              clearable
+              style="width: 150px"
+              @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">
+          <right-toolbar :showSearch.sync="showSearch" @queryTable="getList" :columns="columns"></right-toolbar>
+        </el-row>
+        
+        <el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange">
+          <!-- <el-table-column type="selection" width="50" align="center" /> -->
+          <el-table-column label="学员学号" align="center" key="userName" prop="userName" v-if="columns[0].visible" :show-overflow-tooltip="true" />
+          <el-table-column label="学员姓名" align="center" key="kaoshiTime" prop="kaoshiTime" v-if="columns[1].visible" :show-overflow-tooltip="true" />
+          <el-table-column label="模拟器类型" align="center" key="liexing" prop="liexing" v-if="columns[2].visible" :show-overflow-tooltip="true" />
+          <el-table-column label="区队/班级" align="center" key="banji" prop="banji" v-if="columns[3].visible" :show-overflow-tooltip="true" />
+          <el-table-column label="专业名称" align="center" key="zhuanye" prop="zhuanye" v-if="columns[4].visible" :show-overflow-tooltip="true" />
+          <el-table-column label="考试名称" align="center" key="kaoshi" prop="kaoshi" v-if="columns[5].visible" :show-overflow-tooltip="true" />
+          <el-table-column label="成绩" align="center" key="chengji" prop="chengji" v-if="columns[6].visible" :show-overflow-tooltip="true" />
+          <el-table-column label="考试开始时间" align="center" key="kaoshi_start_time" prop="kaoshi_start_time" v-if="columns[7].visible" :show-overflow-tooltip="true" />
+          <el-table-column label="考试结束时间" align="center" key="kaoshi_end_time" prop="kaoshi_end_time" v-if="columns[8].visible" :show-overflow-tooltip="true" />
+          <el-table-column label="学员交卷时间" align="center" key="jiaojuan_time" prop="jiaojuan_time" v-if="columns[9].visible" :show-overflow-tooltip="true" />
+          <el-table-column label="交卷超时时间" align="center" key="chaoshi_time" prop="chaoshi_time" v-if="columns[10].visible" :show-overflow-tooltip="true" />
+        </el-table>
+        <pagination
+          v-show="total>0"
+          :total="total"
+          :page.sync="queryParams.pageNum"
+          :limit.sync="queryParams.pageSize"
+          @pagination="getList"
+        />
+    </el-row>
+  </div>
+</template>
+<style>
+  .el-form-item__label{
+    width: 85px !important;
+  }
+</style>
+<script>
+import { listUser, getUser, delUser, addUser, updateUser, resetUserPwd, changeUserStatus } from "@/api/system/user";
+import { getToken } from "@/utils/auth";
+
+export default {
+  dicts: ['sim_equip_type'],
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 用户表格数据
+      userList: null,
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 日期范围
+      dateRange: [],
+      // 表单参数
+      form: {},
+      defaultProps: {
+        children: "children",
+        label: "label"
+      },
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        userName: undefined,
+      },
+      // 列信息
+      columns: [
+        { key: 0, label: `学员学号`, visible: true },
+        { key: 1, label: `学员姓名`, visible: true },
+        { key: 2, label: `模拟器类型`, visible: true },
+        { key: 3, label: `区队/班级`, visible: true },
+        { key: 4, label: `专业名称`, visible: true },
+        { key: 5, label: `考试名称`, visible: true },
+        { key: 6, label: `成绩`, visible: true },
+        { key: 7, label: `考试开始时间`, visible: true },
+        { key: 8, label: `考试结束时间`, visible: true },
+        { key: 9, label: `学员交卷时间`, visible: true },
+        { key: 10, label: `交卷超时时间`, visible: true },
+      ],
+      // 表单校验
+      rules: {
+      }
+    };
+  },
+  watch: {
+
+  },
+  created() {
+    this.getList();
+    //this.getDeptTree();
+    // this.getConfigKey("sys.user.initPassword").then(response => {
+    //   this.initPassword = response.msg;
+    // });
+  },
+  methods: {
+   
+    /** 查询用户列表 */
+    getList() {
+      this.loading = true;
+      listUser(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
+          //将返回值注释
+          this.userList = response.rows;
+          this.total = response.total;
+          this.loading = false;
+        }
+      );
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        userId: undefined,
+        userName: undefined,
+        password: undefined,
+        phonenumber: undefined,
+        status: "0",
+        remark: undefined,
+        postIds: [],
+        roleIds: []
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.dateRange = [];
+      this.resetForm("queryForm");
+      this.queryParams.deptId = undefined;
+      this.$refs.tree.setCurrentKey(null);
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.userId);
+      this.single = selection.length != 1;
+      this.multiple = !selection.length;
+    },
+   
+    /** 提交按钮 */
+    submitForm: function() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.userId != undefined) {
+            updateUser(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addUser(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    
+  }
+};
+</script>

+ 250 - 0
ruoyi-ui/src/views/people/train/index.vue

@@ -0,0 +1,250 @@
+<template>
+  <div class="app-container">
+    <el-row>
+      <!--练习列表111-->
+        <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+          <el-form-item label="练习名称" prop="userName">
+            <el-input
+              v-model="queryParams.userName"
+              placeholder="请输入练习名称"
+              clearable
+              style="width: 150px"
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+          <el-form-item label="练习时间">
+            <el-date-picker
+              v-model="dateRange"
+              style="width: 240px"
+              value-format="yyyy-MM-dd"
+              type="daterange"
+              range-separator="-"
+              start-placeholder="开始日期"
+              end-placeholder="结束日期"
+            ></el-date-picker>
+          </el-form-item>
+          <el-form-item label="模拟器类型" prop="userName">
+            <el-input
+              v-model="queryParams.userName"
+              placeholder="请输入模拟器类型"
+              clearable
+              style="width: 240px"
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+          <el-form-item label="练习状态" prop="status">
+            <el-select
+              v-model="queryParams.status"
+              placeholder="练习状态"
+              clearable
+              style="width: 150px"
+            >
+              <el-option
+                v-for="dict in dict.type.sys_normal_disable"
+                :key="dict.value"
+                :label="dict.label"
+                :value="dict.value"
+              />
+            </el-select>
+          </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="userList">
+          <el-table-column type="selection" width="50" align="center" />
+          <el-table-column label="练习名称" align="center" key="userName" prop="userName" v-if="columns[0].visible" :show-overflow-tooltip="true" />
+          <el-table-column label="练习时间" align="center" key="kaoshiTime" prop="kaoshiTime" v-if="columns[1].visible" :show-overflow-tooltip="true" />
+          <el-table-column label="模拟器类型" align="center" key="liexing" prop="liexing" v-if="columns[2].visible" :show-overflow-tooltip="true" />
+          <el-table-column label="创建老师" align="center" key="creater" prop="creater" v-if="columns[3].visible" :show-overflow-tooltip="true" />
+          <el-table-column label="练习状态" align="center" key="status" v-if="columns[4].visible">
+            <template slot-scope="scope">
+              <el-switch
+                v-model="scope.row.status"
+                active-value="0"
+                inactive-value="1"
+                @change="handleStatusChange(scope.row)"
+              ></el-switch>
+            </template>
+          </el-table-column>
+          <el-table-column
+            label="操作"
+            align="center"
+            width="160"
+            class-name="small-padding fixed-width"
+          >
+            <template slot-scope="scope">
+              <el-button
+                size="mini"
+                type="text"
+                icon="el-icon-thumb"
+                @click="handleInto(scope.row)" 
+                v-hasPermi="['simulator:user: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-row>
+  </div>
+</template>
+<style>
+  .el-form-item__label{
+    width: 85px !important;
+  }
+</style>
+<script>
+import { listUser, getUser, delUser, addUser, updateUser, resetUserPwd, changeUserStatus } from "@/api/system/user";
+export default {
+  dicts: ['sim_equip_type'],
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 用户表格数据
+      userList: null,
+      // 弹出层标题
+      title: "",
+      // 日期范围
+      dateRange: [],
+      // 岗位选项
+      postOptions: [],
+      // 角色选项
+      roleOptions: [],
+      // 表单参数
+      form: {},
+      defaultProps: {
+        children: "children",
+        label: "label"
+      },
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        userName: undefined,
+        phonenumber: undefined,
+        status: undefined,
+        deptId: undefined
+      },
+      // 列信息
+      columns: [
+        { key: 0, label: `练习名称`, visible: true },
+        { key: 1, label: `练习时间`, visible: true },
+        { key: 2, label: `模拟器类型`, visible: true },
+        { key: 3, label: `练习状态`, visible: true },
+        { key: 4, label: `创建老师`, visible: true },
+      ],
+      // 表单校验
+      rules: {
+      }
+    };
+  },
+  watch: {
+    
+  },
+  created() {
+    this.getList();
+    this.getConfigKey("sys.user.initPassword").then(response => {
+      this.initPassword = response.msg;
+    });
+  },
+  methods: {
+    /** 查询用户列表 */
+    getList() {
+      this.loading = true;
+      listUser(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
+          //将返回值注释
+          this.userList = response.rows;
+          this.total = response.total;
+          this.loading = false;
+        }
+      );
+    },
+    // 筛选节点
+    filterNode(value, data) {
+      if (!value) return true;
+      return data.label.indexOf(value) !== -1;
+    },
+    // 节点单击事件
+    handleNodeClick(data) {
+      this.queryParams.deptId = data.id;
+      this.handleQuery();
+    },
+    // 用户状态修改
+    handleStatusChange(row) {
+      let text = row.status === "0" ? "启用" : "停用";
+      this.$modal.confirm('确认要"' + text + '""' + row.userName + '"用户吗?').then(function() {
+        return changeUserStatus(row.userId, row.status);
+      }).then(() => {
+        this.$modal.msgSuccess(text + "成功");
+      }).catch(function() {
+        row.status = row.status === "0" ? "1" : "0";
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.zijianopen = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        userId: undefined,
+        deptId: undefined,
+        userName: undefined,
+        
+        password: undefined,
+        phonenumber: undefined,
+        email: undefined,
+        sex: undefined,
+        status: "0",
+        remark: undefined,
+        postIds: [],
+        roleIds: []
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.dateRange = [];
+      this.resetForm("queryForm");
+      this.queryParams.deptId = undefined;
+      this.$refs.tree.setCurrentKey(null);
+      this.handleQuery();
+    },
+    /** 进入操作 */
+    handleInto: function(row) {
+      const userId = row.userId;
+      console.log(userId)
+      this.$router.push("/people/train-train1/trainid/" + userId);
+    },
+    
+  }
+};
+</script>

+ 114 - 0
ruoyi-ui/src/views/people/train/train1.vue

@@ -0,0 +1,114 @@
+<template>
+  <div class="app-container"  style="width: 80%;">
+    <el-descriptions title="基本信息" :column="2" border style="color: #6379bb;padding-left: 20%">
+      <el-descriptions-item label="当前模式">88</el-descriptions-item>
+      <el-descriptions-item label="模拟类型">90</el-descriptions-item>
+      <el-descriptions-item label="模拟状态">30</el-descriptions-item>
+      <el-descriptions-item label="考试学员">30</el-descriptions-item>
+      <el-descriptions-item label="学员座号">30</el-descriptions-item>
+    </el-descriptions>
+
+    <el-descriptions title="注意事项" :column="1" border style="margin-top: 2%;color: #6379bb;padding-left: 20%"></el-descriptions>
+    <div class="shixiang">
+        <div>1.注意事项111</div>
+        <div>2.注意事项222</div>
+        <div>3.注意事项333</div>
+    </div>
+
+    <el-form ref="elForm" :model="form"  size="medium" label-width="100px" style="margin-top: 10%;">
+        <el-form-item size="large">
+            <el-button type="primary" @click="submitForm" >开始练习</el-button>
+        </el-form-item>
+    </el-form>
+
+
+  </div>
+</template>
+
+<style>
+.el-form-item__content{
+  /* margin-top: 15%; */
+  text-align: center;
+}
+.shixiang{
+    color: rgb(192, 74, 84);
+    height: 30px;
+    line-height: 30px;
+    padding-left: 22%
+}
+</style>
+<script>
+import { getAuthRole, updateAuthRole } from "@/api/system/user";
+export default {
+  name: "AuthRole",
+  data() {
+    return {
+       // 遮罩层
+      loading: true,
+      // 分页信息
+      total: 0,
+      pageNum: 1,
+      pageSize: 10,
+      // 选中角色编号
+      roleIds:[],
+      // 角色信息
+      roles: [],
+      // 用户信息
+      form: {},
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        userName: undefined,
+        phonenumber: undefined,
+        status: undefined,
+        deptId: undefined
+      },
+    };
+  },
+  created() {
+    const userId = this.$route.params && this.$route.params.userId;
+    if (userId) {
+      this.loading = true;
+      getAuthRole(userId).then((response) => {
+        this.form = response.user;
+        this.roles = response.roles;
+        this.total = this.roles.length;
+        this.$nextTick(() => {
+          this.roles.forEach((row) => {
+            if (row.flag) {
+              // this.$refs.table.toggleRowSelection(row);
+            }
+          });
+        });
+        this.loading = false;
+      });
+    }
+  },
+  methods: {
+    /** 单击选中行数据 */
+    clickRow(row) {
+      // this.$refs.table.toggleRowSelection(row);
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.roleIds = selection.map((item) => item.roleId);
+    },
+    /** 提交按钮 */
+    submitForm() {
+      const userId = this.form.userId;
+      const roleIds = this.roleIds.join(",");
+    //   updateAuthRole({ userId: userId, roleIds: roleIds }).then((response) => {
+    //     this.$modal.msgSuccess("授权成功");
+    //     this.close();
+    //   });
+    this.$router.push("/people/train-train2/trainid/" + userId);
+    },
+    /** 关闭按钮 */
+    close() {
+      const obj = { path: "/system/user" };
+      this.$tab.closeOpenPage(obj);
+    },
+  },
+};
+</script>

+ 301 - 0
ruoyi-ui/src/views/people/train/train2.vue

@@ -0,0 +1,301 @@
+<template>
+  <div class="app-container">
+    <div style="margin-top:3%">  
+    <div class="readme">正在练习中,考试时间 30 分钟</div>
+    <div class="djs">距离考试结束还有{{ time }}</div>
+    </div>
+
+    <el-row>
+      <h4 class="h4">更换件列表</h4>
+
+      <el-table
+      :data="tableData"  border
+      style="text-align:center;margin-top:1%;"
+      max-height="550">
+      <el-table-column
+        prop="name"
+        label="更换件类型"
+        >
+        <template slot-scope="scope">
+          <el-input v-model="scope.row.address" ></el-input>
+        </template>
+      </el-table-column>
+
+      <el-table-column
+        prop="number"
+        label="状态">
+        <template slot-scope="scope">
+          <el-input v-model="scope.row.address" ></el-input>
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="reason"
+        label="申请时间" >
+        <template slot-scope="scope">
+          <el-input v-model="scope.row.address" ></el-input>
+        </template>
+      </el-table-column>
+      <el-table-column
+        fixed="right"
+        label="操作">
+        <template slot-scope="scope">
+          <el-button
+            @click.native.prevent="AddRow(scope.$index, tableData)"
+            type="text"
+            size="small">
+            追加
+          </el-button>
+          <el-button
+            @click.native.prevent="deleteRow(scope.$index, tableData)"
+            type="text"
+            size="small">
+            移除
+          </el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+  </el-row>
+
+  <el-row>
+    <h4 class="h4">维修报告列表</h4>
+    <el-table
+      :data="tableData1"  border
+      style="text-align:center;margin-top:1%;"
+      max-height="550">
+      <el-table-column
+        prop="name"
+        label="故障现象">
+        <template slot-scope="scope">
+          <el-input v-model="scope.row.address" ></el-input>
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="number"
+        label="可能原因">
+        <template slot-scope="scope">
+          <el-input v-model="scope.row.address" ></el-input>
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="reason"
+        label="故障部位" >
+        <template slot-scope="scope">
+          <el-input v-model="scope.row.address" ></el-input>
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="reason"
+        label="排除方法" >
+        <template slot-scope="scope">
+          <el-input v-model="scope.row.address" ></el-input>
+        </template>
+      </el-table-column>
+      <el-table-column
+        fixed="right"
+        label="操作">
+        <template slot-scope="scope">
+          <el-button
+            @click.native.prevent="AddRow1(scope.$index, tableData1)"
+            type="text"
+            size="small">
+            追加
+          </el-button>
+          <el-button
+            @click.native.prevent="deleteRow1(scope.$index, tableData1)"
+            type="text"
+            size="small">
+            移除
+          </el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+  </el-row>
+  <el-form ref="elForm" :model="formData" :rules="rules" size="medium"  style="margin-top: 1%;text-align: center;">
+    <el-form-item label="修复结论" prop="field101">
+      <el-select v-model="formData.field101" placeholder="请选择修复结论" clearable :style="{width: '95%'}">
+        <el-option v-for="(item, index) in field101Options" :key="index" :label="item.label"
+          :value="item.value" :disabled="item.disabled"></el-option>
+      </el-select>
+    </el-form-item>
+    <el-form-item size="large">
+        <el-button type="primary" @click="submitForm" style="width: 8%;">交卷</el-button>
+    </el-form-item>
+  </el-form>
+  </div>
+</template>
+
+<style>
+.readme {
+  margin-top:2%;
+  text-align: center;
+  line-height:8px;
+  font-size:22px;
+}
+.djs {
+  margin-top:2%;
+  text-align: center;
+  line-height:8px;
+  font-size:22px;
+  color:red;
+  margin-bottom: 3%;
+}
+</style>
+
+<script>
+import { getAuthRole, updateAuthRole } from "@/api/system/user";
+
+export default {
+  name: "AuthRole",
+  data() {
+    return {
+      duration: 1800, // 假设倒计时1800秒
+      tableData: [{
+        name: '1111',
+        number: '',
+        reason: ''
+      }, {
+        name: '2222',
+        number: '',
+        reason: ''
+      }],
+
+      tableData1: [{
+        name: '',
+        number: '',
+        reason: '',
+        reason: ''
+      }, {
+        name: '',
+        number: '',
+        reason: '',
+        reason: ''
+      }],
+      formData: {
+        field101: undefined,
+      },
+      rules: {
+        field101: [{
+          required: true,
+          message: '请选择下拉选择',
+          trigger: 'change'
+        }],
+      },
+      field101Options: [{
+        "label": "选项一",
+        "value": 1
+      }, {
+        "label": "选项二",
+        "value": 2
+      }, {
+        "label": "选项三",
+        "value": 3
+      }],
+       // 遮罩层
+      loading: true,
+      // 分页信息
+      total: 0,
+      pageNum: 1,
+      pageSize: 10,
+      // 选中角色编号
+      roleIds:[],
+      // 角色信息
+      roles: [],
+      // 用户信息
+      form: {},
+      // 列信息
+      columns: [
+        { key: 0, label: `更换件类型`, visible: true },
+        { key: 1, label: `状态`, visible: true },
+        { key: 2, label: `申请时间`, visible: true },
+      ],
+    };
+  },
+  created() {
+    const userId = this.$route.params && this.$route.params.userId;
+    if (userId) {
+      this.loading = true;
+      getAuthRole(userId).then((response) => {
+        this.form = response.user;
+        this.roles = response.roles;
+        this.total = this.roles.length;
+        this.$nextTick(() => {
+          this.roles.forEach((row) => {
+            if (row.flag) {
+              // this.$refs.table.toggleRowSelection(row);
+            }
+          });
+        });
+        this.loading = false;
+      });
+    }
+  },
+  methods: {
+    deleteRow(index, rows) {
+      console.log(index+"@@@@")
+      console.log(rows+"####")
+      rows.splice(index, 1);
+    },
+    AddRow(index, rows) {
+      const newRow = {
+        name: '',
+        number: '',
+        reason: '',
+      };
+      this.tableData.push(newRow); // 追加新行
+    },
+    deleteRow1(index, rows) {
+      console.log(index+"@@@@")
+      console.log(rows+"####")
+      rows.splice(index, 1);
+    },
+    AddRow1(index, rows) {
+      const newRow = {
+        name: '',
+        number: '',
+        reason: '',
+      };
+      this.tableData1.push(newRow); // 追加新行
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.roleIds = selection.map((item) => item.roleId);
+    },
+    // 保存选中的数据编号
+    getRowKey(row) {
+      return row.roleId;
+    },
+    /** 提交按钮 */
+    submitForm() {
+      const userId = this.form.userId;
+      // const roleIds = this.roleIds.join(",");
+    //   updateAuthRole({ userId: userId, roleIds: roleIds }).then((response) => {
+    //     this.$modal.msgSuccess("授权成功");
+    //     this.close();
+    //   });
+       this.$router.push("/people/train-train3/trainid/" + userId);
+    },
+    /** 关闭按钮 */
+    close() {
+      const obj = { path: "/system/user" };
+      this.$tab.closeOpenPage(obj);
+    },
+  },
+  computed: {
+      time() {
+        //let hours = Math.floor(this.duration / 3600);
+        let minutes = Math.floor((this.duration % 3600) / 60);
+        let seconds = this.duration % 60;
+        return `${minutes}分${seconds}秒`;
+      },
+    },
+  mounted() {
+    let timer = setInterval(() => {
+      this.duration--;
+      if (this.duration <= 0) {
+        clearInterval(timer);
+      }
+    }, 1000);
+  },
+
+};
+</script>

+ 229 - 0
ruoyi-ui/src/views/people/train/train3.vue

@@ -0,0 +1,229 @@
+<template>
+  <div class="app-container">
+    <div>  
+      <div class="djs">得分成绩/满分成绩: <span class="df">50</span>/100</div>
+    </div>
+    <el-table
+      :data="tableData"
+      :span-method="arraySpanMethod"
+      border
+      style="width: 100%;margin-top:1%">
+      <el-table-column
+        prop="id"
+        label="序号"
+        width="180">
+      </el-table-column>
+      <el-table-column
+        prop="name"
+        label="评分标准">
+      </el-table-column>
+      <el-table-column
+        prop="name2"
+
+        label="扣分">
+      </el-table-column>
+      <el-table-column
+        prop="name3"
+        label="维修情况">
+        <template scope="scope">
+            <span v-if="scope.row.name3==='排除'" style="color: green">排除</span>
+            <span v-else-if="scope.row.name3==='未排除'" style="color: red">未排除</span>
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="name4"
+        label="题目">
+      </el-table-column>
+    </el-table>
+
+    <el-table
+      :data="tableData1"
+      :span-method="arraySpanMethod"
+      border
+      style="width: 100%;">
+      <el-table-column
+        prop="id"
+        label="序号"
+        width="180">
+      </el-table-column>
+      <el-table-column
+        prop="name"
+        label="评分标准">
+      </el-table-column>
+      <el-table-column
+        prop="name2"
+        label="扣分">
+      </el-table-column>
+      <el-table-column 
+        prop="name3"
+        label="报告情况">
+        <template scope="scope">
+            <span v-if="scope.row.name3==='正确'" style="color: green">正确</span>
+            <span v-else-if="scope.row.name3==='错误'" style="color: red">错误</span>
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="name4"
+        label="学生答题情况">
+      </el-table-column>
+    </el-table>
+
+    <el-form ref="elForm" :model="formData"  size="medium" label-width="100px" style="margin-top: 2%;text-align: center;">
+        <el-form-item size="large">
+            <el-button type="primary" @click="submitForm" style="width: 8%;">结束</el-button>
+        </el-form-item>
+    </el-form>
+
+  </div>
+</template>
+<style>
+.djs{
+  margin-right: 5%;
+  text-align: right;
+  line-height:8px;
+  font-size:20px;
+}
+.df {
+  color:red;
+}
+</style>
+<script>
+  export default {
+    data() {
+      return {
+        tableData: [{
+          id:'一.故障排除(75分)',
+          name: '',
+          name2: '',
+          name3: '',
+          name4: '',
+        },{
+          id:1,
+          name: '故障一未排除扣25分',
+          name2: '',
+          name3: '排除',
+          name4: '',
+        }, {
+          id:2,
+          name: '故障二未排除扣25分',
+          name2: '',
+          name3: '未排除',
+          name4: '',
+        }, {
+          id:3,
+          name: '故障三未排除扣25分',
+          name2: '',
+          name3: '排除',
+          name4: '',
+        }],
+
+        tableData1: [{
+          id:'二.修理报告表(15分)',
+          name: '',
+          name2: '',
+          name3: '',
+          name4: '',
+        },{
+          id:1,
+          name: '故障现象少写或错写1条扣1分',
+          name2: '',
+          name3: '正确',
+          name4: '',
+        }, {
+          id:2,
+          name: '可能原因少写或错写1条扣1分',
+          name2: '',
+          name3: '错误',
+          name4: '',
+        }, {
+          id:3,
+          name: '故障部位少写或错写1条扣1分',
+          name2: '',
+          name3: '正确',
+          name4: '',
+        }, {
+          id:4,
+          name: '排除方法少写或错写1条扣1分',
+          name2: '',
+          name3: '正确',
+          name4: '',
+        }, {
+          id:5,
+          name: '修复结论错扣2分',
+          name2: '',
+          name3: '正确',
+          name4: '',
+        }, {
+          id:'三.维修时间(10分)',
+          name: '',
+          name2: '',
+          name3: '',
+          name4: '',
+        }, {
+          id:'按没超过1分钟扣1分的比例扣分',
+          name: '',
+          name2: '',
+          name3: '',
+          name4: '',
+        }, {
+          id:'扣分小计',
+          name: '',
+          name2: '超时:',
+          name3: '',
+          name4: '',
+        }, {
+          id:'五.成绩',
+          name: '',
+          name2: '-50',
+          name3: '',
+          name4: '',
+        }, {
+          id:'说明',
+          name: '',
+          name2: '',
+          name3: '',
+          name4: '',
+        }],
+      };
+    },
+    methods: {
+      //首页合并
+      arraySpanMethod({ row, column, rowIndex, columnIndex }) {
+        if (rowIndex === 0) {
+          if (columnIndex === 0) {
+            return [1, 5];
+          } else {
+            return [0, 0];
+          }
+        }
+        if (rowIndex === 6) {
+          if (columnIndex === 0) {
+            return [1, 5];
+          } else {
+            return [0, 0];
+          }
+        }
+        //按每超时1分钟扣分的比例扣分
+        if (rowIndex>6) {
+          if (columnIndex === 0) {
+            return [1, 2];
+          }else if(columnIndex ===2){
+            return [1, 3];
+          } else {
+            return [0, 0];
+          }
+        }
+      },
+      /** 结束按钮 */
+      submitForm() {
+        this.$router.push("/train/train");
+        // const userId = this.form.userId;
+        // const roleIds = this.roleIds.join(",");
+        // updateAuthRole({ userId: userId, roleIds: roleIds }).then((response) => {
+        //   this.$modal.msgSuccess("授权成功");
+        //   this.close();
+        // });
+      },
+    }
+  };
+</script>

+ 477 - 0
ruoyi-ui/src/views/peoples/classes/index.vue

@@ -0,0 +1,477 @@
+<template>
+  <div class="app-container">
+    <el-row :gutter="20">
+      <!--用户数据1-->
+      <el-col :xs="24">
+        <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="88px">
+          <el-form-item label="班级名称" prop="className">
+            <el-input
+              v-model="queryParams.className"
+              placeholder="请输入班级名称"
+              clearable
+              style="width: 240px"
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+          <el-form-item label="专业名称" prop="majorName">
+            <el-input
+              v-model="queryParams.userName"
+              placeholder="请输入专业名称"
+              clearable
+              style="width: 240px"
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+        
+          <el-form-item label="创建时间">
+            <el-date-picker
+              v-model="dateRange"
+              style="width: 240px"
+              value-format="yyyy-MM-dd"
+              type="daterange"
+              range-separator="-"
+              start-placeholder="开始日期"
+              end-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-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="['system:user: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="['system:user: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="['system:user:remove']"
+            >删除</el-button>
+          </el-col>
+          <right-toolbar :showSearch.sync="showSearch" @queryTable="getList" :columns="columns"></right-toolbar>
+        </el-row>
+
+        <el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange">
+          <el-table-column type="selection" width="50" align="center" />
+          <el-table-column label="编号" align="center" key="userId" prop="userId" v-if="columns[0].visible" />
+          <el-table-column label="班级名称" align="center" key="className" prop="className" v-if="columns[1].visible" :show-overflow-tooltip="true" />
+          <el-table-column label="专业名称" align="center" key="majorName" prop="majorName" v-if="columns[2].visible" :show-overflow-tooltip="true" />
+          <el-table-column label="备注" align="center" key="remark" prop="remark" v-if="columns[3].visible" :show-overflow-tooltip="true" />
+          <el-table-column label="创建时间" align="center" prop="createTime" v-if="columns[4].visible" width="160">
+            <template slot-scope="scope">
+              <span>{{ parseTime(scope.row.createTime) }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column
+            label="操作"
+            align="center"
+            width="160"
+            class-name="small-padding fixed-width"
+          >
+            <template slot-scope="scope">
+              <el-button
+                size="mini"
+                type="text"
+                icon="el-icon-edit"
+                @click="handleUpdate(scope.row)"
+                v-hasPermi="['system:user:edit']"
+              >修改</el-button>
+              <el-button
+                size="mini"
+                type="text"
+                icon="el-icon-delete"
+                @click="handleDelete(scope.row)"
+                v-hasPermi="['system:user: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-col>
+    </el-row>
+
+    <!-- 添加或修改用户配置对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="600px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="班级名称" prop="nickName">
+              <el-input v-model="form.nickName" placeholder="请输入班级名称" maxlength="30" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="专业" prop="nickName">
+              <el-input v-model="form.nickName" placeholder="请输入专业" maxlength="30" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="备注">
+              <el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </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 { listUser, getUser, delUser, addUser, updateUser, resetUserPwd, changeUserStatus, deptTreeSelect } from "@/api/system/user";
+import { getToken } from "@/utils/auth";
+import Treeselect from "@riophae/vue-treeselect";
+import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+
+export default {
+  name: "User",
+  dicts: ['sys_normal_disable', 'sys_user_sex'],
+  components: { Treeselect },
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 用户表格数据
+      userList: null,
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 部门名称
+      deptName: undefined,
+      // 默认密码
+      initPassword: undefined,
+      // 日期范围
+      dateRange: [],
+      // 岗位选项
+      postOptions: [],
+      // 角色选项
+      roleOptions: [],
+      // 表单参数
+      form: {},
+      defaultProps: {
+        children: "children",
+        label: "label"
+      },
+      // 用户导入参数
+      upload: {
+        // 是否显示弹出层(用户导入)
+        open: false,
+        // 弹出层标题(用户导入)
+        title: "",
+        // 是否禁用上传
+        isUploading: false,
+        // 是否更新已经存在的用户数据
+        updateSupport: 0,
+        // 设置上传的请求头部
+        headers: { Authorization: "Bearer " + getToken() },
+        // 上传的地址
+        url: process.env.VUE_APP_BASE_API + "/system/user/importData"
+      },
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        userName: undefined,
+        phonenumber: undefined,
+        status: undefined,
+        deptId: undefined
+      },
+      // 列信息
+      columns: [
+        { key: 0, label: `编号`, visible: true },
+        { key: 1, label: `班级名称`, visible: true },
+        { key: 2, label: `专业`, visible: true },
+        { key: 3, label: `备注`, visible: true },
+        { key: 4, label: `创建时间`, visible: true }
+      ],
+      // 表单校验
+      rules: {
+        userName: [
+          { required: true, message: "用户名称不能为空", trigger: "blur" },
+          { min: 2, max: 20, message: '用户名称长度必须介于 2 和 20 之间', trigger: 'blur' }
+        ],
+        nickName: [
+          { required: true, message: "用户昵称不能为空", trigger: "blur" }
+        ],
+        password: [
+          { required: true, message: "用户密码不能为空", trigger: "blur" },
+          { min: 5, max: 20, message: '用户密码长度必须介于 5 和 20 之间', trigger: 'blur' },
+          { pattern: /^[^<>"'|\\]+$/, message: "不能包含非法字符:< > \" ' \\\ |", trigger: "blur" }
+        ],
+        email: [
+          {
+            type: "email",
+            message: "请输入正确的邮箱地址",
+            trigger: ["blur", "change"]
+          }
+        ],
+        phonenumber: [
+          {
+            pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
+            message: "请输入正确的手机号码",
+            trigger: "blur"
+          }
+        ]
+      }
+    };
+  },
+  watch: {
+    // 根据名称筛选部门树
+    deptName(val) {
+      this.$refs.tree.filter(val);
+    }
+  },
+  created() {
+    this.getList();
+    // this.getDeptTree();
+    this.getConfigKey("sys.user.initPassword").then(response => {
+      this.initPassword = response.msg;
+    });
+  },
+  methods: {
+    /** 查询用户列表 */
+    getList() {
+      this.loading = true;
+      listUser(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
+          this.userList = response.rows;
+          this.total = response.total;
+          this.loading = false;
+        }
+      );
+    },
+    // 筛选节点
+    filterNode(value, data) {
+      if (!value) return true;
+      return data.label.indexOf(value) !== -1;
+    },
+    // 用户状态修改
+    handleStatusChange(row) {
+      let text = row.status === "0" ? "启用" : "停用";
+      this.$modal.confirm('确认要"' + text + '""' + row.userName + '"用户吗?').then(function() {
+        return changeUserStatus(row.userId, row.status);
+      }).then(() => {
+        this.$modal.msgSuccess(text + "成功");
+      }).catch(function() {
+        row.status = row.status === "0" ? "1" : "0";
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        userId: undefined,
+        deptId: undefined,
+        userName: undefined,
+        nickName: undefined,
+        password: undefined,
+        phonenumber: undefined,
+        email: undefined,
+        sex: undefined,
+        status: "0",
+        remark: undefined,
+        postIds: [],
+        roleIds: []
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.dateRange = [];
+      this.resetForm("queryForm");
+      this.queryParams.deptId = undefined;
+      this.$refs.tree.setCurrentKey(null);
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.userId);
+      this.single = selection.length != 1;
+      this.multiple = !selection.length;
+    },
+    // 更多操作触发
+    handleCommand(command, row) {
+      switch (command) {
+        case "handleResetPwd":
+          this.handleResetPwd(row);
+          break;
+        case "handleAuthRole":
+          this.handleAuthRole(row);
+          break;
+        default:
+          break;
+      }
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      getUser().then(response => {
+        this.postOptions = response.posts;
+        this.roleOptions = response.roles;
+        this.open = true;
+        this.title = "添加用户";
+        this.form.password = this.initPassword;
+      });
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const userId = row.userId || this.ids;
+      getUser(userId).then(response => {
+        this.form = response.data;
+        this.postOptions = response.posts;
+        this.roleOptions = response.roles;
+        this.$set(this.form, "postIds", response.postIds);
+        this.$set(this.form, "roleIds", response.roleIds);
+        this.open = true;
+        this.title = "修改用户";
+        this.form.password = "";
+      });
+    },
+    /** 重置密码按钮操作 */
+    handleResetPwd(row) {
+      this.$prompt('请输入"' + row.userName + '"的新密码', "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        closeOnClickModal: false,
+        inputPattern: /^.{5,20}$/,
+        inputErrorMessage: "用户密码长度必须介于 5 和 20 之间",
+        inputValidator: (value) => {
+          if (/<|>|"|'|\||\\/.test(value)) {
+            return "不能包含非法字符:< > \" ' \\\ |"
+          }
+        },
+      }).then(({ value }) => {
+          resetUserPwd(row.userId, value).then(response => {
+            this.$modal.msgSuccess("修改成功,新密码是:" + value);
+          });
+        }).catch(() => {});
+    },
+    /** 分配角色操作 */
+    handleAuthRole: function(row) {
+      const userId = row.userId;
+      this.$router.push("/system/user-auth/role/" + userId);
+    },
+    /** 提交按钮 */
+    submitForm: function() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.userId != undefined) {
+            updateUser(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addUser(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const userIds = row.userId || this.ids;
+      this.$modal.confirm('是否确认删除用户编号为"' + userIds + '"的数据项?').then(function() {
+        return delUser(userIds);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('system/user/export', {
+        ...this.queryParams
+      }, `user_${new Date().getTime()}.xlsx`)
+    },
+    /** 导入按钮操作 */
+    handleImport() {
+      this.upload.title = "用户导入";
+      this.upload.open = true;
+    },
+    /** 下载模板操作 */
+    importTemplate() {
+      this.download('system/user/importTemplate', {
+      }, `user_template_${new Date().getTime()}.xlsx`)
+    },
+    // 文件上传中处理
+    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();
+    },
+    // 提交上传文件
+    submitFileForm() {
+      this.$refs.upload.submit();
+    }
+  }
+};
+</script>

+ 395 - 0
ruoyi-ui/src/views/peoples/current/index.vue

@@ -0,0 +1,395 @@
+<template>
+  <div class="app-container">
+    <el-row :gutter="20">
+      <el-col :xs="24">
+        <el-row :gutter="10" class="mb8">
+          <el-col :span="1.5">
+            <el-button
+              type="primary"
+              plain
+              icon="el-icon-refresh"
+              size="mini"
+              @click="refreshTable1"
+              v-hasPermi="['system:user:add']"
+            >刷新 </el-button>
+          </el-col>
+          <el-col :span="1.5">
+            <el-button
+              type="success"
+              plain
+              icon="el-icon-edit"
+              size="mini"
+              v-hasPermi="['system:user:edit']"
+            >批量确认已送</el-button>
+          </el-col>
+        </el-row>
+        <el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange">
+          <el-table-column type="selection" width="50" align="center" />
+          <el-table-column label="座号" align="center" key="userId" prop="userId" v-if="columns[0].visible" />
+          <el-table-column label="更换件" align="center" key="className" prop="className" v-if="columns[1].visible" :show-overflow-tooltip="true" />
+          <el-table-column label="学员姓名" align="center" key="majorName" prop="majorName" v-if="columns[2].visible" :show-overflow-tooltip="true" />
+          <el-table-column label="状态" align="center" key="remark" prop="remark1" v-if="columns[3].visible" :show-overflow-tooltip="true" />
+          <el-table-column label="申请时间" align="center" prop="createTime" v-if="columns[4].visible" width="160">
+            <template slot-scope="scope">
+              <span>{{ parseTime(scope.row.createTime) }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column
+            label="操作"
+            align="center"
+            width="160"
+            class-name="small-padding fixed-width"
+          >
+          <template slot-scope="scope">
+              <el-button
+                size="mini"
+                type="text"
+                icon="el-icon-position"
+                @click="handleUpdate(scope.row)"
+                v-hasPermi="['system:user:edit']"
+              >已送</el-button>
+              <el-button
+                size="mini"
+                type="text"
+                icon="el-icon-finished"
+                @click="handleDelete(scope.row)"
+                v-hasPermi="['system:user: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-col>
+    </el-row>
+
+    <el-row style="margin-top: 2%;">
+      <el-col>
+        <el-row :gutter="10" class="mb8">
+          <el-col :span="1.5">
+            <el-button
+              type="primary"
+              plain
+              icon="el-icon-refresh"
+              size="mini"
+              @click="refreshTable1"
+            >刷新</el-button>
+          </el-col>
+        </el-row>
+        <el-table v-loading="loading" :data="tableArr1" >
+          <el-table-column label="座号" align="center" key="xuehao" prop="zuohao" v-if="tab_columns[0].visible" />
+          <el-table-column label="模拟器状态" align="center" key="className" prop="monitype" v-if="tab_columns[1].visible" :show-overflow-tooltip="true" >
+            <template scope="scope">
+              <span v-if="scope.row.monitype==='就绪'" style="color: green">就绪</span>
+              <span v-else-if="scope.row.monitype==='离线'" style="color: red">离线</span>
+            </template>
+          </el-table-column>
+          <el-table-column label="学员学号" align="center" key="majorName" prop="xuehao" v-if="tab_columns[2].visible" :show-overflow-tooltip="true" />
+          <el-table-column label="学员姓名" align="center" key="remark" prop="xingming" v-if="tab_columns[3].visible" :show-overflow-tooltip="true" />
+          <el-table-column label="考试状态" align="center" prop="kaoshitype" v-if="tab_columns[4].visible" width="160">
+            <template scope="scope">
+              <span v-if="scope.row.kaoshitype==='已交卷'" style="color: green">已交卷</span>
+              <span v-else-if="scope.row.kaoshitype==='未登录'" style="color: red">未登录</span>
+              <span v-else-if="scope.row.kaoshitype==='已登录'" style="color: blue">已登录</span>
+            </template>
+          </el-table-column>
+          <el-table-column label="考试成绩" align="center" prop="chengji" v-if="tab_columns[5].visible" width="160"></el-table-column>
+          <el-table-column label="出题题目" align="center" prop="timu" v-if="tab_columns[6].visible" width="160"></el-table-column>
+          <el-table-column label="故障现象" align="center" prop="xianxiang" v-if="tab_columns[7].visible" width="160"></el-table-column>
+          <el-table-column label="可能原因" align="center" prop="reason" v-if="tab_columns[8].visible" width="160"></el-table-column>
+          <el-table-column label="故障部位" align="center" prop="buwen" v-if="tab_columns[9].visible" width="160"></el-table-column>
+          <el-table-column label="排除方法" align="center" prop="fangfa" v-if="tab_columns[10].visible" width="160"></el-table-column>
+          <el-table-column label="修复结论" align="center" prop="jielun" v-if="tab_columns[11].visible" width="160"></el-table-column>
+        </el-table>
+      </el-col>
+    </el-row>
+    <div slot="footer" style="margin-top: 2%; text-align: center;">
+      <el-button type="primary">关闭</el-button>
+    </div>
+
+  </div>
+</template>
+<style>
+.borderless-input_defen {
+  border: none; 
+  /* 移除边框 */
+  outline: none; /* 移除点击输入框时浏览器自带的轮廓线 */
+  text-align: center;
+}
+.box {
+  width: 100%;
+  height: 40px;
+  display: flex;
+  border-left: 1px solid #e9e9e9;
+  border-top: 1px solid #e9e9e9;
+  }
+  .box1{
+  width: 100%;
+  height: 40px;
+  display: flex;
+  border-left: 1px solid #e9e9e9;
+  border-top: 1px solid #e9e9e9;
+  }
+.content1 {
+  width: 80%;
+  height: 40px;
+  line-height: 40px;
+  text-align: center;
+  background-color: #fafafa;
+  border-right: 1px solid #e9e9e9;
+  border-bottom: 1px solid #e9e9e9;
+  color:green;
+  font-size: 14px;
+}
+.content11 {
+  width: 199px;
+  height: 40px;
+  line-height: 40px;
+  text-align: center;
+  background-color: #fafafa;
+  border-right: 1px solid #e9e9e9;
+  border-bottom: 1px solid #e9e9e9;
+  color: green;
+  font-size: 14px;
+}
+.content2 {
+  width: 60%;
+  height: 40px;
+  line-height: 40px;
+  text-align: center;
+  background-color: #fff;
+  border-right: 1px solid #e9e9e9;
+  border-bottom: 1px solid #e9e9e9;
+  /* color: #b0b0b2; */
+  font-size: 14px;
+}
+.content12 {
+  width: 147px;
+  height: 40px;
+  line-height: 40px;
+  text-align: center;
+  background-color: #fff;
+  border-right: 2px solid #e9e9e9;
+  border-bottom: 1px solid #e9e9e9;
+  /* color: #b0b0b2; */
+  font-size: 14px;
+}
+</style>
+<script>
+import { listUser, getUser, delUser, addUser, updateUser, resetUserPwd, changeUserStatus, deptTreeSelect } from "@/api/system/user";
+import { getToken } from "@/utils/auth";
+
+export default {
+  name: "User",
+  dicts: ['sys_normal_disable', 'sys_user_sex'],
+  data() {
+    return {
+      tableArr1: [{
+          zuohao: '01',
+          monitype: '就绪',
+          xuehao: '2024001',
+          xingming: '张三',
+          kaoshitype: '未登录',
+          chengji: '80',
+        },
+        {
+          zuohao: '02',
+          monitype: '离线',
+          xuehao: '2024001',
+          xingming: '李四',
+          kaoshitype: '已登录',
+          chengji: '80',
+        },{
+          zuohao: '03',
+          monitype: '就绪',
+          xuehao: '2024001',
+          xingming: '张',
+          kaoshitype: '已交卷',
+          chengji: '80',
+        },{
+          zuohao: '04',
+          monitype: '离线',
+          xuehao: '2024001',
+          xingming: '王',
+          kaoshitype: '剩余时间',
+          chengji: '80',
+        },
+      ],
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 用户表格数据
+      userList: null,
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 部门名称
+      deptName: undefined,
+      // 默认密码
+      initPassword: undefined,
+      // 日期范围
+      dateRange: [],
+      // 岗位选项
+      postOptions: [],
+      // 角色选项
+      roleOptions: [],
+      // 表单参数
+      form: {},
+      defaultProps: {
+        children: "children",
+        label: "label"
+      },
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        userName: undefined,
+        phonenumber: undefined,
+        status: undefined,
+        deptId: undefined
+      },
+      // 列信息
+      columns: [
+        { key: 0, label: `编号`, visible: true },
+        { key: 1, label: `班级名称`, visible: true },
+        { key: 2, label: `专业`, visible: true },
+        { key: 3, label: `备注`, visible: true },
+        { key: 4, label: `创建时间`, visible: true }
+      ],
+      tab_columns: [
+        { key: 0, label: `座号`, visible: true },
+        { key: 1, label: `模拟器状态`, visible: true },
+        { key: 2, label: `学员学号`, visible: true },
+        { key: 3, label: `学员姓名`, visible: true },
+        { key: 4, label: `考试状态`, visible: true },
+        { key: 5, label: `考试成绩`, visible: true },
+        { key: 6, label: `出题题目`, visible: true },
+        { key: 7, label: `故障现象`, visible: true },
+        { key: 8, label: `可能原因`, visible: true },
+        { key: 9, label: `故障部位`, visible: true },
+        { key: 10, label: `排除方法`, visible: true },
+        { key: 11, label: `修复结论`, visible: true },
+      ],
+
+
+    };
+  },
+  watch: {
+    // 根据名称筛选部门树
+    deptName(val) {
+      this.$refs.tree.filter(val);
+    }
+  },
+  created() {
+    this.getList();
+    // this.getDeptTree();
+    this.getConfigKey("sys.user.initPassword").then(response => {
+      this.initPassword = response.msg;
+    });
+  },
+  methods: {
+    refreshTable1(){
+      this.loading = true;
+      listUser(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
+          this.userList = response.rows;
+          this.total = response.total;
+          this.loading = false;
+        }
+      );
+    },
+    /** 查询用户列表 */
+    getList() {
+      this.loading = true;
+      listUser(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
+          this.userList = response.rows;
+          this.total = response.total;
+          this.loading = false;
+        }
+      );
+    },
+    // 筛选节点
+    filterNode(value, data) {
+      if (!value) return true;
+      return data.label.indexOf(value) !== -1;
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        userId: undefined,
+        deptId: undefined,
+        userName: undefined,
+        nickName: undefined,
+        password: undefined,
+        phonenumber: undefined,
+        email: undefined,
+        sex: undefined,
+        status: "0",
+        remark: undefined,
+        postIds: [],
+        roleIds: []
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.dateRange = [];
+      this.resetForm("queryForm");
+      this.queryParams.deptId = undefined;
+      this.$refs.tree.setCurrentKey(null);
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.userId);
+      this.single = selection.length != 1;
+      this.multiple = !selection.length;
+    },
+    
+    /** 提交按钮 */
+    submitForm: function() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.userId != undefined) {
+            updateUser(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addUser(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+  }
+};
+</script>

+ 1092 - 0
ruoyi-ui/src/views/peoples/exams/index.vue

@@ -0,0 +1,1092 @@
+<template>
+  <div class="app-container">
+    <el-row>
+      <!--用户数据1-->
+        <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+          <el-form-item label="考试名称" prop="userName">
+            <el-input
+              v-model="queryParams.userName"
+              placeholder="请输入考试名称"
+              clearable
+              style="width: 150px"
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+          <el-form-item label="考试状态" prop="status">
+            <el-select
+              v-model="queryParams.status"
+              placeholder="考试状态"
+              clearable
+              style="width: 150px"
+            >
+              <el-option
+                v-for="dict in dict.type.sys_normal_disable"
+                :key="dict.value"
+                :label="dict.label"
+                :value="dict.value"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="考试时间">
+            <el-date-picker
+              v-model="dateRange"
+              style="width: 240px"
+              value-format="yyyy-MM-dd"
+              type="daterange"
+              range-separator="-"
+              start-placeholder="开始日期"
+              end-placeholder="结束日期"
+            ></el-date-picker>
+          </el-form-item>
+          <el-form-item label="模拟器类型" prop="userName">
+            <el-input
+              v-model="queryParams.userName"
+              placeholder="请输入模拟器类型"
+              clearable
+              style="width: 240px"
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+          <el-form-item label="创建时间">
+            <el-date-picker
+              style="width: 240px"
+              value-format="yyyy-MM-dd"
+              type="daterange"
+              range-separator="-"
+              start-placeholder="开始日期"
+              end-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-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="['simulator:task: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="['simulator:user: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="['simulator:user:remove']"
+            >删除</el-button>
+          </el-col>
+          <el-col :span="1.5">
+            <el-button
+              type="warning"
+              plain
+              icon="el-icon-s-operation"
+              size="mini"
+              :disabled="single"
+              @click="handleKaoshi"
+            >当前考试</el-button>
+          </el-col>
+          <right-toolbar :showSearch.sync="showSearch" @queryTable="getList" :columns="columns"></right-toolbar>
+        </el-row>
+
+        <el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange">
+          <el-table-column type="selection" width="50" align="center" />
+          <!-- <el-table-column label="编号" align="center" key="userId" prop="userId" v-if="columns[0].visible" /> -->
+          <el-table-column label="考试名称" align="center" key="userName" prop="userName" v-if="columns[1].visible" :show-overflow-tooltip="true" />
+          <el-table-column label="考试时间" align="center" key="kaoshiTime" prop="kaoshiTime" v-if="columns[2].visible" :show-overflow-tooltip="true" />
+          <el-table-column label="模拟器类型" align="center" key="liexing" prop="liexing" v-if="columns[3].visible" :show-overflow-tooltip="true" />
+          <el-table-column label="创建老师" align="center" key="creater" prop="creater" v-if="columns[4].visible" :show-overflow-tooltip="true" />
+          <el-table-column label="考试状态" align="center" key="status" v-if="columns[5].visible">
+            <template slot-scope="scope">
+              <el-switch
+                v-model="scope.row.status"
+                active-value="0"
+                inactive-value="1"
+                @change="handleStatusChange(scope.row)"
+              ></el-switch>
+            </template>
+          </el-table-column>
+          <el-table-column label="创建时间" align="center" prop="createTime" v-if="columns[6].visible" width="160">
+            <template slot-scope="scope">
+              <span>{{ parseTime(scope.row.createTime) }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column
+            label="操作"
+            align="center"
+            width="160"
+            class-name="small-padding fixed-width"
+          >
+            <template slot-scope="scope">
+              <el-button
+                size="mini"
+                type="text"
+                icon="el-icon-edit"
+                @click="handleUpdate(scope.row)"
+                v-hasPermi="['simulator:user:edit']"
+              >修改</el-button>
+              <el-button
+                size="mini"
+                type="text"
+                icon="el-icon-delete"
+                @click="handleDelete(scope.row)"
+                v-hasPermi="['simulator:user: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-row>
+
+    <!-- 添加或修改用户配置对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="70%" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="型号">
+              <el-select v-model="selectedEquip"  placeholder="请选择模拟器类型" style="width: 100%;">
+                <el-option
+                  value="请选择"
+                >请选择</el-option>
+                <el-option
+                  v-for="dict in dict.type.sim_equip_type"
+                  :key="dict.value"
+                  :label="dict.label"
+                  :value="dict.value"
+                ></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="出题方式" prop="userName">
+              <el-select v-model="selectedEquip"  placeholder="请选择出题方式" style="width: 70%;">
+                <el-option
+                  value="请选择"
+                >请选择</el-option>
+                <el-option
+                  v-for="dict in dict.type.sim_equip_type"
+                  :key="dict.value"
+                  :label="dict.label"
+                  :value="dict.value"
+                ></el-option>
+              </el-select>
+              <el-button type="primary" round style="margin-left: 5%;" @click="handleSelectType">自选考题编辑</el-button>
+            </el-form-item>
+          </el-col>
+          
+          <el-col :span="12">
+            <el-form-item label="日期范围" prop="field101">
+              <el-date-picker type="daterange" v-model="form.field101" format="yyyy-MM-dd"
+                value-format="yyyy-MM-dd" :style="{width: '100%'}" start-placeholder="开始日期" end-placeholder="结束日期"
+                range-separator="至" clearable></el-date-picker>
+            </el-form-item>
+          </el-col>
+
+          <el-col :span="12">
+            <el-form-item label="考试名称" prop="userName">
+              <el-input  placeholder="请输入考试名称" maxlength="30" />
+            </el-form-item>
+          </el-col>
+
+
+          <el-col :span="12">
+            <el-form-item label="考试时长" prop="userName">
+              <el-input  placeholder="请输入考试时长" maxlength="30" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+
+      <el-descriptions title="班级列表" :column="3" ></el-descriptions>
+      <el-row :gutter="20">
+        <el-col :xs="24">
+          <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="['system:user: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="['system:user: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="['system:user:remove']"
+              >删除</el-button>
+            </el-col>
+            
+
+
+            <right-toolbar :showSearch.sync="showSearch" @queryTable="getList" :columns="columns"></right-toolbar>
+          </el-row>
+          <el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange">
+            <el-table-column type="selection" width="50" align="center" />
+            <el-table-column label="区队/班级" align="center" key="className" prop="className" v-if="columns[0].visible" :show-overflow-tooltip="true" />
+            <el-table-column label="专业名称" align="center" key="majorName" prop="majorName" v-if="columns[1].visible" :show-overflow-tooltip="true" />
+            <el-table-column label="全部学员数量" align="center" key="remark" prop="remark" v-if="columns[2].visible" :show-overflow-tooltip="true" />
+            <el-table-column
+              label="操作"
+              align="center"
+              width="160"
+              class-name="small-padding fixed-width"
+            >
+              <template slot-scope="scope">
+                <el-button
+                  size="mini"
+                  type="text"
+                  icon="el-icon-edit"
+                  @click="handleUpdate(scope.row)"
+                  v-hasPermi="['system:user:edit']"
+                >修改</el-button>
+                <el-button
+                  size="mini"
+                  type="text"
+                  icon="el-icon-delete"
+                  @click="handleDelete(scope.row)"
+                  v-hasPermi="['system:user: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-col>
+      </el-row>
+
+
+      <h4 class="h4" style="font-size: 16px;font-weight: bold;margin-left: 2%;">统计情况</h4>
+      <div class="shixiang">
+          <div>本次考试班级数量:2</div>
+          <div>计划参加考试学员数量:34</div>
+          <div>每批次考试学员数量:34</div>
+          <div>计划考试批次:5</div>
+      </div>
+
+
+      <div slot="footer" class="dialog-footer" style="margin-top: 10%;">
+        <el-button type="primary" @click="submitForm">添加考试</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+
+    <!-- 自选题目编辑 -->
+    <el-dialog :title="title" :visible.sync="selectopen" width="70%" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="型号">
+              <el-select v-model="selectedEquip"  placeholder="请选择模拟器型号">
+                <el-option
+                  value="请选择"
+                >请选择</el-option>
+                <el-option
+                  v-for="dict in dict.type.sim_equip_type"
+                  :key="dict.value"
+                  :label="dict.label"
+                  :value="dict.value"
+                ></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <div style="text-align: right;">
+            <el-button @click="toggleSelection(tableData_tm)">选择全部</el-button>
+            <el-button @click="toggleSelection()">取消选择</el-button>
+          </div>
+        </el-row>
+        
+        <el-table 
+          :data="tableData_tm" border ref="multipleTable" @selection-change="handleSelectionRow" 
+          :span-method="objectSpanMethod" 
+          style="width:100%;text-align:center;margin-left:10px; margin-top:10px">
+          <el-table-column
+            prop="xinghao"
+            label="型号">
+          </el-table-column>
+          <el-table-column
+            prop="xianxiang"
+            label="故障现象">
+          </el-table-column>
+          <el-table-column
+            prop="name"
+            label="故障部位">
+          </el-table-column>
+          <el-table-column
+          type="selection" prop="ids"
+            label="ID"
+          width="55"></el-table-column>
+        </el-table>
+      </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>
+<style>
+.el-table__header tr th .cell{
+  text-align: center;
+}
+.el-table__row .cell {
+  text-align: center;
+}
+.shixiang{
+  margin-left: 2%;
+  height: 30px;
+  line-height: 30px;
+  padding-left: 0%;
+}
+</style>
+<script>
+import { listUser, getUser, delUser, addUser, updateUser, resetUserPwd, changeUserStatus, deptTreeSelect } from "@/api/system/user";
+import { getToken } from "@/utils/auth";
+import Treeselect from "@riophae/vue-treeselect";
+import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+
+export default {
+  name: "Task",
+  dicts: ['sim_equip_type'],
+  components: { Treeselect },
+  data() {
+    return {
+      multipleSelection: [],
+      selectedEquip: '',
+      selectedZjEquip: '',
+      tableData_tm: [
+        {
+          ids:1,
+          xinghao: 'FZD04B型侦毒器',
+          xianxiang: '开机无响应',
+          name: '1.电源开关',
+        },{
+          ids:2,
+          name: '2.DC/DC转换芯片',
+        },{
+          ids:3,
+          xianxiang: '开机后按抽气开关,微电机不工作',
+          name: '3.微电机',
+        },{
+          ids:4,
+          name: '4.Q2',
+        },{
+          ids:5,
+          xianxiang: '抽气流量不足',
+          name: '5.滤网',
+        },{
+          ids:6,
+          name: '6.调速电位器',
+        },{
+          ids:7,
+          xianxiang: '开机后按下加热开关,加热灯不亮,也未加热',
+          name: '7.加热指示灯',
+        },{
+          ids:8,
+          name: '8.热敏开关',
+        },
+        {
+          ids:9,
+          xianxiang: '不能正常工作',
+          name: '9.外壳及零件',
+        },{
+          ids:10,
+          xianxiang: '电压低',
+          name: '10.供电模块',
+        },{
+          ids:11,
+          xianxiang: '抽气指示灯不亮',
+          name: '11.抽气指示灯',
+        },
+
+        {
+          ids:21,
+          xinghao:'FZB006型毒剂报警器',
+          xianxiang: '仪器无法开机',
+          name: '1.薄膜开关FPC排线',
+        },{
+          ids:22,
+          name: '2.主控板开机电路',
+        },
+        {
+          ids:23,
+          xianxiang: '蜂鸣器自检时,声音异常',
+          name: '3.蜂鸣器出声口',
+        },{
+          ids:24,
+          name: '4.接口接线板',
+        },{
+          ids:25,
+          xianxiang: '仪器进入检测界面后,通入检测剂不报警',
+          name: '5.检测剂',
+        },{
+          ids:26,
+          name: '6.主控板信号采集电路',
+        },
+        {
+          ids:27,
+          xianxiang: '显示屏无显示',
+          name: '7.主控板显示屏供电电路',
+        },{
+          ids:28,
+          name: '8.显示屏',
+        },
+        {
+          ids:29,
+          xianxiang: '长时间不进入“检测中”',
+          name: '9.干燥管',
+        },{
+          ids:210,
+          name: '10.维护管',
+        },
+        {
+          ids:211,
+          xianxiang: '不能正常工作',
+          name: '11.外壳及零件',
+        },{
+          ids:212,
+          xianxiang: '电压低',
+          name: '12.供电模块',
+        },{
+          ids:213,
+          xianxiang: '无法开机',
+          name: '13.DC/DC',
+        },
+        
+        {
+          ids:31,
+          xinghao: '防化兵用毒剂报警器',
+          xianxiang: '仪器无法开机',
+          name: '1.FFC排线',
+        },{
+          ids:32,
+          name: '2.汇总主控板',
+        },{
+          ids:33,
+          xianxiang: '开机后,显示屏无显示',
+          name: '3.显控报警板',
+        },{
+          ids:34,
+          name: '4.显示屏',
+        },{
+          ids:35,
+          xianxiang: '检测状态下模拟剂不报警',
+          name: '5.汇总主控板信号采集电路',
+        },{
+          ids:36,
+          name: '6.检测剂',
+        },{
+          ids:37,
+          xianxiang: '长时间不能进入检测状态',
+          name: '7.干燥管',
+        },{
+          ids:38,
+          name: '8.维护管',
+        },{
+          ids:39,
+          xianxiang: '固液检测/气体检测模式切换失败',
+          name: '9.固液检测单元与主控板连接线',
+        },{
+          ids:310,
+          name: '10.汇总主控板固液通信电路',
+        },{
+          ids:311,
+          name: '11.切换按键',
+        },{
+          ids:312,
+          xianxiang: '有毒有害气体检测模块不报警',
+          name: '12.高压驱动板与汇总主控板连接线',
+        },{
+          ids:313,
+          name: '13.汇总主控板毒害模块通信电路',
+        },{
+          ids:314,
+          xianxiang: '不能正常工作',
+          name: '14.外壳及零件',
+        },{
+          ids:315,
+          xianxiang: '电压低',
+          name: '15.供电模块',
+        },{
+          ids:316,
+          xianxiang: '无法开机',
+          name: '16.DC/DC',
+        },
+      ],
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 用户表格数据
+      userList: null,
+      // 弹出层标题
+      title: "",
+      // 部门树选项
+      deptOptions: undefined,
+      // 是否显示弹出层
+      open: false,
+      //自检弹出框
+      zijianopen:false,
+      // 自选题目编辑
+      selectopen:false,
+      // 部门名称
+      deptName: undefined,
+      // 默认密码
+      initPassword: undefined,
+      // 日期范围
+      dateRange: [],
+      // 岗位选项
+      postOptions: [],
+      // 角色选项
+      roleOptions: [],
+      // 表单参数
+      form: {
+        field101: null,
+      },
+      defaultProps: {
+        children: "children",
+        label: "label"
+      },
+      // 用户导入参数
+      upload: {
+        // 是否显示弹出层(用户导入)
+        open: false,
+        // 弹出层标题(用户导入)
+        title: "",
+        // 是否禁用上传
+        isUploading: false,
+        // 是否更新已经存在的用户数据
+        updateSupport: 0,
+        // 设置上传的请求头部
+        headers: { Authorization: "Bearer " + getToken() },
+        // 上传的地址
+        url: process.env.VUE_APP_BASE_API + "/simulator/user/importData"
+      },
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        userName: undefined,
+        phonenumber: undefined,
+        status: undefined,
+        deptId: undefined
+      },
+      // 列信息
+      columns: [
+        { key: 0, label: `编号`, visible: true },
+        { key: 1, label: `考试名称`, visible: true },
+        { key: 2, label: `考试时间`, visible: true },
+        { key: 3, label: `模拟器类型`, visible: true },
+        { key: 4, label: `考试状态`, visible: true },
+        { key: 5, label: `创建老师`, visible: true },
+        { key: 6, label: `创建时间`, visible: true }
+      ],
+      // 表单校验
+      rules: {
+      }
+    };
+  },
+  watch: {
+    // 根据名称筛选部门树
+    deptName(val) {
+      this.$refs.tree.filter(val);
+    },
+    selectedEquip(newValue) {
+      // console.log(newValue);
+      // 根据newValue更新tableData
+      // this.tableData = this.getNewTableData(newValue);
+      // console.log(this.getNewTableData(newValue);
+      if(newValue == 1){
+        this.tableData_tm = [{
+          ids:1,
+          xinghao: 'FZD04B型侦毒器',
+          xianxiang: '开机无响应',
+          name: '1.电源开关',
+        },{
+          ids:2,
+          name: '2.DC/DC转换芯片',
+        },{
+          ids:3,
+          xianxiang: '开机后按抽气开关,微电机不工作',
+          name: '3.微电机',
+        },{
+          ids:4,
+          name: '4.Q2',
+        },{
+          ids:5,
+          xianxiang: '抽气流量不足',
+          name: '5.滤网',
+        },{
+          ids:6,
+          name: '6.调速电位器',
+        },{
+          ids:7,
+          xianxiang: '开机后按下加热开关,加热灯不亮,也未加热',
+          name: '7.加热指示灯',
+        },{
+          ids:8,
+          name: '8.热敏开关',
+        },
+        {
+          ids:9,
+          xianxiang: '不能正常工作',
+          name: '9.外壳及零件',
+        },{
+          ids:10,
+          xianxiang: '电压低',
+          name: '10.供电模块',
+        },{
+          ids:11,
+          xianxiang: '抽气指示灯不亮',
+          name: '11.抽气指示灯',
+        }];
+      }else if(newValue == 2){
+        this.tableData_tm = [{
+          ids:21,
+          xinghao:'FZB006型毒剂报警器',
+          xianxiang: '仪器无法开机',
+          name: '1.薄膜开关FPC排线',
+        },{
+          ids:22,
+          name: '2.主控板开机电路',
+        },
+        {
+          ids:23,
+          xianxiang: '蜂鸣器自检时,声音异常',
+          name: '3.蜂鸣器出声口',
+        },{
+          ids:24,
+          name: '4.接口接线板',
+        },{
+          ids:25,
+          xianxiang: '仪器进入检测界面后,通入检测剂不报警',
+          name: '5.检测剂',
+        },{
+          ids:26,
+          name: '6.主控板信号采集电路',
+        },
+        {
+          ids:27,
+          xianxiang: '显示屏无显示',
+          name: '7.主控板显示屏供电电路',
+        },{
+          ids:28,
+          name: '8.显示屏',
+        },
+        {
+          ids:29,
+          xianxiang: '长时间不进入“检测中”',
+          name: '9.干燥管',
+        },{
+          ids:210,
+          name: '10.维护管',
+        },
+        {
+          ids:211,
+          xianxiang: '不能正常工作',
+          name: '11.外壳及零件',
+        },{
+          ids:212,
+          xianxiang: '电压低',
+          name: '12.供电模块',
+        },{
+          ids:213,
+          xianxiang: '无法开机',
+          name: '13.DC/DC',
+        }]
+      }else if(newValue == 3){
+        this.tableData_tm = [{
+          ids:31,
+          xinghao: '防化兵用毒剂报警器',
+          xianxiang: '仪器无法开机',
+          name: '1.FFC排线',
+        },{
+          ids:32,
+          name: '2.汇总主控板',
+        },{
+          ids:33,
+          xianxiang: '开机后,显示屏无显示',
+          name: '3.显控报警板',
+        },{
+          ids:34,
+          name: '4.显示屏',
+        },{
+          ids:35,
+          xianxiang: '检测状态下模拟剂不报警',
+          name: '5.汇总主控板信号采集电路',
+        },{
+          ids:36,
+          name: '6.检测剂',
+        },{
+          ids:37,
+          xianxiang: '长时间不能进入检测状态',
+          name: '7.干燥管',
+        },{
+          ids:38,
+          name: '8.维护管',
+        },{
+          ids:39,
+          xianxiang: '固液检测/气体检测模式切换失败',
+          name: '9.固液检测单元与主控板连接线',
+        },{
+          ids:310,
+          name: '10.汇总主控板固液通信电路',
+        },{
+          ids:311,
+          name: '11.切换按键',
+        },{
+          ids:312,
+          xianxiang: '有毒有害气体检测模块不报警',
+          name: '12.高压驱动板与汇总主控板连接线',
+        },{
+          ids:313,
+          name: '13.汇总主控板毒害模块通信电路',
+        },{
+          ids:314,
+          xianxiang: '不能正常工作',
+          name: '14.外壳及零件',
+        },{
+          ids:315,
+          xianxiang: '电压低',
+          name: '15.供电模块',
+        },{
+          ids:316,
+          xianxiang: '无法开机',
+          name: '16.DC/DC',
+        }]
+      }
+
+    },
+
+
+  },
+  created() {
+    this.getList();
+    //this.getDeptTree();
+    this.getConfigKey("sys.user.initPassword").then(response => {
+      this.initPassword = response.msg;
+    });
+  },
+  methods: {
+    objectSpanMethod({ row, column, rowIndex, columnIndex }) {
+      // console.log(this.selectedEquip+'@@@')
+      //第一列型号
+      if(columnIndex === 0) {
+        if(this.selectedEquip==2){
+          if(rowIndex==0){
+            return { rowspan: 13, colspan: 1 };
+          }
+          return { rowspan: 0, colspan: 0 };
+        }else if(this.selectedEquip==3){
+          if(rowIndex==0){
+            return { rowspan: 16, colspan: 1 };
+          }
+          return { rowspan: 0, colspan: 0};
+        }else{
+          if(rowIndex==0){
+            return { rowspan: 11, colspan: 1 };
+          }else if(rowIndex==11){
+            return { rowspan: 13, colspan: 1 };
+          }else if(rowIndex==24){
+            return { rowspan: 16, colspan: 1 };
+          }else{
+            return { rowspan: 0, colspan: 0 };
+          }
+        }
+      }
+
+      //第二列故障现象
+      if(columnIndex === 1) {
+        if(this.selectedEquip==2){
+          // console.log(rowIndex+'####')
+          if(rowIndex<9 && rowIndex % 2 === 0){
+            return { rowspan: 2, colspan: 1 };
+          }else if((rowIndex>9&&rowIndex<13)){
+            return { rowspan: 1, colspan: 1 };
+          }else{
+            return { rowspan: 0, colspan: 0 };
+          } 
+        }else if(this.selectedEquip==3){
+          if(rowIndex<7 && rowIndex % 2 === 0){
+            return { rowspan: 2, colspan: 1 };
+          }else if((rowIndex==8)){
+            return { rowspan: 3, colspan: 1 };
+          }else if(rowIndex==11){
+            return { rowspan: 2, colspan: 1 };
+          }else if(rowIndex>12 && rowIndex<16){
+            return { rowspan: 1, colspan: 1 };
+          }else{
+            return { rowspan: 0, colspan: 0 };
+          } 
+        }else{
+          if(rowIndex<7 && rowIndex % 2 === 0){
+            return { rowspan: 2, colspan: 1 };
+          }else if((rowIndex>7&&rowIndex<11) || (rowIndex>20&&rowIndex<24) || (rowIndex>36)){
+            return { rowspan: 1, colspan: 1 };
+          }else if((rowIndex==35) || (rowIndex>10 && rowIndex<20) && rowIndex % 2 === 1){
+            return { rowspan: 2, colspan: 1 };
+          }else if(rowIndex>23 && rowIndex<32 && rowIndex % 2 === 0){
+            return { rowspan: 2, colspan: 1 };
+          }else if(rowIndex==32){
+            return { rowspan: 3, colspan: 1 };
+          }else{
+            return { rowspan: 0, colspan: 0 };
+          }
+        }
+        
+      }
+      //故障部位 和 选择
+      if(columnIndex === 2 || columnIndex === 3){
+        //return { rowspan: 1, colspan: 1 };
+      }
+    },
+
+    handleSelectionRow(val) {
+      this.multipleSelection = val;
+    },
+    // 根据选择的option获取新的数据
+    // getNewTableData(option) {
+    //   // 逻辑处理返回新的数据数组
+    //   return [
+    //     // ...新数据
+    //   ];
+    // },
+    toggleSelection(rows) {
+      if (rows) {
+        rows.forEach(row => {
+          this.$refs.multipleTable.toggleRowSelection(row);
+          console.log(row.ids+'###')
+          console.log(row.name+'@@@')
+        });
+      } else {
+        this.$refs.multipleTable.clearSelection();
+      }
+    },
+    handleSelectionRow(val) {
+      this.multipleSelection = val;
+    },
+    /** 查询用户列表 */
+    getList() {
+      this.loading = true;
+      listUser(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
+          //将返回值注释
+          this.userList = response.rows;
+          this.total = response.total;
+          this.loading = false;
+        }
+      );
+    },
+    /** 查询部门下拉树结构 */
+    getDeptTree() {
+      deptTreeSelect().then(response => {
+        this.deptOptions = response.data;
+      });
+    },
+    // 筛选节点
+    filterNode(value, data) {
+      if (!value) return true;
+      return data.label.indexOf(value) !== -1;
+    },
+    // 节点单击事件
+    handleNodeClick(data) {
+      this.queryParams.deptId = data.id;
+      this.handleQuery();
+    },
+    // 用户状态修改
+    handleStatusChange(row) {
+      let text = row.status === "0" ? "启用" : "停用";
+      this.$modal.confirm('确认要"' + text + '""' + row.userName + '"用户吗?').then(function() {
+        return changeUserStatus(row.userId, row.status);
+      }).then(() => {
+        this.$modal.msgSuccess(text + "成功");
+      }).catch(function() {
+        row.status = row.status === "0" ? "1" : "0";
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.zijianopen = false;
+      this.selectopen = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        userId: undefined,
+        deptId: undefined,
+        userName: undefined,
+        password: undefined,
+        phonenumber: undefined,
+        email: undefined,
+        sex: undefined,
+        status: "0",
+        remark: undefined,
+        postIds: [],
+        roleIds: []
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.dateRange = [];
+      this.resetForm("queryForm");
+      this.queryParams.deptId = undefined;
+      this.$refs.tree.setCurrentKey(null);
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.userId);
+      this.single = selection.length != 1;
+      this.multiple = !selection.length;
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      getUser().then(response => {
+        this.postOptions = response.posts;
+        this.roleOptions = response.roles;
+        this.open = true;
+        this.title = "新增考试";
+        this.form.password = this.initPassword;
+      });
+    },
+
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const userId = row.userId || this.ids;
+      getUser(userId).then(response => {
+        this.form = response.data;
+        this.postOptions = response.posts;
+        this.roleOptions = response.roles;
+        this.$set(this.form, "postIds", response.postIds);
+        this.$set(this.form, "roleIds", response.roleIds);
+        this.open = true;
+        this.title = "修改用户";
+        this.form.password = "";
+      });
+    },
+
+    /** 当前考试查询 */
+    handleKaoshi(row) {
+      const kaoshiId = row.jobId || 0;
+      this.$router.push('/peoples/present/ids/' + kaoshiId)
+    },
+
+    /** 总选题目编辑按钮操作 */
+    handleSelectType(row) {
+      this.reset();
+      const userId = row.userId || this.ids;
+      getUser(userId).then(response => {
+        this.form = response.data;
+        this.selectopen = true;
+        // this.open = false;
+        this.title = "选择考题";
+      });
+    },
+    
+    /** 提交按钮 */
+    submitForm: function() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.userId != undefined) {
+            updateUser(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addUser(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const userIds = row.userId || this.ids;
+      this.$modal.confirm('是否确认删除用户编号为"' + userIds + '"的数据项?').then(function() {
+        return delUser(userIds);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+  }
+};
+</script>

+ 459 - 0
ruoyi-ui/src/views/peoples/major/index.vue

@@ -0,0 +1,459 @@
+<template>
+  <div class="app-container">
+    <el-row :gutter="20">
+      <!--用户数据1-->
+      <el-col :xs="24">
+        <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="88px">
+          <el-form-item label="专业" prop="majorName">
+            <el-input
+              v-model="queryParams.userName"
+              placeholder="请输入专业"
+              clearable
+              style="width: 240px"
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+        
+          <el-form-item label="创建时间">
+            <el-date-picker
+              v-model="dateRange"
+              style="width: 240px"
+              value-format="yyyy-MM-dd"
+              type="daterange"
+              range-separator="-"
+              start-placeholder="开始日期"
+              end-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-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="['system:user: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="['system:user: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="['system:user:remove']"
+            >删除</el-button>
+          </el-col>
+          <right-toolbar :showSearch.sync="showSearch" @queryTable="getList" :columns="columns"></right-toolbar>
+        </el-row>
+
+        <el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange">
+          <el-table-column type="selection" width="50" align="center" />
+          <el-table-column label="编号" align="center" key="userId" prop="userId" v-if="columns[0].visible" />
+          <el-table-column label="专业名称" align="center" key="nickName" prop="nickName" v-if="columns[1].visible" :show-overflow-tooltip="true" />
+          <el-table-column label="备注" align="center" prop="remark"  width="160" />
+          <el-table-column label="创建时间" align="center" prop="createTime" v-if="columns[3].visible" width="160">
+            <template slot-scope="scope">
+              <span>{{ parseTime(scope.row.createTime) }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column
+            label="操作"
+            align="center"
+            width="160"
+            class-name="small-padding fixed-width"
+          >
+            <template slot-scope="scope">
+              <el-button
+                size="mini"
+                type="text"
+                icon="el-icon-edit"
+                @click="handleUpdate(scope.row)"
+                v-hasPermi="['system:user:edit']"
+              >修改</el-button>
+              <el-button
+                size="mini"
+                type="text"
+                icon="el-icon-delete"
+                @click="handleDelete(scope.row)"
+                v-hasPermi="['system:user: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-col>
+    </el-row>
+
+    <!-- 添加或修改用户配置对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="600px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="专业名称" prop="nickName">
+              <el-input v-model="form.nickName" placeholder="请输入专业名称" maxlength="30" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="备注">
+              <el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </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 { listUser, getUser, delUser, addUser, updateUser, resetUserPwd, changeUserStatus, deptTreeSelect } from "@/api/system/user";
+import { getToken } from "@/utils/auth";
+import Treeselect from "@riophae/vue-treeselect";
+import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+
+export default {
+  name: "User",
+  dicts: ['sys_normal_disable', 'sys_user_sex'],
+  components: { Treeselect },
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 用户表格数据
+      userList: null,
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 部门名称
+      deptName: undefined,
+      // 默认密码
+      initPassword: undefined,
+      // 日期范围
+      dateRange: [],
+      // 岗位选项
+      postOptions: [],
+      // 角色选项
+      roleOptions: [],
+      // 表单参数
+      form: {},
+      defaultProps: {
+        children: "children",
+        label: "label"
+      },
+      // 用户导入参数
+      upload: {
+        // 是否显示弹出层(用户导入)
+        open: false,
+        // 弹出层标题(用户导入)
+        title: "",
+        // 是否禁用上传
+        isUploading: false,
+        // 是否更新已经存在的用户数据
+        updateSupport: 0,
+        // 设置上传的请求头部
+        headers: { Authorization: "Bearer " + getToken() },
+        // 上传的地址
+        url: process.env.VUE_APP_BASE_API + "/system/user/importData"
+      },
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        userName: undefined,
+        phonenumber: undefined,
+        status: undefined,
+        deptId: undefined
+      },
+      // 列信息
+      columns: [
+        { key: 0, label: `编号`, visible: true },
+        { key: 1, label: `专业名称`, visible: true },
+        { key: 2, label: `备注`, visible: true },
+        { key: 3, label: `创建时间`, visible: true }
+      ],
+      // 表单校验
+      rules: {
+        userName: [
+          { required: true, message: "用户名称不能为空", trigger: "blur" },
+          { min: 2, max: 20, message: '用户名称长度必须介于 2 和 20 之间', trigger: 'blur' }
+        ],
+        nickName: [
+          { required: true, message: "用户昵称不能为空", trigger: "blur" }
+        ],
+        password: [
+          { required: true, message: "用户密码不能为空", trigger: "blur" },
+          { min: 5, max: 20, message: '用户密码长度必须介于 5 和 20 之间', trigger: 'blur' },
+          { pattern: /^[^<>"'|\\]+$/, message: "不能包含非法字符:< > \" ' \\\ |", trigger: "blur" }
+        ],
+        email: [
+          {
+            type: "email",
+            message: "请输入正确的邮箱地址",
+            trigger: ["blur", "change"]
+          }
+        ],
+        phonenumber: [
+          {
+            pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
+            message: "请输入正确的手机号码",
+            trigger: "blur"
+          }
+        ]
+      }
+    };
+  },
+  watch: {
+    // 根据名称筛选部门树
+    deptName(val) {
+      this.$refs.tree.filter(val);
+    }
+  },
+  created() {
+    this.getList();
+    // this.getDeptTree();
+    this.getConfigKey("sys.user.initPassword").then(response => {
+      this.initPassword = response.msg;
+    });
+  },
+  methods: {
+    /** 查询用户列表 */
+    getList() {
+      this.loading = true;
+      listUser(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
+          this.userList = response.rows;
+          this.total = response.total;
+          this.loading = false;
+        }
+      );
+    },
+    // 筛选节点
+    filterNode(value, data) {
+      if (!value) return true;
+      return data.label.indexOf(value) !== -1;
+    },
+    // 用户状态修改
+    handleStatusChange(row) {
+      let text = row.status === "0" ? "启用" : "停用";
+      this.$modal.confirm('确认要"' + text + '""' + row.userName + '"用户吗?').then(function() {
+        return changeUserStatus(row.userId, row.status);
+      }).then(() => {
+        this.$modal.msgSuccess(text + "成功");
+      }).catch(function() {
+        row.status = row.status === "0" ? "1" : "0";
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        userId: undefined,
+        deptId: undefined,
+        userName: undefined,
+        nickName: undefined,
+        password: undefined,
+        phonenumber: undefined,
+        email: undefined,
+        sex: undefined,
+        status: "0",
+        remark: undefined,
+        postIds: [],
+        roleIds: []
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.dateRange = [];
+      this.resetForm("queryForm");
+      this.queryParams.deptId = undefined;
+      this.$refs.tree.setCurrentKey(null);
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.userId);
+      this.single = selection.length != 1;
+      this.multiple = !selection.length;
+    },
+    // 更多操作触发
+    handleCommand(command, row) {
+      switch (command) {
+        case "handleResetPwd":
+          this.handleResetPwd(row);
+          break;
+        case "handleAuthRole":
+          this.handleAuthRole(row);
+          break;
+        default:
+          break;
+      }
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      getUser().then(response => {
+        this.postOptions = response.posts;
+        this.roleOptions = response.roles;
+        this.open = true;
+        this.title = "添加用户";
+        this.form.password = this.initPassword;
+      });
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const userId = row.userId || this.ids;
+      getUser(userId).then(response => {
+        this.form = response.data;
+        this.postOptions = response.posts;
+        this.roleOptions = response.roles;
+        this.$set(this.form, "postIds", response.postIds);
+        this.$set(this.form, "roleIds", response.roleIds);
+        this.open = true;
+        this.title = "修改用户";
+        this.form.password = "";
+      });
+    },
+    /** 重置密码按钮操作 */
+    handleResetPwd(row) {
+      this.$prompt('请输入"' + row.userName + '"的新密码', "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        closeOnClickModal: false,
+        inputPattern: /^.{5,20}$/,
+        inputErrorMessage: "用户密码长度必须介于 5 和 20 之间",
+        inputValidator: (value) => {
+          if (/<|>|"|'|\||\\/.test(value)) {
+            return "不能包含非法字符:< > \" ' \\\ |"
+          }
+        },
+      }).then(({ value }) => {
+          resetUserPwd(row.userId, value).then(response => {
+            this.$modal.msgSuccess("修改成功,新密码是:" + value);
+          });
+        }).catch(() => {});
+    },
+    /** 分配角色操作 */
+    handleAuthRole: function(row) {
+      const userId = row.userId;
+      this.$router.push("/system/user-auth/role/" + userId);
+    },
+    /** 提交按钮 */
+    submitForm: function() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.userId != undefined) {
+            updateUser(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addUser(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const userIds = row.userId || this.ids;
+      this.$modal.confirm('是否确认删除用户编号为"' + userIds + '"的数据项?').then(function() {
+        return delUser(userIds);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('system/user/export', {
+        ...this.queryParams
+      }, `user_${new Date().getTime()}.xlsx`)
+    },
+    /** 导入按钮操作 */
+    handleImport() {
+      this.upload.title = "用户导入";
+      this.upload.open = true;
+    },
+    /** 下载模板操作 */
+    importTemplate() {
+      this.download('system/user/importTemplate', {
+      }, `user_template_${new Date().getTime()}.xlsx`)
+    },
+    // 文件上传中处理
+    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();
+    },
+    // 提交上传文件
+    submitFileForm() {
+      this.$refs.upload.submit();
+    }
+  }
+};
+</script>

+ 614 - 0
ruoyi-ui/src/views/peoples/present/index.vue

@@ -0,0 +1,614 @@
+<template>
+  <div class="app-container">
+    <el-row :gutter="20">
+      <el-col :xs="24">
+        <el-row :gutter="10" class="mb8">
+          <el-col :span="1.5">
+            <el-button
+              type="primary"
+              plain
+              icon="el-icon-refresh"
+              size="mini"
+              @click="refreshTable1"
+              v-hasPermi="['system:user:add']"
+            >刷新</el-button>
+          </el-col>
+          <el-col :span="1.5">
+            <el-button
+              type="success"
+              plain
+              icon="el-icon-edit"
+              size="mini"
+              v-hasPermi="['system:user:edit']"
+            >批量确认已送</el-button>
+          </el-col>
+        </el-row>
+        <el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange">
+          <el-table-column type="selection" width="50" align="center" />
+          <el-table-column label="座号" align="center" key="userId" prop="userId" v-if="columns[0].visible" />
+          <el-table-column label="更换件" align="center" key="className" prop="className" v-if="columns[1].visible" :show-overflow-tooltip="true" />
+          <el-table-column label="学员姓名" align="center" key="majorName" prop="majorName" v-if="columns[2].visible" :show-overflow-tooltip="true" />
+          <el-table-column label="状态" align="center" key="remark" prop="remark1" v-if="columns[3].visible" :show-overflow-tooltip="true" />
+          <el-table-column label="申请时间" align="center" prop="createTime" v-if="columns[4].visible" width="160">
+            <template slot-scope="scope">
+              <span>{{ parseTime(scope.row.createTime) }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column
+            label="操作"
+            align="center"
+            width="160"
+            class-name="small-padding fixed-width"
+          >
+            <template slot-scope="scope">
+              <el-button
+                size="mini"
+                type="text"
+                icon="el-icon-position"
+                @click="handleUpdate(scope.row)"
+                v-hasPermi="['system:user:edit']"
+              >已送</el-button>
+              <el-button
+                size="mini"
+                type="text"
+                icon="el-icon-finished"
+                @click="handleDelete(scope.row)"
+                v-hasPermi="['system:user: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-col>
+    </el-row>
+
+    <el-row style="margin-top: 2%;">
+      <el-col>
+        <el-row :gutter="10" class="mb8">
+          <el-col :span="1.5">
+            <el-button
+              type="primary"
+              plain
+              icon="el-icon-refresh"
+              size="mini"
+              @click="refreshTable1"
+            >刷新</el-button>
+          </el-col>
+        </el-row>
+        <el-table v-loading="loading" :data="tableArr1" >
+          <el-table-column label="座号" align="center" key="xuehao" prop="zuohao" v-if="tab_columns[0].visible" />
+          <el-table-column label="模拟器状态" align="center" key="className" prop="monitype" v-if="tab_columns[1].visible" :show-overflow-tooltip="true" >
+            <template scope="scope">
+              <span v-if="scope.row.monitype==='就绪'" style="color: green">就绪</span>
+              <span v-else-if="scope.row.monitype==='离线'" style="color: red">离线</span>
+            </template>
+          </el-table-column>
+          <el-table-column label="学员学号" align="center" key="majorName" prop="xuehao" v-if="tab_columns[2].visible" :show-overflow-tooltip="true" />
+          <el-table-column label="学员姓名" align="center" key="remark" prop="xingming" v-if="tab_columns[3].visible" :show-overflow-tooltip="true" />
+          <el-table-column label="考试状态" align="center" prop="kaoshitype" v-if="tab_columns[4].visible" width="160">
+            <template scope="scope">
+              <span v-if="scope.row.kaoshitype==='已交卷'" style="color: green">已交卷</span>
+              <span v-else-if="scope.row.kaoshitype==='未登录'" style="color: red">未登录</span>
+              <span v-else-if="scope.row.kaoshitype==='已登录'" style="color: blue">已登录</span>
+            </template>
+          </el-table-column>
+          <el-table-column label="考试成绩" align="center" prop="chengji" v-if="tab_columns[5].visible" width="160"></el-table-column>
+          <el-table-column label="出题题目" align="center" prop="timu" v-if="tab_columns[6].visible" width="160"></el-table-column>
+          <el-table-column label="故障现象" align="center" prop="xianxiang" v-if="tab_columns[7].visible" width="160"></el-table-column>
+          <el-table-column label="可能原因" align="center" prop="reason" v-if="tab_columns[8].visible" width="160"></el-table-column>
+          <el-table-column label="故障部位" align="center" prop="buwen" v-if="tab_columns[9].visible" width="160"></el-table-column>
+          <el-table-column label="排除方法" align="center" prop="fangfa" v-if="tab_columns[10].visible" width="160"></el-table-column>
+          <el-table-column label="修复结论" align="center" prop="jielun" v-if="tab_columns[11].visible" width="160"></el-table-column>
+        </el-table>
+      </el-col>
+    </el-row>
+    <el-row style="margin-top: 1%;">
+      <el-form ref="form" :model="form"  label-width="80px">
+        <el-col  v-for="(item, index) in tableArr2" :key="index">
+          <div class="box">
+            <div class="content1">{{ item.key }}</div>
+            <div class="content2">{{ item.value1}}</div>
+            <div class="content2">{{ item.value2}}</div>
+            <div class="content2">{{ item.value3}}</div>
+            <div class="content2">{{ item.value4}}</div>
+            <div class="content2">{{ item.value5}}</div>
+            <div class="content2">{{ item.value6}}</div>
+            <div class="content2">{{ item.value7}}</div>
+            <div class="content2">{{ item.value8}}</div>
+            <div class="content2">{{ item.value9}}</div>
+            <div class="content2">{{ item.value10}}</div>
+          </div>
+        </el-col>
+
+        <el-col  v-for="(item, index) in tableArr3" :key="index">
+          <div class="box">
+            <div class="content1">{{ item.key1 }}</div>
+            <div class="content2">
+              <!-- {{ item.value11}} -->
+              <template >
+                <input class="borderless-input_defen" name="duibie" v-model="item.value11"/>
+              </template>
+            </div>
+            <div class="content2">
+              <template >
+                <input class="borderless-input_defen" name="duibie" v-model="item.value12"/>
+              </template>
+              <!-- {{ item.value12}} -->
+            </div>
+            <div class="content2">
+              <template >
+                <input class="borderless-input_defen" name="duibie" v-model="item.value13"/>
+              </template>
+            </div>
+            <div class="content2">
+              <template >
+                <input class="borderless-input_defen" name="duibie" v-model="item.value14"/>
+              </template>
+            </div>
+            <div class="content2">
+              <template >
+                <input class="borderless-input_defen" name="duibie" v-model="item.value15"/>
+              </template>
+            </div>
+            <div class="content2">
+              <template >
+                <input class="borderless-input_defen" name="duibie" v-model="item.value16"/>
+              </template>
+            </div>
+            <div class="content2">
+              <template >
+                <input class="borderless-input_defen" name="duibie" v-model="item.value17"/>
+              </template>
+            </div>
+            <div class="content2">
+              <template >
+                <input class="borderless-input_defen" name="duibie" v-model="item.value18"/>
+              </template>
+            </div>
+            <div class="content2">
+              <template >
+                <input class="borderless-input_defen" name="duibie" v-model="item.value19"/>
+              </template>
+            </div>
+            <div class="content2">
+              <template >
+                <input class="borderless-input_defen" name="duibie" v-model="item.value110"/>
+              </template>
+            </div>
+          </div>
+        </el-col>
+      </el-form>
+    </el-row>
+    <div slot="footer" style="margin-top: 2%; text-align: center;">
+      <el-button type="primary">确认成绩并结束本批次考试</el-button>
+    </div>
+  </div>
+</template>
+<style>
+.borderless-input_defen {
+  border: none; 
+  /* 移除边框 */
+  outline: none; /* 移除点击输入框时浏览器自带的轮廓线 */
+  text-align: center;
+  width: 145px;
+}
+.box {
+  width: 100%;
+  height: 40px;
+  display: flex;
+  border-left: 1px solid #e9e9e9;
+  border-top: 1px solid #e9e9e9;
+  }
+.content1 {
+  width: 80%;
+  height: 40px;
+  line-height: 40px;
+  text-align: center;
+  background-color: #fafafa;
+  border-right: 1px solid #e9e9e9;
+  border-bottom: 1px solid #e9e9e9;
+  color:green;
+  font-size: 14px;
+}
+.content2 {
+  width: 60%;
+  height: 40px;
+  line-height: 40px;
+  text-align: center;
+  background-color: #fff;
+  border-right: 1px solid #e9e9e9;
+  border-bottom: 1px solid #e9e9e9;
+  /* color: #b0b0b2; */
+  font-size: 14px;
+}
+</style>
+<script>
+import { listUser, getUser, delUser, addUser, updateUser, resetUserPwd, changeUserStatus, deptTreeSelect } from "@/api/system/user";
+import { getToken } from "@/utils/auth";
+export default {
+  // name: "User",
+  dicts: ['sys_normal_disable', 'sys_user_sex'],
+  data() {
+    return {
+      tableArr1: [{
+          zuohao: '01',
+          monitype: '就绪',
+          xuehao: '2024001',
+          xingming: '张三',
+          kaoshitype: '未登录',
+          chengji: '80',
+        },
+        {
+          zuohao: '02',
+          monitype: '离线',
+          xuehao: '2024001',
+          xingming: '李四',
+          kaoshitype: '已登录',
+          chengji: '80',
+        },{
+          zuohao: '03',
+          monitype: '就绪',
+          xuehao: '2024001',
+          xingming: '张',
+          kaoshitype: '已交卷',
+          chengji: '80',
+        },{
+          zuohao: '04',
+          monitype: '离线',
+          xuehao: '2024001',
+          xingming: '王',
+          kaoshitype: '剩余时间',
+          chengji: '80',
+        },
+      ],
+      tableArr2: [
+      {
+        key: "座号",
+        value1: "坐席1",
+        value2: "坐席2",
+        value3: "坐席3",
+        value4: "坐席4",
+        value5: "坐席5",
+        value6: "坐席6",
+        value7: "坐席7",
+        value8: "坐席8",
+        value9: "坐席9",
+        value10: "坐席10",
+      },
+      {
+        key: "姓名",
+        value1: "张",
+        value1: "李",
+      },
+      {
+        key: "学号",
+        value1: "2023004",
+        value2: "2023007",
+      }],
+      tableArr3: [
+      {
+        key1: "一.排除故障(75分)",
+        value11: "50",
+        value12: "75",
+        value13: "75",
+        value14: "75",
+        value15: "75",
+        value16: "75",
+        value17: "75",
+        value18: "75",
+        value19: "75",
+        value110: "75",
+      },
+      {
+        key1: "故障一未排除扣25分",
+        value11: "50",
+        value12: "75",
+        value13: "75",
+        value14: "75",
+        value15: "75",
+        value16: "75",
+        value17: "75",
+        value18: "75",
+        value19: "75",
+        value110: "75",
+      },{
+        key1: "故障二未排除扣25分",
+        value11: "50",
+        value12: "75",
+        value13: "75",
+        value14: "75",
+        value15: "75",
+        value16: "75",
+        value17: "75",
+        value18: "75",
+        value19: "75",
+        value110: "75",
+      },{
+        key1: "故障三未排除扣25分",
+        value11: "50",
+        value12: "75",
+        value13: "75",
+        value14: "75",
+        value15: "75",
+        value16: "75",
+        value17: "75",
+        value18: "75",
+        value19: "75",
+        value110: "75",
+      },
+      {
+        key1: "二.修改报告表(15分)",
+        value11: "15",
+        value12: "15",
+        value13: "15",
+        value14: "15",
+        value15: "15",
+        value16: "15",
+        value17: "15",
+        value18: "15",
+        value19: "15",
+        value110: "15",
+      },{
+        key1: "故障现象少写或错写1条扣1分",
+        value11: "50",
+        value12: "15",
+        value13: "15",
+        value14: "15",
+        value15: "15",
+        value16: "15",
+        value17: "15",
+        value18: "15",
+        value19: "15",
+        value110: "15",
+      },{
+        key1: "可能原因少写或错写1条扣1分",
+        value11: "50",
+        value12: "75",
+        value13: "15",
+        value14: "15",
+        value15: "15",
+        value16: "15",
+        value17: "15",
+        value18: "15",
+        value19: "15",
+        value110: "15",
+      },{
+        key1: "故障部位少写或错写1条扣1分",
+        value11: "50",
+        value12: "15",
+        value13: "15",
+        value14: "15",
+        value15: "15",
+        value16: "15",
+        value17: "15",
+        value18: "15",
+        value19: "15",
+        value110: "15",
+      },{
+        key1: "排除方法少写或错写1条扣1分",
+        value11: "15",
+        value12: "15",
+        value13: "15",
+        value14: "15",
+        value15: "15",
+        value16: "15",
+        value17: "15",
+        value18: "15",
+        value19: "15",
+        value110: "15",
+      },
+      {
+        key1: "修复结论错扣2分",
+        value11: "50",
+        value12: "15",
+        value13: "15",
+        value14: "15",
+        value15: "15",
+        value16: "15",
+        value17: "15",
+        value18: "15",
+        value19: "15",
+        value110: "15",
+      },
+      {
+        key1: "三.维修时间(10分)",
+        value11: "50",
+        value12: "15",
+        value13: "15",
+        value14: "15",
+        value15: "15",
+        value16: "15",
+        value17: "15",
+        value18: "15",
+        value19: "15",
+        value110: "15",
+      },
+      {
+        key1: "按每超时1分钟扣分的比例扣分",
+        value11: "50",
+        value12: "15",
+        value13: "15",
+        value14: "15",
+        value15: "15",
+        value16: "15",
+        value17: "15",
+        value18: "15",
+        value19: "15",
+        value110: "15",
+      }],
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 用户表格数据
+      userList: null,
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 部门名称
+      deptName: undefined,
+      // 默认密码
+      initPassword: undefined,
+      // 日期范围
+      dateRange: [],
+      // 岗位选项
+      postOptions: [],
+      // 角色选项
+      roleOptions: [],
+      // 表单参数
+      form: {},
+      defaultProps: {
+        children: "children",
+        label: "label"
+      },
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        userName: undefined,
+        phonenumber: undefined,
+        status: undefined,
+      },
+      // 列信息
+      columns: [
+        { key: 0, label: `编号`, visible: true },
+        { key: 1, label: `班级名称`, visible: true },
+        { key: 2, label: `专业`, visible: true },
+        { key: 3, label: `备注`, visible: true },
+        { key: 4, label: `创建时间`, visible: true }
+      ],
+      tab_columns: [
+        { key: 0, label: `座号`, visible: true },
+        { key: 1, label: `模拟器状态`, visible: true },
+        { key: 2, label: `学员学号`, visible: true },
+        { key: 3, label: `学员姓名`, visible: true },
+        { key: 4, label: `考试状态`, visible: true },
+        { key: 5, label: `考试成绩`, visible: true },
+        { key: 6, label: `出题题目`, visible: true },
+        { key: 7, label: `故障现象`, visible: true },
+        { key: 8, label: `可能原因`, visible: true },
+        { key: 9, label: `故障部位`, visible: true },
+        { key: 10, label: `排除方法`, visible: true },
+        { key: 11, label: `修复结论`, visible: true },
+      ],
+    };
+  },
+  watch: {
+    // 根据名称筛选部门树
+    deptName(val) {
+      this.$refs.tree.filter(val);
+    }
+  },
+  created() {
+    this.getList();
+    // this.getDeptTree();
+    this.getConfigKey("sys.user.initPassword").then(response => {
+      this.initPassword = response.msg;
+    });
+  },
+  methods: {
+    // 刷新
+    refreshTable1(){
+      this.loading = true;
+      listUser(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
+          this.userList = response.rows;
+          this.total = response.total;
+          this.loading = false;
+        }
+      );
+    },
+
+    /** 查询用户列表 */
+    getList() {
+      this.loading = true;
+      listUser(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
+          this.userList = response.rows;
+          this.total = response.total;
+          this.loading = false;
+        }
+      );
+    },
+    // 筛选节点
+    filterNode(value, data) {
+      if (!value) return true;
+      return data.label.indexOf(value) !== -1;
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        userId: undefined,
+        userName: undefined,
+        nickName: undefined,
+        password: undefined,
+        phonenumber: undefined,
+        email: undefined,
+        sex: undefined,
+        status: "0",
+        remark: undefined,
+        postIds: [],
+        roleIds: []
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.dateRange = [];
+      this.resetForm("queryForm");
+      this.$refs.tree.setCurrentKey(null);
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.userId);
+      this.single = selection.length != 1;
+      this.multiple = !selection.length;
+    },
+    
+    /** 提交按钮 */
+    submitForm: function() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.userId != undefined) {
+            updateUser(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addUser(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+  }
+};
+</script>

+ 849 - 0
ruoyi-ui/src/views/peoples/score/index.vue

@@ -0,0 +1,849 @@
+<template>
+  <div class="app-container">
+    <!-- <div class="score_list">成绩列表</div> -->
+    <el-descriptions title="成绩列表" :column="3" ></el-descriptions>
+    <el-row :gutter="20">
+      <!--用户数据1-->
+      <el-col :xs="24">
+        <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="88px">
+          <el-form-item label="学员学号" prop="className">
+            <el-input
+              v-model="queryParams.className"
+              placeholder="请输入学员学号"
+              clearable
+              style="width: 150px"
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+
+          <el-form-item label="学员姓名" prop="className">
+            <el-input
+              v-model="queryParams.className"
+              placeholder="请输入学员姓名"
+              clearable
+              style="width: 150px"
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+
+          <el-form-item label="班级名称" prop="className">
+            <el-input
+              v-model="queryParams.className"
+              placeholder="请输入班级名称"
+              clearable
+              style="width: 200px"
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+          <el-form-item label="模拟器类型" prop="majorName">
+            <el-input
+              v-model="queryParams.userName"
+              placeholder="请输入模拟器类型"
+              clearable
+              style="width: 200px"
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+        
+          <el-form-item label="考试时间">
+            <el-date-picker
+              v-model="dateRange"
+              style="width: 240px"
+              value-format="yyyy-MM-dd"
+              type="daterange"
+              range-separator="-"
+              start-placeholder="开始日期"
+              end-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-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="['system:user: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="['system:user:edit']"
+            >修改</el-button>
+          </el-col>
+          <el-col :span="1.5">
+            <el-button
+              type="warning"
+              plain
+              icon="el-icon-download"
+              size="mini"
+              @click="handleExport"
+              v-hasPermi="['system:user:export']"
+            >导出</el-button>
+          </el-col>
+          <el-col :span="1.5">
+            <el-button
+              type="primary"
+              plain
+              icon="el-icon-view"
+              size="mini"
+              :disabled="single"
+              @click="handleView"
+              v-hasPermi="['system:user:view']"
+            >成绩详情</el-button>
+          </el-col>
+          <right-toolbar :showSearch.sync="showSearch" @queryTable="getList" :columns="columns"></right-toolbar>
+        </el-row>
+
+        <el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange">
+          <el-table-column type="selection" width="50" align="center" />
+          <el-table-column label="学员学号" align="center" key="userId" prop="userId" v-if="columns[0].visible" />
+          <el-table-column label="学员姓名" align="center" key="xuehao" prop="xuehao" v-if="columns[1].visible" />
+          <el-table-column label="模拟器类型" align="center" key="xingming" prop="xingming" v-if="columns[2].visible" />
+          <el-table-column label="区队/班级" align="center" key="className" prop="className" v-if="columns[3].visible" :show-overflow-tooltip="true" />
+          <el-table-column label="考试名称" align="center" key="majorName" prop="majorName" v-if="columns[4].visible" :show-overflow-tooltip="true" />
+          <el-table-column label="成绩" align="center" key="remark" prop="remark" v-if="columns[5].visible" :show-overflow-tooltip="true" />
+          <el-table-column label="考试开始时间" align="center" prop="createTime" v-if="columns[6].visible" width="160" />
+          <el-table-column label="考试结束时间" align="center" prop="createTime" v-if="columns[7].visible" width="160" />
+          <el-table-column label="学员交卷时间" align="center" prop="createTime" v-if="columns[9].visible" width="160">
+            <template slot-scope="scope">
+              <span>{{ parseTime(scope.row.createTime) }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column label="交卷超时间" align="center" prop="createTime" v-if="columns[8].visible" width="160" />
+
+          <el-table-column
+            label="操作"
+            align="center"
+            width="160"
+            class-name="small-padding fixed-width"
+          >
+            <template slot-scope="scope">
+              <el-button
+                size="mini"
+                type="text"
+                icon="el-icon-edit"
+                @click="handleUpdate(scope.row)"
+                v-hasPermi="['system:user:edit']"
+              >修改</el-button>
+              <!-- <el-button
+                size="mini"
+                type="text"
+                icon="el-icon-delete"
+                @click="handleDelete(scope.row)"
+                v-hasPermi="['system:user: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-col>
+    </el-row>
+
+    <!-- <div class="score_list">成绩分析</div> -->
+    <el-descriptions title="成绩分析" :column="3" border>
+      <el-descriptions-item label="平均成绩">88</el-descriptions-item>
+      <el-descriptions-item label="最高成绩">90</el-descriptions-item>
+      <el-descriptions-item label="最低成绩">30</el-descriptions-item>
+    </el-descriptions>
+
+    <!-- <div class="score_list">错误率统计</div> -->
+    <el-descriptions title="错误率统计" :column="3" border style="margin-top: 20px"></el-descriptions>
+    <el-table
+      :data="tableData" 
+      border
+      style="width: 100%;margin-top:1%">
+      <el-table-column 
+        prop="name"
+        label="模拟器A">
+      </el-table-column>
+      <el-table-column 
+        prop="name1"
+        label="">
+      </el-table-column>
+      <el-table-column 
+        prop="name2" 
+        label="模拟器B">
+      </el-table-column>
+      <el-table-column 
+        prop="name3" 
+        label="">
+      </el-table-column>
+
+      <el-table-column 
+        prop="name4"
+        label="模拟器C">
+      </el-table-column>
+      <el-table-column 
+        prop="name5" 
+        label="">
+      </el-table-column>
+    </el-table>
+
+    <!-- 修改对话框 -->
+    <el-dialog :title="title" :visible.sync="dialogVisible1" width="40%" append-to-body style="margin-top: -1%;" >
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-col :span="howWidth" v-for="(item, index) in tableArr" :key="index">
+          <div class="box">
+            <div class="content1">{{ item.key }}</div>
+            <div class="content2">{{ item.value1}}</div>
+            <!-- <div class="content2">{{ item.value2}}</div>
+            <div class="content2">{{ item.value3}}</div>
+            <div class="content2">{{ item.value4}}</div>
+            <div class="content2">{{ item.value5}}</div>
+            <div class="content2">{{ item.value6}}</div>
+            <div class="content2">{{ item.value7}}</div>
+            <div class="content2">{{ item.value8}}</div>
+            <div class="content2">{{ item.value9}}</div>
+            <div class="content2">{{ item.value10}}</div> -->
+          </div>
+        </el-col>
+        <el-table
+          :data="tableArr1"
+          border
+          style="width: 100%;margin-top:1%;text-align: center;">
+          <el-table-column
+            prop="biaozhun"
+            label="评分标准"
+            width="390px">
+          </el-table-column>
+          <el-table-column
+            prop="defen"
+            label="得分">
+            <template >
+              <input class="borderless-input_defen" name="duibie" style=""/>
+            </template>
+          </el-table-column>
+        </el-table>
+      </el-form>
+
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+      </div>
+    </el-dialog>
+
+    <!---成绩详情-->
+    <el-dialog :title="title" :visible.sync="dialogVisible2" style="margin-top: -3%;" width="55%" append-to-body>
+      <div style="font-size:22px;text-align: center;display:flex;margin-left: 20%;">
+        <template>
+          <div style="text-align:left;"> 20
+            <input class="borderless-input" name="duibie"/>
+          </div>
+          <div style="text-align:left;"> 年
+            <input class="borderless-input" name="nickname"/>
+          </div>
+          <div style="text-align:left;">装备维修评分标准
+          </div>
+        </template>
+      </div>
+      <el-descriptions :column="3" border style="margin-top: 1%">
+        <el-descriptions-item label="考号">88</el-descriptions-item>
+        <el-descriptions-item label="姓名">90</el-descriptions-item>
+        <el-descriptions-item label="单位">30</el-descriptions-item>
+        <el-descriptions-item label="规定作业时间">30</el-descriptions-item>
+        <el-descriptions-item label="实际作业时间">30</el-descriptions-item>
+        <el-descriptions-item label="成绩">30</el-descriptions-item>
+      </el-descriptions>
+      <el-table
+        :data="tableData2"
+        :span-method="arraySpanMethod"
+        border
+        style="width: 100%;margin-top:1%;">
+        <el-table-column
+          prop="id"
+          label="序号"
+          width="180">
+        </el-table-column>
+        <el-table-column
+          prop="name"
+          label="评分标准">
+        </el-table-column>
+        <el-table-column
+          prop="name2"
+          label="扣分">
+        </el-table-column>
+        <el-table-column
+          prop="name3"
+          label="备注">
+        </el-table-column>
+      </el-table>
+    </el-dialog>
+  </div>
+</template>
+<style>
+.custom-table .el-table__row {
+  padding: 5px 0; /* 根据需要调整padding的值来设置行间距 */
+}
+.borderless-input_defen {
+  border: none; /* 移除边框 */
+  outline: none; /* 移除点击输入框时浏览器自带的轮廓线 */
+}
+
+.borderless-input {
+  border: none; /* 移除边框 */
+  border-bottom: 1px solid #dfe6ec; /* 下划线样式 */
+  outline: none; /* 移除点击输入框时浏览器自带的轮廓线 */
+  padding-bottom: 5px; /* 添加一些填充以便于点击区域 */
+}
+.score_list{
+  font-size: 16px;
+  color: #606266;
+  margin: 5px;
+}
+.el-form-item__label{
+  width: 80px !important;
+}
+.box {
+  width: 100%;
+  height: 40px;
+  display: flex;
+  border-left: 1px solid #e9e9e9;
+  border-top: 1px solid #e9e9e9;
+  }
+.content1 {
+  width: 70%;
+  height: 40px;
+  line-height: 40px;
+  text-align: center;
+  background-color: #fafafa;
+  border-right: 1px solid #e9e9e9;
+  border-bottom: 1px solid #e9e9e9;
+  color: #333;
+  font-size: 14px;
+}
+.content2 {
+  width: 60%;
+  height: 40px;
+  line-height: 40px;
+  text-align: center;
+  background-color: #fff;
+  border-right: 1px solid #e9e9e9;
+  border-bottom: 1px solid #e9e9e9;
+  /* color: #b0b0b2; */
+  font-size: 14px;
+}
+
+</style>
+<script>
+import { listUser, getUser, delUser, addUser, updateUser, resetUserPwd, changeUserStatus, deptTreeSelect } from "@/api/system/user";
+import { getToken } from "@/utils/auth";
+import Treeselect from "@riophae/vue-treeselect";
+import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+
+export default {
+  name: "User",
+  dicts: ['sys_normal_disable', 'sys_user_sex'],
+  components: { Treeselect },
+  data() {
+    return {
+      tableArr: [
+          {
+            key: "座号",
+            value1: "坐席1",
+          },
+          {
+            key: "姓名",
+            value1: "张",
+          },
+          {
+            key: "学号",
+            value1: "2023004",
+          },
+          {
+            key: "班级",
+            value1: "二班",
+          },
+          {
+            key: "考试名称",
+            value1: "模拟考试",
+          },
+          // {
+          //   key: "一.排除故障(75分)",
+          //   value1: "50",
+          // },
+          // {
+          //   key: "故障一未排除扣25分",
+          //   value1: "50",
+          // },
+          // {
+          //   key: "故障二未排除扣25分",
+          //   value1: "50",
+          // },
+          // {
+          //   key: "故障三未排除扣25分",
+          //   value1: "50",
+          // },
+        ],
+        tableArr1: [{
+          biaozhun: '一.排除故障(75分)',
+          defen: '',
+        }, {
+          biaozhun: '故障一未排除扣25分',
+          defen: '',
+        },{
+          biaozhun: '故障二未排除扣25分',
+          defen: '',
+        },{
+          biaozhun: '故障三未排除扣25分',
+          defen: '',
+        },
+        {
+          biaozhun: '二.维修报告表(15分)',
+          defen: '',
+        }, {
+          biaozhun: '故障现象少写或错写1条扣1分',
+          defen: '',
+        },{
+          biaozhun: '可能原因少写或错写1条扣1分',
+          defen: '',
+        },{
+          biaozhun: '故障部位少写或错写1条扣1分',
+          defen: '',
+        },{
+          biaozhun: '排除方法少写或错写1条扣1分',
+          defen: '',
+        },{
+          biaozhun: '修复结论错扣2分',
+          defen: '',
+        },{
+          biaozhun: '三.维修时间(10分)',
+          defen: '',
+        },{
+          biaozhun: '按每超过1分钟扣1分的比例扣分',
+          defen: '',
+        }
+        ],
+        tableData: [{
+          name:'故障名称',
+          name1: '错误率',
+          name2: '故障名称',
+          name3: '错误率',
+          name4: '故障名称',
+          name5: '错误率',
+        },{
+          id:1,
+          name: '80%',
+          name2: '1',
+          name3: '70%',
+          name4: '1',
+          name5: '85%'
+        }, 
+        {
+          id:2,
+          name: '70%',
+          name2: '2',
+          name3: '65%',
+          name4: '2',
+          name5: '70%%'
+        }, {
+          id:3,
+          name: '60%',
+          name2: '2',
+          name3: '75%',
+          name4: '3',
+          name5: '79%',
+        }
+      ],
+      tableData2: [{
+          id:'一.故障排除(75分)',
+        },{
+          id:1,
+          name: '故障一未排除扣25分',
+          name2: '',
+          name3: '排除',
+        }, {
+          id:2,
+          name: '故障二未排除扣25分',
+          name2: '',
+          name3: '未排除',
+        }, {
+          id:3,
+          name: '故障三未排除扣25分',
+          name2: '',
+          name3: '排除',
+        }, {
+          id:'二.维修报告表(15分)',
+        },{
+          id:1,
+          name: '故障现象少写或错写1条扣1分',
+          name2: '',
+          name3: '正确',
+        }, {
+          id:2,
+          name: '可能原因少写或错写1条扣1分',
+          name2: '',
+          name3: '错误',
+        }, {
+          id:3,
+          name: '故障部位少写或错写1条扣1分',
+          name2: '',
+          name3: '正确',
+        }, {
+          id:4,
+          name: '排除方法少写或错写1条扣1分',
+          name2: '',
+          name3: '正确',
+        }, {
+          id:5,
+          name: '修复结论错扣2分',
+          name2: '',
+          name3: '正确',
+        }, {
+          id:'三.维修时间(10分)',
+          name: '',
+          name2: '',
+          name3: '',
+        }, {
+          id:'按没超过1分钟扣1分的比例扣分',
+          name: '',
+          name2: '',
+          name3: '',
+        }, {
+          id:'扣分小计',
+          name: '',
+          name2: '超时:',
+          name3: '',
+        }, {
+          id:'五.成绩',
+          name: '',
+          name2: '-50',
+          name3: '',
+        }, {
+          id:'说明',
+          name: '',
+          name2: '',
+          name3: '',
+        }],
+
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 用户表格数据
+      userList: null,
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      dialogVisible1:false,
+      dialogVisible2:false,
+      // 部门名称
+      deptName: undefined,
+      // 默认密码
+      initPassword: undefined,
+      // 日期范围
+      dateRange: [],
+      // 岗位选项
+      postOptions: [],
+      // 角色选项
+      roleOptions: [],
+      // 表单参数
+      form: {},
+      defaultProps: {
+        children: "children",
+        label: "label"
+      },
+      // 用户导入参数
+      upload: {
+        // 是否显示弹出层(用户导入)
+        open: false,
+        // 弹出层标题(用户导入)
+        title: "",
+        // 是否禁用上传
+        isUploading: false,
+        // 是否更新已经存在的用户数据
+        updateSupport: 0,
+        // 设置上传的请求头部
+        headers: { Authorization: "Bearer " + getToken() },
+        // 上传的地址
+        url: process.env.VUE_APP_BASE_API + "/system/user/importData"
+      },
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        userName: undefined,
+        phonenumber: undefined,
+        status: undefined,
+        deptId: undefined
+      },
+      // 列信息
+      columns: [
+        { key: 0, label: `学员学号`, visible: true },
+        { key: 1, label: `学员姓名`, visible: true },
+        { key: 2, label: `模拟器类型`, visible: true },
+        { key: 3, label: `区队/班级`, visible: true },
+        { key: 4, label: `考试名称`, visible: true },
+        { key: 5, label: `成绩`, visible: true },
+        { key: 6, label: `考试开始时间`, visible: true },
+        { key: 7, label: `考试结束时间`, visible: true },
+        { key: 8, label: `学员交卷时间`, visible: true },
+        { key: 9, label: `交卷超时时间`, visible: true }
+      ],
+      // 表单校验
+      rules: {
+        userName: [
+          { required: true, message: "用户名称不能为空", trigger: "blur" },
+          { min: 2, max: 20, message: '用户名称长度必须介于 2 和 20 之间', trigger: 'blur' }
+        ],
+        nickName: [
+          { required: true, message: "用户昵称不能为空", trigger: "blur" }
+        ],
+        password: [
+          { required: true, message: "用户密码不能为空", trigger: "blur" },
+          { min: 5, max: 20, message: '用户密码长度必须介于 5 和 20 之间', trigger: 'blur' },
+          { pattern: /^[^<>"'|\\]+$/, message: "不能包含非法字符:< > \" ' \\\ |", trigger: "blur" }
+        ],
+        email: [
+          {
+            type: "email",
+            message: "请输入正确的邮箱地址",
+            trigger: ["blur", "change"]
+          }
+        ],
+        phonenumber: [
+          {
+            pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
+            message: "请输入正确的手机号码",
+            trigger: "blur"
+          }
+        ]
+      }
+    };
+  },
+  watch: {
+    // 根据名称筛选部门树
+    deptName(val) {
+      this.$refs.tree.filter(val);
+    }
+  },
+  created() {
+    this.getList();
+    // this.getDeptTree();
+    this.getConfigKey("sys.user.initPassword").then(response => {
+      this.initPassword = response.msg;
+    });
+  },
+  methods: {
+    //首页合并
+    arraySpanMethod({ row, column, rowIndex, columnIndex }) {
+      if (rowIndex === 0 || rowIndex === 4 || rowIndex === 10) {
+        if (columnIndex === 0) {
+          return [1, 4];
+        } else {
+          return [0, 0];
+        }
+      }
+      //按每超时1分钟扣分的比例扣分
+      if (rowIndex>10) {
+        if (columnIndex === 0) {
+          return [1, 2];
+        }else if(columnIndex ===2){
+          return [1, 3];
+        } else {
+          return [0, 0];
+        }
+      }
+    },
+
+
+    /** 查询用户列表 */
+    getList() {
+      this.loading = true;
+      listUser(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
+          this.userList = response.rows;
+          this.total = response.total;
+          this.loading = false;
+        }
+      );
+    },
+
+
+    // 筛选节点
+    filterNode(value, data) {
+      if (!value) return true;
+      return data.label.indexOf(value) !== -1;
+    },
+    // 用户状态修改
+    handleStatusChange(row) {
+      let text = row.status === "0" ? "启用" : "停用";
+      this.$modal.confirm('确认要"' + text + '""' + row.userName + '"用户吗?').then(function() {
+        return changeUserStatus(row.userId, row.status);
+      }).then(() => {
+        this.$modal.msgSuccess(text + "成功");
+      }).catch(function() {
+        row.status = row.status === "0" ? "1" : "0";
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        userId: undefined,
+        deptId: undefined,
+        userName: undefined,
+        nickName: undefined,
+        password: undefined,
+        phonenumber: undefined,
+        email: undefined,
+        sex: undefined,
+        status: "0",
+        remark: undefined,
+        postIds: [],
+        roleIds: []
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.dateRange = [];
+      this.resetForm("queryForm");
+      this.queryParams.deptId = undefined;
+      this.$refs.tree.setCurrentKey(null);
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.userId);
+      this.single = selection.length != 1;
+      this.multiple = !selection.length;
+    },
+    // 更多操作触发
+    handleCommand(command, row) {
+      switch (command) {
+        case "handleResetPwd":
+          this.handleResetPwd(row);
+          break;
+        case "handleAuthRole":
+          this.handleAuthRole(row);
+          break;
+        default:
+          break;
+      }
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const userId = row.userId || this.ids;
+      getUser(userId).then(response => {
+        this.form = response.data;
+        this.postOptions = response.posts;
+        this.roleOptions = response.roles;
+        this.$set(this.form, "postIds", response.postIds);
+        this.$set(this.form, "roleIds", response.roleIds);
+        this.dialogVisible1 = true;
+        this.title = "修改成绩";
+        this.form.password = "";
+      });
+    },
+     /** 成绩详情按钮操作 */
+     handleView(row) {
+      this.reset();
+      const userId = row.userId || this.ids;
+      getUser(userId).then(response => {
+        this.form = response.data;
+        this.dialogVisible2 = true;
+        this.title = "";
+      });
+    },
+    /** 提交按钮 */
+    submitForm: function() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.userId != undefined) {
+            updateUser(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addUser(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const userIds = row.userId || this.ids;
+      this.$modal.confirm('是否确认删除用户编号为"' + userIds + '"的数据项?').then(function() {
+        return delUser(userIds);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('system/user/export', {
+        ...this.queryParams
+      }, `user_${new Date().getTime()}.xlsx`)
+    },
+    /** 导入按钮操作 */
+    handleImport() {
+      this.upload.title = "用户导入";
+      this.upload.open = true;
+    },
+    /** 下载模板操作 */
+    importTemplate() {
+      this.download('system/user/importTemplate', {
+      }, `user_template_${new Date().getTime()}.xlsx`)
+    },
+    // 文件上传中处理
+    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();
+    },
+    // 提交上传文件
+    submitFileForm() {
+      this.$refs.upload.submit();
+    }
+  }
+};
+</script>

+ 508 - 0
ruoyi-ui/src/views/peoples/student/index.vue

@@ -0,0 +1,508 @@
+<template>
+  <div class="app-container">
+    <el-row :gutter="20">
+      <!--用户数据1-->
+      <el-col :xs="24">
+        <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="88px">
+          <el-form-item label="学号" prop="className">
+            <el-input
+              v-model="queryParams.className"
+              placeholder="请输入学号"
+              clearable
+              style="width: 150px"
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+
+          <el-form-item label="姓名" prop="className">
+            <el-input
+              v-model="queryParams.className"
+              placeholder="请输入姓名"
+              clearable
+              style="width: 150px"
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+
+          <el-form-item label="班级名称" prop="className">
+            <el-input
+              v-model="queryParams.className"
+              placeholder="请输入班级名称"
+              clearable
+              style="width: 200px"
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+          <el-form-item label="专业名称" prop="majorName">
+            <el-input
+              v-model="queryParams.userName"
+              placeholder="请输入专业名称"
+              clearable
+              style="width: 200px"
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+        
+          <el-form-item label="创建时间">
+            <el-date-picker
+              v-model="dateRange"
+              style="width: 240px"
+              value-format="yyyy-MM-dd"
+              type="daterange"
+              range-separator="-"
+              start-placeholder="开始日期"
+              end-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-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="['system:user: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="['system:user: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="['system:user:remove']"
+            >删除</el-button>
+          </el-col>
+          <right-toolbar :showSearch.sync="showSearch" @queryTable="getList" :columns="columns"></right-toolbar>
+        </el-row>
+
+        <el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange">
+          <el-table-column type="selection" width="50" align="center" />
+          <el-table-column label="编号" align="center" key="userId" prop="userId" v-if="columns[0].visible" />
+          <el-table-column label="学号" align="center" key="xuehao" prop="xuehao" v-if="columns[1].visible" />
+          <el-table-column label="姓名" align="center" key="xingming" prop="xingming" v-if="columns[2].visible" />
+          <el-table-column label="区队/班级" align="center" key="className" prop="className" v-if="columns[3].visible" :show-overflow-tooltip="true" />
+          <el-table-column label="专业名称" align="center" key="majorName" prop="majorName" v-if="columns[4].visible" :show-overflow-tooltip="true" />
+          <el-table-column label="备注" align="center" key="remark" prop="remark" v-if="columns[5].visible" :show-overflow-tooltip="true" />
+          <el-table-column label="创建时间" align="center" prop="createTime" v-if="columns[6].visible" width="160">
+            <template slot-scope="scope">
+              <span>{{ parseTime(scope.row.createTime) }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column
+            label="操作"
+            align="center"
+            width="160"
+            class-name="small-padding fixed-width"
+          >
+            <template slot-scope="scope">
+              <el-button
+                size="mini"
+                type="text"
+                icon="el-icon-edit"
+                @click="handleUpdate(scope.row)"
+                v-hasPermi="['system:user:edit']"
+              >修改</el-button>
+              <el-button
+                size="mini"
+                type="text"
+                icon="el-icon-delete"
+                @click="handleDelete(scope.row)"
+                v-hasPermi="['system:user:remove']"
+              >删除</el-button>
+              <el-dropdown size="mini" @command="(command) => handleCommand(command, scope.row)" v-hasPermi="['simulator:user:resetPwd', 'simulator:user:edit']">
+                <el-button size="mini" type="text" icon="el-icon-d-arrow-right">更多</el-button>
+                <el-dropdown-menu slot="dropdown">
+                  <el-dropdown-item command="handleResetPwd" icon="el-icon-key"
+                    v-hasPermi="['simulator:user:resetPwd']">重置密码</el-dropdown-item>
+                </el-dropdown-menu>
+              </el-dropdown>
+            </template>
+          </el-table-column>
+        </el-table>
+
+        <pagination
+          v-show="total>0"
+          :total="total"
+          :page.sync="queryParams.pageNum"
+          :limit.sync="queryParams.pageSize"
+          @pagination="getList"
+        />
+      </el-col>
+    </el-row>
+
+    <!-- 添加或修改用户配置对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="600px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="班级名称" prop="nickName">
+              <el-input v-model="form.nickName" placeholder="请输入班级名称" maxlength="30" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="专业" prop="nickName">
+              <el-input v-model="form.nickName" placeholder="请输入专业" maxlength="30" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="备注">
+              <el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </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 { listUser, getUser, delUser, addUser, updateUser, resetUserPwd, changeUserStatus, deptTreeSelect } from "@/api/system/user";
+import { getToken } from "@/utils/auth";
+import Treeselect from "@riophae/vue-treeselect";
+import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+
+export default {
+  name: "User",
+  dicts: ['sys_normal_disable', 'sys_user_sex'],
+  components: { Treeselect },
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 用户表格数据
+      userList: null,
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 部门名称
+      deptName: undefined,
+      // 默认密码
+      initPassword: undefined,
+      // 日期范围
+      dateRange: [],
+      // 岗位选项
+      postOptions: [],
+      // 角色选项
+      roleOptions: [],
+      // 表单参数
+      form: {},
+      defaultProps: {
+        children: "children",
+        label: "label"
+      },
+      // 用户导入参数
+      upload: {
+        // 是否显示弹出层(用户导入)
+        open: false,
+        // 弹出层标题(用户导入)
+        title: "",
+        // 是否禁用上传
+        isUploading: false,
+        // 是否更新已经存在的用户数据
+        updateSupport: 0,
+        // 设置上传的请求头部
+        headers: { Authorization: "Bearer " + getToken() },
+        // 上传的地址
+        url: process.env.VUE_APP_BASE_API + "/system/user/importData"
+      },
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        userName: undefined,
+        phonenumber: undefined,
+        status: undefined,
+        deptId: undefined
+      },
+      // 列信息
+      columns: [
+        { key: 0, label: `编号`, visible: true },
+        { key: 1, label: `编号`, visible: true },
+        { key: 2, label: `姓名`, visible: true },
+        { key: 3, label: `班级名称`, visible: true },
+        { key: 4, label: `专业`, visible: true },
+        { key: 5, label: `备注`, visible: true },
+        { key: 6, label: `创建时间`, visible: true }
+      ],
+      // 表单校验
+      rules: {
+        userName: [
+          { required: true, message: "用户名称不能为空", trigger: "blur" },
+          { min: 2, max: 20, message: '用户名称长度必须介于 2 和 20 之间', trigger: 'blur' }
+        ],
+        nickName: [
+          { required: true, message: "用户昵称不能为空", trigger: "blur" }
+        ],
+        password: [
+          { required: true, message: "用户密码不能为空", trigger: "blur" },
+          { min: 5, max: 20, message: '用户密码长度必须介于 5 和 20 之间', trigger: 'blur' },
+          { pattern: /^[^<>"'|\\]+$/, message: "不能包含非法字符:< > \" ' \\\ |", trigger: "blur" }
+        ],
+        email: [
+          {
+            type: "email",
+            message: "请输入正确的邮箱地址",
+            trigger: ["blur", "change"]
+          }
+        ],
+        phonenumber: [
+          {
+            pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
+            message: "请输入正确的手机号码",
+            trigger: "blur"
+          }
+        ]
+      }
+    };
+  },
+  watch: {
+    // 根据名称筛选部门树
+    deptName(val) {
+      this.$refs.tree.filter(val);
+    }
+  },
+  created() {
+    this.getList();
+    // this.getDeptTree();
+    this.getConfigKey("sys.user.initPassword").then(response => {
+      this.initPassword = response.msg;
+    });
+  },
+  methods: {
+    /** 查询用户列表 */
+    getList() {
+      this.loading = true;
+      listUser(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
+          this.userList = response.rows;
+          this.total = response.total;
+          this.loading = false;
+        }
+      );
+    },
+    // 筛选节点
+    filterNode(value, data) {
+      if (!value) return true;
+      return data.label.indexOf(value) !== -1;
+    },
+    // 用户状态修改
+    handleStatusChange(row) {
+      let text = row.status === "0" ? "启用" : "停用";
+      this.$modal.confirm('确认要"' + text + '""' + row.userName + '"用户吗?').then(function() {
+        return changeUserStatus(row.userId, row.status);
+      }).then(() => {
+        this.$modal.msgSuccess(text + "成功");
+      }).catch(function() {
+        row.status = row.status === "0" ? "1" : "0";
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        userId: undefined,
+        deptId: undefined,
+        userName: undefined,
+        nickName: undefined,
+        password: undefined,
+        phonenumber: undefined,
+        email: undefined,
+        sex: undefined,
+        status: "0",
+        remark: undefined,
+        postIds: [],
+        roleIds: []
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.dateRange = [];
+      this.resetForm("queryForm");
+      this.queryParams.deptId = undefined;
+      this.$refs.tree.setCurrentKey(null);
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.userId);
+      this.single = selection.length != 1;
+      this.multiple = !selection.length;
+    },
+    // 更多操作触发
+    handleCommand(command, row) {
+      switch (command) {
+        case "handleResetPwd":
+          this.handleResetPwd(row);
+          break;
+        case "handleAuthRole":
+          this.handleAuthRole(row);
+          break;
+        default:
+          break;
+      }
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      getUser().then(response => {
+        this.postOptions = response.posts;
+        this.roleOptions = response.roles;
+        this.open = true;
+        this.title = "添加用户";
+        this.form.password = this.initPassword;
+      });
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const userId = row.userId || this.ids;
+      getUser(userId).then(response => {
+        this.form = response.data;
+        this.postOptions = response.posts;
+        this.roleOptions = response.roles;
+        this.$set(this.form, "postIds", response.postIds);
+        this.$set(this.form, "roleIds", response.roleIds);
+        this.open = true;
+        this.title = "修改用户";
+        this.form.password = "";
+      });
+    },
+    /** 重置密码按钮操作 */
+    handleResetPwd(row) {
+      this.$prompt('请输入"' + row.userName + '"的新密码', "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        closeOnClickModal: false,
+        inputPattern: /^.{5,20}$/,
+        inputErrorMessage: "用户密码长度必须介于 5 和 20 之间",
+        inputValidator: (value) => {
+          if (/<|>|"|'|\||\\/.test(value)) {
+            return "不能包含非法字符:< > \" ' \\\ |"
+          }
+        },
+      }).then(({ value }) => {
+          resetUserPwd(row.userId, value).then(response => {
+            this.$modal.msgSuccess("修改成功,新密码是:" + value);
+          });
+        }).catch(() => {});
+    },
+    /** 分配角色操作 */
+    handleAuthRole: function(row) {
+      const userId = row.userId;
+      this.$router.push("/system/user-auth/role/" + userId);
+    },
+    /** 提交按钮 */
+    submitForm: function() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.userId != undefined) {
+            updateUser(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addUser(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const userIds = row.userId || this.ids;
+      this.$modal.confirm('是否确认删除用户编号为"' + userIds + '"的数据项?').then(function() {
+        return delUser(userIds);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('system/user/export', {
+        ...this.queryParams
+      }, `user_${new Date().getTime()}.xlsx`)
+    },
+    /** 导入按钮操作 */
+    handleImport() {
+      this.upload.title = "用户导入";
+      this.upload.open = true;
+    },
+    /** 下载模板操作 */
+    importTemplate() {
+      this.download('system/user/importTemplate', {
+      }, `user_template_${new Date().getTime()}.xlsx`)
+    },
+    // 文件上传中处理
+    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();
+    },
+    // 提交上传文件
+    submitFileForm() {
+      this.$refs.upload.submit();
+    }
+  }
+};
+</script>

+ 3132 - 0
ruoyi-ui/src/views/peoples/task/index.vue

@@ -0,0 +1,3132 @@
+<template>
+  <div class="app-container">
+    <el-row>
+      <!--用户数据1-->
+        <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+          <el-form-item label="任务名称" prop="userName">
+            <el-input
+              v-model="queryParams.userName"
+              placeholder="请输入任务名称"
+              clearable
+              style="width: 200px"
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+          <el-form-item label="型号" prop="userName">
+            <el-input
+              v-model="queryParams.userName"
+              placeholder="请输入模拟器型号"
+              clearable
+              style="width: 200px"
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+          <el-form-item label="创建时间">
+            <el-date-picker
+              v-model="dateRange"
+              style="width: 240px"
+              value-format="yyyy-MM-dd"
+              type="daterange"
+              range-separator="-"
+              start-placeholder="开始日期"
+              end-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-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-view"
+              size="mini"
+              :disabled="single"
+              @click="handleView"
+            >详情</el-button>
+          </el-col>
+          <!-- <el-col :span="1.5">
+            <el-button
+              type="primary"
+              plain
+              size="mini"
+              :disabled="single"
+              @click="handleInspect"
+              v-hasPermi="['simulator:task:inspect']"
+            >故障设置自检</el-button>
+          </el-col>
+          <el-col :span="1.5">
+            <el-button
+              type="warning"
+              plain
+              size="mini"
+              :disabled="multiple"
+              @click="handleIssued"
+              v-hasPermi="['simulator:task:issued']"
+            >训练任务下发</el-button>
+          </el-col> -->
+          <right-toolbar :showSearch.sync="showSearch" @queryTable="getList" :columns="columns"></right-toolbar>
+        </el-row>
+
+        <el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange">
+          <el-table-column type="selection" width="50" align="center" />
+          <el-table-column label="编号" align="center" key="userId" prop="userId" v-if="columns[0].visible" />
+          <el-table-column label="任务名称" align="center" key="nickName" prop="nickName" v-if="columns[1].visible" :show-overflow-tooltip="true" />
+          <el-table-column label="模拟器型号" align="center" key="userName" prop="userName" v-if="columns[2].visible" :show-overflow-tooltip="true" />
+          <el-table-column label="故障现象数量" align="center" key="xianxiang" prop="xianxiang" v-if="columns[3].visible" :show-overflow-tooltip="true" />
+          <el-table-column label="故障部位数量" align="center" key="buwei" prop="buwei" v-if="columns[4].visible" :show-overflow-tooltip="true" />
+          <el-table-column label="创建者" align="center" key="creater" prop="creater" v-if="columns[5].visible" :show-overflow-tooltip="true" />
+          <el-table-column label="备注" align="center" key="remark" prop="remark" v-if="columns[6].visible" :show-overflow-tooltip="true" />
+          <el-table-column label="创建时间" align="center" prop="createTime" v-if="columns[7].visible" width="160">
+            <template slot-scope="scope">
+              <span>{{ parseTime(scope.row.createTime) }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column
+            label="操作"
+            align="center"
+            width="160"
+            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"
+        />
+    </el-row>
+
+    <!-- 添加或修改用户配置对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="70%" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="型号">
+              <!-- v-model="form.monitype" -->
+              <el-select v-model="selectedEquip"  placeholder="请选择模拟器型号">
+                <el-option
+                  value="请选择"
+                >请选择</el-option>
+                <el-option
+                  v-for="dict in dict.type.sim_equip_type"
+                  :key="dict.value"
+                  :label="dict.label"
+                  :value="dict.value"
+                ></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="任务名称" prop="userName">
+              <el-input  placeholder="请输入任务名称" maxlength="30" />
+            </el-form-item>
+          </el-col>
+          <div style="text-align: right;">
+            <el-button @click="toggleSelection(tableData)">选择全部</el-button>
+            <el-button @click="toggleSelection()">取消选择</el-button>
+          </div>
+        </el-row>
+        
+       
+        <el-table 
+          :data="tableData" border ref="multipleTable" @selection-change="handleSelectionRow" 
+          :span-method="objectSpanMethod" 
+          style="width:100%;text-align:center;margin-left:10px; margin-top:10px">
+          <el-table-column
+            prop="xinghao"
+            label="型号">
+          </el-table-column>
+          <el-table-column
+            prop="xianxiang"
+            label="故障现象">
+          </el-table-column>
+          <el-table-column
+            prop="name"
+            label="故障部位">
+          </el-table-column>
+          <el-table-column
+          type="selection" prop="ids"
+            label="ID"
+          width="55"></el-table-column>
+        </el-table>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+
+    <!-- 任务详情配置对话框 -->
+    <el-dialog :title="title" :visible.sync="openview" width="70%" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="型号">
+              <!-- v-model="form.monitype" -->
+              <el-select v-model="selectedEquip"  placeholder="请选择模拟器型号">
+                <el-option
+                  value="请选择"
+                >请选择</el-option>
+                <el-option
+                  v-for="dict in dict.type.sim_equip_type"
+                  :key="dict.value"
+                  :label="dict.label"
+                  :value="dict.value"
+                ></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="任务名称" prop="userName">
+              <el-input  placeholder="请输入任务名称" maxlength="30" />
+            </el-form-item>
+          </el-col>
+          <div style="text-align: right;">
+            <el-button @click="toggleSelection(tableData)">选择全部</el-button>
+            <el-button @click="toggleSelection()">取消选择</el-button>
+          </div>
+        </el-row>
+        
+       
+        <el-table 
+          :data="tableData" border ref="multipleTable" @selection-change="handleSelectionRow" 
+          :span-method="objectSpanMethod" 
+          style="width:100%;text-align:center;margin-left:10px; margin-top:10px">
+          <el-table-column
+            prop="xinghao"
+            label="型号">
+          </el-table-column>
+          <el-table-column
+            prop="xianxiang"
+            label="故障现象">
+          </el-table-column>
+          <el-table-column
+            prop="name"
+            label="故障部位">
+          </el-table-column>
+          <el-table-column
+          type="selection" prop="ids"
+            label="ID"
+          width="55"></el-table-column>
+        </el-table>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+
+
+
+    <!-- 故障设置自检 -->
+    <el-dialog :title="title" :visible.sync="zijianopen" width="88%" append-to-body>
+       <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="型号">
+              <el-select v-model="selectedZjEquip" placeholder="请选择模拟器型号">
+                <el-option
+                  value="请选择"
+                >请选择</el-option>
+                <el-option
+                  v-for="dict in dict.type.sim_equip_type"
+                  :key="dict.value"
+                  :label="dict.label"
+                  :value="dict.value"
+                ></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-button
+              type="primary"
+              plain
+              size="mini"
+              @click="clearFaultChange(row,0,'all')"
+            >清除所有模拟器故障</el-button>
+          </el-col>
+        </el-row>
+        <el-table
+          :data="tableData1"
+          :span-method="objectSpanMethod1"
+          border
+          style="width:100%;text-align:center;margin-left:10px;" @selection-change="handleSelectionChange">
+          <el-table-column
+            prop="gzxx"
+            label="故障现象">
+          </el-table-column>
+          <el-table-column label-width="100px"
+            prop="buwei"
+            label="故障部位">
+          </el-table-column>
+          <el-table-column
+            prop="value1"
+            label="1号坐席">
+            <template slot-scope="scope">
+              <span class="text-navy" v-if="scope.row.value1==1">有</span>
+              <span class="text-danger" v-if="scope.row.value1==2">无</span>
+              <el-button
+                type="primary" v-if="scope.row.value1==1"
+                plain
+                size="mini"
+                style="margin-left:10px;"
+                @click="clearFaultChange(scope.row,1,'name1')"
+              >清除</el-button>
+            </template>
+          </el-table-column>
+
+          <el-table-column
+            prop="value2"
+            label="2号坐席">
+            <template slot-scope="scope">
+              <span class="text-navy" v-if="scope.row.value2==1">有</span>
+              <span class="text-danger" v-if="scope.row.value2==2">无</span>
+              <el-button
+                type="primary" v-if="scope.row.value2==1"
+                plain
+                size="mini"
+                style="margin-left:10px;"
+                @click="clearFaultChange(scope.row,2,'name2')"
+              >清除</el-button>
+            </template>
+          </el-table-column>
+          <el-table-column
+            prop="value3"
+            label="3号坐席">
+            <template slot-scope="scope">
+              <span class="text-navy" v-if="scope.row.value3==1">有</span>
+              <span class="text-danger" v-if="scope.row.value3==2">无</span>
+              <el-button
+                type="primary" v-if="scope.row.value3==1"
+                plain
+                size="mini"
+                style="margin-left:10px;"
+                @click="clearFaultChange(scope.row,3,'name3')"
+              >清除</el-button>
+            </template>
+          </el-table-column>
+          <el-table-column
+            prop="value4"
+            label="4号坐席">
+            <template slot-scope="scope">
+              <span class="text-navy" v-if="scope.row.value4==1">有</span>
+              <span class="text-danger" v-if="scope.row.value4==2">无</span>
+              <el-button
+                type="primary" v-if="scope.row.value4==1"
+                plain
+                size="mini"
+                style="margin-left:10px;"
+                @click="clearFaultChange(scope.row,4,'name4')"
+              >清除</el-button>
+            </template>
+          </el-table-column>
+          <el-table-column
+            prop="value5"
+            label="5号坐席">
+            <template slot-scope="scope">
+              <span class="text-navy" v-if="scope.row.value5==1">有</span>
+              <span class="text-danger" v-if="scope.row.value5==2">无</span>
+              <el-button
+                type="primary" v-if="scope.row.value5==1"
+                plain
+                size="mini"
+                style="margin-left:10px;"
+                @click="clearFaultChange(scope.row,5,'name5')"
+              >清除</el-button>
+            </template>
+          </el-table-column>
+          <el-table-column
+            prop="value6"
+            label="6号坐席">
+            <template slot-scope="scope">
+              <span class="text-navy" v-if="scope.row.value6==1">有</span>
+              <span class="text-danger" v-if="scope.row.value6==2">无</span>
+              <el-button
+                type="primary" v-if="scope.row.value6==1"
+                plain
+                size="mini"
+                style="margin-left:10px;"
+                @click="clearFaultChange(scope.row,6,'name6')"
+              >清除</el-button>
+            </template>
+          </el-table-column>
+          <el-table-column
+            prop="value7"
+            label="7号坐席">
+            <template slot-scope="scope">
+              <span class="text-navy" v-if="scope.row.value7==1">有</span>
+              <span class="text-danger" v-if="scope.row.value7==2">无</span>
+              <el-button
+                type="primary" v-if="scope.row.value7==1"
+                plain
+                size="mini"
+                style="margin-left:10px;"
+                @click="clearFaultChange(scope.row,7,'name7')"
+              >清除</el-button>
+            </template>
+          </el-table-column>
+          <el-table-column
+            prop="value8"
+            label="8号坐席">
+            <template slot-scope="scope">
+              <span class="text-navy" v-if="scope.row.value8==1">有</span>
+              <span class="text-danger" v-if="scope.row.value8==2">无</span>
+              <el-button
+                type="primary" v-if="scope.row.value8==1"
+                plain
+                size="mini"
+                style="margin-left:10px;"
+                @click="clearFaultChange(scope.row,8,'name8')"
+              >清除</el-button>
+            </template>
+          </el-table-column>
+          <el-table-column
+            prop="value9"
+            label="9号坐席">
+            <template slot-scope="scope">
+              <span class="text-navy" v-if="scope.row.value9==1">有</span>
+              <span class="text-danger" v-if="scope.row.value9==2">无</span>
+              <el-button
+                type="primary" v-if="scope.row.value9==1"
+                plain
+                size="mini"
+                style="margin-left:10px;"
+                @click="clearFaultChange(scope.row,9,'name9')"
+              >清除</el-button>
+            </template>
+          </el-table-column>
+          <el-table-column
+            prop="value10"
+            label="10号坐席">
+            <template slot-scope="scope">
+              <span class="text-navy" v-if="scope.row.value10==1">有</span>
+              <span class="text-danger" v-if="scope.row.value10==2">无</span>
+              <el-button
+                type="primary" v-if="scope.row.value10==1"
+                plain
+                size="mini"
+                style="margin-left:10px;"
+                @click="clearFaultChange(scope.row,10,'name10')"
+              >清除</el-button>
+            </template>
+          </el-table-column>
+
+        </el-table>
+      </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>
+<style>
+  .el-table__header tr th .cell{
+    text-align: center;
+  }
+  .el-table__row .cell {
+    text-align: center;
+  }
+</style>
+<script>
+import { listUser, getUser, delUser, addUser, updateUser, resetUserPwd, changeUserStatus, deptTreeSelect } from "@/api/system/user";
+import { getToken } from "@/utils/auth";
+import Treeselect from "@riophae/vue-treeselect";
+import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+
+export default {
+  name: "Task",
+  dicts: ['sim_equip_type'],
+  components: { Treeselect },
+  data() {
+    return {
+      multipleSelection: [],
+      selectedEquip: '',
+      selectedZjEquip: '',
+      tableData: [
+        {
+          ids:1,
+          xinghao: 'FZD04B型侦毒器',
+          xianxiang: '开机无响应',
+          name: '1.电源开关',
+        },{
+          ids:2,
+          name: '2.DC/DC转换芯片',
+        },{
+          ids:3,
+          xianxiang: '开机后按抽气开关,微电机不工作',
+          name: '3.微电机',
+        },{
+          ids:4,
+          name: '4.Q2',
+        },{
+          ids:5,
+          xianxiang: '抽气流量不足',
+          name: '5.滤网',
+        },{
+          ids:6,
+          name: '6.调速电位器',
+        },{
+          ids:7,
+          xianxiang: '开机后按下加热开关,加热灯不亮,也未加热',
+          name: '7.加热指示灯',
+        },{
+          ids:8,
+          name: '8.热敏开关',
+        },
+        {
+          ids:9,
+          xianxiang: '不能正常工作',
+          name: '9.外壳及零件',
+        },{
+          ids:10,
+          xianxiang: '电压低',
+          name: '10.供电模块',
+        },{
+          ids:11,
+          xianxiang: '抽气指示灯不亮',
+          name: '11.抽气指示灯',
+        },
+
+        {
+          ids:21,
+          xinghao:'FZB006型毒剂报警器',
+          xianxiang: '仪器无法开机',
+          name: '1.薄膜开关FPC排线',
+        },{
+          ids:22,
+          name: '2.主控板开机电路',
+        },
+        {
+          ids:23,
+          xianxiang: '蜂鸣器自检时,声音异常',
+          name: '3.蜂鸣器出声口',
+        },{
+          ids:24,
+          name: '4.接口接线板',
+        },{
+          ids:25,
+          xianxiang: '仪器进入检测界面后,通入检测剂不报警',
+          name: '5.检测剂',
+        },{
+          ids:26,
+          name: '6.主控板信号采集电路',
+        },
+        {
+          ids:27,
+          xianxiang: '显示屏无显示',
+          name: '7.主控板显示屏供电电路',
+        },{
+          ids:28,
+          name: '8.显示屏',
+        },
+        {
+          ids:29,
+          xianxiang: '长时间不进入“检测中”',
+          name: '9.干燥管',
+        },{
+          ids:210,
+          name: '10.维护管',
+        },
+        {
+          ids:211,
+          xianxiang: '不能正常工作',
+          name: '11.外壳及零件',
+        },{
+          ids:212,
+          xianxiang: '电压低',
+          name: '12.供电模块',
+        },{
+          ids:213,
+          xianxiang: '无法开机',
+          name: '13.DC/DC',
+        },
+        
+        {
+          ids:31,
+          xinghao: '防化兵用毒剂报警器',
+          xianxiang: '仪器无法开机',
+          name: '1.FFC排线',
+        },{
+          ids:32,
+          name: '2.汇总主控板',
+        },{
+          ids:33,
+          xianxiang: '开机后,显示屏无显示',
+          name: '3.显控报警板',
+        },{
+          ids:34,
+          name: '4.显示屏',
+        },{
+          ids:35,
+          xianxiang: '检测状态下模拟剂不报警',
+          name: '5.汇总主控板信号采集电路',
+        },{
+          ids:36,
+          name: '6.检测剂',
+        },{
+          ids:37,
+          xianxiang: '长时间不能进入检测状态',
+          name: '7.干燥管',
+        },{
+          ids:38,
+          name: '8.维护管',
+        },{
+          ids:39,
+          xianxiang: '固液检测/气体检测模式切换失败',
+          name: '9.固液检测单元与主控板连接线',
+        },{
+          ids:310,
+          name: '10.汇总主控板固液通信电路',
+        },{
+          ids:311,
+          name: '11.切换按键',
+        },{
+          ids:312,
+          xianxiang: '有毒有害气体检测模块不报警',
+          name: '12.高压驱动板与汇总主控板连接线',
+        },{
+          ids:313,
+          name: '13.汇总主控板毒害模块通信电路',
+        },{
+          ids:314,
+          xianxiang: '不能正常工作',
+          name: '14.外壳及零件',
+        },{
+          ids:315,
+          xianxiang: '电压低',
+          name: '15.供电模块',
+        },{
+          ids:316,
+          xianxiang: '无法开机',
+          name: '16.DC/DC',
+        },
+      ],
+      tableData1: [{
+        gzxx: '开机无响应',
+        buwei: '1.电源开关',
+        name1:1,
+        value1:1,
+        name2:1,
+        value2:2,
+        name3:1,
+        value3:1,
+        name4:1,
+        value4:1,
+        name5:1,
+        value5:1,
+        name6:1,
+        value6:1,
+        name7:1,
+        value7:1,
+        name8:1,
+        value8:1,
+        name9:1,
+        value9:1,
+        name10:1,
+        value10:1,
+      },{
+        buwei: '2.DC/DC转换芯片',
+        name1:2,
+        name2:2,
+        name3:2,
+        name4:2,
+        name5:2,
+        name6:2,
+        name7:2,
+        name8:2,
+        name9:2,
+        name10:2,
+        value1:1,
+        value2:1,
+        value3:2,
+        value4:2,
+        value5:1,
+        value6:2,
+        value7:2,
+        value8:2,
+        value9:1,
+        value10:1,
+      },{
+        gzxx: '开机后按抽气开关,微电机不工作',
+        buwei: '3.微电机',
+        name1:3,
+        name2:3,
+        name3:3,
+        name4:3,
+        name5:3,
+        name6:3,
+        name7:3,
+        name8:3,
+        name9:3,
+        name10:3,
+        value1:1,
+        value2:1,
+        value3:2,
+        value4:2,
+        value5:1,
+        value6:2,
+        value7:2,
+        value8:2,
+        value9:1,
+        value10:1,
+      },{
+        buwei: '4.Q2',
+        name1:4,
+        name2:4,
+        name3:4,
+        name4:4,
+        name5:4,
+        name6:4,
+        name7:4,
+        name8:4,
+        name9:4,
+        name10:4,
+        value1:2,
+        value2:1,
+        value3:2,
+        value4:2,
+        value5:1,
+        value6:2,
+        value7:1,
+        value8:1,
+        value9:1,
+        value10:1,
+      },{
+        gzxx: '抽气流量不足',
+        buwei: '5.滤网',
+        name1:5,
+        name2:5,
+        name3:5,
+        name4:5,
+        name5:5,
+        name6:5,
+        name7:5,
+        name8:5,
+        name9:5,
+        name10:5,
+        value1:2,
+        value2:2,
+        value3:2,
+        value4:2,
+        value5:1,
+        value6:1,
+        value7:1,
+        value8:2,
+        value9:1,
+        value10:1,
+      },{
+        buwei: '6.调速电位器',
+        name1:6,
+        name2:6,
+        name3:6,
+        name4:6,
+        name5:6,
+        name6:6,
+        name7:6,
+        name8:6,
+        name9:6,
+        name10:6,
+        value1:1,
+        value2:1,
+        value3:1,
+        value4:1,
+        value5:1,
+        value6:2,
+        value7:1,
+        value8:2,
+        value9:1,
+        value10:2,
+      },{
+        gzxx: '开机后按下加热开关,加热灯不亮,也未加热',
+        buwei: '7.加热指示灯',
+        name1:7,
+        name2:7,
+        name3:7,
+        name4:7,
+        name5:7,
+        name6:7,
+        name7:7,
+        name8:7,
+        name9:7,
+        name10:7, 
+        value1:1,
+        value2:1,
+        value3:2,
+        value4:1,
+        value5:1,
+        value6:2,
+        value7:1,
+        value8:2,
+        value9:1,
+        value10:1,
+      },{
+        buwei: '8.热敏开关',
+        name1:8,
+        name2:8,
+        name3:8,
+        name4:8,
+        name5:8,
+        name6:8,
+        name7:8,
+        name8:8,
+        name9:8,
+        name10:8,
+        value1:2,
+        value2:1,
+        value3:2,
+        value4:1,
+        value5:1,
+        value6:2,
+        value7:1,
+        value8:2,
+        value9:1,
+        value10:1,
+      },
+      {
+        gzxx: '不能正常工作',
+        buwei: '9.外壳及零件',
+        name1:9,
+        name2:9,
+        name3:9,
+        name4:9,
+        name5:9,
+        name6:9,
+        name7:9,
+        name8:9,
+        name9:9,
+        name10:9,
+        value1:1,
+        value2:2,
+        value3:2,
+        value4:2,
+        value5:1,
+        value6:2,
+        value7:1,
+        value8:1,
+        value9:1,
+        value10:1,
+      },{
+        gzxx: '电压低',
+        buwei: '10.供电模块',
+        name1:10,
+        name2:10,
+        name3:10,
+        name4:10,
+        name5:10,
+        name6:10,
+        name7:10,
+        name8:10,
+        name9:10,
+        name10:10,
+        value1:2,
+        value2:1,
+        value3:2,
+        value4:1,
+        value5:1,
+        value6:2,
+        value7:1,
+        value8:1,
+        value9:1,
+        value10:1,
+      },{
+        gzxx: '抽气指示灯不亮',
+        buwei: '11.抽气指示灯',
+        name1:11,
+        name2:11,
+        name3:11,
+        name4:11,
+        name5:11,
+        name6:11,
+        name7:11,
+        name8:11,
+        name9:11,
+        name10:11,
+        value1:2,
+        value2:2,
+        value3:1,
+        value4:1,
+        value5:1,
+        value6:2,
+        value7:1,
+        value8:1,
+        value9:2,
+        value10:1,
+      },
+
+
+
+      {
+        gzxx: '仪器无法开机',
+        buwei: '1.薄膜开关FPC排线',
+        name1:21,
+        name2:21,
+        name3:21,
+        name4:21,
+        name5:21,
+        name6:21,
+        name7:21,
+        name8:21,
+        name9:21,
+        name10:21,
+        value1:1,
+        value2:1,
+        value3:2,
+        value4:2,
+        value5:1,
+        value6:2,
+        value7:2,
+        value8:2,
+        value9:1,
+        value10:1,
+      },{
+        buwei: '2.主控板开机电路',
+        name1:22,
+        name2:22,
+        name3:22,
+        name4:22,
+        name5:22,
+        name6:22,
+        name7:22,
+        name8:22,
+        name9:22,
+        name10:22,
+        value1:1,
+        value2:1,
+        value3:2,
+        value4:2,
+        value5:1,
+        value6:2,
+        value7:2,
+        value8:2,
+        value9:1,
+        value10:1,
+      },
+      {
+        gzxx: '蜂鸣器自检时,声音异常',
+        buwei: '3.蜂鸣器出声口',
+        name1:23,
+        name2:23,
+        name3:23,
+        name4:23,
+        name5:23,
+        name6:23,
+        name7:23,
+        name8:23,
+        name9:23,
+        name10:23,
+        value1:1,
+        value2:1,
+        value3:2,
+        value4:2,
+        value5:1,
+        value6:2,
+        value7:2,
+        value8:2,
+        value9:1,
+        value10:1,
+      },{
+        buwei: '4.接口接线板',
+        name1:24,
+        name2:24,
+        name3:24,
+        name4:24,
+        name5:24,
+        name6:24,
+        name7:24,
+        name8:24,
+        name9:24,
+        name10:24,
+        value1:1,
+        value2:1,
+        value3:2,
+        value4:2,
+        value5:1,
+        value6:2,
+        value7:2,
+        value8:2,
+        value9:1,
+        value10:1,
+      },{
+        gzxx: '仪器进入检测界面后,通入检测剂不报警',
+        buwei: '5.检测剂',
+        name1:25,
+        name2:25,
+        name3:25,
+        name4:25,
+        name5:25,
+        name6:25,
+        name7:25,
+        name8:25,
+        name9:25,
+        name10:25,
+        value1:1,
+        value2:1,
+        value3:2,
+        value4:2,
+        value5:1,
+        value6:2,
+        value7:2,
+        value8:2,
+        value9:1,
+        value10:1,
+      },{
+        buwei: '6.主控板信号采集电路',
+        name1:26,
+        name2:26,
+        name3:26,
+        name4:26,
+        name5:26,
+        name6:26,
+        name7:26,
+        name8:26,
+        name9:26,
+        name10:26,
+        value1:1,
+        value2:1,
+        value3:2,
+        value4:2,
+        value5:1,
+        value6:2,
+        value7:2,
+        value8:2,
+        value9:1,
+        value10:1,
+      },
+      {
+        gzxx: '显示屏无显示',
+        buwei: '7.主控板显示屏供电电路',
+        name1:27,
+        name2:27,
+        name3:27,
+        name4:27,
+        name5:27,
+        name6:27,
+        name7:27,
+        name8:27,
+        name9:27,
+        name10:27,
+        value1:1,
+        value2:1,
+        value3:2,
+        value4:2,
+        value5:1,
+        value6:2,
+        value7:2,
+        value8:2,
+        value9:1,
+        value10:1,
+      },{
+        buwei: '8.显示屏',
+        name1:28,
+        name2:28,
+        name3:28,
+        name4:28,
+        name5:28,
+        name6:28,
+        name7:28,
+        name8:28,
+        name9:28,
+        name10:28,
+        value1:1,
+        value2:1,
+        value3:2,
+        value4:2,
+        value5:1,
+        value6:2,
+        value7:2,
+        value8:2,
+        value9:1,
+        value10:1,
+      },
+      {
+        gzxx: '长时间不进入“检测中”',
+        buwei: '9.干燥管',
+        name1:29,
+        name2:29,
+        name3:29,
+        name4:29,
+        name5:29,
+        name6:29,
+        name7:29,
+        name8:29,
+        name9:29,
+        name10:29,
+        value1:1,
+        value2:1,
+        value3:2,
+        value4:2,
+        value5:1,
+        value6:2,
+        value7:2,
+        value8:2,
+        value9:1,
+        value10:1,
+      },{
+        buwei: '10.维护管',
+        name1:210,
+        name2:210,
+        name3:210,
+        name4:210,
+        name5:210,
+        name6:210,
+        name7:210,
+        name8:210,
+        name9:210,
+        name10:210,
+        value1:1,
+        value2:1,
+        value3:2,
+        value4:2,
+        value5:1,
+        value6:2,
+        value7:2,
+        value8:2,
+        value9:1,
+        value10:1,
+      },
+      {
+        gzxx: '不能正常工作',
+        buwei: '11.外壳及零件',
+        name1:211,
+        name2:211,
+        name3:211,
+        name4:211,
+        name5:211,
+        name6:211,
+        name7:211,
+        name8:211,
+        name9:211,
+        name10:211,
+        value1:1,
+        value2:1,
+        value3:2,
+        value4:2,
+        value5:1,
+        value6:2,
+        value7:2,
+        value8:2,
+        value9:1,
+        value10:1,
+      },{
+        gzxx: '电压低',
+        buwei: '12.供电模块',
+        name1:212,
+        name2:212,
+        name3:212,
+        name4:212,
+        name5:212,
+        name6:212,
+        name7:212,
+        name8:212,
+        name9:212,
+        name10:212,
+        value1:1,
+        value2:1,
+        value3:2,
+        value4:2,
+        value5:1,
+        value6:2,
+        value7:2,
+        value8:2,
+        value9:1,
+        value10:1,
+      },{
+        gzxx: '无法开机',
+        buwei: '13.DC/DC',
+        name1:213,
+        name2:213,
+        name3:213,
+        name4:213,
+        name5:213,
+        name6:213,
+        name7:213,
+        name8:213,
+        name9:213,
+        name10:213,
+        value1:1,
+        value2:1,
+        value3:2,
+        value4:2,
+        value5:1,
+        value6:2,
+        value7:2,
+        value8:2,
+        value9:1,
+        value10:1,
+      },
+      
+      
+      {
+        gzxx: '仪器无法开机',
+        buwei: '1.FFC排线',
+        name1:31,
+        name2:31,
+        name3:31,
+        name4:31,
+        name5:31,
+        name6:31,
+        name7:31,
+        name8:31,
+        name9:31,
+        name10:31,
+        value1:2,
+        value2:1,
+        value3:1,
+        value4:2,
+        value5:1,
+        value6:2,
+        value7:1,
+        value8:2,
+        value9:1,
+        value10:2,
+      },{
+        buwei: '2.汇总主控板',
+        name1:32,
+        name2:32,
+        name3:32,
+        name4:32,
+        name5:32,
+        name6:32,
+        name7:32,
+        name8:32,
+        name9:32,
+        name10:32,
+        value1:2,
+        value2:1,
+        value3:1,
+        value4:2,
+        value5:1,
+        value6:2,
+        value7:1,
+        value8:2,
+        value9:1,
+        value10:2,
+      },{
+        gzxx: '开机后,显示屏无显示',
+        buwei: '3.显控报警板',
+        name1:33,
+        name2:33,
+        name3:33,
+        name4:33,
+        name5:33,
+        name6:33,
+        name7:33,
+        name8:33,
+        name9:33,
+        name10:33,
+        value1:2,
+        value2:1,
+        value3:1,
+        value4:2,
+        value5:1,
+        value6:2,
+        value7:1,
+        value8:2,
+        value9:1,
+        value10:2,
+      },{
+        buwei: '4.显示屏',
+        name1:34,
+        name2:34,
+        name3:34,
+        name4:34,
+        name5:34,
+        name6:34,
+        name7:34,
+        name8:34,
+        name9:34,
+        name10:34,
+        value1:2,
+        value2:1,
+        value3:1,
+        value4:2,
+        value5:1,
+        value6:2,
+        value7:1,
+        value8:2,
+        value9:1,
+        value10:2,
+      },{
+        gzxx: '检测状态下模拟剂不报警',
+        buwei: '5.汇总主控板信号采集电路',
+        name1:35,
+        name2:35,
+        name3:35,
+        name4:35,
+        name5:35,
+        name6:35,
+        name7:35,
+        name8:35,
+        name9:35,
+        name10:35,
+        value1:2,
+        value2:1,
+        value3:1,
+        value4:2,
+        value5:1,
+        value6:2,
+        value7:1,
+        value8:2,
+        value9:1,
+        value10:2,
+      },{
+        buwei: '6.检测剂',
+        name1:36,
+        name2:36,
+        name3:36,
+        name4:36,
+        name5:36,
+        name6:36,
+        name7:36,
+        name8:36,
+        name9:36,
+        name10:36,
+        value1:2,
+        value2:1,
+        value3:1,
+        value4:2,
+        value5:1,
+        value6:2,
+        value7:1,
+        value8:2,
+        value9:1,
+        value10:2,
+      },{
+        gzxx: '长时间不能进入检测状态',
+        buwei: '7.干燥管',
+        name1:37,
+        name2:37,
+        name3:37,
+        name4:37,
+        name5:37,
+        name6:37,
+        name7:37,
+        name8:37,
+        name9:37,
+        name10:37,
+        value1:2,
+        value2:1,
+        value3:1,
+        value4:2,
+        value5:1,
+        value6:2,
+        value7:1,
+        value8:2,
+        value9:1,
+        value10:2,
+      },{
+        buwei: '8.维护管',
+        name1:38,
+        name2:38,
+        name3:38,
+        name4:38,
+        name5:38,
+        name6:38,
+        name7:38,
+        name8:38,
+        name9:38,
+        name10:38,
+        value1:2,
+        value2:1,
+        value3:1,
+        value4:2,
+        value5:1,
+        value6:2,
+        value7:1,
+        value8:2,
+        value9:1,
+        value10:2,
+      },{
+        gzxx: '固液检测/气体检测模式切换失败',
+        buwei: '9.固液检测单元与主控板连接线',
+        name1:39,
+        name2:39,
+        name3:39,
+        name4:39,
+        name5:39,
+        name6:39,
+        name7:39,
+        name8:39,
+        name9:39,
+        name10:39,
+        value1:2,
+        value2:1,
+        value3:1,
+        value4:2,
+        value5:1,
+        value6:2,
+        value7:1,
+        value8:2,
+        value9:1,
+        value10:2,
+      },{
+        buwei: '10.汇总主控板固液通信电路',
+        name1:310,
+        name2:310,
+        name3:310,
+        name4:310,
+        name5:310,
+        name6:310,
+        name7:310,
+        name8:310,
+        name9:310,
+        name10:310,
+        value1:2,
+        value2:1,
+        value3:1,
+        value4:2,
+        value5:1,
+        value6:2,
+        value7:1,
+        value8:2,
+        value9:1,
+        value10:2,
+      },{
+        buwei: '11.切换按键',
+        name1:311,
+        name2:311,
+        name3:311,
+        name4:311,
+        name5:311,
+        name6:311,
+        name7:311,
+        name8:311,
+        name9:311,
+        name10:311,
+        value1:2,
+        value2:1,
+        value3:1,
+        value4:2,
+        value5:1,
+        value6:2,
+        value7:1,
+        value8:2,
+        value9:1,
+        value10:2,
+      },{
+        gzxx: '有毒有害气体检测模块不报警',
+        buwei: '12.高压驱动板与汇总主控板连接线',
+        name1:312,
+        name2:312,
+        name3:312,
+        name4:312,
+        name5:312,
+        name6:312,
+        name7:312,
+        name8:312,
+        name9:312,
+        name10:312,
+        value1:2,
+        value2:1,
+        value3:1,
+        value4:2,
+        value5:1,
+        value6:2,
+        value7:1,
+        value8:2,
+        value9:1,
+        value10:2,
+      },{
+        buwei: '13.汇总主控板毒害模块通信电路',
+        name1:313,
+        name2:313,
+        name3:313,
+        name4:313,
+        name5:313,
+        name6:313,
+        name7:313,
+        name8:313,
+        name9:313,
+        name10:313,
+        value1:2,
+        value2:1,
+        value3:1,
+        value4:2,
+        value5:1,
+        value6:2,
+        value7:1,
+        value8:2,
+        value9:1,
+        value10:2,
+      },{
+        gzxx: '不能正常工作',
+        buwei: '14.外壳及零件',
+        name1:314,
+        name2:314,
+        name3:314,
+        name4:314,
+        name5:314,
+        name6:314,
+        name7:314,
+        name8:314,
+        name9:314,
+        name10:314,
+        value1:2,
+        value2:1,
+        value3:1,
+        value4:2,
+        value5:1,
+        value6:2,
+        value7:1,
+        value8:2,
+        value9:1,
+        value10:2,
+      },{
+        gzxx: '电压低',
+        buwei: '15.供电模块',
+        name1:315,
+        name2:315,
+        name3:315,
+        name4:315,
+        name5:315,
+        name6:315,
+        name7:315,
+        name8:315,
+        name9:315,
+        name10:315,
+        value1:2,
+        value2:1,
+        value3:1,
+        value4:2,
+        value5:1,
+        value6:2,
+        value7:1,
+        value8:2,
+        value9:1,
+        value10:2,
+      },{
+        gzxx: '无法开机',
+        buwei: '16.DC/DC',
+        name1:316,
+        name2:316,
+        name3:316,
+        name4:316,
+        name5:316,
+        name6:316,
+        name7:316,
+        name8:316,
+        name9:316,
+        name10:316,
+        value1:2,
+        value2:1,
+        value3:1,
+        value4:2,
+        value5:1,
+        value6:2,
+        value7:1,
+        value8:2,
+        value9:1,
+        value10:2,
+      },
+      
+      ],
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 用户表格数据
+      userList: null,
+      // 弹出层标题
+      title: "",
+      // 部门树选项
+      deptOptions: undefined,
+      // 是否显示弹出层
+      open: false,
+      //自检弹出框
+      zijianopen:false,
+      // 详情弹出框
+      openview:false,
+      // 部门名称
+      deptName: undefined,
+      // 默认密码
+      initPassword: undefined,
+      // 日期范围
+      dateRange: [],
+      // 岗位选项
+      postOptions: [],
+      // 角色选项
+      roleOptions: [],
+      // 表单参数
+      form: {},
+      defaultProps: {
+        children: "children",
+        label: "label"
+      },
+      // 用户导入参数
+      upload: {
+        // 是否显示弹出层(用户导入)
+        open: false,
+        // 弹出层标题(用户导入)
+        title: "",
+        // 是否禁用上传
+        isUploading: false,
+        // 是否更新已经存在的用户数据
+        updateSupport: 0,
+        // 设置上传的请求头部
+        headers: { Authorization: "Bearer " + getToken() },
+        // 上传的地址
+        url: process.env.VUE_APP_BASE_API + "/simulator/user/importData"
+      },
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        userName: undefined,
+        phonenumber: undefined,
+        status: undefined,
+        deptId: undefined
+      },
+      // 列信息
+      columns: [
+        { key: 0, label: `编号`, visible: true },
+        { key: 1, label: `任务名称`, visible: true },
+        { key: 2, label: `模拟器型号`, visible: true },
+        { key: 3, label: `故障现象数量`, visible: true },
+        { key: 4, label: `故障部位数量`, visible: true },
+        { key: 5, label: `创建者`, visible: true },
+        { key: 6, label: `备注`, visible: true },
+        { key: 7, label: `创建时间`, visible: true }
+      ],
+      // 表单校验
+      rules: {
+      }
+    };
+  },
+  watch: {
+    // 根据名称筛选部门树
+    deptName(val) {
+      this.$refs.tree.filter(val);
+    },
+    selectedEquip(newValue) {
+      // console.log(newValue);
+      // 根据newValue更新tableData
+      // this.tableData = this.getNewTableData(newValue);
+      // console.log(this.getNewTableData(newValue);
+      if(newValue == 1){
+        this.tableData = [{
+          ids:1,
+          xinghao: 'FZD04B型侦毒器',
+          xianxiang: '开机无响应',
+          name: '1.电源开关',
+        },{
+          ids:2,
+          name: '2.DC/DC转换芯片',
+        },{
+          ids:3,
+          xianxiang: '开机后按抽气开关,微电机不工作',
+          name: '3.微电机',
+        },{
+          ids:4,
+          name: '4.Q2',
+        },{
+          ids:5,
+          xianxiang: '抽气流量不足',
+          name: '5.滤网',
+        },{
+          ids:6,
+          name: '6.调速电位器',
+        },{
+          ids:7,
+          xianxiang: '开机后按下加热开关,加热灯不亮,也未加热',
+          name: '7.加热指示灯',
+        },{
+          ids:8,
+          name: '8.热敏开关',
+        },
+        {
+          ids:9,
+          xianxiang: '不能正常工作',
+          name: '9.外壳及零件',
+        },{
+          ids:10,
+          xianxiang: '电压低',
+          name: '10.供电模块',
+        },{
+          ids:11,
+          xianxiang: '抽气指示灯不亮',
+          name: '11.抽气指示灯',
+        }];
+      }else if(newValue == 2){
+        this.tableData = [{
+          ids:21,
+          xinghao:'FZB006型毒剂报警器',
+          xianxiang: '仪器无法开机',
+          name: '1.薄膜开关FPC排线',
+        },{
+          ids:22,
+          name: '2.主控板开机电路',
+        },
+        {
+          ids:23,
+          xianxiang: '蜂鸣器自检时,声音异常',
+          name: '3.蜂鸣器出声口',
+        },{
+          ids:24,
+          name: '4.接口接线板',
+        },{
+          ids:25,
+          xianxiang: '仪器进入检测界面后,通入检测剂不报警',
+          name: '5.检测剂',
+        },{
+          ids:26,
+          name: '6.主控板信号采集电路',
+        },
+        {
+          ids:27,
+          xianxiang: '显示屏无显示',
+          name: '7.主控板显示屏供电电路',
+        },{
+          ids:28,
+          name: '8.显示屏',
+        },
+        {
+          ids:29,
+          xianxiang: '长时间不进入“检测中”',
+          name: '9.干燥管',
+        },{
+          ids:210,
+          name: '10.维护管',
+        },
+        {
+          ids:211,
+          xianxiang: '不能正常工作',
+          name: '11.外壳及零件',
+        },{
+          ids:212,
+          xianxiang: '电压低',
+          name: '12.供电模块',
+        },{
+          ids:213,
+          xianxiang: '无法开机',
+          name: '13.DC/DC',
+        }]
+      }else if(newValue == 3){
+        this.tableData = [{
+          ids:31,
+          xinghao: '防化兵用毒剂报警器',
+          xianxiang: '仪器无法开机',
+          name: '1.FFC排线',
+        },{
+          ids:32,
+          name: '2.汇总主控板',
+        },{
+          ids:33,
+          xianxiang: '开机后,显示屏无显示',
+          name: '3.显控报警板',
+        },{
+          ids:34,
+          name: '4.显示屏',
+        },{
+          ids:35,
+          xianxiang: '检测状态下模拟剂不报警',
+          name: '5.汇总主控板信号采集电路',
+        },{
+          ids:36,
+          name: '6.检测剂',
+        },{
+          ids:37,
+          xianxiang: '长时间不能进入检测状态',
+          name: '7.干燥管',
+        },{
+          ids:38,
+          name: '8.维护管',
+        },{
+          ids:39,
+          xianxiang: '固液检测/气体检测模式切换失败',
+          name: '9.固液检测单元与主控板连接线',
+        },{
+          ids:310,
+          name: '10.汇总主控板固液通信电路',
+        },{
+          ids:311,
+          name: '11.切换按键',
+        },{
+          ids:312,
+          xianxiang: '有毒有害气体检测模块不报警',
+          name: '12.高压驱动板与汇总主控板连接线',
+        },{
+          ids:313,
+          name: '13.汇总主控板毒害模块通信电路',
+        },{
+          ids:314,
+          xianxiang: '不能正常工作',
+          name: '14.外壳及零件',
+        },{
+          ids:315,
+          xianxiang: '电压低',
+          name: '15.供电模块',
+        },{
+          ids:316,
+          xianxiang: '无法开机',
+          name: '16.DC/DC',
+        }]
+      }
+
+    },
+    selectedZjEquip(newValue) {
+      // console.log(newValue);
+      // 根据newValue更新tableData
+      // this.tableData = this.getNewTableData(newValue);
+      // console.log(this.getNewTableData(newValue);
+      if(newValue == 1){
+        this.tableData1 = [{
+          gzxx: '开机无响应',
+          buwei: '1.电源开关',
+          name1:1,
+          value1:1,
+          name2:1,
+          value2:2,
+          name3:1,
+          value3:1,
+          name4:1,
+          value4:1,
+          name5:1,
+          value5:1,
+          name6:1,
+          value6:1,
+          name7:1,
+          value7:1,
+          name8:1,
+          value8:1,
+          name9:1,
+          value9:1,
+          name10:1,
+          value10:1,
+        },{
+          buwei: '2.DC/DC转换芯片',
+          name1:2,
+          name2:2,
+          name3:2,
+          name4:2,
+          name5:2,
+          name6:2,
+          name7:2,
+          name8:2,
+          name9:2,
+          name10:2,
+          value1:1,
+          value2:1,
+          value3:2,
+          value4:2,
+          value5:1,
+          value6:2,
+          value7:2,
+          value8:2,
+          value9:1,
+          value10:1,
+        },{
+          gzxx: '开机后按抽气开关,微电机不工作',
+          buwei: '3.微电机',
+          name1:3,
+          name2:3,
+          name3:3,
+          name4:3,
+          name5:3,
+          name6:3,
+          name7:3,
+          name8:3,
+          name9:3,
+          name10:3,
+          value1:1,
+          value2:1,
+          value3:2,
+          value4:2,
+          value5:1,
+          value6:2,
+          value7:2,
+          value8:2,
+          value9:1,
+          value10:1,
+        },{
+          buwei: '4.Q2',
+          name1:4,
+          name2:4,
+          name3:4,
+          name4:4,
+          name5:4,
+          name6:4,
+          name7:4,
+          name8:4,
+          name9:4,
+          name10:4,
+          value1:2,
+          value2:1,
+          value3:2,
+          value4:2,
+          value5:1,
+          value6:2,
+          value7:1,
+          value8:1,
+          value9:1,
+          value10:1,
+        },{
+          gzxx: '抽气流量不足',
+          buwei: '5.滤网',
+          name1:5,
+          name2:5,
+          name3:5,
+          name4:5,
+          name5:5,
+          name6:5,
+          name7:5,
+          name8:5,
+          name9:5,
+          name10:5,
+          value1:2,
+          value2:2,
+          value3:2,
+          value4:2,
+          value5:1,
+          value6:1,
+          value7:1,
+          value8:2,
+          value9:1,
+          value10:1,
+        },{
+          buwei: '6.调速电位器',
+          name1:6,
+          name2:6,
+          name3:6,
+          name4:6,
+          name5:6,
+          name6:6,
+          name7:6,
+          name8:6,
+          name9:6,
+          name10:6,
+          value1:1,
+          value2:1,
+          value3:1,
+          value4:1,
+          value5:1,
+          value6:2,
+          value7:1,
+          value8:2,
+          value9:1,
+          value10:2,
+        },{
+          gzxx: '开机后按下加热开关,加热灯不亮,也未加热',
+          buwei: '7.加热指示灯',
+          name1:7,
+          name2:7,
+          name3:7,
+          name4:7,
+          name5:7,
+          name6:7,
+          name7:7,
+          name8:7,
+          name9:7,
+          name10:7, 
+          value1:1,
+          value2:1,
+          value3:2,
+          value4:1,
+          value5:1,
+          value6:2,
+          value7:1,
+          value8:2,
+          value9:1,
+          value10:1,
+        },{
+          buwei: '8.热敏开关',
+          name1:8,
+          name2:8,
+          name3:8,
+          name4:8,
+          name5:8,
+          name6:8,
+          name7:8,
+          name8:8,
+          name9:8,
+          name10:8,
+          value1:2,
+          value2:1,
+          value3:2,
+          value4:1,
+          value5:1,
+          value6:2,
+          value7:1,
+          value8:2,
+          value9:1,
+          value10:1,
+        },
+        {
+          gzxx: '不能正常工作',
+          buwei: '9.外壳及零件',
+          name1:9,
+          name2:9,
+          name3:9,
+          name4:9,
+          name5:9,
+          name6:9,
+          name7:9,
+          name8:9,
+          name9:9,
+          name10:9,
+          value1:1,
+          value2:2,
+          value3:2,
+          value4:2,
+          value5:1,
+          value6:2,
+          value7:1,
+          value8:1,
+          value9:1,
+          value10:1,
+        },{
+          gzxx: '电压低',
+          buwei: '10.供电模块',
+          name1:10,
+          name2:10,
+          name3:10,
+          name4:10,
+          name5:10,
+          name6:10,
+          name7:10,
+          name8:10,
+          name9:10,
+          name10:10,
+          value1:2,
+          value2:1,
+          value3:2,
+          value4:1,
+          value5:1,
+          value6:2,
+          value7:1,
+          value8:1,
+          value9:1,
+          value10:1,
+        },{
+          gzxx: '抽气指示灯不亮',
+          buwei: '11.抽气指示灯',
+          name1:11,
+          name2:11,
+          name3:11,
+          name4:11,
+          name5:11,
+          name6:11,
+          name7:11,
+          name8:11,
+          name9:11,
+          name10:11,
+          value1:2,
+          value2:2,
+          value3:1,
+          value4:1,
+          value5:1,
+          value6:2,
+          value7:1,
+          value8:1,
+          value9:2,
+          value10:1,
+        }]
+      }else if(newValue==2){
+        this.tableData1 = [{
+          gzxx: '仪器无法开机',
+          buwei: '1.薄膜开关FPC排线',
+          name1:21,
+          name2:21,
+          name3:21,
+          name4:21,
+          name5:21,
+          name6:21,
+          name7:21,
+          name8:21,
+          name9:21,
+          name10:21,
+          value1:1,
+          value2:1,
+          value3:2,
+          value4:2,
+          value5:1,
+          value6:2,
+          value7:2,
+          value8:2,
+          value9:1,
+          value10:1,
+        },{
+          buwei: '2.主控板开机电路',
+          name1:22,
+          name2:22,
+          name3:22,
+          name4:22,
+          name5:22,
+          name6:22,
+          name7:22,
+          name8:22,
+          name9:22,
+          name10:22,
+          value1:1,
+          value2:1,
+          value3:2,
+          value4:2,
+          value5:1,
+          value6:2,
+          value7:2,
+          value8:2,
+          value9:1,
+          value10:1,
+        },
+        {
+          gzxx: '蜂鸣器自检时,声音异常',
+          buwei: '3.蜂鸣器出声口',
+          name1:23,
+          name2:23,
+          name3:23,
+          name4:23,
+          name5:23,
+          name6:23,
+          name7:23,
+          name8:23,
+          name9:23,
+          name10:23,
+          value1:1,
+          value2:1,
+          value3:2,
+          value4:2,
+          value5:1,
+          value6:2,
+          value7:2,
+          value8:2,
+          value9:1,
+          value10:1,
+        },{
+          buwei: '4.接口接线板',
+          name1:24,
+          name2:24,
+          name3:24,
+          name4:24,
+          name5:24,
+          name6:24,
+          name7:24,
+          name8:24,
+          name9:24,
+          name10:24,
+          value1:1,
+          value2:1,
+          value3:2,
+          value4:2,
+          value5:1,
+          value6:2,
+          value7:2,
+          value8:2,
+          value9:1,
+          value10:1,
+        },{
+          gzxx: '仪器进入检测界面后,通入检测剂不报警',
+          buwei: '5.检测剂',
+          name1:25,
+          name2:25,
+          name3:25,
+          name4:25,
+          name5:25,
+          name6:25,
+          name7:25,
+          name8:25,
+          name9:25,
+          name10:25,
+          value1:1,
+          value2:1,
+          value3:2,
+          value4:2,
+          value5:1,
+          value6:2,
+          value7:2,
+          value8:2,
+          value9:1,
+          value10:1,
+        },{
+          buwei: '6.主控板信号采集电路',
+          name1:26,
+          name2:26,
+          name3:26,
+          name4:26,
+          name5:26,
+          name6:26,
+          name7:26,
+          name8:26,
+          name9:26,
+          name10:26,
+          value1:1,
+          value2:1,
+          value3:2,
+          value4:2,
+          value5:1,
+          value6:2,
+          value7:2,
+          value8:2,
+          value9:1,
+          value10:1,
+        },
+        {
+          gzxx: '显示屏无显示',
+          buwei: '7.主控板显示屏供电电路',
+          name1:27,
+          name2:27,
+          name3:27,
+          name4:27,
+          name5:27,
+          name6:27,
+          name7:27,
+          name8:27,
+          name9:27,
+          name10:27,
+          value1:1,
+          value2:1,
+          value3:2,
+          value4:2,
+          value5:1,
+          value6:2,
+          value7:2,
+          value8:2,
+          value9:1,
+          value10:1,
+        },{
+          buwei: '8.显示屏',
+          name1:28,
+          name2:28,
+          name3:28,
+          name4:28,
+          name5:28,
+          name6:28,
+          name7:28,
+          name8:28,
+          name9:28,
+          name10:28,
+          value1:1,
+          value2:1,
+          value3:2,
+          value4:2,
+          value5:1,
+          value6:2,
+          value7:2,
+          value8:2,
+          value9:1,
+          value10:1,
+        },
+        {
+          gzxx: '长时间不进入“检测中”',
+          buwei: '9.干燥管',
+          name1:29,
+          name2:29,
+          name3:29,
+          name4:29,
+          name5:29,
+          name6:29,
+          name7:29,
+          name8:29,
+          name9:29,
+          name10:29,
+          value1:1,
+          value2:1,
+          value3:2,
+          value4:2,
+          value5:1,
+          value6:2,
+          value7:2,
+          value8:2,
+          value9:1,
+          value10:1,
+        },{
+          buwei: '10.维护管',
+          name1:210,
+          name2:210,
+          name3:210,
+          name4:210,
+          name5:210,
+          name6:210,
+          name7:210,
+          name8:210,
+          name9:210,
+          name10:210,
+          value1:1,
+          value2:1,
+          value3:2,
+          value4:2,
+          value5:1,
+          value6:2,
+          value7:2,
+          value8:2,
+          value9:1,
+          value10:1,
+        },
+        {
+          gzxx: '不能正常工作',
+          buwei: '11.外壳及零件',
+          name1:211,
+          name2:211,
+          name3:211,
+          name4:211,
+          name5:211,
+          name6:211,
+          name7:211,
+          name8:211,
+          name9:211,
+          name10:211,
+          value1:1,
+          value2:1,
+          value3:2,
+          value4:2,
+          value5:1,
+          value6:2,
+          value7:2,
+          value8:2,
+          value9:1,
+          value10:1,
+        },{
+          gzxx: '电压低',
+          buwei: '12.供电模块',
+          name1:212,
+          name2:212,
+          name3:212,
+          name4:212,
+          name5:212,
+          name6:212,
+          name7:212,
+          name8:212,
+          name9:212,
+          name10:212,
+          value1:1,
+          value2:1,
+          value3:2,
+          value4:2,
+          value5:1,
+          value6:2,
+          value7:2,
+          value8:2,
+          value9:1,
+          value10:1,
+        },{
+          gzxx: '无法开机',
+          buwei: '13.DC/DC',
+          name1:213,
+          name2:213,
+          name3:213,
+          name4:213,
+          name5:213,
+          name6:213,
+          name7:213,
+          name8:213,
+          name9:213,
+          name10:213,
+          value1:1,
+          value2:1,
+          value3:2,
+          value4:2,
+          value5:1,
+          value6:2,
+          value7:2,
+          value8:2,
+          value9:1,
+          value10:1,
+        }]
+      }else if(newValue==3){
+        this.tableData1 = [{
+          gzxx: '仪器无法开机',
+          buwei: '1.FFC排线',
+          name1:31,
+          name2:31,
+          name3:31,
+          name4:31,
+          name5:31,
+          name6:31,
+          name7:31,
+          name8:31,
+          name9:31,
+          name10:31,
+          value1:2,
+          value2:1,
+          value3:1,
+          value4:2,
+          value5:1,
+          value6:2,
+          value7:1,
+          value8:2,
+          value9:1,
+          value10:2,
+        },{
+          buwei: '2.汇总主控板',
+          name1:32,
+          name2:32,
+          name3:32,
+          name4:32,
+          name5:32,
+          name6:32,
+          name7:32,
+          name8:32,
+          name9:32,
+          name10:32,
+          value1:2,
+          value2:1,
+          value3:1,
+          value4:2,
+          value5:1,
+          value6:2,
+          value7:1,
+          value8:2,
+          value9:1,
+          value10:2,
+        },{
+          gzxx: '开机后,显示屏无显示',
+          buwei: '3.显控报警板',
+          name1:33,
+          name2:33,
+          name3:33,
+          name4:33,
+          name5:33,
+          name6:33,
+          name7:33,
+          name8:33,
+          name9:33,
+          name10:33,
+          value1:2,
+          value2:1,
+          value3:1,
+          value4:2,
+          value5:1,
+          value6:2,
+          value7:1,
+          value8:2,
+          value9:1,
+          value10:2,
+        },{
+          buwei: '4.显示屏',
+          name1:34,
+          name2:34,
+          name3:34,
+          name4:34,
+          name5:34,
+          name6:34,
+          name7:34,
+          name8:34,
+          name9:34,
+          name10:34,
+          value1:2,
+          value2:1,
+          value3:1,
+          value4:2,
+          value5:1,
+          value6:2,
+          value7:1,
+          value8:2,
+          value9:1,
+          value10:2,
+        },{
+          gzxx: '检测状态下模拟剂不报警',
+          buwei: '5.汇总主控板信号采集电路',
+          name1:35,
+          name2:35,
+          name3:35,
+          name4:35,
+          name5:35,
+          name6:35,
+          name7:35,
+          name8:35,
+          name9:35,
+          name10:35,
+          value1:2,
+          value2:1,
+          value3:1,
+          value4:2,
+          value5:1,
+          value6:2,
+          value7:1,
+          value8:2,
+          value9:1,
+          value10:2,
+        },{
+          buwei: '6.检测剂',
+          name1:36,
+          name2:36,
+          name3:36,
+          name4:36,
+          name5:36,
+          name6:36,
+          name7:36,
+          name8:36,
+          name9:36,
+          name10:36,
+          value1:2,
+          value2:1,
+          value3:1,
+          value4:2,
+          value5:1,
+          value6:2,
+          value7:1,
+          value8:2,
+          value9:1,
+          value10:2,
+        },{
+          gzxx: '长时间不能进入检测状态',
+          buwei: '7.干燥管',
+          name1:37,
+          name2:37,
+          name3:37,
+          name4:37,
+          name5:37,
+          name6:37,
+          name7:37,
+          name8:37,
+          name9:37,
+          name10:37,
+          value1:2,
+          value2:1,
+          value3:1,
+          value4:2,
+          value5:1,
+          value6:2,
+          value7:1,
+          value8:2,
+          value9:1,
+          value10:2,
+        },{
+          buwei: '8.维护管',
+          name1:38,
+          name2:38,
+          name3:38,
+          name4:38,
+          name5:38,
+          name6:38,
+          name7:38,
+          name8:38,
+          name9:38,
+          name10:38,
+          value1:2,
+          value2:1,
+          value3:1,
+          value4:2,
+          value5:1,
+          value6:2,
+          value7:1,
+          value8:2,
+          value9:1,
+          value10:2,
+        },{
+          gzxx: '固液检测/气体检测模式切换失败',
+          buwei: '9.固液检测单元与主控板连接线',
+          name1:39,
+          name2:39,
+          name3:39,
+          name4:39,
+          name5:39,
+          name6:39,
+          name7:39,
+          name8:39,
+          name9:39,
+          name10:39,
+          value1:2,
+          value2:1,
+          value3:1,
+          value4:2,
+          value5:1,
+          value6:2,
+          value7:1,
+          value8:2,
+          value9:1,
+          value10:2,
+        },{
+          buwei: '10.汇总主控板固液通信电路',
+          name1:310,
+          name2:310,
+          name3:310,
+          name4:310,
+          name5:310,
+          name6:310,
+          name7:310,
+          name8:310,
+          name9:310,
+          name10:310,
+          value1:2,
+          value2:1,
+          value3:1,
+          value4:2,
+          value5:1,
+          value6:2,
+          value7:1,
+          value8:2,
+          value9:1,
+          value10:2,
+        },{
+          buwei: '11.切换按键',
+          name1:311,
+          name2:311,
+          name3:311,
+          name4:311,
+          name5:311,
+          name6:311,
+          name7:311,
+          name8:311,
+          name9:311,
+          name10:311,
+          value1:2,
+          value2:1,
+          value3:1,
+          value4:2,
+          value5:1,
+          value6:2,
+          value7:1,
+          value8:2,
+          value9:1,
+          value10:2,
+        },{
+          gzxx: '有毒有害气体检测模块不报警',
+          buwei: '12.高压驱动板与汇总主控板连接线',
+          name1:312,
+          name2:312,
+          name3:312,
+          name4:312,
+          name5:312,
+          name6:312,
+          name7:312,
+          name8:312,
+          name9:312,
+          name10:312,
+          value1:2,
+          value2:1,
+          value3:1,
+          value4:2,
+          value5:1,
+          value6:2,
+          value7:1,
+          value8:2,
+          value9:1,
+          value10:2,
+        },{
+          buwei: '13.汇总主控板毒害模块通信电路',
+          name1:313,
+          name2:313,
+          name3:313,
+          name4:313,
+          name5:313,
+          name6:313,
+          name7:313,
+          name8:313,
+          name9:313,
+          name10:313,
+          value1:2,
+          value2:1,
+          value3:1,
+          value4:2,
+          value5:1,
+          value6:2,
+          value7:1,
+          value8:2,
+          value9:1,
+          value10:2,
+        },{
+          gzxx: '不能正常工作',
+          buwei: '14.外壳及零件',
+          name1:314,
+          name2:314,
+          name3:314,
+          name4:314,
+          name5:314,
+          name6:314,
+          name7:314,
+          name8:314,
+          name9:314,
+          name10:314,
+          value1:2,
+          value2:1,
+          value3:1,
+          value4:2,
+          value5:1,
+          value6:2,
+          value7:1,
+          value8:2,
+          value9:1,
+          value10:2,
+        },{
+          gzxx: '电压低',
+          buwei: '15.供电模块',
+          name1:315,
+          name2:315,
+          name3:315,
+          name4:315,
+          name5:315,
+          name6:315,
+          name7:315,
+          name8:315,
+          name9:315,
+          name10:315,
+          value1:2,
+          value2:1,
+          value3:1,
+          value4:2,
+          value5:1,
+          value6:2,
+          value7:1,
+          value8:2,
+          value9:1,
+          value10:2,
+        },{
+          gzxx: '无法开机',
+          buwei: '16.DC/DC',
+          name1:316,
+          name2:316,
+          name3:316,
+          name4:316,
+          name5:316,
+          name6:316,
+          name7:316,
+          name8:316,
+          name9:316,
+          name10:316,
+          value1:2,
+          value2:1,
+          value3:1,
+          value4:2,
+          value5:1,
+          value6:2,
+          value7:1,
+          value8:2,
+          value9:1,
+          value10:2,
+        }]
+      }
+    }
+  },
+  created() {
+    this.getList();
+    //this.getDeptTree();
+    this.getConfigKey("sys.user.initPassword").then(response => {
+      this.initPassword = response.msg;
+    });
+  },
+  methods: {
+    objectSpanMethod({ row, column, rowIndex, columnIndex }) {
+      // console.log(this.selectedEquip+'@@@')
+      //第一列型号
+      if(columnIndex === 0) {
+        if(this.selectedEquip==2){
+          if(rowIndex==0){
+            return { rowspan: 13, colspan: 1 };
+          }
+          return { rowspan: 0, colspan: 0 };
+        }else if(this.selectedEquip==3){
+          if(rowIndex==0){
+            return { rowspan: 16, colspan: 1 };
+          }
+          return { rowspan: 0, colspan: 0};
+        }else{
+          if(rowIndex==0){
+            return { rowspan: 11, colspan: 1 };
+          }else if(rowIndex==11){
+            return { rowspan: 13, colspan: 1 };
+          }else if(rowIndex==24){
+            return { rowspan: 16, colspan: 1 };
+          }else{
+            return { rowspan: 0, colspan: 0 };
+          }
+        }
+      }
+
+      //第二列故障现象
+      if(columnIndex === 1) {
+        if(this.selectedEquip==2){
+          // console.log(rowIndex+'####')
+          if(rowIndex<9 && rowIndex % 2 === 0){
+            return { rowspan: 2, colspan: 1 };
+          }else if((rowIndex>9&&rowIndex<13)){
+            return { rowspan: 1, colspan: 1 };
+          }else{
+            return { rowspan: 0, colspan: 0 };
+          } 
+        }else if(this.selectedEquip==3){
+          if(rowIndex<7 && rowIndex % 2 === 0){
+            return { rowspan: 2, colspan: 1 };
+          }else if((rowIndex==8)){
+            return { rowspan: 3, colspan: 1 };
+          }else if(rowIndex==11){
+            return { rowspan: 2, colspan: 1 };
+          }else if(rowIndex>12 && rowIndex<16){
+            return { rowspan: 1, colspan: 1 };
+          }else{
+            return { rowspan: 0, colspan: 0 };
+          } 
+        }else{
+          if(rowIndex<7 && rowIndex % 2 === 0){
+            return { rowspan: 2, colspan: 1 };
+          }else if((rowIndex>7&&rowIndex<11) || (rowIndex>20&&rowIndex<24) || (rowIndex>36)){
+            return { rowspan: 1, colspan: 1 };
+          }else if((rowIndex==35) || (rowIndex>10 && rowIndex<20) && rowIndex % 2 === 1){
+            return { rowspan: 2, colspan: 1 };
+          }else if(rowIndex>23 && rowIndex<32 && rowIndex % 2 === 0){
+            return { rowspan: 2, colspan: 1 };
+          }else if(rowIndex==32){
+            return { rowspan: 3, colspan: 1 };
+          }else{
+            return { rowspan: 0, colspan: 0 };
+          }
+        }
+        
+      }
+      //故障部位 和 选择
+      if(columnIndex === 2 || columnIndex === 3){
+        //return { rowspan: 1, colspan: 1 };
+      }
+    },
+    
+    objectSpanMethod1({ row, column, rowIndex, columnIndex }) {
+      //第二列故障现象
+      if(columnIndex === 0) {
+        if(rowIndex<7 && rowIndex % 2 === 0){
+          return { rowspan: 2, colspan: 1 };
+        }else if((rowIndex>7&&rowIndex<11) || (rowIndex>20&&rowIndex<24) || (rowIndex>36)){
+          return { rowspan: 1, colspan: 1 };
+        }else if((rowIndex==35) || (rowIndex>10 && rowIndex<20) && rowIndex % 2 === 1){
+          return { rowspan: 2, colspan: 1 };
+        }else if(rowIndex>23 && rowIndex<32 && rowIndex % 2 === 0){
+          return { rowspan: 2, colspan: 1 };
+        }else if(rowIndex==32){
+          return { rowspan: 3, colspan: 1 };
+        }else{
+          return { rowspan: 0, colspan: 0 };
+        }
+      }
+    },
+    // 根据选择的option获取新的数据
+    // getNewTableData(option) {
+    //   // 逻辑处理返回新的数据数组
+    //   return [
+    //     // ...新数据
+    //   ];
+    // },
+    toggleSelection(rows) {
+      if (rows) {
+        rows.forEach(row => {
+          this.$refs.multipleTable.toggleRowSelection(row);
+          console.log(row.ids+'###')
+          console.log(row.name+'@@@')
+        });
+      } else {
+        this.$refs.multipleTable.clearSelection();
+      }
+    },
+    handleSelectionRow(val) {
+      this.multipleSelection = val;
+    },
+    /** 查询用户列表 */
+    getList() {
+      this.loading = true;
+      listUser(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
+          //将返回值注释
+          this.userList = response.rows;
+          this.total = response.total;
+          this.loading = false;
+        }
+      );
+    },
+    /** 查询部门下拉树结构 */
+    getDeptTree() {
+      deptTreeSelect().then(response => {
+        this.deptOptions = response.data;
+      });
+    },
+    // 筛选节点
+    filterNode(value, data) {
+      if (!value) return true;
+      return data.label.indexOf(value) !== -1;
+    },
+    // 节点单击事件
+    handleNodeClick(data) {
+      this.queryParams.deptId = data.id;
+      this.handleQuery();
+    },
+    // 用户状态修改
+    handleStatusChange(row) {
+      let text = row.status === "0" ? "启用" : "停用";
+      this.$modal.confirm('确认要"' + text + '""' + row.userName + '"用户吗?').then(function() {
+        return changeUserStatus(row.userId, row.status);
+      }).then(() => {
+        this.$modal.msgSuccess(text + "成功");
+      }).catch(function() {
+        row.status = row.status === "0" ? "1" : "0";
+      });
+    },
+    //清除故障
+    clearFaultChange(row,number,nametext){
+      console.log()
+      // console.log(nametext+'###')
+      // console.log(row[nametext]+'@@@')
+      // console.log(row.name1+'@@@')
+      let text1 = '清除所有模拟器故障';
+      console.log(nametext + '###name1');
+      if(nametext != 'all'){
+        text1 = '清除'+ number +'号坐席模拟器故障';
+      }
+      this.$modal.confirm('确认要"' + text1 + '"吗?').then(function() {
+        // return changeUserStatus(row.userId, row.status);
+      }).then(() => {
+        this.$modal.msgSuccess(text1 + "成功");
+      }).catch(function() {
+        // row.status = row.status === "0" ? "1" : "0";
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.zijianopen = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        userId: undefined,
+        deptId: undefined,
+        userName: undefined,
+        nickName: undefined,
+        password: undefined,
+        phonenumber: undefined,
+        email: undefined,
+        sex: undefined,
+        status: "0",
+        remark: undefined,
+        postIds: [],
+        roleIds: []
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.dateRange = [];
+      this.resetForm("queryForm");
+      this.queryParams.deptId = undefined;
+      this.$refs.tree.setCurrentKey(null);
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.userId);
+      this.single = selection.length != 1;
+      this.multiple = !selection.length;
+    },
+    // 更多操作触发
+    handleCommand(command, row) {
+      switch (command) {
+        case "handleResetPwd":
+          this.handleResetPwd(row);
+          break;
+        case "handleAuthRole":
+          this.handleAuthRole(row);
+          break;
+        default:
+          break;
+      }
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+
+      this.reset();
+      getUser().then(response => {
+        this.postOptions = response.posts;
+        this.roleOptions = response.roles;
+        this.open = true;
+        this.title = "新增训练任务";
+        this.form.password = this.initPassword;
+      });
+    },
+    /* 故障设置自检 **/
+    handleInspect() {
+      //this.reset();
+      getUser().then(response => {
+        //this.postOptions = response.posts;
+        //this.roleOptions = response.roles;
+        this.zijianopen = true;
+        this.title = "故障设置自检";
+      });
+    },
+
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const userId = row.userId || this.ids;
+      getUser(userId).then(response => {
+        this.form = response.data;
+        this.postOptions = response.posts;
+        this.roleOptions = response.roles;
+        this.$set(this.form, "postIds", response.postIds);
+        this.$set(this.form, "roleIds", response.roleIds);
+        this.open = true;
+        this.title = "修改用户";
+        this.form.password = "";
+      });
+    },
+    /** 详情按钮操作 */
+    handleView(row) {
+      this.reset();
+      const userId = row.userId || this.ids;
+      getUser(userId).then(response => {
+        this.form = response.data;
+        this.openview = true;
+        this.title = "任务详情";
+      });
+    },
+
+    /** 重置密码按钮操作 */
+    handleResetPwd(row) {
+      this.$prompt('请输入"' + row.userName + '"的新密码', "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        closeOnClickModal: false,
+        inputPattern: /^.{5,20}$/,
+        inputErrorMessage: "用户密码长度必须介于 5 和 20 之间",
+        inputValidator: (value) => {
+          if (/<|>|"|'|\||\\/.test(value)) {
+            return "不能包含非法字符:< > \" ' \\\ |"
+          }
+        },
+      }).then(({ value }) => {
+          resetUserPwd(row.userId, value).then(response => {
+            this.$modal.msgSuccess("修改成功,新密码是:" + value);
+          });
+        }).catch(() => {});
+    },
+    /** 分配角色操作 */
+    handleAuthRole: function(row) {
+      const userId = row.userId;
+      this.$router.push("/simulator/user-auth/role/" + userId);
+    },
+    /** 提交按钮 */
+    submitForm: function() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.userId != undefined) {
+            updateUser(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addUser(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const userIds = row.userId || this.ids;
+      this.$modal.confirm('是否确认删除用户编号为"' + userIds + '"的数据项?').then(function() {
+        return delUser(userIds);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    //训练任务下发
+    handleIssued(row) {
+      const userIds = row.userId || this.ids;
+      this.$modal.confirm('是否确定编号为"' + userIds + '"的训练任务?').then(function() {
+        //return delUser(userIds);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('simulator/user/export', {
+        ...this.queryParams
+      }, `user_${new Date().getTime()}.xlsx`)
+    },
+    /** 导入按钮操作 */
+    handleImport() {
+      this.upload.title = "用户导入";
+      this.upload.open = true;
+    },
+    /** 下载模板操作 */
+    importTemplate() {
+      this.download('simulator/user/importTemplate', {
+      }, `user_template_${new Date().getTime()}.xlsx`)
+    },
+    // 文件上传中处理
+    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();
+    },
+    // 提交上传文件
+    submitFileForm() {
+      this.$refs.upload.submit();
+    }
+  }
+};
+</script>

+ 1092 - 0
ruoyi-ui/src/views/peoples/trains/index.vue

@@ -0,0 +1,1092 @@
+<template>
+  <div class="app-container">
+    <el-row>
+      <!--用户数据1-->
+        <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+          <el-form-item label="练习名称" prop="userName">
+            <el-input
+              v-model="queryParams.userName"
+              placeholder="请输入练习名称"
+              clearable
+              style="width: 150px"
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+          <el-form-item label="练习状态" prop="status">
+            <el-select
+              v-model="queryParams.status"
+              placeholder="练习状态"
+              clearable
+              style="width: 150px"
+            >
+              <el-option
+                v-for="dict in dict.type.sys_normal_disable"
+                :key="dict.value"
+                :label="dict.label"
+                :value="dict.value"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="练习时间">
+            <el-date-picker
+              v-model="dateRange"
+              style="width: 240px"
+              value-format="yyyy-MM-dd"
+              type="daterange"
+              range-separator="-"
+              start-placeholder="开始日期"
+              end-placeholder="结束日期"
+            ></el-date-picker>
+          </el-form-item>
+          <el-form-item label="模拟器类型" prop="userName">
+            <el-input
+              v-model="queryParams.userName"
+              placeholder="请输入模拟器类型"
+              clearable
+              style="width: 240px"
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+          <el-form-item label="创建时间">
+            <el-date-picker
+              style="width: 240px"
+              value-format="yyyy-MM-dd"
+              type="daterange"
+              range-separator="-"
+              start-placeholder="开始日期"
+              end-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-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="['simulator:task: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="['simulator:user: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="['simulator:user:remove']"
+            >删除</el-button>
+          </el-col>
+
+          <el-col :span="1.5">
+            <el-button
+              type="warning"
+              plain
+              icon="el-icon-s-operation"
+              size="mini"
+              :disabled="single"
+              @click="handleKaoshi"
+            >当前练习</el-button>
+          </el-col>
+          
+          <right-toolbar :showSearch.sync="showSearch" @queryTable="getList" :columns="columns"></right-toolbar>
+        </el-row>
+
+        <el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange">
+          <el-table-column type="selection" width="50" align="center" />
+          <!-- <el-table-column label="编号" align="center" key="userId" prop="userId" v-if="columns[0].visible" /> -->
+          <el-table-column label="练习名称" align="center" key="userName" prop="userName" v-if="columns[1].visible" :show-overflow-tooltip="true" />
+          <el-table-column label="练习时间" align="center" key="kaoshiTime" prop="kaoshiTime" v-if="columns[2].visible" :show-overflow-tooltip="true" />
+          <el-table-column label="模拟器类型" align="center" key="liexing" prop="liexing" v-if="columns[3].visible" :show-overflow-tooltip="true" />
+          <el-table-column label="创建老师" align="center" key="creater" prop="creater" v-if="columns[4].visible" :show-overflow-tooltip="true" />
+          <el-table-column label="练习状态" align="center" key="status" v-if="columns[5].visible">
+            <template slot-scope="scope">
+              <el-switch
+                v-model="scope.row.status"
+                active-value="0"
+                inactive-value="1"
+                @change="handleStatusChange(scope.row)"
+              ></el-switch>
+            </template>
+          </el-table-column>
+          <el-table-column label="创建时间" align="center" prop="createTime" v-if="columns[6].visible" width="160">
+            <template slot-scope="scope">
+              <span>{{ parseTime(scope.row.createTime) }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column
+            label="操作"
+            align="center"
+            width="160"
+            class-name="small-padding fixed-width"
+          >
+            <template slot-scope="scope">
+              <el-button
+                size="mini"
+                type="text"
+                icon="el-icon-edit"
+                @click="handleUpdate(scope.row)"
+                v-hasPermi="['simulator:user:edit']"
+              >修改</el-button>
+              <el-button
+                size="mini"
+                type="text"
+                icon="el-icon-delete"
+                @click="handleDelete(scope.row)"
+                v-hasPermi="['simulator:user: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-row>
+
+    <!-- 添加或修改用户配置对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="70%" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="型号">
+              <el-select v-model="selectedEquip"  placeholder="请选择模拟器类型" style="width: 100%;">
+                <el-option
+                  value="请选择"
+                >请选择</el-option>
+                <el-option
+                  v-for="dict in dict.type.sim_equip_type"
+                  :key="dict.value"
+                  :label="dict.label"
+                  :value="dict.value"
+                ></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="出题方式" prop="userName">
+              <el-select v-model="selectedEquip"  placeholder="请选择出题方式" style="width: 70%;">
+                <el-option
+                  value="请选择"
+                >请选择</el-option>
+                <el-option
+                  v-for="dict in dict.type.sim_equip_type"
+                  :key="dict.value"
+                  :label="dict.label"
+                  :value="dict.value"
+                ></el-option>
+              </el-select>
+              <el-button type="primary" round style="margin-left: 5%;" @click="handleSelectType">自选考题编辑</el-button>
+            </el-form-item>
+          </el-col>
+          
+          <el-col :span="12">
+            <el-form-item label="日期范围" prop="field101">
+              <el-date-picker type="daterange" v-model="form.field101" format="yyyy-MM-dd"
+                value-format="yyyy-MM-dd" :style="{width: '100%'}" start-placeholder="开始日期" end-placeholder="结束日期"
+                range-separator="至" clearable></el-date-picker>
+            </el-form-item>
+          </el-col>
+
+          <el-col :span="12">
+            <el-form-item label="练习名称" prop="userName">
+              <el-input  placeholder="请输入练习名称" maxlength="30" />
+            </el-form-item>
+          </el-col>
+
+
+          <el-col :span="12">
+            <el-form-item label="练习时长" prop="userName">
+              <el-input  placeholder="请输入练习时长" maxlength="30" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+
+      <el-descriptions title="班级列表" :column="3" ></el-descriptions>
+      <el-row :gutter="20">
+        <el-col :xs="24">
+          <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="['system:user: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="['system:user: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="['system:user:remove']"
+              >删除</el-button>
+            </el-col>
+            
+
+
+            <right-toolbar :showSearch.sync="showSearch" @queryTable="getList" :columns="columns"></right-toolbar>
+          </el-row>
+          <el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange">
+            <el-table-column type="selection" width="50" align="center" />
+            <el-table-column label="区队/班级" align="center" key="className" prop="className" v-if="columns[0].visible" :show-overflow-tooltip="true" />
+            <el-table-column label="专业名称" align="center" key="majorName" prop="majorName" v-if="columns[1].visible" :show-overflow-tooltip="true" />
+            <el-table-column label="全部学员数量" align="center" key="remark" prop="remark" v-if="columns[2].visible" :show-overflow-tooltip="true" />
+            <el-table-column
+              label="操作"
+              align="center"
+              width="160"
+              class-name="small-padding fixed-width"
+            >
+              <template slot-scope="scope">
+                <el-button
+                  size="mini"
+                  type="text"
+                  icon="el-icon-edit"
+                  @click="handleUpdate(scope.row)"
+                  v-hasPermi="['system:user:edit']"
+                >修改</el-button>
+                <el-button
+                  size="mini"
+                  type="text"
+                  icon="el-icon-delete"
+                  @click="handleDelete(scope.row)"
+                  v-hasPermi="['system:user: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-col>
+      </el-row>
+
+
+      <h4 class="h4" style="font-size: 16px;font-weight: bold;margin-left: 2%;">统计情况</h4>
+      <div class="shixiang">
+          <div>本次考试班级数量:2</div>
+          <div>计划参加考试学员数量:34</div>
+          <div>每批次考试学员数量:34</div>
+          <div>计划考试批次:5</div>
+      </div>
+
+      <div slot="footer" class="dialog-footer" style="margin-top: 10%;">
+        <el-button type="primary" @click="submitForm" >添加练习</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+
+    <!-- 自选题目编辑 -->
+    <el-dialog :title="title" :visible.sync="selectopen" width="70%" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="型号">
+              <el-select v-model="selectedEquip"  placeholder="请选择模拟器型号">
+                <el-option
+                  value="请选择"
+                >请选择</el-option>
+                <el-option
+                  v-for="dict in dict.type.sim_equip_type"
+                  :key="dict.value"
+                  :label="dict.label"
+                  :value="dict.value"
+                ></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <div style="text-align: right;">
+            <el-button @click="toggleSelection(tableData_tm)">选择全部</el-button>
+            <el-button @click="toggleSelection()">取消选择</el-button>
+          </div>
+        </el-row>
+        
+        <el-table 
+          :data="tableData_tm" border ref="multipleTable" @selection-change="handleSelectionRow" 
+          :span-method="objectSpanMethod" 
+          style="width:100%;text-align:center;margin-left:10px; margin-top:10px">
+          <el-table-column
+            prop="xinghao"
+            label="型号">
+          </el-table-column>
+          <el-table-column
+            prop="xianxiang"
+            label="故障现象">
+          </el-table-column>
+          <el-table-column
+            prop="name"
+            label="故障部位">
+          </el-table-column>
+          <el-table-column
+          type="selection" prop="ids"
+            label="ID"
+          width="55"></el-table-column>
+        </el-table>
+      </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>
+<style>
+.el-table__header tr th .cell{
+  text-align: center;
+}
+.el-table__row .cell {
+  text-align: center;
+}
+.shixiang{
+  margin-left: 2%;
+  height: 30px;
+  line-height: 30px;
+}
+</style>
+<script>
+import { listUser, getUser, delUser, addUser, updateUser, resetUserPwd, changeUserStatus, deptTreeSelect } from "@/api/system/user";
+import { getToken } from "@/utils/auth";
+import Treeselect from "@riophae/vue-treeselect";
+import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+
+export default {
+  name: "Task",
+  dicts: ['sim_equip_type'],
+  components: { Treeselect },
+  data() {
+    return {
+      multipleSelection: [],
+      selectedEquip: '',
+      selectedZjEquip: '',
+      tableData_tm: [
+        {
+          ids:1,
+          xinghao: 'FZD04B型侦毒器',
+          xianxiang: '开机无响应',
+          name: '1.电源开关',
+        },{
+          ids:2,
+          name: '2.DC/DC转换芯片',
+        },{
+          ids:3,
+          xianxiang: '开机后按抽气开关,微电机不工作',
+          name: '3.微电机',
+        },{
+          ids:4,
+          name: '4.Q2',
+        },{
+          ids:5,
+          xianxiang: '抽气流量不足',
+          name: '5.滤网',
+        },{
+          ids:6,
+          name: '6.调速电位器',
+        },{
+          ids:7,
+          xianxiang: '开机后按下加热开关,加热灯不亮,也未加热',
+          name: '7.加热指示灯',
+        },{
+          ids:8,
+          name: '8.热敏开关',
+        },
+        {
+          ids:9,
+          xianxiang: '不能正常工作',
+          name: '9.外壳及零件',
+        },{
+          ids:10,
+          xianxiang: '电压低',
+          name: '10.供电模块',
+        },{
+          ids:11,
+          xianxiang: '抽气指示灯不亮',
+          name: '11.抽气指示灯',
+        },
+
+        {
+          ids:21,
+          xinghao:'FZB006型毒剂报警器',
+          xianxiang: '仪器无法开机',
+          name: '1.薄膜开关FPC排线',
+        },{
+          ids:22,
+          name: '2.主控板开机电路',
+        },
+        {
+          ids:23,
+          xianxiang: '蜂鸣器自检时,声音异常',
+          name: '3.蜂鸣器出声口',
+        },{
+          ids:24,
+          name: '4.接口接线板',
+        },{
+          ids:25,
+          xianxiang: '仪器进入检测界面后,通入检测剂不报警',
+          name: '5.检测剂',
+        },{
+          ids:26,
+          name: '6.主控板信号采集电路',
+        },
+        {
+          ids:27,
+          xianxiang: '显示屏无显示',
+          name: '7.主控板显示屏供电电路',
+        },{
+          ids:28,
+          name: '8.显示屏',
+        },
+        {
+          ids:29,
+          xianxiang: '长时间不进入“检测中”',
+          name: '9.干燥管',
+        },{
+          ids:210,
+          name: '10.维护管',
+        },
+        {
+          ids:211,
+          xianxiang: '不能正常工作',
+          name: '11.外壳及零件',
+        },{
+          ids:212,
+          xianxiang: '电压低',
+          name: '12.供电模块',
+        },{
+          ids:213,
+          xianxiang: '无法开机',
+          name: '13.DC/DC',
+        },
+        
+        {
+          ids:31,
+          xinghao: '防化兵用毒剂报警器',
+          xianxiang: '仪器无法开机',
+          name: '1.FFC排线',
+        },{
+          ids:32,
+          name: '2.汇总主控板',
+        },{
+          ids:33,
+          xianxiang: '开机后,显示屏无显示',
+          name: '3.显控报警板',
+        },{
+          ids:34,
+          name: '4.显示屏',
+        },{
+          ids:35,
+          xianxiang: '检测状态下模拟剂不报警',
+          name: '5.汇总主控板信号采集电路',
+        },{
+          ids:36,
+          name: '6.检测剂',
+        },{
+          ids:37,
+          xianxiang: '长时间不能进入检测状态',
+          name: '7.干燥管',
+        },{
+          ids:38,
+          name: '8.维护管',
+        },{
+          ids:39,
+          xianxiang: '固液检测/气体检测模式切换失败',
+          name: '9.固液检测单元与主控板连接线',
+        },{
+          ids:310,
+          name: '10.汇总主控板固液通信电路',
+        },{
+          ids:311,
+          name: '11.切换按键',
+        },{
+          ids:312,
+          xianxiang: '有毒有害气体检测模块不报警',
+          name: '12.高压驱动板与汇总主控板连接线',
+        },{
+          ids:313,
+          name: '13.汇总主控板毒害模块通信电路',
+        },{
+          ids:314,
+          xianxiang: '不能正常工作',
+          name: '14.外壳及零件',
+        },{
+          ids:315,
+          xianxiang: '电压低',
+          name: '15.供电模块',
+        },{
+          ids:316,
+          xianxiang: '无法开机',
+          name: '16.DC/DC',
+        },
+      ],
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 用户表格数据
+      userList: null,
+      // 弹出层标题
+      title: "",
+      // 部门树选项
+      deptOptions: undefined,
+      // 是否显示弹出层
+      open: false,
+      //自检弹出框
+      zijianopen:false,
+      // 自选题目编辑
+      selectopen:false,
+      // 部门名称
+      deptName: undefined,
+      // 默认密码
+      initPassword: undefined,
+      // 日期范围
+      dateRange: [],
+      // 岗位选项
+      postOptions: [],
+      // 角色选项
+      roleOptions: [],
+      // 表单参数
+      form: {
+        field101: null,
+      },
+      defaultProps: {
+        children: "children",
+        label: "label"
+      },
+      // 用户导入参数
+      upload: {
+        // 是否显示弹出层(用户导入)
+        open: false,
+        // 弹出层标题(用户导入)
+        title: "",
+        // 是否禁用上传
+        isUploading: false,
+        // 是否更新已经存在的用户数据
+        updateSupport: 0,
+        // 设置上传的请求头部
+        headers: { Authorization: "Bearer " + getToken() },
+        // 上传的地址
+        url: process.env.VUE_APP_BASE_API + "/simulator/user/importData"
+      },
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        userName: undefined,
+        phonenumber: undefined,
+        status: undefined,
+        deptId: undefined
+      },
+      // 列信息
+      columns: [
+        { key: 0, label: `编号`, visible: true },
+        { key: 1, label: `考试名称`, visible: true },
+        { key: 2, label: `考试时间`, visible: true },
+        { key: 3, label: `模拟器类型`, visible: true },
+        { key: 4, label: `考试状态`, visible: true },
+        { key: 5, label: `创建老师`, visible: true },
+        { key: 6, label: `创建时间`, visible: true }
+      ],
+      // 表单校验
+      rules: {
+      }
+    };
+  },
+  watch: {
+    // 根据名称筛选部门树
+    deptName(val) {
+      this.$refs.tree.filter(val);
+    },
+    selectedEquip(newValue) {
+      // console.log(newValue);
+      // 根据newValue更新tableData
+      // this.tableData = this.getNewTableData(newValue);
+      // console.log(this.getNewTableData(newValue);
+      if(newValue == 1){
+        this.tableData_tm = [{
+          ids:1,
+          xinghao: 'FZD04B型侦毒器',
+          xianxiang: '开机无响应',
+          name: '1.电源开关',
+        },{
+          ids:2,
+          name: '2.DC/DC转换芯片',
+        },{
+          ids:3,
+          xianxiang: '开机后按抽气开关,微电机不工作',
+          name: '3.微电机',
+        },{
+          ids:4,
+          name: '4.Q2',
+        },{
+          ids:5,
+          xianxiang: '抽气流量不足',
+          name: '5.滤网',
+        },{
+          ids:6,
+          name: '6.调速电位器',
+        },{
+          ids:7,
+          xianxiang: '开机后按下加热开关,加热灯不亮,也未加热',
+          name: '7.加热指示灯',
+        },{
+          ids:8,
+          name: '8.热敏开关',
+        },
+        {
+          ids:9,
+          xianxiang: '不能正常工作',
+          name: '9.外壳及零件',
+        },{
+          ids:10,
+          xianxiang: '电压低',
+          name: '10.供电模块',
+        },{
+          ids:11,
+          xianxiang: '抽气指示灯不亮',
+          name: '11.抽气指示灯',
+        }];
+      }else if(newValue == 2){
+        this.tableData_tm = [{
+          ids:21,
+          xinghao:'FZB006型毒剂报警器',
+          xianxiang: '仪器无法开机',
+          name: '1.薄膜开关FPC排线',
+        },{
+          ids:22,
+          name: '2.主控板开机电路',
+        },
+        {
+          ids:23,
+          xianxiang: '蜂鸣器自检时,声音异常',
+          name: '3.蜂鸣器出声口',
+        },{
+          ids:24,
+          name: '4.接口接线板',
+        },{
+          ids:25,
+          xianxiang: '仪器进入检测界面后,通入检测剂不报警',
+          name: '5.检测剂',
+        },{
+          ids:26,
+          name: '6.主控板信号采集电路',
+        },
+        {
+          ids:27,
+          xianxiang: '显示屏无显示',
+          name: '7.主控板显示屏供电电路',
+        },{
+          ids:28,
+          name: '8.显示屏',
+        },
+        {
+          ids:29,
+          xianxiang: '长时间不进入“检测中”',
+          name: '9.干燥管',
+        },{
+          ids:210,
+          name: '10.维护管',
+        },
+        {
+          ids:211,
+          xianxiang: '不能正常工作',
+          name: '11.外壳及零件',
+        },{
+          ids:212,
+          xianxiang: '电压低',
+          name: '12.供电模块',
+        },{
+          ids:213,
+          xianxiang: '无法开机',
+          name: '13.DC/DC',
+        }]
+      }else if(newValue == 3){
+        this.tableData_tm = [{
+          ids:31,
+          xinghao: '防化兵用毒剂报警器',
+          xianxiang: '仪器无法开机',
+          name: '1.FFC排线',
+        },{
+          ids:32,
+          name: '2.汇总主控板',
+        },{
+          ids:33,
+          xianxiang: '开机后,显示屏无显示',
+          name: '3.显控报警板',
+        },{
+          ids:34,
+          name: '4.显示屏',
+        },{
+          ids:35,
+          xianxiang: '检测状态下模拟剂不报警',
+          name: '5.汇总主控板信号采集电路',
+        },{
+          ids:36,
+          name: '6.检测剂',
+        },{
+          ids:37,
+          xianxiang: '长时间不能进入检测状态',
+          name: '7.干燥管',
+        },{
+          ids:38,
+          name: '8.维护管',
+        },{
+          ids:39,
+          xianxiang: '固液检测/气体检测模式切换失败',
+          name: '9.固液检测单元与主控板连接线',
+        },{
+          ids:310,
+          name: '10.汇总主控板固液通信电路',
+        },{
+          ids:311,
+          name: '11.切换按键',
+        },{
+          ids:312,
+          xianxiang: '有毒有害气体检测模块不报警',
+          name: '12.高压驱动板与汇总主控板连接线',
+        },{
+          ids:313,
+          name: '13.汇总主控板毒害模块通信电路',
+        },{
+          ids:314,
+          xianxiang: '不能正常工作',
+          name: '14.外壳及零件',
+        },{
+          ids:315,
+          xianxiang: '电压低',
+          name: '15.供电模块',
+        },{
+          ids:316,
+          xianxiang: '无法开机',
+          name: '16.DC/DC',
+        }]
+      }
+
+    },
+
+
+  },
+  created() {
+    this.getList();
+    //this.getDeptTree();
+    this.getConfigKey("sys.user.initPassword").then(response => {
+      this.initPassword = response.msg;
+    });
+  },
+  methods: {
+    objectSpanMethod({ row, column, rowIndex, columnIndex }) {
+      // console.log(this.selectedEquip+'@@@')
+      //第一列型号
+      if(columnIndex === 0) {
+        if(this.selectedEquip==2){
+          if(rowIndex==0){
+            return { rowspan: 13, colspan: 1 };
+          }
+          return { rowspan: 0, colspan: 0 };
+        }else if(this.selectedEquip==3){
+          if(rowIndex==0){
+            return { rowspan: 16, colspan: 1 };
+          }
+          return { rowspan: 0, colspan: 0};
+        }else{
+          if(rowIndex==0){
+            return { rowspan: 11, colspan: 1 };
+          }else if(rowIndex==11){
+            return { rowspan: 13, colspan: 1 };
+          }else if(rowIndex==24){
+            return { rowspan: 16, colspan: 1 };
+          }else{
+            return { rowspan: 0, colspan: 0 };
+          }
+        }
+      }
+
+      //第二列故障现象
+      if(columnIndex === 1) {
+        if(this.selectedEquip==2){
+          // console.log(rowIndex+'####')
+          if(rowIndex<9 && rowIndex % 2 === 0){
+            return { rowspan: 2, colspan: 1 };
+          }else if((rowIndex>9&&rowIndex<13)){
+            return { rowspan: 1, colspan: 1 };
+          }else{
+            return { rowspan: 0, colspan: 0 };
+          } 
+        }else if(this.selectedEquip==3){
+          if(rowIndex<7 && rowIndex % 2 === 0){
+            return { rowspan: 2, colspan: 1 };
+          }else if((rowIndex==8)){
+            return { rowspan: 3, colspan: 1 };
+          }else if(rowIndex==11){
+            return { rowspan: 2, colspan: 1 };
+          }else if(rowIndex>12 && rowIndex<16){
+            return { rowspan: 1, colspan: 1 };
+          }else{
+            return { rowspan: 0, colspan: 0 };
+          } 
+        }else{
+          if(rowIndex<7 && rowIndex % 2 === 0){
+            return { rowspan: 2, colspan: 1 };
+          }else if((rowIndex>7&&rowIndex<11) || (rowIndex>20&&rowIndex<24) || (rowIndex>36)){
+            return { rowspan: 1, colspan: 1 };
+          }else if((rowIndex==35) || (rowIndex>10 && rowIndex<20) && rowIndex % 2 === 1){
+            return { rowspan: 2, colspan: 1 };
+          }else if(rowIndex>23 && rowIndex<32 && rowIndex % 2 === 0){
+            return { rowspan: 2, colspan: 1 };
+          }else if(rowIndex==32){
+            return { rowspan: 3, colspan: 1 };
+          }else{
+            return { rowspan: 0, colspan: 0 };
+          }
+        }
+        
+      }
+      //故障部位 和 选择
+      if(columnIndex === 2 || columnIndex === 3){
+        //return { rowspan: 1, colspan: 1 };
+      }
+    },
+
+    handleSelectionRow(val) {
+      this.multipleSelection = val;
+    },
+    // 根据选择的option获取新的数据
+    // getNewTableData(option) {
+    //   // 逻辑处理返回新的数据数组
+    //   return [
+    //     // ...新数据
+    //   ];
+    // },
+    toggleSelection(rows) {
+      if (rows) {
+        rows.forEach(row => {
+          this.$refs.multipleTable.toggleRowSelection(row);
+          console.log(row.ids+'###')
+          console.log(row.name+'@@@')
+        });
+      } else {
+        this.$refs.multipleTable.clearSelection();
+      }
+    },
+    handleSelectionRow(val) {
+      this.multipleSelection = val;
+    },
+    /** 查询用户列表 */
+    getList() {
+      this.loading = true;
+      listUser(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
+          //将返回值注释
+          this.userList = response.rows;
+          this.total = response.total;
+          this.loading = false;
+        }
+      );
+    },
+    /** 查询部门下拉树结构 */
+    getDeptTree() {
+      deptTreeSelect().then(response => {
+        this.deptOptions = response.data;
+      });
+    },
+    // 筛选节点
+    filterNode(value, data) {
+      if (!value) return true;
+      return data.label.indexOf(value) !== -1;
+    },
+    // 节点单击事件
+    handleNodeClick(data) {
+      this.queryParams.deptId = data.id;
+      this.handleQuery();
+    },
+    // 用户状态修改
+    handleStatusChange(row) {
+      let text = row.status === "0" ? "启用" : "停用";
+      this.$modal.confirm('确认要"' + text + '""' + row.userName + '"用户吗?').then(function() {
+        return changeUserStatus(row.userId, row.status);
+      }).then(() => {
+        this.$modal.msgSuccess(text + "成功");
+      }).catch(function() {
+        row.status = row.status === "0" ? "1" : "0";
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.zijianopen = false;
+      this.selectopen = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        userId: undefined,
+        deptId: undefined,
+        userName: undefined,
+        password: undefined,
+        phonenumber: undefined,
+        email: undefined,
+        sex: undefined,
+        status: "0",
+        remark: undefined,
+        postIds: [],
+        roleIds: []
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.dateRange = [];
+      this.resetForm("queryForm");
+      this.queryParams.deptId = undefined;
+      this.$refs.tree.setCurrentKey(null);
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.userId);
+      this.single = selection.length != 1;
+      this.multiple = !selection.length;
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      getUser().then(response => {
+        this.postOptions = response.posts;
+        this.roleOptions = response.roles;
+        this.open = true;
+        this.title = "新增练习";
+        this.form.password = this.initPassword;
+      });
+    },
+
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const userId = row.userId || this.ids;
+      getUser(userId).then(response => {
+        this.form = response.data;
+        this.postOptions = response.posts;
+        this.roleOptions = response.roles;
+        this.$set(this.form, "postIds", response.postIds);
+        this.$set(this.form, "roleIds", response.roleIds);
+        this.open = true;
+        this.title = "修改练习";
+        this.form.password = "";
+      });
+    },
+
+    /** 当前考试查询 */
+    handleKaoshi(row) {
+      const lianxiId = row.jobId || 0;
+      this.$router.push('/peoples/current/ids/' + lianxiId)
+    },
+
+    /** 总选题目编辑按钮操作 */
+    handleSelectType(row) {
+      this.reset();
+      const userId = row.userId || this.ids;
+      getUser(userId).then(response => {
+        this.form = response.data;
+        this.selectopen = true;
+        // this.open = false;
+        this.title = "选择考题";
+      });
+    },
+    
+    /** 提交按钮 */
+    submitForm: function() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.userId != undefined) {
+            updateUser(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addUser(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const userIds = row.userId || this.ids;
+      this.$modal.confirm('是否确认删除用户编号为"' + userIds + '"的数据项?').then(function() {
+        return delUser(userIds);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+  }
+};
+</script>

+ 1 - 1
ruoyi-ui/src/views/register.vue

@@ -1,7 +1,7 @@
 <template>
   <div class="register">
     <el-form ref="registerForm" :model="registerForm" :rules="registerRules" class="register-form">
-      <h3 class="title">若依后台管理系统</h3>
+      <h3 class="title">维修模拟训练平台</h3>
       <el-form-item prop="username">
         <el-input v-model="registerForm.username" type="text" auto-complete="off" placeholder="账号">
           <svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" />

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

@@ -19,18 +19,18 @@
                 <svg-icon icon-class="phone" />手机号码
                 <div class="pull-right">{{ user.phonenumber }}</div>
               </li>
-              <li class="list-group-item">
+              <!-- <li class="list-group-item">
                 <svg-icon icon-class="email" />用户邮箱
                 <div class="pull-right">{{ user.email }}</div>
               </li>
               <li class="list-group-item">
                 <svg-icon icon-class="tree" />所属部门
                 <div class="pull-right" v-if="user.dept">{{ user.dept.deptName }} / {{ postGroup }}</div>
-              </li>
-              <li class="list-group-item">
+              </li> -->
+              <!-- <li class="list-group-item">
                 <svg-icon icon-class="peoples" />所属角色
                 <div class="pull-right">{{ roleGroup }}</div>
-              </li>
+              </li> -->
               <li class="list-group-item">
                 <svg-icon icon-class="date" />创建日期
                 <div class="pull-right">{{ user.createTime }}</div>

+ 2 - 2
ruoyi-ui/src/views/system/user/profile/userInfo.vue

@@ -6,7 +6,7 @@
     <el-form-item label="手机号码" prop="phonenumber">
       <el-input v-model="form.phonenumber" maxlength="11" />
     </el-form-item>
-    <el-form-item label="邮箱" prop="email">
+    <!-- <el-form-item label="邮箱" prop="email">
       <el-input v-model="form.email" maxlength="50" />
     </el-form-item>
     <el-form-item label="性别">
@@ -14,7 +14,7 @@
         <el-radio label="0">男</el-radio>
         <el-radio label="1">女</el-radio>
       </el-radio-group>
-    </el-form-item>
+    </el-form-item> -->
     <el-form-item>
       <el-button type="primary" size="mini" @click="submit">保存</el-button>
       <el-button type="danger" size="mini" @click="close">关闭</el-button>

+ 2 - 1
ruoyi-ui/vue.config.js

@@ -7,7 +7,7 @@ function resolve(dir) {
 
 const CompressionPlugin = require('compression-webpack-plugin')
 
-const name = process.env.VUE_APP_TITLE || '若依管理系统' // 网页标题
+const name = process.env.VUE_APP_TITLE || '维修模拟训练平台' // 网页标题
 
 const port = process.env.port || process.env.npm_config_port || 80 // 端口
 
@@ -36,6 +36,7 @@ module.exports = {
       // detail: https://cli.vuejs.org/config/#devserver-proxy
       [process.env.VUE_APP_BASE_API]: {
         target: `http://localhost:8080`,
+        // target: `http://120.46.205.190:8080/`,
         changeOrigin: true,
         pathRewrite: {
           ['^' + process.env.VUE_APP_BASE_API]: ''