dedsudiyu 2 роки тому
батько
коміт
2bb1280ad0
21 змінених файлів з 11321 додано та 993 видалено
  1. 2 2
      .env.production
  2. 0 73
      src/api/laboratory/subject.js
  3. 1 1
      src/router/index.js
  4. 233 0
      src/views/comprehensive/laboratoryManagement/accessAuthorization/application_SuZhouDX.vue
  5. 273 0
      src/views/comprehensive/laboratoryManagement/accessAuthorization/authorize_SuZhouDX.vue
  6. 52 0
      src/views/comprehensive/laboratoryManagement/accessAuthorization/index_SuZhouDX.vue
  7. 795 0
      src/views/comprehensive/laboratoryManagement/subject/deviceList_SuZhouDX.vue
  8. 23 13
      src/views/comprehensive/laboratoryManagement/subject/index.vue
  9. 1418 0
      src/views/comprehensive/laboratoryManagement/subject/index_SuZhouDX.vue
  10. 8 3
      src/views/comprehensive/laboratoryManagement/subject/infoPage.vue
  11. 1227 0
      src/views/comprehensive/personnel/student/addPage_SuZhouDX.vue
  12. 1021 0
      src/views/comprehensive/personnel/student/index_SuZhouDX.vue
  13. 1793 0
      src/views/comprehensive/personnel/teacher/addPage_SuZhouDX.vue
  14. 1538 0
      src/views/comprehensive/personnel/teacher/index_SuZhouDX.vue
  15. 556 0
      src/views/medicUniversity-3_1/chemicalManagement/deviceManagement/SmartAccessControl/index_SuZhouDX.vue
  16. 941 0
      src/views/mine/index_SuZhouDX.vue
  17. 116 0
      src/views/secureAccess/approval/index_SuZhouDX.vue
  18. 363 377
      src/views/secureAccess/approval/infoPage.vue
  19. 507 524
      src/views/secureAccess/whitelist/addPage.vue
  20. 176 0
      src/views/secureAccess/whitelist/index_SuZhouDX.vue
  21. 278 0
      src/views/securityCheck/release/index_SuZhouDX.vue

+ 2 - 2
.env.production

@@ -6,9 +6,9 @@ ENV = 'production'
 
 # ####################外网接口配置####################
 
-VUE_APP_BASE_API = 'lab.sxitdlc.com/labAppTest'
+VUE_APP_BASE_API = 'lab.sxitdlc.com/sudalabSystem'
 
 
 # ####################内网接口配置####################
 
-VUE_APP_BASE_LOCAL_API = '192.168.1.43/labSystem'
+VUE_APP_BASE_LOCAL_API = '10.20.10.7/labSystem'

+ 0 - 73
src/api/laboratory/subject.js

@@ -398,76 +398,3 @@ export function viewWarnMessage(query) {
   })
 }
 
-/* 智能门禁----------------- */
-
-//查询门禁授权列表
-export function getHaikangList(data) {
-  return request({
-    url: '/laboratory/haikang/user/subList?pageNum='+data.pageNum+'&pageSize='+data.pageSize,
-    method: 'post',
-    data: data,
-  })
-}
-//查询实验室已授权列表
-export function getHaikangUserList(data) {
-  return request({
-    url: '/laboratory/haikang/user/userList?pageNum='+data.pageNum+'&pageSize='+data.pageSize+'&startTime='+data.startTime+'&endTime='+data.endTime+'&searchValue='+data.searchValue+'&userType='+data.userType,
-    method: 'post',
-    data: data
-  })
-}
-//查询门禁授权类型
-export function getHaikangQueryTypes(data) {
-  return request({
-    url: '/laboratory/haikang/user/queryTypes',
-    method: 'post',
-    data: data
-  })
-}
-//新增用户授权
-export function AddImpowerHaikang(data) {
-  return request({
-    url: '/laboratory/haikang/user/add',
-    method: 'post',
-    data: data
-  })
-}
-//编辑用户授权
-export function editImpowerHaikang(data) {
-  return request({
-    url: '/laboratory/haikang/user/update',
-    method: 'post',
-    data: data
-  })
-}
-//新增用户授权
-export function retryImpowerHaikang(data) {
-  return request({
-    url: '/laboratory/haikang/user/retryAccredit',
-    method: 'post',
-    data: data
-  })
-}
-// 删除用户授权
-export function delUserHaikang(id) {
-  return request({
-    url: '/laboratory/haikang/user/' + id,
-    method: 'delete'
-  })
-}
-//门禁授权日志列表
-export function entranceUserLogList(query) {
-  return request({
-    url: '/laboratory/haikang/userLog/list',
-    method: 'get',
-    params: query
-  })
-}
-//门禁授权日志列表
-export function queryHardByTypeList(query) {
-  return request({
-    url: '/laboratory/hardware/queryHardByType',
-    method: 'get',
-    params: query
-  })
-}

+ 1 - 1
src/router/index.js

@@ -67,7 +67,7 @@ export const constantRoutes = [
   },
   {
     path: '/mine',
-    component: (resolve) => require(['@/views/mine/index'], resolve),
+    component: (resolve) => require(['@/views/mine/index_SuZhouDX'], resolve),
     hidden: true
   },
   {

+ 233 - 0
src/views/comprehensive/laboratoryManagement/accessAuthorization/application_SuZhouDX.vue

@@ -0,0 +1,233 @@
+<!--申请-->
+<template>
+  <div class="application">
+    <div class="application-page" v-if="pageType == 1">
+      <div class="title-box">
+        <div @click="titleClick">
+          <p>门禁授权</p>
+          <p></p>
+        </div>
+        <div>
+          <p class="top-p-color">授权申请</p>
+          <p class="bottom-p-color"></p>
+        </div>
+      </div>
+      <div class="application-min">
+        <el-form :model="queryParamsData" ref="queryForm" :inline="true">
+          <el-form-item label="关键字" prop="searchValue" label-width="68px">
+            <el-input
+              maxlength="20"
+              v-model="queryParamsData.searchValue"
+              placeholder="姓名/实验室"
+              clearable
+              size="small"/>
+          </el-form-item>
+          <el-form-item label="状态" prop="status" label-width="50px">
+            <el-select v-model="queryParamsData.status" clearable placeholder="请选择状态">
+              <el-option
+                v-for="item in optionsListTwo"
+                :key="item.id"
+                :label="item.name"
+                :value="item.id">
+              </el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="申请时间" prop="subjectId" label-width="80px">
+            <el-date-picker
+              :clearable="false"
+              v-model="dateRange"
+              style="width: 240px;height:40px;"
+              value-format="yyyy-MM-dd"
+              type="daterange"
+              range-separator="-"
+              start-placeholder="开始日期"
+              end-placeholder="结束日期"
+            ></el-date-picker>
+          </el-form-item>
+          <el-form-item style="float: right;">
+            <el-col :span="1.5">
+              <p class="inquire-button-one"
+                 style="width:100px;margin-right:0;"
+                 v-hasPermi="['smartlock:openDoorApply:add']"
+                 @click="goPageButton(2)"
+              >授权申请</p>
+            </el-col>
+          </el-form-item>
+          <el-form-item>
+            <p class="inquire-button-one" @click="handleQuery" style="margin-right:10px;">查询</p>
+            <p class="reset-button-one" @click="resetQuery">重置</p>
+          </el-form-item>
+        </el-form>
+        <el-table v-loading="loading" border :data="tableList">
+          <el-table-column label="申请时间" align="center" prop="creatTime" show-overflow-tooltip/>
+          <el-table-column label="申请实验室" align="center" prop="subjectName" show-overflow-tooltip/>
+          <el-table-column label="位置" align="center" prop="position" show-overflow-tooltip v-if="$store.state.settings.smartAlarmType == 1"/>
+          <el-table-column label="所属学院" align="center" prop="college" show-overflow-tooltip/>
+          <el-table-column label="授权人" align="center" prop="safeUserName"  width="160px" show-overflow-tooltip/>
+          <el-table-column label="失效时间" align="center" prop="loseTime" width="160px" show-overflow-tooltip>
+            <template slot-scope="scope">
+              <span>{{scope.row.loseTime!=1?scope.row.loseTime:''}}</span>
+            </template>
+          </el-table-column>
+          <el-table-column label="状态" align="center" prop="applyStatus" width="180px" show-overflow-tooltip>
+            <template slot-scope="scope">
+              <span>{{scope.row.applyStatus==1?'已授权':(scope.row.applyStatus==2?'已失效':'')}}</span>
+            </template>
+          </el-table-column>
+        </el-table>
+        <pagination :page-sizes="[20, 30, 40, 50]"
+                    v-show="total>0"
+                    :total="total"
+                    :page.sync="queryParams.pageNum"
+                    :limit.sync="queryParams.pageSize"
+                    @pagination="getList"/>
+      </div>
+    </div>
+    <addPage v-if="pageType == 2"></addPage>
+  </div>
+</template>
+
+<script>
+  import { applyList } from "@/api/laboratory/subject";
+  import addPage from "./addPage.vue";
+  export default {
+    name: "application",
+    components: {
+      addPage
+    },
+    data(){
+      return{
+        pageType:1,
+        // table操作按钮校验
+        tableButtonType:this.hasPermiDom(['system:user_student:query','system:user_student:query']),
+        loading:false,
+        // 搜索数据
+        queryParamsData:{
+          pageNum:1,
+          pageSize:20,
+        },
+        // 搜索实际发送数据
+        queryParams:{
+          pageNum:1,
+          pageSize:20,
+        },
+        dateRange:[],
+        //数据数量
+        total:10,
+        tableList:[],
+        //审批状态
+        optionsListTwo:[{id:'1',name:'已授权'},{id:'2',name:'已失效'}]
+      }
+    },
+    created() {
+
+    },
+    mounted(){
+      this.getList();
+    },
+    methods:{
+      titleClick(){
+        this.$parent.titleClick(1);
+      },
+      //页面状态切换
+      goPageButton(type){
+        if(type == 1){
+          this.pageType = 1;
+        }else if(type == 2){
+          this.pageType = 2;
+        }else if(type == 3){
+          this.resetQuery();
+          this.pageType = 1;
+        }
+      },
+      /** 搜索按钮操作 */
+      handleQuery() {
+        this.queryParamsData.pageNum = 1;
+        this.queryParamsData.pageSize = 20;
+        this.queryParams = JSON.parse(JSON.stringify(this.queryParamsData));
+        this.getList();
+      },
+      /** 重置按钮操作 */
+      resetQuery() {
+        this.$set(this,'queryParamsData',{});
+        this.$set(this,'queryParams',{});
+        this.$set(this,'dateRange',[]);
+        this.handleQuery();
+      },
+      //获取数据列表
+      getList(){
+        this.queryParamsData = JSON.parse(JSON.stringify(this.queryParams));
+        if(this.dateRange&&this.dateRange.length>0) {
+          this.queryParamsData.startTime = this.dateRange[0];
+          this.queryParamsData.endTime = this.dateRange[1];
+        } else {
+          this.queryParamsData.startTime = null;
+          this.queryParamsData.endTime = null;
+        }
+        applyList(this.queryParamsData).then(response => {
+          this.tableList = response.rows;
+          this.total = response.total
+        });
+      },
+    }
+  }
+</script>
+
+<style scoped lang="scss">
+  .application{
+    flex:1;
+    display: flex;
+    flex-direction: column;
+    .application-page{
+      flex:1;
+      display: flex;
+      flex-direction: column;
+      overflow: hidden;
+      .title-box{
+        display: flex;
+        border-bottom:1px solid #E0E0E0;
+        margin-bottom:20px;
+        div{
+          height:80px;
+          margin-right:20px;
+          cursor: pointer;
+          p:nth-child(1){
+            font-size:18px;
+            text-align: center;
+            padding:0 20px;
+            margin-top:26px;
+          }
+          p:nth-child(2){
+            width:40px;
+            height:4px;
+            border-radius:40px;
+            margin:12px auto;
+          }
+          .top-p-color{
+            color: #0045AF;
+          }
+          .bottom-p-color{
+            background: #0045AF;
+          }
+        }
+        .buttonTitleColorA{
+          color:#0045AF;
+        }
+        .buttonTitleColorB{
+          color:#999999;
+        }
+      }
+      .application-min{
+        flex:1;
+        display: flex;
+        flex-direction: column;
+        overflow: hidden;
+        margin:0 20px!important;
+        .button-box{
+          display: flex;
+        }
+      }
+    }
+  }
+
+</style>

+ 273 - 0
src/views/comprehensive/laboratoryManagement/accessAuthorization/authorize_SuZhouDX.vue

@@ -0,0 +1,273 @@
+<!--授权-->
+<template>
+  <div class="authorize">
+    <div class="authorize-page" v-if="pageType == 1">
+      <div class="title-box">
+        <div>
+          <p class="top-p-color">门禁授权</p>
+          <p class="bottom-p-color"></p>
+        </div>
+        <div @click="titleClick">
+          <p>授权申请</p>
+          <p></p>
+        </div>
+      </div>
+      <div class="authorize-min">
+        <el-form :model="queryParamsData" ref="queryForm" :inline="true">
+          <el-form-item label="关键字" prop="searchValue" label-width="68px">
+            <el-input
+              maxlength="20"
+              v-model="queryParamsData.searchValue"
+              placeholder="姓名/实验室"
+              clearable
+              size="small"/>
+          </el-form-item>
+          <el-form-item label="状态" prop="status" label-width="50px">
+            <el-select v-model="queryParamsData.applyStatus" clearable placeholder="请选择状态">
+              <el-option
+                v-for="item in optionsListTwo"
+                :key="item.id"
+                :label="item.name"
+                :value="item.id">
+              </el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="申请时间" prop="subjectId" label-width="80px">
+            <el-date-picker
+              :clearable="false"
+              v-model="dateRange"
+              style="width: 240px;height:40px;"
+              value-format="yyyy-MM-dd"
+              type="daterange"
+              range-separator="-"
+              start-placeholder="开始日期"
+              end-placeholder="结束日期"
+            ></el-date-picker>
+          </el-form-item>
+          <el-form-item>
+            <p class="inquire-button-one" @click="handleQuery" style="margin-right:10px;">查询</p>
+            <p class="reset-button-one" @click="resetQuery">重置</p>
+          </el-form-item>
+        </el-form>
+        <el-table v-loading="loading" border :data="tableList">
+          <el-table-column label="申请时间" align="center" prop="creatTime" show-overflow-tooltip/>
+          <el-table-column label="申请人" align="center" prop="userName" show-overflow-tooltip/>
+          <el-table-column label="共同申请人" align="center" prop="userName2" show-overflow-tooltip/>
+          <el-table-column label="申请实验室" align="center" prop="subjectName" show-overflow-tooltip/>
+          <el-table-column label="位置" align="center" prop="position" show-overflow-tooltip v-if="$store.state.settings.smartAlarmType == 1"/>
+          <el-table-column label="所属学院" align="center" prop="college" show-overflow-tooltip/>
+          <el-table-column label="授权人" align="center" prop="safeUserName"  width="160px" show-overflow-tooltip/>
+          <el-table-column label="失效时间" align="center" prop="approvalTime" width="160px" show-overflow-tooltip>
+            <template slot-scope="scope">
+              <span>{{scope.row.loseTime!=1?scope.row.loseTime:''}}</span>
+            </template>
+          </el-table-column>
+          <el-table-column label="状态" align="center" prop="applyStatus" width="180px" show-overflow-tooltip>
+            <template slot-scope="scope">
+              <span>{{scope.row.applyStatus==1?'已授权':(scope.row.applyStatus==2?'已失效':'')}}</span>
+            </template>
+          </el-table-column>
+          <!--<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="140" v-if="tableButtonType">-->
+            <!--<template slot-scope="scope">-->
+              <!--<div class="button-box">-->
+                <!--&lt;!&ndash;<p class="table-min-button"  @click="tableButtonClick(scope.row,1)">通过</p>&ndash;&gt;-->
+                <!--&lt;!&ndash;<p class="table-min-button"  @click="tableButtonClick(scope.row,2)">拒绝</p>&ndash;&gt;-->
+                <!--<p class="table-min-button" v-show="scope.row.applyStatus==1&&scope.row.safe" @click="tableButtonClick(scope.row,1)">通过</p>-->
+                <!--<p class="table-min-button" v-show="scope.row.applyStatus==1&&scope.row.safe" @click="tableButtonClick(scope.row,2)">拒绝</p>-->
+                <!--&lt;!&ndash;<p class="table-min-button" v-show="scope.row.applyStatus==2" @click="tableButtonClick(scope.row,3)">查看</p>&ndash;&gt;-->
+              <!--</div>-->
+            <!--</template>-->
+          <!--</el-table-column>-->
+        </el-table>
+        <pagination :page-sizes="[20, 30, 40, 50]"
+                    v-show="total>0"
+                    :total="total"
+                    :page.sync="queryParams.pageNum"
+                    :limit.sync="queryParams.pageSize"
+                    @pagination="getList"/>
+      </div>
+    </div>
+    <infoPage v-if="pageType == 2" :infoData="infoData"></infoPage>
+  </div>
+</template>
+
+<script>
+  import { openDoorApplyList,postApproval,getOpenDoorApply } from "@/api/laboratory/subject";
+  import infoPage from "./infoPage.vue";
+  export default {
+    name: "authorize",
+    components: {
+      infoPage
+    },
+    data(){
+      return{
+        pageType:1,
+        // table操作按钮校验
+        tableButtonType:this.hasPermiDom(['system:user_student:query','system:user_student:query']),
+        loading:false,
+        // 搜索数据
+        queryParamsData:{
+          pageNum:1,
+          pageSize:20,
+        },
+        // 搜索实际发送数据
+        queryParams:{
+          pageNum:1,
+          pageSize:20,
+        },
+        dateRange:[],
+        //数据数量
+        total:10,
+        tableList:[],
+        //审批状态
+        optionsListTwo:[{id:'1',name:'已授权'},{id:'2',name:'已失效'}],
+        //详情
+        infoData:{},
+      }
+    },
+    created() {
+
+    },
+    mounted(){
+      this.getList();
+    },
+    methods:{
+      //操作接口
+      tableButtonClick(item,type){
+        if(type == 1){
+          this.$confirm('确认要通过审批吗?', "警告", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning"
+          }).then(() => {
+            let obj = {
+              applyId:item.id,
+              approvaStatus:'1',
+            }
+            postApproval(obj).then((response) => {
+              this.msgSuccess(response.msg)
+              this.getList();
+            });
+          }).catch(function() {
+            //  取消
+          });
+        }else if(type == 2){
+          this.$confirm('确认要拒绝审批吗?', "警告", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning"
+          }).then(() => {
+            let obj = {
+              applyId:item.id,
+              approvaStatus:'2',
+            };
+            postApproval(obj).then((response) => {
+              this.msgSuccess(response.msg);
+              this.getList();
+            });
+          }).catch(function() {
+            //  取消
+          });
+        } else if(type == 3){
+          getOpenDoorApply(item.id).then((response) => {
+            this.infoData  = response.data;
+            this.pageType = 2;
+          });
+        }
+      },
+      goPageButton(){
+        this.pageType = 1;
+      },
+      titleClick(){
+        this.$parent.titleClick(2);
+      },
+      /** 搜索按钮操作 */
+      handleQuery() {
+        this.queryParamsData.pageNum = 1;
+        this.queryParamsData.pageSize = 20;
+        this.queryParams = JSON.parse(JSON.stringify(this.queryParamsData));
+        this.getList();
+      },
+      /** 重置按钮操作 */
+      resetQuery() {
+        this.$set(this,'queryParamsData',{});
+        this.$set(this,'queryParams',{});
+        this.$set(this,'dateRange',[]);
+        this.handleQuery();
+      },
+      //获取数据列表
+      getList(){
+        this.queryParamsData = JSON.parse(JSON.stringify(this.queryParams));
+        if(this.dateRange&&this.dateRange.length>0) {
+          this.queryParamsData.startTime = this.dateRange[0];
+          this.queryParamsData.endTime = this.dateRange[1];
+        } else {
+          this.queryParamsData.startTime = null;
+          this.queryParamsData.endTime = null;
+        }
+        openDoorApplyList(this.queryParamsData).then(response => {
+          this.tableList = response.rows;
+          this.total = response.total
+        });
+      },
+    }
+  }
+</script>
+
+<style scoped lang="scss">
+  .authorize{
+    flex:1;
+    display: flex;
+    flex-direction: column;
+    .authorize-page{
+      flex:1;
+      display: flex;
+      flex-direction: column;
+      overflow: hidden;
+      .title-box{
+        display: flex;
+        border-bottom:1px solid #E0E0E0;
+        margin-bottom:20px;
+        div{
+          height:80px;
+          margin-right:20px;
+          cursor: pointer;
+          p:nth-child(1){
+            font-size:18px;
+            text-align: center;
+            padding:0 20px;
+            margin-top:26px;
+          }
+          p:nth-child(2){
+            width:40px;
+            height:4px;
+            border-radius:40px;
+            margin:12px auto;
+          }
+          .top-p-color{
+            color: #0045AF;
+          }
+          .bottom-p-color{
+            background: #0045AF;
+          }
+        }
+        .buttonTitleColorA{
+          color:#0045AF;
+        }
+        .buttonTitleColorB{
+          color:#999999;
+        }
+      }
+      .authorize-min{
+        flex:1;
+        display: flex;
+        flex-direction: column;
+        overflow: hidden;
+        margin:0 20px!important;
+        .button-box{
+          display: flex;
+        }
+      }
+    }
+  }
+</style>

+ 52 - 0
src/views/comprehensive/laboratoryManagement/accessAuthorization/index_SuZhouDX.vue

@@ -0,0 +1,52 @@
+<template>
+    <div class="app-container accessAuthorization">
+      <!--授权-->
+      <authorize v-if="pageType == 1"></authorize>
+      <!--申请-->
+      <application v-if="pageType == 2"></application>
+    </div>
+</template>
+
+<script>
+  import authorize from "./authorize_SuZhouDX.vue";
+  import application from "./application_SuZhouDX.vue";
+  export default {
+    name: "index",
+    components: {
+      authorize,
+      application
+    },
+    data(){
+      return{
+        pageType:1,
+      }
+    },
+    created() {
+
+    },
+    mounted(){
+
+    },
+    methods:{
+      //选项卡切换
+      titleClick(type){
+        if(this.pageType != type){
+          this.pageType = type
+        }
+      }
+    }
+  }
+</script>
+
+<style scoped lang="scss">
+  .accessAuthorization{
+    flex:1;
+    display: flex!important;
+    flex-direction: column;
+    overflow: hidden;
+    *{
+      margin:0;
+      font-weight:500;
+    }
+  }
+</style>

+ 795 - 0
src/views/comprehensive/laboratoryManagement/subject/deviceList_SuZhouDX.vue

@@ -0,0 +1,795 @@
+<!--物联设备配置-->
+<template>
+  <div class="deviceList scrollbar-box">
+    <div class="title-box">
+      <p class="left-title">传感器</p>
+      <p class="right-button reset-button-one" @click="backPage">返回</p>
+    </div>
+    <div class="for-max-box">
+      <div class="for-big-box" v-for="(item,index) in listCgq" :key="index">
+        <p class="for-title-p">{{subjectData.room}}-{{item.type.name}}传感器{{index+1}}</p>
+        <div class="for-text-box">
+          <p>网关编号:</p>
+          <el-tooltip class="item" effect="dark" :content="item.gatewayId" placement="top">
+            <p>{{item.gatewayId}}</p>
+          </el-tooltip>
+        </div>
+        <div class="for-button-box">
+          <p @click="editData(5,item)"><i class="el-icon-edit-outline"></i>编辑</p>
+          <p></p>
+          <p @click="delSensor(item)"><i class="el-icon-delete"></i>删除</p>
+        </div>
+      </div>
+      <p class="add-for-p" @click="addData(1)"><i class="el-icon-plus"></i>添加传感器</p>
+    </div>
+    <div class="title-box">
+      <p class="left-title">一体机</p>
+    </div>
+    <div class="for-max-box">
+      <div class="for-big-box" v-for="(item,index) in listYtj" :key="index">
+        <p class="for-title-p">{{subjectData.room}}-{{item.type.name}}{{index+1}}</p>
+        <div class="for-text-box">
+          <p>一体机编号:</p>
+          <el-tooltip class="item" effect="dark" :content="item.hardwareNum" placement="top">
+            <p>{{item.hardwareNum}}</p>
+          </el-tooltip>
+        </div>
+        <div class="for-button-box">
+          <p @click="editData(6,item)"><i class="el-icon-edit-outline"></i>编辑</p>
+          <p></p>
+          <p @click="delHardware(item)"><i class="el-icon-delete"></i>删除</p>
+        </div>
+      </div>
+      <p class="add-for-p" @click="addData(2)"><i class="el-icon-plus"></i>添加一体机</p>
+    </div>
+    <div class="title-box">
+      <p class="left-title">控制设备</p>
+    </div>
+    <div class="for-max-box">
+      <div class="for-big-box-two" v-for="(item,index) in listkzsb" :key="index">
+        <p class="for-title-p">{{subjectData.room}}-{{item.type.name}}传感器{{index+1}}</p>
+        <div class="for-text-box">
+          <p>设备编号:</p>
+          <el-tooltip class="item" effect="dark" :content="item.relayCode" placement="top">
+            <p>{{item.relayCode}}</p>
+          </el-tooltip>
+        </div>
+        <div class="for-text-box">
+          <p>设备路由:</p>
+          <p>{{item.bit}}</p>
+        </div>
+        <div class="for-button-box">
+          <p @click="editData(7,item)"><i class="el-icon-edit-outline"></i>编辑</p>
+          <p></p>
+          <p @click="delHardwareTwo(item)"><i class="el-icon-delete"></i>删除</p>
+        </div>
+      </div>
+      <p class="add-for-p-two" @click="addData(3)"><i class="el-icon-plus"></i>添加控制设备</p>
+    </div>
+    <div class="title-box">
+      <p class="left-title">摄像头</p>
+    </div>
+    <div class="for-max-box">
+      <div class="for-big-box" v-for="(item,index) in listSpjk" :key="index">
+        <p class="for-title-p">{{subjectData.room}}-{{item.type.name}}{{index+1}}</p>
+        <div class="for-text-box">
+          <p>摄像头编号:</p>
+          <p></p>
+        </div>
+        <div class="for-text-box">
+          <p></p>
+          <el-tooltip class="item" effect="dark" :content="item.hardwareNum" placement="top">
+            <p>{{item.hardwareNum}}</p>
+          </el-tooltip>
+        </div>
+        <div class="for-button-box">
+          <p @click="editData(8,item)"><i class="el-icon-edit-outline"></i>编辑</p>
+          <p></p>
+          <p @click="delHardwareThree(item)"><i class="el-icon-delete"></i>删除</p>
+        </div>
+      </div>
+      <p class="add-for-p-two" @click="addData(4)"><i class="el-icon-plus"></i>添加摄像头</p>
+    </div>
+    <el-dialog :title="title" :visible.sync="addType" v-if="addType" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="110px">
+        <div v-if="upType == 1 || upType == 5">
+          <el-form-item label="传感器类型" prop="type">
+            <el-select v-model="form.type" placeholder="请选择传感器类型" style="width:320px;">
+              <el-option
+                v-for="item in sensorAddOptions"
+                :key="item.enumName"
+                :label="item.name"
+                :value="item.enumName">
+              </el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="网关编号" prop="gatewayId">
+            <el-input v-model="form.gatewayId" placeholder="请输入网关编号"
+                      maxlength="30" style="width:320px;"/>
+          </el-form-item>
+          <el-form-item label="路由" prop="routeNum">
+            <el-input v-model="form.routeNum" oninput="value=value.replace(/[^0-9.]/g,'')" maxlength="2" placeholder="请输入路由" style="width:320px;"></el-input>
+          </el-form-item>
+          <el-form-item label="传感器参数" prop="configName">
+            <el-input v-model="form.configName"  placeholder="请输入传感器参数"
+                      maxlength="30" style="width:320px;"></el-input>
+          </el-form-item>
+          <el-form-item label="状态参数" prop="configStatus">
+            <el-input v-model="form.configStatus"  placeholder="请输入状态参数"
+                      maxlength="30" style="width:320px;"></el-input>
+          </el-form-item>
+        </div>
+        <div v-if="upType == 2 || upType == 6">
+          <el-form-item label="一体机名称" prop="name">
+            <el-input
+              style="width:320px;"
+              v-model="form.name"
+              placeholder="请输入一体机名称"
+              maxlength="8"
+              size="small"
+            />
+          </el-form-item>
+          <el-form-item label="一体机类型" prop="pcType">
+            <el-select v-model="form.pcType" placeholder="请选择一体机类型" style="width:320px;">
+              <el-option label="管控一体机" value="0" />
+              <el-option label="学习一体机" value="1" />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="一体机编号" prop="hardwareNum">
+            <el-input
+              style="width:320px;"
+              v-model="form.hardwareNum"
+              placeholder="请输入一体机编号"
+              maxlength="30"
+              size="small"
+            />
+          </el-form-item>
+        </div>
+        <div v-if="upType == 3 || upType == 7">
+          <el-form-item label="设备类型" prop="type">
+            <el-select v-model="form.type" placeholder="请选择设备类型" style="width:320px;" :disabled="disabledType">
+              <el-option key="1" label="电源开关" value="1"></el-option>
+              <el-option key="2" label="智能通风" value="2"></el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="设备版本" prop="hardwareType">
+            <el-radio-group v-model="form.hardwareType">
+              <el-radio :label="1">老继电器</el-radio>
+              <el-radio :label="2">新继电器</el-radio>
+            </el-radio-group>
+          </el-form-item>
+          <el-form-item label="设备编号" prop="relayCode">
+            <el-input v-model="form.relayCode" placeholder="请输入设备编号"
+                      maxlength="30" style="width:320px;"/>
+          </el-form-item>
+          <el-form-item label="设备路由" prop="bit">
+            <el-input v-model="form.bit" oninput="value=value.replace(/[^0-9.]/g,'')" maxlength="2" placeholder="请输入路由" style="width:320px;"></el-input>
+          </el-form-item>
+
+          <el-form-item label="设备参数" prop="configName" v-if="form.hardwareType == 2">
+            <el-input v-model="form.configName" maxlength="30" placeholder="请输入设备参数" style="width:320px;"></el-input>
+          </el-form-item>
+          <el-form-item label="参数状态" prop="configStatus" v-if="form.hardwareType == 2">
+            <el-input v-model="form.configStatus" maxlength="30" placeholder="请输入参数状态" style="width:320px;"></el-input>
+          </el-form-item>
+        </div>
+        <div v-if="upType == 4 || upType == 8">
+          <el-form-item label="摄像头编号" prop="hardwareNum">
+            <el-input v-model="form.hardwareNum" placeholder="摄像头编号"
+                      maxlength="30" style="width:320px;"/>
+          </el-form-item>
+        </div>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="cancel">取 消</el-button>
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listBySubjectId,addSensor,putSensor,delSensor,addHardware,putHardware,delHardware } from "@/api/laboratory/subject";
+import { getSensorList } from "@/api/laboratory/sensor";
+export default {
+  name: "deviceList",
+  props:{
+    subjectData:{},
+  },
+  data() {
+    return {
+      title:"",
+      addType:false,
+      listCgq:[],  //传感器
+      listYtj:[],  //一体机
+      listkzsb:[],
+      listSpjk:[],   //摄像头
+      form:{
+
+      },
+      // 表单校验
+      rules: {
+        name:[
+          {required: true, message: '一体机名称不能为空', trigger: 'blur'},
+          { required: true, message: "一体机名称不能为空", validator: this.spaceJudgment, trigger: "blur" }
+        ],
+        type:[
+          {required: true, message: '类型不能为空', trigger: 'blur'}
+        ],
+        gatewayId:[
+          {required: true, message: '网关不能为空', trigger: 'blur'},
+          { required: true, message: "网关不能为空", validator: this.spaceJudgment, trigger: "blur" }
+        ],
+        hardwareNum:[
+          { required: true, message: "请输入编号", trigger: "blur" },
+          { required: true, message: "请输入编号", validator: this.spaceJudgment, trigger: "blur" }
+        ],
+        pcType: [
+          { required: true, message: "请选择类型", trigger: "blur" },
+        ],
+        hardwareType: [
+          { required: true, message: "请选择设备版本", trigger: "blur" },
+        ],
+        relayCode: [
+          { required: true, message: "请输入设备编号", trigger: "blur" },
+          { required: true, message: "请输入设备编号", validator: this.spaceJudgment, trigger: "blur" }
+        ],
+        bit: [
+          { required: true, message: "请输入路由", trigger: "blur" },
+          { required: true, message: "请输入路由", validator: this.spaceJudgment, trigger: "blur" }
+        ],
+      },
+      //提交类型
+      upType:"",
+      //传感器类型
+      sensorAddOptions: [],
+    }
+  },
+  created() {
+    this.listBySubjectId();
+    this.getSensorList();
+  },
+  mounted(){
+
+  },
+  methods:{
+    // 取消按钮
+    cancel() {
+      this.addType = false;
+    },
+    // 提交
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if(this.upType == 1){
+            //新增传感器
+            this.addSensor();
+          }else if(this.upType == 5){
+            //编辑传感器
+            this.putSensor();
+          }else if(this.upType == 2){
+            //新增一体机
+            this.addHardware();
+          }else if(this.upType == 6){
+            //编辑一体机
+            this.putHardware();
+          }else if(this.upType == 3){
+            //新增控制设备
+            this.addHardwareTwo();
+          }else if(this.upType == 7){
+            //编辑控制设备
+            this.putHardwareTwo();
+          }else if(this.upType == 4){
+            //新增控制设备
+            this.addHardwareThree();
+          }else if(this.upType == 8){
+            //编辑控制设备
+            this.putHardwareThree();
+          }
+        }
+      });
+    },
+    //新增摄像头
+    addHardwareThree(){
+      let obj = {
+        type:4,
+        hardwareNum:this.form.hardwareNum,
+        subjectId:this.subjectData.id,
+        deptId:this.subjectData.deptId,
+        deptName:this.subjectData.deptName,
+      }
+      addHardware(obj).then(response => {
+        this.msgSuccess(response.msg)
+        this.addType = false;
+        this.listBySubjectId();
+      });
+    },
+    //编辑摄像头
+    putHardwareThree(){
+      let obj = {
+        id:this.form.id,
+        hardwareNum:this.form.hardwareNum,
+        subjectId:this.form.subjectId,
+        deptId:this.form.deptId,
+        deptName:this.form.deptName,
+      }
+      putHardware(obj).then(response => {
+        this.msgSuccess(response.msg)
+        this.addType = false;
+        this.listBySubjectId();
+      });
+    },
+    //删除摄像头
+    delHardwareThree(item){
+      this.$confirm('确认要删除该摄像头?', "警告", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(() => {
+        //  确定
+        delHardware(item.id).then((response) => {
+          this.msgSuccess(response.msg)
+          this.addType = false;
+          this.listBySubjectId();
+        });
+      }).catch(function() {
+        //  取消
+      });
+    },
+    //新增控制设备
+    addHardwareTwo(){
+      let obj = {
+        type:this.form.type,
+        hardwareType:this.form.hardwareType,
+        relayCode:this.form.relayCode,
+        bit:this.form.bit,
+        configName:this.form.configName,
+        configStatus:this.form.configStatus,
+        subjectId:this.subjectData.id,
+        deptId:this.subjectData.deptId,
+        deptName:this.subjectData.deptName,
+      }
+      addHardware(obj).then(response => {
+        this.msgSuccess(response.msg)
+        this.addType = false;
+        this.listBySubjectId();
+      });
+    },
+    //编辑控制设备
+    putHardwareTwo(){
+      let obj = {
+        id:this.form.id,
+        hardwareType:this.form.hardwareType,
+        relayCode:this.form.relayCode,
+        bit:this.form.bit,
+        configName:this.form.configName,
+        configStatus:this.form.configStatus,
+        subjectId:this.form.subjectId,
+        deptId:this.form.deptId,
+        deptName:this.form.deptName,
+      }
+      putHardware(obj).then(response => {
+        this.msgSuccess(response.msg)
+        this.addType = false;
+        this.listBySubjectId();
+      });
+    },
+    //删除控制设备
+    delHardwareTwo(item){
+      this.$confirm('确认要删除该一体机?', "警告", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(() => {
+        //  确定
+        delHardware(item.id).then((response) => {
+          this.msgSuccess(response.msg)
+          this.addType = false;
+          this.listBySubjectId();
+        });
+      }).catch(function() {
+        //  取消
+      });
+    },
+    //添加一体机
+    addHardware(){
+      let obj = {
+        type:0,
+        name:this.form.name,
+        pcType:this.form.pcType,
+        hardwareNum:this.form.hardwareNum,
+        subjectId:this.subjectData.id,
+        deptId:this.subjectData.deptId,
+        deptName:this.subjectData.deptName,
+      }
+      addHardware(obj).then(response => {
+        this.msgSuccess(response.msg)
+        this.addType = false;
+        this.listBySubjectId();
+      });
+    },
+    //编辑一体机
+    putHardware(){
+      let obj = {
+        id:this.form.id,
+        name:this.form.name,
+        pcType:this.form.pcType,
+        hardwareNum:this.form.hardwareNum,
+      }
+      putHardware(obj).then(response => {
+        this.msgSuccess(response.msg)
+        this.addType = false;
+        this.listBySubjectId();
+      });
+    },
+    //删除一体机
+    delHardware(item){
+      this.$confirm('确认要删除该一体机?', "警告", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(() => {
+        //  确定
+        delHardware(item.id).then((response) => {
+          this.msgSuccess(response.msg)
+          this.addType = false;
+          this.listBySubjectId();
+        });
+      }).catch(function() {
+        //  取消
+      });
+    },
+    //添加传感器
+    addSensor(){
+      let obj = {
+        type:this.form.type,
+        gatewayId:this.form.gatewayId,
+        routeNum:this.form.routeNum,
+        configName:this.form.configName,
+        configStatus:this.form.configStatus,
+        subjectId:this.subjectData.id
+      }
+      addSensor(obj).then(response => {
+        this.msgSuccess(response.msg)
+        this.addType = false;
+        this.listBySubjectId();
+      });
+    },
+    //编辑传感器
+    putSensor(){
+      let obj = {
+        type:this.form.type,
+        id:this.form.id,
+        gatewayId:this.form.gatewayId,
+        routeNum:this.form.routeNum,
+        configName:this.form.configName,
+        configStatus:this.form.configStatus,
+      }
+      putSensor(obj).then(response => {
+        this.msgSuccess(response.msg)
+        this.addType = false;
+        this.listBySubjectId();
+      });
+    },
+    //删除传感器
+    delSensor(item){
+      this.$confirm('确认要删除该传感器?', "警告", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(() => {
+        //  确定
+        delSensor(item.id).then((response) => {
+          this.msgSuccess(response.msg)
+          this.addType = false;
+          this.listBySubjectId();
+        });
+      }).catch(function() {
+        //  取消
+      });
+    },
+    //添加
+    addData(type){
+      // this.resetForm("form");
+      if(type == 1){
+        this.title = '新增传感器';
+        this.$set(this,'form',{
+          type:"",
+          gatewayId:"",
+          routeNum:"",
+          configName:"",
+          configStatus:"",
+        });
+      }else if(type == 2){
+        this.title = '新增一体机';
+        this.$set(this,'form',{
+          name:"",
+          pcType:"",
+          hardwareNum:"",
+        });
+      }else if(type == 3){
+        this.title = '新增控制设备';
+        this.form.hardwareType = 1;
+        this.disabledType = false;
+        this.$set(this,'form',{
+          type:"",
+          hardwareType:"",
+          relayCode:"",
+          bit:"",
+          configName:"",
+          configStatus:"",
+        });
+      }else if(type == 4){
+        this.title = '新增摄像头';
+        this.$set(this,'form',{
+          hardwareNum:"",
+        });
+      }
+      this.addType = true;
+      this.upType = type;
+    },
+    //编辑
+    editData(type,row){
+      if(type == 5){
+        this.title = '编辑传感器';
+        this.$set(this,'form',JSON.parse(JSON.stringify(row)));
+        this.$set(this.form,'type',JSON.parse(JSON.stringify(row.type.enumName)));
+      }else if(type == 6){
+        this.title = '编辑一体机';
+        this.$set(this,'form',JSON.parse(JSON.stringify(row)));
+        this.$set(this.form,'pcType',JSON.parse(JSON.stringify(row.pcType+'')));
+      }else if(type == 7){
+        this.title = '编辑控制设备';
+        this.disabledType = true;
+        this.$set(this,'form',JSON.parse(JSON.stringify(row)));
+        this.$set(this.form,'type',JSON.parse(JSON.stringify(row.type.code+'')));
+      }else if(type == 8){
+        this.title = '编辑摄像头';
+        this.$set(this,'form',JSON.parse(JSON.stringify(row)));
+      }
+      this.addType = true;
+      this.upType = type;
+    },
+    //获取列表
+    listBySubjectId(){
+      let obj = {
+        subjectId:this.subjectData.id
+      };
+      console.log("obj",obj)
+      listBySubjectId(obj).then(response => {
+        this.$set(this,'listCgq',response.data.listCgq);
+        this.$set(this,'listYtj',response.data.listYtj);
+        this.$set(this,'listkzsb',response.data.listkzsb);
+        this.$set(this,'listSpjk',response.data.listSpjk);
+      });
+    },
+    //返回上一页
+    backPage(){
+      this.$parent.clickPage(1);
+    },
+    //传感器类型
+    getSensorList(){
+      getSensorList().then(response => {
+        this.sensorAddOptions = response.data;
+      });
+    },
+  }
+}
+</script>
+
+<style scoped lang="scss">
+.deviceList{
+  flex:1;
+  display: flex;
+  flex-direction: column;
+  padding-bottom:20px;
+  border-radius:10px!important;
+  margin:5px 20px 20px 10px!important;
+  box-shadow: 0 0 8px 1px rgba(0, 0, 0, 0.1) !important;
+  *{
+    margin:0;
+  }
+  .title-box{
+    display: flex;
+    margin:0 20px;
+    .left-title{
+      flex:1;
+      height:80px;
+      line-height:80px;
+      color:#0045AF;
+      font-size:18px;
+    }
+    .right-button{
+      margin:20px 0;
+    }
+  }
+  .for-max-box{
+    margin:0 40px;
+    font-weight:500;
+    .for-big-box{
+      border: 1px solid #E0E0E0;
+      display: inline-block;
+      overflow: hidden;
+      width:280px;
+      min-height:130px;
+      padding-bottom:10px;
+      border-radius: 6px;
+      margin:0 20px 20px 0;
+      .for-title-p{
+        background: rgba(182,214,254,1);
+        color:#0183FA;
+        font-size:16px;
+        line-height:40px;
+        display:block;
+        overflow:hidden;
+        text-overflow:ellipsis;
+        white-space:nowrap;
+        padding:0 16px;
+        margin-bottom:10px;
+        font-weight:700;
+      }
+      .for-text-box{
+        display: flex;
+        padding:0 23px;
+        p{
+          font-size:14px;
+          line-height:30px;
+          flex:1;
+        }
+        p:nth-child(1){
+          color:#333;
+          text-align: left;
+        }
+        p:nth-child(2){
+          color:#999;
+          text-align: right;
+          overflow:hidden;
+          text-overflow:ellipsis;
+          white-space:nowrap;
+        }
+      }
+      .for-button-box{
+        display: flex;
+        line-height:26px;
+        margin-top:10px;
+        p{
+          text-align: center;
+          font-size:14px;
+          color:#666666;
+        }
+        p:nth-child(1){
+          flex:1;
+          cursor: pointer;
+          i{
+            color:#1151b4;
+            margin-right:10px;
+          }
+        }
+        p:nth-child(2){
+          width:2px;
+          height:14px;
+          margin:6px 0;
+          background: #CCCCCC;
+        }
+        p:nth-child(3){
+          flex:1;
+          cursor: pointer;
+          i{
+            color:#ff6868;
+            margin-right:10px;
+          }
+        }
+      }
+    }
+    .for-big-box-two{
+      border: 1px solid #E0E0E0;
+      display: inline-block;
+      overflow: hidden;
+      width:280px;
+      min-height:158px;
+      padding-bottom:10px;
+      border-radius: 6px;
+      margin:0 20px 20px 0;
+      .for-title-p{
+        background: rgba(182,214,254,1);
+        color:#0183FA;
+        font-size:16px;
+        line-height:40px;
+        display:block;
+        overflow:hidden;
+        text-overflow:ellipsis;
+        white-space:nowrap;
+        padding:0 16px;
+        margin-bottom:10px;
+        font-weight:700;
+      }
+      .for-text-box{
+        display: flex;
+        padding:0 23px;
+        p{
+          font-size:14px;
+          line-height:30px;
+          flex:1;
+        }
+        p:nth-child(1){
+          text-align: left;
+          color:#333;
+        }
+        p:nth-child(2){
+          color:#999;
+          text-align: right;
+          overflow:hidden;
+          text-overflow:ellipsis;
+          white-space:nowrap;
+        }
+      }
+      .for-button-box{
+        display: flex;
+        line-height:26px;
+        margin-top:10px;
+        p{
+          text-align: center;
+          font-size:14px;
+          color:#666666;
+        }
+        p:nth-child(1){
+          flex:1;
+          cursor: pointer;
+          i{
+            color:#1151b4;
+            margin-right:10px;
+          }
+        }
+        p:nth-child(2){
+          width:2px;
+          height:14px;
+          margin:6px 0;
+          background: #CCCCCC;
+        }
+        p:nth-child(3){
+          flex:1;
+          cursor: pointer;
+          i{
+            color:#ff6868;
+            margin-right:10px;
+          }
+        }
+      }
+    }
+    .add-for-p{
+      font-size:14px;
+      border: 1px solid #E0E0E0;
+      display: inline-block;
+      overflow: hidden;
+      width:280px;
+      height:130px;
+      line-height:130px;
+      text-align: center;
+      border-radius: 6px;
+      color:#999999;
+      cursor: pointer;
+      margin:0 20px 20px 0;
+      i{
+        margin-right:10px;
+      }
+    }
+    .add-for-p-two{
+      font-size:14px;
+      border: 1px solid #E0E0E0;
+      display: inline-block;
+      overflow: hidden;
+      width:280px;
+      height:158px;
+      line-height:158px;
+      text-align: center;
+      border-radius: 6px;
+      color:#999999;
+      cursor: pointer;
+      margin:0 20px 20px 0;
+      i{
+        margin-right:10px;
+      }
+    }
+  }
+}
+</style>

+ 23 - 13
src/views/comprehensive/laboratoryManagement/subject/index.vue

@@ -127,10 +127,10 @@
             </div>
             <div class="bottom-switch-box" v-if="rightButtonType == 2">
               <p class="top-title">当前位置:{{checkedSubject.subAddrr.buildName}}{{checkedSubject.subAddrr.floorName}}</p>
-              <div class="switch-for-max-box" v-show="checkedSubject.labHardwareVOList" v-hasPermi="['laboratory:subcontrol:set']">
-                <div class="switch-for-big-box" v-for="(item,index) in checkedSubject.labHardwareVOList" :key="index">
+              <div class="switch-for-max-box" v-show="checkedSubject.VOlist[0]" v-hasPermi="['laboratory:subcontrol:set']">
+                <div class="switch-for-big-box" v-for="(item,index) in checkedSubject.VOlist" :key="index">
                   <div class="switch-for-min-box" v-if="item.hardwareTypeEnum.enumName == 'SWITCH'">
-                    <p class="switch-for-min-title">电源控制</p>
+                    <p class="switch-for-min-title">{{item.hardwareName}}</p>
                     <el-switch
                       v-if="item.state.code == 3||item.state.code == 4"
                       class="switch"
@@ -145,7 +145,7 @@
                     <p class="switch-null-p" v-else>{{item.state.name}}</p>
                   </div>
                   <div class="switch-for-min-box" v-if="item.hardwareTypeEnum.enumName == 'AI_VENTILATION'">
-                    <p class="switch-for-min-title">智能通风</p>
+                    <p class="switch-for-min-title">{{item.hardwareName}}</p>
                     <el-switch
                       v-if="item.state.code == 3||item.state.code == 4"
                       class="switch"
@@ -165,8 +165,8 @@
                   <!--</div>-->
                 </div>
               </div>
-              <img class="null-data-img" src="@/assets/ZDimages/null-data.png" v-show="!checkedSubject.labHardwareVOList">
-              <p class="null-text-p" v-show="!checkedSubject.labHardwareVOList">暂无物联控制信息,请在更多操作-物联设备配置中进行添加</p>
+              <img class="null-data-img" src="@/assets/ZDimages/null-data.png" v-show="!checkedSubject.VOlist[0]">
+              <p class="null-text-p" v-show="!checkedSubject.VOlist[0]">暂无物联控制信息,请在更多操作-物联设备配置中进行添加</p>
             </div>
             <div class="bottom-video-box" v-if="rightButtonType == 3">
               <p class="top-title">当前位置:{{checkedSubject.subAddrr.buildName}}{{checkedSubject.subAddrr.floorName}}</p>
@@ -774,7 +774,17 @@ export default {
     subjectInfo(id){
       let type = 1; //硬件 //0全部
       subjectInfo(id,type).then(response => {
-        this.$set(this,'checkedSubject',response.data);
+        let obj = JSON.parse(JSON.stringify(response.data));
+        obj.VOlist = [];
+        if(response.data.labHardwareVOList){
+          for(let i=0;i<response.data.labHardwareVOList.length;i++){
+            if(response.data.labHardwareVOList[i].hardwareTypeEnum.enumName == 'SWITCH'||
+              response.data.labHardwareVOList[i].hardwareTypeEnum.enumName == 'AI_VENTILATION'){
+              obj.VOlist.push(response.data.labHardwareVOList[i]);
+            }
+          }
+        }
+        this.$set(this,'checkedSubject',obj);
         this.$set(this.checkedSubject,'videoData',[]);
         this.rightButtonType = 1;
       })
@@ -935,15 +945,15 @@ export default {
             //硬件
             // console.log("硬件",data);
             for (let i = 0; i < data.data.length; i++) {
-              if (self.checkedSubject.labHardwareVOList) {
-                for (let k = 0; k < self.checkedSubject.labHardwareVOList.length; k++) {
-                  if (self.checkedSubject.labHardwareVOList[k].id == data.data[i].num) {
+              if (self.checkedSubject.VOlist) {
+                for (let k = 0; k < self.checkedSubject.VOlist.length; k++) {
+                  if (self.checkedSubject.VOlist[k].id == data.data[i].num) {
                     if (data.data[i].hardwareOperate == 'CLOSE') {
-                      self.checkedSubject.labHardwareVOList[k].state.code = 4;
+                      self.checkedSubject.VOlist[k].state.code = 4;
                     } else if (data.data[i].hardwareOperate == 'OPEN') {
-                      self.checkedSubject.labHardwareVOList[k].state.code = 3;
+                      self.checkedSubject.VOlist[k].state.code = 3;
                     } else if (data.data[i].hardwareOperate == 'OFFLINE') {
-                      self.checkedSubject.labHardwareVOList[k].state.code = 0;
+                      self.checkedSubject.VOlist[k].state.code = 0;
                     }
                   }
                 }

Різницю між файлами не показано, бо вона завелика
+ 1418 - 0
src/views/comprehensive/laboratoryManagement/subject/index_SuZhouDX.vue


+ 8 - 3
src/views/comprehensive/laboratoryManagement/subject/infoPage.vue

@@ -104,7 +104,7 @@
         </div>
         <div class="things-box" v-for="(item,index) in newData.labHardwareVOListTwo" :key="item.id" v-if="item.hardwareTypeEnum.enumName == 'SWITCH'">
           <div class="things-for-box">
-            <p class="left-title">电源控制</p>
+            <p class="left-title">{{item.hardwareName}}</p>
             <el-switch
               v-if="item.state.code == 3||item.state.code == 4"
               class="switch"
@@ -121,7 +121,7 @@
         </div>
         <div class="things-box" v-for="(item,index) in newData.labHardwareVOListTwo" :key="item.id" v-if="item.hardwareTypeEnum.enumName == 'AI_VENTILATION'">
           <div class="things-for-box">
-            <p class="left-title">智能通风</p>
+            <p class="left-title">{{item.hardwareName}}</p>
             <el-switch
               v-if="item.state.code == 3||item.state.code == 4"
               class="switch"
@@ -669,10 +669,15 @@
         .things-for-box{
           display: flex;
           .left-title{
+            width: 110px;
             font-size:14px;
             color:#333;
             line-height:30px;
-            margin-right:30px;
+            margin-right:10px;
+            display:block;
+            overflow:hidden;
+            text-overflow:ellipsis;
+            white-space:nowrap;
           }
           .switch{
 

Різницю між файлами не показано, бо вона завелика
+ 1227 - 0
src/views/comprehensive/personnel/student/addPage_SuZhouDX.vue


Різницю між файлами не показано, бо вона завелика
+ 1021 - 0
src/views/comprehensive/personnel/student/index_SuZhouDX.vue


Різницю між файлами не показано, бо вона завелика
+ 1793 - 0
src/views/comprehensive/personnel/teacher/addPage_SuZhouDX.vue


Різницю між файлами не показано, бо вона завелика
+ 1538 - 0
src/views/comprehensive/personnel/teacher/index_SuZhouDX.vue


+ 556 - 0
src/views/medicUniversity-3_1/chemicalManagement/deviceManagement/SmartAccessControl/index_SuZhouDX.vue

@@ -0,0 +1,556 @@
+<!--智能门禁-->
+<template>
+  <div class="app-container SmartAccessControl">
+    <el-form :model="queryParamsData" class="form-box" ref="queryForm" :inline="true">
+      <el-form-item label="关键字" prop="searchValue">
+        <el-input
+          maxLength="30"
+          v-model="queryParamsData.searchValue"
+          placeholder="设备编号/实验室"
+          clearable
+          size="small"
+          style="width: 240px"
+        />
+      </el-form-item>
+      <el-form-item label="学院" prop="deptId">
+        <el-select v-model="queryParamsData.deptId" clearable placeholder="请选择学院">
+          <el-option
+            v-for="item in optionsListOne"
+            :key="item.deptId"
+            :label="item.deptName"
+            :value="item.deptId">
+          </el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="状态" prop="useStatus">
+        <el-select v-model="queryParamsData.operate" clearable placeholder="请选择状态">
+          <el-option
+            v-for="item in optionsListTwo"
+            :key="item.id"
+            :label="item.name"
+            :value="item.id">
+          </el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item>
+        <p class="inquire-button-one" @click="handleQuery" style="margin-right:10px;">查询</p>
+        <p class="reset-button-one" @click="resetQuery">重置</p>
+      </el-form-item>
+      <el-form-item style="float: right;">
+        <el-col :span="1.5" v-hasPermi="['laboratory:hardware6:add']">
+          <p class="add-button-one-90"
+             @click="pageToggle(1)"
+          ><i class="el-icon-plus"></i>新增</p>
+        </el-col>
+      </el-form-item>
+      <el-form-item style="float: right;">
+        <el-dropdown @command="importButton" v-hasPermi="['laboratory:hardware6:import']">
+          <div class="form-dropdown-box">
+            <img src="@/assets/ZDimages/personnelManagement/icon_jzgxx_dr.png">
+            <p>导入</p>
+            <img src="@/assets/ZDimages/personnelManagement/icon_jzggl_xljt.png">
+          </div>
+          <el-dropdown-menu slot="dropdown">
+            <el-dropdown-item style="border-bottom:1px solid #E0E0E0;margin:0 10px;color:#333;" :command="{command:1}">下载模板</el-dropdown-item>
+            <el-dropdown-item style="margin:0 10px;color:#666;" :command="{command:2}">导入数据</el-dropdown-item>
+          </el-dropdown-menu>
+        </el-dropdown>
+      </el-form-item>
+    </el-form>
+    <el-table  border :data="tableList" ref="multipleTable">
+      <el-table-column label="门禁锁编号" align="center" prop="hardwareNum"/>
+      <el-table-column label="学院" align="center" prop="deptName" width="250"/>
+      <el-table-column label="位置" align="center" prop="posi" width="250" show-overflow-tooltip/>
+      <el-table-column label="设备状态" align="center" prop="status" width="100">
+        <template slot-scope="scope">{{scope.row.operate.name}}</template>
+      </el-table-column>
+      <el-table-column label="创建时间" align="center" prop="createTime" width="250"/>
+      <el-table-column label="创建人" align="center" prop="createBy" width="150"/>
+      <el-table-column label="操作" align="center" width="140" class-name="small-padding fixed-width" v-if="tableButtonType">
+        <template slot-scope="scope">
+          <div class="button-box">
+            <p class="table-min-button" style="margin-right:10px;" v-hasPermi="['laboratory:hardware6:edit']" @click="pageToggle(2,scope.row)">编辑</p>
+            <p class="table-min-button" v-hasPermi="['laboratory:hardware6:remove']" @click="pageToggle(3,scope.row)">删除</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"
+    />
+    <!--导入窗口-->
+    <el-dialog title="导入数据" :visible.sync="importOpen" @close="importOpenOff" width="600px" append-to-body class="import-dialog-box">
+      <div class="el-upload__text" style="margin:0 0 20px 58px;">提示:导入后的数据将覆盖原有数据</div>
+      <el-upload
+        class="import-dialog-upLoad-box"
+        :drag="true"
+        :data="upImportData"
+        :action="uploadImgUrl"
+        :show-file-list="false"
+        :on-success="handleAvatarSuccess"
+        :headers="headers"
+        :before-upload="beforeAvatarUpload">
+        <i class="el-icon-upload"></i>
+        <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
+        <!--<div class="el-upload__tip" slot="tip">-->
+        <!--<el-checkbox v-model="upImportData.upDate">是否更新已经存在的数据</el-checkbox>-->
+        <!--</div>-->
+        <div class="el-upload__tip" slot="tip">数据导入模板.xlsx<span style="color:#0183FA;cursor: pointer" @click="importTemplate">下载</span></div>
+        <div class="el-upload-text-box" slot="tip" v-if="getImportData.downFile">
+          <div class="img-text-box">
+            <img src="@/assets/ZDimages/personnelManagement/icon_dr_wj.png">
+            <p>{{getImportData.textName}}</p>
+          </div>
+          <p class="text-p">数据导入成功 <span style="color:#0183FA;">{{getImportData.successNum}}</span> 条,失败 <span style="color:#FF6464 ;">{{getImportData.failureNum}}</span> 条</p>
+          <div class="img-text-box">
+            <img src="@/assets/ZDimages/personnelManagement/icon_dr_sj.png">
+            <p style="color:#0183FA;cursor: pointer;" @click="failureExcel">点击下载失败数据报表</p>
+          </div>
+        </div>
+      </el-upload>
+      <div slot="footer" class="teacher-import-dialog-button-box">
+        <p class="inquire-button-one" @click="importOpenOff">确定</p>
+      </div>
+      <div class="teacher-import-dialog-position-box" v-if="loading"></div>
+    </el-dialog>
+    <!--新增/编辑-->
+    <el-dialog :title="dialogTitle" :visible.sync="addDialogType" v-if="addDialogType" width="520px" append-to-body class="add-dialog-box">
+      <el-form ref="form" :model="form" :rules="rules" label-width="110px">
+        <el-form-item label="门禁锁编号:" prop="hardwareNum">
+          <el-input v-model="form.hardwareNum" placeholder="最大20个字符,包含大小写字母、数字" onkeyup="value=value.replace(/[^\w\.\/]/ig,'')" maxlength="20" style="width:360px;"/>
+        </el-form-item>
+        <el-form-item label="实验室:" prop="subjectId">
+          <el-select
+            style="width:360px;"
+            v-model="form.subjectId"
+            filterable
+            remote
+            clearable
+            @focus="selectFocus"
+            reserve-keyword
+            @clear="clearClick"
+            placeholder="搜索选择实验室"
+            :remote-method="getSelectList"
+            :loading="loading">
+            <el-option
+              v-for="item in selectList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id">
+            </el-option>
+          </el-select>
+        </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 { hxpSmartTerminal,filterDept,getSubList,addHxpSmartTerminal,putHxpSmartTerminal,getHxpSmartTerminal,delHxpSmartTerminal } from "@/api/medicUniversity-3_1/index";
+  import { listHardware, delHardware, addHardware, updateHardware } from "@/api/medicUniversity-3_1/index";
+  import { listDepartments } from "@/api/system/dept";
+  import { getToken } from "@/utils/auth";
+  export default {
+    name: "SmartAccessControl",
+    data() {
+      return {
+        // table操作按钮校验
+        tableButtonType:this.hasPermiDom(['laboratory:hardware6:edit','laboratory:hardware6:remove']),
+        //上传相关配置
+        uploadImgUrl: window.location.href.split('://')[0]+'://' + this.judgmentNetworkReturnAddress() + "/laboratory/hardware/importData", // 上传地址
+        headers: {
+          Authorization: "Bearer " + getToken(),
+        },
+        // 遮罩层
+        loading:false,
+        //页面状态
+        pageType:1,
+        // 搜索数据
+        queryParamsData:{
+          pageNum:1,
+          pageSize:20,
+        },
+        // 搜索实际发送数据
+        queryParams:{
+          pageNum:1,
+          pageSize:20,
+        },
+        //数据数量
+        total:0,
+        //数据数组
+        tableList:[],
+        //学院列表
+        optionsListOne:[],
+        //状态列表
+        optionsListTwo:[{id:"ONLINE",name:"在线"},{id:"OFFLINE",name:"离线"}],
+        //导入弹层开关
+        importOpen:false,
+        //导入数据
+        upImportData:{
+          sysUserEnable:true,
+          upDate:false,
+          terminalType:'AI_DOORLOCK',
+        },
+        getImportData:{
+          downFile:false,
+          successNum:0,
+          failureNum:0,
+          textName:"",
+        },
+        //编辑新增相关
+        dialogTitle:"",
+        addDialogType:false,
+        form:{},
+        selectList:[],
+        selectListData:[],
+        rules:{
+          hardwareNum: [
+            { required: true, trigger: "blur", message: "最大20个字符,包含大小写字母、数字" },
+            { required: true, message: "最大20个字符,包含大小写字母、数字", validator: this.spaceJudgment, trigger: "blur" }
+          ],
+          subjectId: [
+            { required: true, trigger: "blur", message: "搜索选择实验室" },
+          ],
+        },
+      };
+    },
+    created() {
+
+    },
+    mounted(){
+      this.filterDept();
+      this.listDepartments();
+      this.getList();
+    },
+    methods: {
+      selectFocus(){
+        if(!this.selectList[0]){
+          this.filterDept();
+        }
+      },
+      //获取学院列表
+      listDepartments(){
+        listDepartments().then(response => {
+          this.optionsListOne = response.data;
+        });
+      },
+      pageToggle(type,item){
+        let self = this;
+        if(type == 1){
+          //新增
+          this.dialogTitle = '新增';
+          this.$set(this,'form',{
+            hardwareNum:"",
+            subjectId:""
+          });
+          this.clearClick();
+          this.addDialogType = true;
+        }else if(type == 2){
+          // 编辑
+          this.dialogTitle = '编辑';
+          let obj = {
+            id:item.id,
+            subjectId:item.subjectId,
+            hardwareNum:item.hardwareNum,
+          };
+          this.$set(this,'form',obj);
+          this.clearClick();
+          this.addDialogType = true;
+        }else if(type == 3){
+          // 删除
+          this.$confirm('确认要删除吗?', "警告", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning"
+          }).then(function() {
+            delHardware(item.id).then(response => {
+              if (response.code == 200){
+                self.msgSuccess(response.msg);
+                self.getList();
+              }
+            });
+          }).then(() => {
+          }).catch(() => {});
+        }
+      },
+      //查询当前院系
+      filterDept(){
+        filterDept().then(response => {
+          let idText = "";
+          for(let i=0;i<response.data.length;i++){
+            if(i==0){
+              idText = idText + response.data[i].deptId;
+            }else{
+              idText = idText +','+ response.data[i].deptId;
+            }
+          }
+          //查询院系下实验室
+          getSubList(idText).then(response => {
+            //当前列表
+            this.selectList = JSON.parse(JSON.stringify(response.data));
+            //原始列表数据
+            this.selectListData = JSON.parse(JSON.stringify(response.data));
+          });
+        });
+      },
+      /** 实验室-本地懒加载 */
+      getSelectList(val) {
+        let self = this;
+        let list = [];
+        for(let i=0;i<self.selectListData.length;i++){
+          if(self.selectListData[i].name.indexOf(val) != -1){
+            list.push(self.selectListData[i]);
+          }
+        }
+        this.selectList = JSON.parse(JSON.stringify(list))
+      },
+      //实验室选中清除
+      clearClick(){
+        this.selectList = JSON.parse(JSON.stringify(this.selectListData))
+      },
+      submitForm(){
+        this.$refs["form"].validate((valid) => {
+          if (valid) {
+            if(this.form.id){
+              //编辑
+              this.form.type = "AI_DOORLOCK";
+              updateHardware(this.form).then(response => {
+                if (response.code == 200){
+                  this.addDialogType = false;
+                  this.msgSuccess(response.msg);
+                  this.getList();
+                }
+              });
+            }else{
+              //新增
+              this.form.type = "AI_DOORLOCK";
+              addHardware(this.form).then(response => {
+                if (response.code == 200){
+                  this.addDialogType = false;
+                  this.msgSuccess(response.msg);
+                  this.resetQuery();
+                }
+              });
+            }
+          }
+        })
+      },
+      cancel(){
+        this.addDialogType = false;
+      },
+      //获取数据列表
+      getList(){
+        this.queryParamsData = JSON.parse(JSON.stringify(this.queryParams));
+        this.queryParamsData.type = 'AI_DOORLOCK';
+        listHardware(this.queryParamsData).then(response => {
+          this.total = response.total;
+          this.tableList = response.rows;
+        });
+      },
+      /** 搜索按钮操作 */
+      handleQuery() {
+        this.queryParamsData.pageNum = 1;
+        this.queryParamsData.pageSize = 20;
+        this.queryParams = JSON.parse(JSON.stringify(this.queryParamsData));
+        this.getList();
+      },
+      /** 重置按钮操作 */
+      resetQuery() {
+        this.$set(this,'queryParamsData',{});
+        this.$set(this,'queryParams',{});
+        this.handleQuery();
+      },
+      //导入页面关闭
+      importOpenOff(){
+        this.importOpen = false;
+        this.getImportData.downFile = false;
+        this.getImportData.successNum = 0;
+        this.getImportData.failureNum = 0;
+        this.getImportData.textName = "";
+      },
+      /** 导入按钮操作 */
+      importButton(item){
+        if(item.command == 1){
+          //  下载模板
+          this.download('/laboratory/hardware/importTemplate', {}, `导入模板.xlsx`)
+        }else if(item.command == 2){
+          //  导入数据
+          console.log('导入数据');
+          this.importOpen = true;
+        }
+      },
+      /** 下载模板操作 */
+      importTemplate() {
+        this.download('/laboratory/hardware/importTemplate', {}, `导入模板.xlsx`)
+      },
+      /*下载失败列表*/
+      failureExcel(){
+        this.download('/laboratory/hardware/importErrorData', {}, `失败报表.xlsx`)
+      },
+      //****************************************导入功能**************************************
+      handleAvatarSuccess(res, file) {
+        if(res.code == 200){
+          if(res.data.downFile){
+            this.getImportData.downFile = res.data.downFile
+            this.getImportData.successNum = res.data.successNum
+            this.getImportData.failureNum = res.data.failureNum
+          }else{
+            this.msgSuccess(res.msg);
+            this.importOpen = false;
+            this.resetQuery();
+          }
+          // this.getImportData.downFile = res.data.downFile
+          // this.getImportData.successNum = res.data.successNum
+          // this.getImportData.failureNum = res.data.failureNum
+          // this.importOpen = false;
+          // this.getList();
+        }else{
+          this.msgError(res.msg);
+        }
+        this.loading = false;
+      },
+      beforeAvatarUpload(file) {
+        let type = false;
+        console.log('file',file);
+        if (file.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' || file.type == 'application/vnd.ms-excel') {
+          this.getImportData.textName = file.name;
+          type = true;
+          this.loading = true;
+        }else{
+          this.msgError('只能上传xls/xlsx格式文件')
+          type = false;
+        }
+        return type;
+      },
+    },
+  }
+</script>
+
+<style scoped lang="scss">
+  .SmartAccessControl{
+    flex:1;
+    display: flex;
+    flex-direction: column;
+    overflow: hidden!important;
+    padding:20px !important;
+    p{
+      margin:0;
+      padding:0;
+    }
+    .form-box{
+      .form-dropdown-box{
+        display: flex;
+        margin:0;
+        padding:0 10px;
+        cursor: pointer;
+        height:40px;
+        img:nth-child(1){
+          width:16px;
+          height:16px;
+          margin-top:12px;
+        }
+        p{
+          width:47px;
+          text-align: center;
+          font-size:14px;
+          margin:0;
+          line-height:40px;
+        }
+        img:nth-child(3){
+          width:10px;
+          height:6px;
+          margin-top:17px;
+        }
+      }
+    }
+    .button-box{
+      display: flex;
+    }
+  }
+</style>
+<style lang="scss">
+  .import-dialog-box{
+    .import-dialog-upLoad-box{
+      .el-upload{
+        width:450px;
+        margin:0 55px;
+        .el-upload-dragger{
+          width:450px;
+          .el-icon-upload{
+            font-size:100px;
+            color:#CBE6FE;
+          }
+          .el-upload__text{
+            margin-top:20px;
+          }
+        }
+      }
+      .el-upload__tip{
+        margin-left:60px;
+        font-size:14px;
+        margin-top:10px;
+      }
+      .el-upload-text-box{
+        background: #F5F5F5;
+        border-radius: 10px;
+        margin:15px 30px 0;
+        padding:0 20px 15px;
+        overflow: hidden;
+        *{
+          margin:0;
+        }
+        .img-text-box{
+          display: flex;
+          margin-top:15px;
+          img{
+            width:16px;
+            height:16px;
+            margin-right:13px;
+          }
+          p{
+            height:16px;
+            line-height:16px;
+            font-size:12px;
+          }
+        }
+        .text-p{
+          margin-top:15px;
+          margin-left:29px;
+          height:16px;
+          line-height:16px;
+          font-size:12px;
+        }
+      }
+    }
+    .teacher-import-dialog-button-box{
+      display: flex;
+      width:190px;
+      margin:0 auto;
+      p{
+        width:70px;
+        height:30px;
+        line-height:30px;
+        font-size:14px;
+        margin:0 auto;
+      }
+    }
+    .teacher-import-dialog-position-box{
+      width:100%;
+      height:100%;
+      position: absolute;
+      top:0;
+      left:0;
+      z-index: 999;
+      background: rgba(255,255,255,0.4);
+      border-radius:20px;
+    }
+  }
+</style>

+ 941 - 0
src/views/mine/index_SuZhouDX.vue

@@ -0,0 +1,941 @@
+<template>
+  <div class="mine">
+    <!--<navbar />-->
+    <div class="mine-page">
+      <div class="left-max-box scrollbar-box">
+        <p class="left-title">个人中心</p>
+        <div class="left-user-img">
+          <userAvatar :user="user" />
+        </div>
+        <p class="left-name">{{user.nickName}}</p>
+        <p class="left-num">{{user.userType=='11'?'工号:':(user.userType=='22'?'学号:':'其他:')}}{{user.userName}}</p>
+        <div class="left-text-max-box">
+          <div class="left-text-big-box">
+            <div class="left-text-big-box-left">
+              <img v-if="user.userType == '22'" src="@/assets/ZDimages/mine/icon_grzx_xl.png">
+              <img v-else src="@/assets/ZDimages/mine/icon_grzx_zc.png">
+              <p>{{user.education?user.education:'未设置'}}</p>
+            </div>
+            <div class="left-text-big-box-right">
+              <img class="img-two" v-if="user.userType == '22'" src="@/assets/ZDimages/mine/icon_grzx_zy.png">
+              <img class="img-one" v-else src="@/assets/ZDimages/mine/icon_grzx_zw.png">
+              <p>{{user.major?user.major:'未设置'}}</p>
+            </div>
+          </div>
+          <div class="left-text-min-box">
+            <img src="@/assets/ZDimages/mine/icon_grzx_sjh.png">
+            <p>{{user.phonenumber?user.phonenumber:'未设置'}}</p>
+          </div>
+          <div class="left-text-min-box">
+            <img src="@/assets/ZDimages/mine/icon_grzx_yx.png">
+            <p>{{user.email?user.email:'未设置'}}</p>
+          </div>
+          <div class="left-text-min-box">
+            <img src="@/assets/ZDimages/mine/icon_grzx_bgl.png">
+            <p>{{user.deptName?user.deptName:'未设置'}}</p>
+          </div>
+        </div>
+        <div class="left-type-text-max-box">
+          <div>
+            <p>联系方式</p>
+            <p :class="user.phonenumber?'p-color-a':'p-color-b'">{{user.phonenumber?'已设置':'未设置'}}</p>
+          </div>
+          <div>
+            <p>系统头像</p>
+            <p :class="user.avatar?'p-color-a':'p-color-b'">{{user.avatar?'已设置':'未设置'}}</p>
+          </div>
+          <div>
+            <p>人脸照片</p>
+            <p :class="user.faceImg?'p-color-a':'p-color-b'">{{user.faceImg?'已设置':'未设置'}}</p>
+          </div>
+          <div>
+            <p>电子签名</p>
+            <p :class="user.signature?'p-color-a':'p-color-b'">{{user.signature?'已设置':'未设置'}}</p>
+          </div>
+        </div>
+      </div>
+      <div class="right-max-box scrollbar-box">
+        <div class="right-title-box">
+          <div class="title-button-min-box" @click="buttonTypeClick(1)">
+            <p :class="buttonType == '1'?'bottomColor':''">基本资料</p>
+            <p :class="buttonType == '1'?'bottomBack':''"></p>
+          </div>
+          <div class="title-button-min-box" @click="buttonTypeClick(2)">
+            <p :class="buttonType == '2'?'bottomColor':''">安全设置</p>
+            <p :class="buttonType == '2'?'bottomBack':''"></p>
+          </div>
+          <p class="right-null-p"></p>
+          <!--<p class="reset-button-one right-out-button" @click="outButton">返回</p>-->
+        </div>
+        <div v-if="buttonType == 1">
+          <el-form :model="userform" ref="userform" :rules="rules" :inline="true" >
+            <div>
+              <el-form-item class="form-item-min input-number-none-box" label="联系方式:" prop="phonenumber" label-width="120px">
+                <el-input-number
+                  :max="19999999999"
+                  v-model="userform.phonenumber"
+                  placeholder="请输入联系方式"
+                  clearable/>
+              </el-form-item>
+              <el-form-item class="form-item-min" label="邮箱:" prop="email" label-width="120px">
+                <el-input
+                  maxlength="40"
+                  v-model="userform.email"
+                  placeholder="请输入邮箱"
+                  clearable
+                  style="width:200px;"
+                  size="small"
+                />
+              </el-form-item>
+              <el-form-item class="form-item-min" label="出生年月:" prop="dateBirth" label-width="120px">
+                <el-date-picker
+                  v-model="userform.dateBirth"
+                  value-format="yyyy-MM-dd"
+                  type="date"
+                  style="width:200px;"
+                  placeholder="请选择出生日期">
+                </el-date-picker>
+              </el-form-item>
+            </div>
+            <div>
+              <el-form-item class="form-item-min" label="人脸照片:" prop="searchValue" label-width="120px">
+                <div class="up-data-box" style="width:200px;">
+                  <div class="up-data-min-box" style="display: flex;">
+                    <div class="up-data-button" v-if="!user.faceImg" @click="upFaceOpenClick(2)">
+                      <p>+</p>
+                      <p>上传</p>
+                    </div>
+                    <img class="img-one" :src="user.faceImg" v-if="user.faceImg" @click="upFaceOpenClick(2)">
+                  </div>
+                </div>
+              </el-form-item>
+              <el-form-item class="form-item-min" label="电子签名:" prop="searchValue" label-width="120px">
+                <div class="up-data-box">
+                  <div class="up-data-min-box" style="display: flex;">
+                    <el-upload
+                      class="position-button"
+                      :action="uploadImgUrlTwo"
+                      :show-file-list="false"
+                      :auto-upload="false"
+                      :on-change="signatureChange"
+                      accept="image/jpeg,image/gif,image/png"
+                      :headers="headers"
+                      :before-upload="beforeAvatarUpload">
+                      <div class="up-data-button" v-if="!user.signature">
+                        <p>+</p>
+                        <p>上传</p>
+                      </div>
+                      <img class="img-two" :src="user.signature" v-if="user.signature">
+                    </el-upload>
+                  </div>
+                </div>
+              </el-form-item>
+              <!--<el-form-item class="form-item-min" label="指纹:" prop="searchValue" label-width="120px">-->
+                <!--<div class="fingerprint_no" v-if="Quantity==0">-->
+                  <!--<p>暂未录入指纹</p>-->
+                  <!--<p>(请在小程序端操作)</p>-->
+                <!--</div>-->
+                <!--<div class="fingerprint_yes" v-if="Quantity!=0">-->
+                  <!--<div class="fingerprint_yes_img">-->
+                    <!--<img src="@/assets/ZDimages/icon_zw_bk.png">-->
+                    <!--<img src="@/assets/ZDimages/icon_wd_zw.png">-->
+                  <!--</div>-->
+                  <!--<p>已录入{{Quantity}}个指纹</p>-->
+                <!--</div>-->
+              <!--</el-form-item>-->
+            </div>
+          </el-form>
+          <p class="type-one-max-box add-button-one-120" @click="upDataProfile">保存</p>
+        </div>
+        <div v-if="buttonType == 2">
+          <el-form :model="form" ref="form" :inline="true" :rules="rules">
+            <div>
+              <el-form-item class="form-item-min" label="原始密码:" prop="oldPassword" label-width="120px">
+                <el-input
+                  maxlength="16"
+                  type="password"
+                  v-model.trim="form.oldPassword"
+                  placeholder="请输入原始密码"
+                  clearable
+                  size="small"
+                />
+              </el-form-item>
+              <el-form-item class="form-item-min" label="新密码:" prop="newPassword" label-width="120px">
+                <el-input
+                  maxlength="16"
+                  type="password"
+                  v-model.trim="form.newPassword"
+                  placeholder="请输入新密码"
+                  clearable
+                  size="small"
+                />
+              </el-form-item>
+              <el-form-item class="form-item-min" label="确认密码:" prop="confirmPassword" label-width="120px">
+                <el-input
+                  maxlength="16"
+                  type="password"
+                  v-model.trim="form.confirmPassword"
+                  placeholder="请确认密码"
+                  clearable
+                  size="small"
+                />
+              </el-form-item>
+              <span class="type-one-max-box add-button-one-120" style="margin-left:20px;display: inline-block;" @click="submit">保存</span>
+            </div>
+          </el-form>
+        </div>
+      </div>
+    </div>
+    <!--电子签名-->
+    <el-dialog class="up-img-box" title="上传电子签名" :visible.sync="upImgOpen" width="600px" append-to-body>
+      <p>示例</p>
+      <img class="img-one" src="@/assets/ZDimages/icon_scdzqm_sl.png">
+      <p>正楷签名</p>
+      <div class="cropper-box">
+        <vueCropper
+          ref="cropper"
+          :img="option.img"
+          :outputSize="option.outputSize"
+          :outputType="option.outputType"
+          :info="option.info"
+          :canScale="option.canScale"
+          :autoCrop="option.autoCrop"
+          :autoCropWidth="option.autoCropWidth"
+          :autoCropHeight="option.autoCropHeight"
+          :fixed="option.fixed"
+          :fixedNumber="option.fixedNumber"
+          :full="option.full"
+          :fixedBox="option.fixedBox"
+          :canMove="option.canMove"
+          :canMoveBox="option.canMoveBox"
+          :original="option.original"
+          :centerBox="option.centerBox"
+          :height="option.height"
+          :infoTrue="option.infoTrue"
+          :maxImgSize="option.maxImgSize"
+          :enlarge="option.enlarge"
+          :mode="option.mode"
+          @realTime="realTime"
+          @imgLoad="imgLoad"
+        ></vueCropper>
+        <p class="cropper-button" @click="upImgButton">保存查看</p>
+        <el-upload
+          class="position-button"
+          :action="uploadImgUrl"
+          :show-file-list="false"
+          :auto-upload="false"
+          :on-change="signatureChange"
+          accept="image/jpeg,image/gif,image/png"
+          :headers="headers"
+          :before-upload="beforeAvatarUpload">
+          <p style="position: absolute;right:100px;top:10px;z-index:1;color:#fff;background:#14AE10;cursor: pointer;padding:5px 10px;margin:0;border-radius:6px;">选择签名</p>
+        </el-upload>
+      </div>
+      <p style="color:#999;">请将签名置于选择框内以便提高识别度</p>
+      <img class="cropper-img" v-if="signatureData" :src="signatureData">
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="upImgOpenClick(1)">取 消</el-button>
+        <el-button type="primary" @click="upSignatureData">确 定</el-button>
+      </div>
+    </el-dialog>
+    <!--上传照片-->
+    <el-dialog class="up-img-box" title="上传照片" :visible.sync="upFaceOpen" width="600px" append-to-body>
+      <el-upload
+        ref="faceUpLoad"
+        class="position-button"
+        :action="uploadImgUrl"
+        :show-file-list="false"
+        :auto-upload="false"
+        :on-change="faceChange"
+        accept="image/jpeg,image/gif,image/png"
+        :on-success="(res)=>handleAvatarSuccess(res)"
+        :headers="headers"
+        :before-upload="beforeAvatarUpload">
+        <div v-if="!upFaceUrl" style="width:300px;height:300px;border: 1px dashed #E0E0E0;cursor: pointer;margin:20px 130px 0;">
+          <p style="text-align: center;color:#999;font-weight:500;font-size: 20px;line-height:300px;margin:0;">+</p>
+        </div>
+        <div v-if="upFaceUrl" class="scrollbar-box" style="width:560px;margin:0 auto;max-height:700px;overflow-y: scroll">
+          <img :src="upFaceUrl" style="max-width:560px;border: 1px dashed #E0E0E0;cursor: pointer;margin:0 auto;">
+        </div>
+      </el-upload>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="faceButton(1)">取 消</el-button>
+        <el-button type="primary" @click="faceButton(2)">确 定</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { Navbar } from '@/layout/components'
+import userAvatar from "./userAvatar";
+import { getUserProfile,updateUserPwd,changePhone,genSign,updateSignature,upDataProfile} from "@/api/system/user";
+import { getToken } from "@/utils/auth";
+export default {
+  name: "mine",
+  components: {
+    Navbar,
+    userAvatar
+  },
+  data(){
+    const equalToPassword = (rule, value, callback) => {
+      if (this.form.confirmPassword !== value) {
+        callback(new Error("两次输入的密码不一致"));
+      } else {
+        callback();
+      }
+    };
+    const equalToPasswordTwo = (rule, value, callback) => {
+      if (this.form.newPassword !== value) {
+        callback(new Error("两次输入的密码不一致"));
+      } else {
+        callback();
+      }
+    };
+    const validatePass = (rule, value, callback) => {
+      let reg = /^(?![A-z0-9]+$)(?=.[^%&',;=?$\x22])(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9]).{8,16}$/
+      console.log("reg.test(value)",reg.test(value))
+      if(reg.test(value)){
+        callback()
+      }else{
+        return callback(new Error('密码应在8-16位包括数字和字母与特殊字符'));
+      }
+    };
+    return{
+      buttonType:'1',
+      uploadImgUrl: window.location.href.split('://')[0]+'://' + process.env.VUE_APP_BASE_API + "/laboratory/studentinfo/commit/face", // 上传的图片服务器地址
+      uploadImgUrlTwo: window.location.href.split('://')[0]+'://' + process.env.VUE_APP_BASE_API + "/file/upload", // 上传的图片服务器地址
+      headers: {
+        Authorization: "Bearer " + getToken(),
+      },
+      pageType:false,
+      user: {},
+      roleGroup: {},
+      postGroup: {},
+      activeTab: "resetPwd",
+      form:{
+        oldPassword:"",
+        newPassword:"",
+        confirmPassword:""
+      },
+      userform:{},
+      userformData:{},
+      open:false,
+      phoneForm:{
+        phone:"",
+      },
+      // 表单校验
+      rules: {
+        oldPassword: [
+          { required: true, message: "旧密码不能为空", trigger: "blur" },
+        ],
+        newPassword: [
+          { required: true, message: "新密码不能为空", trigger: "blur" },
+          { min: 8, max: 16, message: "长度在 8 到 16 个字符", trigger: "blur" },
+          { required: true, validator: equalToPassword, trigger: "blur" },
+          { required: true, message: "请输入8-16位密码,不能输入连续性和重复性的密码,密码中需要包含:大写字母、小写字符、数字和字符", validator: validatePass, trigger: "blur" }
+        ],
+        confirmPassword: [
+          { required: true, message: "确认密码不能为空", trigger: "blur" },
+          { min: 8, max: 16, message: "长度在 8 到 16 个字符", trigger: "blur" },
+          { required: true, validator: equalToPasswordTwo, trigger: "blur" },
+          { required: true, message: "请输入8-16位密码,不能输入连续性和重复性的密码,密码中需要包含:大写字母、小写字符、数字和字符", validator: validatePass, trigger: "blur" }
+        ],
+        phonenumber: [
+          { required: true, message: "请输入11位手机号码", trigger: "blur" },
+          { validator: this.checkPhone, trigger: 'blur' },
+          // { min: 11, max: 11, message: "请输入11位手机号码", trigger: "blur" },
+          { required: true, message: "请输入11位手机号码", validator: this.spaceJudgment, trigger: "blur" }
+        ],
+        // phone: [
+        //   { required: true, message: "请输入手机号码", trigger: "blur" },
+        //   { required: true, message: "请输入手机号码", validator: this.spaceJudgment, trigger: "blur" }
+        // ],
+        // email: [
+        //   { required: true, message: "请输入邮箱地址", trigger: "blur" },
+        //   { required: true, message: "请输入正确的邮箱地址", type: 'email'},
+        //   { required: true, message: "请输入邮箱地址", validator: this.spaceJudgment, trigger: "blur" }
+        // ],
+        // dateBirth: [
+        //   { required: true, message: "请选择出生日期", trigger: "blur" }
+        // ],
+      },
+      //上传签名开关
+      upImgOpen:false,
+      option:{
+        img: '', // 裁剪图片的地址
+        outputSize: 1,       //裁剪生成图片的质量(可选0.1 - 1)
+        outputType: 'png',  //裁剪生成图片的格式(jpeg || png || webp)
+        info: true,          //图片大小信息
+        canScale: true,      //图片是否允许滚轮缩放
+        autoCrop: true,      //是否默认生成截图框
+        autoCropWidth: 240,  //默认生成截图框宽度
+        autoCropHeight: 80, //默认生成截图框高度
+        fixed: true,         //是否开启截图框宽高固定比例
+        fixedNumber: [3, 1], //截图框的宽高比例
+        full: false,         //false按原比例裁切图片,不失真
+        fixedBox: true,      //固定截图框大小,不允许改变
+        canMove: false,      //上传图片是否可以移动
+        canMoveBox: true,    //截图框能否拖动
+        original: false,     //上传图片按照原始比例渲染
+        centerBox: false,    //截图框是否被限制在图片里面
+        height: true,        //是否按照设备的dpr 输出等比例图片
+        infoTrue: false,     //true为展示真实输出图片宽高,false展示看到的截图框宽高
+        maxImgSize: 3000,    //限制图片最大宽度和高度
+        enlarge: 1,          //图片根据截图框输出比例倍数
+        mode: '560px 400px'  //图片默认渲染方式
+      },
+      previews:{},
+      //上传人脸
+      upFaceOpen:false,
+      upFaceUrl:"",
+      //临时签名数据
+      signatureData:"",
+      Quantity:0,//指纹录取数量
+    }
+  },
+  created() {
+    this.getUser();
+    // this.fingerprintQuantityFun();
+  },
+  methods: {
+    //修改用户信息
+    upDataProfile(){
+      this.$refs["userform"].validate(valid => {
+        if (valid) {
+          if(!this.userform.phonenumber&&!this.userform.email&&!this.userform.dateBirth){
+            this.msgError('联系方式/邮箱/出生年月,请至少填写一项进行修改')
+            return
+          }
+          if((this.userform.phonenumber == this.userformData.phonenumber)&&
+            (this.userform.email == this.userformData.email)&&
+            (this.userform.dateBirth == this.userformData.dateBirth)){
+            this.msgError('联系方式/邮箱/出生年月,请至少修改一项再进行保存操作')
+            return
+          }
+          // let obj = JSON.parse(JSON.stringify(this.userform));
+          let obj = {};
+          obj.phonenumber = this.userform.phonenumber;
+          if(this.userform.email){
+            let regex = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;
+            if(!regex.test(this.userform.email)){
+              this.msgError('请输入正确的邮箱地址')
+              return
+            }else{
+              obj.email = this.userform.email;
+            }
+          }else {
+            obj.email = '';
+          }
+          if(this.userform.dateBirth){
+            obj.dateBirth = this.userform.dateBirth;
+          }else{
+            obj.dateBirth = '';
+          }
+          obj.userId = this.user.userId;
+          upDataProfile(obj).then(response => {
+            this.msgSuccess('操作成功');
+            this.getUser();
+          });
+        }
+      })
+    },
+    //手机号验证
+    checkPhone(rule, value, callback) {
+      if (!value) {
+        return callback(new Error('手机号码不能为空'))
+      } else {
+        if(value == '19999999999'){
+          return callback(new Error('请输入正确的手机号码'))
+        }
+        const reg = /^1[3|4|5|7|8|9][0-9]\d{8}$/
+        if (reg.test(value)) {
+          callback()
+        } else {
+          return callback(new Error('请输入正确的手机号码'))
+        }
+      }
+    },
+    //修改按钮密码
+    submit() {
+      let self = this;
+      self.$refs["form"].validate(valid => {
+        if (valid) {
+          this.$confirm('确定要修改吗', "警告", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning"
+          }).then(function() {
+            self.updateUserPwd();
+          }).then(() => {
+          }).catch(() => {});
+        }
+      });
+    },
+    //指纹-查询用户指纹录取数量
+    fingerprintQuantityFun(){
+      let _this=this;
+      fingerprintQuantity(localStorage.getItem('userId')).then(response => {
+          if(response.code == 200){
+            _this.Quantity=response.data;
+          }
+        }
+      );
+    },
+    //修改密码接口
+    updateUserPwd(){
+      updateUserPwd(this.form.oldPassword, this.form.newPassword).then(
+        response => {
+          this.form.oldPassword = "";
+          this.form.newPassword = "";
+          this.form.confirmPassword = "";
+          this.msgSuccess("修改成功");
+        }
+      );
+    },
+    //返回按钮
+    outButton(){
+      this.$router.go(-1)
+    },
+    //页面按钮点击
+    buttonTypeClick(type){
+      if(this.buttonType != type){
+        this.buttonType = type;
+      }
+    },
+    //获取信息
+    getUser() {
+      getUserProfile().then(response => {
+        this.user = response.data;
+        this.roleGroup = response.roleGroup;
+        this.postGroup = response.postGroup;
+        let obj = {
+          phonenumber:response.data.phonenumber,
+          email:response.data.email,
+          dateBirth:response.data.dateBirth,
+        }
+        this.$set(this,'userform',JSON.parse(JSON.stringify(obj)));
+        this.$set(this,'userformData',JSON.parse(JSON.stringify(obj)));
+        this.pageType = true;
+      });
+    },
+    //上传签名
+    upSignatureData(){
+      if(!this.signatureData){
+        this.msgError('请先选择签名上传并保存查看')
+      }
+      var blob = this.dataURLtoBlob(this.signatureData);
+      var file = this.blobToFile(blob, 'dx.jpg');
+      let formData = new FormData();
+      formData.append('file',file,"DX.jpg")
+      console.log("formData",formData);
+      updateSignature(formData).then(response => {
+        if(response.code == 200){
+          this.msgSuccess("操作成功");
+          this.upImgOpen = false;
+          this.getUser();
+        }
+      });
+    },
+    //照片页面开关
+    upFaceOpenClick(type){
+      if(type == 1){
+        this.upFaceOpen = false;
+      }else if (type == 2){
+        this.upFaceUrl = this.user.faceImg;
+        this.upFaceOpen = true;
+      }
+    },
+    //签名页面开关
+    upImgOpenClick(type){
+      if(type == 1){
+        this.upImgOpen = false;
+      }else if (type == 2){
+        this.option.img = this.user.signature;
+        this.signatureData = this.user.signature;
+        this.upImgOpen = true;
+      }
+    },
+    //确定签名
+    upImgButton(){
+      let self = this;
+      this.$refs.cropper.getCropBlob(async (data) => {
+        let formData = new FormData();
+        formData.append('file',data,"DX.jpg")
+        genSign(formData).then(response => {
+          if(response.code == 200){
+            this.signatureData = 'data:image/png;base64,'+response.data;
+          } else {
+            this.msgError(response.msg)
+          }
+        });
+      })
+    },
+    //照片选择
+    faceChange(val){
+      const windowURL = window.URL || window.webkitURL;
+      this.upFaceUrl = windowURL.createObjectURL(val.raw)
+    },
+    //签名选择
+    signatureChange(val){
+      const windowURL = window.URL || window.webkitURL;
+      this.option.img = windowURL.createObjectURL(val.raw)
+      this.signatureData = "";
+      this.upImgOpen = true;
+    },
+    // 照片上传按钮
+    faceButton(type){
+      if(type==1){
+        this.upFaceOpen = false;
+      }else if(type == 2){
+        this.$refs.faceUpLoad.submit();
+      }
+    },
+    //上传
+    handleAvatarSuccess(res, type) {
+      if(res.code == 200){
+        this.user.faceImg = res.data.cardUrl;
+        this.upFaceOpen = false;
+        this.getUser();
+        this.msgSuccess(res.msg)
+        this.$forceUpdate()
+      }else{
+        this.msgError(res.msg)
+      }
+    },
+    beforeAvatarUpload(file) {
+      let type = false;
+      if (file.type == 'image/png' || file.type == 'image/jpeg' || file.type == 'image/gif') {
+        type = true;
+      }else{
+        this.$message.error('只能上传png/jpeg/gif格式图片');
+        type = false;
+      }
+      return type;
+    },
+    // 实时预览函数
+    realTime(data) {
+      console.log("实时预览函数",data)
+      this.previews = data;
+    },
+    //图片加载的回调 imgLoad 返回结果success, error
+    imgLoad (msg) {
+      console.log("图片加载的回调",msg)
+      // console.log('imgLoad')
+      // console.log(msg)
+    },
+    //将base64转换为blob
+    dataURLtoBlob: function(dataurl) {
+      var  arr = dataurl.split(',')
+      var  mime = arr[0].match(/:(.*?);/)[1]
+      var  bstr = atob(arr[1])
+      var  n = bstr.length
+      var  u8arr = new Uint8Array(n)
+      while (n--) {
+        u8arr[n] = bstr.charCodeAt(n);
+      }
+      return new Blob([u8arr], { type: mime });
+    },
+    //将blob转换为file
+    blobToFile: function(theBlob, fileName){
+      theBlob.lastModifiedDate = new Date();
+      theBlob.name = fileName;
+      return theBlob;
+    },
+  }
+}
+</script>
+
+<style scoped lang="scss">
+.mine{
+  height:100%;
+  width:100%;
+  display: flex;
+  flex-direction: column;
+  overflow: hidden;
+  *{
+    margin:0;
+  }
+  .mine-page{
+    flex:1;
+    display: flex;
+    overflow: hidden;
+    .left-max-box{
+      width:300px;
+      /*margin:20px;*/
+      margin:5px 20px 20px 10px;
+      box-shadow: 0 0 8px 2px rgba(0, 0, 0, 0.1);
+      border-radius:10px;
+      .left-title{
+        font-size:18px;
+        text-align: center;
+        line-height: 30px;
+        margin-top:30px;
+        color:#0045af;
+      }
+      .left-user-img{
+        width:130px;
+        height:130px;
+        overflow: hidden;
+        border-radius:50%;
+        margin:30px auto 20px;
+      }
+      .left-name{
+        font-size:20px;
+        line-height:43px;
+        text-align: center;
+      }
+      .left-num{
+        font-size:16px;
+        line-height:38px;
+        text-align: center;
+      }
+      .left-text-max-box{
+        border-top:1px dashed #dedede;
+        border-bottom:1px dashed #dedede;
+        margin:24px 10px 0;
+        padding:20px 0;
+        .left-text-big-box{
+          display: flex;
+          .left-text-big-box-left{
+            width:100px;
+            height:38px;
+            display: flex;
+            margin-right:10px;
+            img{
+              width:16px;
+              height:16px;
+              margin:11px 10px 0;
+            }
+            p{
+              flex:1;
+              font-size:14px;
+              line-height:38px;
+            }
+          }
+          .left-text-big-box-right{
+            height:38px;
+            flex:1;
+            display: flex;
+            .img-one{
+              width:16px;
+              height:14px;
+              margin:12px 10px 0;
+            }
+            .img-two{
+              width:16px;
+              height:16px;
+              margin:11px 10px 0;
+            }
+            p{
+              flex:1;
+              font-size:14px;
+              line-height:38px;
+            }
+          }
+        }
+        .left-text-min-box{
+          display: flex;
+          height:38px;
+          img{
+            width:16px;
+            height:16px;
+            margin:11px 10px 0;
+          }
+          p{
+            flex:1;
+            font-size:14px;
+            line-height:38px;
+          }
+        }
+      }
+      .left-type-text-max-box{
+        padding:20px 0;
+        div{
+          display: flex;
+          p{
+            flex:1;
+            font-size:14px;
+            color:#333;
+            line-height:40px;
+          }
+          p:nth-child(1){
+            text-align: left;
+            margin-left:32px;
+          }
+          p:nth-child(2){
+            text-align: right;
+            margin-right:48px;
+          }
+          .p-color-a{
+            color:#06B924;
+          }
+          .p-color-b{
+            color:#FF9735;
+          }
+        }
+      }
+    }
+    .right-max-box{
+      flex:1;
+      /*margin:20px 20px 20px 0;*/
+      margin:5px 20px 20px 0;
+      box-shadow: 0 0 8px 2px rgba(0, 0, 0, 0.1);
+      border-radius:10px;
+      display: flex;
+      flex-direction: column;
+      .right-title-box{
+        display: flex;
+        border-bottom:1px solid #dedede;
+        .title-button-min-box{
+          height:90px;
+          margin:0 20px;
+          cursor: pointer;
+          p:nth-child(1){
+            margin-top:6px;
+            line-height:78px;
+            font-size:16px;
+          }
+          p:nth-child(2){
+            height:6px;
+            border-radius:4px;
+          }
+          .bottomColor{
+            color:#0045AF;
+          }
+          .bottomBack{
+            background:#0045AF ;
+          }
+        }
+        .right-null-p{
+          flex:1;
+        }
+        .right-out-button{
+          margin:20px;
+        }
+      }
+      .type-one-max-box{
+        width:100px;
+        margin:40px auto;
+      }
+      .up-data-box{
+        display: inline-block;
+        width:280px;
+        line-height:20px;
+        margin-bottom:30px;
+        .up-data-min-box{
+          .up-data-title{
+            font-size:15px;
+            color:#333;
+          }
+          .up-data-button{
+            width:120px;
+            height:120px;
+            border: 1px dashed #E0E0E0;
+            cursor: pointer;
+            p{
+              text-align: center;
+              color:#999;
+              font-weight:500;
+            }
+            p:nth-child(1){
+              font-size: 20px;
+              line-height:40px;
+              margin-top:20px;
+            }
+            p:nth-child(2){
+              font-size: 16px;
+
+            }
+          }
+          .img-one{
+            width:120px;
+            height:120px;
+          }
+          .img-two{
+            width: 240px;
+            height:80px;
+          }
+        }
+      }
+      .fingerprint_no{
+        >p:nth-of-type(1){
+          color: #666666;
+        }
+        >p:nth-of-type(2){
+          color: #F56C6C;
+        }
+      }
+      .fingerprint_yes{
+        .fingerprint_yes_img{
+          width: 122px;
+          height: 142px;
+          position: relative;
+          >img:nth-of-type(1){
+            width: 122px;
+            height: 142px;
+            position: absolute;
+          }
+          >img:nth-of-type(2){
+            width: 65px;
+            height: 88px;
+            position: absolute;
+            left: 29px;
+            top: 29px;
+          }
+        }
+        >p{
+          color: #666;
+          text-align: center;
+        }
+      }
+      .form-item-min{
+        margin-top:40px;
+      }
+    }
+  }
+}
+</style>
+<style lang="scss">
+.up-img-box{
+  .el-dialog__body{
+    padding-top:0;
+  }
+  .img-one{
+    width:560px;
+    height:150px;
+  }
+  .cropper-img{
+    display: block;
+    border:1px solid #e0e0e0;
+    width:360px;
+    height:120px;
+    margin:0 auto;
+  }
+  .cropper-box{
+    width:560px;
+    height:270px;
+    position: relative;
+    .cropper-button{
+      position: absolute;
+      right:10px;top:10px;
+      z-index:1;
+      background: #0183FA;
+      color:#fff;
+      cursor: pointer;
+      padding:5px 10px;
+      margin:0;
+      border-radius:6px;
+    }
+  }
+}
+.mine{
+  .mine-page{
+    .input-number-none-box{
+      input{
+        text-align: left;
+      }
+    }
+  }
+}
+</style>

+ 116 - 0
src/views/secureAccess/approval/index_SuZhouDX.vue

@@ -0,0 +1,116 @@
+<!--准入资格审核-->
+<template>
+  <div class="app-container approval">
+    <div class="top-big-box" v-if="pageType==1||pageType==2||pageType==3">
+      <div>
+        <p :class="pageType==1?'color_one':'color_99'" @click="tableClick(1)">待审核</p>
+        <p :class="{'back_one':pageType==1}"></p>
+      </div>
+      <div>
+        <p :class="pageType==2?'color_one':'color_99'" @click="tableClick(2)">已通过</p>
+        <p :class="{'back_one':pageType==2}"></p>
+      </div>
+      <div>
+        <p :class="pageType==3?'color_one':'color_99'" @click="tableClick(3)">未通过</p>
+        <p :class="{'back_one':pageType==3}"></p>
+      </div>
+      <p class="null-p"></p>
+      <!--<p class="add-button-one-120" @click="tableClick(4)"-->
+      <!--&gt;<i class="el-icon-plus"></i>准入资格配置</p>-->
+    </div>
+    <pending v-if="pageType==1"></pending>
+    <passed v-if="pageType==2"></passed>
+    <failed v-if="pageType==3"></failed>
+    <!--<configuration v-if="pageType==4"></configuration>-->
+    <info-page v-if="pageType==5" :infoData="infoData"></info-page>
+  </div>
+</template>
+<script>
+  import pending from "./pending.vue";
+  import passed from "./passed.vue";
+  import failed from "./failed.vue";
+  // import configuration from "./configuration.vue";
+  import infoPage from "./infoPage.vue";
+
+export default {
+  components: {
+    pending,
+    passed,
+    failed,
+    // configuration,
+    infoPage
+  },
+  name: "Approval",
+  data() {
+    return {
+      pageType:1,
+      pageTypeTwo:1,
+      infoData:{
+        type:null,
+        list:0,//type=0,审核,1查看
+      }
+    };
+  },
+  created() {
+
+  },
+  methods: {
+    pageClick(type,row){
+      this.infoData.type = type;
+      this.infoData.list = row;
+      this.pageType = 5;
+    },
+    pageOff(){
+      // this.pageType = JSON.parse(JSON.stringify(this.pageTypeTwo));
+      this.pageType = this.pageTypeTwo;
+    },
+    //选项卡切换
+    tableClick(type){
+      if(this.pageType!=type){
+        if(type == 4){
+          // this.pageTypeTwo = JSON.parse(JSON.stringify(this.pageType));
+          this.pageTypeTwo = this.pageType;
+        }
+        this.pageType = type;
+      }
+    },
+  }
+};
+</script>
+<style scoped lang="scss">
+  .approval {
+    display: flex!important;
+    flex-direction: column;
+    box-shadow: 0 0 8px 2px rgba(0, 0, 0, 0.1);
+    padding:20px!important;
+    .top-big-box{
+      display: flex;
+      border-bottom:2px solid #E0E0E0;
+      margin-top:-9px;
+      margin-bottom:32px;
+      div{
+        cursor:pointer;
+        width:128px;
+        p:nth-child(1){
+          line-height:58px;
+          font-size:18px;
+          text-align: center;
+          margin:0;
+        }
+        p:nth-child(2){
+          width:80px;
+          height:4px;
+          margin:0 auto;
+          border-radius:1px;
+        }
+      }
+      .null-p{
+        flex:1;
+      }
+      .add-button-one-120{
+        margin-top:9px;
+        margin-right:20px;
+      }
+    }
+  }
+</style>

+ 363 - 377
src/views/secureAccess/approval/infoPage.vue

@@ -6,13 +6,13 @@
       <p class="button-p reset-button-one" @click="backPage">返回</p>
     </div>
     <!--<div class="item-max-box" style="margin-top:30px;">-->
-    <!--<div class="item-title-box">{{subjectData.labSecurityApply.userType == '11'?'教师信息(关联教师信息材料):':(subjectData.labSecurityApply.userType == '22'?'学生信息(关联学生信息材料):':'')}}</div>-->
-    <!--<div class="item-user-box">-->
-    <!--<div>姓名:{{subjectData.labSecurityApply.userName}}</div>-->
-    <!--<div>{{subjectData.labSecurityApply.userType == '11'?'工号:':(subjectData.labSecurityApply.userType == '22'?'学号:':'')}}{{subjectData.labSecurityApply.userNumber}}</div>-->
-    <!--<div>学院:{{subjectData.labSecurityApply.deptName}}</div>-->
-    <!--<div v-if="subjectData.labSecurityApply.userType == '22'">专业:{{subjectData.labSecurityApply.major}}</div>-->
-    <!--</div>-->
+      <!--<div class="item-title-box">{{subjectData.labSecurityApply.userType == '11'?'教师信息(关联教师信息材料):':(subjectData.labSecurityApply.userType == '22'?'学生信息(关联学生信息材料):':'')}}</div>-->
+      <!--<div class="item-user-box">-->
+        <!--<div>姓名:{{subjectData.labSecurityApply.userName}}</div>-->
+        <!--<div>{{subjectData.labSecurityApply.userType == '11'?'工号:':(subjectData.labSecurityApply.userType == '22'?'学号:':'')}}{{subjectData.labSecurityApply.userNumber}}</div>-->
+        <!--<div>学院:{{subjectData.labSecurityApply.deptName}}</div>-->
+        <!--<div v-if="subjectData.labSecurityApply.userType == '22'">专业:{{subjectData.labSecurityApply.major}}</div>-->
+      <!--</div>-->
     <!--</div>-->
     <div class="admittance_info">
       <li>申请实验室:<i>{{subjectData.labSecurityApply.laboratoryDeptName}}-{{subjectData.labSecurityApply.subjectName}}</i></li>
@@ -44,56 +44,56 @@
           <el-checkbox  @change="checkedImg(minItem)" v-if="isLook" >{{minItem.name}}</el-checkbox>
           <i v-if="!isLook" >{{minItem.name}}</i>
           <i class="file_list_look" @click="lookFile(minItem)">查看</i>
-          <!--          <a class="file_list_look" :href="item2.dataUrl.split(';')[1].replace(/,/g,'')" target="_blank">查看</a>-->
+<!--          <a class="file_list_look" :href="item2.dataUrl.split(';')[1].replace(/,/g,'')" target="_blank">查看</a>-->
           <i v-if="isLook" class="file_list_look" @click="handleExport(1,minItem)">下载</i>
         </div>
       </div>
       <div class="item-title-box" v-if="subjectData.labSecurityApply.auditStatus!=2">审核备注:</div>
       <el-input type="textarea" style="margin-top: 20px" v-model="rejectCause" placeholder="请输入审核备注" maxlength="50" v-if="subjectData.labSecurityApply.auditStatus!=2"/>
-      <div class="btn_list">
-        <p v-if="isLook" class="button-p reset-button-one" style="width:100px;" @click="handleExport(2,'')">打包下载</p>
-        <p v-if="isLook&&subjectData.labSecurityApply.auditStatus!=2" class="inquire-button-one" style="width:100px;" @click="backPage()">确定</p>
-        <p v-if="!isLook" class="button-p reset-button-one" style="width:100px;" @click="auditClick(1)">驳回</p>
-        <p v-if="!isLook" class="inquire-button-one" style="width:100px;" @click="auditClick(2)">通过</p>
-      </div>
+     <div class="btn_list">
+       <p v-if="isLook" class="button-p reset-button-one" style="width:100px;" @click="handleExport(2,'')">打包下载</p>
+       <p v-if="isLook&&subjectData.labSecurityApply.auditStatus!=2" class="inquire-button-one" style="width:100px;" @click="backPage()">确定</p>
+       <p v-if="!isLook" class="button-p reset-button-one" style="width:100px;" @click="auditClick(1)">驳回</p>
+       <p v-if="!isLook" class="inquire-button-one" style="width:100px;" @click="auditClick(2)">通过</p>
+     </div>
     </div>
     <div v-for="(item,index) in subjectData.listTemp" :key="index">
-      <!--      <div class="item-max-box" style="margin-top:30px;" v-if="item.materialType==2&&item.relationType==1">
-              <div class="item-title-box">{{subjectData.labSecurityApply.userType == '11'?'教师信息(关联教师信息材料):':(subjectData.labSecurityApply.userType == '22'?'学生信息(关联学生信息材料):':'')}}</div>
-              <div class="item-user-box">
-                <div>
-                  <p>姓名:</p>
-                  <p>{{subjectData.labSecurityApply.userName}}</p>
-                </div>
-                <div>
-                  <p>{{subjectData.labSecurityApply.userType == '11'?'工号:':(subjectData.labSecurityApply.userType == '22'?'学号:':'')}}</p>
-                  <p>{{subjectData.labSecurityApply.userNumber}}</p>
-                </div>
-                <div>
-                  <p>学院:</p>
-                  <p>{{subjectData.labSecurityApply.deptName}}</p>
-                </div>
-                <div v-if="subjectData.labSecurityApply.userType == '22'">
-                  <p>专业:</p>
-                  <p>{{subjectData.labSecurityApply.userMajor}}</p>
-                </div>
-              </div>
-            </div>-->
-      <!--      <div class="item-max-box" v-if="item.materialType==2&&item.relationType==2&&subjectData.labSecurityApply.userType == '22'">
-              <div class="item-title-box">安全考试证书:</div>
-              <img v-if="subjectData.listcert[0]" class="item-img-box" :src="subjectData.listcert[0].cert_url">
-              <p v-if="!subjectData.listcert[0]" style="margin-left:40px;color:#999;font-size:14px;">暂无证书</p>
-            </div>
-            <div class="item-max-box" v-if="item.materialType==1">
-              <div class="item-title-box">{{item.materialName}}:</div>
-              <div class="item-for-text-box">
-                <p :class="iframeSrc[index].forIndex == minIndex ?'color-p':''" v-for="(minItem,minIndex) in item.upList" @click="forClick(minItem,minIndex,index)">{{minItem.name}}</p>
-              </div>
-              <iframe
-                class="item-html-box"
-                :src="iframeSrc[index].url" scrolling="auto" frameborder="0">
-              </iframe>
-            </div>-->
+<!--      <div class="item-max-box" style="margin-top:30px;" v-if="item.materialType==2&&item.relationType==1">
+        <div class="item-title-box">{{subjectData.labSecurityApply.userType == '11'?'教师信息(关联教师信息材料):':(subjectData.labSecurityApply.userType == '22'?'学生信息(关联学生信息材料):':'')}}</div>
+        <div class="item-user-box">
+          <div>
+            <p>姓名:</p>
+            <p>{{subjectData.labSecurityApply.userName}}</p>
+          </div>
+          <div>
+            <p>{{subjectData.labSecurityApply.userType == '11'?'工号:':(subjectData.labSecurityApply.userType == '22'?'学号:':'')}}</p>
+            <p>{{subjectData.labSecurityApply.userNumber}}</p>
+          </div>
+          <div>
+            <p>学院:</p>
+            <p>{{subjectData.labSecurityApply.deptName}}</p>
+          </div>
+          <div v-if="subjectData.labSecurityApply.userType == '22'">
+            <p>专业:</p>
+            <p>{{subjectData.labSecurityApply.userMajor}}</p>
+          </div>
+        </div>
+      </div>-->
+<!--      <div class="item-max-box" v-if="item.materialType==2&&item.relationType==2&&subjectData.labSecurityApply.userType == '22'">
+        <div class="item-title-box">安全考试证书:</div>
+        <img v-if="subjectData.listcert[0]" class="item-img-box" :src="subjectData.listcert[0].cert_url">
+        <p v-if="!subjectData.listcert[0]" style="margin-left:40px;color:#999;font-size:14px;">暂无证书</p>
+      </div>
+      <div class="item-max-box" v-if="item.materialType==1">
+        <div class="item-title-box">{{item.materialName}}:</div>
+        <div class="item-for-text-box">
+          <p :class="iframeSrc[index].forIndex == minIndex ?'color-p':''" v-for="(minItem,minIndex) in item.upList" @click="forClick(minItem,minIndex,index)">{{minItem.name}}</p>
+        </div>
+        <iframe
+          class="item-html-box"
+          :src="iframeSrc[index].url" scrolling="auto" frameborder="0">
+        </iframe>
+      </div>-->
     </div>
 
     <!-- 添加或修改安全准入申请材料配置对话框 -->
@@ -120,320 +120,267 @@
 let Base64 = require('js-base64').Base64;
 import {downloadwBatch, getDetails, laboratoryApply} from "@/api/laboratory/approval";
 import {optionHazard} from "@/api/laboratory/hazard";
-export default {
-  name: "info-page",
-  props:{
-    infoData: {},
-  },
-  data() {
-    return {
-      pageType:false,
-      forIndex:0,
-      subjectData:{},
-      iframeSrc:[],
-      open:false,
-      form:{},
-      checkList:[],
-      rejectCause:'',//审核备注
-      isLook:false,//判断是查看还是审核
-      //打包下载查询参数
-      packDown:{
-        userName:'',
-        userNumber:'',
-        subjectName:'',
-        fileList:'',
-
-      },
-      mrList:[],
-      // 表单校验
-      rules: {
-        name: [
-          { required: true, message: "请输入检查项名称", trigger: "blur" },
-          { required: true, message: "请输入检查项名称", validator: this.spaceJudgment, trigger: "blur" }
-        ],
-        code: [
-          { required: true, message: "请输入条款号", trigger: "blur" },
-          { required: true, message: "请输入条款号", validator: this.spaceJudgment, trigger: "blur" }
-        ],
-      },
-    };
-  },
-  created() {
+  export default {
+    name: "info-page",
+    props:{
+      infoData: {},
+    },
+    data() {
+      return {
+        pageType:false,
+        forIndex:0,
+        subjectData:{},
+        iframeSrc:[],
+        open:false,
+        form:{},
+        checkList:[],
+        rejectCause:'',//审核备注
+        isLook:false,//判断是查看还是审核
+        //打包下载查询参数
+        packDown:{
+          userName:'',
+          userNumber:'',
+          subjectName:'',
+          fileList:'',
 
-    if(this.infoData.type==0){
-      this.isLook=false;
+        },
+        mrList:[],
+        // 表单校验
+        rules: {
+          name: [
+            { required: true, message: "请输入检查项名称", trigger: "blur" },
+            { required: true, message: "请输入检查项名称", validator: this.spaceJudgment, trigger: "blur" }
+          ],
+          code: [
+            { required: true, message: "请输入条款号", trigger: "blur" },
+            { required: true, message: "请输入条款号", validator: this.spaceJudgment, trigger: "blur" }
+          ],
+        },
+      };
+    },
+    created() {
 
-    }else if(this.infoData.type==1){
-      this.isLook=true;
-    }
-    this.getDetails();
+      if(this.infoData.type==0){
+        this.isLook=false;
 
+      }else if(this.infoData.type==1){
+        this.isLook=true;
+      }
+      this.getDetails();
 
-  },
-  methods: {
-    lookFile(item){
-      let visitUrl=window.location.href.split('://')[0]+'://'+process.env.VUE_APP_BASE_API+'/admin/'+item.url;
-      console.log(visitUrl)
-      window.open(localStorage.getItem('filePreviewUrl') + '/onlinePreview?url='+encodeURIComponent(Base64.encode(visitUrl)));
 
     },
-    /** 导出按钮操作 */
-    handleExport(type,item) {
-      console.log(item)
-      if(type==1){//单个
-        this.packDown.userName=this.subjectData.sysUser.nickName
-        this.packDown.userNumber=this.subjectData.sysUser.userName
-        this.packDown.subjectName=this.subjectData.labSecurityApply.subjectName
-        let visitUrl=item.name+';'+item.url+',';
+    methods: {
+      lookFile(item){
+        let visitUrl=window.location.href.split('://')[0]+'://'+this.judgmentNetworkReturnAddress()+'/admin/'+item.url;
+        console.log(visitUrl)
+        window.open(localStorage.getItem('filePreviewUrl') + '/onlinePreview?url='+encodeURIComponent(Base64.encode(visitUrl)));
 
-        this.packDown.fileList=visitUrl
+      },
+      /** 导出按钮操作 */
+      handleExport(type,item) {
+        console.log(item)
+        if(type==1){//单个
+          this.packDown.userName=this.subjectData.sysUser.nickName
+          this.packDown.userNumber=this.subjectData.sysUser.userName
+          this.packDown.subjectName=this.subjectData.labSecurityApply.subjectName
+          let visitUrl=item.name+';'+item.url+',';
 
-        this.download('/laboratory/apply/downloadwBatch', {
-          ...this.packDown
-        }, this.packDown.userName+'_'+this.packDown.userNumber+'_'+this.packDown.subjectName+`.zip`)
+          this.packDown.fileList=visitUrl
 
+          this.download('/laboratory/apply/downloadwBatch', {
+            ...this.packDown
+          }, this.packDown.userName+'_'+this.packDown.userNumber+'_'+this.packDown.subjectName+`.zip`)
 
 
 
 
-      }else if(type==2){// 打包下载
-        console.log(this.mrList)
-        if(this.mrList.length<=0){
-          this.msgInfo("请先勾选需要打包下载的文件!");
-        }else{
-          let list=[];
-          this.mrList.forEach(function (item){
-            list.push(item+',')
-          })
-          console.log(list)
-          this.packDown.userName=this.subjectData.sysUser.nickName
-          this.packDown.userNumber=this.subjectData.sysUser.userName
-          this.packDown.subjectName=this.subjectData.labSecurityApply.subjectName
-          this.packDown.fileList= list.join('@@')
 
+        }else if(type==2){// 打包下载
+          console.log(this.mrList)
+          if(this.mrList.length<=0){
+            this.msgInfo("请先勾选需要打包下载的文件!");
+          }else{
+            let list=[];
+            this.mrList.forEach(function (item){
+                list.push(item+',')
+            })
+            console.log(list)
+            this.packDown.userName=this.subjectData.sysUser.nickName
+            this.packDown.userNumber=this.subjectData.sysUser.userName
+            this.packDown.subjectName=this.subjectData.labSecurityApply.subjectName
+            this.packDown.fileList= list.join('@@')
 
 
-          this.download('/laboratory/apply/downloadwBatch', {
-            ...this.packDown
-          }, this.packDown.userName+'_'+this.packDown.userNumber+'_'+this.packDown.subjectName+`.zip`)
-        }
 
-      }
+            this.download('/laboratory/apply/downloadwBatch', {
+              ...this.packDown
+            }, this.packDown.userName+'_'+this.packDown.userNumber+'_'+this.packDown.subjectName+`.zip`)
+          }
 
+        }
 
-    },
-    checkedImg(item){
-      console.log(item)
-      if(event.target.checked==false){
-        this.mrList.splice(this.mrList.indexOf(item.url),1);
-      }else{
-        this.mrList.push(item.name+';'+item.url)
-      }
-      console.log(this.mrList)
 
+      },
+      checkedImg(item){
+        console.log(item)
+        if(event.target.checked==false){
+          this.mrList.splice(this.mrList.indexOf(item.url),1);
+        }else{
+          this.mrList.push(item.name+';'+item.url)
+        }
+        console.log(this.mrList)
 
-    },
-    //审核按钮
-    auditClick(type){
-      let self = this;
-      if(type == 1){
-        this.open = true;
-      }else if(type == 2){
-        this.$confirm('是否确认审核?', "", {
-          confirmButtonText: "确定",
-          cancelButtonText: "取消",
-          type: "warning"
-        }).then(function() {
-          self.laboratoryApply(type);
-        }).then(() => {}).catch(() => {});
-      }
-    },
-    laboratoryApply(type){
-      let obj = {
-        id:this.infoData.list.id,
-        auditStatus:type,
-        rejectCause:this.rejectCause
-      };
-      if(type == 1){
-        obj.rejectCause = this.form.rejectCause;
-        obj.rejectMaterial = this.checkList + '';
-      }
-      laboratoryApply(obj).then(response => {
-        if(response.code==200){
-          this.msgSuccess("操作成功");
-          this.$parent.tableClick(1);
-        }else if(response.code==205){
-          this.$confirm(response.msg, "警告", {
+
+      },
+      //审核按钮
+      auditClick(type){
+        let self = this;
+        if(type == 1){
+          this.open = true;
+        }else if(type == 2){
+          this.$confirm('是否确认审核?', "", {
             confirmButtonText: "确定",
             cancelButtonText: "取消",
             type: "warning"
-          }).then(() => {
-            //  确定
-            this.$router.push({ path: '/comprehensive/laboratoryManagement/accessAuthorization' });
-          }).catch(function() {
-            //  取消
-            this.$parent.tableClick(1);
-          });
+          }).then(function() {
+            self.laboratoryApply(type);
+          }).then(() => {}).catch(() => {});
         }
-      })
-    },
-    //点击切换文件
-    forClick(item,index,bigIndex){
-      this.iframeSrc[bigIndex].forIndex = index;
-      this.iframeSrc[bigIndex].url = this.urlJudge(item.url)
-    },
-    //获取数据
-    getDetails(){
-      let self = this;
-      getDetails({id:this.infoData.list.id}).then(response => {
-        let dataList = [];
-        for(let i=0;i<response.data.listTemp.length;i++){
-          if(response.data.listTemp[i].materialType == 2 && response.data.listTemp[i].materialType == 2){
-            dataList.unshift(response.data.listTemp[i]);
-          }
+      },
+      laboratoryApply(type){
+        let obj = {
+          id:this.infoData.list.id,
+          auditStatus:type,
+          rejectCause:this.rejectCause
+        };
+        if(type == 1){
+          obj.rejectCause = this.form.rejectCause;
+          obj.rejectMaterial = this.checkList + '';
         }
-        for(let i=0;i<response.data.listTemp.length;i++){
-          if(response.data.listTemp[i].materialType == 1){
-            dataList.push(response.data.listTemp[i]);
+        laboratoryApply(obj).then(response => {
+          this.msgSuccess("操作成功");
+          this.$parent.tableClick(1);
+        })
+      },
+      //点击切换文件
+      forClick(item,index,bigIndex){
+        this.iframeSrc[bigIndex].forIndex = index;
+        this.iframeSrc[bigIndex].url = this.urlJudge(item.url)
+      },
+      //获取数据
+      getDetails(){
+        let self = this;
+        getDetails({id:this.infoData.list.id}).then(response => {
+          let dataList = [];
+          for(let i=0;i<response.data.listTemp.length;i++){
+            if(response.data.listTemp[i].materialType == 2 && response.data.listTemp[i].materialType == 2){
+              dataList.unshift(response.data.listTemp[i]);
+            }
           }
-        }
-        for(let i=0;i<response.data.listTemp.length;i++){
-          if(response.data.listTemp[i].materialType == 2 && response.data.listTemp[i].materialType == 1){
-            dataList.unshift(response.data.listTemp[i]);
+          for(let i=0;i<response.data.listTemp.length;i++){
+            if(response.data.listTemp[i].materialType == 1){
+              dataList.push(response.data.listTemp[i]);
+            }
           }
-        }
-        this.$set(response.data,'listTemp',dataList);
-        let newList = [];
-        for(let i=0;i<response.data.listTemp.length;i++){
-          if(response.data.listTemp[i].materialType == 1){
-            let maxList = [];
-            for(let o=0;o<response.data.listTemp[i].listMr.length;o++){
-              let bigList = response.data.listTemp[i].listMr[o].dataUrl.split(',');
-              for(let x=0;x<bigList.length;x++){
-                if(bigList[x]){
-                  let minList = bigList[x].split(';');
-                  let obj = {
-                    name:minList[0],
-                    url:minList[1],
-                  };
-                  maxList.push(obj);
+          for(let i=0;i<response.data.listTemp.length;i++){
+            if(response.data.listTemp[i].materialType == 2 && response.data.listTemp[i].materialType == 1){
+              dataList.unshift(response.data.listTemp[i]);
+            }
+          }
+          this.$set(response.data,'listTemp',dataList);
+          let newList = [];
+          for(let i=0;i<response.data.listTemp.length;i++){
+            if(response.data.listTemp[i].materialType == 1){
+              let maxList = [];
+              for(let o=0;o<response.data.listTemp[i].listMr.length;o++){
+                let bigList = response.data.listTemp[i].listMr[o].dataUrl.split(',');
+                for(let x=0;x<bigList.length;x++){
+                  if(bigList[x]){
+                    let minList = bigList[x].split(';');
+                    let obj = {
+                      name:minList[0],
+                      url:minList[1],
+                    };
+                    maxList.push(obj);
+                  }
                 }
               }
-            }
-            response.data.listTemp[i].upList = maxList;
-            let obj ={};
-            if(maxList.length>0){
-              obj = {
-                forIndex:0,
-                url:this.urlJudge(maxList[0].url)
+              response.data.listTemp[i].upList = maxList;
+              let obj ={};
+              if(maxList.length>0){
+                 obj = {
+                  forIndex:0,
+                  url:this.urlJudge(maxList[0].url)
+                }
               }
+              newList.push(obj);
+            }else{
+              let obj = {
+                forIndex:"",
+                url:""
+              }
+              newList.push(obj);
             }
-            newList.push(obj);
-          }else{
-            let obj = {
-              forIndex:"",
-              url:""
-            }
-            newList.push(obj);
           }
-        }
-        this.$set(this,"iframeSrc",newList);
-        this.$set(this,"subjectData",response.data);
-        //审核备注
-        if(this.isLook){
+          this.$set(this,"iframeSrc",newList);
+          this.$set(this,"subjectData",response.data);
+          //审核备注
+          if(this.isLook){
 
-          this.rejectCause=response.data.labSecurityApply.rejectCause
+            this.rejectCause=response.data.labSecurityApply.rejectCause
+          }
+          this.$forceUpdate()
+          this.pageType = true;
+        })
+      },
+      //返回
+      backPage(){
+        if(this.isLook){
+          this.$parent.tableClick(2);
+        }else{
+          this.$parent.tableClick(1);
         }
-        this.$forceUpdate()
-        this.pageType = true;
-      })
-    },
-    //返回
-    backPage(){
-      if(this.isLook){
-        this.$parent.tableClick(2);
-      }else{
-        this.$parent.tableClick(1);
-      }
 
-    },
-  }
-};
+      },
+    }
+  };
 </script>
 
 <style scoped lang="scss">
-.info-page {
-  flex:1;
-  display: flex!important;
-  flex-direction: column;
-  /*box-shadow: 0 0 8px 2px rgba(0, 0, 0, 0.1);*/
-  /*border-radius:10px;*/
-  .top-title-box{
-    display: flex;
-    border-bottom: 1px solid #E0E0E0;
-    /*padding-top:20px;*/
-    p:nth-child(1){
-      flex: 1;
-      line-height:60px;
-      color: #0045AF;
-      font-size:18px;
-      margin:0 0 0 40px;
-    }
-    p:nth-child(2){
-      margin-right:20px;
-    }
-    p:nth-child(3){
-      margin-right:20px;
-    }
-    p:nth-child(4){
-      margin-right:20px;
-    }
-  }
-  /*准入信息*/
-  .admittance_info{
-    display: flex;
-    justify-content: flex-start;
-    flex-wrap: wrap;
-    padding-left: 80px;
-    box-sizing: border-box;
-    >li{
-      list-style-type:none;
-      font-size: 16px;
-      font-family: Microsoft YaHei;
-      font-weight: 500;
-      color: #999999;
-      line-height: 70px;
-      margin-right: 20px;
-      >i{
-        margin-left: 10px;
-        display: inline-block;
-        font-style:normal;
-        font-size: 16px;
-        font-family: Microsoft YaHei;
-        font-weight: 500;
-        color: #333333;
-        line-height: 70px;
-      }
-    }
-  }
-  /*准入材料*/
-  .admittance_materials{
-    padding-left: 40px;
-    box-sizing: border-box;
-    .admittance_materials_title{
-      flex: 1;
-      line-height:60px;
-      color: #0045AF;
-      font-size:18px;
-
+  .info-page {
+    flex:1;
+    display: flex!important;
+    flex-direction: column;
+    /*box-shadow: 0 0 8px 2px rgba(0, 0, 0, 0.1);*/
+    /*border-radius:10px;*/
+    .top-title-box{
+      display: flex;
       border-bottom: 1px solid #E0E0E0;
-      margin-top: 0;
+      /*padding-top:20px;*/
+      p:nth-child(1){
+        flex: 1;
+        line-height:60px;
+        color: #0045AF;
+        font-size:18px;
+        margin:0 0 0 40px;
+      }
+      p:nth-child(2){
+        margin-right:20px;
+      }
+      p:nth-child(3){
+        margin-right:20px;
+      }
+      p:nth-child(4){
+        margin-right:20px;
+      }
     }
-    .identity{
+    /*准入信息*/
+    .admittance_info{
       display: flex;
       justify-content: flex-start;
       flex-wrap: wrap;
-      padding-left: 40px;
+      padding-left: 80px;
       box-sizing: border-box;
       >li{
         list-style-type:none;
@@ -455,74 +402,113 @@ export default {
         }
       }
     }
-    .file_list{
-      padding-left: 80px;
+    /*准入材料*/
+    .admittance_materials{
+      padding-left: 40px;
       box-sizing: border-box;
-      >i{
-        font-style: normal;
-        font-size: 14px;
-        font-family: Microsoft YaHei;
-        font-weight: bold;
-        color: #0183FA;
-        line-height: 70px;
+      .admittance_materials_title{
+        flex: 1;
+        line-height:60px;
+        color: #0045AF;
+        font-size:18px;
+
+        border-bottom: 1px solid #E0E0E0;
+        margin-top: 0;
       }
-      .file_list_look{
+      .identity{
+        display: flex;
+        justify-content: flex-start;
+        flex-wrap: wrap;
         padding-left: 40px;
-        cursor: pointer;
-        font-style: normal;
-        font-size: 14px;
-        font-family: Microsoft YaHei;
-        font-weight: bold;
-        color: #0183FA;
-        line-height: 70px;
+        box-sizing: border-box;
+        >li{
+          list-style-type:none;
+          font-size: 16px;
+          font-family: Microsoft YaHei;
+          font-weight: 500;
+          color: #999999;
+          line-height: 70px;
+          margin-right: 20px;
+          >i{
+            margin-left: 10px;
+            display: inline-block;
+            font-style:normal;
+            font-size: 16px;
+            font-family: Microsoft YaHei;
+            font-weight: 500;
+            color: #333333;
+            line-height: 70px;
+          }
+        }
       }
+      .file_list{
+        padding-left: 80px;
+        box-sizing: border-box;
+        >i{
+          font-style: normal;
+          font-size: 14px;
+          font-family: Microsoft YaHei;
+          font-weight: bold;
+          color: #0183FA;
+          line-height: 70px;
+        }
+        .file_list_look{
+          padding-left: 40px;
+          cursor: pointer;
+          font-style: normal;
+          font-size: 14px;
+          font-family: Microsoft YaHei;
+          font-weight: bold;
+          color: #0183FA;
+          line-height: 70px;
+        }
 
-    }
-    .btn_list{
-      text-align: center;
-      margin-top: 40px;
-      >p{
-        margin-right: 20px;
+      }
+      .btn_list{
+        text-align: center;
+        margin-top: 40px;
+        >p{
+          margin-right: 20px;
+        }
       }
     }
-  }
-  .item-max-box{
-    .item-title-box{
-      margin-left:50px;
-      font-size:16px;
-      line-height:80px;
-    }
-    .item-user-box{
-      display: flex;
-      margin-left:65px;
-      div{
+    .item-max-box{
+      .item-title-box{
+        margin-left:50px;
+        font-size:16px;
+        line-height:80px;
+      }
+      .item-user-box{
         display: flex;
-        margin-right:60px;
-        font-size:14px;
+        margin-left:65px;
+        div{
+          display: flex;
+          margin-right:60px;
+          font-size:14px;
+        }
       }
-    }
-    .item-img-box{
-      width:240px;
-      margin-left:50px;
-    }
-    .item-for-text-box{
-      margin-left:77px;
-      p{
-        display: inline-block;
-        font-size:14px;
-        line-height:40px;
-        margin:0 57px 0 0;
+      .item-img-box{
+        width:240px;
+        margin-left:50px;
+      }
+      .item-for-text-box{
+        margin-left:77px;
+        p{
+          display: inline-block;
+          font-size:14px;
+          line-height:40px;
+          margin:0 57px 0 0;
+        }
+        .color-p{
+          color:#0045AF;
+        }
       }
-      .color-p{
-        color:#0045AF;
+      .item-html-box{
+        margin:20px 0 40px 58px;
+        width:900px;
+        height:900px;
+        background: #F5F5F5;
       }
     }
-    .item-html-box{
-      margin:20px 0 40px 58px;
-      width:900px;
-      height:900px;
-      background: #F5F5F5;
-    }
   }
-}
 </style>

Різницю між файлами не показано, бо вона завелика
+ 507 - 524
src/views/secureAccess/whitelist/addPage.vue


+ 176 - 0
src/views/secureAccess/whitelist/index_SuZhouDX.vue

@@ -0,0 +1,176 @@
+<!--白名单列表-->
+<template>
+  <div class="app-container whitelist">
+    <div class="whitelist-page" v-if="pageType == 1">
+      <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="90px">
+        <el-form-item label="关键字" prop="userName">
+          <el-input
+            v-model="queryParams.searchValue"
+            placeholder="姓名/工号/联系方式"
+            clearable
+            maxLength="30"
+            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-item style="float: right;">
+          <el-button
+            style="margin-left: 20px"
+            type="primary"
+            plain
+            icon="el-icon-plus"
+            size="mini"
+            @click="pageClick(2)"
+            v-hasPermi="['laboratory:whitelist:add']"
+          >新增</el-button>
+        </el-form-item>
+      </el-form>
+      <el-table v-loading="loading" border :data="safe_bookList" >
+        <el-table-column label="姓名" align="left" prop="userName"/>
+        <el-table-column label="工号" align="left" prop="userNumber"/>
+        <el-table-column label="联系方式" align="left" prop="userTelephone"/>
+        <el-table-column label="学院" align="left" prop="deptName"/>
+        <el-table-column label="操作" align="center" width="160" v-if="tableButtonType">
+          <template slot-scope="scope">
+            <div class="button-box">
+              <p class="table-min-button"
+                 style="margin-right: 10px"
+                 @click="pageEditClick(2,scope.row)"
+                 v-hasPermiAnd="['laboratory:whitelist:query','laboratory:whitelist:edit']"
+              >编辑</p>
+              <p class="table-min-button"
+                 @click="delButton(scope.row)"
+                 v-hasPermi="['laboratory:whitelist:remove']"
+              >移除</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" :pageData="pageData"></add-page>
+  </div>
+</template>
+
+<script>
+  import { whitelistList,whitelistDel } from "@/api/laboratory/whitelist";
+  import addPage from './addPage.vue'
+  export default {
+    components:{
+      addPage
+    },
+    name: "whitelist",
+    data() {
+      return {
+        tableButtonType:this.hasPermiDom(['laboratory:whitelist:query','laboratory:whitelist:edit','laboratory:whitelist:remove']),
+        pageType:1,
+        // 遮罩层
+        loading: false,
+        // 显示搜索条件
+        showSearch: true,
+        // 总条数
+        total: 0,
+        // 实验室安全制度表格数据
+        safe_bookList: [],
+        // 查询参数
+        queryParams: {
+          pageNum: 1,
+          pageSize:20,
+          searchValue: null,
+        },
+        pageData:{},
+      };
+    },
+    created() {
+      this.getList();
+    },
+    methods: {
+      delButton(item){
+        let self = this;
+        this.$confirm('确定移除当前准入信息,移除后将无法进入实验室?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          self.whitelistDel(item);
+        }).then(() => {}).catch(() => {});
+      },
+      whitelistDel(item){
+        whitelistDel(item.id).then(response => {
+          this.msgSuccess("删除成功");
+          this.getList();
+        });
+      },
+      getList(){
+        this.loading = true;
+        whitelistList(this.queryParams).then(response => {
+          this.safe_bookList = response.rows;
+          this.loading = false;
+        });
+      },
+      //新增
+      pageClick(type){
+        if(this.pageType != type){
+          this.pageType = type;
+          this.pageData= {};
+          if(type == 1){
+            this.getList();
+          }
+        }
+      },
+      //编辑
+      pageEditClick(type,item){
+        if(this.pageType != type){
+          this.pageType = type;
+          this.pageData=item;
+          if(type == 1){
+            this.getList();
+          }
+        }
+      },
+      /** 搜索按钮操作 */
+      handleQuery() {
+        this.queryParams.pageNum = 1;
+        this.getList();
+      },
+      /** 重置按钮操作 */
+      resetQuery() {
+        this.queryParams.searchValue='';
+        this.handleQuery();
+      },
+      handleDelete(){
+
+      },
+    }
+  };
+</script>
+
+<style scoped lang="scss">
+  .whitelist {
+    display: flex !important;
+    flex-direction: column;
+    box-shadow: 0 0 8px 2px rgba(0, 0, 0, 0.1);
+    .whitelist-page{
+      flex:1;
+      display: flex;
+      flex-direction: column;
+      padding:11px 20px 20px!important;
+      .button-box{
+        margin:0 auto;
+        width:190px;
+        display: flex;
+      }
+    }
+  }
+</style>

+ 278 - 0
src/views/securityCheck/release/index_SuZhouDX.vue

@@ -0,0 +1,278 @@
+<!--安全检查发布记录-->
+<template>
+  <div class="app-container releasePage">
+    <div class="releasePageMin" v-if="pageType == 1">
+      <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
+        <el-form-item label="检查名称" prop="releaseDescribe">
+          <el-input
+            v-model="queryParams.releaseDescribe"
+            placeholder="请输入检查名称"
+            clearable
+            size="small"
+          />
+        </el-form-item>
+        <el-form-item label="检查时间" label-width="70px">
+          <el-date-picker
+            :clearable="false"
+            v-model="dateRange"
+            size="small"
+            style="width: 240px"
+            value-format="yyyy-MM-dd"
+            type="daterange"
+            range-separator="-"
+            start-placeholder="开始日期"
+            end-placeholder="结束日期"
+          ></el-date-picker>
+        </el-form-item>
+        <el-form-item>
+          <p class="inquire-button-one" @click="handleQuery">查询</p>
+          <p class="reset-button-one" @click="resetQuery">重置</p>
+        </el-form-item>
+      </el-form>
+      <el-table v-loading="loading" border :data="releaseList" @selection-change="handleSelectionChange">
+        <!--<el-table-column type="selection" width="55" align="center" />-->
+        <!--<el-table-column label="创建人id" align="center" prop="id" />-->
+        <el-table-column label="检查名称" align="left" prop="releaseDescribe" />
+        <el-table-column label="实验室数量" align="left" prop="laboratorNum" />
+        <el-table-column label="隐患数量" align="left" prop="laboratorYhsl" />
+        <el-table-column label="已整改" align="left" prop="laboratorYzg" />
+        <el-table-column label="发布时间" align="left" prop="strTime" />
+        <el-table-column label="操作" align="left" class-name="small-padding fixed-width" width="120" v-if="tableButtonType">
+          <template slot-scope="scope">
+            <div class="button-box" style="display: flex;margin-left:20px;">
+            <p class="table-min-button"
+               @click="goPageInfo(2,scope.row)"
+               v-hasPermi="['laboratory:checkRecord:list']"
+            >查看</p>
+            </div>
+          </template>
+        </el-table-column>
+      </el-table>
+      <pagination
+        v-show="total>0"
+        :total="total"
+        :page.sync="queryParams.pageNum"
+        :limit.sync="queryParams.pageSize"
+        @pagination="getList"
+      />
+    </div>
+    <list-page v-if="pageType == 2" :checkId="checkId"></list-page>
+    <!-- 添加或修改检查发布关系对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="检查表主键id" prop="checkId">
+          <el-input v-model="form.checkId" placeholder="请输入检查表主键id" />
+        </el-form-item>
+        <el-form-item label="描述" prop="releaseDescribe">
+          <el-input v-model="form.releaseDescribe" placeholder="请输入描述" />
+        </el-form-item>
+        <el-form-item label="创建人id" prop="createByid">
+          <el-input v-model="form.createByid" placeholder="请输入创建人id" />
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" 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 { listRelease, getRelease, delRelease, addRelease, updateRelease } from "@/api/laboratory/release";
+import listPage from "./listPage.vue"
+
+export default {
+  name: "Release",
+  components: {
+    listPage
+  },
+  data() {
+    return {
+      tableButtonType:this.hasPermiDom(['laboratory:checkRecord:list']),
+      pageType:1,
+      checkId:"",
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 检查发布关系表格数据
+      releaseList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize:20,
+        checkId: null,
+        releaseDescribe: null,
+        createByid: null,
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+      },
+      dateRange:[]
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    //页面状态切换
+    goPageInfo(type,row){
+      if(type == 2){
+        this.pageType = 2;
+        this.checkId = row.checkId;
+      }else if(type == 1){
+        this.pageType = 1;
+        this.getList();
+      }
+    },
+    /** 查询检查发布关系列表 */
+    getList() {
+      this.loading = true;
+      if(this.dateRange&&this.dateRange.length>0){
+        this.queryParams.beginTime=this.dateRange[0]
+        this.queryParams.endTime=this.dateRange[1]
+      }else{
+        this.queryParams.beginTime=null;
+        this.queryParams.endTime=null
+      }
+      listRelease(this.queryParams).then( response => {
+        this.releaseList =  response.rows;
+        this.total =  response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        checkId: null,
+        releaseDescribe: null,
+        createByid: null,
+        createBy: null,
+        createTime: null,
+        remark: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.dateRange = [];
+      this.queryParams.beginTime = "";
+      this.queryParams.endTime = "";
+      // this.resetForm("queryForm");
+      this.$set(this,'queryParams',{
+        pageNum: 1,
+        pageSize:20,
+        releaseDescribe:"",
+      });
+      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
+      getRelease(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) {
+            updateRelease(this.form).then( response => {
+              this.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addRelease(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 delRelease(ids);
+      }).then(() => {
+        this.getList();
+        this.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('laboratory/release/export', {
+        ...this.queryParams
+      }, `laboratory_release.xlsx`)
+    }
+  }
+};
+</script>
+<style scoped lang="scss">
+  .releasePage{
+    flex:1;
+    display: flex;
+    flex-direction: column;
+    overflow: hidden !important;
+    box-shadow: 0 0 8px 2px rgba(0, 0, 0, 0.1);
+    .releasePageMin{
+      flex: 1;
+      display: flex;
+      flex-direction: column;
+      overflow: hidden !important;
+      padding: 20px 20px 20px;
+    }
+  }
+</style>