贾小兵 преди 6 месеца
родител
ревизия
10c08ddf0e
променени са 27 файла, в които са добавени 11860 реда и са изтрити 18 реда
  1. BIN
      ruoyi-ui/src/assets/images/login-background.jpg
  2. 6 6
      ruoyi-ui/src/layout/components/Navbar.vue
  3. 159 2
      ruoyi-ui/src/router/index.js
  4. 11 6
      ruoyi-ui/src/views/login.vue
  5. 111 0
      ruoyi-ui/src/views/people/exam/exam1.vue
  6. 306 0
      ruoyi-ui/src/views/people/exam/exam2.vue
  7. 229 0
      ruoyi-ui/src/views/people/exam/exam3.vue
  8. 681 0
      ruoyi-ui/src/views/people/exam/index.vue
  9. 72 0
      ruoyi-ui/src/views/people/practice/index.vue
  10. 302 0
      ruoyi-ui/src/views/people/practice/practice2.vue
  11. 229 0
      ruoyi-ui/src/views/people/practice/practice3.vue
  12. 238 0
      ruoyi-ui/src/views/people/score/index.vue
  13. 250 0
      ruoyi-ui/src/views/people/train/index.vue
  14. 114 0
      ruoyi-ui/src/views/people/train/train1.vue
  15. 301 0
      ruoyi-ui/src/views/people/train/train2.vue
  16. 229 0
      ruoyi-ui/src/views/people/train/train3.vue
  17. 477 0
      ruoyi-ui/src/views/peoples/classes/index.vue
  18. 395 0
      ruoyi-ui/src/views/peoples/current/index.vue
  19. 1092 0
      ruoyi-ui/src/views/peoples/exams/index.vue
  20. 459 0
      ruoyi-ui/src/views/peoples/major/index.vue
  21. 614 0
      ruoyi-ui/src/views/peoples/present/index.vue
  22. 849 0
      ruoyi-ui/src/views/peoples/score/index.vue
  23. 508 0
      ruoyi-ui/src/views/peoples/student/index.vue
  24. 3132 0
      ruoyi-ui/src/views/peoples/task/index.vue
  25. 1092 0
      ruoyi-ui/src/views/peoples/trains/index.vue
  26. 2 2
      ruoyi-ui/src/views/system/user/profile/index.vue
  27. 2 2
      ruoyi-ui/src/views/system/user/profile/userInfo.vue

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


+ 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>

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

@@ -19,14 +19,14 @@
                 <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> -->
               <li class="list-group-item">
                 <svg-icon icon-class="peoples" />所属角色
                 <div class="pull-right">{{ roleGroup }}</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>