瀏覽代碼

Merge branch 'dev' into dev-api

tom 5 月之前
父節點
當前提交
e78f4ef299
共有 30 個文件被更改,包括 1601 次插入585 次删除
  1. 44 0
      ruoyi-ui/src/api/sim/major.js
  2. 44 0
      ruoyi-ui/src/api/sim/student.js
  3. 44 0
      ruoyi-ui/src/api/sim/teacher.js
  4. 9 9
      ruoyi-ui/src/router/index.js
  5. 2 2
      ruoyi-ui/src/views/login.vue
  6. 2 2
      ruoyi-ui/src/views/people/exam/exam1.vue
  7. 1 1
      ruoyi-ui/src/views/people/exam/exam2.vue
  8. 0 1
      ruoyi-ui/src/views/people/exam/index.vue
  9. 7 16
      ruoyi-ui/src/views/people/practice/index.vue
  10. 1 1
      ruoyi-ui/src/views/people/practice/practice2.vue
  11. 1 1
      ruoyi-ui/src/views/people/train/index.vue
  12. 2 2
      ruoyi-ui/src/views/people/train/train1.vue
  13. 2 2
      ruoyi-ui/src/views/people/train/train2.vue
  14. 3 7
      ruoyi-ui/src/views/peoples/current/index.vue
  15. 101 90
      ruoyi-ui/src/views/peoples/exams/index.vue
  16. 50 175
      ruoyi-ui/src/views/peoples/major/index.vue
  17. 3 7
      ruoyi-ui/src/views/peoples/present/index.vue
  18. 16 22
      ruoyi-ui/src/views/peoples/score/index.vue
  19. 76 109
      ruoyi-ui/src/views/peoples/student/index.vue
  20. 10 10
      ruoyi-ui/src/views/peoples/task/index.vue
  21. 69 91
      ruoyi-ui/src/views/peoples/trains/index.vue
  22. 49 34
      ruoyi-ui/src/views/system/dept/index.vue
  23. 2 2
      ruoyi-ui/src/views/system/user/profile/index.vue
  24. 1 1
      ruoyi-ui/src/views/system/user/profile/userInfo.vue
  25. 117 0
      ruoyi-ui/src/views/teacher/authRole.vue
  26. 513 0
      ruoyi-ui/src/views/teacher/index.vue
  27. 91 0
      ruoyi-ui/src/views/teacher/profile/index.vue
  28. 69 0
      ruoyi-ui/src/views/teacher/profile/resetPwd.vue
  29. 184 0
      ruoyi-ui/src/views/teacher/profile/userAvatar.vue
  30. 88 0
      ruoyi-ui/src/views/teacher/profile/userInfo.vue

+ 44 - 0
ruoyi-ui/src/api/sim/major.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询专业列表
+export function listMajor(query) {
+  return request({
+    url: '/sim/major/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询专业详细
+export function getMajor(majorId) {
+  return request({
+    url: '/sim/major/' + majorId,
+    method: 'get'
+  })
+}
+
+// 新增专业
+export function addMajor(data) {
+  return request({
+    url: '/sim/major',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改专业
+export function updateMajor(data) {
+  return request({
+    url: '/sim/major',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除专业
+export function delMajor(majorId) {
+  return request({
+    url: '/sim/major/' + majorId,
+    method: 'delete'
+  })
+}

+ 44 - 0
ruoyi-ui/src/api/sim/student.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询学生列表
+export function listStudent(query) {
+  return request({
+    url: '/sim/student/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询学生详细
+export function getStudent(userId) {
+  return request({
+    url: '/sim/student/' + userId,
+    method: 'get'
+  })
+}
+
+// 新增学生
+export function addStudent(data) {
+  return request({
+    url: '/sim/student',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改学生
+export function updateStudent(data) {
+  return request({
+    url: '/sim/student',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除学生
+export function delStudent(userId) {
+  return request({
+    url: '/sim/student/' + userId,
+    method: 'delete'
+  })
+}

+ 44 - 0
ruoyi-ui/src/api/sim/teacher.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询教师列表
+export function listTeacher(query) {
+  return request({
+    url: '/sim/teacher/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询教师详细
+export function getTeacher(userId) {
+  return request({
+    url: '/sim/teacher/' + userId,
+    method: 'get'
+  })
+}
+
+// 新增教师
+export function addTeacher(data) {
+  return request({
+    url: '/sim/teacher',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改教师
+export function updateTeacher(data) {
+  return request({
+    url: '/sim/teacher',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除教师
+export function delTeacher(userId) {
+  return request({
+    url: '/sim/teacher/' + userId,
+    method: 'delete'
+  })
+}

+ 9 - 9
ruoyi-ui/src/router/index.js

@@ -97,7 +97,7 @@ export const dynamicRoutes = [
     path: '/people/exam-exam1',
     component: Layout,
     hidden: true,
-    permissions: ['people:exam:edit'],
+    permissions: ['system:user:list'],
     children: [
       {
         path: 'examid/:userId(\\d+)',
@@ -112,7 +112,7 @@ export const dynamicRoutes = [
     path: '/people/exam-exam2',
     component: Layout,
     hidden: true,
-    permissions: ['people:exam:edit'],
+    permissions: ['system:user:list'],
     children: [
       {
         path: 'examid/:userId(\\d+)',
@@ -143,7 +143,7 @@ export const dynamicRoutes = [
     path: '/people/train-train1',
     component: Layout,
     hidden: true,
-    permissions: ['people:exam:edit'],
+    permissions: ['system:user:list'],
     children: [
       {
         path: 'trainid/:userId(\\d+)',
@@ -158,7 +158,7 @@ export const dynamicRoutes = [
     path: '/people/train-train2',
     component: Layout,
     hidden: true,
-    permissions: ['people:train:edit'],
+    permissions: ['system:user:list'],
     children: [
       {
         path: 'trainid/:userId(\\d+)',
@@ -168,12 +168,12 @@ export const dynamicRoutes = [
       }
     ]
   },
-  //得分分析 
+  //得分分析
   {
     path: '/people/train-train3',
     component: Layout,
     hidden: true,
-    permissions: ['people:train:edit'],
+    permissions: ['system:user:list'],
     children: [
       {
         path: 'trainid/:userId(\\d+)',
@@ -190,7 +190,7 @@ export const dynamicRoutes = [
     path: '/people/practice-practice2',
     component: Layout,
     hidden: true,
-    permissions: ['people:practice:edit'],
+    permissions: ['system:user:list'],
     children: [
       {
         path: 'practiceid/:userId(\\d+)',
@@ -200,12 +200,12 @@ export const dynamicRoutes = [
       }
     ]
   },
-//得分分析 
+//得分分析
 {
   path: '/people/practice-practice3',
   component: Layout,
   hidden: true,
-  permissions: ['people:train:edit'],
+  permissions: ['system:user:list'],
   children: [
     {
       path: 'practiceid/:userId(\\d+)',

+ 2 - 2
ruoyi-ui/src/views/login.vue

@@ -73,8 +73,8 @@ export default {
     return {
       codeUrl: "",
       loginForm: {
-        username: "admin",
-        password: "admin123",
+        username: "",
+        password: "",
         rememberMe: false,
         code: "",
         uuid: ""

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

@@ -39,7 +39,7 @@
 </style>
 
 <script>
-import { getAuthRole, updateAuthRole } from "@/api/system/user";
+import { listUser } from "@/api/system/user";
 
 export default {
   name: "AuthRole",
@@ -99,7 +99,7 @@ export default {
     //     this.$modal.msgSuccess("授权成功");
     //     this.close();
     //   });
-    this.$router.push("/people/exam-exam2/examid/" + userId);
+    this.$router.push("/people/exam-exam2/examid/1");
     },
     /** 关闭按钮 */
     close() {

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

@@ -142,7 +142,7 @@
 </style>
 
 <script>
-import { getAuthRole, updateAuthRole } from "@/api/system/user";
+import { listUser } from "@/api/system/user";
 
 export default {
   name: "AuthRole",

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

@@ -117,7 +117,6 @@
                 type="text"
                 icon="el-icon-thumb"
                 @click="handleInto(scope.row)" 
-                v-hasPermi="['simulator:user:remove']"
               >进入</el-button>
             </template>
           </el-table-column>

+ 7 - 16
ruoyi-ui/src/views/people/practice/index.vue

@@ -3,8 +3,12 @@
     <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-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-form-item size="large">
@@ -17,6 +21,7 @@
 export default {
   components: {},
   props: [],
+  dicts: ['sim_equip_type'],
   data() {
     return {
       formData: {
@@ -29,16 +34,6 @@ export default {
           trigger: 'change'
         }],
       },
-      field101Options: [{
-        "label": "选项一",
-        "value": 1
-      }, {
-        "label": "选项二",
-        "value": 2
-      }, {
-        "label": "选项三",
-        "value": 3
-      }],
     }
   },
   computed: {},
@@ -47,10 +42,6 @@ export default {
   mounted() {},
   methods: {
     submitForm() {
-      // this.$refs['elForm'].validate(valid => {
-      //   if (!valid) return
-      //   // TODO 提交表单
-      // })
       const userId = 1;//当前用户
       this.$router.push("/people/practice-practice2/practiceid/" + userId);
     },

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

@@ -142,7 +142,7 @@
 </style>
 
 <script>
-import { getAuthRole, updateAuthRole } from "@/api/system/user";
+import { listUser } from "@/api/system/user";
 
 export default {
   name: "AuthRole",

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

@@ -82,7 +82,7 @@
                 type="text"
                 icon="el-icon-thumb"
                 @click="handleInto(scope.row)" 
-                v-hasPermi="['simulator:user:remove']"
+
               >进入</el-button>
             </template>
           </el-table-column>

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

@@ -38,7 +38,7 @@
 }
 </style>
 <script>
-import { getAuthRole, updateAuthRole } from "@/api/system/user";
+import { listUser } from "@/api/system/user";
 export default {
   name: "AuthRole",
   data() {
@@ -102,7 +102,7 @@ export default {
     //     this.$modal.msgSuccess("授权成功");
     //     this.close();
     //   });
-    this.$router.push("/people/train-train2/trainid/" + userId);
+    this.$router.push("/people/train-train2/trainid/5");
     },
     /** 关闭按钮 */
     close() {

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

@@ -142,7 +142,7 @@
 </style>
 
 <script>
-import { getAuthRole, updateAuthRole } from "@/api/system/user";
+import { listUser } from "@/api/system/user";
 
 export default {
   name: "AuthRole",
@@ -272,7 +272,7 @@ export default {
     //     this.$modal.msgSuccess("授权成功");
     //     this.close();
     //   });
-       this.$router.push("/people/train-train3/trainid/" + userId);
+       this.$router.push("/people/train-train3/trainid/5");
     },
     /** 关闭按钮 */
     close() {

+ 3 - 7
ruoyi-ui/src/views/peoples/current/index.vue

@@ -10,7 +10,6 @@
               icon="el-icon-refresh"
               size="mini"
               @click="refreshTable1"
-              v-hasPermi="['system:user:add']"
             >刷新 </el-button>
           </el-col>
           <el-col :span="1.5">
@@ -19,7 +18,6 @@
               plain
               icon="el-icon-edit"
               size="mini"
-              v-hasPermi="['system:user:edit']"
             >批量确认已送</el-button>
           </el-col>
         </el-row>
@@ -46,14 +44,12 @@
                 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>
@@ -182,7 +178,7 @@
 }
 </style>
 <script>
-import { listUser, getUser, delUser, addUser, updateUser, resetUserPwd, changeUserStatus, deptTreeSelect } from "@/api/system/user";
+import { listStudent, getStudent, delStudent, addStudent, updateStudent } from "@/api/sim/student";
 import { getToken } from "@/utils/auth";
 
 export default {
@@ -306,7 +302,7 @@ export default {
   methods: {
     refreshTable1(){
       this.loading = true;
-      listUser(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
+      listStudent(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
           this.userList = response.rows;
           this.total = response.total;
           this.loading = false;
@@ -316,7 +312,7 @@ export default {
     /** 查询用户列表 */
     getList() {
       this.loading = true;
-      listUser(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
+      listStudent(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
           this.userList = response.rows;
           this.total = response.total;
           this.loading = false;

+ 101 - 90
ruoyi-ui/src/views/peoples/exams/index.vue

@@ -2,7 +2,7 @@
   <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 :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch">
           <el-form-item label="考试名称" prop="userName">
             <el-input
               v-model="queryParams.userName"
@@ -12,12 +12,12 @@
               @keyup.enter.native="handleQuery"
             />
           </el-form-item>
-          <el-form-item label="考试状态" prop="status">
+          <el-form-item label="状态" prop="status">
             <el-select
               v-model="queryParams.status"
-              placeholder="考试状态"
+              placeholder="用户状态"
               clearable
-              style="width: 150px"
+              style="width: 240px"
             >
               <el-option
                 v-for="dict in dict.type.sys_normal_disable"
@@ -39,13 +39,19 @@
             ></el-date-picker>
           </el-form-item>
           <el-form-item label="模拟器类型" prop="userName">
-            <el-input
+            <el-select
               v-model="queryParams.userName"
-              placeholder="请输入模拟器类型"
+              placeholder="模拟器类型"
               clearable
               style="width: 240px"
-              @keyup.enter.native="handleQuery"
-            />
+            >
+              <el-option
+                v-for="dict in dict.type.sim_equip_type"
+                :key="dict.value"
+                :label="dict.label"
+                :value="dict.value"
+              />
+            </el-select>
           </el-form-item>
           <el-form-item label="创建时间">
             <el-date-picker
@@ -70,7 +76,6 @@
               icon="el-icon-plus"
               size="mini"
               @click="handleAdd"
-              v-hasPermi="['simulator:task:add']"
             >新增</el-button>
           </el-col>
           <el-col :span="1.5">
@@ -81,7 +86,6 @@
               size="mini"
               :disabled="single"
               @click="handleUpdate"
-              v-hasPermi="['simulator:user:edit']"
             >修改</el-button>
           </el-col>
           <el-col :span="1.5">
@@ -92,10 +96,9 @@
               size="mini"
               :disabled="multiple"
               @click="handleDelete"
-              v-hasPermi="['simulator:user:remove']"
             >删除</el-button>
           </el-col>
-          <el-col :span="1.5">
+          <!-- <el-col :span="1.5">
             <el-button
               type="warning"
               plain
@@ -104,7 +107,7 @@
               :disabled="single"
               @click="handleKaoshi"
             >当前考试</el-button>
-          </el-col>
+          </el-col> -->
           <right-toolbar :showSearch.sync="showSearch" @queryTable="getList" :columns="columns"></right-toolbar>
         </el-row>
 
@@ -166,12 +169,12 @@
     </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-dialog :title="title" :visible.sync="open" width="75%" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px" style="display: flex;">
         <el-row>
-          <el-col :span="12">
+          <el-col :span="6" style="width: 20%;">
             <el-form-item label="型号">
-              <el-select v-model="selectedEquip"  placeholder="请选择模拟器类型" style="width: 100%;">
+              <el-select v-model="selectedEquip"  placeholder="请选择模拟器类型">
                 <el-option
                   value="请选择"
                 >请选择</el-option>
@@ -184,43 +187,40 @@
               </el-select>
             </el-form-item>
           </el-col>
-          <el-col :span="12">
+          <el-col :span="6">
+            <el-form-item label="考试名称" prop="userName">
+              <el-input  placeholder="请输入考试名称" maxlength="30" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="考试时长" prop="userName">
+              <el-input  placeholder="请输入考试时长" maxlength="30" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="日期范围" prop="field101">
+              <el-date-picker type="daterange" 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="6">
             <el-form-item label="出题方式" prop="userName">
-              <el-select v-model="selectedEquip"  placeholder="请选择出题方式" style="width: 70%;">
+              <el-select v-model="selectmethod"  placeholder="请选择出题方式">
                 <el-option
                   value="请选择"
                 >请选择</el-option>
                 <el-option
-                  v-for="dict in dict.type.sim_equip_type"
+                  v-for="dict in dict.type.sys_topic_way"
                   :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-button type="primary" round @click="handleSelectType" v-show="isShow">自选考题编辑</el-button>
         </el-row>
       </el-form>
 
@@ -228,7 +228,7 @@
       <el-row :gutter="20">
         <el-col :xs="24">
           <el-row :gutter="10" class="mb8">
-            <el-col :span="1.5">
+            <!-- <el-col :span="1.5">
               <el-button
                 type="primary"
                 plain
@@ -259,18 +259,15 @@
                 @click="handleDelete"
                 v-hasPermi="['system:user:remove']"
               >删除</el-button>
-            </el-col>
-            
-
-
-            <right-toolbar :showSearch.sync="showSearch" @queryTable="getList" :columns="columns"></right-toolbar>
+            </el-col> -->
+            <right-toolbar :showSearch.sync="showSearch" @queryTable="getList1" :columns="columns"></right-toolbar>
           </el-row>
-          <el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange">
+          <el-table v-loading="loading" :data="userList1" @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
+            <!-- <el-table-column
               label="操作"
               align="center"
               width="160"
@@ -292,21 +289,17 @@
                   v-hasPermi="['system:user:remove']"
                 >删除</el-button>
               </template>
-            </el-table-column>
+            </el-table-column> -->
           </el-table>
-
           <pagination
             v-show="total>0"
             :total="total"
             :page.sync="queryParams.pageNum"
             :limit.sync="queryParams.pageSize"
-            @pagination="getList"
+            @pagination="getList1"
           /> 
-          
         </el-col>
       </el-row>
-
-
       <h4 class="h4" style="font-size: 16px;font-weight: bold;margin-left: 2%;">统计情况</h4>
       <div class="shixiang">
           <div>本次考试班级数量:2</div>
@@ -326,13 +319,10 @@
     <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-col :span="6">
             <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"
@@ -341,6 +331,16 @@
               </el-select>
             </el-form-item>
           </el-col>
+          <el-col :span="6">
+            <el-form-item label="训练任务">
+              <el-select v-model="selectedEquip"  placeholder="请选择训练任务">
+                <el-option
+                  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>
@@ -375,10 +375,6 @@
       </div>
     </el-dialog>
 
-
-
-
-    
     
   </div>
 </template>
@@ -397,19 +393,22 @@
 }
 </style>
 <script>
-import { listUser, getUser, delUser, addUser, updateUser, resetUserPwd, changeUserStatus, deptTreeSelect } from "@/api/system/user";
+import { listStudent, getStudent, delStudent, addStudent, updateStudent } from "@/api/sim/student";
+import { listMajor  } from "@/api/sim/major";
 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'],
+  dicts: ['sim_equip_type','sys_topic_way','sys_normal_disable'],
   components: { Treeselect },
   data() {
     return {
       multipleSelection: [],
       selectedEquip: '',
+      selectmethod:'',
+      isShow:false,
       selectedZjEquip: '',
       tableData_tm: [
         {
@@ -584,6 +583,8 @@ export default {
       total: 0,
       // 用户表格数据
       userList: null,
+       // 用户表格数据
+      userList1: null,
       // 弹出层标题
       title: "",
       // 部门树选项
@@ -594,8 +595,6 @@ export default {
       zijianopen:false,
       // 自选题目编辑
       selectopen:false,
-      // 部门名称
-      deptName: undefined,
       // 默认密码
       initPassword: undefined,
       // 日期范围
@@ -652,9 +651,13 @@ export default {
     };
   },
   watch: {
-    // 根据名称筛选部门树
-    deptName(val) {
-      this.$refs.tree.filter(val);
+    selectmethod(Value){
+      console.log('出题方式:'+Value)
+      if(Value==2){
+        this.isShow = true;
+      }else{
+        this.isShow = false;
+      }
     },
     selectedEquip(newValue) {
       // console.log(newValue);
@@ -822,8 +825,6 @@ export default {
       }
 
     },
-
-
   },
   created() {
     this.getList();
@@ -933,7 +934,7 @@ export default {
     /** 查询用户列表 */
     getList() {
       this.loading = true;
-      listUser(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
+      listStudent(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
           //将返回值注释
           this.userList = response.rows;
           this.total = response.total;
@@ -941,6 +942,16 @@ export default {
         }
       );
     },
+    getList1() {
+      this.loading = true;
+      listMajor(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
+          //将返回值注释
+          this.userList1 = response.rows;
+          this.total = response.total;
+          this.loading = false;
+        }
+      );
+    },
     /** 查询部门下拉树结构 */
     getDeptTree() {
       deptTreeSelect().then(response => {
@@ -1014,29 +1025,29 @@ export default {
     /** 新增按钮操作 */
     handleAdd() {
       this.reset();
-      getUser().then(response => {
-        this.postOptions = response.posts;
-        this.roleOptions = response.roles;
+      // getUser().then(response => {
+      //   this.postOptions = response.posts;
+      //   this.roleOptions = response.roles;
         this.open = true;
         this.title = "新增考试";
-        this.form.password = this.initPassword;
-      });
+        // 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);
+      // 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.title = "修改考试";
         this.form.password = "";
-      });
+      // });
     },
 
     /** 当前考试查询 */
@@ -1049,12 +1060,12 @@ export default {
     handleSelectType(row) {
       this.reset();
       const userId = row.userId || this.ids;
-      getUser(userId).then(response => {
-        this.form = response.data;
+      // getUser(userId).then(response => {
+      //   this.form = response.data;
         this.selectopen = true;
         // this.open = false;
         this.title = "选择考题";
-      });
+      // });
     },
     
     /** 提交按钮 */

+ 50 - 175
ruoyi-ui/src/views/peoples/major/index.vue

@@ -1,19 +1,19 @@
 <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-form-item label="专业名称" prop="majorName">
             <el-input
-              v-model="queryParams.userName"
-              placeholder="请输入专业"
+              v-model="queryParams.majorName"
+              placeholder="请输入专业名称"
               clearable
               style="width: 240px"
               @keyup.enter.native="handleQuery"
             />
           </el-form-item>
-        
+
           <el-form-item label="创建时间">
             <el-date-picker
               v-model="dateRange"
@@ -39,7 +39,7 @@
               icon="el-icon-plus"
               size="mini"
               @click="handleAdd"
-              v-hasPermi="['system:user:add']"
+              v-hasPermi="['sim:major:add']"
             >新增</el-button>
           </el-col>
           <el-col :span="1.5">
@@ -50,7 +50,7 @@
               size="mini"
               :disabled="single"
               @click="handleUpdate"
-              v-hasPermi="['system:user:edit']"
+              v-hasPermi="['sim:major:edit']"
             >修改</el-button>
           </el-col>
           <el-col :span="1.5">
@@ -61,7 +61,7 @@
               size="mini"
               :disabled="multiple"
               @click="handleDelete"
-              v-hasPermi="['system:user:remove']"
+              v-hasPermi="['sim:major:remove']"
             >删除</el-button>
           </el-col>
           <right-toolbar :showSearch.sync="showSearch" @queryTable="getList" :columns="columns"></right-toolbar>
@@ -69,9 +69,9 @@
 
         <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" key="majorId" prop="majorId" v-if="columns[0].visible" />
+          <el-table-column label="专业名称" align="center" key="majorName" prop="majorName" v-if="columns[1].visible" />
+          <el-table-column label="备注" align="center" prop="remark"  width="160" v-if="columns[2].visible"/>
           <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>
@@ -89,14 +89,14 @@
                 type="text"
                 icon="el-icon-edit"
                 @click="handleUpdate(scope.row)"
-                v-hasPermi="['system:user:edit']"
+                v-hasPermi="['sim:major:edit']"
               >修改</el-button>
               <el-button
                 size="mini"
                 type="text"
                 icon="el-icon-delete"
                 @click="handleDelete(scope.row)"
-                v-hasPermi="['system:user:remove']"
+                v-hasPermi="['sim:major:remove']"
               >删除</el-button>
             </template>
           </el-table-column>
@@ -117,8 +117,8 @@
       <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 label="专业名称" prop="majorName">
+              <el-input v-model="form.majorName" placeholder="请输入专业名称" maxlength="30" />
             </el-form-item>
           </el-col>
         </el-row>
@@ -135,21 +135,15 @@
         <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";
-
+import { listMajor, getMajor, delMajor, addMajor, updateMajor, resetUserPwd  } from "@/api/sim/major";
 export default {
-  name: "User",
+  name: "Major",
   dicts: ['sys_normal_disable', 'sys_user_sex'],
-  components: { Treeselect },
+  // components: { Treeselect },
   data() {
     return {
       // 遮罩层
@@ -170,45 +164,19 @@ export default {
       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
+        majorName: undefined,
       },
       // 列信息
       columns: [
@@ -219,53 +187,25 @@ export default {
       ],
       // 表单校验
       rules: {
-        userName: [
-          { required: true, message: "用户名称不能为空", trigger: "blur" },
-          { min: 2, max: 20, message: '用户名称长度必须介于 2 和 20 之间', trigger: 'blur' }
-        ],
-        nickName: [
-          { required: true, message: "用户昵称不能为空", trigger: "blur" }
+        majorName: [
+          { 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;
-    });
+    // 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 => {
+      listMajor(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
           this.userList = response.rows;
           this.total = response.total;
           this.loading = false;
@@ -281,7 +221,7 @@ export default {
     handleStatusChange(row) {
       let text = row.status === "0" ? "启用" : "停用";
       this.$modal.confirm('确认要"' + text + '""' + row.userName + '"用户吗?').then(function() {
-        return changeUserStatus(row.userId, row.status);
+        return changeUserStatus(row.majorId, row.status);
       }).then(() => {
         this.$modal.msgSuccess(text + "成功");
       }).catch(function() {
@@ -296,18 +236,9 @@ export default {
     // 表单重置
     reset() {
       this.form = {
-        userId: undefined,
-        deptId: undefined,
-        userName: undefined,
-        nickName: undefined,
-        password: undefined,
-        phonenumber: undefined,
-        email: undefined,
-        sex: undefined,
-        status: "0",
+        majorId: undefined,
+        majorName: undefined,
         remark: undefined,
-        postIds: [],
-        roleIds: []
       };
       this.resetForm("form");
     },
@@ -325,7 +256,7 @@ export default {
     },
     // 多选框选中数据
     handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.userId);
+      this.ids = selection.map(item => item.majorId);
       this.single = selection.length != 1;
       this.multiple = !selection.length;
     },
@@ -345,65 +276,41 @@ export default {
     /** 新增按钮操作 */
     handleAdd() {
       this.reset();
-      getUser().then(response => {
-        this.postOptions = response.posts;
-        this.roleOptions = response.roles;
+      // getMajor().then(response => {
+        // this.postOptions = response.posts;
+        // this.roleOptions = response.roles;
         this.open = true;
-        this.title = "添加用户";
-        this.form.password = this.initPassword;
-      });
+        this.title = "添加专业";
+        // this.form.password = this.initPassword;
+      // });
     },
     /** 修改按钮操作 */
     handleUpdate(row) {
       this.reset();
-      const userId = row.userId || this.ids;
-      getUser(userId).then(response => {
+      const majorId = row.majorId || this.ids;
+      getMajor(majorId).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.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 = "";
+        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 => {
+          if (this.form.majorId != undefined) {
+            updateMajor(this.form).then(response => {
               this.$modal.msgSuccess("修改成功");
               this.open = false;
               this.getList();
             });
           } else {
-            addUser(this.form).then(response => {
+            addMajor(this.form).then(response => {
               this.$modal.msgSuccess("新增成功");
               this.open = false;
               this.getList();
@@ -414,46 +321,14 @@ export default {
     },
     /** 删除按钮操作 */
     handleDelete(row) {
-      const userIds = row.userId || this.ids;
-      this.$modal.confirm('是否确认删除用户编号为"' + userIds + '"的数据项?').then(function() {
-        return delUser(userIds);
+      const majorIds = row.userId || this.ids;
+      this.$modal.confirm('是否确认删除编号为"' + majorIds + '"的数据项?').then(function() {
+        return delMajor(majorIds);
       }).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>
+</script>

+ 3 - 7
ruoyi-ui/src/views/peoples/present/index.vue

@@ -10,7 +10,6 @@
               icon="el-icon-refresh"
               size="mini"
               @click="refreshTable1"
-              v-hasPermi="['system:user:add']"
             >刷新</el-button>
           </el-col>
           <el-col :span="1.5">
@@ -19,7 +18,6 @@
               plain
               icon="el-icon-edit"
               size="mini"
-              v-hasPermi="['system:user:edit']"
             >批量确认已送</el-button>
           </el-col>
         </el-row>
@@ -46,14 +44,12 @@
                 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>
@@ -230,7 +226,7 @@
 }
 </style>
 <script>
-import { listUser, getUser, delUser, addUser, updateUser, resetUserPwd, changeUserStatus, deptTreeSelect } from "@/api/system/user";
+import { listStudent, getStudent, delStudent, addStudent, updateStudent } from "@/api/sim/student";
 import { getToken } from "@/utils/auth";
 export default {
   // name: "User",
@@ -526,7 +522,7 @@ export default {
     // 刷新
     refreshTable1(){
       this.loading = true;
-      listUser(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
+      listStudent(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
           this.userList = response.rows;
           this.total = response.total;
           this.loading = false;
@@ -537,7 +533,7 @@ export default {
     /** 查询用户列表 */
     getList() {
       this.loading = true;
-      listUser(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
+      listStudent(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
           this.userList = response.rows;
           this.total = response.total;
           this.loading = false;

+ 16 - 22
ruoyi-ui/src/views/peoples/score/index.vue

@@ -5,7 +5,7 @@
     <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 :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch">
           <el-form-item label="学员学号" prop="className">
             <el-input
               v-model="queryParams.className"
@@ -81,7 +81,6 @@
               size="mini"
               :disabled="single"
               @click="handleUpdate"
-              v-hasPermi="['system:user:edit']"
             >修改</el-button>
           </el-col>
           <el-col :span="1.5">
@@ -91,7 +90,6 @@
               icon="el-icon-download"
               size="mini"
               @click="handleExport"
-              v-hasPermi="['system:user:export']"
             >导出</el-button>
           </el-col>
           <el-col :span="1.5">
@@ -102,7 +100,6 @@
               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>
@@ -203,7 +200,7 @@
     <!-- 修改对话框 -->
     <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">
+        <el-col v-for="(item, index) in tableArr" :key="index">
           <div class="box">
             <div class="content1">{{ item.key }}</div>
             <div class="content2">{{ item.value1}}</div>
@@ -243,7 +240,7 @@
     </el-dialog>
 
     <!---成绩详情-->
-    <el-dialog :title="title" :visible.sync="dialogVisible2" style="margin-top: -3%;" width="55%" append-to-body>
+    <el-dialog :title="title" :visible.sync="dialogVisible2" style="margin-top: -2%;" 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
@@ -310,9 +307,6 @@
   color: #606266;
   margin: 5px;
 }
-.el-form-item__label{
-  width: 80px !important;
-}
 .box {
   width: 100%;
   height: 40px;
@@ -345,7 +339,7 @@
 
 </style>
 <script>
-import { listUser, getUser, delUser, addUser, updateUser, resetUserPwd, changeUserStatus, deptTreeSelect } from "@/api/system/user";
+import { listStudent, getStudent, delStudent, addStudent, updateStudent } from "@/api/sim/student";
 import { getToken } from "@/utils/auth";
 import Treeselect from "@riophae/vue-treeselect";
 import "@riophae/vue-treeselect/dist/vue-treeselect.css";
@@ -678,7 +672,7 @@ export default {
     /** 查询用户列表 */
     getList() {
       this.loading = true;
-      listUser(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
+      listStudent(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
           this.userList = response.rows;
           this.total = response.total;
           this.loading = false;
@@ -761,26 +755,26 @@ export default {
     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);
+      // 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;
+      // const userId = row.userId || this.ids;
+      // getUser(userId).then(response => {
+        // this.form = response.data;
         this.dialogVisible2 = true;
         this.title = "";
-      });
+      // });
     },
     /** 提交按钮 */
     submitForm: function() {

+ 76 - 109
ruoyi-ui/src/views/peoples/student/index.vue

@@ -4,9 +4,9 @@
       <!--用户数据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-form-item label="学号" prop="UserName">
             <el-input
-              v-model="queryParams.className"
+              v-model="queryParams.UserName"
               placeholder="请输入学号"
               clearable
               style="width: 150px"
@@ -14,9 +14,9 @@
             />
           </el-form-item>
 
-          <el-form-item label="姓名" prop="className">
+          <el-form-item label="姓名" prop="nickName">
             <el-input
-              v-model="queryParams.className"
+              v-model="queryParams.nickName"
               placeholder="请输入姓名"
               clearable
               style="width: 150px"
@@ -24,7 +24,7 @@
             />
           </el-form-item>
 
-          <el-form-item label="班级名称" prop="className">
+          <!-- <el-form-item label="班级名称" prop="className">
             <el-input
               v-model="queryParams.className"
               placeholder="请输入班级名称"
@@ -41,7 +41,7 @@
               style="width: 200px"
               @keyup.enter.native="handleQuery"
             />
-          </el-form-item>
+          </el-form-item> -->
         
           <el-form-item label="创建时间">
             <el-date-picker
@@ -68,7 +68,6 @@
               icon="el-icon-plus"
               size="mini"
               @click="handleAdd"
-              v-hasPermi="['system:user:add']"
             >新增</el-button>
           </el-col>
           <el-col :span="1.5">
@@ -79,7 +78,6 @@
               size="mini"
               :disabled="single"
               @click="handleUpdate"
-              v-hasPermi="['system:user:edit']"
             >修改</el-button>
           </el-col>
           <el-col :span="1.5">
@@ -90,7 +88,6 @@
               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>
@@ -99,8 +96,8 @@
         <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="userName" prop="userName" v-if="columns[1].visible" />
+          <el-table-column label="姓名" align="center" key="nickName" prop="nickName" 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" />
@@ -121,20 +118,17 @@
                 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-dropdown size="mini" @command="(command) => handleCommand(command, scope.row)" v-hasPermi="['sim:student:resetPwd', 'sim:student: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>
+                    v-hasPermi="['sim:student:resetPwd']">重置密码</el-dropdown-item>
                 </el-dropdown-menu>
               </el-dropdown>
             </template>
@@ -155,19 +149,58 @@
     <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-col :span="12">
+            <el-form-item v-if="form.userId == undefined" label="学号" prop="userName">
+              <el-input v-model="form.userName" placeholder="请输入学号" maxlength="30" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item v-if="form.userId == undefined" label="登录密码" prop="password">
+              <el-input v-model="form.password" placeholder="请输入登录密码" type="password" maxlength="20" show-password/>
             </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-col :span="12">
+            <el-form-item label="姓名" prop="nickName">
+              <el-input v-model="form.nickName" placeholder="请输入姓名" maxlength="30" />
             </el-form-item>
           </el-col>
+          <!-- <el-col :span="12">
+            <el-form-item label="手机号码" prop="phonenumber">
+              <el-input v-model="form.phonenumber" placeholder="请输入手机号码" maxlength="11" />
+            </el-form-item>
+          </el-col> 
         </el-row>
+
+        <el-row>-->
+          <el-col :span="12">
+            <el-form-item label="状态">
+              <el-radio-group v-model="form.status">
+                <el-radio
+                  v-for="dict in dict.type.sys_normal_disable"
+                  :key="dict.value"
+                  :label="dict.value"
+                >{{dict.label}}</el-radio>
+              </el-radio-group>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <!-- <el-row>
+          <el-col :span="12">
+            <el-form-item label="角色">
+              <el-select v-model="form.roleIds" multiple placeholder="请选择角色">
+                <el-option
+                  v-for="item in roleOptions"
+                  :key="item.roleId"
+                  :label="item.roleName"
+                  :value="item.roleId"
+                  :disabled="item.status == 1"
+                ></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row> -->
         <el-row>
           <el-col :span="24">
             <el-form-item label="备注">
@@ -187,13 +220,13 @@
 </template>
 
 <script>
-import { listUser, getUser, delUser, addUser, updateUser, resetUserPwd, changeUserStatus, deptTreeSelect } from "@/api/system/user";
+import { listStudent, getStudent, delStudent, addStudent, updateStudent } from "@/api/sim/student";
 import { getToken } from "@/utils/auth";
 import Treeselect from "@riophae/vue-treeselect";
 import "@riophae/vue-treeselect/dist/vue-treeselect.css";
 
 export default {
-  name: "User",
+  name: "Student",
   dicts: ['sys_normal_disable', 'sys_user_sex'],
   components: { Treeselect },
   data() {
@@ -232,21 +265,6 @@ export default {
         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,
@@ -261,8 +279,8 @@ export default {
         { 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: 3, label: `班级名称`, visible: false },
+        { key: 4, label: `专业`, visible: false },
         { key: 5, label: `备注`, visible: true },
         { key: 6, label: `创建时间`, visible: true }
       ],
@@ -280,20 +298,6 @@ export default {
           { 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"
-          }
-        ]
       }
     };
   },
@@ -314,7 +318,7 @@ export default {
     /** 查询用户列表 */
     getList() {
       this.loading = true;
-      listUser(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
+      listStudent(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
           this.userList = response.rows;
           this.total = response.total;
           this.loading = false;
@@ -346,17 +350,11 @@ export default {
     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");
     },
@@ -394,26 +392,26 @@ export default {
     /** 新增按钮操作 */
     handleAdd() {
       this.reset();
-      getUser().then(response => {
-        this.postOptions = response.posts;
-        this.roleOptions = response.roles;
+      // getUser().then(response => {
+        // this.postOptions = response.posts;
+        // this.roleOptions = response.roles;
         this.open = true;
-        this.title = "添加用户";
+        this.title = "添加学员";
         this.form.password = this.initPassword;
-      });
+      // });
     },
     /** 修改按钮操作 */
     handleUpdate(row) {
       this.reset();
       const userId = row.userId || this.ids;
-      getUser(userId).then(response => {
+      getStudent(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.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.title = "修改学员";
         this.form.password = "";
       });
     },
@@ -446,13 +444,13 @@ export default {
       this.$refs["form"].validate(valid => {
         if (valid) {
           if (this.form.userId != undefined) {
-            updateUser(this.form).then(response => {
+            updateStudent(this.form).then(response => {
               this.$modal.msgSuccess("修改成功");
               this.open = false;
               this.getList();
             });
           } else {
-            addUser(this.form).then(response => {
+            addStudent(this.form).then(response => {
               this.$modal.msgSuccess("新增成功");
               this.open = false;
               this.getList();
@@ -464,45 +462,14 @@ export default {
     /** 删除按钮操作 */
     handleDelete(row) {
       const userIds = row.userId || this.ids;
-      this.$modal.confirm('是否确认删除用户编号为"' + userIds + '"的数据项?').then(function() {
-        return delUser(userIds);
+      this.$modal.confirm('是否确认删除编号为"' + userIds + '"的数据项?').then(function() {
+        return delStudent(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>

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

@@ -104,8 +104,8 @@
         <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="mingc" prop="mingc" v-if="columns[1].visible" :show-overflow-tooltip="true" />
+          <el-table-column label="模拟器型号" align="center" key="mingc" prop="mingc" 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" />
@@ -482,7 +482,7 @@
   }
 </style>
 <script>
-import { listUser, getUser, delUser, addUser, updateUser, resetUserPwd, changeUserStatus, deptTreeSelect } from "@/api/system/user";
+import { listStudent, getStudent, delStudent, addStudent, updateStudent } from "@/api/sim/student";
 import { getToken } from "@/utils/auth";
 import Treeselect from "@riophae/vue-treeselect";
 import "@riophae/vue-treeselect/dist/vue-treeselect.css";
@@ -2871,7 +2871,7 @@ export default {
     /** 查询用户列表 */
     getList() {
       this.loading = true;
-      listUser(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
+      listStudent(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
           //将返回值注释
           this.userList = response.rows;
           this.total = response.total;
@@ -2985,23 +2985,23 @@ export default {
     handleAdd() {
 
       this.reset();
-      getUser().then(response => {
-        this.postOptions = response.posts;
-        this.roleOptions = response.roles;
+      // 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 => {
+      // getUser().then(response => {
         //this.postOptions = response.posts;
         //this.roleOptions = response.roles;
         this.zijianopen = true;
         this.title = "故障设置自检";
-      });
+      // });
     },
 
     /** 修改按钮操作 */

+ 69 - 91
ruoyi-ui/src/views/peoples/trains/index.vue

@@ -2,7 +2,7 @@
   <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 :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch">
           <el-form-item label="练习名称" prop="userName">
             <el-input
               v-model="queryParams.userName"
@@ -70,7 +70,6 @@
               icon="el-icon-plus"
               size="mini"
               @click="handleAdd"
-              v-hasPermi="['simulator:task:add']"
             >新增</el-button>
           </el-col>
           <el-col :span="1.5">
@@ -81,7 +80,6 @@
               size="mini"
               :disabled="single"
               @click="handleUpdate"
-              v-hasPermi="['simulator:user:edit']"
             >修改</el-button>
           </el-col>
           <el-col :span="1.5">
@@ -92,11 +90,10 @@
               size="mini"
               :disabled="multiple"
               @click="handleDelete"
-              v-hasPermi="['simulator:user:remove']"
             >删除</el-button>
           </el-col>
 
-          <el-col :span="1.5">
+          <!-- <el-col :span="1.5">
             <el-button
               type="warning"
               plain
@@ -105,7 +102,7 @@
               :disabled="single"
               @click="handleKaoshi"
             >当前练习</el-button>
-          </el-col>
+          </el-col> -->
           
           <right-toolbar :showSearch.sync="showSearch" @queryTable="getList" :columns="columns"></right-toolbar>
         </el-row>
@@ -113,7 +110,7 @@
         <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="userName1" prop="userName1" 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" />
@@ -144,14 +141,12 @@
                 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>
@@ -171,9 +166,9 @@
     <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-col :span="6"  style="width: 20%;">
             <el-form-item label="型号">
-              <el-select v-model="selectedEquip"  placeholder="请选择模拟器类型" style="width: 100%;">
+              <el-select v-model="selectedEquip"  placeholder="请选择模拟器类型">
                 <el-option
                   value="请选择"
                 >请选择</el-option>
@@ -186,43 +181,37 @@
               </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-col :span="6">
+            <el-form-item label="练习名称" prop="userName">
+              <el-input  placeholder="请输入练习名称" maxlength="30" />
             </el-form-item>
           </el-col>
-          
-          <el-col :span="12">
+          <el-col :span="6">
+            <el-form-item label="练习时长" prop="userName">
+              <el-input  placeholder="请输入练习时长" maxlength="30" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
             <el-form-item label="日期范围" prop="field101">
-              <el-date-picker type="daterange" v-model="form.field101" format="yyyy-MM-dd"
+              <el-date-picker type="daterange" 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-col :span="6">
+            <el-form-item label="出题方式" prop="userName">
+              <el-select v-model="selectmethod"  placeholder="请选择出题方式">
+                <el-option
+                  v-for="dict in dict.type.sys_topic_way"
+                  :key="dict.value"
+                  :label="dict.label"
+                  :value="dict.value"
+                ></el-option>
+              </el-select>
+              
             </el-form-item>
           </el-col>
+          <el-button type="primary" round @click="handleSelectType"  v-show="isShow">自选考题编辑</el-button>
         </el-row>
       </el-form>
 
@@ -230,7 +219,7 @@
       <el-row :gutter="20">
         <el-col :xs="24">
           <el-row :gutter="10" class="mb8">
-            <el-col :span="1.5">
+            <!-- <el-col :span="1.5">
               <el-button
                 type="primary"
                 plain
@@ -261,10 +250,7 @@
                 @click="handleDelete"
                 v-hasPermi="['system:user:remove']"
               >删除</el-button>
-            </el-col>
-            
-
-
+            </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">
@@ -327,7 +313,7 @@
     <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-col :span="6">
             <el-form-item label="型号">
               <el-select v-model="selectedEquip"  placeholder="请选择模拟器型号">
                 <el-option
@@ -342,6 +328,15 @@
               </el-select>
             </el-form-item>
           </el-col>
+          <el-col :span="6">
+            <el-form-item label="训练任务">
+              <el-select v-model="selectedEquip"  placeholder="请选择训练任务">
+                <el-option
+                  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>
@@ -375,12 +370,6 @@
         <el-button @click="cancel">取 消</el-button>
       </div>
     </el-dialog>
-
-
-
-
-    
-    
   </div>
 </template>
 <style>
@@ -397,17 +386,19 @@
 }
 </style>
 <script>
-import { listUser, getUser, delUser, addUser, updateUser, resetUserPwd, changeUserStatus, deptTreeSelect } from "@/api/system/user";
+import { listStudent, getStudent, delStudent, addStudent, updateStudent } from "@/api/sim/student";
 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'],
+  dicts: ['sim_equip_type','sys_topic_way','sys_normal_disable'],
   components: { Treeselect },
   data() {
     return {
+      selectmethod:'',
+      isShow:false,
       multipleSelection: [],
       selectedEquip: '',
       selectedZjEquip: '',
@@ -612,21 +603,6 @@ export default {
         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,
@@ -639,10 +615,10 @@ export default {
       // 列信息
       columns: [
         { key: 0, label: `编号`, visible: true },
-        { key: 1, label: `考试名称`, visible: true },
-        { key: 2, label: `考试时间`, visible: true },
+        { key: 1, label: `练习名称`, visible: true },
+        { key: 2, label: `练习时间`, visible: true },
         { key: 3, label: `模拟器类型`, visible: true },
-        { key: 4, label: `考试状态`, visible: true },
+        { key: 4, label: `练习状态`, visible: true },
         { key: 5, label: `创建老师`, visible: true },
         { key: 6, label: `创建时间`, visible: true }
       ],
@@ -652,9 +628,13 @@ export default {
     };
   },
   watch: {
-    // 根据名称筛选部门树
-    deptName(val) {
-      this.$refs.tree.filter(val);
+    selectmethod(Value){
+      console.log('出题方式:'+Value)
+      if(Value==2){
+        this.isShow = true;
+      }else{
+        this.isShow = false;
+      }
     },
     selectedEquip(newValue) {
       // console.log(newValue);
@@ -822,8 +802,6 @@ export default {
       }
 
     },
-
-
   },
   created() {
     this.getList();
@@ -933,7 +911,7 @@ export default {
     /** 查询用户列表 */
     getList() {
       this.loading = true;
-      listUser(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
+      listStudent(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
           //将返回值注释
           this.userList = response.rows;
           this.total = response.total;
@@ -1014,29 +992,29 @@ export default {
     /** 新增按钮操作 */
     handleAdd() {
       this.reset();
-      getUser().then(response => {
-        this.postOptions = response.posts;
-        this.roleOptions = response.roles;
+      // 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);
+      // 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 = "";
-      });
+      // });
     },
 
     /** 当前考试查询 */
@@ -1049,12 +1027,12 @@ export default {
     handleSelectType(row) {
       this.reset();
       const userId = row.userId || this.ids;
-      getUser(userId).then(response => {
-        this.form = response.data;
+      // getUser(userId).then(response => {
+        // this.form = response.data;
         this.selectopen = true;
         // this.open = false;
         this.title = "选择考题";
-      });
+      // });
     },
     
     /** 提交按钮 */

+ 49 - 34
ruoyi-ui/src/views/system/dept/index.vue

@@ -1,16 +1,16 @@
 <template>
   <div class="app-container">
     <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch">
-      <el-form-item label="部门名称" prop="deptName">
+      <el-form-item label="班级" prop="deptName">
         <el-input
           v-model="queryParams.deptName"
-          placeholder="请输入部门名称"
+          placeholder="请输入班级"
           clearable
           @keyup.enter.native="handleQuery"
         />
       </el-form-item>
       <el-form-item label="状态" prop="status">
-        <el-select v-model="queryParams.status" placeholder="部门状态" clearable>
+        <el-select v-model="queryParams.status" placeholder="状态" clearable>
           <el-option
             v-for="dict in dict.type.sys_normal_disable"
             :key="dict.value"
@@ -19,6 +19,18 @@
           />
         </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>
         <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>
@@ -56,7 +68,7 @@
       :default-expand-all="isExpandAll"
       :tree-props="{children: 'children', hasChildren: 'hasChildren'}"
     >
-      <el-table-column prop="deptName" label="部门名称" width="260"></el-table-column>
+      <el-table-column prop="deptName" label="班级名称" width="260"></el-table-column>
       <el-table-column prop="orderNum" label="排序" width="200"></el-table-column>
       <el-table-column prop="status" label="状态" width="100">
         <template slot-scope="scope">
@@ -77,13 +89,13 @@
             @click="handleUpdate(scope.row)"
             v-hasPermi="['system:dept:edit']"
           >修改</el-button>
-          <el-button
+          <!-- <el-button
             size="mini"
             type="text"
             icon="el-icon-plus"
             @click="handleAdd(scope.row)"
             v-hasPermi="['system:dept:add']"
-          >新增</el-button>
+          >新增</el-button> -->
           <el-button
             v-if="scope.row.parentId != 0"
             size="mini"
@@ -101,15 +113,15 @@
       <el-form ref="form" :model="form" :rules="rules" label-width="80px">
         <el-row>
           <el-col :span="24" v-if="form.parentId !== 0">
-            <el-form-item label="上级部门" prop="parentId">
-              <treeselect v-model="form.parentId" :options="deptOptions" :normalizer="normalizer" placeholder="选择上级部门" />
+            <el-form-item label="上级" prop="parentId">
+              <treeselect v-model="form.parentId" :options="deptOptions" :normalizer="normalizer" placeholder="选择上级" />
             </el-form-item>
           </el-col>
         </el-row>
         <el-row>
           <el-col :span="12">
-            <el-form-item label="部门名称" prop="deptName">
-              <el-input v-model="form.deptName" placeholder="请输入部门名称" />
+            <el-form-item label="班级名称" prop="deptName">
+              <el-input v-model="form.deptName" placeholder="请输入班级名称" />
             </el-form-item>
           </el-col>
           <el-col :span="12">
@@ -118,7 +130,7 @@
             </el-form-item>
           </el-col>
         </el-row>
-        <el-row>
+        <!-- <el-row>
           <el-col :span="12">
             <el-form-item label="负责人" prop="leader">
               <el-input v-model="form.leader" placeholder="请输入负责人" maxlength="20" />
@@ -129,15 +141,15 @@
               <el-input v-model="form.phone" placeholder="请输入联系电话" maxlength="11" />
             </el-form-item>
           </el-col>
-        </el-row>
+        </el-row> -->
         <el-row>
-          <el-col :span="12">
+          <!-- <el-col :span="12">
             <el-form-item label="邮箱" prop="email">
               <el-input v-model="form.email" placeholder="请输入邮箱" maxlength="50" />
             </el-form-item>
-          </el-col>
+          </el-col> -->
           <el-col :span="12">
-            <el-form-item label="部门状态">
+            <el-form-item label="状态">
               <el-radio-group v-model="form.status">
                 <el-radio
                   v-for="dict in dict.type.sys_normal_disable"
@@ -182,6 +194,8 @@ export default {
       open: false,
       // 是否展开,默认全部展开
       isExpandAll: true,
+      // 日期范围
+      dateRange: [],
       // 重新渲染表格状态
       refreshTable: true,
       // 查询参数
@@ -194,28 +208,28 @@ export default {
       // 表单校验
       rules: {
         parentId: [
-          { required: true, message: "上级部门不能为空", trigger: "blur" }
+          { required: true, message: "上级不能为空", trigger: "blur" }
         ],
         deptName: [
-          { required: true, message: "部门名称不能为空", trigger: "blur" }
+          { required: true, message: "班级名称不能为空", trigger: "blur" }
         ],
         orderNum: [
           { required: true, message: "显示排序不能为空", trigger: "blur" }
         ],
-        email: [
-          {
-            type: "email",
-            message: "请输入正确的邮箱地址",
-            trigger: ["blur", "change"]
-          }
-        ],
-        phone: [
-          {
-            pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
-            message: "请输入正确的手机号码",
-            trigger: "blur"
-          }
-        ]
+        // email: [
+        //   {
+        //     type: "email",
+        //     message: "请输入正确的邮箱地址",
+        //     trigger: ["blur", "change"]
+        //   }
+        // ],
+        // phone: [
+        //   {
+        //     pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
+        //     message: "请输入正确的手机号码",
+        //     trigger: "blur"
+        //   }
+        // ]
       }
     };
   },
@@ -226,7 +240,7 @@ export default {
     /** 查询部门列表 */
     getList() {
       this.loading = true;
-      listDept(this.queryParams).then(response => {
+      listDept(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
         this.deptList = this.handleTree(response.data, "deptId");
         this.loading = false;
       });
@@ -267,6 +281,7 @@ export default {
     },
     /** 重置按钮操作 */
     resetQuery() {
+      this.dateRange = [];
       this.resetForm("queryForm");
       this.handleQuery();
     },
@@ -277,7 +292,7 @@ export default {
         this.form.parentId = row.deptId;
       }
       this.open = true;
-      this.title = "添加部门";
+      this.title = "添加班级";
       listDept().then(response => {
         this.deptOptions = this.handleTree(response.data, "deptId");
       });
@@ -296,7 +311,7 @@ export default {
       getDept(row.deptId).then(response => {
         this.form = response.data;
         this.open = true;
-        this.title = "修改部门";
+        this.title = "修改班级";
         listDeptExcludeChild(row.deptId).then(response => {
           this.deptOptions = this.handleTree(response.data, "deptId");
           if (this.deptOptions.length == 0) {

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

@@ -27,10 +27,10 @@
                 <svg-icon icon-class="tree" />所属部门
                 <div class="pull-right" v-if="user.dept">{{ user.dept.deptName }} / {{ postGroup }}</div>
               </li> -->
-              <!-- <li class="list-group-item">
+              <li class="list-group-item">
                 <svg-icon icon-class="peoples" />所属角色
                 <div class="pull-right">{{ roleGroup }}</div>
-              </li> -->
+              </li>
               <li class="list-group-item">
                 <svg-icon icon-class="date" />创建日期
                 <div class="pull-right">{{ user.createTime }}</div>

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

@@ -48,7 +48,7 @@ export default {
           }
         ],
         phonenumber: [
-          { required: true, message: "手机号码不能为空", trigger: "blur" },
+          { required: false, message: "手机号码不能为空", trigger: "blur" },
           {
             pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
             message: "请输入正确的手机号码",

+ 117 - 0
ruoyi-ui/src/views/teacher/authRole.vue

@@ -0,0 +1,117 @@
+<template>
+  <div class="app-container">
+    <h4 class="form-header h4">基本信息</h4>
+    <el-form ref="form" :model="form" label-width="80px">
+      <el-row>
+        <el-col :span="8" :offset="2">
+          <el-form-item label="用户昵称" prop="nickName">
+            <el-input v-model="form.nickName" disabled />
+          </el-form-item>
+        </el-col>
+        <el-col :span="8" :offset="2">
+          <el-form-item label="登录账号" prop="userName">
+            <el-input  v-model="form.userName" disabled />
+          </el-form-item>
+        </el-col>
+      </el-row>
+    </el-form>
+
+    <h4 class="form-header h4">角色信息</h4>
+    <el-table v-loading="loading" :row-key="getRowKey" @row-click="clickRow" ref="table" @selection-change="handleSelectionChange" :data="roles.slice((pageNum-1)*pageSize,pageNum*pageSize)">
+      <el-table-column label="序号" type="index" align="center">
+        <template slot-scope="scope">
+          <span>{{(pageNum - 1) * pageSize + scope.$index + 1}}</span>
+        </template>
+      </el-table-column>
+      <el-table-column type="selection" :reserve-selection="true" width="55"></el-table-column>
+      <el-table-column label="角色编号" align="center" prop="roleId" />
+      <el-table-column label="角色名称" align="center" prop="roleName" />
+      <el-table-column label="权限字符" align="center" prop="roleKey" />
+      <el-table-column label="创建时间" align="center" prop="createTime" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.createTime) }}</span>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination v-show="total>0" :total="total" :page.sync="pageNum" :limit.sync="pageSize" />
+
+    <el-form label-width="100px">
+      <el-form-item style="text-align: center;margin-left:-120px;margin-top:30px;">
+        <el-button type="primary" @click="submitForm()">提交</el-button>
+        <el-button @click="close()">返回</el-button>
+      </el-form-item>
+    </el-form>
+  </div>
+</template>
+
+<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();
+      });
+    },
+    /** 关闭按钮 */
+    close() {
+      const obj = { path: "/system/user" };
+      this.$tab.closeOpenPage(obj);
+    },
+  },
+};
+</script>

+ 513 - 0
ruoyi-ui/src/views/teacher/index.vue

@@ -0,0 +1,513 @@
+<template>
+  <div class="app-container">
+    <el-row :gutter="20">
+      <!--教师数据-->
+      <el-col :span="24" :xs="24">
+        <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: 240px"
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+          <el-form-item label="教师名称" prop="nickName">
+            <el-input
+              v-model="queryParams.nickName"
+              placeholder="请输入教师名称"
+              clearable
+              style="width: 240px"
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+          <el-form-item label="手机号码" prop="phonenumber">
+            <el-input
+              v-model="queryParams.phonenumber"
+              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: 240px"
+            >
+              <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>
+            <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="['sim:teacher: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="['sim:teacher: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="['sim:teacher: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="ID" 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" />
+          <el-table-column label="教师名称" align="center" key="nickName" prop="nickName" v-if="columns[2].visible" :show-overflow-tooltip="true" />
+          <el-table-column label="手机号码" align="center" key="phonenumber" prop="phonenumber" v-if="columns[3].visible" width="120" />
+          <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" prop="createTime" v-if="columns[5].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="['sim:teacher:edit']"
+              >修改</el-button>
+              <el-button
+                size="mini"
+                type="text"
+                icon="el-icon-delete"
+                @click="handleDelete(scope.row)"
+                v-hasPermi="['sim:teacher:remove']"
+              >删除</el-button>
+
+              <el-dropdown size="mini" @command="(command) => handleCommand(command, scope.row)" v-hasPermi="['sim:teacher:resetPwd', 'sim:teacher: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="['sim:teacher:resetPwd']">重置密码</el-dropdown-item>
+                  <!-- <el-dropdown-item command="handleAuthRole" icon="el-icon-circle-check"
+                    v-hasPermi="['system:user:edit']">分配角色</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="12">
+            <el-form-item v-if="form.userId == undefined" label="账号" prop="userName">
+              <el-input v-model="form.userName" placeholder="请输入账号" maxlength="30" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item v-if="form.userId == undefined" label="登录密码" prop="password">
+              <el-input v-model="form.password" placeholder="请输入登录密码" type="password" maxlength="20" show-password/>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="教师名称" prop="nickName">
+              <el-input v-model="form.nickName" placeholder="请输入教师名称" maxlength="30" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="手机号码" prop="phonenumber">
+              <el-input v-model="form.phonenumber" placeholder="请输入手机号码" maxlength="11" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="状态">
+              <el-radio-group v-model="form.status">
+                <el-radio
+                  v-for="dict in dict.type.sys_normal_disable"
+                  :key="dict.value"
+                  :label="dict.value"
+                >{{dict.label}}</el-radio>
+              </el-radio-group>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <!-- <el-row>
+          <el-col :span="12">
+            <el-form-item label="角色">
+              <el-select v-model="form.roleIds" multiple placeholder="请选择角色">
+                <el-option
+                  v-for="item in roleOptions"
+                  :key="item.roleId"
+                  :label="item.roleName"
+                  :value="item.roleId"
+                  :disabled="item.status == 1"
+                ></el-option>
+              </el-select>
+            </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 { listTeacher, getTeacher, delTeacher, addTeacher, updateTeacher } from "@/api/sim/teacher";
+import { getToken } from "@/utils/auth";
+// import Treeselect from "@riophae/vue-treeselect";
+// import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+
+export default {
+  name: "Teacher",
+  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: "",
+      // 部门树选项
+      deptOptions: undefined,
+      // 是否显示弹出层
+      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,
+      },
+      // 列信息
+      columns: [
+        { key: 0, label: `ID`, 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 }
+      ],
+      // 表单校验
+      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" }
+        ],
+        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;
+      listTeacher(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
+          this.userList = response.rows;
+          this.total = response.total;
+          this.loading = false;
+        }
+      );
+    },
+    // 用户状态修改
+    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,
+        userName: undefined,
+        nickName: 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.$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;
+      // });
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const userId = row.userId || this.ids;
+      getTeacher(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) {
+            updateTeacher(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addTeacher(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 delTeacher(userIds);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+  }
+};
+</script>

+ 91 - 0
ruoyi-ui/src/views/teacher/profile/index.vue

@@ -0,0 +1,91 @@
+<template>
+  <div class="app-container">
+    <el-row :gutter="20">
+      <el-col :span="6" :xs="24">
+        <el-card class="box-card">
+          <div slot="header" class="clearfix">
+            <span>个人信息</span>
+          </div>
+          <div>
+            <div class="text-center">
+              <userAvatar />
+            </div>
+            <ul class="list-group list-group-striped">
+              <li class="list-group-item">
+                <svg-icon icon-class="user" />用户名称
+                <div class="pull-right">{{ user.userName }}</div>
+              </li>
+              <li class="list-group-item">
+                <svg-icon icon-class="phone" />手机号码
+                <div class="pull-right">{{ user.phonenumber }}</div>
+              </li>
+              <li class="list-group-item">
+                <svg-icon icon-class="email" />用户邮箱
+                <div class="pull-right">{{ user.email }}</div>
+              </li>
+              <li class="list-group-item">
+                <svg-icon icon-class="tree" />所属部门
+                <div class="pull-right" v-if="user.dept">{{ user.dept.deptName }} / {{ postGroup }}</div>
+              </li>
+              <li class="list-group-item">
+                <svg-icon icon-class="peoples" />所属角色
+                <div class="pull-right">{{ roleGroup }}</div>
+              </li>
+              <li class="list-group-item">
+                <svg-icon icon-class="date" />创建日期
+                <div class="pull-right">{{ user.createTime }}</div>
+              </li>
+            </ul>
+          </div>
+        </el-card>
+      </el-col>
+      <el-col :span="18" :xs="24">
+        <el-card>
+          <div slot="header" class="clearfix">
+            <span>基本资料</span>
+          </div>
+          <el-tabs v-model="activeTab">
+            <el-tab-pane label="基本资料" name="userinfo">
+              <userInfo :user="user" />
+            </el-tab-pane>
+            <el-tab-pane label="修改密码" name="resetPwd">
+              <resetPwd />
+            </el-tab-pane>
+          </el-tabs>
+        </el-card>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import userAvatar from "./userAvatar";
+import userInfo from "./userInfo";
+import resetPwd from "./resetPwd";
+import { getUserProfile } from "@/api/system/user";
+
+export default {
+  name: "Profile",
+  components: { userAvatar, userInfo, resetPwd },
+  data() {
+    return {
+      user: {},
+      roleGroup: {},
+      postGroup: {},
+      activeTab: "userinfo"
+    };
+  },
+  created() {
+    this.getUser();
+  },
+  methods: {
+    getUser() {
+      getUserProfile().then(response => {
+        this.user = response.data;
+        this.roleGroup = response.roleGroup;
+        this.postGroup = response.postGroup;
+      });
+    }
+  }
+};
+</script>

+ 69 - 0
ruoyi-ui/src/views/teacher/profile/resetPwd.vue

@@ -0,0 +1,69 @@
+<template>
+  <el-form ref="form" :model="user" :rules="rules" label-width="80px">
+    <el-form-item label="旧密码" prop="oldPassword">
+      <el-input v-model="user.oldPassword" placeholder="请输入旧密码" type="password" show-password/>
+    </el-form-item>
+    <el-form-item label="新密码" prop="newPassword">
+      <el-input v-model="user.newPassword" placeholder="请输入新密码" type="password" show-password/>
+    </el-form-item>
+    <el-form-item label="确认密码" prop="confirmPassword">
+      <el-input v-model="user.confirmPassword" placeholder="请确认新密码" type="password" show-password/>
+    </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>
+    </el-form-item>
+  </el-form>
+</template>
+
+<script>
+import { updateUserPwd } from "@/api/system/user";
+
+export default {
+  data() {
+    const equalToPassword = (rule, value, callback) => {
+      if (this.user.newPassword !== value) {
+        callback(new Error("两次输入的密码不一致"));
+      } else {
+        callback();
+      }
+    };
+    return {
+      user: {
+        oldPassword: undefined,
+        newPassword: undefined,
+        confirmPassword: undefined
+      },
+      // 表单校验
+      rules: {
+        oldPassword: [
+          { required: true, message: "旧密码不能为空", trigger: "blur" }
+        ],
+        newPassword: [
+          { required: true, message: "新密码不能为空", trigger: "blur" },
+          { min: 6, max: 20, message: "长度在 6 到 20 个字符", trigger: "blur" },
+          { pattern: /^[^<>"'|\\]+$/, message: "不能包含非法字符:< > \" ' \\\ |", trigger: "blur" }
+        ],
+        confirmPassword: [
+          { required: true, message: "确认密码不能为空", trigger: "blur" },
+          { required: true, validator: equalToPassword, trigger: "blur" }
+        ]
+      }
+    };
+  },
+  methods: {
+    submit() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          updateUserPwd(this.user.oldPassword, this.user.newPassword).then(response => {
+            this.$modal.msgSuccess("修改成功");
+          });
+        }
+      });
+    },
+    close() {
+      this.$tab.closePage();
+    }
+  }
+};
+</script>

+ 184 - 0
ruoyi-ui/src/views/teacher/profile/userAvatar.vue

@@ -0,0 +1,184 @@
+<template>
+  <div>
+    <div class="user-info-head" @click="editCropper()"><img v-bind:src="options.img" title="点击上传头像" class="img-circle img-lg" /></div>
+    <el-dialog :title="title" :visible.sync="open" width="800px" append-to-body @opened="modalOpened"  @close="closeDialog">
+      <el-row>
+        <el-col :xs="24" :md="12" :style="{height: '350px'}">
+          <vue-cropper
+            ref="cropper"
+            :img="options.img"
+            :info="true"
+            :autoCrop="options.autoCrop"
+            :autoCropWidth="options.autoCropWidth"
+            :autoCropHeight="options.autoCropHeight"
+            :fixedBox="options.fixedBox"
+            :outputType="options.outputType"
+            @realTime="realTime"
+            v-if="visible"
+          />
+        </el-col>
+        <el-col :xs="24" :md="12" :style="{height: '350px'}">
+          <div class="avatar-upload-preview">
+            <img :src="previews.url" :style="previews.img" />
+          </div>
+        </el-col>
+      </el-row>
+      <br />
+      <el-row>
+        <el-col :lg="2" :sm="3" :xs="3">
+          <el-upload action="#" :http-request="requestUpload" :show-file-list="false" :before-upload="beforeUpload">
+            <el-button size="small">
+              选择
+              <i class="el-icon-upload el-icon--right"></i>
+            </el-button>
+          </el-upload>
+        </el-col>
+        <el-col :lg="{span: 1, offset: 2}" :sm="2" :xs="2">
+          <el-button icon="el-icon-plus" size="small" @click="changeScale(1)"></el-button>
+        </el-col>
+        <el-col :lg="{span: 1, offset: 1}" :sm="2" :xs="2">
+          <el-button icon="el-icon-minus" size="small" @click="changeScale(-1)"></el-button>
+        </el-col>
+        <el-col :lg="{span: 1, offset: 1}" :sm="2" :xs="2">
+          <el-button icon="el-icon-refresh-left" size="small" @click="rotateLeft()"></el-button>
+        </el-col>
+        <el-col :lg="{span: 1, offset: 1}" :sm="2" :xs="2">
+          <el-button icon="el-icon-refresh-right" size="small" @click="rotateRight()"></el-button>
+        </el-col>
+        <el-col :lg="{span: 2, offset: 6}" :sm="2" :xs="2">
+          <el-button type="primary" size="small" @click="uploadImg()">提 交</el-button>
+        </el-col>
+      </el-row>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import store from "@/store";
+import { VueCropper } from "vue-cropper";
+import { uploadAvatar } from "@/api/system/user";
+import { debounce } from '@/utils'
+
+export default {
+  components: { VueCropper },
+  data() {
+    return {
+      // 是否显示弹出层
+      open: false,
+      // 是否显示cropper
+      visible: false,
+      // 弹出层标题
+      title: "修改头像",
+      options: {
+        img: store.getters.avatar,  //裁剪图片的地址
+        autoCrop: true,             // 是否默认生成截图框
+        autoCropWidth: 200,         // 默认生成截图框宽度
+        autoCropHeight: 200,        // 默认生成截图框高度
+        fixedBox: true,             // 固定截图框大小 不允许改变
+        outputType:"png",           // 默认生成截图为PNG格式
+        filename: 'avatar'          // 文件名称
+      },
+      previews: {},
+      resizeHandler: null
+    };
+  },
+  methods: {
+    // 编辑头像
+    editCropper() {
+      this.open = true;
+    },
+    // 打开弹出层结束时的回调
+    modalOpened() {
+      this.visible = true;
+      if (!this.resizeHandler) {
+        this.resizeHandler = debounce(() => {
+          this.refresh()
+        }, 100)
+      }
+      window.addEventListener("resize", this.resizeHandler)
+    },
+    // 刷新组件
+    refresh() {
+      this.$refs.cropper.refresh();
+    },
+    // 覆盖默认的上传行为
+    requestUpload() {
+    },
+    // 向左旋转
+    rotateLeft() {
+      this.$refs.cropper.rotateLeft();
+    },
+    // 向右旋转
+    rotateRight() {
+      this.$refs.cropper.rotateRight();
+    },
+    // 图片缩放
+    changeScale(num) {
+      num = num || 1;
+      this.$refs.cropper.changeScale(num);
+    },
+    // 上传预处理
+    beforeUpload(file) {
+      if (file.type.indexOf("image/") == -1) {
+        this.$modal.msgError("文件格式错误,请上传图片类型,如:JPG,PNG后缀的文件。");
+      } else {
+        const reader = new FileReader();
+        reader.readAsDataURL(file);
+        reader.onload = () => {
+          this.options.img = reader.result;
+          this.options.filename = file.name;
+        };
+      }
+    },
+    // 上传图片
+    uploadImg() {
+      this.$refs.cropper.getCropBlob(data => {
+        let formData = new FormData();
+        formData.append("avatarfile", data, this.options.filename);
+        uploadAvatar(formData).then(response => {
+          this.open = false;
+          this.options.img = process.env.VUE_APP_BASE_API + response.imgUrl;
+          store.commit('SET_AVATAR', this.options.img);
+          this.$modal.msgSuccess("修改成功");
+          this.visible = false;
+        });
+      });
+    },
+    // 实时预览
+    realTime(data) {
+      this.previews = data;
+    },
+    // 关闭窗口
+    closeDialog() {
+      this.options.img = store.getters.avatar
+      this.visible = false;
+      window.removeEventListener("resize", this.resizeHandler)
+    }
+  }
+};
+</script>
+<style scoped lang="scss">
+.user-info-head {
+  position: relative;
+  display: inline-block;
+  height: 120px;
+}
+
+.user-info-head:hover:after {
+  content: '+';
+  position: absolute;
+  left: 0;
+  right: 0;
+  top: 0;
+  bottom: 0;
+  color: #eee;
+  background: rgba(0, 0, 0, 0.5);
+  font-size: 24px;
+  font-style: normal;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+  cursor: pointer;
+  line-height: 110px;
+  border-radius: 50%;
+}
+</style>

+ 88 - 0
ruoyi-ui/src/views/teacher/profile/userInfo.vue

@@ -0,0 +1,88 @@
+<template>
+  <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+    <el-form-item label="用户昵称" prop="nickName">
+      <el-input v-model="form.nickName" maxlength="30" />
+    </el-form-item> 
+    <el-form-item label="手机号码" prop="phonenumber">
+      <el-input v-model="form.phonenumber" maxlength="11" />
+    </el-form-item>
+    <el-form-item label="邮箱" prop="email">
+      <el-input v-model="form.email" maxlength="50" />
+    </el-form-item>
+    <el-form-item label="性别">
+      <el-radio-group v-model="form.sex">
+        <el-radio label="0">男</el-radio>
+        <el-radio label="1">女</el-radio>
+      </el-radio-group>
+    </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>
+    </el-form-item>
+  </el-form>
+</template>
+
+<script>
+import { updateUserProfile } from "@/api/system/user";
+
+export default {
+  props: {
+    user: {
+      type: Object
+    }
+  },
+  data() {
+    return {
+      form: {},
+      // 表单校验
+      rules: {
+        nickName: [
+          { required: true, message: "用户昵称不能为空", trigger: "blur" }
+        ],
+        email: [
+          { required: true, message: "邮箱地址不能为空", trigger: "blur" },
+          {
+            type: "email",
+            message: "请输入正确的邮箱地址",
+            trigger: ["blur", "change"]
+          }
+        ],
+        phonenumber: [
+          { required: true, message: "手机号码不能为空", trigger: "blur" },
+          {
+            pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
+            message: "请输入正确的手机号码",
+            trigger: "blur"
+          }
+        ]
+      }
+    };
+  },
+  watch: {
+    user: {
+      handler(user) {
+        if (user) {
+          this.form = { nickName: user.nickName, phonenumber: user.phonenumber, email: user.email, sex: user.sex };
+        }
+      },
+      immediate: true
+    }
+  },
+  methods: {
+    submit() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          updateUserProfile(this.form).then(response => {
+            this.$modal.msgSuccess("修改成功");
+            this.user.phonenumber = this.form.phonenumber;
+            this.user.email = this.form.email;
+          });
+        }
+      });
+    },
+    close() {
+      this.$tab.closePage();
+    }
+  }
+};
+</script>