dedsudiyu il y a 1 an
Parent
commit
5254fc6f48

+ 1 - 0
src/store/modules/user.js

@@ -107,6 +107,7 @@ const user = {
             commit('SET_NAME', user.userName)
             commit('SET_AVATAR', avatar)
             localStorage.setItem('user',JSON.stringify(user));
+            localStorage.setItem('nickName',user.nickName);
             resolve(res)
           }else{
             store.dispatch('LogOut').then(() => {

+ 219 - 19
src/views/comprehensive/laboratoryManagement/instrument/index.vue

@@ -9,18 +9,18 @@
             <el-input
               maxLength="30"
               v-model="queryParams.queryParamsData1"
-              placeholder="请输入"
+              placeholder="请输入仪器编号/仪器名称/仪器型号/仪器负责人"
               clearable
-              style="width: 200px"
+              style="width: 350px"
             />
           </el-form-item>
-          <el-form-item label="状态" prop="queryParamsData2">
-            <el-select v-model="queryParams.queryParamsData2" clearable placeholder="请选择" style="width: 200px">
+          <el-form-item label="分类" prop="queryParamsData2">
+            <el-select v-model="queryParams.queryParamsData2" clearable placeholder="请选择分类" style="width: 200px">
               <el-option
-                v-for="dict in optionList"
-                :key="dict.value"
-                :label="dict.label"
-                :value="dict.value"
+                v-for="dict in instrumentClassOptions"
+                :key="dict.id"
+                :label="dict.name"
+                :value="dict.id"
               />
             </el-select>
           </el-form-item>
@@ -45,28 +45,32 @@
             <el-col :span="1.5">
               <p class="add-button-one-120"
                  style="margin-right:20px;"
-                 @click="tableButton(1)"
+                 @click="clickButton(1)"
               ><i class="el-icon-plus"></i>新增</p>
             </el-col>
           </el-form-item>
         </el-form>
       </div>
       <div class="page-content-box">
-        <el-table class="table-box" v-loading="loading" border :data="dataList">
-          <el-table-column label="仪器编号" prop="name"  show-overflow-tooltip/>
-          <el-table-column label="仪器名称" prop="content" width="300" show-overflow-tooltip/>
-          <el-table-column label="仪器型号" prop="content" width="240" show-overflow-tooltip/>
-          <el-table-column label="仪器分类" prop="content" width="400" show-overflow-tooltip/>
-          <el-table-column label="仪器负责人" prop="content" width="140" show-overflow-tooltip/>
+        <el-table class="table-box" v-loading="loading" border :data="instrumentList">
+          <el-table-column label="仪器编号" prop="equipmentNum"  show-overflow-tooltip/>
+          <el-table-column label="仪器名称" prop="equipmentName" width="300" show-overflow-tooltip/>
+          <el-table-column label="仪器型号" prop="modelNumber" width="240" show-overflow-tooltip/>
+          <el-table-column label="仪器分类" prop="instrumentClass" width="400" show-overflow-tooltip>
+            <template slot-scope="scope">
+              <span v-for="(item,index) in instrumentClassOptions" :key="index" v-show="item.id == scope.row.instrumentClass">{{item.name}}</span>
+            </template>
+          </el-table-column>
+          <el-table-column label="仪器负责人" prop="userName" width="140" show-overflow-tooltip/>
           <el-table-column label="操作" width="200" show-overflow-tooltip v-if="tableButtonType">
             <template slot-scope="scope">
               <div class="table-button-box">
                 <p class="table-button-null"></p>
                 <p class="table-button-p"
-                   @click="tableButton(3,scope.row)"
+                   @click="clickButton(2,scope.row,scope.$index)"
                 >编辑</p>
                 <p class="table-button-p"
-                   @click="tableButton(2,scope.row)"
+                   @click="clickButton(3,scope.row,scope.$index)"
                 >查看</p>
                 <p class="table-button-null"></p>
               </div>
@@ -82,10 +86,78 @@
         />
       </div>
     </div>
+    <el-dialog :title="dialogTitle" v-if="dialogType" :visible.sync="dialogType" @close="cancel" width="600px"
+               append-to-body class="instrument-dialog-box">
+      <el-form :model="dialogForm" ref="dialogForm" :inline="true" :rules="rules" label-width="120px">
+        <el-form-item label="仪器名称:" prop="equipmentName">
+          <el-input
+            :disabled="dialogLook"
+            maxlength="20"
+            style="width:400px;"
+            v-model="dialogForm.equipmentName"
+            placeholder="请输入仪器名称"/>
+        </el-form-item>
+        <el-form-item label="实验室:" prop="id">
+          <el-select v-model="dialogForm.id"
+                     :disabled="dialogLook"
+                     placeholder="请选择仪器类型"
+                     style="width:400px;">
+            <el-option
+              v-for="dict in subList"
+              :key="dict.id"
+              :label="dict.name"
+              :value="dict.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="负责人:" prop="userName">
+          <el-input
+            :disabled="dialogLook"
+            maxlength="10"
+            style="width:400px;"
+            v-model="dialogForm.userName"
+            placeholder="请输入设备名称"/>
+        </el-form-item>
+        <el-form-item label="仪器类型:" prop="instrumentClass">
+          <el-select v-model="dialogForm.instrumentClass"
+                     :disabled="dialogLook"
+                     placeholder="请选择仪器类型"
+                     style="width:400px;">
+            <el-option
+              v-for="dict in instrumentClassOptions"
+              :key="dict.id"
+              :label="dict.name"
+              :value="dict.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="仪器编号:" prop="equipmentNum">
+          <el-input
+            :disabled="dialogLook"
+            maxlength="20"
+            style="width:400px;"
+            v-model="dialogForm.equipmentNum"
+            placeholder="请输入仪器编号"/>
+        </el-form-item>
+        <el-form-item label="仪器型号:" prop="modelNumber">
+          <el-input
+            :disabled="dialogLook"
+            maxlength="20"
+            style="width:400px;"
+            v-model="dialogForm.modelNumber"
+            placeholder="请输入仪器型号"/>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer" >
+        <el-button @click="cancel">{{dialogLook?'关 闭':'取 消'}}</el-button>
+        <el-button v-if="!dialogLook" type="primary" @click="submitForm">确定</el-button>
+      </div>
+    </el-dialog>
     <!--<add-page :propsData="propsData" v-if="pageType === 2"></add-page>-->
   </div>
 </template>
 <script>
+  import { authListSubject } from '@/api/laboratory/subject'
   //import { getDicts } from "@/api/commonality/noPermission";
   //import { systemUserSelect } from "@/api/commonality/permission";
   //import { getInfo } from "@/api/basicsModules/index";
@@ -111,14 +183,79 @@
           queryParamsData1:"",
           queryParamsData2 :null,
         },
+        subList:[],
         //时间数据
         dateRange:[],
-        //列表数据
-        dataList:[],
+        // 仪器类型
+        instrumentClassOptions:[
+          { id:1, name:"化学分析仪器" },
+          { id:2, name:"电子显微镜" },
+          { id:3, name:"扫描电镜" },
+          { id:4, name:"光学仪器及设备" },
+          { id:5, name:"光学显微镜及成像系统" },
+          { id:6, name:"激光共聚焦显微镜" },
+          { id:7, name:"物理性能测试仪器" },
+          { id:8, name:"试验仪器及环境试验箱" },
+          { id:9, name:"其它试验仪器及环境试验箱" },
+          { id:10, name:"光学仪器及设备" },
+          { id:11, name:"其他设备" },
+        ],
+        //数据
+        instrumentList:[
+          {
+            equipmentName:"激光共聚焦显微镜",
+            userName:"赵晨博",
+            equipmentNum:"jggz003513211",
+            modelNumber:"LSM700",
+            instrumentClass:6,
+          },
+          {
+            equipmentName:"扫描电镜",
+            userName:"梁建成",
+            equipmentNum:"smdj004687231",
+            modelNumber:"Helios Nanolab 600i",
+            instrumentClass:3,
+          },
+        ],
         //数据数量
         total:0,
         //组件传参
         propsData:{},
+        //弹窗
+        dialogType:false,
+        dialogForm:{},
+        dialogLook:false,
+        dialogIndex:null,
+        dialogTitle:"",
+        // 表单校验
+        rules: {
+          id: [
+            { required: true, message: "请选择实验室", trigger: "blur" },
+            { required: true, message: "请选择实验室", validator: this.spaceJudgment, trigger: "blur" }
+          ],
+          equipmentName: [
+            { required: true, message: "请输入仪器名称", trigger: "blur" },
+            { required: true, message: "请输入仪器名称", validator: this.spaceJudgment, trigger: "blur" }
+          ],
+          userName: [
+            { required: true, message: "请选择负责人", trigger: "blur" },
+            { required: true, message: "请选择负责人", validator: this.spaceJudgment, trigger: "blur" }
+          ],
+          equipmentNum: [
+            { required: true, message: "请输入仪器编号", trigger: "blur" },
+            { required: true, message: "请输入仪器编号", validator: this.spaceJudgment, trigger: "blur" }
+          ],
+          modelNumber: [
+            { required: true, message: "请输入仪器型号", trigger: "blur" },
+            { required: true, message: "请输入仪器型号", validator: this.spaceJudgment, trigger: "blur" }
+          ],
+          instrumentClass: [
+            { required: true, message: "请选择仪器类型", trigger: "blur" },
+            { required: true, message: "请选择仪器类型", validator: this.spaceJudgment, trigger: "blur" }
+          ],
+        },
+        //vuex数据
+        dataVUEX:[],
       }
     },
     created () {
@@ -126,8 +263,15 @@
     },
     mounted () {
       //this.getList();
+      this.getSub();
     },
     methods: {
+      //获取实验室
+      getSub(){
+        authListSubject({ pageNum: 1, pageSize:20 }).then(response => {
+          this.subList = response.rows;
+        });
+      },
       //查询按钮
       handleQuery(){
         this.$set(this.queryParams,'page',1);
@@ -200,6 +344,62 @@
           this.getList();
         }
       },
+      clickButton(type,item,index){
+        let self = this;
+        if(type == 1){
+          this.$set(this,'dialogLook',false);
+          this.$set(this,'dialogIndex',null);
+          this.$set(this,'dialogTitle','添加仪器');
+          this.$set(this,'dialogForm',{
+            equipmentName:"",
+            userName:"",
+            equipmentNum:"",
+            modelNumber:"",
+            instrumentClass:"",
+          });
+          this.$set(this,'dialogType',true);
+        }else if (type == 2){
+          this.$set(this,'dialogTitle','编辑仪器');
+          this.$set(this,'dialogLook',false);
+          this.$set(this,'dialogIndex',index);
+          this.$set(this,'dialogForm',JSON.parse(JSON.stringify(item)));
+          this.$set(this,'dialogType',true);
+        }else if(type == 3){
+          this.$set(this,'dialogTitle','查看仪器');
+          this.$set(this,'dialogLook',true);
+          this.$set(this,'dialogIndex',null);
+          this.$set(this,'dialogForm',item);
+          this.$set(this,'dialogType',true);
+        }else if(type == 4){
+          this.$confirm('确认要删除该设备?', "警告", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning"
+          }).then(() => {
+            self.instrumentList.splice(index, 1);
+          }).catch(function() {
+            //  取消
+          });
+        }
+      },
+      //关闭
+      cancel(){
+        this.$set(this,'dialogType',false);
+      },
+      //提交
+      submitForm(){
+        this.$refs["dialogForm"].validate(valid => {
+          if (valid) {
+            if(this.dialogIndex){
+              this.instrumentList[this.dialogIndex] = this.dialogForm;
+            }else{
+              this.instrumentList.push(this.dialogForm);
+            }
+            this.msgSuccess('操作成功')
+            this.$set(this,'dialogType',false);
+          }
+        })
+      },
     },
   }
 </script>

+ 395 - 0
src/views/comprehensive/laboratoryManagement/safetyInformationAudit/InstituteLevel/index.vue

@@ -0,0 +1,395 @@
+<!-- 安全信息审核-院级 -->
+<template>
+  <div class="app-container InstituteLevel">
+    <div class="page-container InstituteLevelPage" v-if="pageType === 1">
+      <div class="page-form-title-box">
+        <el-form :model="queryParams" class="form-box" ref="queryForm"
+                 :inline="true" style="width:100%;">
+          <el-form-item >
+            <div class="form-button-box">
+              <p :class="checkType == 1?'check-p':''" @click="checkClick(1)">待审核</p>
+              <p :class="checkType == 2?'check-p':''" @click="checkClick(2)">审核通过</p>
+            </div>
+          </el-form-item>
+          <el-form-item label="关键字" prop="queryParamsData1" label-width="90px">
+            <el-input
+              maxLength="30"
+              v-model="queryParams.queryParamsData1"
+              placeholder="请输入"
+              clearable
+              style="width: 200px"
+            />
+          </el-form-item>
+          <el-form-item label="学院" prop="queryParamsData2">
+            <el-select v-model="queryParams.queryParamsData2" clearable placeholder="请选择" style="width: 200px">
+              <el-option
+                v-for="dict in optionList"
+                :key="dict.deptId"
+                :label="dict.deptName"
+                :value="dict.deptId"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="申请时间" prop="state">
+            <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>
+      </div>
+      <div class="page-content-box">
+        <el-table class="table-box" v-loading="loading" border :data="dataList">
+          <el-table-column label="实验室" prop="subName"  show-overflow-tooltip/>
+          <el-table-column label="楼栋楼层" prop="address" width="200" show-overflow-tooltip/>
+          <el-table-column label="申请人" prop="userName" width="200" show-overflow-tooltip/>
+          <el-table-column label="申请时间" prop="createTime" width="200" show-overflow-tooltip/>
+          <el-table-column label="操作" width="200" show-overflow-tooltip v-if="tableButtonType">
+            <template slot-scope="scope">
+              <div class="table-button-box">
+                <p class="table-button-null"></p>
+                <p class="table-button-p"
+                   @click="tableButton(scope.row,scope.$index)"
+                >{{checkType==1?'审核':'详情'}}</p>
+                <p class="table-button-null"></p>
+              </div>
+            </template>
+          </el-table-column>
+        </el-table>
+        <pagination :page-sizes="[20, 30, 40, 50]"
+                    v-show="total>0"
+                    :total="total"
+                    :page.sync="queryParams.page"
+                    :limit.sync="queryParams.pageSize"
+                    @pagination="getList"
+        />
+      </div>
+    </div>
+    <el-dialog :title="dialogTitle" v-if="dialogType" :visible.sync="dialogType" @close="cancel" width="600px"
+               append-to-body class="safetyInformationAudit-dialog-box">
+      <div class="title-box">
+        <p>实验室:</p>
+        <p>{{dialogForm.subName}}</p>
+      </div>
+      <div class="title-box">
+        <p>学院:</p>
+        <p>{{dialogForm.deptName}}</p>
+      </div>
+      <div class="title-box">
+        <p>楼栋楼层:</p>
+        <p>{{dialogForm.address}}</p>
+      </div>
+      <div class="title-box">
+        <p>申请人:</p>
+        <p>{{dialogForm.userName}}</p>
+      </div>
+      <div class="title-box">
+        <p>申请时间:</p>
+        <p>{{dialogForm.createTime}}</p>
+      </div>
+      <div class="title-box">
+        <p>申请内容:</p>
+        <p>
+          <span style="color:#13ce66;">安全分级四级</span> 调整为 <span style="color:#f8ac59;">安全分级二级</span>
+          <span style="margin:0 20px;"></span>
+          <span style="color:#00a0e9;">其他类</span> 调整为 <span style="color:#00a0e9;">特种设备类</span>
+        </p>
+      </div>
+      <div class="title-box" v-if="checkType == 1">
+        <p>审核批注:</p>
+        <el-input
+          type="textarea"
+          style="width:420px;"
+          maxlength="50"
+          resize="none"
+          show-word-limit
+          :autosize="{ minRows: 6, maxRows: 6}"
+          placeholder="请输入审核批注"
+          v-model="dialogText">
+        </el-input>
+      </div>
+      <div class="title-box" v-if="checkType == 2">
+        <p>审核人:</p>
+        <p>{{dialogForm.user}}</p>
+      </div>
+      <div class="title-box" v-if="checkType == 2">
+        <p>审核时间:</p>
+        <p>{{dialogForm.time}}</p>
+      </div>
+      <div slot="footer" class="dialog-footer" v-if="checkType == 1">
+        <el-button type="danger" style="width:100px;" @click="submitForm(1)">审核驳回</el-button>
+        <el-button type="primary" style="width:100px;" @click="submitForm(2)">审核通过</el-button>
+      </div>
+      <div slot="footer" class="dialog-footer" v-if="checkType == 2">
+        <el-button style="width:100px;" @click="cancel">关闭</el-button>
+      </div>
+    </el-dialog>
+    <!--<add-page :propsData="propsData" v-if="pageType === 2"></add-page>-->
+  </div>
+</template>
+<script>
+  import { listDepartments } from "@/api/system/dept";
+  //import { getDicts } from "@/api/commonality/noPermission";
+  //import { systemUserSelect } from "@/api/commonality/permission";
+  //import { getInfo } from "@/api/basicsModules/index";
+  //import addPage from "./addPage.vue";
+  export default {
+    name: 'index',
+    //components: {
+    //  addPage
+    //},
+    data () {
+      return {
+        tableButtonType:this.hasPermiDom(['demo:demo:detail','demo:demo:edit','demo:demo:del',]),
+        //页面状态
+        pageType:1,
+        checkType:1,
+        //页面遮罩
+        loading:false,
+        //下拉列表数据
+        optionList:[],
+        //查询条件
+        queryParams:{
+          page:1,
+          pageSize:20,
+          queryParamsData1:"",
+          queryParamsData2 :null,
+        },
+        //时间数据
+        dateRange:[],
+        //列表数据
+        dataList:[],
+        //数据数量
+        total:0,
+        //组件传参
+        propsData:{},
+        leftList:[
+          {
+            subName:"材料科学实验室1",
+            deptName:"环测学院",
+            address:"一号楼一层",
+            userName:"曹秀康",
+            createTime:"2021-5-10 12:00",
+            data1:1,
+            data2:2,
+            data3:3,
+            data4:4,
+          },
+          {
+            subName:"材料科学实验室2",
+            deptName:"环测学院",
+            address:"一号楼一层",
+            userName:"曹秀康",
+            createTime:"2021-5-4 16:30",
+            data1:1,
+            data2:2,
+            data3:3,
+            data4:4,
+          },
+          {
+            subName:"实验室1(材料)",
+            deptName:"环测学院",
+            address:"一号楼二层",
+            userName:"郭春惠",
+            createTime:"2021-6-13 13:00",
+            data1:1,
+            data2:2,
+            data3:3,
+            data4:4,
+          },
+          {
+            subName:"食品药品生物安全分测平台(610)",
+            deptName:"生命科学学院",
+            address:"二号楼一层",
+            userName:"曹倩",
+            createTime:"2021-9-23 13:00",
+            data1:1,
+            data2:2,
+            data3:3,
+            data4:4,
+          },
+        ],
+        rightList:[
+          {
+            subName:"基因组测序分析平台(607)",
+            deptName:"生命科学学院",
+            address:"一号楼六层",
+            userName:"郭春惠",
+            createTime:"2021-2-1 16:00",
+            data1:1,
+            data2:2,
+            data3:3,
+            data4:4,
+            text:"审批通过",
+            user:"郭启梅",
+            time:"2021-2-2 13:32"
+          },
+          {
+            subName:"食品药品生物安全分测平台(610)",
+            deptName:"生命科学学院",
+            address:"一号楼六层",
+            userName:"曹倩",
+            createTime:"2021-5-8 9:30",
+            data1:1,
+            data2:2,
+            data3:3,
+            data4:4,
+            text:"审批通过",
+            user:"郭启梅",
+            time:"2021-5-10 9:46"
+          },
+        ],
+        dialogTitle:'',
+        dialogType:false,
+        dialogForm:{},
+        dialogText:'',
+        dialogIndex:null,
+      }
+    },
+    created () {
+
+    },
+    mounted () {
+      //this.getList();
+      this.getDeptList();
+      this.$set(this,'dataList',JSON.parse(JSON.stringify(this.leftList)));
+    },
+    methods: {
+      cancel(){
+        this.$set(this,'dialogType',false);
+      },
+      submitForm(type){
+        if(type == 1){
+          this.dataList.splice(this.dialogIndex,1)
+          this.$set(this,'leftList',this.dataList);
+        }else if(type == 2){
+          this.$set(this.dataList[this.dialogIndex],'user',localStorage.getItem('nickName'));
+          this.$set(this.dataList[this.dialogIndex],'time',this.parseTime(new Date().getTime(), '{y}-{m}-{d} {h}:{i}'))
+          this.rightList.push(this.dataList[this.dialogIndex])
+          this.dataList.splice(this.dialogIndex,1)
+          this.$set(this,'leftList',this.dataList);
+        }
+        this.msgSuccess('操作成功')
+        this.$set(this,'dialogType',false);
+        this.$forceUpdate()
+      },
+      //操作按钮
+      tableButton(row,index){
+        this.$set(this,'dialogTitle',this.checkType == 1?'审核':'审核通过');
+        this.$set(this,'dialogText','');
+        this.$set(this,'dialogIndex',index);
+        this.$set(this,'dialogForm',JSON.parse(JSON.stringify(row)));
+        this.$set(this,'dialogType',true);
+      },
+      /** 查询学院列表 */
+      getDeptList() {
+        listDepartments().then(response => {
+          this.$set(this, 'optionList', response.data)
+        });
+      },
+      //查询按钮
+      handleQuery(){
+        this.$set(this.queryParams,'page',1);
+        this.getList();
+      },
+      //重置按钮
+      resetQuery(){
+        this.$set(this,'dateRange',[])
+        this.$set(this,'queryParams',{
+          page:1,
+          pageSize:20,
+          queryParamsData1:"",
+          queryParamsData2 :null,
+        });
+        this.getList();
+      },
+      //获取数据列表
+      getList(){
+
+      },
+      checkClick(type){
+        if(type == 1){
+          this.$set(this,'checkType',type);
+          this.$set(this,'dataList',JSON.parse(JSON.stringify(this.leftList)));
+        }else if(type == 2){
+          this.$set(this,'checkType',type);
+          this.$set(this,'dataList',JSON.parse(JSON.stringify(this.rightList)));
+        }
+      },
+    },
+  }
+</script>
+<style scoped lang="scss">
+  .InstituteLevel{
+    flex:1;
+    display: flex!important;
+    flex-direction: column;
+    overflow: hidden;
+    .InstituteLevelPage{
+      flex:1;
+      display: flex!important;
+      flex-direction: column;
+      overflow: hidden;
+      padding:20px;
+      font-weight: 500;
+      .page-content-box{
+        flex:1;
+        display: flex!important;
+        flex-direction: column;
+        overflow: hidden;
+      }
+      .form-button-box{
+        display: flex;
+        p{
+          width:100px;
+          text-align: center;
+          border:1px solid #dedede;
+          cursor: pointer;
+        }
+        p:nth-child(1){
+          border-right:none;
+          border-top-left-radius:4px;
+          border-bottom-left-radius:4px;
+        }
+        p:nth-child(2){
+          border-left:none;
+          border-top-right-radius:4px;
+          border-bottom-right-radius:4px;
+        }
+        .check-p{
+          background-color: #0183fa;
+          color:#fff;
+        }
+      }
+    }
+  }
+</style>
+<style lang="scss">
+  .safetyInformationAudit-dialog-box{
+    .title-box{
+      display: flex;
+      p{
+        font-size:14px;
+        line-height:40px;
+      }
+      p:nth-child(1){
+        width:100px;
+        text-align: right;
+      }
+      p:nth-child(2){
+        flex:1;
+      }
+    }
+  }
+</style>

+ 397 - 0
src/views/comprehensive/laboratoryManagement/safetyInformationAudit/universityLevel/index.vue

@@ -0,0 +1,397 @@
+<!-- 安全信息审核-校级 -->
+<template>
+  <div class="app-container universityLevel">
+    <div class="page-container universityLevelPage" v-if="pageType === 1">
+      <div class="page-form-title-box">
+        <el-form :model="queryParams" class="form-box" ref="queryForm"
+                 :inline="true" style="width:100%;">
+          <el-form-item >
+            <div class="form-button-box">
+              <p :class="checkType == 1?'check-p':''" @click="checkClick(1)">待审核</p>
+              <p :class="checkType == 2?'check-p':''" @click="checkClick(2)">审核通过</p>
+            </div>
+          </el-form-item>
+          <el-form-item label="关键字" prop="queryParamsData1" label-width="90px">
+            <el-input
+              maxLength="30"
+              v-model="queryParams.queryParamsData1"
+              placeholder="请输入"
+              clearable
+              style="width: 200px"
+            />
+          </el-form-item>
+          <el-form-item label="学院" prop="queryParamsData2">
+            <el-select v-model="queryParams.queryParamsData2" clearable placeholder="请选择" style="width: 200px">
+              <el-option
+                v-for="dict in optionList"
+                :key="dict.deptId"
+                :label="dict.deptName"
+                :value="dict.deptId"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="时间" prop="state">
+            <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>
+      </div>
+      <div class="page-content-box">
+        <el-table class="table-box" v-loading="loading" border :data="dataList">
+          <el-table-column label="实验室" prop="subName"  show-overflow-tooltip/>
+          <el-table-column label="学院" prop="deptName" width="200" show-overflow-tooltip/>
+          <el-table-column label="楼栋楼层" prop="address" width="200" show-overflow-tooltip/>
+          <el-table-column label="申请人" prop="userName" width="200" show-overflow-tooltip/>
+          <el-table-column label="申请时间" prop="createTime" width="200" show-overflow-tooltip/>
+          <el-table-column label="操作" width="200" show-overflow-tooltip v-if="tableButtonType">
+            <template slot-scope="scope">
+              <div class="table-button-box">
+                <p class="table-button-null"></p>
+                <p class="table-button-p"
+                   @click="tableButton(scope.row,scope.$index)"
+                >{{checkType==1?'审核':'详情'}}</p>
+                <p class="table-button-null"></p>
+              </div>
+            </template>
+          </el-table-column>
+        </el-table>
+        <pagination :page-sizes="[20, 30, 40, 50]"
+                    v-show="total>0"
+                    :total="total"
+                    :page.sync="queryParams.page"
+                    :limit.sync="queryParams.pageSize"
+                    @pagination="getList"
+        />
+      </div>
+    </div>
+
+    <el-dialog :title="dialogTitle" v-if="dialogType" :visible.sync="dialogType" @close="cancel" width="600px"
+               append-to-body class="safetyInformationAudit-dialog-box">
+      <div class="title-box">
+        <p>实验室:</p>
+        <p>{{dialogForm.subName}}</p>
+      </div>
+      <div class="title-box">
+        <p>学院:</p>
+        <p>{{dialogForm.deptName}}</p>
+      </div>
+      <div class="title-box">
+        <p>楼栋楼层:</p>
+        <p>{{dialogForm.address}}</p>
+      </div>
+      <div class="title-box">
+        <p>申请人:</p>
+        <p>{{dialogForm.userName}}</p>
+      </div>
+      <div class="title-box">
+        <p>申请时间:</p>
+        <p>{{dialogForm.createTime}}</p>
+      </div>
+      <div class="title-box">
+        <p>申请内容:</p>
+        <p>
+          <span style="color:#13ce66;">安全分级四级</span> 调整为 <span style="color:#f8ac59;">安全分级二级</span>
+          <span style="margin:0 20px;"></span>
+          <span style="color:#00a0e9;">其他类</span> 调整为 <span style="color:#00a0e9;">特种设备类</span>
+        </p>
+      </div>
+      <div class="title-box" v-if="checkType == 1">
+        <p>审核批注:</p>
+        <el-input
+          type="textarea"
+          style="width:420px;"
+          maxlength="50"
+          resize="none"
+          show-word-limit
+          :autosize="{ minRows: 6, maxRows: 6}"
+          placeholder="请输入审核批注"
+          v-model="dialogText">
+        </el-input>
+      </div>
+      <div class="title-box" v-if="checkType == 2">
+        <p>审核人:</p>
+        <p>{{dialogForm.user}}</p>
+      </div>
+      <div class="title-box" v-if="checkType == 2">
+        <p>审核时间:</p>
+        <p>{{dialogForm.time}}</p>
+      </div>
+      <div slot="footer" class="dialog-footer" v-if="checkType == 1">
+        <el-button type="danger" style="width:100px;" @click="submitForm(1)">审核驳回</el-button>
+        <el-button type="primary" style="width:100px;" @click="submitForm(2)">审核通过</el-button>
+      </div>
+      <div slot="footer" class="dialog-footer" v-if="checkType == 2">
+        <el-button style="width:100px;" @click="cancel">关闭</el-button>
+      </div>
+    </el-dialog>
+    <!--<add-page :propsData="propsData" v-if="pageType === 2"></add-page>-->
+  </div>
+</template>
+<script>
+  import { listDepartments } from "@/api/system/dept";
+  //import { getDicts } from "@/api/commonality/noPermission";
+  //import { systemUserSelect } from "@/api/commonality/permission";
+  //import { getInfo } from "@/api/basicsModules/index";
+  //import addPage from "./addPage.vue";
+  export default {
+    name: 'index',
+    //components: {
+    //  addPage
+    //},
+    data () {
+      return {
+        tableButtonType:this.hasPermiDom(['demo:demo:detail','demo:demo:edit','demo:demo:del',]),
+        //页面状态
+        pageType:1,
+        checkType:1,
+        //页面遮罩
+        loading:false,
+        //下拉列表数据
+        optionList:[],
+        //查询条件
+        queryParams:{
+          page:1,
+          pageSize:20,
+          queryParamsData1:"",
+          queryParamsData2 :null,
+        },
+        //时间数据
+        dateRange:[],
+        //列表数据
+        dataList:[],
+        //数据数量
+        total:0,
+        //组件传参
+        propsData:{},
+        leftList:[
+          {
+            subName:"材料科学实验室1",
+            deptName:"环测学院",
+            address:"一号楼一层",
+            userName:"曹秀康",
+            createTime:"2021-5-10 12:00",
+            data1:1,
+            data2:2,
+            data3:3,
+            data4:4,
+          },
+          {
+            subName:"材料科学实验室2",
+            deptName:"环测学院",
+            address:"一号楼一层",
+            userName:"曹秀康",
+            createTime:"2021-5-4 16:30",
+            data1:1,
+            data2:2,
+            data3:3,
+            data4:4,
+          },
+          {
+            subName:"实验室1(材料)",
+            deptName:"环测学院",
+            address:"一号楼二层",
+            userName:"郭春惠",
+            createTime:"2021-6-13 13:00",
+            data1:1,
+            data2:2,
+            data3:3,
+            data4:4,
+          },
+          {
+            subName:"食品药品生物安全分测平台(610)",
+            deptName:"生命科学学院",
+            address:"二号楼一层",
+            userName:"曹倩",
+            createTime:"2021-9-23 13:00",
+            data1:1,
+            data2:2,
+            data3:3,
+            data4:4,
+          },
+        ],
+        rightList:[
+          {
+            subName:"基因组测序分析平台(607)",
+            deptName:"生命科学学院",
+            address:"一号楼六层",
+            userName:"郭春惠",
+            createTime:"2021-2-1 16:00",
+            data1:1,
+            data2:2,
+            data3:3,
+            data4:4,
+            text:"审批通过",
+            user:"郭启梅",
+            time:"2021-2-2 13:32"
+          },
+          {
+            subName:"食品药品生物安全分测平台(610)",
+            deptName:"生命科学学院",
+            address:"一号楼六层",
+            userName:"曹倩",
+            createTime:"2021-5-8 9:30",
+            data1:1,
+            data2:2,
+            data3:3,
+            data4:4,
+            text:"审批通过",
+            user:"郭启梅",
+            time:"2021-5-10 9:46"
+          },
+        ],
+        dialogTitle:'',
+        dialogType:false,
+        dialogForm:{},
+        dialogText:'',
+        dialogIndex:null,
+      }
+    },
+    created () {
+
+    },
+    mounted () {
+      //this.getList();
+      this.getDeptList();
+      this.$set(this,'dataList',JSON.parse(JSON.stringify(this.leftList)));
+    },
+    methods: {
+      cancel(){
+        this.$set(this,'dialogType',false);
+      },
+      submitForm(type){
+        if(type == 1){
+          this.dataList.splice(this.dialogIndex,1)
+          this.$set(this,'leftList',this.dataList);
+        }else if(type == 2){
+          this.$set(this.dataList[this.dialogIndex],'user',localStorage.getItem('nickName'));
+          this.$set(this.dataList[this.dialogIndex],'time',this.parseTime(new Date().getTime(), '{y}-{m}-{d} {h}:{i}'))
+          this.rightList.push(this.dataList[this.dialogIndex])
+          this.dataList.splice(this.dialogIndex,1)
+          this.$set(this,'leftList',this.dataList);
+        }
+        this.msgSuccess('操作成功')
+        this.$set(this,'dialogType',false);
+        this.$forceUpdate()
+      },
+      //操作按钮
+      tableButton(row,index){
+        this.$set(this,'dialogTitle',this.checkType == 1?'审核':'审核通过');
+        this.$set(this,'dialogText','');
+        this.$set(this,'dialogIndex',index);
+        this.$set(this,'dialogForm',JSON.parse(JSON.stringify(row)));
+        this.$set(this,'dialogType',true);
+      },
+      /** 查询学院列表 */
+      getDeptList() {
+        listDepartments().then(response => {
+          this.$set(this, 'optionList', response.data)
+        });
+      },
+      //查询按钮
+      handleQuery(){
+        this.$set(this.queryParams,'page',1);
+        this.getList();
+      },
+      //重置按钮
+      resetQuery(){
+        this.$set(this,'dateRange',[])
+        this.$set(this,'queryParams',{
+          page:1,
+          pageSize:20,
+          queryParamsData1:"",
+          queryParamsData2 :null,
+        });
+        this.getList();
+      },
+      //获取数据列表
+      getList(){
+
+      },
+      checkClick(type){
+        if(type == 1){
+          this.$set(this,'checkType',type);
+          this.$set(this,'dataList',JSON.parse(JSON.stringify(this.leftList)));
+        }else if(type == 2){
+          this.$set(this,'checkType',type);
+          this.$set(this,'dataList',JSON.parse(JSON.stringify(this.rightList)));
+        }
+      },
+    },
+  }
+</script>
+<style scoped lang="scss">
+  .universityLevel{
+    flex:1;
+    display: flex!important;
+    flex-direction: column;
+    overflow: hidden;
+    .universityLevelPage{
+      flex:1;
+      display: flex!important;
+      flex-direction: column;
+      overflow: hidden;
+      padding:20px;
+      font-weight:500;
+      .page-content-box{
+        flex:1;
+        display: flex!important;
+        flex-direction: column;
+        overflow: hidden;
+      }
+      .form-button-box{
+        display: flex;
+        p{
+          width:100px;
+          text-align: center;
+          border:1px solid #dedede;
+          cursor: pointer;
+        }
+        p:nth-child(1){
+          border-right:none;
+          border-top-left-radius:4px;
+          border-bottom-left-radius:4px;
+        }
+        p:nth-child(2){
+          border-left:none;
+          border-top-right-radius:4px;
+          border-bottom-right-radius:4px;
+        }
+        .check-p{
+          background-color: #0183fa;
+          color:#fff;
+        }
+      }
+    }
+  }
+</style>
+<style lang="scss">
+  .safetyInformationAudit-dialog-box{
+    .title-box{
+      display: flex;
+      p{
+        font-size:14px;
+        line-height:40px;
+      }
+      p:nth-child(1){
+        width:100px;
+        text-align: right;
+      }
+      p:nth-child(2){
+        flex:1;
+      }
+    }
+  }
+</style>

+ 498 - 57
src/views/comprehensive/laboratoryManagement/subject/infoPage.vue

@@ -4,7 +4,7 @@
         <div :class="versionField() == 'xiBeiNongLinDaXue'?'top-max-box-flex':''" class="top-max-box" style="position: relative">
           <div class="all-title-box">
             <p></p>
-            <p style="flex:1;">实验室信息</p>
+            <p style="flex:1;">实验室安全信息</p>
             <div v-if="versionField() == 'xiBeiNongLinDaXue'" class="reset-button-one" style="margin-top:-5px;width:80px!important;height:30px!important;line-height:30px!important;" @click="backPage">返回</div>
           </div>
           <div class="left-top-title-box">
@@ -24,17 +24,14 @@
           </div>
           <div class="user-max-box">
             <div class="left-box">
-              <p>实验室责任人:<span>{{newData.adminName}}</span></p>
-              <p>联系方式:<span>{{newData.adminPhone}}</span></p>
+              <p>责任人:<span>{{newData.adminName}}-{{newData.adminPhone}}</span></p>
             </div>
             <div class="right-box">
-              <div v-for="(item,index) in newData.safeUserName" :key="index">
-                <p>安全责任人:<span>{{newData.safeUserName[index]}}</span></p>
-                <p>联系方式:<span>{{newData.safeUserPhone[index]?newData.safeUserPhone[index]:'未填写'}}</span></p>
+              <div>
+                <p>安全责任人:<span v-for="(item,index) in newData.safeUserName" :key="index">{{newData.safeUserName[index]}}-{{newData.safeUserPhone[index]?newData.safeUserPhone[index]:'未填写'}}</span></p>
               </div>
             </div>
           </div>
-          <p class="info-max-title-p">管控一体机信息</p>
           <div class="info-max-box">
             <div class="left-box">
               <div class="for-text-box">
@@ -68,20 +65,22 @@
               </div>
             </div>
           </div>
-          <p class="info-max-title-p">电子信息牌信息</p>
-          <div class="info-max-box">
-            <div class="for-text-box" v-if="item.privateList.length>0 && item.classifyType==1" v-for="(item,index) in  newData.classifyList">
-              <p class="info-title">{{item.classifyName}}:</p>
-              <div class="for-box" v-for="(item2,index2) in item.privateList" :key="index2">
-                <p class="for-info-p">● {{item2.infoName}}</p>
-              </div>
-            </div>
-            <div class="for-img-box" v-if="item.privateList.length>0 && item.classifyType==2" v-for="(item,index) in  newData.classifyList">
-              <p class="info-title" style="margin-bottom:7px;">{{item.classifyName}}:</p>
-              <img :src="item2.infoContent" v-for="(item2,index2) in item.privateList" :key="index2">
+        </div>
+        <div class="top-max-box">
+          <div class="all-title-box" style="margin-top:20px;">
+            <p></p>
+            <p style="flex:1;">关联预案</p>
+          </div>
+          <div class="demo-max-box">
+            <div class="demo-title-box">
+              <p>预案名称</p>
+              <p>启动次数</p>
+              <p>最近启动时间</p>
             </div>
-            <div class="for-img-box" v-if="!newData.classifyList[0]">
-              <p class="info-title">未配置</p>
+            <div class="demo-text-box" v-for="(item,index) in demoList" :key='index'>
+              <p>{{item.name}}</p>
+              <p>{{item.num}}</p>
+              <p>{{item.time}}</p>
             </div>
           </div>
         </div>
@@ -157,8 +156,12 @@
         </div>
         <div class="video-max-box">
           <div class="video-min-box" v-for="(item,index) in newData.videoData" :key="item.id">
-            <video :id="item.divId" ref="videoRef" autoplay controls  muted width="240" height="130px"></video>
+            <video :id="item.divId" ref="videoRef" autoplay controls  muted width="380"></video>
             <p class="el-icon-full-screen position-p" @click="videoFullScreen(index)"></p>
+            <!--画中画-->
+            <p class="video-all-button-2 el-icon-data-board" @click="requestPictureInPicture(index)"></p>
+            <!--历史记录-->
+            <p class="video-all-button-3 el-icon-date" @click="lookDialog"></p>
           </div>
         </div>
         <img class="null-data-img" src="@/assets/ZDimages/null-data.png" v-if="!newData.videoData[0]">
@@ -168,27 +171,37 @@
           <p>检查项信息</p>
         </div>
         <div class="inspection-box">
-          <div>
-            <p>穿戴检查项:</p>
-            <p>
-              <span v-for="(item,index) in newData.safeInfo.checkInData">{{index==0?item:'、'+item}}</span>
-              <span v-if="!newData.safeInfo.checkInData">未设置</span>
-            </p>
-          </div>
-          <div>
-            <p>穿戴检查可跳过:</p>
-            <p>{{newData.skipped == '1'?'是':(newData.skipped == '0'?'否':'')}}</p>
-          </div>
-          <div v-if="newData.skipped == 1">
-            <p>穿戴检查识别上限:</p>
-            <p>{{newData.checkCount?newData.checkCount:'未设置'}}</p>
+          <div style="display: flex">
+            <div>
+              <p>穿戴检查项:</p>
+              <p>
+                <span v-for="(item,index) in newData.safeInfo.checkInData">{{index==0?item:'、'+item}}</span>
+                <span v-if="!newData.safeInfo.checkInData">未设置</span>
+              </p>
+            </div>
+            <div style="margin-left:30px;">
+              <p>穿戴检查可跳过:</p>
+              <p>{{newData.skipped == '1'?'是':(newData.skipped == '0'?'否':'')}}</p>
+            </div>
+            <div style="margin-left:30px;" v-if="newData.skipped == 1">
+              <p>穿戴检查识别上限:</p>
+              <p>{{newData.checkCount?newData.checkCount:'未设置'}}</p>
+            </div>
           </div>
-          <div>
-            <p>离开检查项:</p>
-            <p>
-              <span v-for="(item,index) in newData.safeInfo.checkOutData">{{index==0?item:'、'+item}}</span>
-              <span v-if="!newData.safeInfo.checkOutData">未设置</span>
-            </p>
+          <div style="display: flex">
+            <div>
+              <p>重复签到限制时间:</p>
+              <p>
+                <span>二十四小时</span>
+              </p>
+            </div>
+            <div style="margin-left:30px;">
+              <p>离开检查项:</p>
+              <p>
+                <span v-for="(item,index) in newData.safeInfo.checkOutData">{{index==0?item:'、'+item}}</span>
+                <span v-if="!newData.safeInfo.checkOutData">未设置</span>
+              </p>
+            </div>
           </div>
         </div>
       </div>
@@ -214,6 +227,69 @@
           <el-button type="primary" @click="submitFormOne">确 定</el-button>
         </div>
       </el-dialog>
+
+      <el-dialog title="历史视频" v-if="dialogType"
+                 @close="close"
+                 :visible.sync="dialogType" width="1000px"
+                 append-to-body class="look-video-dialog-box">
+        <div>
+          <el-date-picker
+            style="margin-right:20px;"
+            v-model="datePicker"
+            type="date"
+            placeholder="选择日期"
+            format="yyyy 年 MM 月 dd 日">
+          </el-date-picker>
+          <el-time-select
+            style="margin-right:20px;"
+            placeholder="起始时间"
+            v-model="startTime"
+            :picker-options="{
+          start: '00:00',
+          step: '01:00',
+          end: '23:00',
+        }">
+          </el-time-select>
+          <el-time-select
+            style="margin-right:20px;"
+            placeholder="结束时间"
+            v-model="endTime"
+            :picker-options="{
+          start: '00:00',
+          step: '01:00',
+          end: '23:00',
+          minTime: startTime
+        }">
+          </el-time-select>
+          <el-button type="primary" style="height:40px;" @click="videoButtonLock(1)">确定</el-button>
+          <el-button style="height:40px;" @click="videoButtonLock(2)">重置</el-button>
+        </div>
+        <div class="dialog-video-max-box">
+          <p class="dialog-position-p"></p>
+          <div class="dialog-video-max-left-box">
+            <video controls width="730"
+                   autoplay muted
+                   :poster="videoCover" v-if="dialogVideoType">
+              <source :src="videoUrl"
+                      type="video/webm">
+              <source :src="videoUrl"
+                      type="video/mp4">
+            </video>
+            <i v-if="!videoUrl" style="display: inline-block;width:730px;line-height:200px;text-align: center;font-size:16px;color:#999">请选择视频</i>
+            <!--<video class="video-box" ref="dialogVideoRef" :poster="videoCover"-->
+            <!--v-if="dialogVideoType"-->
+            <!--:url="videoUrl"-->
+            <!--autoplay controls  muted width="366px" height="210px"></video>-->
+          </div>
+          <div class="dialog-video-max-right-box scrollbar-box">
+            <p :class="videoUrl == item.url?'check-p':''"
+               v-if="item.type"
+               @click="videoClick(item)"
+               v-for="(item,index) in videoDataList" :key="index">{{item.name}}</p>
+            <i v-if="nullType">暂无数据</i>
+          </div>
+        </div>
+      </el-dialog>
     </div>
 </template>
 
@@ -255,6 +331,137 @@
           },
           videoList:[],
           safetyInfoList:[],
+          demoList:[
+            {
+              name:"大气压预案",
+              num:"三次",
+              time:"2021年6月1日 12:00",
+            },
+            {
+              name:"VOC预案",
+              num:"三次",
+              time:"2021年6月5日 10:00",
+            },
+            {
+              name:"烟感预案",
+              num:"三次",
+              time:"2021年6月7日 15:00",
+            },
+          ],
+          dialogType:false,
+          datePicker:null,
+          startTime:null,
+          endTime:null,
+          videoDataList:[
+            {
+              name:"2023-06-21/18:00",
+              url:"http://lab-demo.sxitdlc.com/statics/record/app192168164/stream192168164/2023-06-21/18-38-49.mp4",
+              type:true,
+            },
+            {
+              name:"2023-06-22/18:00",
+              url: "http://lab-demo.sxitdlc.com/statics/record/app192168164/stream192168164/2023-06-21/18-43-08.mp4",
+              type:true,
+            },
+            {
+              name:"2023-06-25/10:00",
+              url:"http://lab-demo.sxitdlc.com/statics/record/app192168164/stream192168164/2023-06-25/10-36-09.mp4",
+              type:true,
+            },
+            {
+              name:"2023-06-26/10:00",
+              url:"http://lab-demo.sxitdlc.com/statics/record/app192168164/stream192168164/2023-06-25/10-42-26.mp4",
+              type:true,
+            },
+            {
+              name:"2023-06-25/10:00",
+              url:"http://lab-demo.sxitdlc.com/statics/record/app192168164/stream192168164/2023-06-25/10-47-58.mp4",
+              type:true,
+            },
+            {
+              name:"2023-06-25/11:00",
+              url:"http://lab-demo.sxitdlc.com/statics/record/app192168164/stream192168164/2023-06-25/10-49-50.mp4",
+              type:true,
+            },
+            {
+              name:"2023-06-25/12:00",
+              url:"http://lab-demo.sxitdlc.com/statics/record/app192168164/stream192168164/2023-06-25/10-50-29.mp4",
+              type:true,
+            },
+            {
+              name:"2023-06-25/13:00",
+              url:"http://lab-demo.sxitdlc.com/statics/record/app192168164/stream192168164/2023-06-25/10-50-58.mp4",
+              type:true,
+            },
+            {
+              name:"2023-06-25/14:00",
+              url:"http://lab-demo.sxitdlc.com/statics/record/app192168164/stream192168164/2023-06-25/10-51-09.mp4",
+              type:true,
+            },
+            {
+              name:"2023-06-25/15:00",
+              url:"http://lab-demo.sxitdlc.com/statics/record/app192168164/stream192168164/2023-06-25/10-51-26.mp4",
+              type:true,
+            },
+            {
+              name:"2023-06-26/16:00",
+              url:"http://lab-demo.sxitdlc.com/statics/record/app192168164/stream192168164/2023-06-26/10-19-55.mp4",
+              type:true,
+            },
+            {
+              name:"2023-06-26/17:00",
+              url:"http://lab-demo.sxitdlc.com/statics/record/app192168164/stream192168164/2023-06-26/10-20-34.mp4",
+              type:true,
+            },
+            {
+              name:"2023-06-26/10:00",
+              url:"http://lab-demo.sxitdlc.com/statics/record/app192168164/stream192168164/2023-06-26/10-21-19.mp4",
+              type:true,
+            },
+            {
+              name:"2023-06-26/10:00",
+              url:"http://lab-demo.sxitdlc.com/statics/record/app192168164/stream192168164/2023-06-26/10-22-04.mp4",
+              type:true,
+            },
+            {
+              name:"2023-06-26/14:00",
+              url:"http://lab-demo.sxitdlc.com/statics/record/app192168164/stream192168164/2023-06-26/14-59-04.mp4",
+              type:true,
+            },
+            {
+              name:"2023-06-26/15:00",
+              url:"http://lab-demo.sxitdlc.com/statics/record/app192168164/stream192168164/2023-06-26/15-33-20.mp4",
+              type:true,
+            },
+            {
+              name:"2023-07-12/10:00",
+              url:"http://lab-demo.sxitdlc.com/statics/record/app192168164/stream192168164/2023-07-12/10-26-33.mp4",
+              type:true,
+            },
+            {
+              name:"2023-07-12/10:00",
+              url:"http://lab-demo.sxitdlc.com/statics/record/app192168164/stream192168164/2023-07-12/10-32-55.mp4",
+              type:true,
+            },
+            {
+              name:"2023-07-12/10:00",
+              url:"http://lab-demo.sxitdlc.com/statics/record/app192168164/stream192168164/2023-07-12/10-36-12.mp4",
+              type:true,
+            },
+            {
+              name:"2023-07-12/08:00",
+              url:"http://lab-demo.sxitdlc.com/statics/record/app192168164/stream192168164/2023-07-12/10-41-21.mp4",
+              type:true,
+            },
+            {
+              name:"2023-07-12/14:00",
+              url:"http://lab-demo.sxitdlc.com/statics/record/app192168164/stream192168164/2023-07-12/14-19-44.mp4",
+              type:true,
+            },
+          ],
+          videoUrl:null,
+          dialogVideoType:false,
+          nullType:false,
         }
       },
       created() {
@@ -279,6 +486,120 @@
 
       },
       methods:{
+        close(){
+          this.$set(this,'dialogType',false);
+          this.$set(this,'datePicker',null);
+          this.$set(this,'startTime',null);
+          this.$set(this,'endTime',null);
+          this.$set(this,'videoUrl',null);
+          this.$set(this,'dialogVideoType',false);
+          this.$set(this,'nullType',false);
+        },
+        videoButtonLock(type){
+          let self = this;
+          if(type == 2){
+            this.$set(this,'datePicker',null);
+            this.$set(this,'startTime',null);
+            this.$set(this,'endTime',null);
+            for(let i=0;i<self.videoDataList.length;i++){
+              self.$set(self.videoDataList[i],'type',true);
+            }
+          }else{
+            let time = this.datePicker?this.parseTime(this.datePicker, '{y}-{m}-{d}'):'';
+            let time1 = this.startTime;
+            let time2 = this.endTime;
+            if(time||time1||time2){
+              let num = 0;
+              for(let i=0;i<self.videoDataList.length;i++){
+                if(time&&time1&&time2){
+                  let x = parseInt(self.videoDataList[i].name.split('/')[1].split(':')[0])
+                  let a = parseInt(time1.split(':')[0])
+                  let b = parseInt(time2.split(':')[0])
+                  if(self.videoDataList[i].name.indexOf(time) != -1 && x >= a && x <= b){
+                    self.videoDataList[i].type = true;
+                  }else{
+                    num++
+                    self.videoDataList[i].type = false;
+                  }
+                }else if(time&&time1){
+                  let x = parseInt(self.videoDataList[i].name.split('/')[1].split(':')[0])
+                  let a = parseInt(time1.split(':')[0])
+                  if(self.videoDataList[i].name.indexOf(time) != -1 && x >= a){
+                    self.videoDataList[i].type = true;
+                  }else{
+                    num++
+                    self.videoDataList[i].type = false;
+                  }
+                }else if(time&&time2){
+                  let x = parseInt(self.videoDataList[i].name.split('/')[1].split(':')[0])
+                  let b = parseInt(time2.split(':')[0])
+                  if(self.videoDataList[i].name.indexOf(time1) != -1 && x <= b){
+                    self.videoDataList[i].type = true;
+                  }else{
+                    num++
+                    self.videoDataList[i].type = false;
+                  }
+                }else if(time1&&time2){
+                  let x = parseInt(self.videoDataList[i].name.split('/')[1].split(':')[0])
+                  let a = parseInt(time1.split(':')[0])
+                  let b = parseInt(time2.split(':')[0])
+                  if(x >= a && x <= b){
+                    self.videoDataList[i].type = true;
+                  }else{
+                    num++
+                    self.videoDataList[i].type = false;
+                  }
+                }else if(time1){
+                  let x = parseInt(self.videoDataList[i].name.split('/')[1].split(':')[0])
+                  let a = parseInt(time1.split(':')[0])
+                  if(x >= a){
+                    self.videoDataList[i].type = true;
+                  }else{
+                    num++
+                    self.videoDataList[i].type = false;
+                  }
+                }else if(time2){
+                  let x = parseInt(self.videoDataList[i].name.split('/')[1].split(':')[0])
+                  let b = parseInt(time2.split(':')[0])
+                  if(x <= b){
+                    self.videoDataList[i].type = true;
+                  }else{
+                    num++
+                    self.videoDataList[i].type = false;
+                  }
+                }else if(time){
+                  if(self.videoDataList[i].name.indexOf(time) != -1){
+                    self.videoDataList[i].type = true;
+                  }else{
+                    num++
+                    self.videoDataList[i].type = false;
+                  }
+                }
+              }
+              if(num == self.videoDataList.length){
+                this.$set(this,'nullType',true);
+              }else{
+                this.$set(this,'nullType',false);
+              }
+            }
+          }
+        },
+        videoClick(item){
+          let self = this;
+          this.$set(this,'dialogVideoType',false);
+          this.$set(this,'videoUrl',item.url);
+          setTimeout(function(){
+            self.$set(self,'dialogVideoType',true);
+          },300);
+
+        },
+        requestPictureInPicture(index){
+          this.$refs.videoRef[index].requestPictureInPicture();
+        },
+        lookDialog(){
+          this.$set(this,'dialogType',!this.dialogType);
+          this.$set(this,'videoUrl',null);
+        },
         //视频方法
         videoFunction(){
           let self = this;
@@ -458,7 +779,7 @@
     }
     .left-max-box{
       font-weight:500;
-      width:1035px;
+      width:735px;
       display: flex;
       flex-direction: column;
       .top-max-box-flex{
@@ -517,9 +838,8 @@
         }
         .user-max-box{
           margin-top:10px;
-          display: flex;
           .left-box{
-            width:420px;
+            flex:1;
             display: flex;
             p{
               line-height: 32px;
@@ -533,16 +853,17 @@
           }
           .right-box{
             flex:1;
+            display: inline-block;
             div{
-              flex:1;
               display: flex;
               p{
+                margin-right:20px;
                 line-height: 32px;
                 font-size:14px;
-                flex:1;
                 color:#333;
                 span{
                   color:#999;
+                  margin-right:20px;
                 }
               }
             }
@@ -562,7 +883,7 @@
           display: flex;
           flex-wrap: wrap;
           .for-text-box{
-            width:420px;
+            width:320px;
             .info-title{
               font-size:14px;
               color:#333;
@@ -581,7 +902,7 @@
             }
           }
           .for-img-box{
-            width:420px;
+            width:320px;
             .info-title{
               font-size:14px;
               color:#333;
@@ -640,7 +961,7 @@
     }
     .right-max-box{
       font-weight:500;
-      width:545px;
+      width:845px;
       border-radius:10px!important;
       box-shadow: 0 0 8px 1px rgba(0, 0, 0, 0.1) !important;
       margin:5px 20px 20px 10px;
@@ -704,9 +1025,9 @@
         .video-min-box{
           display: inline-block;
           overflow: hidden;
-          width:240px;
+          width:380px;
           margin-bottom:20px;
-          height:130px;
+          margin-right:20px;
           position: relative;
           .position-p{
             width:30px;
@@ -720,10 +1041,32 @@
             color:#fff;
             cursor: pointer;
           }
+          .video-all-button-2{
+            width:30px;
+            height:30px;
+            text-align: center;
+            line-height:30px;
+            position: absolute;
+            top:0;
+            right:30px;
+            color:#fff;
+            cursor: pointer;
+          }
+          .video-all-button-3{
+            width:30px;
+            height:30px;
+            text-align: center;
+            line-height:30px;
+            position: absolute;
+            top:0;
+            right:60px;
+            color:#fff;
+            cursor: pointer;
+          }
         }
-        .video-min-box:nth-child(2n+0){
-          margin-left:20px;
-        }
+        /*.video-min-box:nth-child(2n+0){*/
+          /*margin-left:20px;*/
+        /*}*/
       }
       .inspection-box{
         div{
@@ -732,20 +1075,118 @@
             line-height:16px;
             font-size:14px;
             margin:11px 0;
-            color:#333;
+            color:#999;
           }
           p:nth-child(2){
             flex:1;
             line-height:16px;
             font-size:14px;
             margin:11px 0;
-            color:#999;
+            color:#333;
             span{
-              color:#999;
+              color:#333;
             }
           }
         }
       }
     }
+    .demo-max-box{
+      padding:20px;
+      .demo-title-box{
+        display: flex;
+        p{
+          flex:1;
+          color:#666;
+          font-size:16px;
+          line-height:30px;
+        }
+      }
+      .demo-text-box{
+        display: flex;
+        p{
+          flex:1;
+          color:#333;
+          font-size:14px;
+          line-height:30px;
+        }
+      }
+    }
+  }
+</style>
+
+<style lang="scss">
+  .look-video-dialog-box{
+    //  画中画
+    video::-webkit-media-controls-enclosure {
+      display: none;
+    }
+    // 音频开关
+    video::-webkit-media-controls-mute-button {
+      display: none;
+    }
+    // 音频大小
+    video::-webkit-media-controls-volume-slider {
+      display: none;
+    }
+    //全屏按钮
+    video::-webkit-media-controls-fullscreen-button {
+      display: none;
+    }
+    //开始暂停按钮
+    video::-webkit-media-controls-play-button {
+      display: none;
+    }
+    // 时间显示
+    video::-webkit-media-controls-current-time-display {
+      display: none;
+    }
+    // 未知时间
+    video::-webkit-media-controls-toggle-closed-captions-button {
+      display: none;
+    }
+    //进度条
+    video::-webkit-media-controls-timeline {
+      display: none;
+    }
+    //未知进度条
+    video::-webkit-media-controls-time-remaining-display {
+      display: none;
+    }
+    video {
+      object-fit: fill; //视频全铺
+      pointer-events: none; //点击禁用
+    }
+    .dialog-video-max-box{
+      display: flex;
+      height:410px;
+      margin-top:20px;
+      position: relative;
+      .dialog-position-p{
+        position: absolute;
+        top: 0;
+        left:0;
+        width: 730px;
+        height:30px;
+        background-color: #ffffff;
+        z-index:999;
+      }
+      .dialog-video-max-left-box{
+        flex:1;
+      }
+      .dialog-video-max-right-box{
+        width:200px;
+        p{
+          line-height:30px;
+        }
+        p:hover{
+          background-color: #0183fa;
+          color:#fff;
+          cursor: pointer;
+        }
+        .check-p{
+          color:#0183fa;
+        }
+      }
+    }
   }
 </style>

+ 2 - 4
src/views/comprehensive/laboratoryManagement/subject/instrument.vue

@@ -157,7 +157,7 @@
           ],
         },
         //vuex数据
-        dataVUEX:{},
+        dataVUEX:[],
       }
     },
     created(){
@@ -232,9 +232,7 @@
         let self = this;
         let list = this.$store.getters.instrument;
         for(let i=0;i<list.length;i++){
-          if(list[i].id == self.newData.id){
-            this.$set(self,'instrumentList',this.instrumentList.concat(list[i].list));
-          }
+          this.$set(self,'instrumentList',this.instrumentList.concat(list[i].list));
         }
         this.$set(this,'dataVUEX',list);
 

Fichier diff supprimé car celui-ci est trop grand
+ 711 - 0
src/views/comprehensive/laboratoryManagement/videoPatrol/index.vue


Fichier diff supprimé car celui-ci est trop grand
+ 698 - 0
src/views/comprehensive/laboratoryManagement/videoPatrolOne/index.vue


+ 6 - 30
src/views/comprehensive/personnel/visitor/addPage.vue

@@ -308,9 +308,9 @@ export default {
         nickName:"",
         sex:0,
         userName:"",
-        deptId:"",
+        deptId:"154",
         position:15,     //身份
-        roleIds:[],     //角色
+        roleIds:[20],     //角色
         majorId:"",
         grade:"",
         dateBirth:"",
@@ -401,16 +401,6 @@ export default {
       }else{
         this.form.userName = '';
       }
-      if(this.propsData.deptId){
-        this.form.deptId = this.propsData.deptId;
-      }else{
-        this.form.deptId = '';
-      }
-      if(this.propsData.position){
-        this.form.position = parseInt(this.propsData.position);
-      }else{
-        this.form.position = 15;
-      }
       if(this.propsData.majorId){
         this.form.majorId = parseInt(this.propsData.majorId);
       }else{
@@ -471,22 +461,6 @@ export default {
       }else{
         this.form.signature = '';
       }
-      if(this.propsData.roleIds){
-        this.form.roleIds = this.propsData.roleIds;
-      }else{
-        this.form.roleIds = [];
-      }
-      // if(this.propsData.position === '未定'){
-      //   this.form.position = null;
-      // }
-      // if(this.propsData.position){
-      //   this.form.position = this.propsData.position.split(',');
-      //   for(let i=0;i<self.form.position.length;i++){
-      //     self.form.position[i] = parseInt(self.form.position[i]);//字符串转数字
-      //   }
-      // }else{
-      //   this.form.position = [];
-      // }
       this.getSelect();
     }else{
       this.getAll();
@@ -498,6 +472,9 @@ export default {
   },
   mounted(){
     this.listDepartments();
+    this.form.deptId = "154";
+    this.form.position = 15;
+    this.form.roleIds = [20];
   },
   methods:{
     upDataClick(){
@@ -512,8 +489,7 @@ export default {
             }
           }
           let obj = JSON.parse(JSON.stringify(this.form));
-          obj.roleIds = self.form.position?self.form.roleIds:[];
-          // obj.position = obj.position+'';
+
           if(this.propsData.userId){
             //编辑
             obj.userId = this.propsData.userId