dedsudiyu 6 月之前
父節點
當前提交
00184f74a9

+ 0 - 54
src/api/hierarchicalControl/index.js

@@ -1,54 +0,0 @@
-import request from '@/utils/request'
-
-// 分级管控-列表
-export function laboratoryGradeManageList(data) {
-  return request({
-    url: '/laboratory/gradeManage/list',
-    method: 'post',
-    data: data
-  })
-}
-
-// 分级管控-新增
-export function laboratoryGradeManageAdd(data) {
-  return request({
-    url: '/laboratory/gradeManage/add',
-    method: 'post',
-    data: data
-  })
-}
-
-// 分级管控-修改
-export function laboratoryGradeManageUpdate(data) {
-  return request({
-    url: '/laboratory/gradeManage/update',
-    method: 'post',
-    data: data
-  })
-}
-
-// 分级管控-执行
-export function laboratoryGradeManageExecute(data) {
-  return request({
-    url: '/laboratory/gradeManage/execute',
-    method: 'post',
-    data: data
-  })
-}
-
-// 分级管控-详情
-export function laboratoryGradeManageDetail(query) {
-  return request({
-    url: '/laboratory/gradeManage/detail',
-    method: 'get',
-    params: query
-  })
-}
-// 分级管控-删除
-export function laboratoryGradeManageDelete(query) {
-  return request({
-    url: '/laboratory/gradeManage/delete',
-    method: 'get',
-    params: query
-  })
-}

+ 177 - 0
src/api/hierarchicalControl/indexDemo.js

@@ -0,0 +1,177 @@
+import request from '@/utils/request'
+
+// 查询分级��控管理列表
+export function listGradeManage(query) {
+  return request({
+    url: '/laboratory/gradeManage/list',
+    method: 'get',
+    params: query
+  })
+}
+// 查询分级��控管理详细
+export function getGradeManage(id) {
+  return request({
+    url: '/laboratory/gradeManage/' + id,
+    method: 'get'
+  })
+}
+// 删除分级��控管理
+export function delGradeManage(id) {
+  return request({
+    url: '/laboratory/gradeManage/' + id,
+    method: 'delete'
+  })
+}
+// 新增分级��控管理
+export function addGradeManage(data) {
+  return request({
+    url: '/laboratory/gradeManage',
+    method: 'post',
+    data: data
+  })
+}
+// 修改分级��控管理
+export function updateGradeManage(data) {
+  return request({
+    url: '/laboratory/gradeManage',
+    method: 'put',
+    data: data
+  })
+}
+//化学品存放页面-获取当前账号学院数据
+export function filterDept(query) {
+  return request({
+    url: '/system/dept/filterDept',
+    method: 'get',
+    params: query
+  })
+}
+// 查询安全分级所有列表(不带分页)
+export function listClassifiedAll(query) {
+  return request({
+    url: '/laboratory/classified/listAll',
+    method: 'get',
+    params: query
+  })
+}
+// 查询安全分级类型列表(不带分页)
+export function listClasstypeAll(query) {
+  return request({
+    url: '/laboratory/classtype/listAll',
+    method: 'get',
+    params: query
+  })
+}
+// 查询实验室类型列表
+export function labMoldQueryOption(data) {
+  return request({
+    url: '/laboratory/labMold/queryOption',
+    method: 'post',
+    data: data
+  })
+}
+
+//获取实验室列表
+export function listInfo(query) {
+  return request({
+    url: '/laboratory/subject/listInfo',
+    method: 'get',
+    params: query
+  })
+}
+// 删除实验室类型
+export function queryOption(data) {
+  return request({
+    url: '/laboratory/labMold/queryOption/',
+    method: 'post',
+    data: data
+  })
+}
+// 查询用户列表
+export function listUser(query) {
+  return request({
+    url: '/system/user/getNotAuthList',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询院系列表
+export function listDepartments() {
+  return request({
+    url: '/system/dept/departments/list',
+    method: 'get'
+  })
+}
+//获取职位列表
+export function optionselect(query) {
+  return request({
+    url: '/system/post/optionselect',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询管控执行记录列表
+export function listGradeManageRecord(query) {
+  return request({
+    url: '/laboratory/gradeManageRecord/list',
+    method: 'get',
+    params: query
+  })
+}
+// 查询管控执行记录详细
+export function getGradeManageRecord(id) {
+  return request({
+    url: '/laboratory/gradeManageRecord/' + id,
+    method: 'get'
+  })
+}
+// 删除管控执行记录
+export function delGradeManageRecord(id) {
+  return request({
+    url: '/laboratory/gradeManageRecord/' + id,
+    method: 'delete'
+  })
+}
+// 新增管控执行记录
+export function addGradeManageRecord(data) {
+  return request({
+    url: '/laboratory/gradeManageRecord',
+    method: 'post',
+    data: data
+  })
+}
+// 修改管控执行记录
+export function updateGradeManageRecord(data) {
+  return request({
+    url: '/laboratory/gradeManageRecord',
+    method: 'put',
+    data: data
+  })
+}
+
+//查询分级管控管理工作详情
+export function gradeManageWorkInfo(recordId) {
+  return request({
+    url: '/laboratory/gradeManageWork/'+recordId,
+    method: 'get',
+  })
+}
+// 查询分级控管理工作-完成
+export function gradeManageWorkFinish(data) {
+  return request({
+    url: '/laboratory/gradeManageWork/finish',
+    method: 'post',
+    data: data
+  })
+}
+
+// 查询分级控管理列表
+export function gradeManageWorkList(query) {
+  return request({
+    url: '/laboratory/gradeManageWork/list',
+    method: 'get',
+    params: query
+  })
+}

+ 0 - 448
src/views/hierarchicalControl/conditionsSettings/addPage.vue

@@ -1,448 +0,0 @@
-<template>
-  <div class="page-container conditionsSettings-addPage">
-    <div class="page-top-title-box">
-      <p class="page-top-title-name-p">{{newData.id?'编辑':'新增'}}</p>
-      <p class="page-top-title-out-p" @click="backPage">返回</p>
-      <p class="page-top-title-add-p" @click="submitForm">提交</p>
-    </div>
-    <div class="content-box scrollbar-box">
-      <el-form class="add-form-box" :model="newData" ref="form" :rules="rules" label-width="110px">
-        <div style="margin-top:20px;">
-          <el-form-item label="管控名称" prop="name">
-            <el-input v-model="newData.name" placeholder="请输入管控名称" maxLength="20" style="width:260px;"></el-input>
-          </el-form-item>
-          <el-form-item label="二级单位" prop="deptId">
-            <el-select v-model="newData.deptId" placeholder="请选择二级单位" style="width: 260px">
-              <el-option
-                v-for="dict in deptOptions"
-                :key="dict.deptId"
-                :label="dict.deptName"
-                :value="dict.deptId"
-              ></el-option>
-            </el-select>
-          </el-form-item>
-        </div>
-        <div>
-          <el-form-item label="安全分类" prop="typeId">
-            <el-select v-model="newData.typeId" placeholder="请选择安全分类" style="width: 260px">
-              <el-option
-                v-for="dict in typeList"
-                :key="dict.typeId"
-                :label="dict.typeName"
-                :value="dict.typeId"
-              ></el-option>
-            </el-select>
-          </el-form-item>
-          <el-form-item label="安全分级" prop="levelId">
-            <el-select v-model="newData.levelId" placeholder="请选择安全分级" style="width: 260px">
-              <el-option
-                v-for="dict in levelList"
-                :key="dict.levelId"
-                :label="dict.levelName"
-                :value="dict.levelId"
-              ></el-option>
-            </el-select>
-          </el-form-item>
-        </div>
-        <div>
-          <el-form-item label="执行周期" prop="way">
-            <el-select v-model="newData.way" placeholder="请选择执行周期" style="width: 260px">
-              <el-option
-                v-for="dict in cycleOptions"
-                :key="dict.key"
-                :label="dict.value"
-                :value="dict.key"
-              ></el-option>
-            </el-select>
-          </el-form-item>
-          <el-form-item label="执行方式" prop="cycle">
-            <el-select v-model="newData.cycle" placeholder="请选择执行方式" style="width: 260px">
-              <el-option
-                v-for="dict in wayOptions"
-                :key="dict.key"
-                :label="dict.value"
-                :value="dict.key"
-              ></el-option>
-            </el-select>
-          </el-form-item>
-        </div>
-        <div>
-          <el-form-item label="执行人员" prop="executionUserId">
-            <el-select
-              style="width:260px;"
-              v-model="newData.executionUserId"
-              filterable
-              remote
-              clearable
-              reserve-keyword
-              @change="userChange"
-              placeholder="请输入姓名/工号/手机号"
-              :remote-method="userSelectList">
-              <el-option
-                v-for="item in optionsUser"
-                :key="item.userId"
-                :label="item.userName"
-                :value="item.userId">
-              </el-option>
-            </el-select>
-          </el-form-item>
-          <el-form-item label="截止日期" prop="deadline">
-            <el-date-picker
-              style="width:260px;"
-              value-format="yyyy-MM-dd"
-              v-model="newData.deadline"
-              type="date"
-              placeholder="选择日期">
-            </el-date-picker>
-          </el-form-item>
-        </div>
-        <div>
-          <el-form-item label="实验室" prop="subId">
-            <el-select
-              style="width:260px;"
-              v-model="newData.subId"
-              filterable
-              remote
-              clearable
-              reserve-keyword
-              @change="selectChange"
-              @clear="selectClear"
-              placeholder="请选择实验地点"
-              :remote-method="subjectList">
-              <el-option
-                v-for="item in laboratoryOptions"
-                :key="item.subId"
-                :label="item.subName"
-                :value="item.subId">
-              </el-option>
-            </el-select>
-          </el-form-item>
-        </div>
-        <el-form-item label="管控描述" prop="manageDes">
-          <el-input type="textarea" resize="none" style="width:630px;" show-word-limit
-                    :rows="4"
-                    v-model="newData.manageDes" placeholder="请输入管控描述" maxlength="100"/>
-        </el-form-item>
-        <!--<el-form-item label="执行人员" prop="userList">-->
-        <!--<div class="max-big-user-box" style="width:1400px;">-->
-        <!--<div class="for-user-box" style="display: inline-block;border:1px solid #0045AF;border-radius:4px;padding:0 10px;margin:5px 20px 5px 0;"-->
-        <!--v-for="(item,index) in newData.userList" :key="index">-->
-        <!--<div class="for-user-min-box" style="display: flex;">-->
-        <!--<p class="user-name-p" style="width:200px;line-height:30px;font-size:14px;color:#0045AF;">{{item.userName}}</p>-->
-        <!--<p class="user-del-button el-icon-error"  style="cursor: pointer;line-height:30px;color:#999;" @click="delUser(index)"></p>-->
-        <!--</div>-->
-        <!--</div>-->
-        <!--</div>-->
-        <!--<p class="add-button-p" style="margin:5px 0 0 0;cursor: pointer;text-align: center;font-size:14px;border-radius:4px;width:140px;line-height:30px;color:#0183FA;border:1px solid #0183FA;" @click="shadeOpen" v-if="!newData.userList[9]">添加人员</p>-->
-        <!--</el-form-item>-->
-      </el-form>
-    </div>
-    <el-dialog class="conditionsSettings-dialog" title='添加人员' width="460px" append-to-body
-               :visible.sync="shadeType" v-if="shadeType" @close="dialogOff()"
-               :close-on-click-modal="false" :close-on-press-escape="false">
-      <div>
-        <el-form :model="shadeForm" ref="shadeForm" :inline="true" :rules="shadeRules">
-          <el-form-item label="人员查询" prop="userId" class="form-item" label-width="90px">
-            <el-select
-              style="width:300px;"
-              v-model="shadeForm.userId"
-              filterable
-              remote
-              clearable
-              reserve-keyword
-              @change="userChange"
-              placeholder="请输入姓名/工号/手机号"
-              :remote-method="userSelectList">
-              <el-option
-                v-for="item in optionsUser"
-                :key="item.userId"
-                :label="item.userName"
-                :value="item.userId">
-              </el-option>
-            </el-select>
-          </el-form-item>
-        </el-form>
-      </div>
-      <div slot="footer" class="dialog-footer dialog-footer-box">
-        <p class="dialog-footer-button-null"></p>
-        <p class="dialog-footer-button-info" @click="shadeOut()">取消</p>
-        <p class="dialog-footer-button-primary" @click="shadeUp">提交</p>
-        <p class="dialog-footer-button-null"></p>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-  import {
-    getDeptDropList,
-    laboratoryClassTypeGetList,
-    laboratoryClassLevelGetList,
-    systemUserSelect,
-    subjectList
-  } from '@/api/commonality/permission'
-  import { laboratoryGradeManageAdd,laboratoryGradeManageUpdate } from "@/api/hierarchicalControl/index";
-  export default {
-    name: 'addPage',
-    props: {
-      propsData: {}
-    },
-    data() {
-      return {
-        newData: {
-          name: '',
-          manageDes: '',
-          deptId: '',
-          typeId: '',
-          levelId: '',
-          executionUserId: '',
-          subId:'',
-          subName:'',
-          deadline:'',
-        },
-        //下拉列表数据
-        deptOptions: [],
-        typeList: [],
-        levelList: [],
-        way:'',
-        cycle:'',
-        wayOptions: [{value:'单人执行',key:'1'},{value:'执行多人',key:'2'}],
-        cycleOptions: [{value:'一天',key:'1'},{value:'一周',key:'2'},{value:'一月',key:'3'},{value:'季度',key:'4'},{value:'半年',key:'5'},{value:'一年',key:'6'},],
-        rules: {
-          name: [
-            { required: true, message: '请输入管控名称', trigger: 'blur' },
-            { required: true, message: '请输入管控名称', validator: this.spaceJudgment, trigger: 'blur' }
-          ],
-          manageDes: [
-            { required: true, message: '请输入管控描述', trigger: 'blur' },
-            { required: true, message: '请输入管控描述', validator: this.spaceJudgment, trigger: 'blur' }
-          ],
-          deptId: [
-            { required: true, message: '请选择二级单位', trigger: 'blur' }
-          ],
-          typeId: [
-            { required: true, message: '请选择安全分类', trigger: 'blur' }
-          ],
-          way: [
-            { required: true, message: '请选择执行周期', trigger: 'blur' }
-          ],
-          cycle: [
-            { required: true, message: '请选择执行方式', trigger: 'blur' }
-          ],
-          levelId: [
-            { required: true, message: '请选择安全分级', trigger: 'blur' }
-          ],
-          deadline: [
-            { required: true, message: '请选择截止日期', trigger: 'blur' }
-          ],
-          executionUserId: [
-            { required: true, message: '请选择执行人员', trigger: 'blur' }
-          ]
-        },
-        shadeRules: {
-          userId: [
-            { required: true, message: '请选择人员', trigger: 'blur' }
-          ]
-        },
-        shadeType: false,
-        // 人员查询列表
-        userName: '',
-        userId: '',
-        optionsUser: [],
-        shadeForm: {},
-        laboratoryOptions:[],
-      }
-    },
-    created() {
-      this.getDeptDropList()
-      this.laboratoryClassTypeGetList()
-      this.laboratoryClassLevelGetList()
-    },
-    mounted() {
-      if(this.propsData.id){
-        this.$set(this,'newData',this.propsData);
-        this.$set(this,'optionsUser',[{
-          userId:this.propsData.executionUserId,
-          userName:this.propsData.executionUser,
-        }]);
-        this.$set(this,'laboratoryOptions',[{
-          subId:this.propsData.subId,
-          subName:this.propsData.subName,
-        }]);
-        this.$set(this.newData,'way',"1");
-        this.$set(this.newData,'cycle',"1");
-      }
-    },
-    methods: {
-      //懒加载实验室
-      subjectList(e){
-        subjectList({subName:e}).then(response => {
-          this.laboratoryOptions = response.data;
-        });
-      },
-      //实验室选择
-      selectChange(e){
-        let self = this;
-        for(let i=0;i<self.laboratoryOptions.length;i++){
-          if(self.laboratoryOptions[i].subId == e){
-            self.$set(self.newData,"subId",self.laboratoryOptions[i].subId);
-            self.$set(self.newData,"subName",self.laboratoryOptions[i].subName);
-          }
-        }
-      },
-      selectClear(){
-        this.$set(this.newData,"subId",'');
-        this.$set(this.newData,"subName",'');
-      },
-      // 返回按钮
-      backPage() {
-        this.$parent.tableButton(6)
-      },
-      /** 提交按钮 */
-      submitForm() {
-        let self = this;
-        this.$refs['form'].validate(valid => {
-          if (valid) {
-            let obj = {
-              name: this.newData.name, //管控名称
-              deptId: this.newData.deptId, //二级单位ID
-              typeId: this.newData.typeId, //分类ID
-              levelId: this.newData.levelId, //分级ID
-              executionUserId: this.newData.executionUserId, //执行人员ID
-              subId: this.newData.subId, //执行人员ID
-              subName: this.newData.subName, //执行人员ID
-              deadline: this.newData.deadline, //执行人员ID
-              manageDes: this.newData.manageDes //管控描述
-            }
-            this.deptOptions.forEach((item)=>{
-              if(item.deptId == self.newData.deptId){
-                obj.deptName = item.deptName
-              }
-            })
-            this.typeList.forEach((item)=>{
-              if(item.typeId == self.newData.typeId){
-                obj.typeName = item.typeName
-              }
-            })
-            this.levelList.forEach((item)=>{
-              if(item.levelId == self.newData.levelId){
-                obj.levelName = item.levelName
-              }
-            })
-            this.optionsUser.forEach((item)=>{
-              if(item.userId == self.newData.executionUserId){
-                obj.executionUser = item.userName
-              }
-            })
-            if(this.newData.id){
-              obj.id = this.newData.id;
-              laboratoryGradeManageUpdate(obj).then(response => {
-                this.msgSuccess(response.message)
-                this.backPage();
-              })
-            }else{
-              laboratoryGradeManageAdd(obj).then(response => {
-                this.msgSuccess(response.message)
-                this.backPage();
-              })
-            }
-          }
-        })
-      },
-      /** 查询二级单位列表 */
-      getDeptDropList() {
-        getDeptDropList({ deptName: '', level: 2, deptType: 1 }).then(response => {
-          this.$set(this, 'deptOptions', response.data)
-        })
-      },
-      //查询安全分级
-      laboratoryClassLevelGetList() {
-        laboratoryClassLevelGetList({}).then(response => {
-          this.$set(this, 'levelList', response.data)
-        })
-      },
-      //查询安全分类
-      laboratoryClassTypeGetList() {
-        laboratoryClassTypeGetList({}).then(response => {
-          this.$set(this, 'typeList', response.data)
-        })
-      },
-      //弹层开启
-      shadeOpen() {
-        this.$set(this, 'userName', '')
-        this.$set(this, 'userId', '')
-        this.$set(this.shadeForm, 'userId', '')
-        this.$set(this, 'optionsUser', [])
-        this.$set(this, 'shadeType', true)
-      },
-      //关闭弹层
-      shadeOut() {
-        this.$set(this, 'userName', '')
-        this.$set(this, 'userId', '')
-        this.$set(this.shadeForm, 'userId', '')
-        this.$set(this, 'optionsUser', [])
-        this.$set(this, 'shadeType', false)
-      },
-      //弹窗确定
-      shadeUp() {
-        let self = this
-        this.$refs['shadeForm'].validate(valid => {
-          if (valid) {
-            for (let i = 0; i < self.newData.userList.length; i++) {
-              if (self.newData.userList[i].userId == this.userId) {
-                this.msgError('人员已存在')
-                return
-              }
-            }
-            this.newData.userList.push({
-              userName: this.userName,
-              userId: this.userId
-            })
-            this.shadeOut()
-          }
-        })
-      },
-      //人员选择
-      userChange(val) {
-        let self = this
-        for (let i = 0; i < self.optionsUser.length; i++) {
-          if (self.optionsUser[i].userId == val) {
-            this.$set(this, 'userName', self.optionsUser[i].userName)
-            this.$set(this, 'userId', self.optionsUser[i].userId)
-          }
-        }
-      },
-      //查询
-      userSelectList(query) {
-        if (query !== '' && query.length > 1) {
-          systemUserSelect({
-            'searchValue': query,
-            'userType': ''
-          }).then(response => {
-            this.$set(this, 'optionsUser', response.data)
-          })
-        } else {
-          this.$set(this, 'optionsUser', [])
-        }
-      },
-      delUser(index) {
-        this.newData.userList.splice(index, 1)
-      }
-    }
-  }
-</script>
-
-<style scoped lang="scss">
-  .conditionsSettings-addPage {
-    .content-box {
-      flex: 1;
-      display: flex;
-      padding: 20px;
-      .add-form-box {
-        .el-form-item {
-          display: inline-block;
-        }
-      }
-    }
-  }
-</style>

+ 0 - 261
src/views/hierarchicalControl/conditionsSettings/index.vue

@@ -1,261 +0,0 @@
-<!-- 条件设置 -->
-<template>
-  <div class="app-container conditionsSettings">
-    <div class="page-container conditionsSettingsPage" v-if="pageType === 1">
-      <div class="page-form-title-box">
-        <el-form :model="queryParams" class="form-box" ref="queryForm"
-                 :inline="true" style="width:100%;">
-          <el-form-item label="" prop="name">
-            <el-input
-              maxLength="30"
-              v-model="queryParams.name"
-              placeholder="管控名称"
-              style="width: 200px"
-            />
-          </el-form-item>
-          <el-form-item label="" prop="deptId">
-            <el-select v-model="queryParams.deptId" placeholder="二级单位" style="width: 200px">
-              <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="typeId">
-            <el-select v-model="queryParams.typeId" placeholder="安全分类" style="width: 200px">
-              <el-option
-                v-for="dict in typeList"
-                :key="dict.typeId"
-                :label="dict.typeName"
-                :value="dict.typeId"
-              ></el-option>
-            </el-select>
-          </el-form-item>
-          <el-form-item label="" prop="levelId">
-            <el-select v-model="queryParams.levelId" placeholder="安全分级" style="width: 200px">
-              <el-option
-                v-for="dict in levelList"
-                :key="dict.levelId"
-                :label="dict.levelName"
-                :value="dict.levelId"
-              ></el-option>
-            </el-select>
-          </el-form-item>
-          <p class="page-inquire-common-style-button" @click="handleQuery">查询</p>
-          <p class="page-reset-common-style-button" @click="resetQuery">重置</p>
-          <p class="page-add-common-style-button"
-             style="float: right;"
-             @click="tableButton(1)"
-          >新增</p>
-        </el-form>
-      </div>
-      <div class="page-content-box">
-        <el-table class="table-box" v-loading="loading" border :data="dataList">
-          <el-table-column label="管控名称" prop="name"  show-overflow-tooltip/>
-          <el-table-column label="二级单位" prop="deptName" width="160" show-overflow-tooltip/>
-          <el-table-column label="安全分类" prop="typeName" width="160" show-overflow-tooltip/>
-          <el-table-column label="安全分级" prop="levelName" width="160" show-overflow-tooltip/>
-          <el-table-column label="执行状态" prop="status" width="100" show-overflow-tooltip>
-            <template slot-scope="scope">
-              <span :class="scope.row.status == 1?'colorA':'colorB'">{{scope.row.status == 1?'已执行':'未执行'}}</span>
-            </template>
-          </el-table-column>
-          <el-table-column label="创建人" prop="createUser" width="160" show-overflow-tooltip/>
-          <el-table-column label="实验室" prop="subName" width="160" show-overflow-tooltip>
-            <template slot-scope="scope">{{scope.row.subName?scope.row.subName:'--'}}</template>
-          </el-table-column>
-          <el-table-column label="创建时间" prop="createTime" width="150" show-overflow-tooltip>
-            <template slot-scope="scope">
-              <span>{{ parseTime(scope.row.createTime,"{y}-{m}-{d} {h}:{i}") }}</span>
-            </template>
-          </el-table-column>
-          <el-table-column label="截止时间" prop="deadline" width="150" show-overflow-tooltip>
-            <template slot-scope="scope">
-              <span>{{ scope.row.deadline?parseTime(scope.row.deadline,"{y}-{m}-{d}"):'--' }}</span>
-              <span style="margin-left:5px;color:red;" v-if="scope.row.deadlineNum&&deadlineNum>scope.row.deadlineNum">已逾期</span>
-            </template>
-          </el-table-column>
-          <el-table-column label="操作" width="140" show-overflow-tooltip>
-            <template slot-scope="scope">
-              <div class="table-button-box">
-                <p class="table-button-null"></p>
-                <p class="table-button-p"
-                   v-if="scope.row.status == 0"
-                   @click="tableButton(2,scope.row)"
-                >编辑</p>
-                <p class="table-button-p"
-                   v-if="scope.row.status == 0"
-                   @click="tableButton(3,scope.row)"
-                >删除</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.page"
-                    :limit.sync="queryParams.pageSize"
-                    @pagination="getList"
-        />
-      </div>
-    </div>
-    <add-page :propsData="propsData" v-if="pageType === 2"></add-page>
-  </div>
-</template>
-<script>
-  import {
-    getDeptDropList,
-    laboratoryClassTypeGetList,
-    laboratoryClassLevelGetList,
-  } from '@/api/commonality/permission'
-  import { laboratoryGradeManageList,laboratoryGradeManageDelete } from "@/api/hierarchicalControl/index";
-  import addPage from "./addPage.vue";
-  export default {
-    name: 'index',
-    components: {
-     addPage
-    },
-    data () {
-      return {
-        //页面状态
-        pageType:1,
-        //页面遮罩
-        loading:false,
-        //下拉列表数据
-        deptOptions:[],
-        typeList:[],
-        levelList:[],
-        //查询条件
-        queryParams:{
-          page:1,
-          pageSize:20,
-          name:"",
-          deptId :null,
-          typeId :null,
-          levelId :null,
-        },
-        //列表数据
-        dataList:[],
-        //数据数量
-        total:0,
-        //组件传参
-        propsData:{},
-        deadlineNum:null,
-      }
-    },
-    created () {
-
-    },
-    mounted () {
-      const now = new Date();
-      let yy = now.getFullYear()+'-'+now.getMonth()+'-'+now.getDate()
-      this.$set(this,'deadlineNum',new Date(yy).getTime());
-      this.getDeptDropList();
-      this.laboratoryClassTypeGetList();
-      this.laboratoryClassLevelGetList();
-      this.getList();
-    },
-    methods: {
-      //查询按钮
-      handleQuery(){
-        this.$set(this.queryParams,'page',1);
-        this.getList();
-      },
-      //重置按钮
-      resetQuery(){
-        this.$set(this,'dateRange',[])
-        this.$set(this,'queryParams',{
-          page:1,
-          pageSize:20,
-          name:"",
-          deptId :null,
-          typeId :null,
-          levelId :null,
-        });
-        this.getList();
-      },
-      //获取数据列表
-      getList(){
-        laboratoryGradeManageList(this.queryParams).then(response => {
-          //返回时间戳
-          for(let i=0;i<response.data.records.length;i++){
-            if(response.data.records[i].deadline){
-              response.data.records[i].deadlineNum = new Date(response.data.records[i].deadline).getTime()
-            }else{
-              response.data.records[i].deadlineNum = false
-            }
-          }
-          this.$set(this,'dataList',response.data.records);
-          this.$set(this,'total',response.data.total);
-        });
-      },
-      //操作按钮
-      tableButton(type,row){
-        let self = this;
-        if(type == 1){
-          //新增
-          this.$set(this,'pageType',2);
-          this.$set(this,'propsData',{});
-        }else if(type == 2){
-          //编辑
-          this.$set(this,'pageType',2);
-          let obj = JSON.parse(JSON.stringify(row))
-          obj.showType = false;
-          this.$set(this,'propsData',obj);
-        }else if(type == 3){
-          //删除
-          this.$confirm('是否确认删除?', "警告", {
-            confirmButtonText: "确定",
-            cancelButtonText: "取消",
-            type: "warning"
-          }).then(function() {
-          }).then(() => {
-            laboratoryGradeManageDelete({manageId:row.id}).then(response => {
-              self.msgSuccess(response.message)
-              self.getList();
-            });
-          }).catch(() => {});
-        }else if(type == 6){
-          //返回并刷新
-          this.$set(this,'pageType',1);
-          this.getList();
-        }
-      },
-      /** 查询二级单位列表 */
-      getDeptDropList() {
-        getDeptDropList({ deptName: '', level: 2, deptType: 1 }).then(response => {
-          this.$set(this, 'deptOptions', response.data)
-        })
-      },
-      //查询安全分级
-      laboratoryClassLevelGetList() {
-        laboratoryClassLevelGetList({}).then(response => {
-          this.$set(this, 'levelList', response.data)
-        })
-      },
-      //查询安全分类
-      laboratoryClassTypeGetList() {
-        laboratoryClassTypeGetList({}).then(response => {
-          this.$set(this, 'typeList', response.data)
-        })
-      },
-    },
-  }
-</script>
-<style scoped lang="scss">
-  .conditionsSettings{
-    .conditionsSettingsPage{
-
-      .colorA{
-        color:#0183FA;
-      }
-      .colorB{
-        color: #c88400;
-      }
-    }
-  }
-</style>

+ 0 - 276
src/views/hierarchicalControl/executeResult/index.vue

@@ -1,276 +0,0 @@
-<!-- 执行结果 -->
-<template>
-  <div class="app-container executeResult">
-    <div class="page-container executeResultPage" v-if="pageType === 1">
-      <div class="page-form-title-box">
-        <el-form :model="queryParams" class="form-box" ref="queryForm"
-                 :inline="true" style="width:100%;">
-          <el-form-item label="" prop="name">
-            <el-input
-              maxLength="30"
-              v-model="queryParams.name"
-              placeholder="管控名称"
-              style="width: 200px"
-            />
-          </el-form-item>
-          <el-form-item label="" prop="deptId">
-            <el-select v-model="queryParams.deptId" placeholder="二级单位" style="width: 200px">
-              <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="typeId">
-            <el-select v-model="queryParams.typeId" placeholder="安全分类" style="width: 200px">
-              <el-option
-                v-for="dict in typeList"
-                :key="dict.typeId"
-                :label="dict.typeName"
-                :value="dict.typeId"
-              ></el-option>
-            </el-select>
-          </el-form-item>
-          <el-form-item label="" prop="levelId">
-            <el-select v-model="queryParams.levelId" placeholder="安全分级" style="width: 200px">
-              <el-option
-                v-for="dict in levelList"
-                :key="dict.levelId"
-                :label="dict.levelName"
-                :value="dict.levelId"
-              ></el-option>
-            </el-select>
-          </el-form-item>
-          <p class="page-inquire-common-style-button" @click="handleQuery">查询</p>
-          <p class="page-reset-common-style-button" @click="resetQuery">重置</p>
-        </el-form>
-      </div>
-      <div class="page-content-box">
-        <el-table class="table-box" v-loading="loading" border :data="dataList">
-          <el-table-column label="管控名称" prop="name"  show-overflow-tooltip/>
-          <el-table-column label="二级单位" prop="deptName" width="160" show-overflow-tooltip/>
-          <el-table-column label="安全分类" prop="typeName" width="160" show-overflow-tooltip/>
-          <el-table-column label="安全分级" prop="levelName" width="160" show-overflow-tooltip/>
-          <el-table-column label="执行状态" prop="status" width="100" show-overflow-tooltip>
-            <template slot-scope="scope">
-              <span :class="scope.row.status == 1?'colorA':'colorB'">{{scope.row.status == 1?'已执行':'未执行'}}</span>
-            </template>
-          </el-table-column>
-          <el-table-column label="执行人" prop="executionUser" width="160" show-overflow-tooltip/>
-          <el-table-column label="实验室" prop="subName" width="160" show-overflow-tooltip>
-            <template slot-scope="scope">{{scope.row.subName?scope.row.subName:'--'}}</template>
-          </el-table-column>
-          <el-table-column label="执行时间" prop="executionTime" width="150" show-overflow-tooltip>
-            <template slot-scope="scope">
-              <span>{{ parseTime(scope.row.executionTime,"{y}-{m}-{d} {h}:{i}") }}</span>
-            </template>
-          </el-table-column>
-          <el-table-column label="截止时间" prop="deadline" width="150" show-overflow-tooltip>
-            <template slot-scope="scope">
-              <span>{{ scope.row.deadline?parseTime(scope.row.deadline,"{y}-{m}-{d}"):'--' }}</span>
-              <span style="margin-left:5px;color:red;" v-if="scope.row.deadlineNum&&deadlineNum>scope.row.deadlineNum">已逾期</span>
-            </template>
-          </el-table-column>
-          <el-table-column label="操作" width="140" show-overflow-tooltip >
-            <template slot-scope="scope">
-              <div class="table-button-box">
-                <p class="table-button-null"></p>
-                <p class="table-button-p"
-                   @click="tableButton(2,scope.row)"
-                >详情</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.page"
-                    :limit.sync="queryParams.pageSize"
-                    @pagination="getList"
-        />
-      </div>
-    </div>
-    <info-page :propsData="propsData" v-if="pageType === 2"></info-page>
-  </div>
-</template>
-<script>
-  import {
-    getDeptDropList,
-    laboratoryClassTypeGetList,
-    laboratoryClassLevelGetList,
-  } from '@/api/commonality/permission'
-  import { laboratoryGradeManageList } from "@/api/hierarchicalControl/index";
-  import infoPage from "./infoPage.vue";
-  export default {
-    name: 'index',
-    components: {
-      infoPage
-    },
-    data () {
-      return {
-        //页面状态
-        pageType:1,
-        //页面遮罩
-        loading:false,
-        //下拉列表数据
-        deptOptions:[],
-        typeList:[],
-        levelList:[],
-        //查询条件
-        queryParams:{
-          page:1,
-          pageSize:20,
-          name:"",
-          deptId :null,
-          typeId :null,
-          levelId :null,
-          status :1,
-        },
-        //时间数据
-        dateRange:[],
-        //列表数据
-        dataList:[],
-        //数据数量
-        total:0,
-        //组件传参
-        propsData:{},
-        deadlineNum:null,
-      }
-    },
-    created () {
-
-    },
-    mounted () {
-      const now = new Date();
-      let yy = now.getFullYear()+'-'+now.getMonth()+'-'+now.getDate()
-      this.$set(this,'deadlineNum',new Date(yy).getTime());
-      this.getDeptDropList();
-      this.laboratoryClassTypeGetList();
-      this.laboratoryClassLevelGetList();
-      this.getList();
-    },
-    methods: {
-      //查询按钮
-      handleQuery(){
-        this.$set(this.queryParams,'page',1);
-        this.getList();
-      },
-      //重置按钮
-      resetQuery(){
-        this.$set(this,'dateRange',[])
-        this.$set(this,'queryParams',{
-          page:1,
-          pageSize:20,
-          name:"",
-          deptId :null,
-          typeId :null,
-          levelId :null,
-          status :1,
-        });
-        this.getList();
-      },
-      //获取数据列表
-      getList(){
-        laboratoryGradeManageList(this.queryParams).then(response => {
-          //返回时间戳
-          for(let i=0;i<response.data.records.length;i++){
-            if(response.data.records[i].deadline){
-              response.data.records[i].deadlineNum = new Date(response.data.records[i].deadline).getTime()
-            }else{
-              response.data.records[i].deadlineNum = false
-            }
-          }
-          this.$set(this,'dataList',response.data.records);
-          this.$set(this,'total',response.data.total);
-        });
-      },
-      //操作按钮
-      tableButton(type,row){
-        let self = this;
-        if(type == 1){
-          //新增
-          this.$set(this,'pageType',2);
-          this.$set(this,'propsData',{});
-        }else if(type == 2){
-          //详情
-          this.$set(this,'pageType',2);
-          let obj = JSON.parse(JSON.stringify(row))
-          obj.showType = true;
-          this.$set(this,'propsData',obj);
-        }else if(type == 3){
-          //编辑
-          this.$set(this,'pageType',2);
-          let obj = JSON.parse(JSON.stringify(row))
-          obj.showType = false;
-          this.$set(this,'propsData',obj);
-        }else if(type == 4){
-          //删除
-          this.$confirm('是否确认删除?', "警告", {
-            confirmButtonText: "确定",
-            cancelButtonText: "取消",
-            type: "warning"
-          }).then(function() {
-          }).then(() => {
-            deleteFunction({id:row.id}).then(response => {
-              self.msgSuccess(response.message)
-              self.getList();
-            });
-          }).catch(() => {});
-        }else if(type == 5){
-          //启用&停用
-          let text = row.state  ? "停用" : "启用";
-          this.$confirm('是否确认' + text + '?', "警告", {
-            confirmButtonText: "确定",
-            cancelButtonText: "取消",
-            type: "warning"
-          }).then(function() {
-          }).then(() => {
-            stateFunction({id:row.id,state:!row.state,}).then(response => {
-              self.msgSuccess(response.message)
-              self.getList();
-            });
-          }).catch(() => {});
-        }else if(type == 6){
-          //返回并刷新
-          this.$set(this,'pageType',1);
-          this.getList();
-        }
-      },
-      /** 查询二级单位列表 */
-      getDeptDropList() {
-        getDeptDropList({ deptName: '', level: 2, deptType: 1 }).then(response => {
-          this.$set(this, 'deptOptions', response.data)
-        })
-      },
-      //查询安全分级
-      laboratoryClassLevelGetList() {
-        laboratoryClassLevelGetList({}).then(response => {
-          this.$set(this, 'levelList', response.data)
-        })
-      },
-      //查询安全分类
-      laboratoryClassTypeGetList() {
-        laboratoryClassTypeGetList({}).then(response => {
-          this.$set(this, 'typeList', response.data)
-        })
-      },
-    },
-  }
-</script>
-<style scoped lang="scss">
-  .executeResult{
-    .executeResultPage{
-
-      .colorA{
-        color:#0183FA;
-      }
-      .colorB{
-        color: #c88400;
-      }
-    }
-  }
-</style>

+ 0 - 108
src/views/hierarchicalControl/executeResult/infoPage.vue

@@ -1,108 +0,0 @@
-<template>
-  <div class="page-container executeResult-infoPage">
-    <div class="page-top-title-box">
-      <p class="page-top-title-name-p">执行结果</p>
-      <p class="page-top-title-out-p" @click="backPage">返回</p>
-    </div>
-    <div class="content-box scrollbar-box">
-      <el-form class="add-form-box">
-        <div class="text-max-box">
-          <p>管控名称:</p>
-          <p>{{newData.name}}</p>
-        </div>
-        <div class="text-max-box">
-          <p>管控描述:</p>
-          <p>{{newData.manageDes}}</p>
-        </div>
-        <div class="text-max-box">
-          <p>二级单位:</p>
-          <p>{{newData.deptName}}</p>
-        </div>
-        <div class="text-max-box">
-          <p>安全分类:</p>
-          <p>{{newData.typeName}}</p>
-        </div>
-        <div class="text-max-box">
-          <p>安全分级:</p>
-          <p>{{newData.levelName}}</p>
-        </div>
-        <div class="text-max-box">
-          <p>状态:</p>
-          <p :class="newData.status == 1?'colorA':'colorB'">{{newData.status == 1?'已执行':'未执行'}}</p>
-        </div>
-        <div class="text-max-box" v-if="newData.status == 1">
-          <p>执行人:</p>
-          <p>{{newData.executionUser}}</p>
-        </div>
-        <div class="text-max-box" v-if="newData.status == 1">
-          <p>执行时间:</p>
-          <p>{{parseTime(newData.executionTime,"{y}-{m}-{d} {h}:{i}")}}</p>
-        </div>
-        <div class="text-max-box" v-if="newData.status == 1">
-          <p>执行备注:</p>
-          <p>{{newData.remark}}</p>
-        </div>
-      </el-form>
-    </div>
-  </div>
-</template>
-
-<script>
-  export default {
-    name: 'infoPage',
-    props:{
-      propsData:{},
-    },
-    data(){
-      return{
-        newData:{},
-      }
-    },
-    created(){
-
-    },
-    mounted(){
-      if(this.propsData.id){
-        this.$set(this,'newData',this.propsData);
-      }
-    },
-    methods:{
-      // 返回按钮
-      backPage(){
-        this.$parent.tableButton(6);
-      },
-    },
-  }
-</script>
-
-<style scoped lang="scss">
-  .executeResult-infoPage{
-    .content-box{
-      flex:1;
-      display: flex;
-      padding:20px;
-      .text-max-box{
-        display: flex;
-        p{
-          font-size: 16px;
-          line-height:40px;
-        }
-        p:nth-child(1){
-          width:120px;
-          text-align: right;
-        }
-        p:nth-child(2){
-          width:1200px;
-          line-height:20px;
-          padding:10px 0;
-        }
-        .colorA{
-          color:#0183FA;
-        }
-        .colorB{
-          color: #c88400;
-        }
-      }
-    }
-  }
-</style>

+ 901 - 0
src/views/hierarchicalControl/gradeManage/addPage.vue

@@ -0,0 +1,901 @@
+<!--新增/编辑管控-->
+<template>
+    <div class="gradeManage-addPage">
+      <el-form v-if="pageType == 1" class="gradeManage-addPage-min scrollbar-box" :model="form" ref="form" :rules="rules">
+        <div class="top-max-box">
+          <div class="top-title-box">
+            <p class="color_one">基本信息</p>
+            <p class="reset-button-one" @click="backPage">返回</p>
+          </div>
+          <div class="info-max-box">
+            <el-form-item label="管控名称" prop="name" label-width="80px" style="margin-bottom:20px;">
+              <el-input
+                style="width:180px;"
+                maxlength="15"
+                v-model="form.name"
+                placeholder="请输入管控名称"
+                clearable
+                size="small"
+              />
+            </el-form-item>
+            <el-form-item label="学院" prop="deptId" label-width="80px" style="margin-bottom:20px;">
+              <el-select v-model="form.deptId" placeholder="请选择学院" clearable style="width:180px;" @change="deptChange">
+                <el-option
+                  v-for="dict in deptList"
+                  :key="dict.deptId"
+                  :label="dict.deptName"
+                  :value="dict.deptId"
+                ></el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="实验室类型" prop="moldId" label-width="100px" style="margin-bottom:20px;">
+              <el-select v-model="form.moldId" placeholder="请选择实验室类型" clearable style="width:180px;">
+                <el-option
+                  v-for="dict in labMoldList"
+                  :key="dict.id"
+                  :label="dict.moldName"
+                  :value="dict.id"
+                ></el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="安全分类" prop="typeId" label-width="80px" style="margin-bottom:20px;">
+              <el-select v-model="form.typeId" placeholder="请选择安全分类" clearable style="width:180px;">
+                <el-option
+                  v-for="dict in typeList"
+                  :key="dict.id"
+                  :label="dict.typeName"
+                  :value="dict.id"
+                ></el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="安全分级" prop="level" label-width="80px" style="margin-bottom:20px;">
+              <el-select v-model="form.level" placeholder="请选择安全分级" clearable style="width:180px;">
+                <el-option
+                  v-for="dict in levelList"
+                  :key="dict.id"
+                  :label="dict.classifiedName"
+                  :value="dict.id"
+                ></el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="状态" prop="status" label-width="80px" style="margin-bottom:20px;">
+              <el-switch
+                class="switch captcha-img"
+                :active-value="1"
+                :inactive-value="0"
+                active-color="#0183FA"
+                inactive-color="#999"
+                v-model="form.status"
+                active-text="开"
+                inactive-text="关"
+              >
+              </el-switch>
+            </el-form-item>
+          </div>
+        </div>
+        <div class="bottom-max-box" v-for="(item,index) in form.ruleList" :key="index">
+          <div class="top-title-box" v-if="index == 0">
+            <p class="color_one">管控规则</p>
+          </div>
+          <div class="list-info-max-box">
+            <div class="list-info-top-box">
+              <el-form-item label="规则名称" :prop="'ruleList.'+ index +'.name'" :rules="rules.ruleName" label-width="100px" class="list-info-top-item">
+                <el-input
+                  maxlength="15"
+                  style="width:240px;"
+                  v-model="item.name"
+                  placeholder="请输入名称"
+                  clearable
+                  size="small"
+                />
+              </el-form-item>
+              <el-form-item label="规则描述" :prop="'ruleList.'+ index +'.remark'" :rules="rules.remark" label-width="100px" class="list-info-top-item">
+                <el-input
+                  maxlength="30"
+                  style="width:240px;"
+                  v-model="item.remark"
+                  placeholder="请输入规则描述"
+                  clearable
+                  size="small"
+                />
+              </el-form-item>
+              <p class="list-info-top-del el-icon-delete" v-if="index != 0" @click="delFormBigList(index)"></p>
+            </div>
+            <div class="list-info-bottom-box"
+                 style="position: relative;border-bottom:1px dashed #dedede;"
+                 v-for="(minItem,minIndex) in item.ruleUserList" :key="minIndex">
+              <div style="margin-bottom:20px;">
+                <el-form-item label="确认周期" :prop="'ruleList.'+ index +'.ruleUserList.'+ minIndex +'.cycle'" :rules="rules.cycle" class="info-for-min-box" label-width="100px">
+                  <el-select v-model="minItem.cycle" placeholder="请选择确认周期" clearable @change="(e)=>cycleChange(item,minIndex,e,)" style="width:240px;">
+                    <el-option
+                      v-for="dict in minItem.cycleList"
+                      :key="dict"
+                      :label="dict"
+                      :value="dict"
+                    ></el-option>
+                  </el-select>
+                </el-form-item>
+                <el-form-item label="确认人员" :prop="'ruleList.'+ index +'.ruleUserList.'+ minIndex +'.type'" :rules="rules.type" class="info-for-min-box" label-width="100px">
+                  <el-select v-model="minItem.type" placeholder="请选择确认人员" clearable @change="(e)=>userTypeClick(e,minItem)" style="width:240px;">
+                    <el-option label="实验室负责人" :value="1" />
+                    <el-option label="实验室准入人员" :value="4" />
+                    <el-option label="当天进入实验室人员" :value="2" />
+                    <el-option label="选择人员" :value="3" />
+                  </el-select>
+                </el-form-item>
+                <el-form-item label="选择人员" v-if="minItem.type == 3" :prop="'ruleList.'+ index +'.ruleUserList.'+ minIndex +'.userIds'" :rules="rules.userIds" label-width="100px" class="info-for-min-box">
+                  <p class="subjectButton" @click="userClick(index,minIndex)">{{minItem.userIds[0]?'已选择'+minItem.userList.length+'人':'选择人员'}}</p>
+                </el-form-item>
+              </div>
+              <div style="position: relative;margin-bottom:30px;">
+                <el-form-item label="执行方式" :prop="'ruleList.'+ index +'.ruleUserList.'+ minIndex +'.isAll'" :rules="rules.isAll" class="info-for-min-box" label-width="80px">
+                  <el-radio-group v-model="minItem.isAll" style="width:240px;">
+                    <el-radio :label="1" style="width:90px;margin:3px 0 0 10px;">多人执行</el-radio>
+                    <el-radio :label="0" style="width:90px;margin:3px 0 0 10px;">单人执行</el-radio>
+                  </el-radio-group>
+                </el-form-item>
+                <el-form-item label="需要上传材料" :prop="'ruleList.'+ index +'.ruleUserList.'+ minIndex +'.isUpload'" :rules="rules.isUpload" class="info-for-min-box" label-width="148px">
+                  <el-radio-group v-model="minItem.isUpload" style="width:240px;">
+                    <el-radio :label="1" style="width:60px;margin:3px 0 0 10px;">是</el-radio>
+                    <el-radio :label="0" style="width:60px;margin:3px 0 0 10px;">否</el-radio>
+                  </el-radio-group>
+                </el-form-item>
+                <el-tooltip placement="top" v-if="minItem.isUpload == 1" style="margin-left:10px;">
+                  <div slot="content">文档格式包含: pdf / doc / docx / ppt / pptx
+                    <br/>视频格式包含: mp4
+                    <br/>图片格式包含: png / jpeg / gif
+                  </div>
+                  <p class="el-icon-question" style="color:#999;font-size:20px;position: absolute;left:680px;top:11px;"></p>
+                </el-tooltip>
+                <el-form-item label="文件格式" v-if="minItem.isUpload == 1"
+                              :prop="'ruleList.'+ index +'.ruleUserList.'+ minIndex +'.fileFormat'" :rules="rules.fileFormat" class="info-for-min-box" label-width="90px">
+                  <el-checkbox-group v-model="minItem.fileFormat" style="width:240px;">
+                    <el-checkbox label="1" style="width:60px;margin:0 0 0 10px;">文档</el-checkbox>
+                    <el-checkbox label="2" style="width:60px;margin:0 0 0 10px;">视频</el-checkbox>
+                    <el-checkbox label="3" style="width:60px;margin:0 0 0 10px;">图片</el-checkbox>
+                  </el-checkbox-group>
+                </el-form-item>
+              </div>
+              <p class="info-for-min-del el-icon-delete" style="position:absolute;top:50%;right:40px;margin-top:-10px;font-size:24px;" v-if="item.ruleUserList[1]" @click="delFormMinList(item,minIndex)"></p>
+            </div>
+            <p class="add-user-button reset-button-one" @click="addFormMinList(item)">+ 新增确认人员</p>
+          </div>
+        </div>
+        <p class="addBigButton" @click="addFormBigList">+ 新增管控规则</p>
+        <div class="add-button-bottom-box">
+          <p class="reset-button-one" @click="backPage">取消</p>
+          <p class="inquire-button-one" @click="submitForm">保存</p>
+        </div>
+      </el-form>
+      <div v-if="pageType == 2" class="user-list-page">
+        <div class="title-top-box">
+          <p>选择人员</p>
+          <p class="el-icon-close" @click="outUserClick"></p>
+        </div>
+        <div class="button-top-box">
+          <p></p>
+          <p class="add-button-two-90" @click="addUser">+ 新增管控人员</p>
+          <p class="inquire-button-one" @click="okUserClick">确定</p>
+        </div>
+        <div class="table-user-list-box">
+          <el-table border :data="tableUserListMin">
+            <el-table-column label="身份" align="left" prop="positionName"/>
+            <el-table-column label="名称" align="left" prop="nickName"/>
+            <el-table-column label="联系方式" align="left" prop="phonenumber"/>
+            <el-table-column label="学院" align="left" prop="deptName"/>
+            <el-table-column label="专业" align="left" prop="major">
+              <template slot-scope="scope">
+                {{scope.row.major ? scope.row.major : '--'}}
+              </template>
+            </el-table-column>
+            <el-table-column label="班级" align="left" prop="grade">
+              <template slot-scope="scope">
+                {{scope.row.gradeName ? scope.row.gradeName : '--'}}
+              </template>
+            </el-table-column>
+            <el-table-column label="操作" align="left" class-name="small-padding fixed-width" width="130">
+              <template slot-scope="scope">
+                <div class="table-button-box">
+                  <p class="table-button-null"></p>
+                  <p class="table-button-p" @click="delItem(scope.row)">删除</p>
+                  <p class="table-button-null"></p>
+                </div>
+              </template>
+            </el-table-column>
+          </el-table>
+          <pagination :page-sizes="[20, 30, 40, 50]"
+            style="margin-top:10px;"
+            :total="total"
+            layout="total, prev, pager, next, jumper"
+            :page.sync="queryParams.pageNum"
+            :limit.sync="queryParams.pageSize"
+            @pagination="pageLit"
+          />
+        </div>
+      </div>
+      <subject-list ref="subjectOpen"></subject-list>
+      <user-list ref="userOpen"></user-list>
+    </div>
+</template>
+
+<script>
+  import {
+    addGradeManage,getGradeManage,
+    updateGradeManage,listInfo,
+    filterDept,listClassifiedAll,
+    listClasstypeAll,queryOption,
+    listUser
+  } from "@/api/hierarchicalControl/indexDemo";
+  import userList from "./userList.vue"
+  import subjectList from "./subjectList.vue"
+  export default {
+    name: "addPage",
+    components: {
+      subjectList,
+      userList
+    },
+    props:{
+      propsType:{},
+      propsId:{},
+    },
+    data() {
+      return {
+        pageType:1,
+        // 页面状态
+        subjectOpen:false,
+        //时间选择器数据
+        createTimeDate: [],
+        form:{
+          name:"",//名称
+          deptId:'',
+          deptName:"",//学院
+          subs:[],//选中实验室列表
+          subsData:[],
+          ruleList:[//添加选项
+            {
+              name:"",//名称
+              remark:"",//规则描述
+              ruleUserList:[
+                {
+                  type:"",//人员类型 1 实验室负责人,2 当天进入实验室人员,3 选择人员
+                  isAll:"",
+                  isUpload:"",//需要上传材料(0 否,1 是)
+                  fileFormat:[],
+                  cycle:"",//确认周期一天,一周,一月,一年
+                  cycleList:['一天','一周','一月','季度','半年','一年'],
+                  userIds:"",//选择人员id(多个逗号分隔,type=3时有效)
+                  userList:[]
+                }
+              ]
+            }
+          ]
+        },
+        // 表单校验
+        rules: {
+          name: [
+            { required: true, message: "请输入管控名称", trigger: "blur" },
+            { required: true, message: "请输入管控名称", validator: this.spaceJudgment, trigger: "blur" }
+          ],
+          ruleName:[
+            { required: true, message: "请输入规则名称", trigger: "blur" },
+            { required: true, message: "请输入规则名称", validator: this.spaceJudgment, trigger: "blur" }
+          ],
+          deptId: [
+            { required: true, message: "请选择学院", trigger: "blur" }
+          ],
+          subs: [
+            { required: true, message: "请选择实验室", trigger: "blur" }
+          ],
+          remark: [
+            { required: true, message: "请输入规则描述", trigger: "blur" },
+            { required: true, message: "请输入规则描述", validator: this.spaceJudgment, trigger: "blur" }
+          ],
+          type: [
+            { required: true, message: "请选择确认人员", trigger: "blur" }
+          ],
+          isAll: [
+            { required: true, message: "请选择执行方式", trigger: "blur" }
+          ],
+          isUpload: [
+            { required: true, message: "请选择是否需要上传材料", trigger: "blur" }
+          ],
+          cycle: [
+            { required: true, message: "请选择确认周期", trigger: "blur" }
+          ],
+          userIds: [
+            { required: true, message: "请选择人员", trigger: "blur" }
+          ],
+          fileFormat: [
+            { required: true, message: "请选择文件格式", trigger: "blur" }
+          ],
+        },
+        //时间限制
+        cycleList:['一天','一周','一月','季度','半年','一年'],
+        //用户选择index
+        userBigIndex:"",
+        userMinIndex:"",
+        //学院数据
+        deptList:[],
+        //实验室类型
+        labMoldList:[],
+        //分类数据
+        typeList:[],
+        //分级数据
+        levelList:[],
+        //table人员列表数据
+        tableUserIds:[],
+        tableUserList:[],
+        tableUserListMin:[],
+        total:0,
+        queryParams:{
+          pageNum:1,
+          pageSize:20,
+        }
+      }
+    },
+    created() {
+
+    },
+    mounted(){
+      this.filterDept();
+      this.getListClassifiedAll();
+      this.getListClasstypeAll();
+      this.queryOption();
+      if(this.propsType){
+        this.getGradeManage();
+      }
+    },
+    methods: {
+      delItem(item){
+        let self = this;
+        for(let i=0;i<self.tableUserList.length;i++){
+          if(self.tableUserList[i].userId == item.userId){
+            self.tableUserList.splice(i,1);
+            self.pageLit();
+            break
+          }
+        }
+      },
+      //翻页处理
+      pageLit(){
+        let self = this;
+        let num = (this.queryParams.pageNum - 1) * this.queryParams.pageSize;
+        let maxNum = num+10;
+        let list = [];
+        for(let i = num ;i<self.tableUserList.length;i++){
+          if(i<maxNum){
+            list.push(self.tableUserList[i]);
+          }
+        }
+        this.$set(this,'tableUserListMin',list);
+        this.$set(this,'total',this.tableUserList.length);
+      },
+      //获取学院
+      filterDept(){
+        filterDept().then(response => {
+          this.deptList = response.data;
+        });
+      },
+      //选中学院
+      deptChange(e){
+        let self = this;
+        for(let i=0;i<self.deptList.length;i++){
+          if(e == self.deptList[i].deptId){
+            this.form.deptName = self.deptList[i].deptName;
+            this.form.deptId = self.deptList[i].deptId;
+          }
+        }
+      },
+      //选中周期
+      cycleChange(item,minIndex,e){
+        this.$forceUpdate()
+        let num = 0;
+        for(let i=0;i<item.ruleUserList.length;i++){
+          if(item.ruleUserList[i].cycle == e){
+            num++
+          }
+        }
+        if(num>1){
+          item.ruleUserList[minIndex].cycle = '';
+          this.msgError('同一个规则下确认周期不能相同')
+        }
+      },
+      queryOption(){
+        queryOption({}).then(response=>{
+          if(response.code==200){
+            this.labMoldList=response.data
+          }
+        })
+      },
+      //查询安全分级
+      getListClassifiedAll(){
+        listClassifiedAll().then(response=>{
+          if(response.code==200){
+            this.levelList=response.data
+          }
+        })
+      },
+      //查询安全分类
+      getListClasstypeAll(){
+        listClasstypeAll().then(response=>{
+          if(response.code==200){
+            this.typeList=response.data;
+          }
+        });
+      },
+      //获取数据详情
+      getGradeManage(){
+        let self = this;
+        getGradeManage(this.propsId).then(response=>{
+          let userIds = "";
+          for(let i=0;i<response.data.ruleList.length;i++){
+            for(let o=0;o<response.data.ruleList[i].ruleUserList.length;o++){
+              userIds = userIds + response.data.ruleList[i].ruleUserList[o].userIds + ',';
+              this.$set(response.data.ruleList[i].ruleUserList[o],'userList',[]);
+              if (response.data.ruleList[i].ruleUserList[o].isUpload == 1 && response.data.ruleList[i].ruleUserList[o].fileFormat){
+                this.$set(response.data.ruleList[i].ruleUserList[o],'fileFormat',response.data.ruleList[i].ruleUserList[o].fileFormat.split(','));
+              }else{
+                this.$set(response.data.ruleList[i].ruleUserList[o],'fileFormat',[]);
+              }
+              if(response.data.ruleList[i].ruleUserList[o].type == 2){
+                response.data.ruleList[i].ruleUserList[o].cycleList = ['一天'];
+              }else{
+                response.data.ruleList[i].ruleUserList[o].cycleList = ['一天','一周','一月','季度','半年','一年'];
+              }
+            }
+          }
+          this.$set(this,'form',response.data);
+          //获取选中实验室列表
+          let subjectData = {
+            pageNum:1,
+            pageSize:20,
+            subIds:response.data.subIds
+          };
+          listInfo(subjectData).then(response => {
+            this.$set(this.form,'subsData',response.rows)
+          });
+          //获取选中人员列表
+          let userData = {
+            pageNum:1,
+            pageSize: 1000,
+            paramIds:userIds
+          }
+          listUser(userData).then(response => {
+            for(let a=0;a<response.rows.length;a++){
+              for(let i=0;i<self.form.ruleList.length;i++){
+                for(let o=0;o<self.form.ruleList[i].ruleUserList.length;o++){
+                  let text = response.rows[a].userId + '';
+                  if (self.form.ruleList[i].ruleUserList[o].userIds.indexOf(text) != -1){
+                    self.form.ruleList[i].ruleUserList[o].userList.push(response.rows[a]);
+                  }
+                }
+              }
+            }
+          });
+        });
+      },
+      //接收实验室列表数据
+      takeSubjectData(ids,data){
+        this.$set(this.form,'subs',ids);
+        this.$set(this.form,'subsData',data);
+        this.$refs.subjectOpen.show();
+      },
+      //接收人员列表数据
+      takeUserData(ids,data){
+        let self = this;
+        for(let i=0;i<data.length;i++){
+          self.tableUserList.push(data[i]);
+        }
+        // this.$set(this.form.ruleList[this.userBigIndex].ruleUserList[this.userMinIndex],'userIds',ids);
+        // this.$set(this.form.ruleList[this.userBigIndex].ruleUserList[this.userMinIndex],'userList',data);
+        this.$refs.userOpen.show();
+        this.pageLit();
+      },
+      //选择实验室
+      subjectTypeClick(){
+        if(this.form.subs[0]){
+          this.$refs.subjectOpen.show(this.form.subsData);
+        }else{
+          this.$refs.subjectOpen.show();
+        }
+      },
+      outUserClick(){
+        this.pageType = 1;
+      },
+      addUser(){
+        let self = this;
+        let list = [];
+        for (let i=0;i<self.tableUserList.length;i++) {
+          list.push(self.tableUserList[i].userId);
+        }
+        if(this.tableUserList[0]){
+          // this.$refs.userOpen.show(this.tableUserList);
+          this.$refs.userOpen.show(list);
+        }else{
+          this.$refs.userOpen.show();
+        }
+      },
+      //选择人员
+      userClick(index,minIndex){
+        this.pageType = 2;
+        this.$set(this,'userBigIndex',index);
+        this.$set(this,'userMinIndex',minIndex);
+        this.$set(this,'tableUserList',JSON.parse(JSON.stringify(this.form.ruleList[this.userBigIndex].ruleUserList[this.userMinIndex].userList)))
+        this.pageLit();
+        // this.$set(this,'userBigIndex',index);
+        // this.$set(this,'userMinIndex',minIndex);
+        // if(this.form.ruleList[this.userBigIndex].ruleUserList[this.userMinIndex].userIds[0]){
+        //   this.$refs.userOpen.show(this.form.ruleList[this.userBigIndex].ruleUserList[this.userMinIndex].userList);
+        // }else{
+        //   this.$refs.userOpen.show();
+        // }
+      },
+      //确定选择人员
+      okUserClick(){
+        let self = this;
+        let ids = [];
+        for(let i=0;i<self.tableUserList.length;i++){
+          ids.push(self.tableUserList[i].userId);
+        }
+        this.$set(this.form.ruleList[this.userBigIndex].ruleUserList[this.userMinIndex],'userIds',JSON.parse(JSON.stringify(ids)));
+        this.$set(this.form.ruleList[this.userBigIndex].ruleUserList[this.userMinIndex],'userList',JSON.parse(JSON.stringify(this.tableUserList)));
+        this.pageType = 1;
+      },
+      //页面切换按钮
+      pageTypeClick(type){
+        if(this.pageType != type){
+          if(type == 1){
+            this.pageType = 1;
+          }else if(type == 2){
+            this.pageType = 2;
+          }
+        }
+      },
+      //提交按钮
+      submitForm(type) {
+        let self = this;
+        this.$refs["form"].validate(valid => {
+          if (valid) {
+            //检测是否有多选人员
+            for(let i=0;i<self.form.ruleList.length;i++){
+              let type1 = 0;
+              let type2 = 0;
+              for(let o=0;o<self.form.ruleList[i].ruleUserList.length;o++){
+                if(self.form.ruleList[i].ruleUserList[o].type == 1){
+                  type1++
+                }else if(self.form.ruleList[i].ruleUserList[o].type == 2){
+                  type2++
+                }
+              }
+              if(type1>1){
+                this.msgError('名称为:'+self.form.ruleList[i].name+'的管控规则下,无法添加多条实验室负责人');
+                return
+              }
+              if(type2>1){
+                this.msgError('名称为:'+self.form.ruleList[i].name+'的管控规则下,无法添加多条当天进入实验室人员');
+                return
+              }
+            }
+            let form = JSON.parse(JSON.stringify(self.form));
+            for(let i=0;i<form.ruleList.length;i++){
+              for(let o=0;o<form.ruleList[i].ruleUserList.length;o++){
+                form.ruleList[i].ruleUserList[o].userIds = form.ruleList[i].ruleUserList[o].userIds + '';
+                if(form.ruleList[i].ruleUserList[o].isUpload == 1){
+                  form.ruleList[i].ruleUserList[o].fileFormat = form.ruleList[i].ruleUserList[o].fileFormat + '';
+                }else {
+                  form.ruleList[i].ruleUserList[o].fileFormat = '';
+                }
+              }
+            }
+            if(form.id){
+              this.updateGradeManage(form);
+            }else{
+              this.addGradeManage(form);
+            }
+          }
+        });
+      },
+      //编辑接口
+      updateGradeManage(obj){
+        updateGradeManage(obj).then(response=>{
+          this.msgSuccess("操作成功");
+          this.$parent.clickPageType(1);
+        });
+      },
+      //新增接口
+      addGradeManage(obj){
+        addGradeManage(obj).then(response=>{
+          this.msgSuccess("操作成功");
+          this.$parent.clickPageType(1);
+        });
+      },
+      //返回
+      backPage(){
+        this.$parent.clickPageType(1);
+      },
+      //新增管控规则
+      addFormBigList(){
+        let obj = {
+          name:"",
+          remark:"",
+          ruleUserList:[
+            {
+              type:"",//人员类型 1 实验室负责人,2 当天进入实验室人员,3 选择人员
+              isAll:"",
+              isUpload:"",//需要上传材料(0 否,1 是)
+              fileFormat:[],
+              cycle:"",//确认周期一天,一周,一月,一年
+              cycleList:['一天','一周','一月','季度','半年','一年'],
+              userIds:"",//选择人员id(多个逗号分隔,type=3时有效)
+              userList:[]
+            }
+          ]
+        }
+        this.form.ruleList.push(obj);
+        this.$forceUpdate();
+      },
+      //删除管控规则
+      delFormBigList(index){
+        this.form.ruleList.splice(index,1);
+        this.$forceUpdate();
+      },
+      //添加人员选项
+      addFormMinList(item){
+        let obj = {
+          type:"",//人员类型 1 实验室负责人,2 当天进入实验室人员,3 选择人员
+          isAll:"",
+          isUpload:"",//需要上传材料(0 否,1 是)
+          fileFormat:[],
+          cycle:"",//确认周期一天,一周,一月,一年
+          cycleList:['一天','一周','一月','季度','半年','一年'],
+          userIds:"",//选择人员id(多个逗号分隔,type=3时有效)
+          userList:[]
+        }
+        item.ruleUserList.push(obj);
+        this.$forceUpdate();
+      },
+      //删除人员选项
+      delFormMinList(item,minIndex){
+        item.ruleUserList.splice(minIndex,1);
+        this.$forceUpdate();
+      },
+      //选择人员类型
+      userTypeClick(e,minItem){
+        if(e == 2){
+          let list = ['一天'];
+          this.$set(minItem,'cycleList',list);
+          this.$set(minItem,'cycle','一天');
+        }else{
+          let list = ['一天','一周','一月','季度','半年','一年'];
+          this.$set(minItem,'cycleList',list);
+        }
+        // this.$set(this.form.ruleList[index].ruleUserList[minIndex],'cycle','一天');
+      },
+    }
+  }
+</script>
+
+<style lang="scss" scoped>
+  .gradeManage-addPage{
+    flex:1;
+    display: flex!important;
+    flex-direction: column;
+    overflow: hidden;
+    /*padding:0 20px!important;*/
+    *{
+      margin:0
+    }
+    .gradeManage-addPage-min{
+      .top-max-box{
+        padding:0 20px;
+        margin:5px 20px 20px 10px;
+        box-shadow: 0 0 8px 2px rgba(0, 0, 0, 0.1);
+        border-radius:10px;
+        .top-title-box{
+          display: flex;
+          border-bottom:1px solid #dedede;
+          p:nth-child(1){
+            flex:1;
+            line-height:80px;
+            font-size:18px;
+          }
+          p:nth-child(2){
+            width:100px;
+            margin:20px 0;
+          }
+          p:nth-child(3){
+            width:100px;
+            margin:20px 0 0 20px;
+          }
+        }
+        .info-max-box{
+          padding:30px 0;
+          margin:0 20px;
+          display: flex;
+          flex-wrap: wrap;
+          .subjectButton{
+            cursor:pointer;
+            display: inline-block;
+            text-align: center;
+            width: 220px;
+            height: 38px;
+            line-height:38px;
+            border-radius: 4px;
+            border: 1px solid #DCDFE6;
+            color:#999;
+            font-size: 14px;
+            font-weight:500;
+            background:#ffffff;
+            margin:0;
+          }
+          .subjectButton:hover{
+            color:#0183FA;
+            background:rgba(1,131,250,0.1);
+            border: 1px solid #0183FA;
+          }
+        }
+      }
+      .bottom-max-box{
+        margin:0 20px 20px 10px;
+        padding:0 20px 20px;
+        box-shadow: 0 0 8px 2px rgba(0, 0, 0, 0.1);
+        border-radius:10px;
+        .top-title-box{
+          display: flex;
+          border-bottom:1px solid #dedede;
+          p:nth-child(1){
+            flex:1;
+            line-height:80px;
+            font-size:18px;
+          }
+          p:nth-child(2){
+            width:100px;
+            margin:20px 0;
+          }
+          p:nth-child(3){
+            width:100px;
+            margin:20px 0 0 20px;
+          }
+        }
+        .list-info-max-box{
+          border-radius:10px;
+          .list-info-top-box{
+            padding: 30px 0;
+            border-bottom:1px solid #dedede;
+            .list-info-top-item{
+              display: inline-block;
+              margin-bottom: 20px;
+            }
+            .list-info-top-del{
+              display: inline-block;
+              margin-left:40px;
+              cursor: pointer;
+              color:#999;
+            }
+          }
+          .list-info-bottom-box{
+            padding:30px 0 0;
+            .info-for-min-box{
+              display: inline-block;
+            }
+            .info-for-min-del{
+              display: inline-block;
+              margin-left:20px;
+              cursor: pointer;
+              color:#999;
+            }
+            .subjectButton{
+              cursor:pointer;
+              display: inline-block;
+              text-align: center;
+              width: 220px;
+              height: 38px;
+              line-height:38px;
+              border-radius: 4px;
+              border: 1px solid #DCDFE6;
+              color:#999;
+              font-size: 14px;
+              font-weight:500;
+              background:#ffffff;
+              margin:0;
+            }
+            .subjectButton:hover{
+              color:#0183FA;
+              background:rgba(1,131,250,0.1);
+              border: 1px solid #0183FA;
+            }
+          }
+          .add-user-button{
+            margin:30px auto 0;
+            width:200px;
+            display: block;
+            border:none;
+            color:#0183FA;
+          }
+        }
+      }
+      .addBigButton{
+        width: 400px;
+        height: 40px;
+        margin:30px auto 0;
+        line-height:40px;
+        border-radius: 6px;
+        border:1px dashed #dedede;
+        color:#333;
+        font-size:14px;
+        background:#fff;
+        cursor: pointer;
+        text-align: center;
+      }
+      .add-button-bottom-box{
+        width:260px;
+        margin:30px auto;
+        display: flex;
+        p:nth-child(1){
+          display: block;
+          width:120px;
+          margin-right:20px;
+        }
+        p:nth-child(2){
+          display: block;
+          width:120px;
+        }
+      }
+    }
+    .user-list-page{
+      flex:1;
+      display: flex;
+      flex-direction: column;
+      overflow: hidden;
+      /*padding:0 20px;*/
+      margin:5px 20px 20px 10px;
+      box-shadow: 0 0 8px 2px rgba(0, 0, 0, 0.1);
+      border-radius:10px;
+      .title-top-box{
+        display: flex;
+        border-bottom:1px solid #dedede;
+        p:nth-child(1){
+          flex:1;
+          line-height:80px;
+          font-size:18px;
+          color:#0045af;
+          margin-left:30px;
+        }
+        p:nth-child(2){
+          font-size:24px;
+          width:40px;
+          line-height:40px;
+          color:#999;
+          text-align: center;
+          cursor: pointer;
+          margin:20px 30px;
+          border-radius:50%;
+        }
+        p:nth-child(2):hover{
+          background: #999;
+          color:#fff;
+        }
+      }
+      .button-top-box{
+        display: flex;
+        p:nth-child(1){
+          flex:1;
+        }
+        p:nth-child(2){
+          width:140px;
+          margin:20px 0;
+        }
+        p:nth-child(3){
+          margin:20px;
+        }
+      }
+      .table-user-list-box{
+        margin:0 20px 20px;
+        overflow: hidden;
+        flex:1;
+        display:flex;
+        flex-direction: column
+      }
+    }
+  }
+</style>

+ 441 - 0
src/views/hierarchicalControl/gradeManage/index.vue

@@ -0,0 +1,441 @@
+<!--分级管控管理-->
+<template>
+  <div class="gradeManage">
+    <div class="gradeManage-page" v-if="pageType == 1">
+      <advanced-search :searchData="searchData"></advanced-search>
+      <el-table v-loading="loading" border :data="gradeManageList" @selection-change="handleSelectionChange">
+        <!--<el-table-column type="selection" width="55" align="center" />-->
+        <el-table-column label="管控名称" align="left" prop="name" show-overflow-tooltip/>
+        <el-table-column label="学院" align="left" prop="deptName" width="149" show-overflow-tooltip/>
+        <el-table-column label="实验室类型" align="left" prop="moldName" width="149">
+          <template slot-scope="scope">{{scope.row.moldName?scope.row.moldName:'--'}}</template>
+        </el-table-column>
+        <el-table-column label="安全分类" align="left" prop="typeName" width="130">
+          <template slot-scope="scope">{{scope.row.typeName?scope.row.typeName:'--'}}</template>
+        </el-table-column>
+        <el-table-column label="安全分级" align="left" prop="levelName" width="130">
+          <template slot-scope="scope">{{scope.row.levelName?scope.row.levelName:'--'}}</template>
+        </el-table-column>
+        <el-table-column label="管控规则数" align="left" prop="ruleNum" width="130"/>
+        <el-table-column label="状态" align="left" prop="status" width="149">
+          <template slot-scope="scope">
+            <span :class="scope.row.status == 1?'tableTypeColorA':(scope.row.status == 0?'tableTypeColorB':'')">{{scope.row.status == 1?'开启':(scope.row.status == 0?'关闭':'')}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="编辑人" align="left" prop="updateBy" width="149"/>
+        <el-table-column label="编辑时间" align="left" prop="updateTime" width="179"/>
+        <!--<el-table-column label="适配实验室数" align="left" prop="subNum" />-->
+        <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="160px" v-if="tableButtonType">
+          <template slot-scope="scope">
+            <div class="table-button-box">
+              <p class="table-button-null"></p>
+              <p class="table-button-p"
+                 @click="clickPageType(3,scope.row)"
+                 v-hasPermiAnd="['laboratory:gradeManage:query','laboratory:gradeManage:edit']"
+              >编辑</p>
+              <p class="table-button-p"
+                 @click="handleDelete(scope.row)"
+                 v-hasPermi="['laboratory:gradeManage:remove']"
+              >删除</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>
+    <!-- 新增编辑 -->
+    <add-page v-if="pageType == 2" :propsType="propsType" :propsId="propsId"></add-page>
+    <!-- 添加或修改分级管控管理对话框 -->
+    <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="remark">
+          <el-input v-model="form.remark" placeholder="请输入备注" />
+        </el-form-item>
+        <el-form-item label="安全分级ID" prop="level">
+          <el-input v-model="form.level" placeholder="请输入安全分级ID" />
+        </el-form-item>
+        <el-form-item label="安全分类ID" prop="typeId">
+          <el-input v-model="form.typeId" placeholder="请输入安全分类ID" />
+        </el-form-item>
+        <el-form-item label="适配实验室多选逗号分隔" prop="subIds">
+          <el-input v-model="form.subIds" placeholder="请输入适配实验室多选逗号分隔" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+  import {
+    listGradeManage, getGradeManage,
+    delGradeManage, addGradeManage,
+    updateGradeManage,filterDept,
+    listClassifiedAll,listClasstypeAll,
+    labMoldQueryOption
+  } from "@/api/hierarchicalControl/indexDemo";
+  import addPage from "./addPage.vue"
+  import advancedSearch from "@/components/ZDcomponents/advancedSearch.vue"
+
+  export default {
+    name: "GradeManage",
+    components: {
+      addPage,
+      advancedSearch
+    },
+    data() {
+      return {
+        tableButtonType:this.hasPermiDom(['laboratory:gradeManage:query','laboratory:gradeManage:edit','laboratory:gradeManage:remove']),
+        //页面状态
+        pageType:1,
+        // 遮罩层
+        loading: true,
+        // 选中数组
+        ids: [],
+        // 非单个禁用
+        single: true,
+        // 非多个禁用
+        multiple: true,
+        // 显示搜索条件
+        showSearch: true,
+        // 总条数
+        total: 0,
+        // 分级管控管理表格数据
+        gradeManageList: [],
+        // 弹出层标题
+        title: "",
+        // 是否显示弹出层
+        open: false,
+        // 查询参数
+        queryParams: {
+          pageNum: 1,
+          pageSize:20,
+          searchValue: null,
+          status:null,
+          typeId:null,
+          level:null,
+        },
+        // 表单参数
+        form: {},
+        // 表单校验
+        rules: {
+        },
+        // //分类数据
+        typeList:[],
+        // //分级数据
+        levelList:[],
+        propsType:false,
+        propsId:{},
+        //高级搜索组件参数
+        searchData:{
+          buttonList:[
+            {
+              name:"新增",
+              parameter:"add",
+              type:"1", //按钮类型 1.按钮 2.导入 3.导出
+              hasPermi:['laboratory:gradeManage:add'] // 权限字段
+            },
+          ],
+          searchList:[
+            {
+              name:"关键字",//名称
+              key:"searchValue",//键名 用于返回数据
+              value:"",//内容
+              placeholder:"请输入名称/学院",//输入提示
+              level:"1",//1.普通搜索 2.高级搜索  普通搜索默认会在高级搜索时显示
+              type:"1",//类型 1.input 2.select 3.TimePicker
+              universal:'10',//input 最大长度
+            },
+            {
+              name:"学院",//名称
+              key:"deptId",//键名 用于返回数据
+              value:"",//内容
+              placeholder:"请选择学院",//输入提示
+              level:"1",//1.普通搜索 2.高级搜索  普通搜索默认会在高级搜索时显示
+              type:"2",//类型 1.input 2.select 3.TimePicker
+              universal:[],//select列表数据
+            },
+            {
+              name:"安全分类",//名称
+              key:"typeId",//键名 用于返回数据
+              value:"",//内容
+              placeholder:"请选择安全分类",//输入提示
+              level:"1",//1.普通搜索 2.高级搜索  普通搜索默认会在高级搜索时显示
+              type:"2",//类型 1.input 2.select 3.TimePicker
+              universal:[],//select列表数据
+            },
+            {
+              name:"安全分级",//名称
+              key:"level",//键名 用于返回数据
+              value:"",//内容
+              placeholder:"请选择安全分级",//输入提示
+              level:"1",//1.普通搜索 2.高级搜索  普通搜索默认会在高级搜索时显示
+              type:"2",//类型 1.input 2.select 3.TimePicker
+              universal:[],//select列表数据
+            },
+            {
+              name:"状态",//名称
+              key:"status",//键名 用于返回数据
+              value:"",//内容
+              placeholder:"请选择状态",//输入提示
+              level:"2",//1.普通搜索 2.高级搜索  普通搜索默认会在高级搜索时显示
+              type:"2",//类型 1.input 2.select 3.TimePicker
+              universal:[
+                {label:"开启",value:"1"},{label:"关闭",value:"0"},
+              ],//select列表数据
+            },
+            {
+              name:"类型",//名称
+              key:"moldId",//键名 用于返回数据
+              value:"",//内容
+              placeholder:"请选择类型",//输入提示
+              level:"2",//1.普通搜索 2.高级搜索  普通搜索默认会在高级搜索时显示
+              type:"2",//类型 1.input 2.select 3.TimePicker
+              universal:[],//select列表数据
+            },
+          ]
+
+        }
+      };
+    },
+    created() {
+
+    },
+    mounted(){
+      this.getListClassifiedAll();
+      this.getListClasstypeAll();
+      this.filterDept();
+      this.labMoldQueryOption();
+      this.getList();
+    },
+    methods: {
+      //高级搜索按钮方法
+      searchClick(type,data){
+        if(type == 1){
+          this.queryParams = JSON.parse(JSON.stringify(data));
+          this.queryParams.pageNum = 1;
+          this.queryParams.pageSize = 20;
+          this.getList();
+        }else if(type == 2){
+          this.queryParams = {
+            pageNum : 1,
+            pageSize:20,
+          };
+          this.getList();
+        }else if(type == 'add'){
+          this.clickPageType(2);
+        }
+      },
+      //获取实验室类型
+      labMoldQueryOption(){
+        labMoldQueryOption({}).then(response => {
+          let list = [];
+          for(let i=0;i<response.data.length;i++){
+            list.push({label:response.data[i].moldName, value:response.data[i].id,})
+          }
+          this.searchData.searchList[5].universal = list;
+        });
+      },
+      //获取学院
+      filterDept(){
+        filterDept().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,})
+          }
+          this.searchData.searchList[1].universal = list;
+        });
+      },
+      //查询安全分级
+      getListClassifiedAll(){
+        listClassifiedAll().then(response=>{
+          if(response.code==200){
+            // this.levelList=response.data
+            let list = [];
+            for(let i=0;i<response.data.length;i++){
+              list.push({label:response.data[i].classifiedName, value:response.data[i].id,})
+            }
+            this.searchData.searchList[3].universal = list;
+          }
+        })
+      },
+      //查询安全分类
+      getListClasstypeAll(){
+        listClasstypeAll().then(response=>{
+          if(response.code==200){
+            // this.typeList=response.data;
+            let list = [];
+            for(let i=0;i<response.data.length;i++){
+              list.push({label:response.data[i].typeName, value:response.data[i].id,})
+            }
+            this.searchData.searchList[2].universal = list;
+          }
+        });
+      },
+      //页面切换
+      clickPageType(type,row){
+        if(this.pageType != type){
+          if(type == 1){
+            this.getList();
+            this.pageType = 1;
+          }else if(type == 2){
+            this.pageType = 2;
+            this.propsType = false;
+          }else if(type == 3){
+            this.pageType = 2;
+            this.propsType = true;
+            this.propsId = row.id;
+          }
+        }
+      },
+      /** 查询分级管控管理列表 */
+      getList() {
+        this.loading = true;
+        listGradeManage(this.queryParams).then( response => {
+          this.gradeManageList =  response.rows;
+          this.total =  response.total;
+          this.loading = false;
+        });
+      },
+      // 取消按钮
+      cancel() {
+        this.open = false;
+        this.reset();
+      },
+      // 表单重置
+      reset() {
+        this.form = {
+          id: null,
+          deptId: null,
+          deptName: null,
+          userId: null,
+          createBy: null,
+          createTime: null,
+          updateBy: null,
+          updateTime: null,
+          remark: null,
+          level: null,
+          typeId: null,
+          subIds: null
+        };
+        this.resetForm("form");
+      },
+      /** 搜索按钮操作 */
+      handleQuery() {
+        this.queryParams.pageNum = 1;
+        this.getList();
+      },
+      /** 重置按钮操作 */
+      resetQuery() {
+        // this.resetForm("queryForm");
+        this.queryParams.searchValue=null;
+        this.queryParams.status=null;
+        this.queryParams.typeId=null;
+        this.queryParams.level=null;
+        this.handleQuery();
+      },
+      // 多选框选中数据
+      handleSelectionChange(selection) {
+        this.ids = selection.map(item => item.id)
+        this.single = selection.length!==1
+        this.multiple = !selection.length
+      },
+      /** 新增按钮操作 */
+      handleAdd() {
+        this.reset();
+        this.open = true;
+        this.title = "添加分级管控管理";
+      },
+      /** 修改按钮操作 */
+      handleUpdate(row) {
+        this.reset();
+        const id = row.id || this.ids
+        getGradeManage(id).then( response => {
+          this.form =  response.data;
+          this.open = true;
+          this.title = "修改分级管控管理";
+        });
+      },
+      /** 提交按钮 */
+      submitForm() {
+        this.$refs["form"].validate(valid => {
+          if (valid) {
+            if (this.form.id != null) {
+              updateGradeManage(this.form).then( response => {
+                this.msgSuccess("修改成功");
+                this.open = false;
+                this.getList();
+              });
+            } else {
+              addGradeManage(this.form).then( response => {
+                this.msgSuccess("新增成功");
+                this.open = false;
+                this.getList();
+              });
+            }
+          }
+        });
+      },
+      /** 删除按钮操作 */
+      handleDelete(row) {
+        const ids = row.id || this.ids;
+        this.$confirm('是否确认删除?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delGradeManage(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        }).catch(() => {});
+      },
+      /** 导出按钮操作 */
+      handleExport() {
+        this.download('laboratory/gradeManage/export', {
+          ...this.queryParams
+        }, `laboratory_gradeManage.xlsx`)
+      }
+    }
+  };
+</script>
+
+<style lang="scss" scoped>
+  .gradeManage{
+    flex:1;
+    display: flex!important;
+    flex-direction: column;
+    overflow: hidden;
+    .gradeManage-page{
+      flex:1;
+      display: flex!important;
+      flex-direction: column;
+      padding:15px 20px!important;
+      box-shadow: 0 0 8px 2px rgba(0, 0, 0, 0.1);
+      border-radius:10px;
+      margin:5px 20px 20px 10px;
+      overflow: hidden;
+    }
+    .button-box{
+      margin:0 auto;
+      width:190px;
+      display: flex;
+    }
+    .tableTypeColorA{
+      color:#2AA408;
+    }
+    .tableTypeColorB{
+      color:#FF3131;
+    }
+  }
+</style>

+ 236 - 0
src/views/hierarchicalControl/gradeManage/subjectList.vue

@@ -0,0 +1,236 @@
+<!--分级管控/实验室列表-->
+<template>
+  <div class="subjectList" v-if="subjectOpen">
+    <el-dialog title="选择实验室" :visible.sync="subjectOpen" width="1500px" append-to-body :close-on-click-modal="false">
+      <div class="gradeManage-subjectList" style="height:626px;display: flex;flex-direction: column">
+        <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch">
+          <el-form-item label="实验室" prop="name" label-width="80px">
+            <el-input
+              style="width:160px;"
+              maxlength="10"
+              v-model="queryParams.name"
+              placeholder="请输入实验室名称"
+              clearable
+              size="small"
+            />
+          </el-form-item>
+          <el-form-item label="学院" prop="deptId">
+            <el-select style="width:160px;" v-model="queryParams.deptId" placeholder="请选择学院" clearable label-width="80px">
+              <el-option
+                v-for="dict in deptList"
+                :key="dict.deptId"
+                :label="dict.deptName"
+                :value="dict.deptId"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="安全分类" prop="typeId">
+            <el-select style="width:160px;" v-model="queryParams.typeId" placeholder="请选择安全分类" clearable label-width="80px">
+              <el-option
+                v-for="dict in typeList"
+                :key="dict.id"
+                :label="dict.typeName"
+                :value="dict.id"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="安全分级" prop="level">
+            <el-select style="width:160px;" v-model="queryParams.level" placeholder="请选择安全分级" clearable label-width="80px">
+              <el-option
+                v-for="dict in levelList"
+                :key="dict.id"
+                :label="dict.classifiedName"
+                :value="dict.id"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="实验室负责人" prop="adminName" label-width="100px">
+            <el-input
+              style="width:160px;"
+              maxlength="10"
+              v-model="queryParams.adminName"
+              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>
+        <div class="sheet-expand-box" style="height:40px;display:flex;background:rgba(1,131,250,0.1);border-radius: 5px;margin-bottom:18px;font-size:14px;">
+          <i class="el-icon-warning" style="color:#0045AF;margin:10px 16px 0 14px;height:20px;width:20px;font-size:20px;display: block;"></i>
+          <p class="color_99" style="margin:0;width:132px;font-size:14px;height:40px;line-height:40px;">已选择 {{selectedNum}} 项</p>
+          <p class="color_one cursor_hover" style="margin:0;width:60px;font-size:14px;height:40px;line-height:40px;margin-right:20px;" @click="selectPage">全选本页</p>
+          <p class="color_warn cursor_hover" style="margin:0;width:60px;font-size:14px;height:40px;line-height:40px;margin-right:20px;" @click="clearSelection">清除选项</p>
+        </div>
+        <el-table v-loading="loading" border :data="subjectList" @selection-change="handleSelectionChange" ref="multipleTable" :row-key="getRowKeys">
+          <el-table-column type="selection" width="55" :reserve-selection="true" align="center" />
+          <el-table-column label="实验室" align="left" prop="name" />
+          <el-table-column label="学院" align="left" prop="deptName" />
+          <el-table-column label="安全分类" align="left" prop="typeName" />
+          <el-table-column label="安全分级" align="left" prop="levelName" />
+          <el-table-column label="实验室负责人" align="left" prop="adminName" />
+        </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 style="margin-top:30px;padding-top:20px;display: flex;border-top:1px solid #dedede">
+          <p style="flex:1;"></p>
+          <p style="margin-right:20px;" class="reset-button-one" @click="show(2)">取消</p>
+          <p class="inquire-button-one" @click="okButton">确定</p>
+        </div>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+  import {
+    listDepartments,listInfo,
+    listClassifiedAll,listClasstypeAll
+  } from "@/api/hierarchicalControl/indexDemo";
+  export default {
+    name: "subjectList",
+    props:{
+
+    },
+    data() {
+      return {
+        subjectOpen:false,
+        loading:false,
+        // 显示搜索条件
+        showSearch: true,
+        // 总条数
+        total: 0,
+        queryParams:{
+          pageNum:1,
+          pageSize:20,
+        },
+        subjectList:[],
+        //已选中数量
+        selectedNum:0,
+        //已选中
+        ids:[],
+        idData:[],
+        // 非单个禁用
+        single: true,
+        // 非多个禁用
+        multiple: true,
+        //分类数据
+        typeList:[],
+        //分级数据
+        levelList:[],
+      }
+    },
+    created(){
+
+    },
+    mounted(){
+      this.getListClasstypeAll();
+      this.getListClassifiedAll();
+      this.listDepartments();
+      this.getList();
+    },
+    methods:{
+      //确定按钮
+      okButton(){
+        if(!this.ids[0]){
+          this.msgError("请勾选实验室")
+          return
+        }
+        this.$parent.takeSubjectData(this.ids,this.idData);
+      },
+      //获取学院
+      listDepartments(){
+        listDepartments().then(response => {
+          this.deptList = response.data;
+        });
+      },
+      show(data){
+        let self = this;
+        this.subjectOpen = !this.subjectOpen;
+        if(data){
+          this.queryParams.pageNum = 1;
+          setTimeout(function(){
+            for(let i=0;i<data.length;i++){
+              self.$refs.multipleTable.toggleRowSelection(data[i],true)
+            }
+            self.getList();
+          },100);
+        }
+      },
+      //获取数据列表
+      getList(){
+        this.loading = true;
+        listInfo(this.queryParams).then(response => {
+          this.subjectList = response.rows;
+          this.total = response.total;
+          this.loading = false;
+        });
+      },
+      /** 搜索按钮操作 */
+      handleQuery() {
+        this.queryParams.pageNum = 1;
+        this.getList();
+      },
+      /** 重置按钮操作 */
+      resetQuery() {
+        this.queryParams = {};
+        this.handleQuery();
+      },
+      /*===记录勾选数据===
+        需要再el-table 添加  :row-key="getRowKeys"
+        需要在selection 添加 :reserve-selection="true"
+      */
+      getRowKeys(row) {
+        return row.id
+      },
+      //选择本页
+      selectPage(){
+        this.$refs.multipleTable.toggleAllSelection()
+      },
+      //清除选择
+      clearSelection(){
+        this.$refs.multipleTable.clearSelection()
+      },
+      // 多选框选中数据
+      handleSelectionChange(selection) {
+        this.selectedNum = selection.length;
+        this.ids = selection.map(item => item.id)
+        this.idData = selection.map(item => item)
+        this.single = selection.length!==1
+        this.multiple = !selection.length
+      },
+      //查询安全分级
+      getListClassifiedAll(){
+        listClassifiedAll().then(response=>{
+          if(response.code==200){
+            this.levelList=response.data
+          }
+        })
+      },
+      //查询安全分类
+      getListClasstypeAll(){
+        listClasstypeAll().then(response=>{
+          if(response.code==200){
+            this.typeList=response.data;
+          }
+        });
+      },
+    }
+  }
+</script>
+
+<style lang="scss" scoped>
+  .subjectList{
+    height:700px;
+    display: flex!important;
+    flex-direction: column;
+  }
+</style>

+ 257 - 0
src/views/hierarchicalControl/gradeManage/userList.vue

@@ -0,0 +1,257 @@
+<!--分级管控/人员列表-->
+<template>
+  <div class="userList" v-if="userOpen">
+    <el-dialog title="选择用户" :visible.sync="userOpen" width="1500px" append-to-body :close-on-click-modal="false">
+      <div class="gradeManage-userList" style="height:626px;display: flex;flex-direction: column">
+        <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch">
+          <el-form-item label="关键字" prop="searchValue" label-width="80px">
+            <el-input
+              style="width:200px;"
+              maxlength="10"
+              v-model="queryParams.searchValue"
+              placeholder="请输入名称/联系方式"
+              clearable
+              size="small"
+            />
+          </el-form-item>
+          <el-form-item label="身份" prop="position" label-width="50px">
+            <el-select style="width:200px;" v-model="queryParams.position" placeholder="请选择身份" clearable>
+              <el-option v-for="dict in typeList" :key="dict.postId" :label="dict.postName" :value="dict.postId"></el-option>
+            </el-select>
+          </el-form-item>
+          <!--<el-form-item label="工号/学号" prop="userName" label-width="80px">-->
+            <!--<el-input-->
+              <!--style="width:160px;"-->
+              <!--maxlength="20"-->
+              <!--v-model="queryParams.userName"-->
+              <!--placeholder="请输入工号/学号"-->
+              <!--clearable-->
+              <!--size="small"-->
+            <!--/>-->
+          <!--</el-form-item>-->
+          <!--<el-form-item label="联系方式" prop="phonenumber" label-width="80px">-->
+            <!--<el-input-->
+              <!--style="width:160px;"-->
+              <!--maxlength="11"-->
+              <!--v-model="queryParams.phonenumber"-->
+              <!--placeholder="请输入联系方式"-->
+              <!--clearable-->
+              <!--size="small"-->
+            <!--/>-->
+          <!--</el-form-item>-->
+          <el-form-item label="学院" prop="deptId" label-width="50px">
+            <el-select style="width:200px;" v-model="queryParams.deptId" placeholder="请选择学院" clearable>
+              <el-option
+                v-for="dict in deptList"
+                :key="dict.deptId"
+                :label="dict.deptName"
+                :value="dict.deptId"
+              ></el-option>
+            </el-select>
+          </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 class="sheet-expand-box" style="height:40px;display:flex;background:rgba(1,131,250,0.1);border-radius: 5px;margin-bottom:18px;font-size:14px;">
+          <i class="el-icon-warning" style="color:#0045AF;margin:10px 16px 0 14px;height:20px;width:20px;font-size:20px;display: block;"></i>
+          <p class="color_99" style="margin:0;width:132px;font-size:14px;height:40px;line-height:40px;">已选择 {{selectedNum}} 项</p>
+          <p class="color_one cursor_hover" style="margin:0;width:60px;font-size:14px;height:40px;line-height:40px;margin-right:20px;" @click="selectPage">全选本页</p>
+          <p class="color_warn cursor_hover" style="margin:0;width:60px;font-size:14px;height:40px;line-height:40px;margin-right:20px;" @click="clearSelection">清除选项</p>
+        </div>
+        <el-table v-loading="loading" border :data="userList" @selection-change="handleSelectionChange" ref="multipleTable" :row-key="getRowKeys">
+          <el-table-column type="selection" width="55" :reserve-selection="true" align="center" />
+          <el-table-column label="姓名" align="left" prop="nickName" />
+          <el-table-column label="身份" align="left" prop="positionName" />
+          <el-table-column label="工号/学号" align="left" prop="userName" />
+          <el-table-column label="联系方式" align="left" prop="phonenumber" />
+          <el-table-column label="学院" align="left" prop="dept.deptName" />
+        </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 style="margin-top:30px;padding-top:20px;display: flex;border-top:1px solid #dedede">
+          <p style="flex:1;"></p>
+          <p style="margin-right:20px;" class="reset-button-one" @click="show(2)">取消</p>
+          <p class="inquire-button-one" @click="okButton">确定</p>
+        </div>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+  import {
+    filterDept,optionselect,
+    listUser,listClassifiedAll,
+    listClasstypeAll
+  } from "@/api/hierarchicalControl/indexDemo";
+  export default {
+    name: "userList",
+    data() {
+      return {
+        userOpen:false,
+        loading:false,
+        // 显示搜索条件
+        showSearch: true,
+        // 总条数
+        total: 0,
+        queryParams:{
+          pageNum:1,
+          pageSize:20,
+          searchValue:"",
+          position:"",
+          deptId:"",
+        },
+        userList:[],
+        //已选中数量
+        selectedNum:0,
+        //已选中
+        ids:[],
+        idData:[],
+        // 非单个禁用
+        single: true,
+        // 非多个禁用
+        multiple: true,
+        //分类数据
+        typeList:[],
+        //分级数据
+        levelList:[],
+        addUserList:[],
+      }
+    },
+    created(){
+
+    },
+    mounted(){
+      // this.getListClasstypeAll();
+      this.getListClassifiedAll();
+      this.filterDept();
+      this.optionselect();
+    },
+    methods:{
+      //确定按钮
+      okButton(){
+        if(!this.ids[0]){
+          this.msgError("请勾选人员")
+          return
+        }
+        this.$parent.takeUserData(this.ids,this.idData);
+      },
+      show(data){
+        let self = this;
+        this.resetQuery();
+        // this.getListClasstypeAll();
+        this.getListClassifiedAll();
+        this.filterDept();
+        this.optionselect();
+        this.userOpen = !this.userOpen;
+        if(data){
+          this.addUserList = data;
+          // this.queryParams.pageNum = 1;
+          // setTimeout(function(){
+          //   for(let i=0;i<data.length;i++){
+          //     self.$refs.multipleTable.toggleRowSelection(data[i],true)
+          //   }
+          //   self.getList();
+          // },300);
+        }
+        self.getList();
+        // if(type == 1){
+        //   this.userOpen = true;
+        // }else if(type == 2){
+        //   this.userOpen = false;
+        // }
+      },
+      //获取学院
+      filterDept(){
+        filterDept().then(response => {
+          this.deptList = response.data;
+        });
+      },
+      //获取身份
+      optionselect(){
+        optionselect().then(response => {
+          this.typeList = response.data;
+        });
+      },
+      //获取数据列表
+      getList(){
+        this.loading = true;
+        let obj = JSON.parse(JSON.stringify(this.queryParams));
+        obj.ids = this.addUserList+'';
+        obj.include = true;
+        listUser(obj).then(response => {
+          this.userList = response.rows;
+          this.total = response.total;
+          this.loading = false;
+        });
+      },
+      /** 搜索按钮操作 */
+      handleQuery() {
+        this.queryParams.pageNum = 1;
+        this.getList();
+      },
+      /** 重置按钮操作 */
+      resetQuery() {
+        // this.resetForm("queryForm");
+        this.queryParams.searchValue = "";
+        this.queryParams.position = "";
+        this.queryParams.deptId = "";
+        this.handleQuery();
+      },
+      /*===记录勾选数据===
+        需要再el-table 添加  :row-key="getRowKeys"
+        需要在selection 添加 :reserve-selection="true"
+      */
+      getRowKeys(row) {
+        return row.userId
+      },
+      //选择本页
+      selectPage(){
+        this.$refs.multipleTable.toggleAllSelection()
+      },
+      //清除选择
+      clearSelection(){
+        this.$refs.multipleTable.clearSelection()
+      },
+      // 多选框选中数据
+      handleSelectionChange(selection) {
+        this.selectedNum = selection.length;
+        this.ids = selection.map(item => item.userId);
+        this.idData = selection.map(item => item);
+        this.single = selection.length!==1
+        this.multiple = !selection.length
+      },
+      //查询安全分级
+      getListClassifiedAll(){
+        listClassifiedAll().then(response=>{
+          if(response.code==200){
+            this.levelList=response.data
+          }
+        })
+      },
+      //查询安全分类
+      getListClasstypeAll(){
+        listClasstypeAll().then(response=>{
+          if(response.code==200){
+            this.typeList=response.data;
+          }
+        });
+      },
+    }
+  }
+</script>
+
+<style lang="scss" scoped>
+  .userList{
+    height:700px;
+    display: flex!important;
+    flex-direction: column;
+  }
+</style>

+ 415 - 0
src/views/hierarchicalControl/gradeManageRecord/index.vue

@@ -0,0 +1,415 @@
+<!--分级管控执行-->
+<template>
+  <div class="app-container gradeManageRecord">
+    <div class="gradeManageRecord-page" v-if="pageType == 1">
+      <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="70px">
+        <el-form-item label="关键字" prop="searchValue" label-width="60px">
+          <el-input
+            style="width:150px;"
+            v-model="queryParams.searchValue"
+            placeholder="规则名称"
+            size="small"
+          />
+        </el-form-item>
+        <el-form-item label="学院" prop="deptId" label-width="46px">
+          <el-select v-model="queryParams.deptId" placeholder="请选择学院" clearable style="width:150px;">
+            <el-option
+              v-for="dict in deptList"
+              :key="dict.deptId"
+              :label="dict.deptName"
+              :value="dict.deptId"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="安全分类" prop="typeId">
+          <el-select v-model="queryParams.typeId" placeholder="请选择安全分类" clearable style="width:150px;">
+            <el-option
+              v-for="dict in typeList"
+              :key="dict.id"
+              :label="dict.typeName"
+              :value="dict.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="安全分级" prop="level">
+          <el-select v-model="queryParams.level" placeholder="请选择安全分级" clearable style="width:150px;">
+            <el-option
+              v-for="dict in levelList"
+              :key="dict.id"
+              :label="dict.classifiedName"
+              :value="dict.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="执行周期" prop="cycle">
+          <el-select v-model="queryParams.cycle" placeholder="请选择执行周期" clearable style="width:150px;">
+            <el-option
+              v-for="dict in cycleList"
+              :key="dict"
+              :label="dict"
+              :value="dict"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="状态" prop="status" label-width="40px">
+          <el-select v-model="queryParams.status" placeholder="请选择执行状态" clearable style="width:150px;">
+            <el-option label="未执行" value="0" />
+            <el-option label="已执行" value="2" />
+          </el-select>
+        </el-form-item>
+        <!--<el-form-item label="执行时间" prop="carryTime">-->
+          <!--<el-date-picker-->
+            <!--:clearable="false"-->
+            <!--v-model="createTimeDate"-->
+            <!--size="small"-->
+            <!--style="width: 240px"-->
+            <!--value-format="yyyy-MM-dd"-->
+            <!--type="daterange"-->
+            <!--range-separator="-"-->
+            <!--start-placeholder="开始日期"-->
+            <!--end-placeholder="结束日期"-->
+          <!--&gt;</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="gradeManageRecordList">
+        <el-table-column label="实验室" align="center" prop="subName" width="199" show-overflow-tooltip/>
+        <el-table-column label="规则名称" align="center" prop="ruleName" show-overflow-tooltip/>
+        <el-table-column label="类型" align="center" prop="moldName" width="149"/>
+        <el-table-column label="安全分类" align="center" prop="typeName" width="130"/>
+        <el-table-column label="安全分级" align="center" prop="levelName" width="130"/>
+        <el-table-column label="学院" align="center" prop="deptName" width="130" show-overflow-tooltip/>
+        <el-table-column label="执行周期" align="center" prop="cycle" width="149"/>
+        <!--<el-table-column label="执行人身份" align="center" prop="userPosition" />-->
+        <el-table-column label="状态" align="center" prop="status"width="149">
+          <template slot-scope="scope">
+            <span :class="scope.row.status==2?'tableTypeColorA':''">{{scope.row.status==0?'未执行':(scope.row.status==2?'已执行':'')}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="执行时间" align="center" prop="carryTime" width="130">
+          <template slot-scope="scope">{{scope.row.carryTime?scope.row.carryTime:'-'}}</template>
+        </el-table-column>
+        <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="120" v-if="tableButtonType">
+          <template slot-scope="scope">
+            <div class="table-button-box">
+              <p class="table-button-null"></p>
+              <p class="table-button-p"
+                 @click="pageTypeClick(2,scope.row)"
+                 v-hasPermi="['laboratory:gradeManageRecord:query']"
+              >详情</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>
+    <info-page v-if="pageType == 2" :recordId="recordId"></info-page>
+    <!-- 添加或修改管控执行记录对话框 -->
+    <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="remark">
+          <el-input v-model="form.remark" placeholder="请输入备注" />
+        </el-form-item>
+        <el-form-item label="规则ID" prop="ruleId">
+          <el-input v-model="form.ruleId" placeholder="请输入规则ID" />
+        </el-form-item>
+        <el-form-item label="规则名称" prop="ruleName">
+          <el-input v-model="form.ruleName" placeholder="请输入规则名称" />
+        </el-form-item>
+        <el-form-item label="实验室ID" prop="subId">
+          <el-input v-model="form.subId" placeholder="请输入实验室ID" />
+        </el-form-item>
+        <el-form-item label="执行用户ID" prop="joinUserId">
+          <el-input v-model="form.joinUserId" placeholder="请输入执行用户ID" />
+        </el-form-item>
+        <el-form-item label="执行人身份" prop="userPosition">
+          <el-input v-model="form.userPosition" placeholder="请输入执行人身份" />
+        </el-form-item>
+        <el-form-item label="执行状态">
+          <el-radio-group v-model="form.status">
+            <el-radio label="1">请选择字典生成</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="执行时间" prop="carryTime">
+          <el-date-picker clearable size="small"
+            v-model="form.carryTime"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="选择执行时间">
+          </el-date-picker>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import {
+  filterDept,listGradeManageRecord,
+  getGradeManageRecord, delGradeManageRecord,
+  addGradeManageRecord, updateGradeManageRecord,
+  listClassifiedAll, listClasstypeAll,
+  queryOption,gradeManageWorkInfo
+} from "@/api/hierarchicalControl/indexDemo";
+import infoPage from "./infoPage.vue"
+export default {
+  name: "GradeManageRecord",
+  components: {
+    infoPage
+  },
+  data() {
+    return {
+      tableButtonType:this.hasPermiDom(['laboratory:gradeManageRecord:query']),
+      //页面状态
+      pageType:1,
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 管控执行记录表格数据
+      gradeManageRecordList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize:20,
+        searchValue: null,
+        deptId: null,
+        status: null,
+      },
+      createTimeDate:[],
+      //学院列表
+      deptList:[],
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+      },
+      recordId:"",
+      labMoldList:[],
+      levelList:[],
+      typeList:[],
+      cycleList:['一天','一周','一月','季度','半年','一年'],
+    };
+  },
+  created() {
+    this.getList();
+  },
+  mounted(){
+    this.filterDept();
+    this.getListClassifiedAll();
+    this.getListClasstypeAll();
+    this.queryOption();
+  },
+  methods: {
+    queryOption(){
+      queryOption({}).then(response=>{
+        if(response.code==200){
+          this.labMoldList=response.data
+        }
+      })
+    },
+    //查询安全分级
+    getListClassifiedAll(){
+      listClassifiedAll().then(response=>{
+        if(response.code==200){
+          this.levelList=response.data
+        }
+      })
+    },
+    //查询安全分类
+    getListClasstypeAll(){
+      listClasstypeAll().then(response=>{
+        if(response.code==200){
+          this.typeList=response.data;
+        }
+      });
+    },
+    pageTypeClick(type,row){
+      if(this.pageType != type){
+        if(type == 1){
+          this.pageType = 1;
+        }else if(type == 2){
+          gradeManageWorkInfo(row.id).then( response => {
+            if (response.code == 504){
+              this.msgError(response.msg);
+            }else if (response.code == 200){
+              this.recordId = row.id;
+              this.pageType = 2;
+            }
+          })
+        }
+      }
+    },
+    /** 查询管控执行记录列表 */
+    getList() {
+      if(this.createTimeDate[0]){
+        this.queryParams.statTime = this.createTimeDate[0];
+        this.queryParams.endTime = this.createTimeDate[1];
+      }else {
+        this.queryParams.statTime = null
+        this.queryParams.endTime = null
+      }
+      this.loading = true;
+      listGradeManageRecord(this.queryParams).then( response => {
+        this.gradeManageRecordList =  response.rows;
+        this.total =  response.total;
+        this.loading = false;
+      });
+    },
+    //获取学院
+    filterDept(){
+      filterDept().then(response => {
+        this.deptList = response.data;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        deptId: null,
+        deptName: null,
+        userId: null,
+        createBy: null,
+        createTime: null,
+        updateBy: null,
+        updateTime: null,
+        remark: null,
+        ruleId: null,
+        ruleName: null,
+        subId: null,
+        joinUserId: null,
+        userPosition: null,
+        status: 0,
+        carryTime: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.createTimeDate = []
+      // this.resetForm("queryForm");
+      this.$set(this,'queryParams',{
+        pageNum: 1,
+        pageSize:20,
+        searchValue: "",
+        deptId: "",
+        status: "",
+        endTime:"",
+        statTime:"",
+      });
+      this.handleQuery();
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加管控执行记录";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getGradeManageRecord(id).then( response => {
+        this.form =  response.data;
+        this.open = true;
+        this.title = "修改管控执行记录";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateGradeManageRecord(this.form).then( response => {
+              this.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addGradeManageRecord(this.form).then( response => {
+              this.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$confirm('是否确认删除管控执行记录编号为"' + ids + '"的数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delGradeManageRecord(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('laboratory/gradeManageRecord/export', {
+        ...this.queryParams
+      }, `laboratory_gradeManageRecord.xlsx`)
+    }
+  }
+};
+</script>
+
+<style lang="scss" scoped>
+  .gradeManageRecord{
+    display: flex!important;
+    flex-direction: column;
+    box-shadow: 0 0 8px 2px rgba(0, 0, 0, 0.1);
+    overflow: hidden;
+    .gradeManageRecord-page{
+      flex:1;
+      display: flex!important;
+      flex-direction: column;
+      padding:20px 20px!important;
+      overflow: hidden;
+    }
+    .tableTypeColorA{
+      color:#2AA408;
+    }
+  }
+</style>

+ 324 - 0
src/views/hierarchicalControl/gradeManageRecord/infoPage.vue

@@ -0,0 +1,324 @@
+<template>
+  <div class="gradeManageRecord-infoPage" v-if="infoData">
+    <div class="gradeManageRecord-infoPage-min" v-if="pageType == 1">
+      <div class="title-max-box">
+        <p>基本信息</p>
+        <p class="reset-button-one" @click="backPage">返回</p>
+      </div>
+      <div class="top-subject-box">
+        <p :style="'color:'+infoData.fiedColor+';border:1px solid ;'+infoData.fiedColor+';'">{{infoData.levelName}}</p>
+        <p>{{infoData.subName}}</p>
+        <p>{{infoData.typeName}}</p>
+      </div>
+      <div class="top-info-box">
+        <div class="info-text-box">
+          <div>
+            <p>学院:</p>
+            <p>{{infoData.deptName}}</p>
+          </div>
+        </div>
+        <div class="info-text-box">
+          <div>
+            <p>执行周期:</p>
+            <p>{{infoData.cycle}}</p>
+          </div>
+        </div>
+        <div class="info-text-box">
+          <div>
+            <p>执行方式:</p>
+            <p>{{infoData.status==0?'未执行':(infoData.status==2?'已执行':'')}}</p>
+          </div>
+        </div>
+        <div class="info-text-box">
+          <div>
+            <p>执行截止时间:</p>
+            <p :class="infoData.status == 0?'tableTypeColorA':''">{{infoData.endDate}}</p>
+          </div>
+        </div>
+        <!--<div class="info-text-box">-->
+        <!--<div>-->
+        <!--<p>执行人身份:</p>-->
+        <!--<p>{{infoData.userPosition}}</p>-->
+        <!--</div>-->
+        <!--</div>-->
+        <!--<div class="info-text-box">-->
+        <!--<div>-->
+        <!--<p>截止执行时间:</p>-->
+        <!--<p>{{infoData.endTime}}</p>-->
+        <!--</div>-->
+        <!--</div>-->
+      </div>
+      <div class="top-info-box">
+        <div class="info-text-box">
+          <div>
+            <p>规则名称:</p>
+            <p>{{infoData.ruleName}}</p>
+          </div>
+        </div>
+        <div class="info-text-box">
+          <div>
+            <p>规则描述:</p>
+            <p>{{infoData.ruleRemark}}</p>
+          </div>
+        </div>
+      </div>
+      <div class="title-max-box">
+        <p>执行信息</p>
+      </div>
+      <!--<div class="bottom-item-box">-->
+      <!--<p>实际执行时间:</p>-->
+      <!--<p>{{infoData.carryTime}}</p>-->
+      <!--</div>-->
+      <!--<div class="bottom-item-box" v-if="infoData.detail">-->
+      <!--<p>执行描述:</p>-->
+      <!--<p>{{infoData.detail.remark}}</p>-->
+      <!--</div>-->
+      <div class="bottom-item-box bottom-item-box-one" v-if="infoData.status == 0">
+        <p>指定执行人员:</p>
+        <p>{{infoData.allUserName}}</p>
+      </div>
+      <div class="bottom-item-box bottom-item-box-one" v-if="infoData.status == 2">
+        <p>执行时间:</p>
+        <p>{{infoData.detail.createTime}}</p>
+      </div>
+      <div class="bottom-item-box" v-if="infoData.status == 2">
+        <p>执行人:</p>
+        <p>{{infoData.nickName}}</p>
+      </div>
+      <div class="bottom-item-box" v-if="infoData.status == 2">
+        <p>身份:</p>
+        <p>{{infoData.userPosition}}</p>
+      </div>
+      <div class="bottom-item-box" v-if="infoData.status == 2">
+        <p>执行描述:</p>
+        <p>{{infoData.detail.remark}}</p>
+      </div>
+      <div class="bottom-for-box" v-if="infoData.status == 2">
+        <p class="left-name-p">执行材料:</p>
+        <div class="right-max-box" v-if="infoData.detail.imgUrl">
+          <p v-for="(item,index) in infoData.detail.imgUrlList" :key="index">{{item.name}} <span @click="pageTypeClickMin(2,item)">查看</span></p>
+          <!--<a :href="item.url" v-for="(item,index) in infoData.detail.imgUrlList" :key="index">{{item.name}}</a>-->
+        </div>
+      </div>
+    </div>
+    <preview-page :previewData="previewData" v-if="pageType == 2"></preview-page>
+  </div>
+</template>
+
+<script>
+  import {
+    gradeManageWorkInfo
+  } from "@/api/hierarchicalControl/indexDemo";
+  import previewPage from "./previewPage.vue"
+  export default {
+    name: "infoPage",
+    components: {
+      previewPage
+    },
+    props:{
+      recordId:{},
+    },
+    data() {
+      return {
+        iframeSrc:"",
+        iframeIndex:0,
+        infoData:null,
+        pageType:1,
+        previewData:{},
+      }
+    },
+    created() {
+
+    },
+    mounted(){
+      this.gradeManageWorkInfo();
+    },
+    methods: {
+      pageTypeClickMin(type,item){
+        if (type == 1){
+          this.pageType = 1;
+          this.previewData = {};
+        } else {
+          this.previewData = item;
+          this.pageType = 2;
+        }
+      },
+      //点击切换文件
+      iframeClick(item,index){
+        this.iframeSrc = this.urlJudge(item.url)
+        this.iframeIndex = index;
+      },
+      gradeManageWorkInfo(){
+        gradeManageWorkInfo(this.recordId).then( response => {
+          if(response.data.detail){
+            if(response.data.detail.imgUrl){
+              response.data.detail.imgUrlList = [];
+              let nameList = response.data.detail.imgName.split(',')
+              let urlList = response.data.detail.imgUrl.split(',')
+              for(let i=0;i<urlList.length;i++){
+                if(urlList[i] !='' && urlList[i] != undefined){
+                  let obj = {
+                    name:nameList[i],
+                    url:urlList[i],
+                  };
+                  response.data.detail.imgUrlList.push(obj)
+                }
+              }
+              if(response.data.detail.imgUrlList[0]){
+                this.iframeSrc = this.urlJudge(response.data.detail.imgUrlList[0].url)
+                this.iframeIndex = 0;
+              }
+            }
+          }
+          this.infoData = response.data;
+        });
+      },
+      //返回
+      backPage(){
+        this.$parent.pageTypeClick(1);
+      },
+    }
+
+  }
+</script>
+
+<style lang="scss" scoped>
+  .gradeManageRecord-infoPage{
+    flex:1;
+    display: flex!important;
+    flex-direction: column;
+    .gradeManageRecord-infoPage-min{
+      flex:1;
+      display: flex!important;
+      flex-direction: column;
+      padding:0 20px!important;
+
+    }
+    *{
+      margin:0;
+      padding:0;
+    }
+    .title-max-box{
+      display: flex;
+      border-bottom:1px solid #dedede;
+      p:nth-child(1){
+        flex:1;
+        font-size:18px;
+        line-height:80px;
+        color:#0045AF;
+      }
+      p:nth-child(2){
+        margin-top:20px;
+      }
+    }
+    .top-subject-box{
+      display: flex;
+      margin:30px 0 0 50px;
+      p:nth-child(1){
+        line-height:30px;
+        padding:0 16px;
+        border-radius:6px;
+        font-size:14px;
+        font-weight:500;
+        margin-right:18px;
+      }
+      p:nth-child(2){
+        line-height:30px;
+        font-size:16px;
+        color:#333;
+        margin-right:18px;
+      }
+      p:nth-child(3){
+        line-height:30px;
+        font-size:14px;
+        color:#333;
+        font-weight:500;
+      }
+    }
+    .top-info-box{
+      display: flex;
+      .info-text-box{
+        /*display: inline-block;*/
+        flex:1;
+        /*width:280px;*/
+        margin-top:30px;
+        div{
+          display: flex;
+          p{
+            font-size:14px;
+            font-weight: 500;
+          }
+          p:nth-child(1){
+            width:120px;
+            text-align: right;
+            color:#999;
+          }
+          p:nth-child(2){
+            flex:1;
+            color:#333;
+          }
+          .tableTypeColorA{
+            color:#FF6464!important;
+          }
+        }
+      }
+    }
+    .bottom-item-box-one{
+      margin-top:30px;
+    }
+    .bottom-item-box{
+      display: flex;
+      margin-bottom:20px;
+      p{
+        font-size:14px;
+        font-weight:500;
+      }
+      p:nth-child(1){
+        width:120px;
+        text-align: right;
+        color: #999;
+      }
+      p:nth-child(2){
+        flex:1;
+        color:#333;
+      }
+    }
+    .bottom-for-box{
+      display: flex;
+      .left-name-p{
+        width:120px;
+        text-align: right;
+        line-height:30px;
+        font-weight: 500;
+        font-size:14px;
+        color:#999999;
+      }
+      .right-max-box{
+        flex:1;
+        p{
+          font-weight: 500;
+          line-height:30px;
+          font-size:14px;
+          color:#0183FA;
+          span{
+            cursor: pointer;
+            margin-left:40px;
+          }
+        }
+        .colorA{
+          background: rgba(204,230,254,1);
+          color:#0183FA;
+        }
+        .colorB{
+          background: #e0e0e0;
+          color:#999;
+        }
+      }
+    }
+    .iframe-box{
+      margin:20px 40px;
+      width:1100px;
+      height:800px;
+    }
+  }
+</style>

+ 76 - 0
src/views/hierarchicalControl/gradeManageRecord/previewPage.vue

@@ -0,0 +1,76 @@
+<template>
+  <div class="previewPage">
+    <div class="title-box">
+      <p>{{previewData.name}}</p>
+      <p class="reset-button-one" @click="backPage">返回</p>
+    </div>
+    <div class="info-box" v-if="iframeSrc">
+      <iframe
+        class="iframe"
+        :src="iframeSrc" scrolling="auto" frameborder="0">
+      </iframe>
+    </div>
+  </div>
+</template>
+
+<script>
+  export default {
+    name: "previewPage",
+    props:{
+      previewData:{},
+    },
+    data(){
+      return{
+        iframeSrc:"",
+      }
+    },
+    mounted(){
+      this.iframeSrcFunction();
+    },
+    methods: {
+      iframeSrcFunction(){
+        this.iframeSrc = this.urlJudge(this.previewData.url);
+      },
+      // 返回按钮
+      backPage(){
+        this.$parent.pageTypeClickMin(1);
+      },
+    }
+  }
+</script>
+
+<style lang="scss" scoped>
+  .previewPage{
+    flex:1;
+    display: flex!important;
+    flex-direction: column;
+    border-radius:10px;
+    *{
+      margin:0;
+    }
+    .title-box{
+      display: flex;
+      border-bottom:1px solid #dedede;
+      p:nth-child(1){
+        flex:1;
+        font-size:18px;
+        line-height:80px;
+        color:#0045AF;
+        padding-left:20px;
+      }
+      p:nth-child(2){
+        margin:20px;
+      }
+    }
+    .info-box{
+      margin:20px;
+      overflow-y: scroll;
+      flex:1;
+      display: flex;
+      flex-direction: column;
+      iframe{
+        flex:1;
+      }
+    }
+  }
+</style>

+ 460 - 0
src/views/hierarchicalControl/gradeManageWork/addPage.vue

@@ -0,0 +1,460 @@
+<template>
+  <div class="gradeManageRecord-addPage scrollbar-box">
+    <div class="gradeManageRecord-addPage-min" v-if="pageType == 1">
+      <div class="title-max-box">
+        <p>基本信息</p>
+        <p class="reset-button-one" @click="backPage">返回</p>
+      </div>
+      <div class="top-subject-box">
+        <!--<p :style="'color:'+infoData.fiedColor+';border:1px solid ;'+infoData.fiedColor+';'">啊啊啊啊啊啊啊</p>-->
+        <p :style="'color:'+addData.bigItem.levelColor+';border:1px solid '+addData.bigItem.levelColor+';'" v-if="addData.bigItem.levelName">{{addData.bigItem.levelName}}</p>
+        <p>{{addData.bigItem.subName}}</p>
+        <p>{{addData.bigItem.typeName}}</p>
+      </div>
+      <div class="top-info-box">
+        <div class="info-text-box">
+          <div>
+            <p>学院:</p>
+            <p>{{addData.bigItem.deptName}}</p>
+          </div>
+        </div>
+        <div class="info-text-box">
+          <div>
+            <p>执行周期:</p>
+            <p>{{addData.minItem.cycle}}</p>
+          </div>
+        </div>
+        <div class="info-text-box">
+          <div>
+            <p>执行方式:</p>
+            <p>{{addData.minItem.isAll == 1?'多人执行':(addData.minItem.isAll == 0?'单人执行':'')}}</p>
+          </div>
+        </div>
+        <div class="info-text-box">
+          <div>
+            <p>执行截止时间:</p>
+            <!--<p :class="infoData.nickName?'tableTypeColorA':''">啊啊啊啊啊啊啊</p>-->
+            <p :class="addData.minItem.status == 0?'tableTypeColorA':''">{{addData.minItem.endDate}}</p>
+          </div>
+        </div>
+        <!--<div class="info-text-box">-->
+        <!--<div>-->
+        <!--<p>执行人身份:</p>-->
+        <!--<p>{{infoData.userPosition}}</p>-->
+        <!--</div>-->
+        <!--</div>-->
+        <!--<div class="info-text-box">-->
+        <!--<div>-->
+        <!--<p>截止执行时间:</p>-->
+        <!--<p>{{infoData.endTime}}</p>-->
+        <!--</div>-->
+        <!--</div>-->
+      </div>
+      <div class="top-info-box">
+        <div class="info-text-box">
+          <div>
+            <p>规则名称:</p>
+            <p>{{addData.minItem.ruleName}}</p>
+          </div>
+        </div>
+        <div class="info-text-box">
+          <div>
+            <p>规则描述:</p>
+            <p>{{addData.minItem.ruleRemark}}</p>
+          </div>
+        </div>
+      </div>
+      <p class="title-max-box">执行信息</p>
+      <el-form class="add-form-box" :model="form" ref="form" :rules="rules">
+        <el-form-item label="执行描述" prop="textarea" label-width="80px" style="margin:30px 0 0">
+          <el-input
+            style="width:500px;"
+            type="textarea"
+            resize="none"
+            maxLength="50"
+            :rows="6"
+            placeholder="请输入执行描述"
+            v-model="form.textarea">
+          </el-input>
+        </el-form-item>
+        <el-form-item label="执行材料" prop="list" label-width="80px" style="margin-top:30px;" v-if="addData.minItem.isUpload == 1">
+          <div class="upload-max-box">
+            <div class="left-upload-box">
+              <el-upload
+                class="upload-demo"
+                :action="uploadImgUrl"
+                :show-file-list="false"
+                drag
+                multiple
+                :on-success="(res)=>handleAvatarSuccess(res)"
+                :headers="headers"
+                :before-upload="beforeAvatarUpload">
+                <i class="el-icon-upload" style="color:#CCE6FE;margin-top:40px;"></i>
+                <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
+              </el-upload>
+            </div>
+            <div class="right-upload-box">
+              <p v-if="documentType">文件请上传 pdf / doc / docx / ppt / pptx格式</p>
+              <p v-if="videoType">视频请上传 mp4</p>
+              <p v-if="pictureType">图片请上传 png / jpeg / gif 格式</p>
+            </div>
+          </div>
+          <!--<el-upload-->
+          <!--class="avatar-uploader"-->
+          <!--:action="uploadImgUrl"-->
+          <!--:show-file-list="false"-->
+          <!--:on-success="(res)=>handleAvatarSuccess(res)"-->
+          <!--:headers="headers"-->
+          <!--:before-upload="beforeAvatarUpload">-->
+          <!--<p class="reset-button-one left-button"><i class="el-icon-upload2" style="margin-right:10px;"></i>请上传执行材料</p>-->
+          <!--</el-upload>-->
+        </el-form-item>
+        <div class="right-for-max-box">
+          <div class="right-for-min-box" v-for="(item,index) in form.list" :key="index">
+            <!--<el-tooltip class="item" effect="dark" :content="item.name" placement="top" v-if="">-->
+              <!--<p>{{item.name}}</p>-->
+            <!--</el-tooltip>-->
+            <p>{{item.name}}</p>
+            <p @click="pageTypeClickMin(2,item)">查看</p>
+            <p @click="delItem(index)">删除</p>
+          </div>
+        </div>
+      </el-form>
+      <div class="bottom-button">
+        <!--<p class="reset-button-one" @click="backPage">取消</p>-->
+        <p class="inquire-button-one" @click="buttonClick">提交</p>
+      </div>
+    </div>
+    <preview-page :previewData="previewData" v-if="pageType == 2"></preview-page>
+  </div>
+</template>
+
+<script>
+  import {
+    gradeManageWorkFinish
+  } from "@/api/hierarchicalControl/indexDemo";
+  import { getToken } from "@/utils/auth";
+  import previewPage from "./previewPage.vue"
+  export default {
+    name: "addPage",
+    components: {
+      previewPage
+    },
+    props:{
+      addData:{},
+    },
+    data() {
+      return {
+        pageType:1,
+        uploadImgUrl: this.uploadUrl(), // 上传的图片服务器地址
+        headers: {
+          Authorization: "Bearer " + getToken(),
+        },
+        upDataName:[],
+        form:{
+          textarea:"",
+          list:[],
+        },
+        // 表单校验
+        rules: {
+          textarea: [
+            { required: true, message: "请输入执行描述", trigger: "blur" },
+            { required: true, message: "请输入执行描述", validator: this.spaceJudgment, trigger: "blur" }
+          ],
+          list: [
+            { required: true, message: "请上传执行材料", trigger: "blur" },
+            { required: true, message: "请上传执行材料", validator: this.spaceJudgment, trigger: "blur" }
+          ],
+        },
+        previewData:{},
+        documentType:false,
+        videoType:false,
+        pictureType:false,
+        indexOfList:[],
+      }
+    },
+    created() {
+      // this.$set(this,'form',this.addData.detail)
+    },
+    mounted(){
+      let self = this;
+      let list = this.addData.minItem.fileFormat.split(',');
+      for(let i=0;i<list.length;i++){
+        if(list[i] == '1'){
+          self.documentType = true;
+          self.indexOfList.push('application/pdf');
+          self.indexOfList.push('application/msword');
+          self.indexOfList.push('application/vnd.openxmlformats-officedocument.wordprocessingml.document');
+          self.indexOfList.push('application/vnd.ms-powerpoint');
+          self.indexOfList.push('application/vnd.openxmlformats-officedocument.presentationml.presentation');
+        }else if(list[i] == '2'){
+          self.videoType = true;
+          self.indexOfList.push('video/mp4');
+        }else if(list[i] == '3'){
+          self.pictureType = true;
+          self.indexOfList.push('image/png');
+          self.indexOfList.push('image/jpeg');
+          self.indexOfList.push('image/gif');
+        }
+      }
+    },
+    methods: {
+      //提交
+      buttonClick(){
+        let self = this;
+        this.$refs["form"].validate(valid => {
+          if (valid) {
+            this.$confirm('是否确认提交?', "警告", {
+              confirmButtonText: "确定",
+              cancelButtonText: "取消",
+              type: "warning"
+            }).then(function() {
+              let obj = {
+                subId:self.addData.bigItem.subId,
+                ruleId:self.addData.minItem.ruleId,
+                ruleUserId:self.addData.minItem.ruleUserId,
+                isUpload:self.addData.minItem.isUpload,
+                endDate:self.addData.minItem.endDate,
+                detail:{
+                  remark:self.form.textarea,
+                  imgUrl:"",
+                  imgName:"",
+                },
+                ruleType:self.addData.minItem.ruleType
+              };
+              if(self.form.list[0]){
+                for(let i=0;i<self.form.list.length;i++){
+                  obj.detail.imgUrl = obj.detail.imgUrl + self.form.list[i].url + ','
+                  obj.detail.imgName = obj.detail.imgName + self.form.list[i].name + ','
+                }
+              }
+              gradeManageWorkFinish(obj).then( response => {
+                self.msgSuccess("操作成功");
+                self.$parent.pageTypeClick(1);
+              });
+            }).then(() => {
+            }).catch(() => {});
+          }
+        });
+      },
+      pageTypeClickMin(type,item){
+        if (type == 1){
+          this.pageType = 1;
+          this.previewData = {};
+        } else {
+          this.previewData = item;
+          this.pageType = 2;
+        }
+      },
+      //返回
+      backPage(){
+        this.$parent.pageTypeClick(1);
+      },
+      //删除上传项
+      delItem(index){
+        this.$confirm('是否确认删除?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+        }).then(() => {
+          this.form.list.splice(index,1);
+          this.$forceUpdate();
+        }).catch(() => {});
+      },
+      //上传相关
+      handleAvatarSuccess(res) {
+        if(this.form.list.length>4){
+          this.$message.error('最多上传5个文件');
+          return
+        }
+        let obj ={
+          name:this.upDataName,
+          url:res.data.url,
+        };
+        this.form.list.push(obj);
+        this.$forceUpdate()
+      },
+      beforeAvatarUpload(file) {
+        let type = false;
+        if(this.indexOfList.indexOf(file.type) == -1){
+          this.$message.error('上传文件格式错误');
+          type = false;
+        }else{
+          if(this.form.list.length>4){
+            this.$message.error('最多上传5个文件');
+            type = false;
+          }else{
+            this.upDataName = file.name;
+            type = true;
+          }
+        }
+        if(this.form.list.length>4){
+          this.$message.error('最多上传5个文件');
+          type = false;
+        }
+        return type;
+      },
+    }
+  }
+</script>
+
+<style lang="scss" scoped>
+  .gradeManageRecord-addPage{
+    flex:1;
+    display: flex!important;
+    flex-direction: column;
+    *{
+      margin:0;
+      padding:0;
+    }
+    .gradeManageRecord-addPage-min{
+      flex:1;
+      display: flex!important;
+      flex-direction: column;
+      margin:5px 20px 20px 10px!important;
+      box-shadow: 0 0 8px 2px rgba(0, 0, 0, 0.1)!important;
+      border-radius:10px;
+      .title-max-box{
+        display: flex;
+        border-bottom:1px solid #dedede;
+        padding:0 20px!important;
+        p:nth-child(1){
+          flex:1;
+          font-size:18px;
+          line-height:80px;
+          color:#0045AF;
+        }
+        p:nth-child(2){
+          margin-top:20px;
+        }
+      }
+      .add-form-box{
+        padding:0 20px!important;
+
+      }
+      .top-subject-box{
+        display: flex;
+        margin:30px 0 0 50px;
+        padding:0 20px!important;
+        p:nth-child(1){
+          line-height:30px;
+          padding:0 16px;
+          border-radius:6px;
+          font-size:14px;
+          font-weight:500;
+          margin-right:18px;
+        }
+        p:nth-child(2){
+          line-height:30px;
+          font-size:16px;
+          color:#333;
+          margin-right:18px;
+        }
+        p:nth-child(3){
+          line-height:30px;
+          font-size:14px;
+          color:#333;
+          font-weight:500;
+        }
+      }
+      .top-info-box{
+        display: flex;
+        padding:0 20px!important;
+        .info-text-box{
+          /*display: inline-block;*/
+          flex:1;
+          /*width:280px;*/
+          margin-top:30px;
+          div{
+            display: flex;
+            p{
+              font-size:14px;
+              font-weight: 500;
+            }
+            p:nth-child(1){
+              width:120px;
+              text-align: right;
+              color:#999;
+            }
+            p:nth-child(2){
+              flex:1;
+              color:#333;
+            }
+            .tableTypeColorA{
+              color:#FF6464!important;
+            }
+          }
+        }
+      }
+      .title-max-box{
+        font-size:18px;
+        line-height:80px;
+        color:#0045AF;
+        border-bottom:1px solid #dedede;
+      }
+      .avatar-uploader{
+        .left-button{
+          width:200px;
+        }
+      }
+      .right-for-max-box{
+        margin:30px 0 0 80px;
+        overflow: hidden;
+        .right-for-min-box{
+          padding:0 11px;
+          margin:0 20px 20px 0;
+          border-radius:4px;
+          display: flex;
+          p{
+            font-weight:500;
+            font-size:12px;
+          }
+          p:nth-child(1){
+            width:300px;
+            color:#333;
+            display:block;
+            overflow:hidden;
+            text-overflow:ellipsis;
+            white-space:nowrap;
+          }
+          p:nth-child(2){
+            color:#0183FA;
+            margin:0 30px 0 60px;
+            cursor: pointer;
+          }
+          p:nth-child(3){
+            color:#0183FA;
+            cursor: pointer;
+
+          }
+        }
+      }
+      .bottom-button{
+        display: flex;
+        margin:40px auto;
+        p{
+          font-size:14px;
+        }
+        p:nth-child(1){
+          margin-right:30px;
+        }
+      }
+      .upload-max-box{
+        display: flex;
+        .right-upload-box{
+          margin-left:30px;
+          color:#9E9E9E;
+          font-size:14px;
+          font-weight:500;
+          padding-top:50px;
+          p{
+            margin:0;
+            line-height:30px;
+          }
+
+        }
+      }
+    }
+  }
+</style>

+ 350 - 0
src/views/hierarchicalControl/gradeManageWork/index.vue

@@ -0,0 +1,350 @@
+<!--分级管控工作-->
+<template>
+  <div class="gradeManageRecord">
+    <!--<div class="top-button-box" v-if="pageType == 1">-->
+      <!--<p>您当前有1条管控工作需要完成,请点击查看详情</p>-->
+      <!--<p>立即完成</p>-->
+      <!--<i class="el-icon-circle-close"></i>-->
+    <!--</div>-->
+    <div class="gradeManageRecord-page " v-if="pageType == 1">
+      <el-form :model="queryParams" ref="queryForm" style="padding-bottom:20px;border-bottom:1px solid #dedede;margin-bottom:20px;" :inline="true" v-show="showSearch" label-width="80px">
+        <el-form-item label="关键字" prop="subName" label-width="60px">
+          <el-input
+            style="width:150px;"
+            v-model="queryParams.subName"
+            placeholder="实验室名称"
+            size="small"
+          />
+        </el-form-item>
+        <el-form-item label="学院" prop="deptId" label-width="56px">
+          <el-select v-model="queryParams.deptId" placeholder="请选择学院" clearable style="width:150px;">
+            <el-option
+              v-for="dict in deptList"
+              :key="dict.deptId"
+              :label="dict.deptName"
+              :value="dict.deptId"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="安全分类" prop="typeId">
+          <el-select v-model="queryParams.typeId" placeholder="请选择安全分类" clearable style="width:150px;">
+            <el-option
+              v-for="dict in typeList"
+              :key="dict.id"
+              :label="dict.typeName"
+              :value="dict.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="安全分级" prop="level">
+          <el-select v-model="queryParams.level" placeholder="请选择安全分级" clearable style="width:150px;">
+            <el-option
+              v-for="dict in levelList"
+              :key="dict.id"
+              :label="dict.classifiedName"
+              :value="dict.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="执行周期" prop="cycle">
+          <el-select v-model="queryParams.cycle" placeholder="请选择执行周期" clearable style="width:150px;">
+            <el-option
+              v-for="dict in cycleList"
+              :key="dict"
+              :label="dict"
+              :value="dict"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <!--<el-form-item label="执行时间" prop="carryTime">-->
+        <!--<el-date-picker-->
+        <!--:clearable="false"-->
+        <!--v-model="createTimeDate"-->
+        <!--size="small"-->
+        <!--style="width: 240px"-->
+        <!--value-format="yyyy-MM-dd"-->
+        <!--type="daterange"-->
+        <!--range-separator="-"-->
+        <!--start-placeholder="开始日期"-->
+        <!--end-placeholder="结束日期"-->
+        <!--&gt;</el-date-picker>-->
+        <!--</el-form-item>-->
+        <el-form-item>
+          <p class="inquire-button-one" style="margin:0 20px;" @click="handleQuery">查询</p>
+          <p class="reset-button-one" @click="resetQuery">重置</p>
+        </el-form-item>
+      </el-form>
+      <div class="for-max-big-box scrollbar-box">
+        <img v-if="!gradeManageList[0]" src="@/assets/ZDimages/basicsModules/null-data-1.png" style="width:300px;margin:200px auto;display: block">
+        <div class="for-max-box" v-for="(item,index) in gradeManageList" :key="index">
+          <div class="for-title-box">
+            <div class="for-title-type-box" :style="'color:'+item.levelColor+';border:1px solid '+item.levelColor+';'" v-if="item.levelName">
+              <!--<p>{{item.typeName}}</p>-->
+              <p>{{item.levelName}}</p>
+            </div>
+            <p class="for-title-name-p">{{item.subName}}</p>
+            <p class="for-title-dept-p">学院:{{item.deptName}}</p>
+          </div>
+          <el-table :data="item.detailList" border class="table-box">
+            <el-table-column label="规则名称" align="left" prop="ruleName" />
+            <!--<el-table-column label="截止执行时间" align="left" prop="endDate" width="200">-->
+            <!--<template slot-scope="scope">{{scope.row.endDate?scope.row.endDate:'-'}}</template>-->
+            <!--</el-table-column>-->
+            <el-table-column label="执行周期" align="left" prop="cycle" width="230"/>
+            <el-table-column label="截止执行时间" align="left" prop="carryTime" width="300">
+              <template slot-scope="scope">{{scope.row.endDate?scope.row.endDate:'-'}}</template>
+            </el-table-column>
+            <el-table-column label="操作" align="left" prop="text1" width="110">
+              <template slot-scope="scope">
+                <div class="table-button-box">
+                  <p class="table-button-null"></p>
+                  <p class="table-button-p" @click="pageTypeClick(2,item,scope.row)">完成</p>
+                  <p class="table-button-null"></p>
+                </div>
+              </template>
+            </el-table-column>
+          </el-table>
+        </div>
+      </div>
+    </div>
+    <add-page v-if="pageType == 2" :addData="addData"></add-page>
+    <info-page v-if="pageType == 3" :recordId="recordId"></info-page>
+  </div>
+</template>
+
+<script>
+import {
+  gradeManageWorkList, listDepartments,
+  listClassifiedAll, listClasstypeAll
+} from "@/api/hierarchicalControl/indexDemo";
+import addPage from "./addPage.vue"
+import infoPage from "./infoPage.vue"
+export default {
+  name: "GradeManageWork",
+  components: {
+    addPage,
+    infoPage
+  },
+  data() {
+    return {
+      pageType:1,
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 分级��控管理表格数据
+      gradeManageList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        deptId: null,
+        deptName: null,
+        userId: null,
+        level: null,
+        typeId: null,
+        subIds: null
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+      },
+      //提交传参
+      addData:{},
+      recordId:"",
+      deptList:[],
+      levelList:[],
+      typeList:[],
+      cycleList:['一天','一周','一月','季度','半年','一年'],
+    };
+  },
+  created() {
+    this.gradeManageWorkList();
+    this.listDepartments();
+    this.getListClassifiedAll();
+    this.getListClasstypeAll();
+  },
+  methods: {
+    //获取学院
+    listDepartments(){
+      listDepartments().then(response => {
+        this.deptList = response.data;
+      });
+    },
+    //查询安全分级
+    getListClassifiedAll(){
+      listClassifiedAll().then(response=>{
+        if(response.code==200){
+          this.levelList=response.data
+        }
+      })
+    },
+    //查询安全分类
+    getListClasstypeAll(){
+      listClasstypeAll().then(response=>{
+        if(response.code==200){
+          this.typeList=response.data;
+        }
+      });
+    },
+    handleQuery() {
+      this.gradeManageWorkList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.createTimeDate = []
+      // this.resetForm("queryForm");
+      this.$set(this,'queryParams',{
+        subName: "",
+        deptId: "",
+        typeId: "",
+        level:"",
+        cycle:"",
+      });
+      this.handleQuery();
+    },
+    gradeManageWorkList(){
+      gradeManageWorkList(this.queryParams).then( response => {
+        this.gradeManageList = response.data
+      });
+    },
+    pageTypeClick(type,item,row){
+      if(this.pageType != type){
+        if(type == 1){
+          this.pageType = 1;
+          this.gradeManageWorkList();
+        }else if(type == 2){
+          let obj = {
+            bigItem:item,
+            minItem:row
+          };
+          this.addData = JSON.parse(JSON.stringify(obj));
+          this.pageType = 2;
+        }
+      }
+      // if(this.pageType != type){
+        // if(type == 1){
+        //   this.gradeManageWorkList();
+        //   this.pageType = 1;
+        // }else if(type == 2){
+          // if(row.status==1){
+          //   let obj = {
+          //     subId:item.subId,
+          //     ruleId:row.ruleId,
+          //     ruleUserId:row.ruleUserId,
+          //     isUpload:row.isUpload,
+          //     endDate:row.endDate,
+          //     detail:{
+          //       remark:"",
+          //       imgUrl:"",
+          //     },
+          //     ruleType:row.ruleType
+          //   };
+          //   this.addData = JSON.parse(JSON.stringify(obj));
+          //   this.pageType = 2;
+          // }else if(row.status==2){
+          //   this.recordId = row.recordId;
+          //   this.pageType = 3;
+          // }
+        // }
+      // }
+    },
+
+  }
+};
+</script>
+
+<style lang="scss" scoped>
+  .gradeManageRecord{
+    flex:1;
+    display: flex!important;
+    flex-direction: column;
+    overflow: hidden;
+    *{
+      margin:0;
+      padding:0;
+    }
+    .top-button-box{
+      display: flex;
+      background: #CCE6FE ;
+      border-radius:10px;
+      height:60px;
+      margin:5px 20px 0 10px;
+      p{
+        line-height: 60px;
+        font-size:14px;
+        font-weight:500;
+        color:#0183FA;
+      }
+      p:nth-child(1){
+        flex:1;
+        margin-left:28px;
+      }
+      p:nth-child(2){
+        cursor: pointer;
+      }
+      i:nth-child(3){
+        line-height: 60px;
+        color:#0256FF ;
+        font-size:22px;
+        margin:0 33px;
+        cursor: pointer;
+      }
+    }
+    .gradeManageRecord-page{
+      flex:1;
+      display: flex!important;
+      flex-direction: column;
+      padding:20px 20px!important;
+      margin:5px 20px 20px 10px;
+      /*margin:20px 20px 20px 10px;*/
+      box-shadow: 0 0 8px 2px rgba(0, 0, 0, 0.1);
+      border-radius:10px;
+      overflow: hidden;
+      .for-max-big-box{
+        .for-max-box{
+          .for-title-box{
+            display: flex;
+            margin-bottom:20px;
+            .for-title-type-box{
+              padding:0 20px;
+              border-radius:4px;
+              margin-right:20px;
+              p{
+                text-align: center;
+                font-size:16px;
+                font-weight:500;
+                line-height:30px;
+              }
+            }
+            .for-title-name-p{
+              margin:0 45px 0 0;
+              line-height:32px;
+              font-size:16px;
+              font-weight:500;
+            }
+            .for-title-dept-p{
+              line-height:32px;
+              font-size:16px;
+              font-weight:500;
+            }
+          }
+          .table-box{
+            margin-bottom: 20px;
+          }
+        }
+      }
+    }
+  }
+</style>

+ 287 - 0
src/views/hierarchicalControl/gradeManageWork/infoPage.vue

@@ -0,0 +1,287 @@
+<template>
+  <div class="gradeManageRecord-infoPage scrollbar-box" v-if="infoData">
+    <div class="title-max-box">
+      <p>基本信息</p>
+      <p class="reset-button-one" @click="backPage">返回</p>
+    </div>
+    <div class="top-subject-box">
+      <p :style="'color:'+infoData.fiedColor+';border:1px solid ;'+infoData.fiedColor+';'">{{infoData.levelName}}</p>
+      <p>{{infoData.subName}}</p>
+      <p>{{infoData.typeName}}</p>
+    </div>
+    <div class="top-info-box">
+      <div class="info-text-box">
+        <div>
+          <p>学院:</p>
+          <p>{{infoData.ruleName}}</p>
+        </div>
+      </div>
+      <div class="info-text-box">
+        <div>
+          <p>执行周期:</p>
+          <p>{{infoData.subName}}</p>
+        </div>
+      </div>
+      <div class="info-text-box">
+        <div>
+          <p>执行方式:</p>
+          <p>{{infoData.status==1?'未执行':(infoData.status==2?'已执行':'')}}</p>
+        </div>
+      </div>
+      <div class="info-text-box">
+        <div>
+          <p>执行截止时间:</p>
+          <p :class="infoData.status == 0?'tableTypeColorA':''">{{infoData.nickName}}</p>
+        </div>
+      </div>
+      <!--<div class="info-text-box">-->
+      <!--<div>-->
+      <!--<p>执行人身份:</p>-->
+      <!--<p>{{infoData.userPosition}}</p>-->
+      <!--</div>-->
+      <!--</div>-->
+      <!--<div class="info-text-box">-->
+      <!--<div>-->
+      <!--<p>截止执行时间:</p>-->
+      <!--<p>{{infoData.endTime}}</p>-->
+      <!--</div>-->
+      <!--</div>-->
+    </div>
+    <div class="top-info-box">
+      <div class="info-text-box">
+        <div>
+          <p>规则名称:</p>
+          <p>{{infoData.ruleName}}</p>
+        </div>
+      </div>
+      <div class="info-text-box">
+        <div>
+          <p>规则描述:</p>
+          <p>{{infoData.subName}}</p>
+        </div>
+      </div>
+    </div>
+    <div class="title-max-box">
+      <p>执行信息</p>
+    </div>
+    <!--<div class="bottom-item-box">-->
+    <!--<p>实际执行时间:</p>-->
+    <!--<p>{{infoData.carryTime}}</p>-->
+    <!--</div>-->
+    <!--<div class="bottom-item-box" v-if="infoData.detail">-->
+    <!--<p>执行描述:</p>-->
+    <!--<p>{{infoData.detail.remark}}</p>-->
+    <!--</div>-->
+    <div class="bottom-item-box" v-if="infoData.detail">
+      <p>指定执行人员:</p>
+      <p>{{infoData.detail.remark}}</p>
+    </div>
+    <div class="bottom-for-box" v-if="infoData.detail">
+      <p class="left-name-p">执行材料:</p>
+      <div class="right-max-box" v-if="infoData.detail.imgUrl">
+        <p :class="iframeIndex == index ?'colorA':'colorB'" v-for="(item,index) in infoData.detail.imgUrlList" :key="index" @click="iframeClick(item,index)">{{item.name}}</p>
+        <!--<a :href="item.url" v-for="(item,index) in infoData.detail.imgUrlList" :key="index">{{item.name}}</a>-->
+      </div>
+    </div>
+    <iframe
+      class="iframe-box"
+      :src="iframeSrc" scrolling="auto" frameborder="0">
+    </iframe>
+  </div>
+</template>
+
+<script>
+import {
+  gradeManageWorkInfo
+} from "@/api/hierarchicalControl/indexDemo";
+  export default {
+    name: "infoPage",
+    props:{
+      recordId:{},
+    },
+    data() {
+      return {
+        iframeSrc:"",
+        iframeIndex:0,
+        infoData:null
+      }
+    },
+    created() {
+
+    },
+    mounted(){
+      this.gradeManageWorkInfo();
+    },
+    methods: {
+      //点击切换文件
+      iframeClick(item,index){
+        this.iframeSrc = this.urlJudge(item.url);
+        this.iframeIndex = index;
+      },
+      gradeManageWorkInfo(){
+        gradeManageWorkInfo(this.recordId).then( response => {
+          if(response.data.detail.imgUrl){
+            response.data.detail.imgUrlList = [];
+            let nameList = response.data.detail.imgName.split(',')
+            let urlList = response.data.detail.imgUrl.split(',')
+            for(let i=0;i<urlList.length;i++){
+              if(urlList[i] !='' && urlList[i] != undefined){
+                let obj = {
+                  name:nameList[i],
+                  url:urlList[i],
+                };
+                response.data.detail.imgUrlList.push(obj)
+              }
+            }
+            if(response.data.detail.imgUrlList[0]){
+              this.iframeSrc = this.urlJudge(response.data.detail.imgUrlList[0].url);
+              this.iframeIndex = 0;
+            }
+          }
+          this.infoData = response.data;
+        });
+      },
+      //返回
+      backPage(){
+        this.$parent.pageTypeClick(1);
+      },
+    }
+
+  }
+</script>
+
+<style lang="scss" scoped>
+  .gradeManageRecord-infoPage{
+    flex:1;
+    display: flex!important;
+    flex-direction: column;
+    padding:0 20px!important;
+    margin:5px 20px 20px 10px!important;
+    box-shadow: 0 0 8px 2px rgba(0, 0, 0, 0.1)!important;
+    border-radius:10px;
+    *{
+      margin:0;
+      padding:0;
+    }
+    .title-max-box{
+      display: flex;
+      border-bottom:1px solid #dedede;
+      p:nth-child(1){
+        flex:1;
+        font-size:18px;
+        line-height:80px;
+        color:#0045AF;
+      }
+      p:nth-child(2){
+        margin-top:20px;
+      }
+    }
+    .top-subject-box{
+      display: flex;
+      margin:30px 0 0 50px;
+      p:nth-child(1){
+        line-height:30px;
+        padding:0 16px;
+        border-radius:6px;
+        font-size:14px;
+        font-weight:500;
+        margin-right:18px;
+      }
+      p:nth-child(2){
+        line-height:30px;
+        font-size:16px;
+        color:#333;
+        margin-right:18px;
+      }
+      p:nth-child(3){
+        line-height:30px;
+        font-size:14px;
+        color:#333;
+        font-weight:500;
+      }
+    }
+    .top-info-box{
+      display: flex;
+      .info-text-box{
+        /*display: inline-block;*/
+        flex:1;
+        /*width:280px;*/
+        margin-top:30px;
+        div{
+          display: flex;
+          p{
+            font-size:14px;
+            font-weight: 500;
+          }
+          p:nth-child(1){
+            width:120px;
+            text-align: right;
+            color:#999;
+          }
+          p:nth-child(2){
+            flex:1;
+            color:#333;
+          }
+          .tableTypeColorA{
+            color:#FF6464!important;
+          }
+        }
+      }
+    }
+    .bottom-item-box{
+      display: flex;
+      margin-top:30px;
+      p{
+        font-size:14px;
+        font-weight:500;
+      }
+      p:nth-child(1){
+        width:120px;
+        text-align: right;
+        color: #999;
+      }
+      p:nth-child(2){
+        flex:1;
+        color:#333;
+      }
+    }
+    .bottom-for-box{
+      display: flex;
+      margin-top:30px;
+      .left-name-p{
+        width:120px;
+        text-align: right;
+        line-height:30px;
+        font-weight: 500;
+        font-size:14px;
+        color:#999999;
+      }
+      .right-max-box{
+        flex:1;
+        p{
+          font-weight: 500;
+          display: inline-block;
+          padding: 0 20px;
+          line-height:30px;
+          font-size:14px;
+          cursor: pointer;
+          border-radius:4px;
+          margin:0 20px 20px 0;
+        }
+        .colorA{
+          background: rgba(204,230,254,1);
+          color:#0183FA;
+        }
+        .colorB{
+          background: #e0e0e0;
+          color:#999;
+        }
+      }
+    }
+    .iframe-box{
+      margin:20px 40px;
+      width:1100px;
+      height:800px;
+    }
+  }
+</style>

+ 78 - 0
src/views/hierarchicalControl/gradeManageWork/previewPage.vue

@@ -0,0 +1,78 @@
+<template>
+  <div class="previewPage">
+    <div class="title-box">
+      <p>{{previewData.name}}</p>
+      <p class="reset-button-one" @click="backPage">返回</p>
+    </div>
+    <div class="info-box" v-if="iframeSrc">
+      <iframe
+        class="iframe"
+        :src="iframeSrc" scrolling="auto" frameborder="0">
+      </iframe>
+    </div>
+  </div>
+</template>
+
+<script>
+  export default {
+    name: "previewPage",
+    props:{
+      previewData:{},
+    },
+    data(){
+      return{
+        iframeSrc:"",
+      }
+    },
+    mounted(){
+      this.iframeSrcFunction();
+    },
+    methods: {
+      iframeSrcFunction(){
+        this.iframeSrc = this.urlJudge(this.previewData.url);
+      },
+      // 返回按钮
+      backPage(){
+        this.$parent.pageTypeClickMin(1);
+      },
+    }
+  }
+</script>
+
+<style lang="scss" scoped>
+  .previewPage{
+    flex:1;
+    display: flex!important;
+    flex-direction: column;
+    margin:5px 20px 20px 10px!important;
+    box-shadow: 0 0 8px 2px rgba(0, 0, 0, 0.1)!important;
+    border-radius:10px;
+    *{
+      margin:0;
+    }
+    .title-box{
+      display: flex;
+      border-bottom:1px solid #dedede;
+      p:nth-child(1){
+        flex:1;
+        font-size:18px;
+        line-height:80px;
+        color:#0045AF;
+        padding-left:20px;
+      }
+      p:nth-child(2){
+        margin:20px;
+      }
+    }
+    .info-box{
+      margin:20px;
+      overflow-y: scroll;
+      flex:1;
+      display: flex;
+      flex-direction: column;
+      iframe{
+        flex:1;
+      }
+    }
+  }
+</style>

+ 0 - 284
src/views/hierarchicalControl/workExecute/index.vue

@@ -1,284 +0,0 @@
-<!-- 工作执行 -->
-<template>
-  <div class="app-container workExecute">
-    <div class="page-container workExecutePage" v-if="pageType === 1">
-      <div class="page-form-title-box">
-        <el-form :model="queryParams" class="form-box" ref="queryForm"
-                 :inline="true" style="width:100%;">
-          <el-form-item label="" prop="name">
-            <el-input
-              maxLength="30"
-              v-model="queryParams.name"
-              placeholder="管控名称"
-              style="width: 200px"
-            />
-          </el-form-item>
-          <el-form-item label="" prop="deptId">
-            <el-select v-model="queryParams.deptId" placeholder="二级单位" style="width: 200px">
-              <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="typeId">
-            <el-select v-model="queryParams.typeId" placeholder="安全分类" style="width: 200px">
-              <el-option
-                v-for="dict in typeList"
-                :key="dict.typeId"
-                :label="dict.typeName"
-                :value="dict.typeId"
-              ></el-option>
-            </el-select>
-          </el-form-item>
-          <el-form-item label="" prop="levelId">
-            <el-select v-model="queryParams.levelId" placeholder="安全分级" style="width: 200px">
-              <el-option
-                v-for="dict in levelList"
-                :key="dict.levelId"
-                :label="dict.levelName"
-                :value="dict.levelId"
-              ></el-option>
-            </el-select>
-          </el-form-item>
-          <p class="page-inquire-common-style-button" @click="handleQuery">查询</p>
-          <p class="page-reset-common-style-button" @click="resetQuery">重置</p>
-        </el-form>
-      </div>
-      <div class="page-content-box">
-        <el-table class="table-box" v-loading="loading" border :data="dataList">
-          <el-table-column label="管控名称" prop="name"  show-overflow-tooltip/>
-          <el-table-column label="二级单位" prop="deptName" width="160" show-overflow-tooltip/>
-          <el-table-column label="安全分类" prop="typeName" width="160" show-overflow-tooltip/>
-          <el-table-column label="安全分级" prop="levelName" width="160" show-overflow-tooltip/>
-          <el-table-column label="执行状态" prop="status" width="100" show-overflow-tooltip>
-            <template slot-scope="scope">
-              <span :class="scope.row.status == 1?'colorA':'colorB'">{{scope.row.status == 1?'已执行':'未执行'}}</span>
-            </template>
-          </el-table-column>
-          <el-table-column label="创建人" prop="createUser" width="200" show-overflow-tooltip/>
-          <el-table-column label="实验室" prop="subName" width="160" show-overflow-tooltip>
-            <template slot-scope="scope">{{scope.row.subName?scope.row.subName:'--'}}</template>
-          </el-table-column>
-          <el-table-column label="创建时间" prop="createTime" width="150" show-overflow-tooltip>
-            <template slot-scope="scope">
-              <span>{{ parseTime(scope.row.createTime,"{y}-{m}-{d} {h}:{i}") }}</span>
-            </template>
-          </el-table-column>
-          <el-table-column label="截止时间" prop="deadline" width="150" show-overflow-tooltip>
-            <template slot-scope="scope">
-              <span>{{ scope.row.deadline?parseTime(scope.row.deadline,"{y}-{m}-{d}"):'--' }}</span>
-              <span style="margin-left:5px;color:red;" v-if="scope.row.deadlineNum&&deadlineNum>scope.row.deadlineNum">已逾期</span>
-            </template>
-          </el-table-column>
-          <el-table-column label="操作" width="140" show-overflow-tooltip>
-            <template slot-scope="scope">
-              <div class="table-button-box">
-                <p class="table-button-null"></p>
-                <p class="table-button-p"
-                   v-if="scope.row.status == 1"
-                   @click="tableButton(2,scope.row)"
-                >详情</p>
-                <p class="table-button-p"
-                   v-if="scope.row.status == 0"
-                   @click="tableButton(3,scope.row)"
-                >执行</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.page"
-                    :limit.sync="queryParams.pageSize"
-                    @pagination="getList"
-        />
-      </div>
-    </div>
-    <info-page :propsData="propsData" v-if="pageType === 2"></info-page>
-  </div>
-</template>
-<script>
-  import {
-    getDeptDropList,
-    laboratoryClassTypeGetList,
-    laboratoryClassLevelGetList,
-  } from '@/api/commonality/permission'
-  import { laboratoryGradeManageList } from "@/api/hierarchicalControl/index";
-  import infoPage from "./infoPage.vue";
-  export default {
-    name: 'index',
-    components: {
-     infoPage
-    },
-    data () {
-      return {
-        //页面状态
-        pageType:1,
-        //页面遮罩
-        loading:false,
-        //下拉列表数据
-        deptOptions:[],
-        typeList:[],
-        levelList:[],
-        //查询条件
-        queryParams:{
-          page:1,
-          pageSize:20,
-          name:"",
-          deptId :null,
-          typeId :null,
-          levelId :null,
-          status :0,
-        },
-        meUserId:localStorage.getItem('userId'),
-        //时间数据
-        dateRange:[],
-        //列表数据
-        dataList:[],
-        //数据数量
-        total:0,
-        //组件传参
-        propsData:{},
-        deadlineNum:null,
-      }
-    },
-    created () {
-
-    },
-    mounted () {
-      const now = new Date();
-      let yy = now.getFullYear()+'-'+now.getMonth()+'-'+now.getDate()
-      this.$set(this,'deadlineNum',new Date(yy).getTime());
-      this.getDeptDropList();
-      this.laboratoryClassTypeGetList();
-      this.laboratoryClassLevelGetList();
-      this.getList();
-    },
-    methods: {
-      //查询按钮
-      handleQuery(){
-        this.$set(this.queryParams,'page',1);
-        this.getList();
-      },
-      //重置按钮
-      resetQuery(){
-        this.$set(this,'dateRange',[])
-        this.$set(this,'queryParams',{
-          page:1,
-          pageSize:20,
-          name:"",
-          deptId :null,
-          typeId :null,
-          levelId :null,
-          status :0,
-        });
-        this.getList();
-      },
-      //获取数据列表
-      getList(){
-        let obj = JSON.parse(JSON.stringify(this.queryParams))
-        obj.executionUserId = this.meUserId;
-        laboratoryGradeManageList(obj).then(response => {
-          //返回时间戳
-          for(let i=0;i<response.data.records.length;i++){
-            if(response.data.records[i].deadline){
-              response.data.records[i].deadlineNum = new Date(response.data.records[i].deadline).getTime()
-            }else{
-              response.data.records[i].deadlineNum = false
-            }
-          }
-          this.$set(this,'dataList',response.data.records);
-          this.$set(this,'total',response.data.total);
-        });
-      },
-      //操作按钮
-      tableButton(type,row){
-        let self = this;
-        if(type == 1){
-          //新增
-          this.$set(this,'pageType',2);
-          this.$set(this,'propsData',{});
-        }else if(type == 2){
-          //详情
-          this.$set(this,'pageType',2);
-          let obj = JSON.parse(JSON.stringify(row))
-          obj.showType = true;
-          this.$set(this,'propsData',obj);
-        }else if(type == 3){
-          //编辑
-          this.$set(this,'pageType',2);
-          let obj = JSON.parse(JSON.stringify(row))
-          obj.showType = false;
-          this.$set(this,'propsData',obj);
-        }else if(type == 4){
-          //删除
-          this.$confirm('是否确认删除?', "警告", {
-            confirmButtonText: "确定",
-            cancelButtonText: "取消",
-            type: "warning"
-          }).then(function() {
-          }).then(() => {
-            deleteFunction({id:row.id}).then(response => {
-              self.msgSuccess(response.message)
-              self.getList();
-            });
-          }).catch(() => {});
-        }else if(type == 5){
-          //启用&停用
-          let text = row.state  ? "停用" : "启用";
-          this.$confirm('是否确认' + text + '?', "警告", {
-            confirmButtonText: "确定",
-            cancelButtonText: "取消",
-            type: "warning"
-          }).then(function() {
-          }).then(() => {
-            stateFunction({id:row.id,state:!row.state,}).then(response => {
-              self.msgSuccess(response.message)
-              self.getList();
-            });
-          }).catch(() => {});
-        }else if(type == 6){
-          //返回并刷新
-          this.$set(this,'pageType',1);
-          this.getList();
-        }
-      },
-      /** 查询二级单位列表 */
-      getDeptDropList() {
-        getDeptDropList({ deptName: '', level: 2, deptType: 1 }).then(response => {
-          this.$set(this, 'deptOptions', response.data)
-        })
-      },
-      //查询安全分级
-      laboratoryClassLevelGetList() {
-        laboratoryClassLevelGetList({}).then(response => {
-          this.$set(this, 'levelList', response.data)
-        })
-      },
-      //查询安全分类
-      laboratoryClassTypeGetList() {
-        laboratoryClassTypeGetList({}).then(response => {
-          this.$set(this, 'typeList', response.data)
-        })
-      },
-    },
-  }
-</script>
-<style scoped lang="scss">
-  .workExecute{
-    .workExecutePage{
-
-      .colorA{
-        color:#0183FA;
-      }
-      .colorB{
-        color: #c88400;
-      }
-    }
-  }
-</style>

+ 0 - 167
src/views/hierarchicalControl/workExecute/infoPage.vue

@@ -1,167 +0,0 @@
-<template>
-  <div class="page-container workExecute-infoPage">
-    <div class="page-top-title-box">
-      <p class="page-top-title-name-p">工作执行</p>
-      <p class="page-top-title-out-p" @click="backPage">返回</p>
-      <p class="page-top-title-add-p" v-if="!newData.status" @click="openDialog">完成</p>
-    </div>
-    <div class="content-box scrollbar-box">
-      <el-form class="add-form-box">
-        <div class="text-max-box">
-          <p>管控名称:</p>
-          <p>{{newData.name}}</p>
-        </div>
-        <div class="text-max-box">
-          <p>管控描述:</p>
-          <p>{{newData.manageDes}}</p>
-        </div>
-        <div class="text-max-box">
-          <p>二级单位:</p>
-          <p>{{newData.deptName}}</p>
-        </div>
-        <div class="text-max-box">
-          <p>安全分类:</p>
-          <p>{{newData.typeName}}</p>
-        </div>
-        <div class="text-max-box">
-          <p>安全分级:</p>
-          <p>{{newData.levelName}}</p>
-        </div>
-        <div class="text-max-box">
-          <p>状态:</p>
-          <p :class="newData.status == 1?'colorA':'colorB'">{{newData.status == 1?'已执行':'未执行'}}</p>
-        </div>
-        <div class="text-max-box" v-if="newData.status == 1">
-          <p>执行人:</p>
-          <p>{{newData.executionUser}}</p>
-        </div>
-        <div class="text-max-box" v-if="newData.status == 1">
-          <p>执行时间:</p>
-          <p>{{parseTime(newData.executionTime,"{y}-{m}-{d} {h}:{i}")}}</p>
-        </div>
-        <div class="text-max-box" v-if="newData.status == 1">
-          <p>执行备注:</p>
-          <p>{{newData.remark}}</p>
-        </div>
-      </el-form>
-    </div>
-    <el-dialog class="conditionsSettings-dialog" title='执行完成' width="760px" append-to-body
-               :visible.sync="shadeType" v-if="shadeType" @close="dialogOff()"
-               :close-on-click-modal="false" :close-on-press-escape="false">
-      <div>
-        <el-form :model="addForm" ref="addForm" :inline="true" :rules="rules">
-          <el-form-item label="执行描述" prop="remark">
-            <el-input type="textarea" resize="none" style="width:630px;" show-word-limit
-                      :rows="4"
-                      v-model="addForm.remark" placeholder="请输入执行描述" maxlength="100"/>
-          </el-form-item>
-        </el-form>
-      </div>
-      <div slot="footer" class="dialog-footer dialog-footer-box">
-        <p class="dialog-footer-button-null"></p>
-        <p class="dialog-footer-button-info" @click="dialogOff()">取消</p>
-        <p class="dialog-footer-button-primary" @click="submitForm">提交</p>
-        <p class="dialog-footer-button-null"></p>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-  import { laboratoryGradeManageExecute } from "@/api/hierarchicalControl/index";
-  export default {
-    name: 'infoPage',
-    props:{
-      propsData:{},
-    },
-    data(){
-      return{
-        newData:{},
-        addForm:{
-          remark:'',
-        },
-        rules: {
-          remark: [
-            { required: true, message: "请输入执行描述", trigger: "blur" },
-            { required: true, message: "请输入执行描述", validator: this.spaceJudgment, trigger: "blur" }
-          ],
-        },
-        shadeType:false,
-      }
-    },
-    created(){
-
-    },
-    mounted(){
-      if(this.propsData.id){
-        this.$set(this,'newData',this.propsData);
-      }
-    },
-    methods:{
-      // 返回按钮
-      backPage(){
-        this.$parent.tableButton(6);
-      },
-      /** 提交按钮 */
-      submitForm() {
-        this.$refs["addForm"].validate(valid => {
-          if (valid) {
-            let obj = {
-              id:this.newData.id,
-              remark:this.addForm.remark,
-              status:1,
-            }
-            laboratoryGradeManageExecute(obj).then(response => {
-              this.msgSuccess(response.message)
-              this.backPage();
-            })
-          }
-        })
-      },
-      openDialog(){
-        this.$set(this,'shadeType',true);
-      },
-      dialogOff(){
-        this.$set(this,'shadeType',false);
-        this.$set(this.addForm,'executeDescribe','');
-      },
-    },
-  }
-</script>
-
-<style scoped lang="scss">
-  .workExecute-infoPage{
-    .content-box{
-      flex:1;
-      display: flex;
-      padding:20px;
-      .text-max-box{
-        display: flex;
-        p{
-          font-size: 16px;
-          line-height:40px;
-        }
-        p:nth-child(1){
-          width:120px;
-          text-align: right;
-        }
-        p:nth-child(2){
-          width:1200px;
-          line-height:20px;
-          padding:10px 0;
-        }
-        .colorA{
-          color:#0183FA;
-        }
-        .colorB{
-          color: #c88400;
-        }
-      }
-      .add-execute-describe-box{
-        margin-top:10px;
-        padding-top:20px;
-        border-top:1px solid #dedede;
-      }
-    }
-  }
-</style>