Просмотр исходного кода

Merge branch 'web-v2-temp' into web-v2-pro

dedsudiyu 1 год назад
Родитель
Сommit
ba9b365db3
87 измененных файлов с 3330 добавлено и 2135 удалено
  1. 1 1
      src/api/evacuation3_2/index.js
  2. 10 1
      src/api/laboratory/building.js
  3. 24 0
      src/api/safetyCheck/index.js
  4. 13 3
      src/api/system/dept.js
  5. 9 0
      src/api/system/post.js
  6. 19 2
      src/api/system/role.js
  7. 18 0
      src/api/system/user_teacher.js
  8. BIN
      src/assets/ZDimages/evacuation3_2/icon_dzya_dfx.png
  9. BIN
      src/assets/ZDimages/evacuation3_2/icon_dzya_gfx.png
  10. BIN
      src/assets/ZDimages/evacuation3_2/icon_dzya_jgfx.png
  11. BIN
      src/assets/ZDimages/evacuation3_2/icon_dzya_zfx.png
  12. 59 0
      src/components/lookVideoDialog/lookVideoDialog.vue
  13. 8 6
      src/views/comprehensive/laboratoryManagement/building/buildingDetails.vue
  14. 19 18
      src/views/comprehensive/laboratoryManagement/subject/addSubject.vue
  15. 1 0
      src/views/comprehensive/laboratoryManagement/subject/deviceList.vue
  16. 6 15
      src/views/comprehensive/laboratoryManagement/subject/index.vue
  17. 2 14
      src/views/comprehensive/laboratoryManagement/subject/indexOne.vue
  18. 4 4
      src/views/comprehensive/message/addContent/index.vue
  19. 276 0
      src/views/comprehensive/message/warningNotice/algorithmForewarning.vue
  20. 193 0
      src/views/comprehensive/message/warningNotice/index.vue
  21. 356 0
      src/views/comprehensive/message/warningNotice/infoPage.vue
  22. 202 0
      src/views/comprehensive/message/warningNotice/sourceOfDangerForewarning.vue
  23. 1 1
      src/views/comprehensive/personnel/major/index.vue
  24. 4 2
      src/views/comprehensive/personnel/onDutyConfiguration/index.vue
  25. 6 9
      src/views/comprehensive/personnel/post/authUser.vue
  26. 134 103
      src/views/comprehensive/personnel/post/index.vue
  27. 172 53
      src/views/comprehensive/personnel/student/addPage.vue
  28. 60 56
      src/views/comprehensive/personnel/student/differenceComponent/addPageSubPagePublic.vue
  29. 30 26
      src/views/comprehensive/personnel/student/differenceComponent/addPageSubPageSZDX.vue
  30. 1 0
      src/views/comprehensive/personnel/student/index.vue
  31. 126 259
      src/views/comprehensive/personnel/teacher/addPage.vue
  32. 43 40
      src/views/comprehensive/personnel/teacher/differenceComponent/addPageSubPagePublic.vue
  33. 43 40
      src/views/comprehensive/personnel/teacher/differenceComponent/addPageSubPageSZDX.vue
  34. 81 38
      src/views/comprehensive/personnel/teacher/index.vue
  35. 5 5
      src/views/comprehensive/personnel/teacher/indexOne.vue
  36. 955 0
      src/views/comprehensive/system/role/addPage.vue
  37. 143 492
      src/views/comprehensive/system/role/index.vue
  38. 0 208
      src/views/creditViolation/credit/blacklist/blackListInfo.vue
  39. 0 354
      src/views/creditViolation/credit/blacklist/index.vue
  40. 2 1
      src/views/emergencyManagement/electronicInformationBoard/index.vue
  41. 15 16
      src/views/emergencyManagement/evacuation/sparseHardware/addPage.vue
  42. 6 5
      src/views/emergencyManagement/evacuation/sparseHardware/index.vue
  43. 2 0
      src/views/emergencyManagement/smartLoT/abnormal/index.vue
  44. 2 1
      src/views/emergencyManagement/smartLoT/control/index.vue
  45. 2 1
      src/views/emergencyManagement/smartLoT/hardware/index.vue
  46. 47 7
      src/views/emergencyManagement/smartLoT/hardware/powerControl.vue
  47. 46 7
      src/views/emergencyManagement/smartLoT/hardware/smartVentilation.vue
  48. 2 1
      src/views/emergencyManagement/smartLoT/sensor/index.vue
  49. 0 15
      src/views/gasManage3_0/manage/labCenterPerson/labCenterPerson.vue
  50. 1 1
      src/views/gasManage3_0/manage/qualificationApply/qualificationApplyAdd.vue
  51. 1 1
      src/views/gasManage3_0/manage/useGas/useGasAdd.vue
  52. 1 1
      src/views/gasManage3_0/student/qualificationApply/qualificationApplyAdd.vue
  53. 1 1
      src/views/gasManage3_0/student/useGas/useGasAdd.vue
  54. 4 4
      src/views/hierarchicalControl/hierarchicalControl/gradeManage/index.vue
  55. 4 4
      src/views/hierarchicalControl/hierarchicalControl/gradeManageRecord/index.vue
  56. 3 2
      src/views/login.vue
  57. 2 2
      src/views/medicUniversity-3_1/chemicalManagement/chemicalLibrary/CabinetManagement/index.vue
  58. 6 6
      src/views/medicUniversity-3_1/chemicalManagement/chemicalLibrary/CabinetManagement/smartLock.vue
  59. 19 19
      src/views/medicUniversity-3_1/chemicalManagement/chemicalLibrary/ChemicalInfo/listPage.vue
  60. 2 2
      src/views/medicUniversity-3_1/chemicalManagement/chemicalLibrary/ChemicalInfo/msdsPage.vue
  61. 2 1
      src/views/medicUniversity-3_1/chemicalManagement/deviceManagement/IntelligentTerminal/index.vue
  62. 2 1
      src/views/medicUniversity-3_1/chemicalManagement/deviceManagement/SmartAccessControl/index.vue
  63. 2 1
      src/views/medicUniversity-3_1/chemicalManagement/deviceManagement/smartAlarm/index.vue
  64. 2 1
      src/views/medicUniversity-3_1/chemicalManagement/deviceManagement/smartLocker/index.vue
  65. 4 0
      src/views/newEvacuationBigData.vue
  66. 2 1
      src/views/oneKeyOutfire/outfireDevice/outfireDevice.vue
  67. 1 1
      src/views/safetyCheck/checkConfiguration/checkUserPage.vue
  68. 1 1
      src/views/safetyCheck/checkConfiguration/rectificationUserPage.vue
  69. 5 5
      src/views/safetyCheck/dataStatistics/checkIndexStatistics.vue
  70. 9 6
      src/views/safetyCheck/dataStatistics/laboratoryStatistics.vue
  71. 6 5
      src/views/safetyCheck/dataStatistics/safetyHazardStatistics.vue
  72. 4 3
      src/views/safetyCheck/laboratorySelfTest/selfInspectionManagement/index.vue
  73. 4 3
      src/views/safetyCheck/laboratorySelfTest/selfInspectionTask/listPage.vue
  74. 19 11
      src/views/safetyCheck/safetyHazard/departmentListPage.vue
  75. 19 11
      src/views/safetyCheck/safetyHazard/schoolListPage.vue
  76. 4 3
      src/views/safetyCheck/schoolInspection/inspectionManagement/index.vue
  77. 4 3
      src/views/safetyCheck/schoolInspection/inspectionPlan/listPage.vue
  78. 1 1
      src/views/safetyCheck/snapshotManagement/index.vue
  79. 1 1
      src/views/safetyCheck/snapshotManagement/listPage.vue
  80. 11 12
      src/views/safetyCheck/startInspection/index.vue
  81. 2 2
      src/views/safetyEducationExam/safeLearning/el_course/edit.vue
  82. 1 1
      src/views/safetyEducationExam/securityExam/myResultInquiry/index.vue
  83. 1 1
      src/views/secureAccess/approval_handle/addPage.vue
  84. 0 180
      src/views/secureAccess/approval_handle/index.vue
  85. 8 10
      src/views/secureAccess/whitelist/addPage.vue
  86. 1 1
      src/views/secureAccess/whitelist/index.vue
  87. 22 22
      src/views/studentViews/chemicalManagement/studentChemicalInfo/addPage.vue

+ 1 - 1
src/api/evacuation3_2/index.js

@@ -234,7 +234,7 @@ export function riskPlanBatchJoinSub(data) {
 }
 
 
-//疏散设备页面获取楼栋楼层
+//疏散设备页面获取楼栋楼层(组织架构优化后废弃2023/6/20)
 export function selBuildOrFloorList(query) {
   return request({
     url: 'laboratory/buildFloor/selBuildOrFloorList',

+ 10 - 1
src/api/laboratory/building.js

@@ -8,7 +8,7 @@ export function listBuilding(query) {
     params: query
   })
 }
-// 查询楼层 通过楼栋ID
+// 查询楼层 通过楼栋ID(组织架构优化后废弃2023/6/20)
 export function listFloorByBuildId(id) {
   return request({
     url: `/laboratory/building/${id}/list`,
@@ -63,3 +63,12 @@ export function delBuilding(id) {
     method: 'delete'
   })
 }
+
+//查询楼栋/根据楼栋ID查询楼层(无权限)
+export function buildFloorGetlist(query) {
+  return request({
+    url: '/laboratory/buildFloor/getlist',
+    method: 'get',
+    params: query
+  })
+}

+ 24 - 0
src/api/safetyCheck/index.js

@@ -470,6 +470,30 @@ export function checkHazardList(query) {
     params: query
   })
 }
+//待整改
+export function rectifyList(query) {
+  return request({
+    url: '/zd-security/checkHazard/rectifyList',
+    method: 'get',
+    params: query
+  })
+}
+//待复核
+export function recheckList(query) {
+  return request({
+    url: '/zd-security/checkHazard/recheckList',
+    method: 'get',
+    params: query
+  })
+}
+//已完成
+export function overList(query) {
+  return request({
+    url: '/zd-security/checkHazard/overList',
+    method: 'get',
+    params: query
+  })
+}
 
 //安全隐患-校院巡察/批量审核列表
 export function batchApprovalList(query) {

+ 13 - 3
src/api/system/dept.js

@@ -25,7 +25,7 @@ export function listDepartments() {
     method: 'get'
   })
 }
-// 查询楼栋列表-通过院系ID
+// 查询楼栋列表-通过院系ID(组织架构优化后废弃2023/6/20)
 export function listbuildings(id) {
   return request({
     url: `/system/dept/${id}/building/list`,
@@ -49,10 +49,11 @@ export function getDept(deptId) {
 }
 
 // 查询部门下拉树结构
-export function treeselect() {
+export function treeselect(query) {
   return request({
     url: '/system/dept/treeselect',
-    method: 'get'
+    method: 'get',
+    params: query
   })
 }
 
@@ -118,3 +119,12 @@ export function treeselectByUser(data) {
     data: data
   })
 }
+
+//查询学院列表(根据数据权限)
+export function getDeptNoAuthList(data) {
+  return request({
+    url: '/system/dept/getDeptNoAuthList?deptType=1',
+    method: 'get',
+    data: data
+  })
+}

+ 9 - 0
src/api/system/post.js

@@ -52,3 +52,12 @@ export function allListPost(query) {
     params: query
   })
 }
+
+//查询权限组下拉列表
+export function optionselect(query) {
+  return request({
+    url: '/system/role/optionselect',
+    method: 'get',
+    params: query
+  })
+}

+ 19 - 2
src/api/system/role.js

@@ -9,7 +9,7 @@ export function listRole(query) {
   })
 }
 
-// 查询角色详细
+// 查询角色已有权限
 export function getRole(roleId) {
   return request({
     url: '/system/role/' + roleId,
@@ -107,4 +107,21 @@ export function authUserSelectAll(data) {
     method: 'put',
     params: data
   })
-}
+}
+
+// 新增
+export function addRoleByScope(data) {
+  return request({
+    url: '/system/role/addRoleByScope',
+    method: 'POST',
+    data: data
+  })
+}
+// 编辑
+export function editRoleByScope(data) {
+  return request({
+    url: '/system/role/editRoleByScope',
+    method: 'PUT',
+    data: data
+  })
+}

+ 18 - 0
src/api/system/user_teacher.js

@@ -284,6 +284,14 @@ export function treeselect(query) {
     params: query
   })
 }
+// 查询角色列表下拉树结构
+export function roleOptionselect(query) {
+  return request({
+    url: '/system/role/optionselect',
+    method: 'get',
+    params: query
+  })
+}
 
 //批量获取老师数据
 export function teacherBatchSelect(data) {
@@ -301,3 +309,13 @@ export function teacherUpdateCardNum(data) {
     data: data
   })
 }
+
+//获取角色列表(无权限)
+export function noAuthOptionselect(query) {
+  return request({
+    url: '/system/role/noAuthOptionselect',
+    method: 'get',
+    params: query
+  })
+}
+

BIN
src/assets/ZDimages/evacuation3_2/icon_dzya_dfx.png


BIN
src/assets/ZDimages/evacuation3_2/icon_dzya_gfx.png


BIN
src/assets/ZDimages/evacuation3_2/icon_dzya_jgfx.png


BIN
src/assets/ZDimages/evacuation3_2/icon_dzya_zfx.png


+ 59 - 0
src/components/lookVideoDialog/lookVideoDialog.vue

@@ -0,0 +1,59 @@
+<!--视频浏览DIALOG-->
+<!--
+        <lookVideoDialog ref="lookVideoDialog"></lookVideoDialog>
+        import lookVideoDialog from '@/components/lookVideoDialog/lookVideoDialog.vue'
+        components: {
+          lookVideoDialog
+        },
+        /*
+          传入3个参数(1,list,index)
+          1-开启
+          rul视频地址
+          '报警抓拍'title名称
+        */
+        this.$refs.lookVideoDialog.lookVideoDialogOpen(1,item.url,'报警抓拍');
+-->
+<template>
+  <el-dialog class="look-img-dialog" :title="lookVideoDialogTitle" :visible.sync="lookVideoDialogType" v-if="lookVideoDialogType" width="1070px" height="700" append-to-body>
+    <video style="width:1029px;height:578px;" controls="" autoplay="" name="media" :poster="videoCover">
+      <source :src="lookVideoDialogUrl" type="video/mp4">
+    </video>
+  </el-dialog>
+</template>
+
+<script>
+  export default {
+    name: 'lookVideoDialog',
+    data(){
+      return{
+        videoCover:window.location.href.split('://')[0]+'://' + this.judgmentNetworkReturnAddress() + "/admin/" + localStorage.getItem('videoCover'),
+        lookVideoDialogUrl:"",
+        lookVideoDialogTitle:"",
+        lookVideoDialogType:false,
+      }
+    },
+    created(){
+
+    },
+    mounted(){
+
+    },
+    methods:{
+      lookVideoDialogOpen(type,url,title){
+        if(type == 1){
+          this.$set(this,'lookVideoDialogUrl',url);
+          this.$set(this,'lookVideoDialogTitle',title?title:'视频');
+          this.$set(this,'lookVideoDialogType',true);
+        }else if(type == 2){
+          this.$set(this,'lookVideoDialogType',false);
+        }
+      },
+    },
+  }
+</script>
+
+<style scoped lang="scss">
+  .look-img-dialog{
+
+  }
+</style>

+ 8 - 6
src/views/comprehensive/laboratoryManagement/building/buildingDetails.vue

@@ -167,7 +167,7 @@
               </el-option>
             </el-select>
           </el-form-item>
-          <el-form-item label="房间编号:" prop="roomNum">
+          <el-form-item label="房间编号:" prop="roomNum" v-if="dialogForm.roomType == '-99'">
             <el-input v-model="dialogForm.roomNum" placeholder="请输入房间编号" maxlength="20" style="width:300px;"/>
           </el-form-item>
           <el-form-item label="房间名称:" prop="roomName" v-if="dialogForm.roomType == '-99'">
@@ -199,6 +199,7 @@
             <el-radio-group v-model="dialogForm.relayType" style="margin-top:4px;">
               <el-radio :label="2">新版继电器</el-radio>
               <el-radio :label="1">老版继电器</el-radio>
+              <el-radio :label="3">泥人继电器</el-radio>
             </el-radio-group>
           </el-form-item>
           <el-form-item label="继电器参数:" prop="configName" v-if="dialogForm.relayType == 2">
@@ -207,10 +208,10 @@
           <el-form-item label="状态参数:" prop="configStatus" style="width:398px;" v-if="dialogForm.relayType == 2">
             <el-input v-model="dialogForm.configStatus" placeholder="请输入状态参数" maxlength="20" style="width:300px;"/>
           </el-form-item>
-          <el-form-item label="继电器编号:" prop="relayCode" v-if="dialogForm.relayType == 1">
+          <el-form-item label="继电器编号:" prop="relayCode" v-if="dialogForm.relayType == 1 || dialogForm.relayType == 3">
             <el-input v-model="dialogForm.relayCode" placeholder="请输入继电器参数" maxlength="20" style="width:300px;"/>
           </el-form-item>
-          <el-form-item label="继电器路数:" prop="relayBit" style="width:398px;" v-if="dialogForm.relayType == 1" class="dialog-relay-bit-form-item-box">
+          <el-form-item label="继电器路数:" prop="relayBit" style="width:398px;" v-if="dialogForm.relayType == 1 || dialogForm.relayType == 3" class="dialog-relay-bit-form-item-box">
             <el-input-number v-model="dialogForm.relayBit" :min="1" :max="12" placeholder="请输入状态参数" :controls="false" style="width:300px;"></el-input-number>
           </el-form-item>
           <el-form-item label="指示灯类型:" prop="state">
@@ -505,7 +506,7 @@
                     relayType:obj.mapList[i].lightList[o].relayType,
                     state:obj.mapList[i].lightList[o].state,
                   }
-                  if(obj.mapList[i].lightList[o].relayType == 1){
+                  if(obj.mapList[i].lightList[o].relayType == 1 || obj.mapList[i].lightList[o].relayType == 3){
                     minObj.relayCode = obj.mapList[i].lightList[o].relayCode
                     minObj.relayBit = obj.mapList[i].lightList[o].relayBit
                   }else if(obj.mapList[i].lightList[o].relayType == 2){
@@ -568,6 +569,7 @@
         for(let i=0;i<self.subjectOptions.length;i++){
           if(e == self.subjectOptions[i].id){
             self.$set(self.dialogForm,'subName',self.subjectOptions[i].name);
+            self.$set(self.dialogForm,'roomNum',self.subjectOptions[i].room);
           }
         }
       },
@@ -586,7 +588,7 @@
             relayType:item.relayType?item.relayType:2,
             state:item.state?item.state:"",
           }
-          if(obj.relayType == 1){
+          if(obj.relayType == 1 || obj.relayType == 3){
             obj.relayCode = item.relayCode?item.relayCode:"";
             obj.relayBit = item.relayBit?item.relayBit:"";
           }else if(obj.relayType == 2){
@@ -659,7 +661,7 @@
               }else if(this.dialogOpenType == 6){
                 this.$set(this.mapList[this.dialogIndex].lightList[this.dialogMinIndex],'relayType',this.dialogForm.relayType);
                 this.$set(this.mapList[this.dialogIndex].lightList[this.dialogMinIndex],'state',this.dialogForm.state);
-                if(this.dialogForm.relayType == 1){
+                if(this.dialogForm.relayType == 1 || this.dialogForm.relayType == 3){
                   this.$set(this.mapList[this.dialogIndex].lightList[this.dialogMinIndex],'relayCode',this.dialogForm.relayCode);
                   this.$set(this.mapList[this.dialogIndex].lightList[this.dialogMinIndex],'relayBit',this.dialogForm.relayBit);
                 }else if(this.dialogForm.relayType == 2){

+ 19 - 18
src/views/comprehensive/laboratoryManagement/subject/addSubject.vue

@@ -46,7 +46,7 @@
         </el-select>
       </el-form-item>
       <el-form-item label="学院" prop="deptId" class="form-item">
-        <el-select v-model="form.deptId" placeholder="请选择学院" @change="getBuildings" style="width:320px;">
+        <el-select v-model="form.deptId" placeholder="请选择学院" style="width:320px;">
           <el-option
             v-for="dict in deptOptions"
             :key="dict.deptId"
@@ -59,9 +59,9 @@
         <el-select v-model="form.buildId" placeholder="请选择楼栋"  @change="getFloors" style="width:320px;">
           <el-option
             v-for="dict in buildings"
-            :key="dict.deptId"
-            :label="dict.deptName"
-            :value="dict.deptId"
+            :key="dict.id"
+            :label="dict.name"
+            :value="dict.id"
           ></el-option>
         </el-select>
       </el-form-item>
@@ -177,11 +177,11 @@
 </template>
 
 <script>
-    import { listDepartments,listbuildings } from "@/api/system/dept";
+    import { listDepartments } from "@/api/system/dept";
     import { listClassifiedAll } from "@/api/laboratory/classified";
     import { listClasstypeAll } from "@/api/laboratory/classtype";
     import { onUselistLayoutByFloorId,onUselistLayoutByFloorIdTwo } from "@/api/laboratory/layout";
-    import { listFloorByBuildId } from "@/api/laboratory/building";
+    import { buildFloorGetlist } from "@/api/laboratory/building";
     import { selectTeacherList } from "@/api/system/user";
     import { addSubject, getClassifyBySubId, updateSubject } from '@/api/laboratory/subject'
     import { labMoldQueryOption } from "@/api/laboratory/subjectClass";
@@ -348,17 +348,18 @@
             this.safetyInfoList=list
           }
           //根据学院获取楼栋
-          listbuildings(this.form.deptId).then(response => {
-            this.buildings = response.data;
+          buildFloorGetlist({type:2}).then(response => {
+            this.buildings = response.rows;
             //根据楼栋获取层
-            listFloorByBuildId(this.form.buildId).then(response=>{
-              this.floors = response.data;
-              //根据层获取实验室
-              // onUselistLayoutByFloorIdTwo(this.form.floorId,this.form.layoutId).then(response=>{
-              //   this.layoutLists = response.data;
-              // });
+            buildFloorGetlist({type:3,parentId:this.form.buildId}).then(response=>{
+              this.floors = response.rows;
             });
           });
+        }else{
+          //根据学院获取楼栋
+          buildFloorGetlist({type:2}).then(response => {
+            this.buildings = response.rows;
+          });
         }
       },
       methods:{
@@ -461,8 +462,8 @@
             this.floors = [];
             // this.$set(this.form, 'layoutId', '');//房间
             this.layoutLists = [];
-            listbuildings(id).then(response => {
-              this.buildings = response.data;
+            buildFloorGetlist({type:2}).then(response => {
+              this.buildings = response.rows;
             });
           }
         },
@@ -473,8 +474,8 @@
             this.floors = [];
             // this.$set(this.form, 'layoutId', '');//房间
             this.layoutLists = [];
-            listFloorByBuildId(id).then(response=>{
-              this.floors = response.data;
+            buildFloorGetlist({type:3,parentId:id}).then(response=>{
+              this.floors = response.rows;
             });
           }
         },

+ 1 - 0
src/views/comprehensive/laboratoryManagement/subject/deviceList.vue

@@ -203,6 +203,7 @@
             <el-radio-group v-model="form.hardwareType">
               <el-radio :label="1">老继电器</el-radio>
               <el-radio :label="2">新继电器</el-radio>
+              <el-radio :label="3">泥人继电器</el-radio>
             </el-radio-group>
           </el-form-item>
           <el-form-item label="设备编号" prop="relayCode">

+ 6 - 15
src/views/comprehensive/laboratoryManagement/subject/index.vue

@@ -153,6 +153,7 @@
                     <img src="@/assets/ZDimages/subject/icon_bj_yg.png" v-if="item.funNum == 'yanwu'">
                     <img src="@/assets/ZDimages/subject/icon_sy_dqy.png" v-if="item.funNum == 'daqiya'">
                     <img src="@/assets/ZDimages/subject/icon_syspz_voc.png" v-if="item.funNum == 'voc'">
+                    <img src="@/assets/ZDimages/subject/icon_syspz_voc.png" v-if="item.funNum == 'fbvoc'">
                     <img src="@/assets/ZDimages/subject/icon_syspz_tvoc.png" v-if="item.funNum == 'tvoc'">
                     <img src="@/assets/ZDimages/subject/icon_sy_mcnd.png" v-if="item.funNum == 'so2'">
                     <img src="@/assets/ZDimages/subject/icon_bj_yyhd.png" v-if="item.funNum == 'no1'">
@@ -398,7 +399,7 @@ import {
   queryHardByTypeList, subjectTriggerModes,
 } from '@/api/laboratory/subject'
 import { listData} from "@/api/system/dict/data";
-import { filterDept } from "@/api/medicUniversity-3_1/index";
+import { listDepartments } from "@/api/system/dept";
 import addSubject from "./addSubject.vue";
 import deviceList from "./deviceList.vue";
 import admissionConfiguration from "./admissionConfiguration.vue";
@@ -1009,7 +1010,9 @@ export default {
           for(let i=0;i<response.data.labHardwareVOList.length;i++){
             if(response.data.labHardwareVOList[i].hardwareTypeEnum.enumName == 'SWITCH'||
               response.data.labHardwareVOList[i].hardwareTypeEnum.enumName == 'AI_VENTILATION'){
-              obj.VOlist.push(response.data.labHardwareVOList[i]);
+              if( response.data.labHardwareVOList[i].isPcfire == 0 ){
+                obj.VOlist.push(response.data.labHardwareVOList[i]);
+              }
             }
           }
         }
@@ -1122,7 +1125,7 @@ export default {
     },
     /** 查询学院列表 */
     getDeptList() {
-      filterDept().then(response => {
+      listDepartments().then(response => {
         this.$set(this, 'deptOptions', response.data)
       });
     },
@@ -1145,18 +1148,6 @@ export default {
             console.log("订阅成功:" + this.mtopicOne+self.subId);
           }
         });
-        // for(let i = 0; i< self.mqttIdList.length;i++){
-        //   this.client.subscribe(this.mtopic+self.mqttIdList[i], (err) => {
-        //     if (!err) {
-        //       console.log("订阅成功:" + this.mtopic+self.mqttIdList[i]);
-        //     }
-        //   });
-        //   this.client.subscribe(this.mtopicOne+self.mqttIdList[i], (err) => {
-        //     if (!err) {
-        //       console.log("订阅成功:" + this.mtopicOne+self.mqttIdList[i]);
-        //     }
-        //   });
-        // }
       });
       this.client.on("message", (topic, message) => {
         // console.log('message',message)

+ 2 - 14
src/views/comprehensive/laboratoryManagement/subject/indexOne.vue

@@ -283,7 +283,7 @@ import mqtt from 'mqtt'
 import flvjs from 'flv.js'
 import { hardWareControl,alarmControl } from "@/api/laboratory/hardware";
 import { authListSubject,subjectInfo,updateSubject,mangerVoice,startUrl,getDetalis } from "@/api/laboratory/subject";
-import { filterDept } from "@/api/medicUniversity-3_1/index";
+import { listDepartments } from "@/api/system/dept";
 // import addSubject from "./addSubject.vue";
 // import deviceList from "./deviceListOne.vue";
 // import admissionConfiguration from "./admissionConfiguration.vue";
@@ -802,7 +802,7 @@ export default {
     },
     /** 查询学院列表 */
     getDeptList() {
-      filterDept().then(response => {
+      listDepartments().then(response => {
         this.$set(this, 'deptOptions', response.data)
       });
     },
@@ -825,18 +825,6 @@ export default {
             console.log("订阅成功:" + this.mtopicOne+self.subId);
           }
         });
-        // for(let i = 0; i< self.mqttIdList.length;i++){
-        //   this.client.subscribe(this.mtopic+self.mqttIdList[i], (err) => {
-        //     if (!err) {
-        //       console.log("订阅成功:" + this.mtopic+self.mqttIdList[i]);
-        //     }
-        //   });
-        //   this.client.subscribe(this.mtopicOne+self.mqttIdList[i], (err) => {
-        //     if (!err) {
-        //       console.log("订阅成功:" + this.mtopicOne+self.mqttIdList[i]);
-        //     }
-        //   });
-        // }
       });
       this.client.on("message", (topic, message) => {
         // console.log('message',message)

+ 4 - 4
src/views/comprehensive/message/addContent/index.vue

@@ -73,7 +73,7 @@
   import userList from "./userList.vue"
   import subjectList from "./subjectList.vue"
   import { optionselect } from "@/api/laboratory/gradeManage";
-  import { listDepartments } from "@/api/system/dept";
+  import { getDeptNoAuthList } from "@/api/system/dept";
     export default {
       name: "addContent",
       components: {
@@ -126,7 +126,7 @@
       },
       mounted(){
         this.optionselect();
-        this.listDepartments();
+        this.getDeptNoAuthList();
       },
       methods: {
         //选择实验室
@@ -205,8 +205,8 @@
             this.optionselectList = list;
           });
         },
-        listDepartments(){
-          listDepartments().then(response => {
+        getDeptNoAuthList(){
+          getDeptNoAuthList().then(response => {
             let list = response.data;
             let obj = {
               deptName:"全部学院",

+ 276 - 0
src/views/comprehensive/message/warningNotice/algorithmForewarning.vue

@@ -0,0 +1,276 @@
+<!--算法预警-->
+<template>
+  <div class="algorithmForewarning">
+    <div class="title-box">
+      <p>算法预警配置</p>
+      <p></p>
+    </div>
+    <div class="content-box scrollbar-box">
+      <el-form class="form-max-box" ref="addForm" :model="addForm" :rules="rules" label-width="170px">
+        <div class="form-top-box">
+          <el-form-item class="form-item-box" label="穿戴抓拍周期" prop="num1">
+            <el-input-number style="width:320px" v-model="addForm.num1" placeholder="请输入抓拍周期(小时)" :min="1" :max="3" label=""></el-input-number>
+          </el-form-item>
+          <el-form-item class="form-item-box" label="异常再识别数" prop="num2">
+            <el-input-number style="width:320px" v-model="addForm.num2" placeholder="请输入异常再识别数" :min="5" :max="10" label=""></el-input-number>
+          </el-form-item>
+          <el-form-item class="form-item-box" label="异常再识别率" prop="num3">
+            <el-input-number style="width:320px" v-model="addForm.num3" placeholder="请输入异常再识别率(%)" :min="70" :max="90" label=""></el-input-number>
+          </el-form-item>
+        </div>
+        <p class="form-title-p">穿戴识别</p>
+        <div class="check-max-box">
+          <p class="check-title">系统通知</p>
+          <div class="check-right-box check-right-box-A">
+            <p>监测异常</p>
+            <div>
+              <el-select v-model="systemData.num" placeholder="请选择" style="width:50px;height:30px;">
+                <el-option
+                  v-for="item in options"
+                  :key="item.value"
+                  :label="item.label"
+                  :value="item.value">
+                </el-option>
+              </el-select>
+            </div>
+            <p>次</p>
+            <p>监测到实验人员未正确穿戴实验服,{{systemData.num==1?'一':(systemData.num==2?'二':(systemData.num==3?'三':(systemData.num==4?'四':(systemData.num==5?'五':(systemData.num==6?'六':(systemData.num==7?'七':(systemData.num==8?'八':(systemData.num==9?'九':(systemData.num==10?'十':'')))))))))}}次后通过该方式进行预警通知。</p>
+          </div>
+        </div>
+        <div class="check-max-box">
+          <p class="check-title">短信通知</p>
+          <div class="check-right-box check-right-box-A">
+            <p>监测异常</p>
+            <div>
+              <el-select v-model="shortMessageData.num" placeholder="请选择" style="width:50px;height:30px;">
+                <el-option
+                  v-for="item in options"
+                  :key="item.value"
+                  :label="item.label"
+                  :value="item.value">
+                </el-option>
+              </el-select>
+            </div>
+            <p>次</p>
+            <p>监测到实验人员未正确穿戴实验服,{{shortMessageData.num==1?'一':(shortMessageData.num==2?'二':(shortMessageData.num==3?'三':(shortMessageData.num==4?'四':(shortMessageData.num==5?'五':(shortMessageData.num==6?'六':(shortMessageData.num==7?'七':(shortMessageData.num==8?'八':(shortMessageData.num==9?'九':(shortMessageData.num==10?'十':'')))))))))}}次后通过该方式进行预警通知。</p>
+          </div>
+        </div>
+        <div class="check-max-box">
+          <p class="check-title">语音播报</p>
+          <div class="check-right-box check-right-box-A">
+            <p>监测异常</p>
+            <div>
+              <el-select v-model="voiceData.num" placeholder="请选择" style="width:50px;height:30px;">
+                <el-option
+                  v-for="item in options"
+                  :key="item.value"
+                  :label="item.label"
+                  :value="item.value">
+                </el-option>
+              </el-select>
+            </div>
+            <p>次</p>
+            <p>监测到实验人员未正确穿戴实验服,{{voiceData.num==1?'一':(voiceData.num==2?'二':(voiceData.num==3?'三':(voiceData.num==4?'四':(voiceData.num==5?'五':(voiceData.num==6?'六':(voiceData.num==7?'七':(voiceData.num==8?'八':(voiceData.num==9?'九':(voiceData.num==10?'十':'')))))))))}}次后通过该方式进行预警通知。</p>
+          </div>
+        </div>
+      </el-form>
+    </div>
+    <div class="bottom-button-max-box">
+      <p></p>
+      <p class="reset-button-one" @click="outButton">取消</p>
+      <p class="inquire-button-one" @click="upDataButton">提交</p>
+      <p></p>
+    </div>
+  </div>
+</template>
+
+<script>
+  export default {
+    name: 'algorithmForewarning',
+    data(){
+      return{
+        options:[
+          {value:"1",label:"1"},{value:"2",label:"2"},{value:"3",label:"3"},{value:"4",label:"4"},
+          {value:"5",label:"5"},{value:"6",label:"6"},{value:"7",label:"7"},{value:"8",label:"8"},
+          {value:"9",label:"9"},{value:"10",label:"10"}
+        ],
+        addForm:{
+          num1:1,
+          num2:10,
+          num3:80,
+        },
+        systemData:{
+          num:3
+        },
+        shortMessageData:{
+          num:3
+        },
+        voiceData:{
+          num:3
+        },
+        rules:{
+          num1: [
+            { required: true, message: "请输入穿戴抓拍周期", trigger: "blur" },
+          ],
+          num2: [
+            { required: true, message: "请输入异常再识别数", trigger: "blur" },
+          ],
+          num3: [
+            { required: true, message: "请输入异常再识别率", trigger: "blur" },
+          ],
+        },
+      }
+    },
+    created(){
+
+    },
+    mounted(){
+
+    },
+    methods:{
+      //选择
+      checkClick(type){
+        if(type == 1){
+          this.$set(this.systemData,'type',0);
+        }else if (type == 2){
+          this.$set(this.systemData,'type',1);
+        }else if (type == 3){
+          this.$set(this.shortMessageData,'type',0);
+        }else if (type == 4){
+          this.$set(this.shortMessageData,'type',1);
+        }else if (type == 5){
+          this.$set(this.voiceData,'type',0);
+        }else if (type == 6){
+          this.$set(this.voiceData,'type',1);
+        }
+      },
+      //提交
+      upDataButton(){
+        this.$refs["addForm"].validate(valid => {
+          if (valid) {
+
+          }
+        })
+      },
+      //返回事件
+      outButton(){
+        this.$parent.goPage(1);
+      },
+    }
+  }
+</script>
+
+<style scoped lang="scss">
+  .algorithmForewarning{
+    font-weight: 500;
+    flex: 1;
+    display: flex !important;
+    flex-direction: column;
+    overflow: hidden;
+    ::v-deep .el-input-number__increase{
+      line-height: 38px;
+    }
+    .title-box{
+      display: flex;
+      border-bottom:1px solid #dedede;
+      p:nth-child(1){
+        margin-left:20px;
+        line-height: 80px;
+        font-size:18px;
+        color:#0045AF;
+      }
+      p:nth-child(2){
+        flex:1;
+      }
+      p:nth-child(3){
+        margin:20px;
+      }
+    }
+    .content-box{
+      flex:1;
+      .form-max-box{
+        .form-top-box{
+          display: flex;
+          margin-top:40px;
+          height:80px;
+          .form-item-box{
+            height:80px;
+            margin-bottom:0;
+          }
+        }
+        .form-title-p{
+          line-height:50px;
+          color:#0045AF;
+          background-color: #F5F5F5;
+          font-size:16px;
+          padding-left:20px;
+          margin-bottom:40px;
+        }
+        .check-max-box{
+          margin-bottom:20px;
+          display: flex;
+          height:40px;
+          line-height:40px;
+          .check-title{
+            margin-left:126px;
+            width:80px;
+            text-align: left;
+            font-size:16px;
+          }
+          .check-right-box{
+            cursor: pointer;
+            display: flex;
+            width:670px;
+            ::v-deep .el-input__icon{
+              line-height:30px;
+            }
+            ::v-deep .el-input__inner{
+              height:30px;
+              padding-right: 20px;
+              padding-left: 10px;
+            }
+            ::v-deep .el-input__suffix{
+              right:0;
+              height:30px;
+            }
+          }
+          .check-right-box-A{
+            border:1px solid #0183FA;
+            border-radius:4px;
+            p:nth-child(1){
+              width:80px;
+              margin-left:10px;
+            }
+            div:nth-child(2){
+              margin-top:-2px;
+            }
+            p:nth-child(3){
+              margin:0 20px 0 14px;
+            }
+            p:nth-child(4){
+              font-size:14px;
+              color:#CCCCCC;
+            }
+          }
+        }
+      }
+    }
+    .bottom-button-max-box{
+      display: flex;
+      padding:20px 0;
+      p:nth-child(1){
+        flex:1;
+      }
+      p:nth-child(2){
+        width:100px;
+        margin-right:20px;
+      }
+      p:nth-child(3){
+        width:100px;
+      }
+      p:nth-child(4){
+        flex:1;
+      }
+    }
+  }
+</style>

+ 193 - 0
src/views/comprehensive/message/warningNotice/index.vue

@@ -0,0 +1,193 @@
+<template>
+  <div class="app-container warningNotice">
+    <div class="warningNotice-page" v-if="pageType == 1">
+      <div class="title-box">
+        <el-form :model="queryParams" class="form-box" ref="queryForm" :inline="true" label-width="80px">
+          <el-form-item label="预警类型" prop="deptId" label-width="100px">
+            <el-select v-model="queryParams.deptId" clearable placeholder="全部" style="width:150px;">
+              <el-option
+                v-for="item in selectListA"
+                :key="item.key"
+                :label="item.value"
+                :value="item.key">
+              </el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="预警方式" prop="deptId">
+            <el-select v-model="queryParams.deptId" clearable placeholder="全部" style="width:150px;">
+              <el-option
+                v-for="item in selectListB"
+                :key="item.key"
+                :label="item.value"
+                :value="item.key">
+              </el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="预警时间" prop="dateRange" style="margin-left:10px;" label-width="70px">
+            <el-date-picker
+              :clearable="false"
+              v-model="dateRange"
+              size="small"
+              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>
+            <p class="inquire-button-one" @click="handleQuery" style="margin-right:10px;">查询</p>
+            <p class="reset-button-one" @click="resetQuery">重置</p>
+          </el-form-item>
+          <el-form-item style="float: right;">
+            <el-col :span="1.5">
+              <p class="inquire-button-one"
+                 style="width:100px;"
+                 @click="goPage(3)"
+              >危险源预警</p>
+            </el-col>
+          </el-form-item>
+          <el-form-item style="float: right;">
+            <el-col :span="1.5">
+              <p class="inquire-button-one"
+                 style="width:100px;"
+                 @click="goPage(2)"
+              >算法预警</p>
+            </el-col>
+          </el-form-item>
+        </el-form>
+      </div>
+      <div class="content-box">
+        <el-table  border :data="tableList" ref="multipleTable">
+          <el-table-column label="预警时间" align="center" prop="checkSchedule" show-overflow-tooltip />
+          <el-table-column label="预警类型" align="center" prop="checkSchedule" show-overflow-tooltip width="300"/>
+          <el-table-column label="预警内容" align="center" prop="checkSchedule" show-overflow-tooltip width="300"/>
+          <el-table-column label="预警方式" align="center" prop="createName" show-overflow-tooltip width="300"/>
+          <el-table-column label="实验室" sortable="custom" align="center" prop="createTime" show-overflow-tooltip width="300"/>
+          <el-table-column label="操作" align="center" prop="deptName" width="150">
+            <template slot-scope="scope">
+              <div class="table-button-box">
+                <p class="table-button-null"></p>
+                <p class="table-button-p">详情</p>
+                <p class="table-button-null"></p>
+              </div>
+            </template>
+          </el-table-column>
+        </el-table>
+        <pagination :page-sizes="[20, 30, 40, 50]"
+                    v-show="total>0"
+                    :total="total"
+                    :page.sync="queryParams.pageNum"
+                    :limit.sync="queryParams.pageSize"
+                    @pagination="getList"
+        />
+      </div>
+    </div>
+    <algorithmForewarning v-if="pageType == 2"></algorithmForewarning>
+    <sourceOfDangerForewarning v-if="pageType == 3"></sourceOfDangerForewarning>
+    <infoPage v-if="pageType == 4"></infoPage>
+  </div>
+</template>
+
+<script>
+  import algorithmForewarning from './algorithmForewarning.vue'
+  import sourceOfDangerForewarning from './sourceOfDangerForewarning.vue'
+  import infoPage from './infoPage.vue'
+  export default {
+    name: 'index',
+    components: {
+      algorithmForewarning,
+      sourceOfDangerForewarning,
+      infoPage
+    },
+    data(){
+      return{
+        pageType:1,
+        selectListA:[{key:"1",value:"选项1"}],
+        selectListB:[{key:"1",value:"选项2"}],
+        queryParams:{},
+        dateRange:[],
+        tableList:[],
+        total:0,
+      }
+    },
+    created(){
+
+    },
+    mounted(){
+
+    },
+    methods:{
+      goPage(type){
+        if(type != this.pageType){
+          this.$set(this,'pageType',type);
+        }
+      },
+      //获取数据列表
+      getList(){
+        let obj = JSON.parse(JSON.stringify(this.queryParams))
+        if(this.dateRange[0]){
+          obj.startTime = this.dateRange[0];
+        }else{
+          obj.startTime = "";
+        }
+        if(this.dateRange[1]){
+          obj.endTime = this.dateRange[1];
+        }else{
+          obj.endTime = "";
+        }
+        checkManageList(obj).then(response => {
+          this.total = response.data.total;
+          this.tableList = response.data.records;
+        });
+      },
+      /** 搜索按钮操作 */
+      handleQuery() {
+        this.$set(this.queryParams,'pageNum',1);
+        this.getList();
+      },
+      /** 重置按钮操作 */
+      resetQuery() {
+        this.$set(this,'dateRange',[]);
+        this.$set(this,'queryParams',{
+          pageNum:1,
+          pageSize:20,
+          checkType:2,
+          manageStatus:'-1',
+          checkTimeSort:0,
+          searchValue:"",
+          deptId:"",
+          isSelf:0,
+        });
+        this.handleQuery();
+      },
+    }
+  }
+</script>
+
+<style scoped lang="scss">
+  .warningNotice{
+    flex: 1;
+    display: flex !important;
+    flex-direction: column;
+    overflow: hidden;
+    .warningNotice-page{
+      flex: 1;
+      display: flex !important;
+      flex-direction: column;
+      overflow: hidden;
+      .title-box{
+        margin-top:20px;
+        border-bottom:1px solid #dedede;
+      }
+      .content-box{
+        padding:20px;
+        flex: 1;
+        display: flex !important;
+        flex-direction: column;
+        overflow: hidden;
+      }
+    }
+  }
+</style>

Разница между файлами не показана из-за своего большого размера
+ 356 - 0
src/views/comprehensive/message/warningNotice/infoPage.vue


+ 202 - 0
src/views/comprehensive/message/warningNotice/sourceOfDangerForewarning.vue

@@ -0,0 +1,202 @@
+<!--危险源预警-->
+<template>
+  <div class="sourceOfDangerForewarning">
+    <div class="title-box">
+      <p>危险源预警配置</p>
+      <p></p>
+    </div>
+    <div class="content-box scrollbar-box">
+      <el-form class="form-max-box" ref="addForm" :model="addForm" :rules="rules" label-width="170px">
+        <p class="form-title-p">化学品预警规则</p>
+        <div class="form-top-box">
+          <el-form-item class="form-item-box" label="即将过期提醒" prop="num1">
+            <el-input-number style="width:320px" v-model="addForm.num1" placeholder="请输入即将过期提醒天数(天)" :min="5" :max="60" label=""></el-input-number>
+          </el-form-item>
+          <el-form-item class="form-item-box" label="过期提醒数" prop="num2">
+            <el-input-number style="width:320px" v-model="addForm.num2" placeholder="请输入化学品过期后提醒次数" :min="1" :max="5" label=""></el-input-number>
+          </el-form-item>
+        </div>
+        <el-form-item class="form-item-check-box" label="违规带离">
+          <el-checkbox-group v-model="addForm.check1">
+            <el-checkbox style="width:100px;margin-top:2px;"
+                         v-for="item in checkListA" :value="item.key" :label="item.value" :key="item.key">{{item.value}}</el-checkbox>
+          </el-checkbox-group>
+        </el-form-item>
+        <el-form-item class="form-item-check-box" label="超时未归还">
+          <el-checkbox-group v-model="addForm.check2">
+            <el-checkbox style="width:100px;margin-top:2px;"
+                         v-for="item in checkListB" :value="item.key" :label="item.value" :key="item.key">{{item.value}}</el-checkbox>
+          </el-checkbox-group>
+        </el-form-item>
+        <el-form-item class="form-item-check-box" label="化学品已过期">
+          <el-checkbox-group v-model="addForm.check3">
+            <el-checkbox style="width:100px;margin-top:2px;"
+                         v-for="item in checkListB" :value="item.key" :label="item.value" :key="item.key">{{item.value}}</el-checkbox>
+          </el-checkbox-group>
+        </el-form-item>
+        <el-form-item class="form-item-check-box" label="化学品即将过期">
+          <el-checkbox-group v-model="addForm.check4">
+            <el-checkbox style="width:100px;margin-top:2px;"
+                         v-for="item in checkListB" :value="item.key" :label="item.value" :key="item.key">{{item.value}}</el-checkbox>
+          </el-checkbox-group>
+        </el-form-item>
+        <p class="form-title-p" style="margin-top:20px;margin-bottom:10px;">气瓶预警规则</p>
+        <el-form-item class="form-item-check-box" label="违规带离">
+          <el-checkbox-group v-model="addForm.check5">
+            <el-checkbox style="width:100px;margin-top:2px;"
+                         v-for="item in checkListA" :value="item.key" :label="item.value" :key="item.key">{{item.value}}</el-checkbox>
+          </el-checkbox-group>
+        </el-form-item>
+        <el-form-item class="form-item-check-box" label="超时未归还">
+          <el-checkbox-group v-model="addForm.check6">
+            <el-checkbox style="width:100px;margin-top:2px;"
+                         v-for="item in checkListB" :value="item.key" :label="item.value" :key="item.key">{{item.value}}</el-checkbox>
+          </el-checkbox-group>
+        </el-form-item>
+        <el-form-item class="form-item-check-box" label="化学品已过期">
+          <el-checkbox-group v-model="addForm.check7">
+            <el-checkbox style="width:100px;margin-top:2px;"
+                         v-for="item in checkListB" :value="item.key" :label="item.value" :key="item.key">{{item.value}}</el-checkbox>
+          </el-checkbox-group>
+        </el-form-item>
+        <el-form-item class="form-item-check-box" label="化学品即将过期">
+          <el-checkbox-group v-model="addForm.check8">
+            <el-checkbox style="width:100px;margin-top:2px;"
+                         v-for="item in checkListB" :value="item.key" :label="item.value" :key="item.key">{{item.value}}</el-checkbox>
+          </el-checkbox-group>
+        </el-form-item>
+      </el-form>
+    </div>
+    <div class="bottom-button-max-box">
+      <p></p>
+      <p class="reset-button-one" @click="outButton">取消</p>
+      <p class="inquire-button-one" @click="upDataButton">提交</p>
+      <p></p>
+    </div>
+  </div>
+</template>
+
+<script>
+  export default {
+    name: 'sourceOfDangerForewarning',
+    data(){
+      return{
+        checkListA:[{key:"1",value:"系统通知"},{key:"2",value:"短信通知"},{key:"3",value:"声光报警"},],
+        checkListB:[{key:"1",value:"系统通知"},{key:"2",value:"短信通知"}],
+        addForm:{
+          num1:7,
+          num2:2,
+          check1:[],
+          check2:[],
+          check3:[],
+          check4:[],
+          check5:[],
+          check6:[],
+          check7:[],
+          check8:[],
+        },
+        rules:{
+          num1: [
+            { required: true, message: "请输入穿戴抓拍周期", trigger: "blur" },
+          ],
+          num2: [
+            { required: true, message: "请输入异常再识别数", trigger: "blur" },
+          ],
+        },
+      }
+    },
+    created(){
+
+    },
+    mounted(){
+
+    },
+    methods:{
+
+      //提交
+      upDataButton(){
+        this.$refs["addForm"].validate(valid => {
+          if (valid) {
+
+          }
+        })
+      },
+      //返回事件
+      outButton(){
+        this.$parent.goPage(1);
+      },
+    }
+  }
+</script>
+
+<style scoped lang="scss">
+  .sourceOfDangerForewarning{
+    font-weight: 500;
+    flex: 1;
+    display: flex !important;
+    flex-direction: column;
+    overflow: hidden;
+    ::v-deep .el-input-number__increase{
+      line-height: 38px;
+    }
+    .title-box{
+      display: flex;
+      border-bottom:1px solid #dedede;
+      p:nth-child(1){
+        margin-left:20px;
+        line-height: 80px;
+        font-size:18px;
+        color:#0045AF;
+      }
+      p:nth-child(2){
+        flex:1;
+      }
+      p:nth-child(3){
+        margin:20px;
+      }
+    }
+    .content-box{
+      flex:1;
+      padding-top:30px;
+
+      .form-max-box{
+        .form-top-box{
+          display: flex;
+          margin-top:30px;
+          height:60px;
+          .form-item-box{
+            height:60px;
+            margin-bottom:0;
+          }
+        }
+        .form-item-check-box{
+          margin:0;
+        }
+        .form-title-p{
+          line-height:50px;
+          color:#0045AF;
+          background-color: #F5F5F5;
+          font-size:16px;
+          padding-left:20px;
+        }
+      }
+    }
+    .bottom-button-max-box{
+      display: flex;
+      padding:20px 0;
+      p:nth-child(1){
+        flex:1;
+      }
+      p:nth-child(2){
+        width:100px;
+        margin-right:20px;
+      }
+      p:nth-child(3){
+        width:100px;
+      }
+      p:nth-child(4){
+        flex:1;
+      }
+    }
+  }
+</style>

+ 1 - 1
src/views/comprehensive/personnel/major/index.vue

@@ -155,7 +155,7 @@ export default {
     },
     /** 查询部门下拉树结构 */
     getTreeselect() {
-        treeselect().then(response => {
+        treeselect({deptType:1}).then(response => {
             console.log(response.data);
             this.deptOptions = response.data;
         });

+ 4 - 2
src/views/comprehensive/personnel/onDutyConfiguration/index.vue

@@ -99,8 +99,8 @@
               :options="options"
               :props="{ multiple: true,
                         expandTrigger: 'hover',
-                        value: 'id',
-                        label: 'label'
+                        value: 'deptId',
+                        label: 'deptName'
                        }"
               collapse-tags
               clearable></el-cascader>
@@ -399,6 +399,8 @@
               if(list[i].subOrDept == 1){
                 list.splice(i,1)
                 i--
+              }else{
+                delete list[i].children
               }
             }
           }else{

+ 6 - 9
src/views/comprehensive/personnel/post/authUser.vue

@@ -232,15 +232,12 @@ export default {
     },
     /** 重置按钮操作 */
     resetQuery() {
-      // this.resetForm("queryForm");
-      this.$set(this,'queryParams',{
-        pageNum: 1,
-        pageSize:20,
-        deptId: '',
-        userName: '',
-        nickName: '',
-        phonenumber: ''
-      })
+      this.$set(this.queryParams,'pageNum',1);
+      this.$set(this.queryParams,'pageSize',20);
+      this.$set(this.queryParams,'nickName','');
+      this.$set(this.queryParams,'userName','');
+      this.$set(this.queryParams,'phonenumber','');
+      this.$set(this.queryParams,'deptId','');
       this.handleQuery();
     },
     // 多选框选中数据

+ 134 - 103
src/views/comprehensive/personnel/post/index.vue

@@ -2,25 +2,24 @@
   <div class="app-container post-page">
     <div class="post-page-min" v-if="pageType == 1">
       <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px" >
-
         <el-form-item label="关键字" prop="searchValue">
           <el-input
             v-model="queryParams.searchValue"
-            placeholder="请输入职位编码"
+            placeholder="请输入身份编码"
             clearable
             size="small"
           />
         </el-form-item>
-        <el-form-item label="状态" prop="status">
-          <el-select v-model="queryParams.status" placeholder="职位状态" clearable size="small">
-            <el-option
-              v-for="dict in statusOptions"
-              :key="dict.dictValue"
-              :label="dict.dictLabel"
-              :value="dict.dictValue"
-            />
-          </el-select>
-        </el-form-item>
+        <!--<el-form-item label="状态" prop="status">-->
+          <!--<el-select v-model="queryParams.status" placeholder="身份状态" clearable size="small">-->
+            <!--<el-option-->
+              <!--v-for="dict in statusOptions"-->
+              <!--:key="dict.dictValue"-->
+              <!--:label="dict.dictLabel"-->
+              <!--:value="dict.dictValue"-->
+            <!--/>-->
+          <!--</el-select>-->
+        <!--</el-form-item>-->
         <el-form-item style="float: right;">
           <el-col :span="1.5" style="margin-right:20px">
             <p class="add-button-one-120"
@@ -35,58 +34,36 @@
         </el-form-item>
       </el-form>
       <el-table v-loading="loading" border :data="postList" @selection-change="handleSelectionChange">
-        <el-table-column type="selection" width="55" align="center" />
-        <!--<el-table-column label="职位编号" align="left" prop="postId" />-->
-        <el-table-column label="职位编码" align="left" prop="postCode" />
-        <el-table-column label="职位名称" align="left" prop="postName" />
-        <el-table-column label="职位排序" align="left" prop="postSort" />
-        <el-table-column label="状态" align="left" prop="status" :formatter="statusFormat" />
+        <!--<el-table-column type="selection" width="55" align="center" />-->
+        <el-table-column label="序号"  width="55" align="center"  type="index"/>
+        <el-table-column label="身份名称" align="left" prop="postName" :show-overflow-tooltip="true" width="200"/>
+        <el-table-column label="身份编码" align="left" prop="postCode" :show-overflow-tooltip="true" width="200"/>
+        <el-table-column label="权限组" align="left" prop="roleNameStr" :show-overflow-tooltip="true"/>
+        <!--<el-table-column label="状态" align="left" prop="status" :formatter="statusFormat" :show-overflow-tooltip="true" width="80"/>-->
         <el-table-column label="创建时间" align="left" prop="createTime" width="180">
           <template slot-scope="scope">
             <span>{{ parseTime(scope.row.createTime) }}</span>
           </template>
         </el-table-column>
-        <el-table-column label="操作" align="left" class-name="small-padding fixed-width" width="240">
+        <el-table-column label="操作" align="left" class-name="small-padding fixed-width" width="180">
           <template slot-scope="scope">
             <div class="table-button-box">
               <p class="table-button-null"></p>
               <p class="table-button-p"
                  @click="handleAuthUser(scope.row)"
-              >分配用户</p>
-              <p class="table-button-p"
-                 @click="handleUpdate(scope.row)"
-                 v-hasPermiAnd="['system:post:query','system:post:edit']"
-              >编辑</p>
-              <p class="table-button-p"
-                 @click="handleDelete(scope.row)"
-                 v-hasPermi="['system:post:remove']"
-              >删除</p>
+              >成员维护</p>
+              <el-dropdown @command="moreClick" v-hasPermi="['system:post:query','system:post:edit','system:post:remove']">
+                <p class="table-button-p">更多>></p>
+                <el-dropdown-menu slot="dropdown">
+                  <el-dropdown-item style="border-bottom:1px solid #E0E0E0;margin:0 10px;" :command="{row:scope.row,command:1}"
+                                    v-hasPermiAnd="['system:post:query','system:post:edit']">编辑</el-dropdown-item>
+                  <el-dropdown-item style="margin:0 10px;" :command="{row:scope.row,command:2}"
+                                    v-hasPermi="['system:post:remove']">删除</el-dropdown-item>
+                </el-dropdown-menu>
+              </el-dropdown>
               <p class="table-button-null"></p>
             </div>
           </template>
-          <!--<template slot-scope="scope">-->
-            <!--<el-button-->
-              <!--size="mini"-->
-              <!--type="text"-->
-              <!--icon="el-icon-edit"-->
-              <!--@click="handleUpdate(scope.row)"-->
-              <!--v-hasPermi="['system:post:edit']"-->
-            <!--&gt;分配职位</el-button>-->
-            <!--<el-button-->
-              <!--size="mini"-->
-              <!--type="text"-->
-              <!--icon="el-icon-edit"-->
-              <!--@click="handleUpdate(scope.row)"-->
-              <!--v-hasPermi="['system:post:edit']"-->
-            <!--&gt;修改</el-button>-->
-            <!--<el-button-->
-              <!--size="mini"-->
-              <!--type="text"-->
-              <!--icon="el-icon-delete"-->
-              <!--@click="handleDelete(scope.row)"-->
-              <!--v-hasPermi="['system:post:remove']"-->
-            <!--&gt;删除</el-button>-->
-          <!--</template>-->
         </el-table-column>
       </el-table>
       <pagination :page-sizes="[20, 30, 40, 50]"
@@ -98,31 +75,47 @@
         @pagination="getList"
       />
     </div>
-    <!-- 添加或修改职位对话框 -->
+    <!-- 添加或修改身份对话框 -->
     <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body
                :close-on-click-modal="false">
       <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <el-form-item label="职位名称" prop="postName">
-          <el-input v-model="form.postName" placeholder="请输入职位名称" maxlength="10" />
+        <el-form-item label="身份名称" prop="postName">
+          <el-input v-model="form.postName" placeholder="请输入身份名称" maxlength="10" />
         </el-form-item>
-        <el-form-item label="职位编码" prop="postCode">
-          <el-input v-model="form.postCode" placeholder="请输入编码名称" maxlength="10" />
+        <el-form-item label="身份编码" prop="postCode">
+          <el-input v-model="form.postCode" placeholder="请输入编码名称" maxlength="20" />
         </el-form-item>
-        <el-form-item label="职位顺序" prop="postSort">
-          <el-input-number v-model="form.postSort" controls-position="right" :min="0"  style="width: 380px"/>
-        </el-form-item>
-        <el-form-item label="职位状态" prop="status">
-          <el-radio-group v-model="form.status">
-            <el-radio
-              v-for="dict in statusOptions"
-              :key="dict.dictValue"
-              :label="dict.dictValue"
-            >{{dict.dictLabel}}</el-radio>
-          </el-radio-group>
-        </el-form-item>
-        <el-form-item label="备注" prop="remark">
-          <el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
+        <!--<el-form-item label="身份顺序" prop="postSort">-->
+          <!--<el-input-number v-model="form.postSort" controls-position="right" :min="0"  style="width: 380px"/>-->
+        <!--</el-form-item>-->
+
+        <el-form-item label="权限组" prop="roleIds">
+          <el-select
+            style="width:380px;"
+            v-model="form.roleIds"
+            multiple
+            collapse-tags
+            placeholder="请选择">
+            <el-option
+              v-for="item in optionselectList"
+              :key="item.roleId"
+              :label="item.roleName"
+              :value="item.roleId">
+            </el-option>
+          </el-select>
         </el-form-item>
+        <!--<el-form-item label="身份状态" prop="status">-->
+          <!--<el-radio-group v-model="form.status">-->
+            <!--<el-radio-->
+              <!--v-for="dict in statusOptions"-->
+              <!--:key="dict.dictValue"-->
+              <!--:label="dict.dictValue"-->
+            <!--&gt;{{dict.dictLabel}}</el-radio>-->
+          <!--</el-radio-group>-->
+        <!--</el-form-item>-->
+        <!--<el-form-item label="备注" prop="remark">-->
+          <!--<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />-->
+        <!--</el-form-item>-->
       </el-form>
       <div slot="footer" class="dialog-footer">
         <el-button @click="cancel">取 消</el-button>
@@ -136,7 +129,8 @@
 </template>
 
 <script>
-import { listPost, getPost, delPost, addPost, updatePost } from "@/api/system/post";
+  import { positionByList } from "@/api/system/user";
+import { listPost, getPost, delPost, addPost, updatePost, optionselect } from "@/api/system/post";
 import authUser from "./authUser.vue";
 
 export default {
@@ -159,7 +153,7 @@ export default {
       showSearch: true,
       // 总条数
       total: 0,
-      // 职位表格数据
+      // 身份表格数据
       postList: [],
       // 弹出层标题
       title: "",
@@ -183,33 +177,48 @@ export default {
       // 表单校验
       rules: {
         postName: [
-          { required: true, message: "职位名称不能为空", trigger: "blur" },
-          { required: true, message: "职位名称不能为空", validator: this.spaceJudgment, trigger: "blur" }
+          { required: true, message: "请输入身份名称", trigger: "blur" },
+          { required: true, message: "请输入身份名称", validator: this.spaceJudgment, trigger: "blur" }
         ],
         postCode: [
-          { required: true, message: "职位编码不能为空", trigger: "blur" },
-          { required: true, message: "职位编码不能为空", validator: this.spaceJudgment, trigger: "blur" }
+          { required: true, message: "请输入身份编码", trigger: "blur" },
+          { required: true, message: "请输入身份编码", validator: this.spaceJudgment, trigger: "blur" }
         ],
         postSort: [
-          { required: true, message: "职位顺序不能为空", trigger: "blur" },
-          { required: true, message: "职位顺序不能为空", validator: this.spaceJudgment, trigger: "blur" }
+          { required: true, message: "请输入身份顺序", trigger: "blur" },
+          { required: true, message: "请输入身份顺序", validator: this.spaceJudgment, trigger: "blur" }
+        ],
+        roleIds: [
+          { required: true, message: "请选择权限组", trigger: "blur" },
+          { required: true, message: "请选择权限组", validator: this.spaceJudgment, trigger: "blur" }
         ]
-      }
+      },
+      //权限组列表
+      optionselectList:[],
     };
   },
   created() {
     this.getList();
-    this.getDicts("sys_normal_disable").then(response => {
-      this.statusOptions = response.data;
-    });
+    // this.getDicts("sys_normal_disable").then(response => {
+    //   this.statusOptions = response.data;
+    // });
+    this.optionselect();
   },
   methods: {
+    //更多选项
+    moreClick(item){
+      if(item.command == 1){
+        this.handleUpdate(item.row)
+      }else if(item.command == 2){
+        this.handleDelete(item.row)
+      }
+    },
     clickPage(type){
       if(this.pageType != type){
         this.pageType = type;
       }
     },
-    /** 查询职位列表 */
+    /** 查询身份列表 */
     getList() {
       this.loading = true;
       listPost(this.queryParams).then(response => {
@@ -218,7 +227,13 @@ export default {
         this.loading = false;
       });
     },
-    // 职位状态字典翻译
+    //获取权限组列表
+    optionselect(){
+      optionselect().then(response => {
+        this.optionselectList = response.data;
+      });
+    },
+    // 身份状态字典翻译
     statusFormat(row, column) {
       return this.selectDictLabel(this.statusOptions, row.status);
     },
@@ -234,7 +249,6 @@ export default {
         postCode: undefined,
         postName: undefined,
         postSort: 0,
-        status: "0",
         remark: undefined
       };
       this.resetForm("form");
@@ -252,14 +266,17 @@ export default {
         pageNum: 1,
         pageSize:20,
         searchValue:"",
-        status:"",
       });
       this.handleQuery();
     },
     /** 分配用户操作 */
     handleAuthUser: function(row) {
-      this.postId=row.postId;
-      this.pageType=2;
+      if(row.roleIds){
+        this.postId=row.postId;
+        this.pageType=2;
+      }else{
+        this.msgError('未配置权限组的身份无法分配用户')
+      }
     },
     // 多选框选中数据
     handleSelectionChange(selection) {
@@ -271,30 +288,38 @@ export default {
     handleAdd() {
       this.reset();
       this.open = true;
-      this.title = "添加职位";
+      this.title = "新增身份";
     },
     /** 修改按钮操作 */
     handleUpdate(row) {
       this.reset();
       const postId = row.postId || this.ids
       getPost(postId).then(response => {
+        if(response.data.roleIds){
+          response.data.roleIds = response.data.roleIds.split(',')
+          for(let i=0;i<response.data.roleIds.length;i++){
+            response.data.roleIds[i] = parseInt(response.data.roleIds[i]);//字符串转数字
+          }
+        }
         this.form = response.data;
         this.open = true;
-        this.title = "修改职位";
+        this.title = "修改身份";
       });
     },
     /** 提交按钮 */
     submitForm: function() {
       this.$refs["form"].validate(valid => {
         if (valid) {
+          let obj = JSON.parse(JSON.stringify(this.form))
+          obj.roleIds = obj.roleIds+'';
           if (this.form.postId != undefined) {
-            updatePost(this.form).then(response => {
+            updatePost(obj).then(response => {
               this.msgSuccess("修改成功");
               this.open = false;
               this.getList();
             });
           } else {
-            addPost(this.form).then(response => {
+            addPost(obj).then(response => {
               this.msgSuccess("新增成功");
               this.open = false;
               this.getList();
@@ -305,17 +330,23 @@ export default {
     },
     /** 删除按钮操作 */
     handleDelete(row) {
-      const postIds = row.postId || this.ids;
-      this.$confirm('是否确认删除职位?', "警告", {
-          confirmButtonText: "确定",
-          cancelButtonText: "取消",
-          type: "warning"
-        }).then(function() {
-          return delPost(postIds);
-        }).then(() => {
-          this.getList();
-          this.msgSuccess("删除成功");
-        }).catch(() => {});
+      positionByList({position:row.postId}).then(response => {
+        if(response.total<1){
+          const postIds = row.postId || this.ids;
+          this.$confirm('是否确认删除身份?', "警告", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning"
+          }).then(function() {
+            return delPost(postIds);
+          }).then(() => {
+            this.getList();
+            this.msgSuccess("删除成功");
+          }).catch(() => {});
+        }else{
+          this.msgError('该身份下还有用户无法删除')
+        }
+      });
     },
     /** 导出按钮操作 */
     handleExport() {

+ 172 - 53
src/views/comprehensive/personnel/student/addPage.vue

@@ -3,7 +3,7 @@
     <div class="top-title-box">
       <p>{{titleName}}</p>
     </div>
-    <el-form :model="form" class="top-info-box" ref="form" :inline="true" :rules="rules" label-width="120px">
+    <el-form :model="form" class="top-info-box" ref="form" :inline="true" :rules="rules" label-width="180px">
       <div class="left-info-box">
         <img :src="form.avatar" v-if="form.avatar">
         <img src="@/assets/ZDimages/tx_cion_one.png" v-if="!form.avatar">
@@ -59,6 +59,41 @@
             </el-option>
           </el-select>
         </el-form-item>
+        <el-form-item label="身份:" prop="position">
+          <el-select
+            :disabled="editType"
+            v-model="form.position"
+            filterable
+            remote
+            clearable
+            reserve-keyword
+            @change="positionSelectClick"
+            @clear="positionClearClick"
+            placeholder="请选择身份"
+            :remote-method="positionSelect">
+            <el-option
+              v-for="item in positionOptions"
+              :key="item.postId"
+              :label="item.postName"
+              :value="item.postId">
+            </el-option>
+          </el-select>
+        </el-form-item>
+        <!--<el-form-item label="角色:" prop="roleIds">-->
+          <!--<el-select-->
+            <!--:disabled="editType"-->
+            <!--v-model="form.roleIds"-->
+            <!--multiple-->
+            <!--collapse-tags-->
+            <!--placeholder="请选择角色">-->
+            <!--<el-option-->
+              <!--v-for="item in roleOptionselectOptions"-->
+              <!--:key="item.roleId"-->
+              <!--:label="item.roleName"-->
+              <!--:value="item.roleId">-->
+            <!--</el-option>-->
+          <!--</el-select>-->
+        <!--</el-form-item>-->
         <el-form-item label="专业:" prop="majorId">
           <el-select
             :disabled="editType"
@@ -67,7 +102,6 @@
             remote
             clearable
             reserve-keyword
-            @visible-change="majorSelectNull"
             @change="majorSelectClick"
             @clear="majorClearClick"
             placeholder="请选择专业"
@@ -100,7 +134,6 @@
             remote
             clearable
             reserve-keyword
-            @visible-change="gradeSelectNull"
             @change="gradeSelectClick"
             @clear="gradeClearClick"
             placeholder="请选择班级"
@@ -216,22 +249,6 @@
           </div>
           <p v-if="!form.signature" style="line-height:40px;color:#999;width:180px;padding-left:40px;">未上传</p>
         </el-form-item>
-        <el-form-item label="账号状态:" prop="status">
-          <el-switch
-            v-if="!editType"
-            @click.native="changeIsNeedCaptcha"
-            class="switch captcha-img"
-            :active-value="0"
-            :inactive-value="1"
-            active-color="#29B24D"
-            inactive-color="#999"
-            v-model="form.status"
-            active-text="启用"
-            inactive-text="停用"
-            disabled
-          ></el-switch>
-          <p v-if="editType" style="line-height:40px;color:#999;width:180px;padding-left:40px;">{{form.status==0?'启用':'停用'}}</p>
-        </el-form-item>
       </div>
     </el-form>
     <div class="bottom-button-box" v-if="editType">
@@ -263,6 +280,7 @@
 
 <script>
 import { listDepartments } from "@/api/system/dept";
+import { optionselect, noAuthOptionselect } from "@/api/system/user_teacher";
 import { getWorkList, getVague, addSystemClass, getMajorList,getTeacherOption,addUserStudent,putUserStudent } from "@/api/system/user_student";
 import { getToken } from "@/utils/auth";
 import addPageSubPagePublic from './differenceComponent/addPageSubPagePublic.vue'
@@ -291,6 +309,8 @@ export default {
         sex:0,
         userName:"",
         deptId:"",
+        position:"",     //身份
+        roleIds:[],     //角色
         majorId:"",
         grade:"",
         dateBirth:"",
@@ -310,6 +330,7 @@ export default {
         userName: [{ required: true, message: "请输入学号", trigger: "blur" },
           { required: true, message: "请输入学号", validator: this.spaceJudgment, trigger: "blur" }],
         deptId: [{ required: true, message: "请选择所在学院", trigger: "blur" }],
+        // position: [{ required: true, message: "请选择身份", trigger: "blur" }],
         majorId: [{ required: true, message: "请选择专业", trigger: "blur" }],
         phonenumber: [
           { required: true, message: "请输入手机号码", trigger: "blur" },
@@ -334,6 +355,8 @@ export default {
       permissionOpen:false,
       permissionCheckData:{},
       allCheckType:false,
+      //身份列表
+      positionOptions:[],
       //导师查询数据
       tutorUserOptions:[],
       //专业查询数据
@@ -350,10 +373,13 @@ export default {
       gradeOpen:false,
       gradeForm:{
         gradeName:"",
-      }
+      },
+      //角色列表
+      roleOptionselectOptions:[],
     }
   },
   created(){
+    let self = this;
     if(this.propsData.userId){
       if(this.propsData.avatar){
         this.form.avatar = this.propsData.avatar;
@@ -380,6 +406,11 @@ export default {
       }else{
         this.form.deptId = '';
       }
+      if(this.propsData.position){
+        this.form.position = parseInt(this.propsData.position);
+      }else{
+        this.form.position = '';
+      }
       if(this.propsData.majorId){
         this.form.majorId = parseInt(this.propsData.majorId);
       }else{
@@ -440,11 +471,29 @@ export default {
       }else{
         this.form.signature = '';
       }
+      if(this.propsData.roleIds){
+        this.form.roleIds = this.propsData.roleIds;
+      }else{
+        this.form.roleIds = [];
+      }
+      // if(this.propsData.position === '未定'){
+      //   this.form.position = null;
+      // }
+      // if(this.propsData.position){
+      //   this.form.position = this.propsData.position.split(',');
+      //   for(let i=0;i<self.form.position.length;i++){
+      //     self.form.position[i] = parseInt(self.form.position[i]);//字符串转数字
+      //   }
+      // }else{
+      //   this.form.position = [];
+      // }
       this.getSelect();
     }else{
       this.getAll();
+      this.positionSelectAll();
       this.majorSelectAll();
       this.gradeSelectAll();
+      this.positionSelect();
     }
   },
   mounted(){
@@ -452,6 +501,7 @@ export default {
   },
   methods:{
     upDataClick(){
+      let self = this;
       this.$refs["form"].validate(valid => {
         if (valid) {
           if(this.form.email){
@@ -461,10 +511,13 @@ export default {
               return
             }
           }
+          let obj = JSON.parse(JSON.stringify(this.form));
+          obj.roleIds = self.form.position?self.form.roleIds:[];
+          // obj.position = obj.position+'';
           if(this.propsData.userId){
             //编辑
-            this.form.userId = this.propsData.userId
-            putUserStudent(this.form).then(response => {
+            obj.userId = this.propsData.userId
+            putUserStudent(obj).then(response => {
               if(response.code==200){
                 this.msgSuccess(response.msg)
                 this.outPageButton()
@@ -475,17 +528,17 @@ export default {
                   type: "warning"
                 }).then(() => {
                   //  确定
-                  this.$router.push({ path: '/comprehensive/laboratoryManagement/accessAuthorization' });
+                  self.$router.push({ path: '/comprehensive/laboratoryManagement/accessAuthorization' });
                 }).catch(function() {
                   //  取消
-                  this.outPageButton();
+                  self.outPageButton();
                 });
               }
 
             });
           }else{
             //新增
-            addUserStudent(this.form).then(response => {
+            addUserStudent(obj).then(response => {
               if(response.code==200){
                 this.msgSuccess(response.msg)
                 this.outPageButton()
@@ -496,10 +549,10 @@ export default {
                   type: "warning"
                 }).then(() => {
                   //  确定
-                  this.$router.push({ path: '/comprehensive/laboratoryManagement/accessAuthorization' });
+                  self.$router.push({ path: '/comprehensive/laboratoryManagement/accessAuthorization' });
                 }).catch(function() {
                   //  取消
-                  this.outPageButton();
+                  self.outPageButton();
                 });
               }
 
@@ -510,6 +563,10 @@ export default {
     },
     //查询所有搜索接口数据
     getAll(){
+      //查询角色
+      noAuthOptionselect().then(response => {
+        this.roleOptionselectOptions = response.data;
+      });
       //学籍状态查询
       getVague({dictType:"student_status", dictLabel:""}).then(response => {
         this.workStatusOptions = response.data;
@@ -520,6 +577,12 @@ export default {
       });
     },
     getSelect(){
+      //身份查询
+      this.positionSelectAll();
+      //查询角色
+      noAuthOptionselect().then(response => {
+        this.roleOptionselectOptions = response.data;
+      });
       //导师查询
       if(this.propsData.tutorUserName){
         getTeacherOption({nickName:this.propsData.tutorUserName}).then(response => {
@@ -568,6 +631,70 @@ export default {
     changeIsNeedCaptcha(){
       this.form.status = this.form.status == 1?0:1;
     },
+    positionSelectNull(type){
+      if(!type&&!this.positionOptions[0]){
+        this.positionSelectAll();
+      }
+    },
+    positionSelectAll(){
+      let obj = {
+        postName:'',
+      };
+      optionselect(obj).then(response => {
+        let list = [];
+        for(let i=0;i<response.data.length;i++){
+          if(response.data[i].roleIds){
+            list.push(response.data[i]);
+          }
+        }
+        this.$set(this,'positionOptions',list)
+      });
+    },
+    //查询身份
+    positionSelect(query){
+      let obj = {
+        postName:query,
+      };
+      optionselect(obj).then(response => {
+        let list = [];
+        for(let i=0;i<response.data.length;i++){
+          if(response.data[i].roleIds){
+            list.push(response.data[i]);
+          }
+        }
+        this.$set(this,'positionOptions',list)
+      });
+    },
+    positionSelectClick(data){
+      //选中
+      let self = this;
+      if(this.form.position){
+        let num = 0;
+        for(let i=0;i<self.positionOptions.length;i++){
+          if(self.form.position == self.positionOptions[i].postId && self.positionOptions[i].roleIds){
+            let list = self.positionOptions[i].roleIds.split(',')
+            let newList = [];
+            for(let o=0;o<list.length;o++){
+              for(let s=0;s<self.roleOptionselectOptions.length;s++){
+                if(list[o] == self.roleOptionselectOptions[s].roleId){
+                  newList.push(parseInt(list[o]));
+                }
+              }
+            }
+            self.$set(self.form,'roleIds',newList);
+            num++
+          }
+        }
+        if(num == 0){
+          self.$set(self.form,'roleIds',[]);
+        }
+      }
+      this.$forceUpdate();
+    },
+    positionClearClick(){
+      // this.$set(this.form,'roleIds',[])
+      this.positionSelectAll();
+    },
     //*************************学籍状态查询
     workStatusSelect(query){
       if (query !== '') {
@@ -634,17 +761,13 @@ export default {
       });
     },
     gradeSelect(query){
-      if (query !== '') {
-        let obj = {
-          className:query,
-        }
-        getWorkList(obj).then(response => {
-          this.gradeOptions = response.data;
-          this.gradeOptions.push({className:"+ 添加班级",id:9981});
-        });
-      } else {
-        this.optionsUser = [];
+      let obj = {
+        className:query,
       }
+      getWorkList(obj).then(response => {
+        this.gradeOptions = response.data;
+        this.gradeOptions.push({className:"+ 添加班级",id:9981});
+      });
     },
     //班级选中触发
     gradeSelectClick(data){
@@ -676,16 +799,12 @@ export default {
       });
     },
     majorSelect(query){
-      if (query !== '') {
-        let obj = {
-          majorName:query,
-        };
-        getMajorList(obj).then(response => {
-          this.majorOptions = response.data;
-        });
-      } else {
-        this.majorOptions = [];
-      }
+      let obj = {
+        majorName:query,
+      };
+      getMajorList(obj).then(response => {
+        this.majorOptions = response.data;
+      });
     },
     //专业选中触发
     majorSelectClick(data){
@@ -1236,22 +1355,22 @@ export default {
       height:70px;
     }
     .el-input--small{
-      width:180px!important;
+      width:250px!important;
     }
     .el-select{
-      width:180px!important;
+      width:250px!important;
     }
     .el-input{
-      width:180px!important;
+      width:250px!important;
     }
     .el-input__inner{
-      width:180px!important;
+      width:250px!important;
     }
     .el-radio-group{
-      width:180px!important;
+      width:250px!important;
     }
     .is-disabled{
-      width:180px!important;
+      width:250px!important;
     }
 
     .switch .el-switch__label {

+ 60 - 56
src/views/comprehensive/personnel/student/differenceComponent/addPageSubPagePublic.vue

@@ -8,62 +8,66 @@
     name: 'addPageSubPagePublic',
     methods:{
       upDataClick(){
-        let self = this;
-        self.$parent.$refs["form"].validate(valid => {
-          if (valid) {
-            if(self.$parent.form.email){
-              let re = /^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/;
-              if(!re.test(self.$parent.form.email)){
-                self.msgError('请输入正确的邮箱地址')
-                return
-              }
-            }
-            if(self.$parent.propsData.userId){
-              //编辑
-              self.$parent.form.userId = self.$parent.propsData.userId
-              putUserStudent(self.$parent.form).then(response => {
-                if(response.code==200){
-                  self.msgSuccess(response.msg)
-                  self.$parent.outPageButton()
-                }else if(response.code==205){
-                  self.$confirm(response.msg, "警告", {
-                    confirmButtonText: "确定",
-                    cancelButtonText: "取消",
-                    type: "warning"
-                  }).then(() => {
-                    //  确定
-                    self.$router.push({ path: '/comprehensive/laboratoryManagement/accessAuthorization' });
-                  }).catch(function() {
-                    //  取消
-                    self.$parent.outPageButton();
-                  });
-                }
-
-              });
-            }else{
-              //新增
-              addUserStudent(self.$parent.form).then(response => {
-                if(response.code==200){
-                  self.msgSuccess(response.msg)
-                  self.$parent.outPageButton()
-                }else if(response.code==205){
-                  self.$confirm(response.msg, "警告", {
-                    confirmButtonText: "确定",
-                    cancelButtonText: "取消",
-                    type: "warning"
-                  }).then(() => {
-                    //  确定
-                    self.$router.push({ path: '/comprehensive/laboratoryManagement/accessAuthorization' });
-                  }).catch(function() {
-                    //  取消
-                    self.$parent.outPageButton();
-                  });
-                }
-
-              });
-            }
-          }
-        })
+        this.$parent.upDataClick();
+        // let self = this;
+        // self.$parent.$refs["form"].validate(valid => {
+        //   if (valid) {
+        //     if(self.$parent.form.email){
+        //       let re = /^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/;
+        //       if(!re.test(self.$parent.form.email)){
+        //         self.msgError('请输入正确的邮箱地址')
+        //         return
+        //       }
+        //     }
+        //     let obj = JSON.parse(JSON.stringify(self.$parent.form));
+        //     // obj.position = obj.position+'';
+        //     if(self.$parent.propsData.userId){
+        //       //编辑
+        //       obj.userId = self.$parent.propsData.userId
+        //       obj.roleIds = self.$parent.form.position?self.$parent.form.roleIds:[];
+        //       putUserStudent(obj).then(response => {
+        //         if(response.code==200){
+        //           self.msgSuccess(response.msg)
+        //           self.$parent.outPageButton()
+        //         }else if(response.code==205){
+        //           self.$confirm(response.msg, "警告", {
+        //             confirmButtonText: "确定",
+        //             cancelButtonText: "取消",
+        //             type: "warning"
+        //           }).then(() => {
+        //             //  确定
+        //             self.$router.push({ path: '/comprehensive/laboratoryManagement/accessAuthorization' });
+        //           }).catch(function() {
+        //             //  取消
+        //             self.$parent.outPageButton();
+        //           });
+        //         }
+        //
+        //       });
+        //     }else{
+        //       //新增
+        //       addUserStudent(obj).then(response => {
+        //         if(response.code==200){
+        //           self.msgSuccess(response.msg)
+        //           self.$parent.outPageButton()
+        //         }else if(response.code==205){
+        //           self.$confirm(response.msg, "警告", {
+        //             confirmButtonText: "确定",
+        //             cancelButtonText: "取消",
+        //             type: "warning"
+        //           }).then(() => {
+        //             //  确定
+        //             self.$router.push({ path: '/comprehensive/laboratoryManagement/accessAuthorization' });
+        //           }).catch(function() {
+        //             //  取消
+        //             self.$parent.outPageButton();
+        //           });
+        //         }
+        //
+        //       });
+        //     }
+        //   }
+        // })
       },
     }
   }

+ 30 - 26
src/views/comprehensive/personnel/student/differenceComponent/addPageSubPageSZDX.vue

@@ -8,32 +8,36 @@
     name: 'addPageSubPageSZDX',
     methods:{
       upDataClick(){
-        let self = this;
-        self.$parent.$refs["form"].validate(valid => {
-          if (valid) {
-            if(self.$parent.form.email){
-              let re = /^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/;
-              if(!re.test(self.$parent.form.email)){
-                self.msgError('请输入正确的邮箱地址')
-                return
-              }
-            }
-            if(self.$parent.propsData.userId){
-              //编辑
-              self.$parent.form.userId = self.$parent.propsData.userId
-              putUserStudent(self.$parent.form).then(response => {
-                self.msgSuccess(response.msg)
-                self.$parent.outPageButton()
-              });
-            }else{
-              //新增
-              addUserStudent(self.$parent.form).then(response => {
-                self.msgSuccess(response.msg)
-                self.$parent.outPageButton()
-              });
-            }
-          }
-        });
+        this.$parent.upDataClick();
+        // let self = this;
+        // self.$parent.$refs["form"].validate(valid => {
+        //   if (valid) {
+        //     if(self.$parent.form.email){
+        //       let re = /^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/;
+        //       if(!re.test(self.$parent.form.email)){
+        //         self.msgError('请输入正确的邮箱地址')
+        //         return
+        //       }
+        //     }
+        //     let obj = JSON.parse(JSON.stringify(self.$parent.form));
+        //     obj.roleIds = self.$parent.form.position?self.$parent.form.roleIds:[];
+        //     // obj.position = obj.position+'';
+        //     if(self.$parent.propsData.userId){
+        //       //编辑
+        //       obj.userId = self.$parent.propsData.userId
+        //       putUserStudent(self.$parent.form).then(response => {
+        //         self.msgSuccess(response.msg)
+        //         self.$parent.outPageButton()
+        //       });
+        //     }else{
+        //       //新增
+        //       addUserStudent(obj).then(response => {
+        //         self.msgSuccess(response.msg)
+        //         self.$parent.outPageButton()
+        //       });
+        //     }
+        //   }
+        // });
       },
     }
   }

+ 1 - 0
src/views/comprehensive/personnel/student/index.vue

@@ -485,6 +485,7 @@ export default {
         getStudentInfo(item.row.userId).then(response => {
           this.titleName = '学生编辑';
           this.propsData = response.data;
+          this.propsData.roleIds = response.roleIds;
           this.editType = false;
           this.pageType = 2;
         });

+ 126 - 259
src/views/comprehensive/personnel/teacher/addPage.vue

@@ -4,7 +4,7 @@
       <div class="top-title-box">
         <p>{{titleName}}</p>
       </div>
-      <el-form :model="form" class="top-info-box" ref="form" :inline="true" :rules="rules" label-width="120px">
+      <el-form :model="form" class="top-info-box" ref="form" :inline="true" :rules="rules" label-width="180px">
         <div class="left-info-box">
           <img :src="form.avatar" v-if="form.avatar">
           <img src="@/assets/ZDimages/tx_cion.png" v-if="!form.avatar">
@@ -78,11 +78,26 @@
               </el-option>
             </el-select>
           </el-form-item>
+          <!--<el-form-item label="角色:" prop="roleIds">-->
+            <!--<el-select-->
+              <!--:disabled="editType"-->
+              <!--v-model="form.roleIds"-->
+              <!--multiple-->
+              <!--collapse-tags-->
+              <!--placeholder="请选择角色">-->
+              <!--<el-option-->
+                <!--v-for="item in roleOptionselectOptions"-->
+                <!--:key="item.roleId"-->
+                <!--:label="item.roleName"-->
+                <!--:value="item.roleId">-->
+              <!--</el-option>-->
+            <!--</el-select>-->
+          <!--</el-form-item>-->
           <el-form-item label="手机号码:" prop="phonenumber">
             <el-input
               :disabled="editType"
               style="width:218px;"
-              maxlength="25"
+              maxlength="11"
               onkeyup="this.value=this.value.replace(/[^\d.]/g,'')"
               v-model="form.phonenumber"
               placeholder="请输入手机号码"
@@ -100,7 +115,7 @@
               reserve-keyword
               @change="categorySelectClick"
               @clear="categoryClearClick"
-              placeholder="请选择身份"
+              placeholder="请选择职称"
               :remote-method="categorySelect">
               <el-option
                 v-for="item in categoryOptions"
@@ -143,7 +158,7 @@
               reserve-keyword
               @change="educationSelectClick"
               @clear="educationClearClick"
-              placeholder="请选择身份"
+              placeholder="请选择文化程度"
               :remote-method="educationSelect">
               <el-option
                 v-for="item in educationOptions"
@@ -161,235 +176,9 @@
               placeholder="请选择出生日期">
             </el-date-picker>
           </el-form-item>
-          <el-form-item label="在职状态:" prop="nature">
-            <el-switch
-              v-if="!editType"
-              @click.native="natureCaptcha"
-              class="switch captcha-img"
-              active-value="0"
-              inactive-value="1"
-              active-color="#29B24D"
-              inactive-color="#999"
-              v-model="form.nature"
-              active-text="在职"
-              inactive-text="离职"
-              disabled
-            ></el-switch>
-            <p v-if="editType" style="line-height:40px;color:#999;width:180px;padding-left:40px;">{{form.nature==0?'在职':'离职'}}</p>
-          </el-form-item>
-          <el-form-item label="安全检查人员:" prop="isCheck" v-if="versionField() != 'xiBeiNongLinDaXue'">
-            <el-switch
-              v-if="!editType"
-              @click.native="isCheckCaptcha"
-              class="switch captcha-img"
-              :active-value="1"
-              :inactive-value="0"
-              active-color="#0183FA"
-              inactive-color="#999"
-              v-model="form.isCheck"
-              active-text="是"
-              inactive-text="否"
-              disabled
-            ></el-switch>
-            <p v-if="editType" style="line-height:40px;color:#999;width:180px;padding-left:40px;">{{form.isCheck==0?'否':'是'}}</p>
-          </el-form-item>
-          <el-form-item label="账号状态:" prop="status" v-if="form.nature == 0">
-            <el-switch
-              v-if="!editType"
-              @click.native="statusCaptcha"
-              class="switch captcha-img"
-              active-value="0"
-              inactive-value="1"
-              active-color="#0183FA"
-              inactive-color="#999"
-              v-model="form.status"
-              active-text="启用"
-              inactive-text="停用"
-              disabled
-            ></el-switch>
-            <p v-if="editType" style="line-height:40px;color:#999;width:180px;padding-left:40px;">{{form.status==0?'启用':'停用'}}</p>
-          </el-form-item>
         </div>
       </el-form>
-      <div class="top-title-one" v-if="!editType && form.status == 0">
-        <p class="title-p">权限配置</p>
-        <p class="el-icon-question img-p" @mouseenter="showText" @mouseout="hideText"></p>
-        <div class="position-box" v-if="textType">
-          <p>1、权限快捷模板:列出所有已创建的快捷模板,可选择快捷导入模板;导入后可修改或清空。</p>
-          <p>2、模块菜单:选中父级,联动子级全部选中,可对子级单独勾选;子级选中,父级联动选中。</p>
-          <p>3、数据范围:数据查看范围选择,默认展示所有数据。</p>
-          <p>4、管理权限:功能操作权限,包含增删改查、启用、停用,以及导出等操作功能。</p>
-          <p>5、详细配置:对底层菜单的功能操作进行细分权限勾选,功能操作按所属菜单页面现有的功能操作进行展示,可单选、全选。</p>
-        </div>
-      </div>
-      <div class="for-button-list" v-if="!editType && form.status == 0">
-        <p class="for-title-p">权限快捷模板:</p>
-        <div class="for-button-max-box">
-          <div class="for-button-min-box" v-for="(item,index) in templateList" :key="index"
-               :class="templateKey == item.id?'colorAA':'colorBB'" @click="templateClick(item.id)">
-            <i class="el-icon-success" v-if="templateKey == item.id"></i>
-            <span>{{item.name}}</span>
-          </div>
-        </div>
-      </div>
-      <div class="template-name-box" v-if="!editType && form.status == 0">
-        <p class="template-name-p">当前导入模板:{{templateName?templateName:'无'}}</p>
-        <p class="reset-button-one template-name-button" @click="templateDel">清除</p>
-        <p class="template-name-button-one" @click="importUser">导入其他账号权限</p>
-      </div>
-      <div class="table-for-max-box" v-if="!editType && form.status == 0">
-        <div class="table-title-box">
-          <p>模块菜单</p>
-          <p>权限</p>
-        </div>
-        <div class="table-for-big-box" v-for="(maxItem,maxIndex) in menuList" :key="maxIndex">
-          <div class="max-title-box" :class="!maxItem.children?'max-title-box-null':''">
-            <p><el-checkbox :disabled="maxItem.isRequired == 1" v-model="maxItem.checkType" @change="(type)=>itemCheckClick(1,type,maxItem)">{{maxItem.menuName}}</el-checkbox></p>
-          </div>
-          <div class="max-right-box">
-            <div class="big-box" v-for="(bigItem,bigIndex) in maxItem.children" :key="bigIndex">
-              <div class="big-title-box" :class="bigItem.menuType == 'C'?'big-title-box-null':''">
-                <p><el-checkbox :disabled="bigItem.isRequired == 1" v-model="bigItem.checkType" @change="(type)=>itemCheckClick(2,type,bigItem,maxItem)">{{bigItem.menuName}}</el-checkbox></p>
-              </div>
-              <div class="big-right-box" v-if="bigItem.menuType !='C'">
-                <div class="min-box" v-for="(minItem,minIndex) in bigItem.children" :key="minIndex">
-                  <div class="min-title-box">
-                    <p><el-checkbox :disabled="minItem.isRequired == 1" v-model="minItem.checkType" @change="(type)=>itemCheckClick(3,type,minItem,bigItem,maxItem)">{{minItem.menuName}}</el-checkbox></p>
-                  </div>
-                  <div class="min-right-box" v-if="minItem.checkType">
-                    <div class="scope-box">
-                      <p>
-                        <el-checkbox v-model="minItem.scopeCheckType" @change="(type)=>itemCheckClick(4,type,minItem)" style="margin-right:40px;">数据范围</el-checkbox>
-                        <el-select v-model="minItem.dataScope" :disabled="!minItem.scopeCheckType" v-if="minItem.isRequired == 1"
-                                   placeholder="请选择1" @visible-change="(type)=>visibleChange(type,minItem,maxIndex,bigIndex,minIndex)">
-                          <el-option v-for="dist in optionsDataListOne" :key="dist.type" :label="dist.value" :value="dist.type" @click.native="(type)=>optionChange(dist.type,minItem,maxIndex,bigIndex,minIndex)"></el-option>
-                        </el-select>
-                        <el-select v-model="minItem.dataScope" :disabled="!minItem.scopeCheckType" v-if="minItem.isRequired != 1"
-                                   placeholder="请选择" @visible-change="(type)=>visibleChange(type,minItem,maxIndex,bigIndex,minIndex)">
-                          <el-option v-for="dist in optionsDataList" :key="dist.type" :label="dist.value" :value="dist.type" @click.native="(type)=>optionChange(dist.type,minItem,maxIndex,bigIndex,minIndex)"></el-option>
-                        </el-select>
-                      </p>
-                    </div>
-                    <div class="permission-box" v-if="minItem.children">
-                      <p class="check-left-p"><el-checkbox v-model="minItem.permissionCheckType"  @change="(type)=>itemCheckClick(5,type,minItem)">管理权限</el-checkbox></p>
-                      <div class="check-button-box" @click="permissionDetails(minItem,maxIndex,bigIndex,minIndex)"
-                           :class="minItem.permissionCheckType?'check-button-box-colorA':'check-button-box-colorB'">
-                        <img v-if="!minItem.permissionCheckType" src="@/assets/ZDimages/personnelManagement/icon_xzqx_zc.png">
-                        <img v-if="minItem.permissionCheckType" src="@/assets/ZDimages/personnelManagement/icon_xzqx_xz.png">
-                        <p>详细配置</p>
-                      </div>
-                    </div>
-                  </div>
-                </div>
-              </div>
-              <div class="big-right-box-null" v-if="bigItem.menuType == 'C'&&bigItem.checkType">
-                <div class="scope-box">
-                  <p>
-                    <el-checkbox v-model="bigItem.scopeCheckType" style="margin-right:40px;" @change="(type)=>itemCheckClick(4,type,bigItem)">数据范围</el-checkbox>
-                    <el-select v-model="bigItem.dataScope" :disabled="!bigItem.scopeCheckType" v-if="bigItem.isRequired == 1"
-                               placeholder="请选择" @visible-change="(type)=>visibleChange(type,bigItem,maxIndex,bigIndex)">
-                      <el-option v-for="dist in optionsDataListOne" :key="dist.type" :label="dist.value" :value="dist.type" @click.native="(type)=>optionChange(dist.type,bigItem,maxIndex,bigIndex)"></el-option>
-                    </el-select>
-                    <el-select v-model="bigItem.dataScope" :disabled="!bigItem.scopeCheckType" v-if="bigItem.isRequired != 1"
-                               placeholder="请选择" @visible-change="(type)=>visibleChange(type,bigItem,maxIndex,bigIndex)">
-                      <el-option v-for="dist in optionsDataList" :key="dist.type" :label="dist.value" :value="dist.type" @click.native="(type)=>optionChange(dist.type,bigItem,maxIndex,bigIndex)"></el-option>
-                    </el-select>
-                  </p>
-                </div>
-                <div class="permission-box" v-if="bigItem.children">
-                  <p class="check-left-p"><el-checkbox v-model="bigItem.permissionCheckType" @change="(type)=>itemCheckClick(5,type,bigItem)">管理权限</el-checkbox></p>
-                  <div class="check-button-box" @click="permissionDetails(bigItem,maxIndex,bigIndex)"
-                       :class="bigItem.permissionCheckType?'check-button-box-colorA':'check-button-box-colorB'">
-                    <img v-if="!bigItem.permissionCheckType" src="@/assets/ZDimages/personnelManagement/icon_xzqx_zc.png">
-                    <img v-if="bigItem.permissionCheckType" src="@/assets/ZDimages/personnelManagement/icon_xzqx_xz.png">
-                    <p>详细配置</p>
-                  </div>
-                </div>
-              </div>
-            </div>
-            <p class="big-box-null" v-if="!maxItem.children&&maxItem.menuName == '数据可视化'">数据可视化大屏查看权限</p>
-          </div>
-        </div>
-      </div>
-
       <user-list-one ref="userOpen"></user-list-one>
-      <el-dialog :title="permissionCheckData.menuName+'模块'" :visible.sync="permissionOpen" width="900px"
-                 :close-on-click-modal="false" append-to-body class="managePermissionTemplates-permission-dialog-box">
-        <p class="title-p">{{permissionCheckData.menuName}}权限详细配置</p>
-        <div class="managePermissionTemplates-permission-dialog-form-box">
-          <div class="title-box">
-            <p class="left-title-p">功能菜单</p>
-            <div class="right-box">
-              <el-checkbox v-model="allCheckType" class="right-box-min" @change="(type)=>permissionCheckClick('1',type)">功能操作</el-checkbox>
-            </div>
-          </div>
-          <div class="check-box">
-            <div class="left-title-box">
-              <p class="left-title-p">{{permissionCheckData.menuName}}</p>
-            </div>
-            <div class="right-box">
-              <el-checkbox class="for-check-box" @change="(type)=>permissionCheckClick('2',type)"
-                           v-for="(item,index) in permissionCheckData.children" :key="index" v-model="item.checkType">
-                {{item.menuName}}
-              </el-checkbox>
-            </div>
-          </div>
-        </div>
-        <div slot="footer" class="managePermissionTemplates-permission-dialog-button-box">
-          <p class="reset-button-one" @click="permissionOpenOff">取消</p>
-          <p class="inquire-button-one" @click="surePermissionOpen">确定</p>
-        </div>
-      </el-dialog>
-      <el-dialog title="选择指定部门(可多选)" @close="deptCancel" :visible.sync="deptOpen" :close-on-click-modal="false"
-                 v-if="deptOpen" width="500px" append-to-body class="managePermissionTemplates-dept-dialog-box">
-        <el-form :model="deptForm" ref="deptForm" :inline="true" :rules="rules" class="addCheckPage-min">
-          <el-form-item label="指定部门" prop="deptIds" label-width="90px" class="el-form-item-bottom">
-            <el-cascader
-              style="width:300px;"
-              :options="treeselectList"
-              :props="{multiple: true,value: 'id', label: 'label'}"
-              v-model="deptForm.deptIds"
-              clearable>
-            </el-cascader>
-          </el-form-item>
-        </el-form>
-        <div slot="footer" class="managePermissionTemplates-dept-dialog-button-box">
-          <p class="reset-button-one" @click="deptCancel">取消</p>
-          <p class="inquire-button-one" @click="deptSure">确定</p>
-        </div>
-      </el-dialog>
-      <!--另存-->
-      <el-dialog title="另存为权限模板" :visible.sync="saveOpen" width="600px" :close-on-click-modal="false" append-to-body class="teacher-revise-dialog-box">
-        <el-form :model="saveForm" ref="saveForm" :inline="true" :rules="rules" class="addCheckPage-min">
-          <el-form-item label="模板名称" prop="name" label-width="110px" >
-            <el-input v-model="saveForm.name" clearable maxlength="12" style="width:420px;" placeholder="请输入模板名称"/>
-          </el-form-item>
-          <el-form-item label="是否为学生模板" prop="type" style="width:420px;">
-            <el-radio-group v-model="saveForm.type">
-              <el-radio :label="1" style="width:80px;margin-left:20px;">是</el-radio>
-              <el-radio :label="0">否</el-radio>
-            </el-radio-group>
-          </el-form-item>
-          <el-form-item label="权限模板说明" prop="newPassword" label-width="110px">
-            <el-input
-              type="textarea"
-              style="width:420px;"
-              maxlength="100"
-              resize="none"
-              show-word-limit
-              :autosize="{ minRows: 6, maxRows: 6}"
-              placeholder="请输入权限模板说明"
-              v-model="saveForm.text">
-            </el-input>
-          </el-form-item>
-        </el-form>
-        <!--<p class="teacher-text-p">确定要重置该账号的密码吗?</p>-->
-        <!--<p class="teacher-text-p">确定操作后,该账号密码将重置为系统初始密码。</p>-->
-        <div slot="footer" class="teacher-revise-dialog-button-box">
-          <p class="reset-button-one" @click="saveOpenOff">取消</p>
-          <p class="inquire-button-one" @click="saveUpData">确定</p>
-        </div>
-      </el-dialog>
     </div>
     <div class="bottom-button-box" v-if="editType">
       <p class="null-p"></p>
@@ -401,9 +190,7 @@
       <p class="button-p-1 reset-button-one" @click="outPageButton">返回</p>
       <addPageSubPageSZDX class="button-p-2" v-if="versionField() === 'suZhouDaXue'"></addPageSubPageSZDX>
       <addPageSubPagePublic class="button-p-2" v-else></addPageSubPagePublic>
-      <!--<p class="inquire-button-one" @click="upDataButton">提交</p>-->
-      <p class="button-p-3 add-button-one-150" v-if="form.status == 0 && form.nature == 0" @click="saveDataButton">另存为权限模板</p>
-      <p class="null-p"></p>
+     <p class="null-p"></p>
     </div>
   </div>
 </template>
@@ -413,7 +200,7 @@ import userListOne from "./userListOne.vue"
 import { listMenuAll} from "@/api/system/menu";
 import { getToken } from "@/utils/auth";
 import { treeselect } from "@/api/system/dept";
-import { optionselect, getVaguet, userPermit, addUserTeacher, putUserTeacherNew } from "@/api/system/user_teacher";
+import { optionselect, noAuthOptionselect, getVaguet, userPermit, addUserTeacher, putUserTeacherNew } from "@/api/system/user_teacher";
 import { getPermitOptionList, getPermitInfo } from "@/api/laboratory/managePermissionTemplates";
 import { addSystemPermit } from "@/api/laboratory/managePermissionTemplates";
 import Treeselect from "@riophae/vue-treeselect";
@@ -448,6 +235,7 @@ export default {
         userName:"",     //工号
         deptId:"",     //所在部门
         position:"",     //身份
+        roleIds:[],     //角色
         category:"",     //职称
         phonenumber:"",     //联系方式
         cardNum:"",     //校园卡号
@@ -466,7 +254,7 @@ export default {
         userName: [{ required: true, message: "请输入工号", trigger: "blur" },
           { required: true, message: "请输入工号", validator: this.spaceJudgment, trigger: "blur" }],
         deptId: [{ required: true, message: "请选择部门", trigger: "blur" }],
-        position: [{ required: true, message: "请选择身份", trigger: "blur" }],
+        // position: [{ required: true, message: "请选择身份", trigger: "blur" }],
         name: [{ required: true, message: "请输入模板名称", trigger: "blur" },
           { required: true, message: "请输入模板名称", validator: this.spaceJudgment, trigger: "blur" }],
         deptIds: [{ required: true, message: "请选择指定部门", trigger: "blur" }],
@@ -527,9 +315,12 @@ export default {
         type:0,
         text:"",
       },
+      //角色列表
+      roleOptionselectOptions:[],
     }
   },
   created(){
+    let self = this;
     if(this.propsData.userId){
       if(this.propsData.avatar){
         this.form.avatar = this.propsData.avatar;
@@ -616,10 +407,26 @@ export default {
       }else{
         this.form.status = '';
       }
+      if(this.propsData.roleIds){
+        this.form.roleIds = this.propsData.roleIds;
+      }else{
+        this.form.roleIds = [];
+      }
       if(!this.editType){
         this.getPermitOptionList();
         this.getMenuOne();
       }
+      // if(this.propsData.position === '未定'){
+      //   this.form.position = null;
+      // }
+      // if(this.propsData.position){
+      //   this.form.position = this.propsData.position.split(',');
+      //   for(let i=0;i<self.form.position.length;i++){
+      //     self.form.position[i] = parseInt(self.form.position[i]);//字符串转数字
+      //   }
+      // }else{
+      //   this.form.position = [];
+      // }
     }else{
       this.getPermitOptionList();
       this.getMenu();
@@ -692,6 +499,8 @@ export default {
     },
     //提交按钮
     upDataButton(){
+      let self = this;
+      console.log('1231111');
       this.$refs["form"].validate(valid => {
         if (valid) {
           if(this.form.email){
@@ -703,6 +512,8 @@ export default {
           }
           let list = this.toArray();
           let obj = JSON.parse(JSON.stringify(this.form));
+          obj.roleIds = self.form.position?self.form.roleIds:[];
+          // obj.position = obj.position+'';
           obj.permitMenus = [];
           if(obj.status == 0){
             for(let i=0;i<list.length;i++){
@@ -733,6 +544,7 @@ export default {
       });
     },
     putUserTeacherNew(obj){
+      let self = this;
       putUserTeacherNew(obj).then(response => {
         if(response.code == 200){
           this.msgSuccess(response.msg);
@@ -744,10 +556,10 @@ export default {
             type: "warning"
           }).then(() => {
             //  确定
-            this.$router.push({ path: '/comprehensive/laboratoryManagement/accessAuthorization' });
+            self.$router.push({ path: '/comprehensive/laboratoryManagement/accessAuthorization' });
           }).catch(function() {
             //  取消
-            this.outPageButton();
+            self.outPageButton();
           });
         }
       });
@@ -805,7 +617,17 @@ export default {
     getAll(){
       //身份
       optionselect({postName:""}).then(response => {
-        this.positionOptions = response.data;
+        let list = [];
+        for(let i=0;i<response.data.length;i++){
+          if(response.data[i].roleIds){
+            list.push(response.data[i]);
+          }
+        }
+        this.$set(this,'positionOptions',list)
+      });
+      //查询角色
+      noAuthOptionselect().then(response => {
+        this.roleOptionselectOptions = response.data;
       });
       //职称
       getVaguet({dictType:"professional",dictLabel:""}).then(response => {
@@ -829,31 +651,74 @@ export default {
           postName:query,
         };
         optionselect(obj).then(response => {
-          this.positionOptions = response.data;
+          let list = [];
+          for(let i=0;i<response.data.length;i++){
+            if(response.data[i].roleIds){
+              list.push(response.data[i]);
+            }
+          }
+          this.$set(this,'positionOptions',list)
         });
       } else {
-        this.positionOptions = [];
+        optionselect({postName:""}).then(response => {
+          let list = [];
+          for(let i=0;i<response.data.length;i++){
+            if(response.data[i].roleIds){
+              list.push(response.data[i]);
+            }
+          }
+          this.$set(this,'positionOptions',list)
+        });
       }
     },
     positionSelectClick(){
-
+      //选中
+      let self = this;
+      if(this.form.position){
+        let num = 0;
+        for(let i=0;i<self.positionOptions.length;i++){
+          if(self.form.position == self.positionOptions[i].postId && self.positionOptions[i].roleIds){
+            let list = self.positionOptions[i].roleIds.split(',')
+            let newList = [];
+            for(let o=0;o<list.length;o++){
+              for(let s=0;s<self.roleOptionselectOptions.length;s++){
+                if(list[o] == self.roleOptionselectOptions[s].roleId){
+                  newList.push(parseInt(list[o]));
+                }
+              }
+            }
+            self.$set(self.form,'roleIds',newList);
+            num++
+          }
+        }
+        if(num == 0){
+          self.$set(self.form,'roleIds',[]);
+        }
+      }
+      this.$forceUpdate();
     },
     positionClearClick(){
-
+      //清空
+      // this.$set(this.form,'roleIds',[])
+      optionselect({postName:""}).then(response => {
+        let list = [];
+        for(let i=0;i<response.data.length;i++){
+          if(response.data[i].roleIds){
+            list.push(response.data[i]);
+          }
+        }
+        this.$set(this,'positionOptions',list)
+      });
     },
     //查询职称列表
     categorySelect(query){
-      if (query !== '') {
-        let obj = {
-          dictType:"professional",
-          dictLabel:query
-        };
-        getVaguet(obj).then(response => {
-          this.categoryOptions = response.data;
-        });
-      } else {
-        this.categoryOptions = [];
-      }
+      let obj = {
+        dictType:"professional",
+        dictLabel:query
+      };
+      getVaguet(obj).then(response => {
+        this.categoryOptions = response.data;
+      });
     },
     categorySelectClick(){
 
@@ -1181,7 +1046,9 @@ export default {
             response.data[a].checkType = true;
           }
         }
+
         if(this.propsData.userId){
+          console.log(this.propsData)
           let newList = JSON.parse(JSON.stringify(response.data));
           this.form.name = this.propsData.name;
           this.form.type = this.propsData.type;
@@ -1694,22 +1561,22 @@ export default {
       height:70px;
     }
     .el-input--small{
-      width:180px!important;
+      width:250px!important;
     }
     .el-select{
-      width:180px!important;
+      width:250px!important;
     }
     .el-input{
-      width:180px!important;
+      width:250px!important;
     }
     .el-input__inner{
-      width:180px!important;
+      width:250px!important;
     }
     .el-radio-group{
-      width:180px!important;
+      width:250px!important;
     }
     .is-disabled{
-      width:180px!important;
+      width:250px!important;
     }
 
     .switch .el-switch__label {

+ 43 - 40
src/views/comprehensive/personnel/teacher/differenceComponent/addPageSubPagePublic.vue

@@ -8,46 +8,49 @@
     name: 'addPageSubPagePublic',
     methods:{
       upDataButton(){
-        let self = this;
-        self.$parent.$refs["form"].validate(valid => {
-          if (valid) {
-            if(self.$parent.form.email){
-              let re = /^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/;
-              if(!re.test(self.$parent.form.email)){
-                self.msgError('请输入正确的邮箱地址')
-                return
-              }
-            }
-            let list = self.$parent.toArray();
-            let obj = JSON.parse(JSON.stringify(self.$parent.form));
-            obj.permitMenus = [];
-            if(obj.status == 0){
-              for(let i=0;i<list.length;i++){
-                let minObj = {
-                  menuId:list[i].menuId,
-                }
-                if(list[i].dataScope){
-                  minObj.dataScope = list[i].dataScope
-                  if(list[i].dataScope == 3){
-                    minObj.deptIds = list[i].deptIds;
-                    minObj.deptIdsList = list[i].deptIdsList;
-                  }
-                }else{
-                  minObj.dataScope = 0
-                }
-                obj.permitMenus.push(minObj)
-              }
-            }
-            if(self.$parent.propsData.userId){
-              //修改
-              obj.userId = self.$parent.propsData.userId;
-              self.putUserTeacherNew(obj);
-            }else{
-              //发布
-              self.addUserTeacher(obj);
-            }
-          }
-        });
+        this.$parent.upDataButton();
+        // let self = this;
+        // self.$parent.$refs["form"].validate(valid => {
+        //   if (valid) {
+        //     if(self.$parent.form.email){
+        //       let re = /^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/;
+        //       if(!re.test(self.$parent.form.email)){
+        //         self.msgError('请输入正确的邮箱地址')
+        //         return
+        //       }
+        //     }
+        //     let list = self.$parent.toArray();
+        //     let obj = JSON.parse(JSON.stringify(self.$parent.form));
+        //     obj.roleIds = self.$parent.form.position?self.$parent.form.roleIds:[];
+        //     // obj.position = obj.position+'';
+        //     obj.permitMenus = [];
+        //     if(obj.status == 0){
+        //       for(let i=0;i<list.length;i++){
+        //         let minObj = {
+        //           menuId:list[i].menuId,
+        //         }
+        //         if(list[i].dataScope){
+        //           minObj.dataScope = list[i].dataScope
+        //           if(list[i].dataScope == 3){
+        //             minObj.deptIds = list[i].deptIds;
+        //             minObj.deptIdsList = list[i].deptIdsList;
+        //           }
+        //         }else{
+        //           minObj.dataScope = 0
+        //         }
+        //         obj.permitMenus.push(minObj)
+        //       }
+        //     }
+        //     if(self.$parent.propsData.userId){
+        //       //修改
+        //       obj.userId = self.$parent.propsData.userId;
+        //       self.putUserTeacherNew(obj);
+        //     }else{
+        //       //发布
+        //       self.addUserTeacher(obj);
+        //     }
+        //   }
+        // });
       },
       putUserTeacherNew(obj){
         let self = this;

+ 43 - 40
src/views/comprehensive/personnel/teacher/differenceComponent/addPageSubPageSZDX.vue

@@ -8,46 +8,49 @@
     name: 'addPageSubPageSZDX',
     methods:{
       upDataButton(){
-        let self = this;
-        self.$parent.$refs["form"].validate(valid => {
-          if (valid) {
-            if(self.$parent.form.email){
-              let re = /^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/;
-              if(!re.test(self.$parent.form.email)){
-                self.msgError('请输入正确的邮箱地址')
-                return
-              }
-            }
-            let list = self.$parent.toArray();
-            let obj = JSON.parse(JSON.stringify(self.$parent.form));
-            obj.permitMenus = [];
-            if(obj.status == 0){
-              for(let i=0;i<list.length;i++){
-                let minObj = {
-                  menuId:list[i].menuId,
-                }
-                if(list[i].dataScope){
-                  minObj.dataScope = list[i].dataScope
-                  if(list[i].dataScope == 3){
-                    minObj.deptIds = list[i].deptIds;
-                    minObj.deptIdsList = list[i].deptIdsList;
-                  }
-                }else{
-                  minObj.dataScope = 0
-                }
-                obj.permitMenus.push(minObj)
-              }
-            }
-            if(self.$parent.propsData.userId){
-              //修改
-              obj.userId = self.$parent.propsData.userId;
-              self.putUserTeacherNew(obj);
-            }else{
-              //发布
-              self.addUserTeacher(obj);
-            }
-          }
-        });
+        this.$parent.upDataButton();
+        // let self = this;
+        // self.$parent.$refs["form"].validate(valid => {
+        //   if (valid) {
+        //     if(self.$parent.form.email){
+        //       let re = /^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/;
+        //       if(!re.test(self.$parent.form.email)){
+        //         self.msgError('请输入正确的邮箱地址')
+        //         return
+        //       }
+        //     }
+        //     let list = self.$parent.toArray();
+        //     let obj = JSON.parse(JSON.stringify(self.$parent.form));
+        //     obj.roleIds = self.$parent.form.position?self.$parent.form.roleIds:[];
+        //     // obj.position = obj.position+'';
+        //     obj.permitMenus = [];
+        //     if(obj.status == 0){
+        //       for(let i=0;i<list.length;i++){
+        //         let minObj = {
+        //           menuId:list[i].menuId,
+        //         }
+        //         if(list[i].dataScope){
+        //           minObj.dataScope = list[i].dataScope
+        //           if(list[i].dataScope == 3){
+        //             minObj.deptIds = list[i].deptIds;
+        //             minObj.deptIdsList = list[i].deptIdsList;
+        //           }
+        //         }else{
+        //           minObj.dataScope = 0
+        //         }
+        //         obj.permitMenus.push(minObj)
+        //       }
+        //     }
+        //     if(self.$parent.propsData.userId){
+        //       //修改
+        //       obj.userId = self.$parent.propsData.userId;
+        //       self.putUserTeacherNew(obj);
+        //     }else{
+        //       //发布
+        //       self.addUserTeacher(obj);
+        //     }
+        //   }
+        // });
       },
       putUserTeacherNew(obj){
         let self = this;

+ 81 - 38
src/views/comprehensive/personnel/teacher/index.vue

@@ -52,7 +52,7 @@
           </div>
         </div>
         <div class="center-max-box"></div>
-        <div class="right-max-box">
+        <div class="teacher-right-max-box">
           <el-form :model="queryParams" class="form-box" ref="queryForm" :inline="true" v-show="showSearch">
             <!--v-hasPermi="['laboratory:plan:add']"-->
 
@@ -260,7 +260,7 @@
       <p class="teacher-text-p">确定要重置该账号的密码吗?</p>
       <p class="teacher-text-p">确定操作后,该账号密码将重置为系统初始密码。</p>
       <div slot="footer" class="teacher-revise-dialog-button-box">
-        <p class="reset-button-one">取消</p>
+        <p class="reset-button-one" @click="offTeacherResetPwd">取消</p>
         <p class="inquire-button-one" @click="teacherResetPwd">确定</p>
       </div>
     </el-dialog>
@@ -299,20 +299,25 @@
       <div class="teacher-import-dialog-position-box" v-if="loading"></div>
     </el-dialog>
     <!--编辑--组织架构-->
-    <el-dialog title="修改部门" :visible.sync="treeOpen" width="600px" append-to-body class="teacher-tree-dialog-box">
+    <el-dialog title="修改部门" v-if="treeOpen" :visible.sync="treeOpen" width="600px" append-to-body class="teacher-tree-dialog-box">
       <el-form :model="treeForm" class="teacher-tree-dialog-form-box" ref="treeForm" :rules="rules" v-show="showSearch">
         <el-form-item label="上级部门" prop="parentId" label-width="90px" v-if="treeForm.parentId != 0">
           <treeselect v-model="treeForm.parentId" :options="deptOptions" :show-count="true" @select="deptSelect" placeholder="请选择上级部门" />
         </el-form-item>
-        <div style="display:flex;">
-          <el-form-item label="部门编号" prop="" label-width="90px" v-if="treeForm.parentId != 0">
-            <el-input v-model="treeForm.deptNum" maxlength="10" disabled
-                      onkeyup="this.value=this.value.replace(/[^\d.]/g,'')" placeholder="请输入部门编号"/>
-          </el-form-item>
-          <el-form-item label="部门名称" prop="deptName" label-width="90px">
-            <el-input v-model="treeForm.deptName" maxlength="10" placeholder="请输入部门名称"/>
-          </el-form-item>
-        </div>
+        <el-form-item label="部门编号" prop="deptNum" label-width="90px" v-if="treeForm.parentId != 0">
+          <el-input v-model="treeForm.deptNum" maxlength="15"
+                    onkeyup="this.value=this.value.replace(/[^\d.]/g,'')" placeholder="请输入部门编号"/>
+        </el-form-item>
+        <el-form-item label="部门名称" prop="deptName" label-width="90px">
+          <el-input v-model="treeForm.deptName" maxlength="15" placeholder="请输入部门名称"/>
+        </el-form-item>
+        <el-form-item  v-if="deptType"
+          label="部门类型" prop="deptType" label-width="90px">
+          <el-radio-group v-model="treeForm.deptType" style="margin:4px 0 0 10px;">
+            <el-radio :label="1">学院</el-radio>
+            <el-radio :label="0">非学院</el-radio>
+          </el-radio-group>
+        </el-form-item>
       </el-form>
       <div slot="footer" class="teacher-tree-dialog-button-box">
         <p class="reset-button-one" @click="treeOpenOff">取消</p>
@@ -320,30 +325,45 @@
       </div>
     </el-dialog>
     <!--新增--组织架构-->
-    <el-dialog title="新增部门" :visible.sync="treeAddOpen" width="600px" append-to-body class="teacher-tree-dialog-box">
+    <el-dialog title="新增部门" v-if="treeAddOpen" :visible.sync="treeAddOpen" width="600px" append-to-body class="teacher-tree-dialog-box">
       <el-form :model="treeAddForm" class="teacher-tree-dialog-form-box" ref="treeAddForm" :rules="rules" v-show="showSearch">
-        <el-form-item label="上级部门" prop="id" label-width="90px">
-          <treeselect v-model="treeAddForm.id" :options="deptOptions" :show-count="true" @select="deptAddSelect" placeholder="请选择上级部门" />
+        <el-form-item label="上级部门" prop="id" label-width="110px">
+          <treeselect style="width:402px;" v-model="treeAddForm.id" :options="deptOptions" :show-count="true"
+                      @select="deptAddSelect" placeholder="请选择上级部门"/>
         </el-form-item>
-        <div style="display:flex;" v-for="(item,index) in treeAddForm.teaCherDpetList" :key="index">
-          <el-form-item label="部门编号" :prop="'teaCherDpetList.' + index + '.deptNum'" :rules="rules.deptNum" label-width="90px">
-            <el-input v-model="item.deptNum" maxlength="10" placeholder="请输入部门编号"/>
-          </el-form-item>
-          <el-form-item label="部门名称" :prop="'teaCherDpetList.' + index + '.deptName'" :rules="rules.deptName" label-width="90px">
-            <el-input v-model="item.deptName" maxlength="10" placeholder="请输入部门名称"/>
-          </el-form-item>
-          <div style="display: flex;width:100px;" v-if="index != treeAddForm.teaCherDpetList.length-1">
-            <p class="el-icon-delete" style="margin:10px 20px;font-size:20px;width:20px;cursor: pointer;color:#FF6666;" @click="delDeptItem(index)"></p>
-          </div>
-          <div style="display: flex;width:100px;" v-if="index == treeAddForm.teaCherDpetList.length-1 && index < 4 && index != 0">
-            <p class="el-icon-circle-plus-outline" style="margin:10px 20px;font-size:20px;width:20px;cursor: pointer;color:#0183FA;" @click="addDeptItem"></p>
-            <p class="el-icon-delete" style="margin:10px 0;font-size:20px;width:20px;cursor: pointer;color:#FF6666;" @click="delDeptItem(index)"></p>
-          </div>
-          <div style="display: flex;width:100px;" v-if="index == treeAddForm.teaCherDpetList.length-1 && index == 4">
-            <p class="el-icon-delete" style="margin:10px 20px;font-size:20px;width:20px;cursor: pointer;color:#FF6666;" @click="delDeptItem(index)"></p>
-          </div>
-          <div style="display: flex;width:100px;" v-if="index == treeAddForm.teaCherDpetList.length-1 && index < 4 && index == 0">
-            <p class="el-icon-circle-plus-outline" style="margin:10px 20px;font-size:20px;width:20px;cursor: pointer;color:#0183FA;" @click="addDeptItem"></p>
+        <div class="scrollbar-box" style="max-height:456px">
+          <div style="display:flex;border:1px solid #d8d8d8;border-radius:6px;margin:0 20px 20px;padding-top:20px;position: relative"
+               v-for="(item,index) in treeAddForm.teaCherDpetList" :key="index">
+            <div style="width:490px;">
+              <el-form-item label="部门编号" :prop="'teaCherDpetList.' + index + '.deptNum'" :rules="rules.deptNum" label-width="90px">
+                <el-input v-model="item.deptNum" onkeyup="this.value=this.value.replace(/[^\d.]/g,'')" maxlength="15" placeholder="请输入部门编号"/>
+              </el-form-item>
+              <el-form-item label="部门名称" :prop="'teaCherDpetList.' + index + '.deptName'" :rules="rules.deptName" label-width="90px">
+                <el-input v-model="item.deptName" maxlength="15" placeholder="请输入部门名称"/>
+              </el-form-item>
+              <el-form-item v-if="deptType"
+                label="部门类型" :prop="'teaCherDpetList.' + index + '.deptType'" :rules="rules.deptType" label-width="90px">
+                <el-radio-group v-model="item.deptType" style="margin:4px 0 0 10px;">
+                  <el-radio :label="1">学院</el-radio>
+                  <el-radio :label="0">非学院</el-radio>
+                </el-radio-group>
+              </el-form-item>
+            </div>
+            <div style="position: absolute;right:30px;bottom:22px;">
+              <div style="display: flex;width:100px;" v-if="index != treeAddForm.teaCherDpetList.length-1">
+                <p class="el-icon-delete" style="margin:10px 20px;font-size:20px;width:20px;cursor: pointer;color:#FF6666;" @click="delDeptItem(index)"></p>
+              </div>
+              <div style="display: flex;width:100px;" v-if="index == treeAddForm.teaCherDpetList.length-1 && index < 4 && index != 0">
+                <p class="el-icon-circle-plus-outline" style="margin:10px 20px;font-size:20px;width:20px;cursor: pointer;color:#0183FA;" @click="addDeptItem"></p>
+                <p class="el-icon-delete" style="margin:10px 0;font-size:20px;width:20px;cursor: pointer;color:#FF6666;" @click="delDeptItem(index)"></p>
+              </div>
+              <div style="display: flex;width:100px;" v-if="index == treeAddForm.teaCherDpetList.length-1 && index == 4">
+                <p class="el-icon-delete" style="margin:10px 20px;font-size:20px;width:20px;cursor: pointer;color:#FF6666;" @click="delDeptItem(index)"></p>
+              </div>
+              <div style="display: flex;width:100px;" v-if="index == treeAddForm.teaCherDpetList.length-1 && index < 4 && index == 0">
+                <p class="el-icon-circle-plus-outline" style="margin:10px 20px;font-size:20px;width:20px;cursor: pointer;color:#0183FA;" @click="addDeptItem"></p>
+              </div>
+            </div>
           </div>
         </div>
       </el-form>
@@ -483,6 +503,9 @@
         },
         // 表单校验
         rules: {
+          parentId: [
+            { required: true, message: "请选择上级部门", trigger: "blur" }
+          ],
           id: [
             { required: true, message: "请选择上级部门", trigger: "blur" }
           ],
@@ -494,6 +517,10 @@
             { required: true, message: "请输入部门名称", trigger: "blur" },
             { required: true, message: "请输入部门名称", validator: this.spaceJudgment, trigger: "blur" }
           ],
+          deptType: [
+            { required: true, message: "请选择部门类型", trigger: "blur" },
+            { required: true, message: "请选择部门类型", validator: this.spaceJudgment, trigger: "blur" }
+          ],
         },
         //表格扩展选择器---需要在@selection-change绑定的方法内监控selection数组长度
         selectedNum:0,
@@ -556,6 +583,8 @@
         userId:"",
         currentDate:'',
         inputDeptName:"",
+        //部门类型开关
+        deptType:false,
       };
     },
     watch: {
@@ -636,6 +665,7 @@
                 deptId:this.treeForm.id,
                 deptName:this.treeForm.deptName,
               }
+              obj.deptType = this.deptType?this.treeForm.deptType:'0'
               updateDeptName(obj).then(response => {
                 this.treeOpen = false;
                 this.delTreeForm();
@@ -648,9 +678,11 @@
               let obj = {
                 deptId:this.treeForm.id,
                 parentId:this.treeForm.parentId,
+                deptNum:this.treeForm.deptNum,
                 ancestors:this.treeForm.ancestors,
                 deptName:this.treeForm.deptName,
               };
+              obj.deptType = this.deptType?this.treeForm.deptType:'0'
               putDeptByTeacher(obj).then(response => {
                 this.treeOpen = false;
                 this.delTreeForm();
@@ -686,6 +718,7 @@
                 deptNum:this.treeAddForm.teaCherDpetList[i].deptNum,
                 deptName:this.treeAddForm.teaCherDpetList[i].deptName,
               }
+              obj.deptType = this.deptType?this.treeAddForm.teaCherDpetList[i].deptType:'0'
               newObj.teaCherDpetList.push(obj);
             }
             addDeptByTeacher(newObj).then(response => {
@@ -704,11 +737,13 @@
       },
       //新增节点选择部门
       deptAddSelect(item){
+        this.$set(this,'deptType',item.ancestors == '0'?true:false);
         this.treeAddForm.parentId = item.id;
         this.treeAddForm.ancestors = item.ancestors;
       },
       //编辑节点选择部门
       deptSelect(item){
+        this.$set(this,'deptType',item.ancestors == '0'?true:false);
         this.treeForm.parentId = item.id;
         this.treeForm.ancestors = item.ancestors;
       },
@@ -721,6 +756,7 @@
           deptNum : data.deptNum,
           parentId : data.parentId,
           deptName : data.label,
+          deptType : data.deptType,
           ancestors : data.ancestors,
         }
         this.$set(this,'treeForm',obj);
@@ -777,6 +813,7 @@
             obj.parentId = this.treeForm.parentId;
             obj.ancestors = this.treeForm.ancestors;
           }
+          this.$set(this,'deptType',this.treeForm.ancestors == '0'?true:false);
           this.$set(this,'treeAddForm',obj);
           this.treeAddOpen = true;
         }else {
@@ -811,6 +848,8 @@
           }else if(type == 4){
             //部门编辑
             this.$set(this,'treeForm',JSON.parse(JSON.stringify(this.treeFormOne)));
+            let list = this.treeForm.ancestors.split(',')
+            this.$set(this,'deptType',(list[0]&&list[1]&&!list[2])?true:false);
             this.treeOpen = true;
           }else if(type == 5){
             //部门添加人员
@@ -907,6 +946,7 @@
           getTeacherInfo(item.row.userId).then(response => {
             this.titleName = '教职工编辑';
             this.propsData = response.data;
+            this.propsData.roleIds = response.roleIds;
             this.editType = false;
             this.pageType = 2;
           });
@@ -929,6 +969,9 @@
           this.reviseOpen = true;
         }
       },
+      offTeacherResetPwd(){
+        this.$set(this,'reviseOpen',false);
+      },
       teacherResetPwd(){
         let obj = {
           userId:this.userId
@@ -1335,7 +1378,7 @@
           margin-right:20px;
           margin-top:20px;
         }
-        .right-max-box{
+        .teacher-right-max-box{
           flex:1;
           display: flex;
           flex-direction: column;
@@ -1352,7 +1395,7 @@
   }
 </style>
 <style lang="scss">
-  .right-max-box{
+  .teacher-right-max-box{
     .form-box{
       .el-select{
         width:90px !important;
@@ -1362,7 +1405,7 @@
       }
     }
   }
-  .right-max-box{
+  .teacher-right-max-box{
     .form-box{
       .form-dropdown-box{
         display: flex;
@@ -1390,7 +1433,7 @@
       }
     }
   }
-  .right-max-box{
+  .teacher-right-max-box{
     .min-list-box{
       .switch .el-switch__label {
         position: absolute;

+ 5 - 5
src/views/comprehensive/personnel/teacher/indexOne.vue

@@ -925,11 +925,11 @@
       getList() {
         this.loading = true;
         listUser(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
-            for(let i=0;i<response.rows.length;i++){
-              if(response.rows[i].position == "未定"){
-                response.rows[i].position = "";
-              }
-            }
+            // for(let i=0;i<response.rows.length;i++){
+            //   if(response.rows[i].position == "未定"){
+            //     response.rows[i].position = "";
+            //   }
+            // }
             this.$set(this,'userList',response.rows);
             // this.userList = response.rows;
             this.total = response.total;

+ 955 - 0
src/views/comprehensive/system/role/addPage.vue

@@ -0,0 +1,955 @@
+<template>
+  <div class="teacher-add-page" @click="checkTypeButton">
+    <div class="public-form-box scrollbar-box">
+      <div class="top-title-box">
+        <p>{{propsData.title}}</p>
+      </div>
+      <el-form :model="form" ref="form" :inline="true" :rules="rules" label-width="120px">
+        <div class="top-info-box">
+          <div class="right-info-box">
+            <el-form-item label="身份名称:" prop="roleName">
+              <el-input
+                style="width:250px;"
+                maxlength="50"
+                v-model="form.roleName"
+                placeholder="请输入身份名称"
+                clearable
+              />
+            </el-form-item>
+          </div>
+          <div class="right-info-box">
+            <el-form-item label="权限字符:" prop="roleKey" label-width="215px">
+              <el-input
+                style="width:250px;"
+                maxlength="50"
+                v-model="form.roleKey"
+                placeholder="请输入权限字符"
+                clearable
+              />
+            </el-form-item>
+          </div>
+        </div>
+        <div class="top-tow-box">
+          <p>权限配置</p>
+        </div>
+        <div class="data_scope">
+          <div class="data_scope_l">
+            <el-form-item label="数据范围:" prop="dataScope">
+              <el-select
+                style="width:250px;"
+                @visible-change="dataScopeFun"
+                v-model="form.dataScope"
+                placeholder="请选择数据范围"
+                clearable
+              >
+                <el-option
+                  v-for="item in optionsDataList"
+                  :key="item.type"
+                  :label="item.value"
+                  :value="item.type"
+                />
+              </el-select>
+            </el-form-item>
+          </div>
+          <div class="data_scope_r" @click="dataScopeClearFun">清除</div>
+        </div>
+      </el-form>
+      <!--权限模块-->
+      <div class="table-for-max-box">
+        <div class="table-title-box">
+          <p>模块菜单</p>
+          <p>权限</p>
+        </div>
+        <div class="table-for-big-box" v-for="(maxItem,maxIndex) in menuList" :key="maxIndex">
+          <!--一级目录-->
+          <div class="max-title-box" :class="!maxItem.children?'max-title-box-null':''">
+            <p><el-checkbox v-model="maxItem.checkType" @change="(type)=>itemCheckClick(type,maxItem)">{{maxItem.menuName}}</el-checkbox></p>
+          </div>
+          <div class="max-right-box">
+            <div class="big-box" v-for="(bigItem,bigIndex) in maxItem.children" :key="bigIndex">
+              <!--二级页面-->
+              <div class="big-title-box" :class="bigItem.menuType == 'C'?'big-title-box-null':''">
+                <p><el-checkbox v-model="bigItem.checkType" @change="(type)=>itemCheckClick(type,bigItem,maxItem)">{{bigItem.menuName}}</el-checkbox></p>
+              </div>
+              <!--三级页面/四级按钮-->
+              <div class="big-right-box" v-if="bigItem.menuType !='C'">
+                <div class="min-box" v-for="(minItem,minIndex) in bigItem.children" :key="minIndex">
+                  <div class="min-title-box">
+                    <!--三级页面-->
+                    <div class="title-left-box">
+                      <p class="min-title-box-null"></p>
+                      <p><el-checkbox v-model="minItem.checkType" @change="(type)=>itemCheckClick(type,minItem,bigItem,maxItem)">{{minItem.menuName}}</el-checkbox></p>
+                      <p class="min-title-box-null"></p>
+                    </div>
+                  </div>
+                  <div class="min-right-box">
+                    <!--四级按钮-->
+                    <div v-for="(btnItem,btnIndex) in minItem.children">
+                      <el-checkbox v-model="btnItem.checkType"
+                                   @change="(type)=>itemCheckClick(type,btnItem,minItem,bigItem,maxItem)">
+                        {{btnItem.menuName}}
+                      </el-checkbox>
+                    </div>
+                    <p v-if="!minItem.children" style="font-weight:500;color:#999;text-align: center">该页面没有按钮</p>
+                  </div>
+                </div>
+              </div>
+              <!--三级按钮-->
+              <div class="big-right-box-null" v-if="bigItem.menuType == 'C'">
+                <div v-for="(btnItem,btnIndex) in bigItem.children">
+                  <el-checkbox v-model="btnItem.checkType"
+                               @change="(type)=>itemCheckClick(type,btnItem,minItem,bigItem,maxItem)">
+                    {{btnItem.menuName}}
+                  </el-checkbox>
+                </div>
+                <p v-if="!bigItem.children" style="font-weight:500;color:#999;text-align: center">该页面没有按钮</p>
+              </div>
+            </div>
+            <p class="big-box-null" v-if="!maxItem.children&&maxItem.menuName == '数据可视化'">数据可视化大屏查看权限</p>
+          </div>
+        </div>
+      </div>
+      <el-dialog title="选择指定部门(可多选)" @close="deptCancel" :visible.sync="deptOpen"
+                 :close-on-click-modal="false" v-if="deptOpen" width="500px"
+                 append-to-body class="managePermissionTemplates-dept-dialog-box">
+        <el-form :model="deptForm" ref="deptForm" :inline="true" :rules="rules" class="addCheckPage-min">
+          <el-form-item label="指定部门" prop="deptIds" label-width="90px" class="el-form-item-bottom">
+            <el-cascader
+              style="width:300px;"
+              :options="treeselectList"
+              :props="{multiple: true,value: 'id', label: 'label'}"
+              collapse-tags
+              v-model="deptForm.deptIds"
+              clearable>
+            </el-cascader>
+          </el-form-item>
+        </el-form>
+        <div slot="footer" class="managePermissionTemplates-dept-dialog-button-box">
+          <p class="reset-button-one" @click="deptCancel">取消</p>
+          <p class="inquire-button-one" @click="deptSure">确定</p>
+        </div>
+      </el-dialog>
+    </div>
+    <div class="bottom-button-box">
+      <p class="null-p"></p>
+      <p class="button-p-1 reset-button-one" @click="outPageButton">返回</p>
+      <p class="inquire-button-one" @click="upDataButton">提交</p>
+      <p class="null-p"></p>
+    </div>
+  </div>
+</template>
+
+<script>
+import { addRoleByScope, editRoleByScope } from '@/api/system/role'
+import { listMenuAll} from "@/api/system/menu";
+import { treeselect } from "@/api/system/dept";
+export default {
+  name: "addPage",
+  props:{
+    propsData:{},
+  },
+  data() {
+    return {
+      menuList:[],
+      originalMenuList:[],
+      form:{
+        roleName:"",     //姓名
+        roleKey:"",
+        dataScope:null,
+      },
+      rules:{
+        roleName: [
+          { required: true, message: "请输入姓名", trigger: "blur" },
+          { required: true, message: "请输入姓名", validator: this.spaceJudgment, trigger: "blur" }
+        ],
+        roleKey: [
+          { required: true, message: "请输入权限标识", trigger: "blur" },
+          { required: true, message: "请输入权限标识", validator: this.spaceJudgment, trigger: "blur" }
+        ],
+        dataScope: [
+          { required: true, message: "请选择数据范围", trigger: "blur" },
+        ],
+        deptIds: [
+          { required: true, message: "请选择指定部门", trigger: "blur" },
+        ],
+      },
+      //数据范围(1:全部, 2:部门及下级, 3:本部门, 4:仅本人,5:自定义)
+      optionsDataList:[
+        {type: 1, value: "所有数据",},
+        {type: 2, value: "本部门及下级部门数据",},
+        {type: 3, value: "本部门",},
+        {type: 4, value: "当前账号数据",},
+        {type: 5, value: "自定义",},
+      ],
+      //数据范围部门弹窗
+      deptOpen:false,
+      deptOpenType:'',
+      //部门数据结构树
+      treeselectList:[],
+      //指定部门数据
+      deptForm:{
+        deptIds:[],
+      },
+      checkDeptType:null,
+      checkAllType:false,
+    }
+  },
+  created(){
+
+  },
+  mounted(){
+    this.getMenu();
+  },
+  methods:{
+    //提交按钮
+    upDataButton(){
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if(this.propsData.roleId){
+            //修改
+            this.editRoleByScope()
+          }else{
+            //发布
+            this.addRoleByScope()
+          }
+        }
+      });
+    },
+    //新增
+    addRoleByScope(){
+      let self = this;
+      let obj = JSON.parse(JSON.stringify(this.form))
+      obj.roleSort = 1;
+      obj.menuCheckStrictly = 0;
+      obj.status = 0;
+      obj.menuIds = this.toArray();
+      obj.viewDeptIds = JSON.stringify(self.deptForm.deptIds);
+      obj.deptIds = [];
+      let list = [];
+      for(let i=0;i<self.deptForm.deptIds.length;i++){
+        for(let o=0;o<self.deptForm.deptIds[i].length;o++){
+          list.push(self.deptForm.deptIds[i][o])
+        }
+      }
+      for (var i = 0,len=list.length; i < len; i++) {
+        if(obj.deptIds.indexOf(list[i]) === -1){
+          obj.deptIds.push(list[i]);
+        }
+      }
+      addRoleByScope(obj).then(response => {
+        if(response.code == 200){
+          this.msgSuccess(response.msg);
+          this.$parent.goPage(3);
+        }
+      });
+    },
+    //编辑
+    editRoleByScope(){
+      let self = this;
+      let obj = JSON.parse(JSON.stringify(this.form))
+      obj.roleSort = 1;
+      obj.menuCheckStrictly = 0;
+      obj.status = 0;
+      obj.menuIds = this.toArray();
+      obj.viewDeptIds = JSON.stringify(self.deptForm.deptIds);
+      obj.deptIds = [];
+      let list = [];
+      for(let i=0;i<self.deptForm.deptIds.length;i++){
+        for(let o=0;o<self.deptForm.deptIds[i].length;o++){
+          list.push(self.deptForm.deptIds[i][o])
+        }
+      }
+      for (var i = 0,len=list.length; i < len; i++) {
+        if(obj.deptIds.indexOf(list[i]) === -1){
+          obj.deptIds.push(list[i]);
+        }
+      }
+      editRoleByScope(obj).then(response => {
+        if(response.code == 200){
+          this.msgSuccess(response.msg);
+          this.$parent.goPage(3);
+        }
+      });
+    },
+    checkTypeButton(){
+      this.$set(this,'checkAllType',false);
+    },
+    //数据范围选中
+    dataScopeFun(type){
+      let self = this;
+      console.log('dataScopeFun',self.form.dataScope)
+      if(!type){
+        setTimeout(function(){
+          if(self.checkAllType){
+            if(self.form.dataScope == 5){
+              //指定范围弹窗
+              self.$set(self,'deptOpen',true)
+            }else{
+              self.$set(self,'checkDeptType',self.form.dataScope)
+              self.$set(self.deptForm,'deptIds',[])
+            }
+          }
+        },50);
+      }else{
+        this.$set(this,'checkAllType',true);
+      }
+    },
+    //数据范围选择清除
+    dataScopeClearFun(){
+      this.$set(this.form,'dataScope',null)
+      this.$set(this.deptForm,'deptIds',[])
+    },
+    //指定部门弹窗取消
+    deptCancel(){
+      this.$set(this.form,'dataScope',this.checkDeptType)
+      this.$set(this,'deptOpen',false)
+    },
+    //指定部门弹窗确定
+    deptSure(){
+      this.$refs["deptForm"].validate(valid => {
+        if (valid) {
+          this.$set(this,'checkDeptType',this.form.dataScope)
+          this.$set(this,'deptOpen',false);
+        }
+      });
+    },
+    //模块勾选逻辑
+    itemCheckClick(type,item,minItem,bigItem,maxItem){
+      if(item.children){
+        for(let i=0;i<item.children.length;i++){
+          item.children[i].checkType = !!type;
+          if(item.children[i].children){
+            for(let o=0;o<item.children[i].children.length;o++){
+              item.children[i].children[o].checkType = !!type;
+              if(item.children[i].children[o].children){
+                for(let x=0;x<item.children[i].children[o].children.length;x++){
+                  item.children[i].children[o].children[x].checkType = !!type;
+                }
+              }
+            }
+          }
+        }
+      }
+      if(minItem&&type){
+        minItem.checkType = type;
+      }
+      if(bigItem&&type){
+        bigItem.checkType = type;
+      }
+      if(maxItem&&type){
+        maxItem.checkType = type;
+      }
+    },
+    getMenu() {
+      let self = this;
+      this.loading = true;
+      listMenuAll(this.queryParams).then(response => {
+        let newList = [];
+        for(let i=0;i<response.data.length;i++){
+          if(response.data[i].status == 0 && response.data[i].visible == 0){
+            newList.push(response.data[i]);
+          }
+        }
+        if(this.propsData.type == 1){
+          //新增
+            this.menuList = JSON.parse(JSON.stringify(this.handleTree(newList, "menuId")))
+        }else {
+          if(this.propsData.type == 2){
+            //编辑
+            this.$set(this.form,'roleId',this.propsData.roleId);
+            this.$set(this.form,'roleName',this.propsData.name);
+            this.$set(this.form,'roleKey',this.propsData.key);
+          }
+          //页面权限处理
+          for(let i=0;i<self.propsData.list.length;i++){
+            for(let o=0;o<newList.length;o++){
+              if(self.propsData.list[i] == newList[o].menuId){
+                newList[o].checkType = true;
+              }
+            }
+          }
+          //数据权限范围
+          this.$set(this.form,'dataScope',this.propsData.dataScope);
+          this.$set(this,'checkDeptType',this.propsData.dataScope)
+          //如果权限范围为指定部门
+          if (this.propsData.dataScope == 5){
+            this.$set(this.deptForm,'deptIds',JSON.parse(this.propsData.viewDeptIds));
+          }
+        }
+        this.menuList = JSON.parse(JSON.stringify(this.handleTree(newList, "menuId")))
+        this.getTreeselect();
+        this.loading = false;
+      });
+    },
+    /** 查询部门下拉树结构 */
+    getTreeselect() {
+      treeselect().then(response => {
+        this.deptOptions = response.data;
+        this.$set(this,'treeselectList',response.data[0].children);
+      });
+    },
+    //返回事件
+    outPageButton(){
+      this.$parent.goPage(1);
+    },
+    //结构树转数组并筛选选中项
+    toArray(){
+      let list = [];
+      let newList = JSON.parse(JSON.stringify(this.menuList));
+      for(let i=0;i<newList.length;i++){
+        pushNode(newList[i]);
+      }
+      function pushNode(node){
+        if(node.children){
+          for (let nodeItem of node.children){
+            pushNode(nodeItem)
+          }
+          delete node.children;
+          if(node.checkType){
+            list.push(node)
+          }
+        }else{
+          if(node.children){
+            delete node.children
+          }
+          if(node.checkType){
+            list.push(node)
+          }
+        }
+      }
+      let idList = [];
+      for(let i=0;i<list.length;i++){
+        idList.push(list[i].menuId)
+      }
+      return idList
+    }
+  }
+}
+</script>
+
+<style scoped lang="scss">
+.teacher-add-page{
+  flex:1;
+  display: flex;
+  flex-direction: column;
+  box-shadow: 0 0 8px 2px rgba(0, 0, 0, 0.1);
+  padding:0 0 20px!important;
+  overflow: hidden;
+  *{
+    margin:0;
+  }
+  .public-form-box{
+    flex:1;
+    overflow-y: scroll;
+    overflow-x: hidden;
+  }
+  .top-title-box{
+    border-bottom:1px solid #E0E0E0;
+    display: flex;
+    p:nth-child(1){
+      color:#0045AF;
+      line-height:80px;
+      margin-left:24px;
+      font-size:18px;
+      flex:1;
+    }
+    p:nth-child(2){
+      border:1px solid #0045AF;
+      color:#0045AF;
+      width:80px;
+      height:30px;
+      text-align: center;
+      font-size:16px;
+      border-radius: 6px;
+      line-height:30px;
+      margin:25px 20px 0 0;
+      cursor: pointer;
+    }
+  }
+  .top-info-box{
+    display: flex;
+    padding:40px 20px 0;
+    .left-info-box{
+      margin-right:20px;
+      img{
+        width:100px;
+        height:120px;
+      }
+      p{
+        width: 80px;
+        height: 26px;
+        border: 1px solid #0183FA;
+        border-radius: 6px;
+        line-height:24px;
+        font-size:12px;
+        color:#0183FA;
+        text-align: center;
+        margin:24px 10px;
+      }
+    }
+  }
+  .top-tow-box{
+    display: flex;
+    align-items: center;
+    height: 50px;
+    background: #F5F5F5;
+    >p{
+      color:#0045AF;
+      line-height:80px;
+      margin-left:24px;
+      font-size:18px;
+      flex:1;
+    }
+  }
+  /*数据范围*/
+  .data_scope{
+    margin: 40px 20px;
+    display: flex;
+    justify-content: space-between;
+    .data_scope_l{
+      display: flex;
+      justify-content: flex-start;
+      .data_scope_l_l{
+        font-size: 16px;
+        font-family: Microsoft YaHei-Regular, Microsoft YaHei;
+        font-weight: 400;
+        color: #333333;
+        line-height: 24px;
+        margin-right: 8px;
+        >i{
+          font-size: 14px;
+          color: #FF0000;
+          font-style: normal;
+          margin-right: 4px;
+        }
+      }
+      .data_scope_l_r{
+        display: flex;
+        justify-content: flex-start;
+        >i{
+          height: 40px;
+          font-style: normal;
+          display: inline-block;
+          font-size: 14px;
+          font-family: Microsoft YaHei-Regular, Microsoft YaHei;
+          font-weight: 400;
+          color: #CCCCCC;
+          line-height: 40px;
+          padding: 0 14px;
+          box-sizing: border-box;
+          border: 1px dashed #E0E0E0;
+          margin-right: 20px;
+          cursor: pointer;
+          &.on{
+            color:#0183FA;
+            border: 1px dashed #0183FA;
+          }
+        }
+
+      }
+    }
+    .data_scope_r{
+      width: 70px;
+      height: 40px;
+      border-radius: 6px 6px 6px 6px;
+      opacity: 1;
+      border: 1px solid #0045AF;
+      font-size: 14px;
+      font-family: Microsoft YaHei-Regular, Microsoft YaHei;
+      font-weight: 400;
+      color: #0045AF;
+      line-height: 40px;
+      text-align: center;
+      cursor: pointer;
+    }
+  }
+  .top-title-one{
+    display: flex;
+    border-top:1px solid #E0E0E0;
+    position: relative;
+    .title-p{
+      font-size:18px;
+      color:#0045AF;
+      line-height:80px;
+      margin-left:24px;
+    }
+    .img-p{
+      font-size:18px;
+      margin:0 10px;
+      line-height:80px;
+      color:#FFC000;
+    }
+    .position-box{
+      width: 420px;
+      height: 194px;
+      padding:20px;
+      background: #F5F5F5;
+      position: absolute;
+      top:10px;
+      left:134px;
+      p{
+        font-size:12px;
+        line-height:18px;
+        color:#333;
+      }
+    }
+  }
+  .name-input-box{
+    height:100px;
+  }
+  .for-button-list{
+    background: #E5F2FE;
+    margin:0 20px;
+    display: flex;
+    .for-title-p{
+      width:175px;
+      height:80px;
+      line-height:80px;
+      font-size:16px;
+      color:#333;
+      text-align: center;
+    }
+    .for-button-max-box{
+      flex:1;
+      .for-button-min-box{
+        font-size:16px;
+        display: inline-block;
+        overflow: hidden;
+        height:30px;
+        line-height:30px;
+        border-radius:6px;
+        margin:25px 28px 0 0;
+        cursor: pointer;
+        i{
+          height:30px;
+          line-height:30px;
+          font-size:16px;
+          color:#fff;
+          margin-right:6px;
+        }
+      }
+      .colorAA{
+        color: #ffffff;
+        background: #0183FA;
+        padding:0 26px 0 16px;
+      }
+      .colorBB{
+        padding:0 26px;
+        color: #333;
+        background: #E0E0E0;
+      }
+    }
+  }
+  .template-name-box{
+    display: flex;
+    .template-name-p{
+      font-weight:500;
+      height:80px;
+      line-height:80px;
+      font-size:16px;
+      color:#333;
+      margin-left:20px;
+      flex: 1;
+    }
+    .template-name-button{
+      width:80px;
+      height:40px;
+      line-height:40px;
+      margin:20px 20px 0 0;
+    }
+    .template-name-button-one{
+      width:180px;
+      height:40px;
+      line-height:40px;
+      margin:20px 40px 0 0;
+      color:#fff;
+      background: #0183FA;
+      border: 1px solid #E0E0E0;
+      cursor: pointer;
+      font-size: 14px;
+      text-align: center;
+      border-radius: 6px;
+    }
+  }
+  .table-for-max-box{
+    border:1px solid #D7D7D7;
+    margin:0 20px;
+    *{
+      margin:0;
+      padding:0;
+    }
+    .table-title-box{
+      background: rgba(1,131,250,0.1);
+      display: flex;
+      p{
+        font-size:14px;
+        font-weight:700;
+        color:#333;
+        line-height:48px;
+        padding-left:20px;
+      }
+      p:nth-child(1){
+        width:616px;
+        border-right:1px solid #D7D7D7;
+      }
+    }
+    .table-for-big-box{
+      border-top:1px solid #D7D7D7;
+      display: flex;
+      font-size:14px;
+      .max-title-box-null{
+        width:616px!important;
+      }
+      .max-title-box{
+        width:230px;
+        border-right:1px solid #D7D7D7;
+        min-height:48px;
+        position: relative;
+        p{
+          position: absolute;
+          top:50%;
+          left:20px;
+          height:18px;
+          line-height:18px;
+          margin-top:-9px;
+        }
+      }
+      .max-right-box{
+        flex:5;
+        min-height:48px;
+        .big-box:nth-child(1){
+          border:none!important;
+        }
+        .big-box-null{
+          line-height:48px;
+          margin-left:20px;
+          color:#606266;
+        }
+        .big-box{
+          display: flex;
+          border-top:1px solid #D7D7D7;
+          .big-title-box-null{
+            width:386px!important;
+          }
+          .big-title-box{
+            width:180px;
+            border-right:1px solid #D7D7D7;
+            min-height:48px;
+            position: relative;
+            overflow: hidden;
+            p{
+              position: absolute;
+              top:50%;
+              left:20px;
+              height:48px;
+              line-height:48px;
+              margin-top:-24px;
+            }
+          }
+          .big-right-box-null{
+            flex:1;
+            padding:14px 0 0 20px;
+            div{
+              display: inline-block;
+              margin:0 20px 14px 0;
+            }
+          }
+          .big-right-box{
+            flex:5;
+            min-height:48px;
+            .min-box:nth-child(1){
+              border:none!important;
+            }
+            .min-box{
+              display: flex;
+              border-top:1px solid #D7D7D7;
+              .min-title-box{
+                display: flex;
+                flex-direction: column;
+                border-right:1px solid #D7D7D7;
+                min-height:48px;
+                position: relative;
+                overflow: hidden;
+                .title-left-box{
+                  width:205px;
+                  display: flex;
+                  .min-title-box-null{
+                    flex:1;
+                  }
+                  p{
+                    width:205px;
+                    position: absolute;
+                    top:50%;
+                    left:20px;
+                    height:48px;
+                    line-height:48px;
+                    margin-top:-24px;
+                  }
+                }
+              }
+              .min-right-box{
+                flex:1;
+                padding:14px 0 0 20px;
+                div{
+                  display: inline-block;
+                  margin:0 20px 14px 0 ;
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  .bottom-button-box{
+    display: flex;
+    width:600px;
+    margin:30px auto 10px;
+    .null-p{
+      flex:1;
+    }
+    .button-p-1{
+      width:100px;
+      margin-right:20px;
+    }
+    .button-p-2{
+      width:100px;
+      margin-right:20px;
+    }
+    .button-p-3{
+      width:180px;
+    }
+  }
+}
+</style>
+<style lang="scss">
+.teacher-add-page{
+  .top-info-box{
+    .el-form-item{
+      height:70px;
+    }
+    .switch .el-switch__label {
+      position: absolute;
+      display: none;
+      color: #fff !important;
+    }
+    .switch .el-switch__label--right {
+      z-index: 1;
+    }
+    .switch .el-switch__label--right span{
+      margin-left: 10px;
+    }
+    .switch .el-switch__label--left {
+      z-index: 1;
+    }
+    .switch .el-switch__label--left span{
+      margin-left: 24px;
+    }
+    .switch .el-switch__label.is-active {
+      display: block;
+    }
+    .switch.el-switch .el-switch__core,
+    .el-switch .el-switch__label {
+      width: 64px !important;
+      margin: 0;
+    }
+  }
+}
+.managePermissionTemplates-permission-dialog-box{
+  *{
+    margin:0;
+  }
+  .title-p{
+    font-size:15px;
+    font-weight:700;
+    margin-bottom:30px;
+  }
+  .managePermissionTemplates-permission-dialog-form-box{
+    .title-box{
+      display: flex;
+      height: 60px;
+      background: #F5F5F5;
+      .left-title-p{
+        width:198px;
+        border-right:1px solid #E0E0E0;
+        font-size:15px;
+        font-weight:700;
+        padding-left:26px;
+        line-height:60px;
+        color:#333;
+      }
+      .right-box{
+        flex:1;
+        .right-box-min{
+          height:20px;
+          margin:20px 0 0 50px;
+          .el-checkbox__label{
+            font-size:15px;
+            font-weight:700;
+          }
+        }
+      }
+    }
+    .check-box{
+      display: flex;
+      .left-title-box{
+        width:198px;
+        border:1px solid #E0E0E0;
+        position: relative;
+        .left-title-p{
+          position: absolute;
+          left:27px;
+          height:20px;
+          line-height:20px;
+          top:50%;
+          margin-top:-10px;
+        }
+      }
+      .right-box{
+        padding:0 50px 41px 0;
+        flex:1;
+        border:1px solid #E0E0E0;
+        border-left:none;
+        .for-check-box{
+          margin:41px 0 0 50px;
+        }
+      }
+    }
+  }
+  .managePermissionTemplates-permission-dialog-button-box{
+    display: flex;
+    width:160px;
+    margin:0 auto;
+    p{
+      margin:0;
+      width:70px;
+      height:30px;
+      line-height:30px;
+      font-size:14px;
+    }
+    p:nth-child(1){
+      margin-right:20px;
+    }
+  }
+}
+.managePermissionTemplates-dept-dialog-box{
+  *{
+    margin:0;
+  }
+  .managePermissionTemplates-dept-dialog-button-box{
+    display: flex;
+    width:190px;
+    margin:0 auto;
+    p{
+      margin:0;
+      width:70px;
+      height:30px;
+      line-height:30px;
+      font-size:14px;
+    }
+    p:nth-child(1){
+      margin-right:50px;
+    }
+  }
+}
+</style>

+ 143 - 492
src/views/comprehensive/system/role/index.vue

@@ -1,297 +1,128 @@
 <!--角色管理-->
 <template>
   <div class="app-container role">
-    <el-form :model="queryParams" ref="queryForm" v-show="showSearch" :inline="true" class="form-box" v-if="pageType==1">
-
-      <el-form-item label="角色名称" prop="roleName" style="margin-left:20px;">
-        <el-input
-          v-model="queryParams.roleName"
-          placeholder="请输入角色名称"
-          clearable
-          size="small"
-        />
-      </el-form-item>
-      <el-form-item label="状态" prop="status">
-        <el-select
-          v-model="queryParams.status"
-          placeholder="角色状态"
-          clearable
-          size="small"
-        >
-          <el-option
-            v-for="dict in statusOptions"
-            :key="dict.dictValue"
-            :label="dict.dictLabel"
-            :value="dict.dictValue"
+    <div class="role_n" v-if="pageType==1">
+      <el-form :model="queryParams" ref="queryForm" v-show="showSearch" :inline="true" class="form-box" >
+        <el-form-item label="角色名称" prop="roleName" style="margin-left:20px;">
+          <el-input
+            v-model="queryParams.roleName"
+            placeholder="请输入角色名称"
+            clearable
+            size="small"
           />
-        </el-select>
-      </el-form-item>
-      <el-form-item style="float: right;">
-        <el-col :span="1.5">
-          <p class="add-button-one-120"
-             @click="handleAdd"
-             v-hasPermi="['system:role:add']"
-          ><i class="el-icon-plus"></i>新增角色</p>
-        </el-col>
-      </el-form-item>
-      <el-form-item>
-        <p class="inquire-button-one" @click="handleQuery">查询</p>
-        <p class="reset-button-one" @click="resetQuery">重置</p>
-      </el-form-item>
-    </el-form>
-
-    <el-table v-loading="loading" border :data="roleList" @selection-change="handleSelectionChange" class="table-box" v-if="pageType==1">
-      <el-table-column label="角色名称" prop="roleName" align="left" :show-overflow-tooltip="true"/>
-      <el-table-column label="显示顺序" prop="roleSort" align="left"/>
-      <el-table-column label="状态" align="left">
-        <template slot-scope="scope">
-          <el-switch
-            class="switch"
-            @change="handleStatusChange(scope.row)"
-            v-model="scope.row.status"
-            active-value="0"
-            inactive-value="1"
-            active-text="开"
-            inactive-text="关"
-          >
-          </el-switch>
-        </template>
-      </el-table-column>
-      <el-table-column label="操作" align="left" class-name="small-padding fixed-width" width="280" v-if="tableButtonType">
-        <template slot-scope="scope" v-if="scope.row.roleId !== 1">
-          <div class="table-button-box">
-            <p class="table-button-null"></p>
-            <p class="table-button-p"
-               @click="handleAuthUser(scope.row)"
-               v-hasPermi="['system:dict:edit']"
-            >分配用户</p>
-            <p class="table-button-p"
-               @click="handleDataScope(scope.row)"
-               v-hasPermi="['system:dict:edit']"
-            >数据结构</p>
-            <p class="table-button-p"
-               @click="handleUpdate(scope.row)"
-               v-hasPermi="['system:role:edit']"
-            >编辑</p>
-            <p class="table-button-p"
-               @click="handleDelete(scope.row)"
-               v-hasPermi="['system:role:remove']"
-            >删除</p>
-            <p class="table-button-null"></p>
-          </div>
-        </template>
-      </el-table-column>
-    </el-table>
-
-    <pagination :page-sizes="[20, 30, 40, 50]"
-      v-if="pageType==1"
-      v-show="total>0"
-      :total="total"
-      layout="total, prev, pager, next, sizes, jumper"
-      :page.sync="queryParams.pageNum"
-      :limit.sync="queryParams.pageSize"
-      @pagination="getList"
-    />
-
-    <!-- 添加或修改角色配置对话框 -->
-    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body class="role-el-dialog" :close-on-click-modal="false">
-      <el-form ref="form" :model="form" :rules="rules" label-width="100px">
-        <el-form-item label="角色名称" prop="roleName">
-          <el-input v-model="form.roleName" placeholder="请输入角色名称" />
         </el-form-item>
-        <el-form-item prop="roleKey">
-          <span slot="label">
-            <el-tooltip content="控制器中定义的权限字符,如:@PreAuthorize(`@ss.hasRole('admin')`)" placement="top">
-              <i class="el-icon-question"></i>
-            </el-tooltip>
-            权限字符
-          </span>
-          <el-input v-model="form.roleKey" placeholder="请输入权限字符" />
-        </el-form-item>
-        <el-form-item label="角色顺序" prop="roleSort">
-          <el-input-number v-model="form.roleSort" controls-position="right" :min="0" />
-        </el-form-item>
-        <el-form-item label="状态">
-          <el-radio-group v-model="form.status">
-            <el-radio
+        <el-form-item label="状态" prop="status">
+          <el-select
+            v-model="queryParams.status"
+            placeholder="角色状态"
+            clearable
+            size="small"
+          >
+            <el-option
               v-for="dict in statusOptions"
               :key="dict.dictValue"
-              :label="dict.dictValue"
-            >{{dict.dictLabel}}</el-radio>
-          </el-radio-group>
-        </el-form-item>
-        <el-form-item label="菜单权限">
-          <el-checkbox v-model="menuExpand" @change="handleCheckedTreeExpand($event, 'menu')">展开/折叠</el-checkbox>
-          <el-checkbox v-model="menuNodeAll" @change="handleCheckedTreeNodeAll($event, 'menu')">全选/全不选</el-checkbox>
-          <el-checkbox v-model="form.menuCheckStrictly" @change="handleCheckedTreeConnect($event, 'menu')">父子联动</el-checkbox>
-          <el-tree
-            class="tree-border"
-            :data="menuOptions"
-            show-checkbox
-            ref="menu"
-            node-key="id"
-            :check-strictly="!form.menuCheckStrictly"
-            empty-text="加载中,请稍后"
-            :props="defaultProps"
-          ></el-tree>
-        </el-form-item>
-        <el-form-item label="备注">
-          <el-input v-model="form.remark" type="text" placeholder="请输入内容"></el-input>
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button @click="cancel">取 消</el-button>
-        <el-button type="primary" @click="submitForm">确 定</el-button>
-      </div>
-    </el-dialog>
-
-    <!-- 分配角色数据权限对话框 -->
-    <el-dialog :title="title" :visible.sync="openDataScope" width="500px" append-to-body :close-on-click-modal="false">
-      <el-form :model="form" label-width="80px">
-        <el-form-item label="角色名称">
-          <el-input v-model="form.roleName" :disabled="true" />
-        </el-form-item>
-        <el-form-item label="权限字符">
-          <el-input v-model="form.roleKey" :disabled="true" />
-        </el-form-item>
-        <el-form-item label="权限范围">
-          <el-select v-model="form.dataScope" @change="dataScopeSelectChange">
-            <el-option
-              v-for="item in dataScopeOptions"
-              :key="item.value"
-              :label="item.label"
-              :value="item.value"
-            ></el-option>
+              :label="dict.dictLabel"
+              :value="dict.dictValue"
+            />
           </el-select>
         </el-form-item>
-        <el-form-item label="数据权限" v-show="form.dataScope == 2">
-          <el-checkbox v-model="deptExpand" @change="handleCheckedTreeExpand($event, 'dept')">展开/折叠</el-checkbox>
-          <el-checkbox v-model="deptNodeAll" @change="handleCheckedTreeNodeAll($event, 'dept')">全选/全不选</el-checkbox>
-          <el-checkbox v-model="form.deptCheckStrictly" @change="handleCheckedTreeConnect($event, 'dept')">父子联动</el-checkbox>
-          <el-tree
-            class="tree-border"
-            :data="deptOptions"
-            show-checkbox
-            default-expand-all
-            ref="dept"
-            node-key="id"
-            :check-strictly="!form.deptCheckStrictly"
-            empty-text="加载中,请稍后"
-            :props="defaultProps"
-          ></el-tree>
+        <el-form-item style="float: right;">
+          <el-col :span="1.5">
+            <p class="add-button-one-90"
+               @click="handleAdd"
+               v-hasPermi="['system:role:add']"
+            >新增</p>
+          </el-col>
+        </el-form-item>
+        <el-form-item>
+          <p class="inquire-button-one" @click="handleQuery">查询</p>
+          <p class="reset-button-one" @click="resetQuery">重置</p>
         </el-form-item>
       </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button @click="cancelDataScope">取 消</el-button>
-        <el-button type="primary" @click="submitDataScope">确 定</el-button>
-      </div>
-    </el-dialog>
-
-    <!--分配用户-->
-    <auth-user :roleId="roleId" v-if="pageType == 2"></auth-user>
+      <el-table v-loading="loading" border :data="roleList" class="table-box" v-if="pageType==1">
+        <el-table-column label="序号" width="100" align="center"  type="index"/>
+        <el-table-column label="名称" prop="roleName" align="center" :show-overflow-tooltip="true" width="200"/>
+        <el-table-column label="数据范围" prop="dataScope" align="center" :show-overflow-tooltip="true" width="296">
+          <template slot-scope="scope">
+            <p v-for="(item,index) in optionsDataList" :key="index" v-if="scope.row.dataScope == item.type">{{item.value}}</p>
+          </template>
+        </el-table-column>
+        <el-table-column label="对应身份" prop="postNameStr" align="center" :show-overflow-tooltip="true"/>
+        <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="180" v-if="tableButtonType">
+          <template slot-scope="scope" v-if="scope.row.roleId !== 1">
+            <div class="table-button-box">
+              <p class="table-button-null"></p>
+              <p class="table-button-p"
+                 @click="copyButton(scope.row)"
+                 v-hasPermiAnd="['system:role:edit','system:role:query']"
+              >复制</p>
+              <p class="table-button-p"
+                 @click="handleUpdate(scope.row)"
+                 v-hasPermiAnd="['system:role:edit','system:role:query']"
+              >编辑</p>
+              <p class="table-button-p"
+                 @click="handleDelete(scope.row)"
+                 v-hasPermi="['system:role:remove']"
+              >删除</p>
+              <p class="table-button-null"></p>
+            </div>
+          </template>
+        </el-table-column>
+      </el-table>
+      <pagination :page-sizes="[20, 30, 40, 50]"
+                  v-if="pageType==1"
+                  v-show="total>0"
+                  :total="total"
+                  layout="total, prev, pager, next, sizes, jumper"
+                  :page.sync="queryParams.pageNum"
+                  :limit.sync="queryParams.pageSize"
+                  @pagination="getList"
+      />
+    </div>
+    <!--编辑-->
+    <add-page v-if="pageType == 2" :propsData="propsData"></add-page>
   </div>
 </template>
 
 <script>
 import { listRole, getRole, delRole, addRole, updateRole, dataScope, changeRoleStatus } from "@/api/system/role";
-import { treeselect as menuTreeselect, roleMenuTreeselect } from "@/api/system/menu";
-import { treeselect as deptTreeselect, roleDeptTreeselect } from "@/api/system/dept";
-import authUser from "./authUser.vue";
+import addPage from "./addPage.vue"
 
 export default {
   components: {
-    authUser,
+    addPage
   },
   name: "Role",
   data() {
     return {
-      tableButtonType:this.hasPermiDom(['system:dict:edit','system:role:edit','system:role:remove']),
+      tableButtonType:this.hasPermiDom(['system:role:query','system:role:edit','system:role:remove']),
       // 遮罩层
       loading: true,
-      // 选中数组
-      ids: [],
-      // 非单个禁用
-      single: true,
-      // 非多个禁用
-      multiple: true,
       // 显示搜索条件
       showSearch: true,
       // 总条数
       total: 0,
-      // 角色表格数据
-      roleList: [],
-      // 弹出层标题
-      title: "",
-      // 是否显示弹出层
-      open: false,
-      // 是否显示弹出层(数据权限)
-      openDataScope: false,
-      menuExpand: false,
-      menuNodeAll: false,
-      deptExpand: true,
-      deptNodeAll: false,
-      // 日期范围
-      dateRange: [],
       // 状态数据字典
       statusOptions: [],
-      // 数据范围选项
-      dataScopeOptions: [
-        {
-          value: "1",
-          label: "全部数据权限"
-        },
-        {
-          value: "2",
-          label: "自定数据权限"
-        },
-        // {
-        //   value: "3",
-        //   label: "本部门数据权限"
-        // },
-        {
-          value: "4",
-          label: "本部门及以下数据权限"
-        },
-        // {
-        //   value: "5",
-        //   label: "仅本人数据权限"
-        // }
-      ],
-      // 菜单列表
-      menuOptions: [],
-      // 部门列表
-      deptOptions: [],
       // 查询参数
       queryParams: {
         pageNum: 1,
         pageSize:20,
-        roleName: undefined,
-        roleKey: undefined,
-        status: undefined
-      },
-      // 表单参数
-      form: {},
-      defaultProps: {
-        children: "children",
-        label: "label"
-      },
-      // 表单校验
-      rules: {
-        roleName: [
-          { required: true, message: "角色名称不能为空", trigger: "blur" },
-          { required: true, message: "角色名称不能为空", validator: this.spaceJudgment, trigger: "blur" }
-        ],
-        roleKey: [
-          { required: true, message: "权限字符不能为空", trigger: "blur" },
-          { required: true, message: "权限字符不能为空", validator: this.spaceJudgment, trigger: "blur" }
-        ],
-        roleSort: [
-          { required: true, message: "角色顺序不能为空", trigger: "blur" },
-          { required: true, message: "角色顺序不能为空", validator: this.spaceJudgment, trigger: "blur" }
-        ]
+        roleName: null,
+        status: null
       },
+      roleList:[],
       pageType:1,
-      roleId:"",
+      //组件传参数据
+      propsData:{},
+      //数据范围(1:全部, 2:部门及下级, 3:本部门, 4:仅本人,5:自定义)
+      optionsDataList:[
+        {type: 1, value: "所有数据",},
+        {type: 2, value: "本部门及下级部门数据",},
+        {type: 3, value: "本部门",},
+        {type: 4, value: "当前账号数据",},
+        {type: 5, value: "自定义",},
+      ],
     };
   },
   created() {
@@ -301,10 +132,15 @@ export default {
     });
   },
   methods: {
-    //页面切换
-    clickPage(){
-      this.roleId="";
-      this.pageType=1;
+    goPage(type){
+      if(this.pageType != type){
+        if(type == 1){
+          this.$set(this,'pageType',type);
+        }else if(type == 3){
+          this.$set(this,'pageType',1);
+          this.resetQuery();
+        }
+      }
     },
     /** 查询角色列表 */
     getList() {
@@ -317,98 +153,6 @@ export default {
         }
       );
     },
-    /** 查询菜单树结构 */
-    getMenuTreeselect() {
-      menuTreeselect().then(response => {
-        this.menuOptions = response.data;
-      });
-    },
-    /** 查询部门树结构 */
-    getDeptTreeselect() {
-      deptTreeselect().then(response => {
-        this.deptOptions = response.data;
-      });
-    },
-    // 所有菜单节点数据
-    getMenuAllCheckedKeys() {
-      // 目前被选中的菜单节点
-      let checkedKeys = this.$refs.menu.getCheckedKeys();
-      // 半选中的菜单节点
-      let halfCheckedKeys = this.$refs.menu.getHalfCheckedKeys();
-      checkedKeys.unshift.apply(checkedKeys, halfCheckedKeys);
-      return checkedKeys;
-    },
-    // 所有部门节点数据
-    getDeptAllCheckedKeys() {
-      // 目前被选中的部门节点
-      let checkedKeys = this.$refs.dept.getCheckedKeys();
-      // 半选中的部门节点
-      let halfCheckedKeys = this.$refs.dept.getHalfCheckedKeys();
-      checkedKeys.unshift.apply(checkedKeys, halfCheckedKeys);
-      return checkedKeys;
-    },
-    /** 根据角色ID查询菜单树结构 */
-    getRoleMenuTreeselect(roleId) {
-      return roleMenuTreeselect(roleId).then(response => {
-        this.menuOptions = response.menus;
-        return response;
-      });
-    },
-    /** 根据角色ID查询部门树结构 */
-    getRoleDeptTreeselect(roleId) {
-      return roleDeptTreeselect(roleId).then(response => {
-        this.deptOptions = response.depts;
-        return response;
-      });
-    },
-    // 角色状态修改
-    handleStatusChange(row) {
-      let text = row.status === "0" ? "启用" : "停用";
-      this.$confirm('确认要"' + text + '""' + row.roleName + '"角色吗?', "警告", {
-          confirmButtonText: "确定",
-          cancelButtonText: "取消",
-          type: "warning"
-        }).then(function() {
-          return changeRoleStatus(row.roleId, row.status);
-        }).then(() => {
-          this.msgSuccess(text + "成功");
-        }).catch(function() {
-          row.status = row.status === "0" ? "1" : "0";
-        });
-    },
-    // 取消按钮
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 取消按钮(数据权限)
-    cancelDataScope() {
-      this.openDataScope = false;
-      this.reset();
-    },
-    // 表单重置
-    reset() {
-      if (this.$refs.menu != undefined) {
-        this.$refs.menu.setCheckedKeys([]);
-      }
-      this.menuExpand = false,
-      this.menuNodeAll = false,
-      this.deptExpand = true,
-      this.deptNodeAll = false,
-      this.form = {
-        roleId: undefined,
-        roleName: undefined,
-        roleKey: undefined,
-        roleSort: 0,
-        status: "0",
-        menuIds: [],
-        deptIds: [],
-        menuCheckStrictly: true,
-        deptCheckStrictly: true,
-        remark: undefined
-      };
-      this.resetForm("form");
-    },
     /** 搜索按钮操作 */
     handleQuery() {
       this.queryParams.pageNum = 1;
@@ -416,168 +160,69 @@ export default {
     },
     /** 重置按钮操作 */
     resetQuery() {
-      this.dateRange = [];
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    // 多选框选中数据
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.roleId)
-      this.single = selection.length!=1
-      this.multiple = !selection.length
-    },
-    // 更多操作触发
-    handleCommand(command, row) {
-      switch (command) {
-        case "handleDataScope":
-          this.handleDataScope(row);
-          break;
-        case "handleAuthUser":
-          this.handleAuthUser(row);
-          break;
-        default:
-          break;
-      }
-    },
-    // 树权限(展开/折叠)
-    handleCheckedTreeExpand(value, type) {
-      if (type == 'menu') {
-        let treeList = this.menuOptions;
-        for (let i = 0; i < treeList.length; i++) {
-          this.$refs.menu.store.nodesMap[treeList[i].id].expanded = value;
-        }
-      } else if (type == 'dept') {
-        let treeList = this.deptOptions;
-        for (let i = 0; i < treeList.length; i++) {
-          this.$refs.dept.store.nodesMap[treeList[i].id].expanded = value;
+      this.$set(this,"form",
+        {
+          pageNum: 1,
+          pageSize:20,
+          roleName: null,
+          status: null
         }
-      }
-    },
-    // 树权限(全选/全不选)
-    handleCheckedTreeNodeAll(value, type) {
-      if (type == 'menu') {
-        this.$refs.menu.setCheckedNodes(value ? this.menuOptions: []);
-      } else if (type == 'dept') {
-        this.$refs.dept.setCheckedNodes(value ? this.deptOptions: []);
-      }
-    },
-    // 树权限(父子联动)
-    handleCheckedTreeConnect(value, type) {
-      if (type == 'menu') {
-        this.form.menuCheckStrictly = value ? true: false;
-      } else if (type == 'dept') {
-        this.form.deptCheckStrictly = value ? true: false;
-      }
+      );
+      this.handleQuery();
     },
     /** 新增按钮操作 */
     handleAdd() {
-      this.reset();
-      this.getMenuTreeselect();
-      this.open = true;
-      this.title = "编辑角色";
+      let obj = {
+        type:1,
+        title:"新增角色",
+      };
+      this.$set(this,'propsData',obj);
+      this.$set(this,'pageType',2);
     },
     /** 修改按钮操作 */
     handleUpdate(row) {
-      this.reset();
-      const roleId = row.roleId || this.ids
-      const roleMenu = this.getRoleMenuTreeselect(roleId);
-      getRole(roleId).then(response => {
-        this.form = response.data;
-        this.open = true;
-        this.$nextTick(() => {
-          roleMenu.then(res => {
-            let checkedKeys = res.checkedKeys
-            checkedKeys.forEach((v) => {
-                this.$nextTick(()=>{
-                    this.$refs.menu.setChecked(v, true ,false);
-                })
-            })
-          });
-        });
-        this.title = "修改角色";
-      });
-    },
-    /** 选择角色权限范围触发 */
-    dataScopeSelectChange(value) {
-      if(value !== '2') {
-        this.$refs.dept.setCheckedKeys([]);
-      }
-    },
-    /** 分配数据权限操作 */
-    handleDataScope(row) {
-      this.reset();
-      const roleDeptTreeselect = this.getRoleDeptTreeselect(row.roleId);
       getRole(row.roleId).then(response => {
-        this.form = response.data;
-        this.openDataScope = true;
-        this.$nextTick(() => {
-          roleDeptTreeselect.then(res => {
-            this.$refs.dept.setCheckedKeys(res.checkedKeys);
-          });
-        });
-        this.title = "分配数据权限";
+        let obj = {
+          type:2,
+          roleId:response.role.roleId,
+          name:response.role.roleName,
+          key:response.role.roleKey,
+          dataScope:response.role.dataScope,
+          viewDeptIds:response.role.viewDeptIds,
+          list:response.checkedKeys,
+          title:"编辑角色",
+        };
+        this.$set(this,'propsData',obj);
+        this.$set(this,'pageType',2);
       });
     },
-    /** 分配用户操作 */
-    handleAuthUser: function(row) {
-      this.roleId=row.roleId;
-      this.pageType=2;
-      // const roleId = row.roleId;
-      // this.$router.push("/system/role-auth/user/" + roleId);
-    },
-    /** 提交按钮 */
-    submitForm: function() {
-      this.$refs["form"].validate(valid => {
-        if (valid) {
-          if (this.form.roleId != undefined) {
-            this.form.menuIds = this.getMenuAllCheckedKeys();
-            updateRole(this.form).then(response => {
-              this.msgSuccess("修改成功");
-              this.open = false;
-              this.getList();
-            });
-          } else {
-            this.form.menuIds = this.getMenuAllCheckedKeys();
-            addRole(this.form).then(response => {
-              this.msgSuccess("新增成功");
-              this.open = false;
-              this.getList();
-            });
-          }
-        }
+    /** 复制按钮 */
+    copyButton(row){
+      getRole(row.roleId).then(response => {
+        let obj = {
+          type:3,
+          dataScope:response.role.dataScope,
+          viewDeptIds:response.role.viewDeptIds,
+          list:response.checkedKeys,
+          title:"复制角色",
+        };
+        this.$set(this,'propsData',obj);
+        this.$set(this,'pageType',2);
       });
     },
-    /** 提交按钮(数据权限) */
-    submitDataScope: function() {
-      if (this.form.roleId != undefined) {
-        this.form.deptIds = this.getDeptAllCheckedKeys();
-        dataScope(this.form).then(response => {
-          this.msgSuccess("修改成功");
-          this.openDataScope = false;
-          this.getList();
-        });
-      }
-    },
     /** 删除按钮操作 */
     handleDelete(row) {
-      const roleIds = row.roleId || this.ids;
       this.$confirm('是否确认删除角色?', "警告", {
           confirmButtonText: "确定",
           cancelButtonText: "取消",
           type: "warning"
         }).then(function() {
-          return delRole(roleIds);
+          return delRole(row.roleId);
         }).then(() => {
           this.getList();
           this.msgSuccess("删除成功");
         }).catch(() => {});
     },
-    /** 导出按钮操作 */
-    handleExport() {
-      this.download('system/role/export', {
-        ...this.queryParams
-      }, `role_${new Date().getTime()}.xlsx`)
-    }
   }
 };
 </script>
@@ -587,8 +232,14 @@ export default {
     display: flex!important;
     flex-direction: column;
     box-shadow: 0 0 8px 2px rgba(0, 0, 0, 0.1);
-    padding:11px 20px 20px!important;
+    .role_n{
+      display: flex!important;
+      flex-direction: column;
+      flex: 1;
+      padding:11px 20px 20px!important;
+    }
     .form-box{
+
       margin-top:12px;
      // display: flex;
       .null-p{

+ 0 - 208
src/views/creditViolation/credit/blacklist/blackListInfo.vue

@@ -1,208 +0,0 @@
-<!--黑名单历史记录-->
-<template>
-    <div class="blackListInfo">
-      <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
-        <el-form-item class="button-box">
-          <p class="reset-button-one" @click="backPage"><i class="el-icon-arrow-left"></i>返回</p>
-        </el-form-item>
-        <el-form-item label="状态" prop="overStatus" label-width="50px">
-          <el-select v-model="queryParams.overStatus" clearable placeholder="请选择状态">
-            <el-option
-              v-for="dict in overStatusOptions"
-              :key="dict.id"
-              :label="dict.name"
-              :value="dict.id"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="学期" prop="semesterId" label-width="50px">
-          <el-select v-model="queryParams.semesterId" clearable placeholder="请选择学期">
-            <el-option
-              v-for="dict in semesterOptions"
-              :key="dict.id"
-              :label="dict.semesterName"
-              :value="dict.id"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="创建时间" prop="dateRange" style="margin-left:10px;">
-          <el-date-picker
-            :clearable="false"
-            v-model="dateRange"
-            size="small"
-            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>
-          <p class="inquire-button-one" @click="handleQuery">查询</p>
-          <p class="reset-button-one" @click="resetQuery">重置</p>
-        </el-form-item>
-      </el-form>
-      <el-table v-loading="loading" border :data="recordList">
-        <el-table-column label="姓名" align="left" prop="nickName" />
-        <el-table-column label="原因" align="left" prop="reason" />
-        <el-table-column label="时间" align="left" prop="createTime" />
-        <el-table-column label="处理方式" align="left"  prop="treatmentMethod" />
-        <el-table-column label="处理状态" align="left"  prop="surplusPoints">
-          <template slot-scope="scope">
-            <div class="scope-big-box" v-if="scope.row.learnStatus == 0 || scope.row.learnStatus == 1">
-              <p>学习</p>
-              <p :class="scope.row.learnStatus == 0 ?'scopeColorA':(scope.row.learnStatus == 1 ?'scopeColorB':'')">{{scope.row.learnStatus == 0 ?'未完成':(scope.row.learnStatus == 1 ?'已完成':'')}}</p>
-            </div>
-            <div class="scope-big-box" v-if="scope.row.practiceStatus == 0 || scope.row.practiceStatus == 1">
-              <p>做题</p>
-              <p :class="scope.row.practiceStatus == 0 ?'scopeColorA':(scope.row.practiceStatus == 1 ?'scopeColorB':'')">{{scope.row.practiceStatus == 0 ?'未完成':(scope.row.practiceStatus == 1 ?'已完成':'')}}</p>
-            </div>
-            <div class="scope-big-box" v-if="scope.row.testStatus == 0 || scope.row.testStatus == 1">
-              <p>考试</p>
-              <p :class="scope.row.testStatus == 0 ?'scopeColorA':(scope.row.testStatus == 1 ?'scopeColorB':'')">{{scope.row.testStatus == 0 ?'未完成':(scope.row.testStatus == 1 ?'已完成':'')}}</p>
-            </div>
-          </template>
-        </el-table-column>
-        <el-table-column label="信用分" align="left"  prop="creditScore" />
-      </el-table>
-      <pagination
-        v-show="total>0"
-        :total="total"
-        layout="total, prev, pager, next, sizes, jumper"
-        :page.sync="queryParams.pageNum"
-        :limit.sync="queryParams.pageSize"
-        @pagination="getList"
-      />
-    </div>
-</template>
-
-<script>
-  import { getBlackDetail } from "@/api/laboratory/blacklist";
-  import { getSemesterList } from "@/api/laboratory/semester";
-    export default {
-      props: {
-        propsData:{},
-      },
-      name: "blackListInfo",
-      data() {
-        return {
-          //加载状态
-          loading:false,
-          // 显示搜索条件
-          showSearch: true,
-          // 查询参数
-          queryParams: {
-            pageNum: 1,
-            pageSize:20,
-            points: null,
-            joinUserId: null,
-            mode: null,
-            deptName: null,
-            deptId: null,
-            userId: null,
-            semesterId: null,
-            overStatus: null
-          },
-          //状态条件
-          overStatusOptions:[
-            {id:1,name:"已完成"},
-            {id:0,name:"未完成"},
-          ],
-          //列表数据
-          recordList:[],
-          total:0,
-          // 日期范围
-          dateRange: [],
-          //学期列表
-          semesterOptions:[],
-        }
-      },
-      created(){
-        this.getList()
-      },
-      mounted(){
-        this.getSemesterList()
-      },
-      methods:{
-        //返回上级页面
-        backPage(){
-          this.$parent.goPage(1);
-        },
-        /** 查询数据 */
-        getList() {
-          this.loading = true;
-          if(this.dateRange&&this.dateRange.length>0)
-          {
-            this.queryParams.beginTime=this.dateRange[0]
-            this.queryParams.endTime=this.dateRange[1]
-          }
-          else
-          {
-            this.queryParams.beginTime=null;
-            this.queryParams.endTime=null
-          }
-          this.queryParams.blackId = this.propsData.userId;
-          getBlackDetail(this.queryParams).then( response => {
-            this.recordList =  response.rows;
-            this.total =  response.total;
-            this.loading = false;
-          });
-        },
-        /** 查询学期列表 */
-        getSemesterList() {
-          getSemesterList().then(response => {
-            this.$set(this, 'semesterOptions', response.data)
-          });
-        },
-        /** 搜索按钮操作 */
-        handleQuery() {
-          this.queryParams.pageNum = 1;
-          this.getList();
-        },
-        /** 重置按钮操作 */
-        resetQuery() {
-          this.resetForm("queryParams");
-          this.dateRange = [];
-          this.queryParams = {};
-          this.recordList = [];
-          this.handleQuery();
-        },
-      },
-    }
-</script>
-
-<style scoped lang="scss">
-  .blackListInfo{
-    flex:1;
-    display: flex!important;
-    flex-direction: column;
-    .scope-big-box{
-      display: flex;
-      p{
-        font-size:14px;
-        height:20px;
-        line-height:20px;
-        margin:4px 0;
-      }
-      p:nth-child(1){
-        margin-right:10px;
-      }
-      p:nth-child(2){
-
-      }
-      .scopeColorA{
-        padding:0 4px;
-        border-radius:4px;
-        color:#999;
-        background: #dedede;
-      }
-      .scopeColorB{
-        padding:0 4px;
-        border-radius:4px;
-        color:#fff;
-        background: #39A922;
-      }
-    }
-  }
-</style>

+ 0 - 354
src/views/creditViolation/credit/blacklist/index.vue

@@ -1,354 +0,0 @@
-<!--黑名单-->
-<template>
-  <div class="app-container blacklist">
-    <div class="blacklist-page" v-if="pageType == 1">
-      <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
-        <el-form-item label="学院" prop="deptId" style="margin-left:-30px;">
-          <el-select v-model="queryParams.deptId" placeholder="请选择学院" clearable size="small">
-            <el-option
-              v-for="dict in deptOptions"
-              :key="dict.deptId"
-              :label="dict.deptName"
-              :value="dict.deptId"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="关键字" prop="searchValue">
-          <el-input
-            v-model="queryParams.searchValue"
-            placeholder="请输入姓名/学号"
-            clearable
-            size="small"
-          />
-        </el-form-item>
-        <el-form-item>
-          <p class="inquire-button-one" @click="handleQuery">查询</p>
-          <p class="reset-button-one" @click="resetQuery">重置</p>
-        </el-form-item>
-      </el-form>
-      <el-table v-loading="loading" border :data="blacklistList" @sort-change="handleSelectionChange">
-        <el-table-column label="姓名" align="left" prop="userName" />
-        <el-table-column label="学号" align="left" prop="number" />
-        <el-table-column label="学院" align="left" prop="deptName" />
-        <el-table-column label="违规次数" align="left" sortable="custom" prop="total" />
-        <el-table-column label="负面清单次数" align="left" sortable="custom" prop="negativeNum" />
-        <el-table-column label="黑名单次数" align="left" sortable="custom" prop="blackNum" />
-        <el-table-column label="信用分" align="left" prop="creditScore" />
-        <el-table-column label="操作" align="left" class-name="small-padding fixed-width" width="230" v-if="tableButtonType">
-          <template slot-scope="scope">
-            <div class="table-button-box">
-              <p class="table-button-null"></p>
-              <p class="table-button-p"
-                 @click="goPage(2,scope.row)"
-                 v-hasPermi="['laboratory:blackdetail:list']"
-              >历史记录</p>
-              <p class="table-button-p"
-                 v-if="scope.row.blacklistStatus == 1"
-                 @click="handleDelete(scope.row)"
-                 v-hasPermi="['laboratory:blacklist:remove']"
-              >移除黑名单</p>
-              <p class="table-button-null"></p>
-            </div>
-          </template>
-        </el-table-column>
-      </el-table>
-      <pagination
-        v-show="total>0"
-        :total="total"
-        layout="total, prev, pager, next, sizes, jumper"
-        :page.sync="queryParams.pageNum"
-        :limit.sync="queryParams.pageSize"
-        @pagination="getList"
-      />
-    </div>
-    <black-list-info v-if="pageType == 2" :propsData="propsData"></black-list-info>
-    <!-- 移除黑名单 -->
-    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body :close-on-click-modal="false">
-      <el-form ref="form" :model="form" :rules="rules" label-width="90px">
-        <el-form-item label="姓名:">
-          <el-input v-model="form.userName" :disabled="true" placeholder="请输入姓名" />
-        </el-form-item>
-        <el-form-item label="学号:">
-          <el-input v-model="form.number" :disabled="true" placeholder="请输入学号" />
-        </el-form-item>
-        <el-form-item label="学院:">
-          <el-input v-model="form.deptName" :disabled="true" placeholder="请输入姓名" />
-        </el-form-item>
-        <el-form-item label="原因:" prop="reason">
-          <el-input
-            type="textarea"
-            :autosize="{ minRows: 6, maxRows: 6}"
-            placeholder="请输入原因"
-            resize="none"
-            v-model="form.reason">
-          </el-input>
-        </el-form-item>
-        <el-form-item label="">
-          <p style="font-size:14px;color:#999;margin:0;">提交后,该人员信用分自动恢复到合格分。</p>
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button @click="cancel">取 消</el-button>
-        <el-button type="primary" @click="submitForm">确 定</el-button>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-import { listBlacklist, getBlacklist, delBlacklist, addBlacklist, updateBlacklist, removeBlacklist } from "@/api/laboratory/blacklist";
-import { selectListUser } from "@/api/system/user";
-import { listDepartments,listbuildings } from "@/api/system/dept";
-import blackListInfo from "./blackListInfo.vue";
-export default {
-  name: "Blacklist",
-  components: {
-    blackListInfo,
-  },
-  data() {
-    return {
-      tableButtonType:this.hasPermiDom(['laboratory:blackdetail:list','laboratory:blacklist:remove']),
-      // 遮罩层
-      loading: true,
-      // 选中数组
-      ids: [],
-      // 非单个禁用
-      single: true,
-      // 非多个禁用
-      multiple: true,
-      // 显示搜索条件
-      showSearch: true,
-      // 总条数
-      total: 0,
-      // 黑名单表格数据
-      blacklistList: [
-        {
-          id:"id",
-          joinUserId:"joinUserId",
-          blacklistStatus:"blacklistStatus",
-          deptId:"deptId",
-
-        },
-      ],
-      // 弹出层标题
-      title: "",
-      // 是否显示弹出层
-      open: false,
-      // 查询参数
-      queryParams: {
-        pageNum: 1,
-        pageSize:20,
-        searchValue: null,
-        joinUserId: null,
-        blacklistStatus: null,
-        deptId: null,
-        deptName: null,
-        userId: null,
-      },
-      // 表单参数
-      form: {},
-      // 表单校验
-      rules: {
-        reason:[
-           {required: true, message: '请输入原因', trigger: 'blur'},
-          { required: true, message: "请输入原因", validator: this.spaceJudgment, trigger: "blur" }
-        ],
-      },
-      //新增-编辑状态
-      disabledType:true,
-      //人员
-      optionsUser: [],
-      //处置方案
-      optionsTwo: [],
-      // 日期范围
-      dateRange: [],
-      deptOptions:[],
-      //页面状态
-      pageType:1,
-      propsData:{},
-    };
-  },
-  created() {
-    this.getList();
-    this.getDicts("penaltyType").then(response => {
-      this.optionsTwo = response.data;
-    });
-  },
-  mounted(){
-    this.getDeptList();
-  },
-  methods: {
-    goPage(type,row){
-      if(this.pageType!=type){
-        if(type == 1){
-          this.pageType = type;
-          this.getList();
-        }else if(type == 2){
-          this.propsData.userId = row.id
-          this.pageType = type;
-        }
-      }
-    },
-    /** 查询黑名单列表 */
-    getList() {
-      this.loading = true;
-       if(this.dateRange&&this.dateRange.length>0)
-      {
-        this.queryParams.startTime=this.dateRange[0]
-        this.queryParams.endTime=this.dateRange[1]
-      }
-      else
-      {
-        this.queryParams.startTime=null;
-        this.queryParams.endTime=null
-      }
-
-      listBlacklist(this.queryParams).then(response => {
-        this.blacklistList = response.rows;
-        this.total = response.total;
-        this.loading = false;
-      });
-    },
-    /** 查询学院列表 */
-    getDeptList()
-    {
-      listDepartments().then(response => {
-        // this.deptOptions = response.data;
-        this.$set(this, 'deptOptions', response.data)
-      });
-    },
-    // 处置类型字典翻译
-    statusFormat(row, column) {
-      return this.selectDictLabel(this.optionsTwo, row.penaltyType);
-    },
-    // 取消按钮
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 表单重置
-    reset() {
-      this.form = {
-        id: null,
-        joinUserId: null,
-        blacklistStatus: 0,
-        deptId: null,
-        deptName: null,
-        userId: null,
-        remark: null,
-        createBy: null,
-        createTime: null,
-        updateBy: null,
-        updateTime: null
-      };
-      this.resetForm("form");
-    },
-    /** 搜索按钮操作 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    /** 重置按钮操作 */
-    resetQuery() {
-      // this.resetForm("queryForm");
-      this.$set(this,'queryParams',{
-        pageNum: 1,
-        pageSize:20,
-        deptId:"",
-        searchValue: '',
-      });
-      this.dateRange = null;
-      this.handleQuery();
-    },
-    // 多选框选中数据
-    handleSelectionChange(type) {
-      if(type.order == 'ascending'){
-        this.queryParams.order = type.prop;//降
-        this.queryParams.orderType = 'asc';//升ascending
-      }else if(type.order == 'descending'){
-        this.queryParams.order = type.prop;//降
-        this.queryParams.orderType = 'desc';//降
-      }else{
-        this.queryParams.order = null;//无
-        this.queryParams.orderType = null;//无
-      }
-      this.getList();
-    },
-    /** 新增按钮操作 */
-    handleAdd() {
-      this.reset();
-      this.disabledType = false;
-      this.open = true;
-      this.title = "添加黑名单";
-    },
-    /** 修改按钮操作 */
-    // handleUpdate(row) {
-    //   this.reset();
-    //   const id = row.id || this.ids.join()
-    //   getBlacklist(id).then(response => {
-    //     this.form = response.data;
-    //     this.disabledType = true;
-    //     this.open = true;
-    //     this.title = "修改黑名单";
-    //   });
-    // },
-    /** 提交按钮 */
-    submitForm() {
-      this.$refs["form"].validate(valid => {
-        if (valid) {
-          removeBlacklist(this.form).then(response => {
-              this.msgSuccess("操作成功");
-              this.open = false;
-              this.getList();
-            });
-        }
-      });
-    },
-    /** 删除按钮操作 */
-    handleDelete(row) {
-      this.$set(this,'form',row);
-      this.title = "移除黑名单";
-      this.open = true;
-    },
-    /** 导出按钮操作 */
-    handleExport() {
-      this.download('laboratory/blacklist/export', {
-        ...this.queryParams
-      }, `laboratory_blacklist.xlsx`)
-    },
-    /** 下列人员-懒加载 */
-    userSelectList(query) {
-        if (query !== '' && query.length>1) {
-          this.loading = true;
-          this.userSelectList.nickName=query;
-          selectListUser(this.userSelectList).then(response => {
-            this.optionsUser = response.data;
-            this.loading = false;
-          });
-        } else {
-          this.optionsUser = [];
-        }
-      }
-  }
-};
-</script>
-<style scoped lang="scss">
-  .blacklist {
-    display: flex!important;
-    flex-direction: column;
-    box-shadow: 0 0 8px 2px rgba(0, 0, 0, 0.1);
-    padding:20px!important;
-    overflow: hidden;
-    .blacklist-page{
-      flex:1;
-      display: flex!important;
-      flex-direction: column;
-      overflow: hidden;
-      .button-box{
-        display: flex;
-        width:250px;
-        margin:0 auto;
-      }
-    }
-  }
-</style>

+ 2 - 1
src/views/emergencyManagement/electronicInformationBoard/index.vue

@@ -117,6 +117,7 @@
   import { XxpCardInfoList,XxpCardInfo,XxpCardInfoPut,XxpCardInfoDelete,getSubList } from "@/api/laboratory/electronicInformationBoard";
   // import { filterDept,getSubList } from "@/api/medicUniversity-3_1/index";
   import {listDepartments} from "@/api/system/dept";
+  import {subjectList } from "@/api/laboratory/approval";
   export default {
     name: 'index',
     data(){
@@ -224,7 +225,7 @@
             obj.name = val
             obj.id = this.addForm.subjectId
           }
-          getSubList(obj).then(response => {
+          subjectList(obj).then(response => {
             this.$set(this,'selectList',response.data);
           })
         }else{

+ 15 - 16
src/views/emergencyManagement/evacuation/sparseHardware/addPage.vue

@@ -92,9 +92,8 @@
 
 <script>
   import { addSparseHardware, updateSparseHardware,getBuildsList } from "@/api/laboratory/sparseHardware";
-  import { listFloorByBuildId } from "@/api/laboratory/building";
   import { subjectDictList } from "@/api/laboratory/group";
-  import { selBuildOrFloorList } from "@/api/evacuation3_2/index";
+  import { buildFloorGetlist } from "@/api/laboratory/building";
   export default {
     name: 'addPage',
     props:{
@@ -168,10 +167,10 @@
         if(this.form.deviceType == 1){
           this.form.buildId = parseInt(this.form.buildId);
           this.form.floorId = parseInt(this.form.floorId);
-          selBuildOrFloorList({type:2}).then(response => {
-            this.$set(this,'buildList', response.data)
-            selBuildOrFloorList({type:3,parentId:this.form.buildId}).then(response => {
-              this.$set(this,'floorList', response.data)
+          buildFloorGetlist({type:2}).then(response => {
+            this.$set(this,'buildList', response.rows)
+            buildFloorGetlist({type:3,parentId:this.form.buildId}).then(response => {
+              this.$set(this,'floorList', response.rows)
             })
           });
         }
@@ -196,10 +195,10 @@
       },
       radioChange(){
         if(this.form.buildId){
-          selBuildOrFloorList({type:2}).then(response => {
-            this.$set(this,'buildList', response.data)
-            selBuildOrFloorList({type:3,parentId:this.form.buildId}).then(response => {
-              this.$set(this,'floorList', response.data)
+          buildFloorGetlist({type:2}).then(response => {
+            this.$set(this,'buildList', response.rows)
+            buildFloorGetlist({type:3,parentId:this.form.buildId}).then(response => {
+              this.$set(this,'floorList', response.rows)
             })
           });
         }
@@ -259,8 +258,8 @@
       },
       /** 查询楼栋列表 */
       getDeptListTow() {
-        selBuildOrFloorList({type:2}).then(response => {
-          this.$set(this,'buildList', response.data)
+        buildFloorGetlist({type:2}).then(response => {
+          this.$set(this,'buildList', response.rows)
         })
         // getBuildsList().then(response => {
         //   // this.deptOptionsTwo = response.data;
@@ -270,13 +269,13 @@
       //选择楼栋
       buildChange(e){
         console.log("选择楼栋",e)
-        selBuildOrFloorList({type:3,parentId:e}).then(response => {
-            this.$set(this,'floorList', response.data)
+        buildFloorGetlist({type:3,parentId:e}).then(response => {
+            this.$set(this,'floorList', response.rows)
             this.$set(this.form,'floorId', "")
         })
         //根据学院获取楼栋
-        // listFloorByBuildId(this.form.buildId).then(response => {
-        //   this.$set(this,'floorList', response.data)
+        // buildFloorGetlist(this.form.buildId).then(response => {
+        //   this.$set(this,'floorList', response.rows)
         //   this.$set(this.form,'floorId', "")
         // });
       },

+ 6 - 5
src/views/emergencyManagement/evacuation/sparseHardware/index.vue

@@ -11,7 +11,7 @@
         </el-form-item>
         <el-form-item label="楼栋" prop="buildId">
           <el-select v-model="queryParams.buildId" placeholder="请选择楼栋" clearable @change="deptChange">
-            <el-option v-for="(item,index) in buildsDataList" :key="index" :label="item.deptName" :value="item.deptId" />
+            <el-option v-for="(item,index) in buildsDataList" :key="index" :label="item.name" :value="item.id" />
           </el-select>
         </el-form-item>
         <!--<el-form-item label="实验室" prop="type">-->
@@ -126,8 +126,9 @@
 </template>
 
 <script>
-import { listSparseHardware, getSparseHardware, delSparseHardware, addSparseHardware, updateSparseHardware,buildsList,getNoAdminSubjectListNopage } from "@/api/laboratory/sparseHardware";
-import addPage from "./addPage.vue"
+  import { buildFloorGetlist } from "@/api/laboratory/building";
+  import { listSparseHardware, getSparseHardware, delSparseHardware, addSparseHardware, updateSparseHardware,getNoAdminSubjectListNopage } from "@/api/laboratory/sparseHardware";
+  import addPage from "./addPage.vue"
 export default {
   name: "SparseHardware",
   components: {
@@ -214,8 +215,8 @@ export default {
     },
     //查询楼栋
     buildsList(){
-      buildsList().then( response => {
-        this.buildsDataList = response.data;
+      buildFloorGetlist({type:2}).then( response => {
+        this.buildsDataList = response.rows;
       });
     },
     //选择学院获取实验室

+ 2 - 0
src/views/emergencyManagement/smartLoT/abnormal/index.vue

@@ -428,10 +428,12 @@ export default {
     /** 搜索按钮操作 */
     handleQuery() {
       this.queryParams.pageNum = 1;
+      this.queryParams.pageSize = 20;
       this.getList();
     },
     /** 重置按钮操作 */
     resetQuery() {
+
       this.queryParams = {};
       this.handleQuery();
     },

+ 2 - 1
src/views/emergencyManagement/smartLoT/control/index.vue

@@ -182,6 +182,7 @@
 <script>
 import { listControl, getControl, delControl, addControl, updateControl } from "@/api/laboratory/control";
 import { listDepartments } from "@/api/system/dept";
+import { getSubjectDictByViolation } from '@/api/laboratory/violation'
 import {subjectDictList } from "@/api/laboratory/record";
 
   import { queryHardwareType} from "@/api/laboratory/hardware";
@@ -283,7 +284,7 @@ export default {
       let params = {};
       params.deptId = deptId;
       this.queryParams.subjectId = "";
-      subjectDictList(params).then(response => {
+      getSubjectDictByViolation(params).then(response => {
         this.subjectOptions = response.data;
         this.loading = false;
       });

+ 2 - 1
src/views/emergencyManagement/smartLoT/hardware/index.vue

@@ -111,6 +111,7 @@
   // import voiceIntercom from "./voiceIntercom.vue";
   import { statisticsHardware } from "@/api/laboratory/hardware";
   import { listDepartments } from "@/api/system/dept";
+  import { getSubjectDictByViolation } from '@/api/laboratory/violation'
   import { subjectDictList } from "@/api/laboratory/group";
 
 /*
@@ -191,7 +192,7 @@ export default {
       let params = {};
       params.deptId = deptId;
       this.queryParams.subjectId = "";
-      subjectDictList(params).then(response => {
+      getSubjectDictByViolation(params).then(response => {
         this.subjectOptions = response.data;
         this.loading = false;
       });

+ 47 - 7
src/views/emergencyManagement/smartLoT/hardware/powerControl.vue

@@ -111,12 +111,21 @@
                 </el-tooltip>
               </el-select>
             </el-form-item>
-            <el-form-item label="继电器类型" label-width="1rem">
-              <el-radio-group v-model="form.hardwareType" @change="radioChange">
-                <el-radio :label="item.value" :key="item.value" v-for="(item,index) in hardwardTypeList">{{item.label}}</el-radio>
-              </el-radio-group>
+<!--            <el-form-item label="继电器类型" label-width="1rem">-->
+<!--              <el-radio-group v-model="form.hardwareType" @change="radioChange">-->
+<!--                <el-radio :label="item.value" :key="item.value" v-for="(item,index) in hardwardTypeList">{{item.label}}</el-radio>-->
+<!--              </el-radio-group>-->
+<!--            </el-form-item>-->
+            <el-form-item label="继电器类型" prop="relayCode">
+              <el-select v-model="form.hardwareType" placeholder="请选择继电器" clearable @change="radioChange" @clear="loadClear">
+                <el-option v-for="relay in hardwardTypeList"
+                           :key="relay.value"
+                           :label="relay.label"
+                           :value="relay.value">
+                </el-option>
+              </el-select>
             </el-form-item>
-            <el-form-item label="绑定继电器" prop="relayCode" v-if="form.hardwareType==1">
+            <el-form-item label="绑定继电器" prop="relayCode" v-if="form.hardwareType==1 || form.hardwareType==3">
               <el-select v-model="form.relayCode" placeholder="请选择继电器" clearable @change="loadRelayNum" @clear="loadClear">
                 <el-option v-for="relay in relayList"
                            :key="relay.code"
@@ -279,7 +288,8 @@
         ],
         hardwardTypeList:[
           {value:1,label:"老继电器"},
-          {value:2,label:"新继电器"}
+          {value:2,label:"新继电器"},
+          {value:3,label:"泥人继电器"}
         ],
         mtopic:"lab/hardware/data",
         //mqtt发送id数组
@@ -304,6 +314,19 @@
             list.push(obj);
           }
           self.relayNumList = list;
+        }else if(this.form.hardwareType==3){
+          this.relayNumList =[
+            {name:1},
+            {name:2},
+            {name:3},
+            {name:4},
+            {name:5},
+            {name:6},
+            {name:7},
+            {name:8},
+            {name:9},
+            {name:10},
+          ]
         }
       },
       // 开启关闭验证
@@ -533,7 +556,24 @@
           }
           list.push(obj);
         }
-        this.relayNumList = list;
+        console.log(list)
+        if(list.length>0){
+          this.relayNumList = list;
+        }else{
+          this.relayNumList =[
+            {name:1},
+            {name:2},
+            {name:3},
+            {name:4},
+            {name:5},
+            {name:6},
+            {name:7},
+            {name:8},
+            {name:9},
+            {name:10},
+          ]
+        }
+
       },
       loadHardware(){
         let self = this;

+ 46 - 7
src/views/emergencyManagement/smartLoT/hardware/smartVentilation.vue

@@ -90,17 +90,26 @@
                 </el-tooltip>
               </el-select>
             </el-form-item>
-            <el-form-item label="继电器类型" label-width="1rem" @change="radioChange">
-              <el-radio-group v-model="form.hardwareType">
-                <el-radio :label="item.value" :key="item.value" v-for="item in hardwardTypeList">{{item.label}}</el-radio>
-              </el-radio-group>
+<!--            <el-form-item label="继电器类型" label-width="1rem" @change="radioChange">-->
+<!--              <el-radio-group v-model="form.hardwareType">-->
+<!--                <el-radio :label="item.value" :key="item.value" v-for="item in hardwardTypeList">{{item.label}}</el-radio>-->
+<!--              </el-radio-group>-->
+<!--            </el-form-item>-->
+            <el-form-item label="继电器类型" prop="relayCode">
+              <el-select v-model="form.hardwareType" placeholder="请选择继电器" clearable @change="radioChange" @clear="loadClear">
+                <el-option v-for="relay in hardwardTypeList"
+                           :key="relay.value"
+                           :label="relay.label"
+                           :value="relay.value">
+                </el-option>
+              </el-select>
             </el-form-item>
             <el-form-item label="通风类型" label-width="1rem">
               <el-radio-group v-model="form.pcType">
                 <el-radio :label="item.value" :key="item.value" v-for="item in hardwardTypeListOne">{{item.label}}</el-radio>
               </el-radio-group>
             </el-form-item>
-            <el-form-item label="绑定继电器" prop="relayCode" v-if="form.hardwareType==1">
+            <el-form-item label="绑定继电器" prop="relayCode" v-if="form.hardwareType==1 || form.hardwareType==3">
               <el-select v-model="form.relayCode" placeholder="请选择继电器" clearable @change="loadRelayNum" @clear="loadClear">
                 <el-option v-for="relay in relayList"
                            :key="relay.code"
@@ -254,7 +263,8 @@
         ],
         hardwardTypeList:[
           {value:1,label:"老继电器"},
-          {value:2,label:"新继电器"}
+          {value:2,label:"新继电器"},
+          {value:3,label:"泥人继电器"}
         ],
         hardwardTypeListOne:[
           {value:0,label:"排风扇"},
@@ -286,6 +296,19 @@
             list.push(obj);
           }
           self.relayNumList = list;
+        }else if(this.form.hardwareType==3){
+          this.relayNumList =[
+            {name:1},
+            {name:2},
+            {name:3},
+            {name:4},
+            {name:5},
+            {name:6},
+            {name:7},
+            {name:8},
+            {name:9},
+            {name:10},
+          ]
         }
       },
       async tableButton(row){
@@ -515,7 +538,23 @@
           }
           list.push(obj);
         }
-        this.relayNumList = list;
+        console.log(this.relayNumList)
+        if(list.length>0){
+          this.relayNumList = list;
+        }else{
+          this.relayNumList =[
+            {name:1},
+            {name:2},
+            {name:3},
+            {name:4},
+            {name:5},
+            {name:6},
+            {name:7},
+            {name:8},
+            {name:9},
+            {name:10},
+          ]
+        }
       },
       loadHardware(){
         let self = this;

+ 2 - 1
src/views/emergencyManagement/smartLoT/sensor/index.vue

@@ -149,6 +149,7 @@ import { subjectDictList } from "@/api/laboratory/group";
 import { treeselect } from "@/api/system/dept";
 import Treeselect from "@riophae/vue-treeselect";
 import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+import { getSubjectDictByViolation } from '@/api/laboratory/violation'
 
 export default {
   name: "Sensor",
@@ -249,7 +250,7 @@ export default {
       let params = {};
       params.deptId = deptId;
       this.queryParams.subjectId = "";
-      subjectDictList(params).then(response => {
+      getSubjectDictByViolation(params).then(response => {
         this.subjectOptions = response.data;
         this.loading = false;
       });

+ 0 - 15
src/views/gasManage3_0/manage/labCenterPerson/labCenterPerson.vue

@@ -116,22 +116,7 @@ export default {
           this.$set(this, 'deptOptions', response.data)
         });
       },
-      /** 查询楼栋列表  */
-      getBuildings(id) {
-        if(id) {
-          this.$set(this.form, 'buildId', '');//楼栋
-          this.buildings = [];
-          this.$set(this.form, 'floorId', '');//楼层
-          this.floors = [];
-          this.$set(this.form, 'layoutId', '');//房间
-          this.layoutLists = [];
-          listbuildings(id).then(response => {
-            this.buildings = response.data;
-          });
-        }
-      },
       handleClick(index,row,doType){
-
         let _this=this;
         if(doType=='add'){//添加
           _this.pageType=2;

+ 1 - 1
src/views/gasManage3_0/manage/qualificationApply/qualificationApplyAdd.vue

@@ -277,7 +277,7 @@ export default {
     },
     //懒加载实验室
     userSelectList(e){
-      subjectList({name:e,deptId:this.form.deptId}).then(response => {
+      subjectList({name:e}).then(response => {
         this.laboratoryOptions = response.data;
       });
     },

+ 1 - 1
src/views/gasManage3_0/manage/useGas/useGasAdd.vue

@@ -246,7 +246,7 @@ export default {
     },
     //懒加载实验室
     userSelectList(e){
-      subjectList({name:e,deptId:this.form.deptId}).then(response => {
+      subjectList({name:e}).then(response => {
         this.laboratoryOptions = response.data;
       });
     },

+ 1 - 1
src/views/gasManage3_0/student/qualificationApply/qualificationApplyAdd.vue

@@ -278,7 +278,7 @@ export default {
     },
     //懒加载实验室
     userSelectList(e){
-      subjectList({name:e,deptId:this.form.deptId}).then(response => {
+      subjectList({name:e}).then(response => {
         this.laboratoryOptions = response.data;
       });
     },

+ 1 - 1
src/views/gasManage3_0/student/useGas/useGasAdd.vue

@@ -243,7 +243,7 @@ export default {
     },
     //懒加载实验室
     userSelectList(e){
-      subjectList({name:e,deptId:this.form.deptId}).then(response => {
+      subjectList({name:e}).then(response => {
         this.laboratoryOptions = response.data;
       });
     },

+ 4 - 4
src/views/hierarchicalControl/hierarchicalControl/gradeManage/index.vue

@@ -77,8 +77,8 @@
 </template>
 
 <script>
+  import { listDepartments } from "@/api/system/dept";
   import { listGradeManage, getGradeManage, delGradeManage, addGradeManage, updateGradeManage } from "@/api/laboratory/gradeManage";
-  import { filterDept } from "@/api/medicUniversity-3_1/index";
   import { listClassifiedAll } from "@/api/laboratory/classified";
   import { listClasstypeAll } from "@/api/laboratory/classtype";
   import { labMoldQueryOption } from "@/api/laboratory/subjectClass";
@@ -212,7 +212,7 @@
     mounted(){
       this.getListClassifiedAll();
       this.getListClasstypeAll();
-      this.filterDept();
+      this.listDepartments();
       this.labMoldQueryOption();
       this.getList();
     },
@@ -245,8 +245,8 @@
         });
       },
       //获取学院
-      filterDept(){
-        filterDept().then(response => {
+      listDepartments(){
+        listDepartments().then(response => {
           let list = [];
           for(let i=0;i<response.data.length;i++){
             list.push({label:response.data[i].deptName, value:response.data[i].deptId,})

+ 4 - 4
src/views/hierarchicalControl/hierarchicalControl/gradeManageRecord/index.vue

@@ -158,7 +158,7 @@
 </template>
 
 <script>
-import { filterDept } from "@/api/medicUniversity-3_1/index";
+  import { listDepartments } from "@/api/system/dept";
 import { listGradeManageRecord, getGradeManageRecord, delGradeManageRecord, addGradeManageRecord, updateGradeManageRecord } from "@/api/laboratory/gradeManageRecord";
 import { listClassifiedAll } from "@/api/laboratory/classified";
 import { listClasstypeAll } from "@/api/laboratory/classtype";
@@ -220,7 +220,7 @@ export default {
     this.getList();
   },
   mounted(){
-    this.filterDept();
+    this.listDepartments();
     this.getListClassifiedAll();
     this.getListClasstypeAll();
     this.queryOption();
@@ -284,8 +284,8 @@ export default {
       });
     },
     //获取学院
-    filterDept(){
-      filterDept().then(response => {
+    listDepartments(){
+      listDepartments().then(response => {
         this.deptList = response.data;
       });
     },

+ 3 - 2
src/views/login.vue

@@ -135,6 +135,8 @@ export default {
         localStorage.setItem('rectangleLogo',response.data.rectangleLogo)
         localStorage.setItem('videoCover',response.data.videoCover)
       });
+    },
+    getUrlConfig(){
       getUrlConfig().then(response => {
         console.log('开发配置',response.data)
         //判定http或者https
@@ -181,8 +183,6 @@ export default {
 
 
       });
-
-
     },
     getCode() {
       getCodeImg().then(res => {
@@ -244,6 +244,7 @@ export default {
               this.getCode();
               return
             }
+            this.getUrlConfig();
             if(res.data.reset_password){
               this.$confirm('账号当前登录密码为默认密码,是否现在修改?', "提示", {
                 confirmButtonText: "确定",

+ 2 - 2
src/views/medicUniversity-3_1/chemicalManagement/chemicalLibrary/CabinetManagement/index.vue

@@ -287,13 +287,13 @@
       z-index: 1;
     }
     .switch .el-switch__label--right span{
-      margin-right:10px;
+      margin-left:10px;
     }
     .switch .el-switch__label--left {
       z-index: 1;
     }
     .switch .el-switch__label--left span{
-      margin-left: 14px;
+      margin-left: 24px;
     }
     .switch .el-switch__label.is-active {
       display: block;

+ 6 - 6
src/views/medicUniversity-3_1/chemicalManagement/chemicalLibrary/CabinetManagement/smartLock.vue

@@ -90,14 +90,14 @@
     <el-dialog :title="dialogTitle" :visible.sync="addDialogType" v-if="addDialogType" width="520px" append-to-body class="add-dialog-box" :close-on-click-modal="false">
       <el-form ref="form" :model="form" :rules="rules" label-width="140px">
         <el-form-item label="智能终端编号:" prop="hardwareNum">
-          <el-input v-model="form.hardwareNum" placeholder="最大20个字符,包含大小写字母、数字" onkeyup="value=value.replace(/[^\w\.\/]/ig,'')" maxlength="30" style="width:360px;"/>
+          <el-input v-model="form.hardwareNum" placeholder="最大20个字符,包含大小写字母、数字" onkeyup="value=value.replace(/[^\w\.\/]/ig,'')" maxlength="30" style="width:320px;"/>
         </el-form-item>
         <el-form-item label="智能柜锁名称:" prop="name">
-          <el-input v-model="form.name" placeholder="最大10个字符,包含汉字、大小写字母、数字、符号" maxlength="10" style="width:360px;"/>
+          <el-input v-model="form.name" placeholder="最大10个字符,包含汉字、大小写字母、数字、符号" maxlength="10" style="width:320px;"/>
         </el-form-item>
         <el-form-item label="实验室:" prop="subjectId">
           <el-select
-            style="width:360px;"
+            style="width:320px;"
             v-model="form.subjectId"
             filterable
             remote
@@ -116,13 +116,13 @@
           </el-select>
         </el-form-item>
         <el-form-item label="锁柜ID:" prop="lockId">
-          <el-input v-model="form.lockId" placeholder="0-253" maxlength="3" style="width:360px;" onkeyup="value=value.replace(/[^\d]/g,'')"/>
+          <el-input v-model="form.lockId" placeholder="0-253" maxlength="3" style="width:320px;" onkeyup="value=value.replace(/[^\d]/g,'')"/>
         </el-form-item>
         <el-form-item label="摄像头ip:" prop="ipAddress">
-          <el-input v-model="form.ipAddress" placeholder="请输入摄像头ip" maxlength="20" style="width:360px;"/>
+          <el-input v-model="form.ipAddress" placeholder="请输入摄像头ip" maxlength="20" style="width:320px;"/>
         </el-form-item>
         <el-form-item label="采集器编号:" prop="relayCode">
-          <el-input v-model="form.relayCode" placeholder="请输入采集器编号" maxlength="20" onkeyup="value=value.replace(/[^\w\.\/]/ig,'')" style="width:360px;"/>
+          <el-input v-model="form.relayCode" placeholder="请输入采集器编号" maxlength="20" onkeyup="value=value.replace(/[^\w\.\/]/ig,'')" style="width:320px;"/>
         </el-form-item>
       </el-form>
       <div slot="footer" class="dialog-footer">

+ 19 - 19
src/views/medicUniversity-3_1/chemicalManagement/chemicalLibrary/ChemicalInfo/listPage.vue

@@ -229,7 +229,7 @@
 </template>
 
 <script>
-  import { getHxpChemicalJoinCabinet,delHxpChemicalJoinCabinet,filterDept,getSubList,getCabinetBySubId,hxpChemicalJoinCabinet,getRestStockByManyCabinet } from "@/api/medicUniversity-3_1/index";
+  import { getNoAdminSubjectListNopage,getHxpChemicalJoinCabinet,delHxpChemicalJoinCabinet,getCabinetBySubId,hxpChemicalJoinCabinet,getRestStockByManyCabinet } from "@/api/medicUniversity-3_1/index";
   import { getLogoInfo } from "@/api/system/publicConfig";
   export default {
     name: "listPage",
@@ -524,22 +524,23 @@
       //化学品存放
       handleAdd(){
         //查询当前院系
-        filterDept().then(response => {
-          let text = "";
-          let idText = "";
-          for(let i=0;i<response.data.length;i++){
-            if(i==0){
-              text = text + response.data[i].deptName;
-              idText = idText + response.data[i].deptId;
-            }else{
-              text = text +'-'+ response.data[i].deptName;
-              idText = idText +','+ response.data[i].deptId;
-            }
-          }
-          this.$set(this,'dialogDeptName',text);
-          this.$set(this,'dialogDeptId',idText);
-          this.getSubList();
-        });
+        // filterDept().then(response => {
+        //   let text = "";
+        //   let idText = "";
+        //   for(let i=0;i<response.data.length;i++){
+        //     if(i==0){
+        //       text = text + response.data[i].deptName;
+        //       idText = idText + response.data[i].deptId;
+        //     }else{
+        //       text = text +'-'+ response.data[i].deptName;
+        //       idText = idText +','+ response.data[i].deptId;
+        //     }
+        //   }
+        //   this.$set(this,'dialogDeptName',text);
+        //   this.$set(this,'dialogDeptId',idText);
+        //   this.getSubList();
+        // });
+        this.getSubList();
       },
       backPage(){
         this.$parent.pageToggle(1);
@@ -597,8 +598,7 @@
       },
       //根据所属院系或多个院系获取实验室列表
       getSubList(){
-        let ids = this.dialogDeptId+'';
-        getSubList(ids).then(response => {
+        getNoAdminSubjectListNopage().then(response => {
           this.$set(this,'dialogData',{
             subId:"",
             chemicalId:"",

+ 2 - 2
src/views/medicUniversity-3_1/chemicalManagement/chemicalLibrary/ChemicalInfo/msdsPage.vue

@@ -32,12 +32,12 @@
         <el-table  border :data="tableList" ref="multipleTable" :row-key="getRowKeys"
                    tooltip-effect="dark" @select-all="dialogCheck" @select="dialogCheck">
           <el-table-column type="selection" width="50" align="center" :reserve-selection="true"/>
-          <el-table-column label="序号" type="index" align="center"/>
+          <el-table-column label="序号" type="index" align="center" width="50"/>
           <el-table-column label="化学品名称" align="center" prop="name"/>
           <el-table-column label="编号" align="center" prop="code"/>
           <el-table-column label="创建时间" align="center" prop="createTime"/>
           <el-table-column label="创建人" align="center" prop="createBy"/>
-          <el-table-column label="操作" align="center" width="280" class-name="small-padding fixed-width">
+          <el-table-column label="操作" align="center" width="140" class-name="small-padding fixed-width">
             <template slot-scope="scope">
               <div class="table-button-box">
                 <p class="table-button-null"></p>

+ 2 - 1
src/views/medicUniversity-3_1/chemicalManagement/deviceManagement/IntelligentTerminal/index.vue

@@ -160,6 +160,7 @@
 <script>
   import { hxpSmartTerminal,filterDept,getSubList,addHxpSmartTerminal,putHxpSmartTerminal,getHxpSmartTerminal,delHxpSmartTerminal } from "@/api/medicUniversity-3_1/index";
   import { listHardware, delHardware, addHardware, updateHardware } from "@/api/medicUniversity-3_1/index";
+  import {subjectDictList } from "@/api/laboratory/record";
   import { listDepartments } from "@/api/system/dept";
   import { getToken } from "@/utils/auth";
   export default {
@@ -298,7 +299,7 @@
             }
           }
           //查询院系下实验室
-          getSubList(idText).then(response => {
+          subjectDictList(idText).then(response => {
             //当前列表
             this.selectList = JSON.parse(JSON.stringify(response.data));
             //原始列表数据

+ 2 - 1
src/views/medicUniversity-3_1/chemicalManagement/deviceManagement/SmartAccessControl/index.vue

@@ -169,6 +169,7 @@
 import { hxpSmartTerminal,filterDept,getSubList,addHxpSmartTerminal,putHxpSmartTerminal,getHxpSmartTerminal,delHxpSmartTerminal } from "@/api/medicUniversity-3_1/index";
 import { listHardware, delHardware, addHardware, updateHardware } from "@/api/medicUniversity-3_1/index";
 import { listDepartments } from "@/api/system/dept";
+import {subjectDictList } from "@/api/laboratory/record";
 import { getToken } from "@/utils/auth";
 export default {
   name: "SmartAccessControl-jinan",
@@ -321,7 +322,7 @@ export default {
           }
         }
         //查询院系下实验室
-        getSubList(idText).then(response => {
+        subjectDictList(idText).then(response => {
           //当前列表
           this.selectList = JSON.parse(JSON.stringify(response.data));
           //原始列表数据

+ 2 - 1
src/views/medicUniversity-3_1/chemicalManagement/deviceManagement/smartAlarm/index.vue

@@ -272,6 +272,7 @@
   import { listHardware, delHardware, addHardware, updateHardware, hardWareControl } from "@/api/medicUniversity-3_1/index";
   import { listRelay } from "@/api/laboratory/relay";
   import { listDepartments } from "@/api/system/dept";
+  import {subjectDictList } from "@/api/laboratory/record";
   import { getToken } from "@/utils/auth";
   export default {
     name: "smartAlarm",
@@ -529,7 +530,7 @@
             }
           }
           //查询院系下实验室
-          getSubList(idText).then(response => {
+          subjectDictList(idText).then(response => {
             //当前列表
             this.selectList = JSON.parse(JSON.stringify(response.data));
             //原始列表数据

+ 2 - 1
src/views/medicUniversity-3_1/chemicalManagement/deviceManagement/smartLocker/index.vue

@@ -242,6 +242,7 @@
   import { listHardware, delHardware, addHardware, updateHardware,setLock,getCabinetLockList } from "@/api/medicUniversity-3_1/index";
   import { listDepartments } from "@/api/system/dept";
   import { getToken } from "@/utils/auth";
+  import {subjectDictList } from "@/api/laboratory/record";
   import associatedCabinetLock from "./associatedCabinetLock.vue"
   import operationRecord from "./operationRecord.vue"
   export default {
@@ -475,7 +476,7 @@
             }
           }
           //查询院系下实验室
-          getSubList(idText).then(response => {
+          subjectDictList(idText).then(response => {
             //当前列表
             this.selectList = JSON.parse(JSON.stringify(response.data));
             //原始列表数据

+ 4 - 0
src/views/newEvacuationBigData.vue

@@ -2280,6 +2280,10 @@
               obj.zcImg = this.sensorIconData.voc_zc;
               obj.ycImg = this.sensorIconData.voc_yc;
               break;
+            case 'fbvoc':
+              obj.zcImg = this.sensorIconData.voc_zc;
+              obj.ycImg = this.sensorIconData.voc_yc;
+              break;
             case 'tvoc':
               obj.zcImg = this.sensorIconData.tvoc_zc;
               obj.ycImg = this.sensorIconData.tvoc_yc;

+ 2 - 1
src/views/oneKeyOutfire/outfireDevice/outfireDevice.vue

@@ -151,6 +151,7 @@
 <script>
 import { subjectList, } from '@/api/gasManage3_0/gasManage'
 import { firedeviceAdd, firedeviceDle, firedeviceEdit, firedeviceList } from '@/api/laboratory/subject'
+import {subjectDictList } from "@/api/laboratory/record";
 export default {
   name: "Approval",
   components: {
@@ -230,7 +231,7 @@ export default {
       },
       //懒加载实验室
       userSelectList(e){
-        subjectList({name:e,deptId:this.dialogForm.deptId}).then(response => {
+        subjectDictList({name:e,deptId:this.dialogForm.deptId}).then(response => {
           this.laboratoryOptions = response.data;
         });
       },

+ 1 - 1
src/views/safetyCheck/checkConfiguration/checkUserPage.vue

@@ -76,7 +76,7 @@
           searchValue:"",
           deptId:""
         },
-        tableList:[{}],
+        tableList:[],
         total:0,
       }
     },

+ 1 - 1
src/views/safetyCheck/checkConfiguration/rectificationUserPage.vue

@@ -76,7 +76,7 @@
           searchValue:"",
           deptId:""
         },
-        tableList:[{}],
+        tableList:[],
         total:0,
       }
     },

+ 5 - 5
src/views/safetyCheck/dataStatistics/checkIndexStatistics.vue

@@ -110,7 +110,7 @@
         queryParams:{},
         setChildren:"",
         numData:{},
-        tableList:[{}],
+        tableList:[],
         total:0,
         userFlg:false,
         deptId:"",
@@ -177,8 +177,8 @@
         if(this.userFlg){
           //院级
           hiddenDataItemsSubList(obj).then(response => {
-            this.total = response.total;
-            this.tableList = response.rows;
+            this.total = response.data.total;
+            this.tableList = response.data.records;
           });
           hiddenDataItemsSubListTop(objTop).then(response => {
             this.$set(this,'numData',response.data);
@@ -186,8 +186,8 @@
         }else{
           //校级
           dataStatisticsItemsList(obj).then(response => {
-            this.total = response.total;
-            this.tableList = response.rows;
+            this.total = response.data.total;
+            this.tableList = response.data.records;
           });
           dataStatisticsItemsListTop(objTop).then(response => {
             this.$set(this,'numData',response.data);

+ 9 - 6
src/views/safetyCheck/dataStatistics/laboratoryStatistics.vue

@@ -75,7 +75,7 @@
       搜索到实验室总数 {{numData.sumTotal}},存在危险源的实验室数 {{numData.hazardSubjectTotal}},危险源总数 {{numData.hazardTotal}}<span v-for="item in numData.classListVo">,{{item.levelName}} {{item.amount}}</span>
     </div>
     <el-table  border :data="tableList" ref="multipleTable"
-               :row-key="getRowKeys"
+               tooltip-effect="dark" :row-key="getRowKeys"
                @select="select" @select-all="selectAll">
       <el-table-column type="selection" width="50" align="center" fixed/>
       <el-table-column label="序号" align="center"  type="index" width="60" fixed/>
@@ -165,8 +165,8 @@
           obj.endTime = "";
         }
         dataStatisticsSubList(obj).then(response => {
-          this.total = response.total;
-          this.tableList = response.rows;
+          this.total = response.data.total;
+          this.tableList = response.data.records;
         });
         dataStatisticsSubListTop(obj).then(response => {
           this.$set(this,'numData',response.data);
@@ -232,6 +232,8 @@
       },
       // 单选
       select (selection, row) {
+        console.log('selection',selection)
+        console.log('row',row)
         if (selection.some(el => { return row.id === el.id })) {
           if (row.children) {
             this.setChildren(row.children, true)
@@ -272,16 +274,17 @@
 </script>
 
 <style scoped lang="scss">
+  ::v-deep .el-table__body-wrapper{
+    padding-bottom: 8px;
+  }
   ::v-deep .el-table__fixed{
     margin-top:-1px;
     margin-left:-1px;
-    height:100%!important;
+    height:calc(100% - 8px)!important;
   }
   ::v-deep .el-table__fixed-body-wrapper{
     height: calc(100% - 48px);
     overflow-y: auto;
-    pointer-events: none;
-    cursor: default;
   }
   .laboratoryStatistics{
     flex:1;

+ 6 - 5
src/views/safetyCheck/dataStatistics/safetyHazardStatistics.vue

@@ -167,8 +167,8 @@
           obj.endTime = "";
         }
         dataStatisticsHazardList(obj).then(response => {
-          this.total = response.total;
-          this.tableList = response.rows;
+          this.total = response.data.total;
+          this.tableList = response.data.records;
         });
         dataStatisticsHazardListTop(obj).then(response => {
           this.$set(this,'numData',response.data);
@@ -272,16 +272,17 @@
 </script>
 
 <style scoped lang="scss">
+  ::v-deep .el-table__body-wrapper{
+    padding-bottom: 8px;
+  }
   ::v-deep .el-table__fixed{
     margin-top:-1px;
     margin-left:-1px;
-    height:100%!important;
+    height:calc(100% - 8px)!important;
   }
   ::v-deep .el-table__fixed-body-wrapper{
     height: calc(100% - 48px);
     overflow-y: auto;
-    pointer-events: none;
-    cursor: default;
   }
   .safetyHazardStatistics{
     flex:1;

+ 4 - 3
src/views/safetyCheck/laboratorySelfTest/selfInspectionManagement/index.vue

@@ -313,16 +313,17 @@
 </script>
 
 <style scoped lang="scss">
+  ::v-deep .el-table__body-wrapper{
+    padding-bottom: 8px;
+  }
   ::v-deep .el-table__fixed{
     margin-top:-1px;
     margin-left:-1px;
-    height:100%!important;
+    height:calc(100% - 8px)!important;
   }
   ::v-deep .el-table__fixed-body-wrapper{
     height: calc(100% - 48px);
     overflow-y: auto;
-    pointer-events: none;
-    cursor: default;
   }
   .selfInspectionManagement{
     flex: 1;

+ 4 - 3
src/views/safetyCheck/laboratorySelfTest/selfInspectionTask/listPage.vue

@@ -304,16 +304,17 @@
 </script>
 
 <style scoped lang="scss">
+  ::v-deep .el-table__body-wrapper{
+    padding-bottom: 8px;
+  }
   ::v-deep .el-table__fixed{
     margin-top:-1px;
     margin-left:-1px;
-    height:100%!important;
+    height:calc(100% - 8px)!important;
   }
   ::v-deep .el-table__fixed-body-wrapper{
     height: calc(100% - 48px);
     overflow-y: auto;
-    pointer-events: none;
-    cursor: default;
   }
   .selfInspectionManagement{
     flex: 1;

+ 19 - 11
src/views/safetyCheck/safetyHazard/departmentListPage.vue

@@ -6,10 +6,6 @@
         <el-form :model="queryParams" class="form-box" ref="queryForm" :inline="true" label-width="80px">
           <div class="form-button-max-big-box">
             <div class="form-button-big-box" style="margin-left:10px;">
-              <div :class="queryParams.rectifyStatus==''?'checkDiv':''" @click="topLeftClickType('')">
-                <p class="text-p">全部</p>
-                <p class="el-icon-check icon-p" v-if="queryParams.rectifyStatus==''"></p>
-              </div>
               <div :class="queryParams.rectifyStatus==2?'checkDiv':''" @click="topLeftClickType(2)">
                 <p class="text-p">待整改</p>
                 <p class="el-icon-check icon-p" v-if="queryParams.rectifyStatus==2"></p>
@@ -120,7 +116,7 @@
 </template>
 
 <script>
-  import { checkHazardList } from '@/api/safetyCheck/index'
+  import { rectifyList, recheckList, overList } from '@/api/safetyCheck/index'
   import batchAudit from './batchAudit.vue'
   import infoDialog from '@/views/safetyCheck/components/infoDialog/infoDialog.vue'
   export default {
@@ -145,7 +141,7 @@
           pageNum:1,
           pageSize:20,
           hazardType:2,
-          rectifyStatus:"",
+          rectifyStatus:"2",
           examineResult:"",
           searchValue:"",
           checkTimeOrder:"",
@@ -233,10 +229,22 @@
         }else{
           obj.endTime = "";
         }
-        checkHazardList(obj).then(response => {
-          this.total = response.data.total;
-          this.tableList = response.data.records;
-        });
+        if(this.queryParams.rectifyStatus == 2){
+          rectifyList(obj).then(response => {
+            this.total = response.data.total;
+            this.tableList = response.data.records;
+          });
+        } else if (this.queryParams.rectifyStatus == 3){
+          recheckList(obj).then(response => {
+            this.total = response.data.total;
+            this.tableList = response.data.records;
+          });
+        }  else if (this.queryParams.rectifyStatus == 1){
+          overList(obj).then(response => {
+            this.total = response.data.total;
+            this.tableList = response.data.records;
+          });
+        }
       },
       /** 搜索按钮操作 */
       handleQuery() {
@@ -250,7 +258,7 @@
           pageNum:1,
           pageSize:20,
           hazardType:2,
-          rectifyStatus:"",
+          rectifyStatus:"2",
           examineResult:"",
           searchValue:"",
           checkTimeOrder:"",

+ 19 - 11
src/views/safetyCheck/safetyHazard/schoolListPage.vue

@@ -6,10 +6,6 @@
         <el-form :model="queryParams" class="form-box" ref="queryForm" :inline="true" label-width="80px">
           <div class="form-button-max-big-box">
             <div class="form-button-big-box" style="margin-left:10px;">
-              <div :class="queryParams.rectifyStatus==''?'checkDiv':''" @click="topLeftClickType('')">
-                <p class="text-p">全部</p>
-                <p class="el-icon-check icon-p" v-if="queryParams.rectifyStatus==''"></p>
-              </div>
               <div :class="queryParams.rectifyStatus==2?'checkDiv':''" @click="topLeftClickType(2)">
                 <p class="text-p">待整改</p>
                 <p class="el-icon-check icon-p" v-if="queryParams.rectifyStatus==2"></p>
@@ -120,7 +116,7 @@
 </template>
 
 <script>
-  import { checkHazardList } from '@/api/safetyCheck/index'
+  import { rectifyList, recheckList, overList } from '@/api/safetyCheck/index'
   import batchAudit from './batchAudit.vue'
   import infoDialog from '@/views/safetyCheck/components/infoDialog/infoDialog.vue'
   export default {
@@ -145,7 +141,7 @@
           pageNum:1,
           pageSize:20,
           hazardType:1,
-          rectifyStatus:"",
+          rectifyStatus:"2",
           examineResult:"",
           searchValue:"",
           checkTimeOrder:"",
@@ -233,10 +229,22 @@
         }else{
           obj.endTime = "";
         }
-        checkHazardList(obj).then(response => {
-          this.total = response.data.total;
-          this.tableList = response.data.records;
-        });
+        if(this.queryParams.rectifyStatus == 2){
+          rectifyList(obj).then(response => {
+            this.total = response.data.total;
+            this.tableList = response.data.records;
+          });
+        } else if (this.queryParams.rectifyStatus == 3){
+          recheckList(obj).then(response => {
+            this.total = response.data.total;
+            this.tableList = response.data.records;
+          });
+        }  else if (this.queryParams.rectifyStatus == 1){
+          overList(obj).then(response => {
+            this.total = response.data.total;
+            this.tableList = response.data.records;
+          });
+        }
       },
       /** 搜索按钮操作 */
       handleQuery() {
@@ -250,7 +258,7 @@
           pageNum:1,
           pageSize:20,
           hazardType:1,
-          rectifyStatus:"",
+          rectifyStatus:"2",
           examineResult:"",
           searchValue:"",
           checkTimeOrder:"",

+ 4 - 3
src/views/safetyCheck/schoolInspection/inspectionManagement/index.vue

@@ -311,16 +311,17 @@
 </script>
 
 <style scoped lang="scss">
+  ::v-deep .el-table__body-wrapper{
+    padding-bottom: 8px;
+  }
   ::v-deep .el-table__fixed{
     margin-top:-1px;
     margin-left:-1px;
-    height:100%!important;
+    height:calc(100% - 8px)!important;
   }
   ::v-deep .el-table__fixed-body-wrapper{
     height: calc(100% - 48px);
     overflow-y: auto;
-    pointer-events: none;
-    cursor: default;
   }
   .inspectionManagement{
     flex: 1;

+ 4 - 3
src/views/safetyCheck/schoolInspection/inspectionPlan/listPage.vue

@@ -304,16 +304,17 @@
 </script>
 
 <style scoped lang="scss">
+  ::v-deep .el-table__body-wrapper{
+    padding-bottom: 8px;
+  }
   ::v-deep .el-table__fixed{
     margin-top:-1px;
     margin-left:-1px;
-    height:100%!important;
+    height:calc(100% - 8px)!important;
   }
   ::v-deep .el-table__fixed-body-wrapper{
     height: calc(100% - 48px);
     overflow-y: auto;
-    pointer-events: none;
-    cursor: default;
   }
   .selfInspectionManagement{
     flex: 1;

+ 1 - 1
src/views/safetyCheck/snapshotManagement/index.vue

@@ -224,7 +224,7 @@
           zgTimeOrder:"",
         },
         dateRange:[],
-        tableList:[{}],
+        tableList:[],
         total:0,
         //新增窗口
         addDialogType:false,

+ 1 - 1
src/views/safetyCheck/snapshotManagement/listPage.vue

@@ -133,7 +133,7 @@
           zgTimeOrder:"",
         },
         dateRange:[],
-        tableList:[{}],
+        tableList:[],
         total:0,
         //详情
         infoPropsData:{}

+ 11 - 12
src/views/safetyCheck/startInspection/index.vue

@@ -23,9 +23,9 @@
                            @change="buildingsChange" style="width: 500px">
                   <el-option
                     v-for="item in buildingsSelectList"
-                    :key="item.deptId"
-                    :label="item.deptName"
-                    :value="item.deptId">
+                    :key="item.id"
+                    :label="item.name"
+                    :value="item.id">
                   </el-option>
                 </el-select>
               </el-form-item>
@@ -66,7 +66,7 @@
             </div>
             <div class="top-form-right-box">
               <el-form-item label="学院" prop="deptId">
-                <el-select v-model="addForm.deptId" placeholder="请选择学院"
+                <el-select disabled v-model="addForm.deptId" placeholder="请选择学院"
                            @change="deptChange" style="width: 500px">
                   <el-option
                     v-for="item in deptSelectList"
@@ -221,7 +221,8 @@
 <script>
   import { getToken } from "@/utils/auth";
   import lookImgDialog from '@/components/lookImgDialog/lookImgDialog.vue'
-  import { listDepartments,listbuildings } from "@/api/system/dept";
+  import { listDepartments } from "@/api/system/dept";
+  import { buildFloorGetlist } from "@/api/laboratory/building";
   import { buildBySubList,getCheckPlanBySubId,findCheckManage,checkOptionList,
            checkManageUpdate,checkManageAdd,countHazardNum,getGentle } from "@/api/safetyCheck/index";
   export default {
@@ -333,6 +334,7 @@
       this.checkOptionList();
       this.listDepartments();
       this.getGentle();
+      this.buildFloorGetlist();
     },
     methods:{
       //获取权限范围
@@ -534,9 +536,9 @@
         });
       },
       //根据学院id查询楼栋列表
-      listbuildings(id){
-        listbuildings(id).then(response => {
-          this.buildingsSelectList = response.data;
+      buildFloorGetlist(){
+        buildFloorGetlist({type:2}).then(response => {
+          this.buildingsSelectList = response.rows;
         });
       },
       //根据楼栋id查询实验室列表
@@ -554,11 +556,11 @@
         this.initializationAddFormData();
         this.$set(this,'planType',1);
         this.$set(this,'planList',[]);
-        this.listbuildings(val);
       },
       //选择楼栋触发
       buildingsChange(val){
         this.$set(this,'subId','');
+        this.$set(this.addForm,'subId','');
         this.initializationAddFormData();
         this.$set(this,'planType',1);
         this.$set(this,'planList',[]);
@@ -571,7 +573,6 @@
           if(self.subSelectList[i].id == val){
             this.$set(this.addForm,'deptId',self.subSelectList[i].deptId);
             this.$set(this.addForm,'buildId',self.subSelectList[i].buildId);
-            this.listbuildings(self.subSelectList[i].deptId);
             this.getCheckPlanBySubId(val);
             return
           }
@@ -581,7 +582,6 @@
       getSubList(val){
         this.$set(this.addForm,'deptId','');
         this.$set(this.addForm,'buildId','');
-        this.$set(this,'buildingsSelectList',[]);
         this.$set(this.addForm,'subId','');
         this.$set(this,'subSelectList',[]);
         this.initializationAddFormData();
@@ -638,7 +638,6 @@
           for(let i=0;i<response.data.checkHazardDtoList.length;i++){
             response.data.checkHazardDtoList[i].lookType = true;
           }
-          this.listbuildings(response.data.deptId);
           this.buildBySubList(response.data.buildId,1);
           this.$set(this,'addForm',{
             id:response.data.id,

+ 2 - 2
src/views/safetyEducationExam/safeLearning/el_course/edit.vue

@@ -453,7 +453,7 @@
 <script>
   import { listQu } from "@/api/exam/qu";
   import { list_option } from "@/api/exam/el_classify";
-  import { listDepartments } from "@/api/system/dept";
+  import { getDeptNoAuthList } from "@/api/system/dept";
   import { listEl_resources } from "@/api/exam/el_resources";
   import { getEl_course,addEl_course, updateEl_course,add_el_chapter,edit_el_chapter,del_el_chapter,queryChapterQu } from "@/api/exam/el_course";
   import { listEl_category} from "@/api/exam/el_category";
@@ -675,7 +675,7 @@
       /******************基本信息-开始******************/
       /* 查询学院列表 */
       getDeptList(){
-        listDepartments().then(response => {
+        getDeptNoAuthList().then(response => {
           // this.deptOptions = response.data;
           this.$set(this, 'deptOptions', response.data)
         });

+ 1 - 1
src/views/safetyEducationExam/securityExam/myResultInquiry/index.vue

@@ -119,7 +119,7 @@
     display: flex!important;
     flex-direction: column;
     box-shadow: 0 0 8px 2px rgba(0, 0, 0, 0.1);
-    padding:0 20px 20px!important;
+    padding:20px 20px!important;
     .myResultInquiry-page{
       flex: 1;
       display: flex!important;

+ 1 - 1
src/views/secureAccess/approval_handle/addPage.vue

@@ -365,7 +365,7 @@
       },
       /** 导师-懒加载 */
       selectUserListByName(query) {
-        if (query !== '' && query.length>1) {
+        if (query !== '' && query) {
           let obj={
             nickName:query,
             userType:'11',

+ 0 - 180
src/views/secureAccess/approval_handle/index.vue

@@ -55,71 +55,6 @@
     </div>
     <add-page v-if="pageType == 2" :infoData="infoData" :infoType="infoType"></add-page>
     <info-page v-if="pageType == 3" :infoData="infoData"></info-page>
-    <!--新增/修改-->
-    <el-drawer
-      class="approval_handle-drawer"
-      :visible.sync="drawer"
-      direction="rtl"
-      ref="drawer"
-      :with-header="false"
-      :show-close="false"
-      :before-close="handleClose">
-      <el-form :model="drawerForm" ref="drawerForm" :rules="rules" :inline="true" class="approval_handle-drawer-form-box">
-        <el-form-item label="学院" prop="deptId" label-width="50px" >
-          <el-select v-model="drawerForm.deptId" placeholder="请选择学院" :disabled="disabledType" clearable size="small"
-            @change="getBuildings(drawerForm.deptId)">
-            <el-option
-              v-for="dict in deptOptions"
-              :key="dict.deptId"
-              :label="dict.deptName"
-              :value="dict.deptId"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="楼栋" prop="buildId">
-          <el-select v-model="drawerForm.buildId" placeholder="请选择楼栋" :disabled="disabledType" clearable size="small"
-            @change="getSubjectDictList(drawerForm.buildId)">
-            <el-option
-              v-for="dict in buildings"
-              :key="dict.deptId"
-              :label="dict.deptName"
-              :value="dict.deptId"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="实验室" prop="subjectId">
-          <el-select v-model="drawerForm.subjectId" placeholder="请选择实验室" :disabled="disabledType" clearable size="small"
-            @change="securityBySubjectId(drawerForm.subjectId)">
-            <el-option
-              v-for="item in subjects"
-              :key="item.id"
-              :label="item.name"
-              :value="item.id">
-            </el-option>
-          </el-select>
-        </el-form-item>
-        <div class="upload-box" v-for="(item,index) in drawerForm.approvalDetails" :key="index">
-          <p>{{item.materialName}}</p>
-          <el-upload
-            class="avatar-uploader"
-            :action="uploadImgUrl"
-            accept="image/jpeg,image/gif,image/png"
-            :show-file-list="false"
-            :disabled="disabledImgType"
-            :on-success="(response, file)=>handleAvatarSuccess(response,file,index)"
-            :headers="headers"
-            :before-upload="beforeAvatarUpload">
-            <img v-if="item.materialUrl" :src="item.materialUrl" class="avatar">
-            <i v-if="!item.materialUrl" class="el-icon-plus avatar-uploader-icon"></i>
-          </el-upload>
-        </div>
-      </el-form>
-      <div class="bottom-button-box">
-        <p class="null-p"></p>
-        <p class="reset-button-one" style="margin-right:20px;" @click="offDrawer">{{disabledImgType?'关闭':'取消'}}</p>
-        <p class="inquire-button-one" v-if="!disabledImgType" @click="submitForm">提交</p>
-      </div>
-    </el-drawer>
   </div>
 </template>
 
@@ -184,9 +119,6 @@ export default {
         deptId:[
           {required: true, message: '请选择学院', trigger: 'blur'}
         ],
-        buildId:[
-          {required: true, message: '请选择楼栋', trigger: 'blur'}
-        ],
         subjectId:[
           {required: true, message: '请选择实验室', trigger: 'blur'}
         ],
@@ -271,30 +203,6 @@ export default {
         this.deptOptions = response.data;
       });
     },
-    /** 根据学院查询楼栋列表  */
-    getBuildings(id,type) {
-      if(id) {
-        this.subjects = [];
-        this.$set(this.drawerForm, 'buildId', '')
-        this.$set(this.drawerForm, 'subjectId', '')
-        listbuildings(id).then(response => {
-          this.buildings = response.data;
-          if(!type){
-            this.drawerForm.approvalDetails = [];
-          }
-        });
-      }
-    },
-    /** 根据学院楼栋查询实验室列表  */
-    getSubjectDictList (buildId,type) {
-      this.$set(this.drawerForm, 'subjectId', '')
-      subjectDictList({buildId: buildId}).then(response => {
-        this.subjects = response.data;
-        if(!type){
-          this.drawerForm.approvalDetails = [];
-        }
-      });
-    },
     /** 通过实验室 查询对应的安全准入规则 */
     securityBySubjectId(subjectId) {
       securityBySubjectId(subjectId).then(response => {
@@ -417,94 +325,6 @@ export default {
       this.open = true;
       this.title = "添加审批记录";
     },
-    /** 修改按钮操作 */
-    handleUpdate(type,row) {
-      this.reset();
-      const id = row.id
-      getApproval(id).then(response => {
-        if(response.data.deptId){
-          this.getBuildings(response.data.deptId,true)
-        }
-        if(response.data.buildId){
-          this.getSubjectDictList(response.data.buildId,true)
-        }
-        this.drawerForm = response.data;
-        let list = response.data.approvalDetails;
-        let newList = [];
-        let listData = [];
-        if(type==1){
-          this.disabledType = true;
-          this.disabledImgType = true;
-          this.drawerForm.recordContent = "";
-          this.drawer = true;
-          this.$forceUpdate();
-        }else{
-          securityBySubjectId(response.data.subjectId).then(response => {
-            if(response.data && response.data.materialNames){
-              let materialNames = response.data.materialNames;
-              this.drawerForm.approvalDetails =[];
-              this.drawerForm.securityGroupId = response.data.id;
-              const names = materialNames.split(",")
-              names.forEach(v => {
-                newList.push({materialName: v, materialUrl: ''})
-              })
-              this.disabledType = true;
-              this.disabledImgType = false;
-              for(let i=0;i<newList.length;i++){
-                let num = 0;
-                for(let o=0;o<list.length;o++){
-                  if(newList[i].materialName == list[o].materialName){
-                    listData.push(list[o]);
-                    num++
-                  }
-                }
-                if(num==0){
-                  listData.push(newList[i]);
-                }
-              }
-              this.drawerForm.approvalDetails = listData;
-              this.drawer = true;
-              this.$forceUpdate();
-            }else {
-              this.drawerForm.approvalDetails = [];
-              this.$message.error("实验室暂无安全准入配置!");
-            }
-          });
-        }
-      });
-    },
-    /** 提交按钮 */
-    submitForm() {
-      let self = this;
-      if(!self.drawerForm.approvalDetails[0]){
-        this.$message.error("该实验室未配置安全准入规则,无法办理!");
-        return
-      }
-      for (let i=0;i<self.drawerForm.approvalDetails.length;i++){
-        if(self.drawerForm.approvalDetails[i].materialUrl == ""){
-          this.$message.error("请上传相关凭证!");
-          return
-        }
-      }
-      this.$refs["drawerForm"].validate(valid => {
-        if (valid) {
-          if (this.drawerForm.id != null) {
-            this.drawerForm.recordContent = "2";
-            updateApproval(this.drawerForm).then(response => {
-              this.msgSuccess("修改成功");
-              this.drawer = false;
-              this.newGetList();
-            });
-          } else{
-            addApproval(this.drawerForm).then(response => {
-              this.msgSuccess("新增成功");
-              this.drawer = false;
-              this.newGetList();
-            });
-          }
-        }
-      });
-    },
     /** 删除按钮操作 */
     handleDelete(row) {
       let self = this;

+ 8 - 10
src/views/secureAccess/whitelist/addPage.vue

@@ -73,8 +73,8 @@
           />
         </el-form-item>
         <el-form-item label="楼栋" prop="buildId">
-          <el-select v-model="dialogForm.buildId" placeholder="请选择楼栋" clearable  @change="buildChange">
-            <el-option v-for="(item,index) in buildsDataList" :key="index" :label="item.deptName" :value="item.deptId" />
+          <el-select v-model="dialogForm.buildId" placeholder="请选择楼栋" @change="buildChange">
+            <el-option v-for="(item,index) in buildsDataList" :key="index" :label="item.name" :value="item.id" />
           </el-select>
         </el-form-item>
         <el-form-item label="楼层" prop="floorId">
@@ -146,8 +146,7 @@ import {
 } from "@/api/laboratory/whitelist";
 import {listInfo} from "@/api/laboratory/gradeManage";
 import {delPlan, getUserRoleBySub} from "@/api/laboratory/plan";
-import {buildsList} from "@/api/laboratory/sparseHardware";
-import {listFloorByBuildId} from "@/api/laboratory/building";
+import {buildFloorGetlist} from "@/api/laboratory/building";
 import addPageSubPagePublic from './differenceComponent/addPageSubPagePublic.vue'
 import addPageSubPageSZDX from './differenceComponent/addPageSubPageSZDX.vue'
 export default {
@@ -268,17 +267,16 @@ export default {
     },
     //查询楼栋
     buildsList(){
-      buildsList().then( response => {
-        this.buildsDataList = response.data;
+      buildFloorGetlist({type:2}).then(response => {
+        this.$set(this,'buildsDataList', response.rows)
       });
     },
     //选择楼栋
     buildChange(e){
-      console.log("选择楼栋",e)
       //根据学院获取楼栋
-      listFloorByBuildId(this.dialogForm.buildId).then(response => {
-        this.$set(this,'floorList', response.data)
-        this.$set(this.form,'floorId', "")
+      buildFloorGetlist({type:3,parentId:this.dialogForm.buildId}).then(response => {
+        this.$set(this,'floorList', response.rows)
+        this.$set(this.dialogForm,'floorId', "")
       });
     },
     //查询

+ 1 - 1
src/views/secureAccess/whitelist/index.vue

@@ -33,7 +33,7 @@
         <el-table-column label="姓名" align="left" prop="userName"/>
         <el-table-column label="工号" align="left" prop="userNumber"/>
         <el-table-column label="联系方式" align="left" prop="userTelephone"/>
-        <el-table-column label="学院" align="left" prop="deptName"/>
+        <el-table-column label="部门" align="left" prop="deptName"/>
         <el-table-column label="操作" align="center" width="160" v-if="tableButtonType">
           <template slot-scope="scope">
             <div class="table-button-box">

+ 22 - 22
src/views/studentViews/chemicalManagement/studentChemicalInfo/addPage.vue

@@ -223,7 +223,7 @@
 </template>
 
 <script>
-  import { filterDept,getSubList,getCabinetBySubId,hxpChemicalJoinCabinet,getRestStockByManyCabinet,classifyList } from "@/api/medicUniversity-3_1/index";
+  import { getNoAdminSubjectListNopage,getCabinetBySubId,hxpChemicalJoinCabinet,getRestStockByManyCabinet,classifyList } from "@/api/medicUniversity-3_1/index";
   import { getHxpQueryByUser } from "@/api/studentApi/chemicalManagement/index";
   import { getLogoInfo } from "@/api/system/publicConfig";
   export default {
@@ -529,26 +529,27 @@
       //化学品存放
       handleAdd(){
         //查询当前院系
-        filterDept().then(response => {
-          if(!this.selectioned.id){
-            this.msgError('请勾选化学品')
-            return
-          }
-          let text = "";
-          let idText = "";
-          for(let i=0;i<response.data.length;i++){
-            if(i==0){
-              text = text + response.data[i].deptName;
-              idText = idText + response.data[i].deptId;
-            }else{
-              text = text +'-'+ response.data[i].deptName;
-              idText = idText +','+ response.data[i].deptId;
-            }
-          }
-          this.$set(this,'dialogDeptName',text);
-          this.$set(this,'dialogDeptId',idText);
+        // filterDept().then(response => {
+        //   if(!this.selectioned.id){
+        //     this.msgError('请勾选化学品')
+        //     return
+        //   }
+        //   let text = "";
+        //   let idText = "";
+        //   for(let i=0;i<response.data.length;i++){
+        //     if(i==0){
+        //       text = text + response.data[i].deptName;
+        //       idText = idText + response.data[i].deptId;
+        //     }else{
+        //       text = text +'-'+ response.data[i].deptName;
+        //       idText = idText +','+ response.data[i].deptId;
+        //     }
+        //   }
+        //   this.$set(this,'dialogDeptName',text);
+        //   this.$set(this,'dialogDeptId',idText);
+        //   this.getSubList();
+        // });
           this.getSubList();
-        });
       },
       backPage(){
         this.$parent.pageToggle(0);
@@ -589,8 +590,7 @@
       },
       //根据所属院系或多个院系获取实验室列表
       getSubList(){
-        let ids = this.dialogDeptId+'';
-        getSubList(ids).then(response => {
+        getNoAdminSubjectListNopage().then(response => {
           this.$set(this,'dialogData',{
             subId:"",
             chemicalId:"",