dedsudiyu 1 ano atrás
pai
commit
52d0da3ee4

+ 3 - 0
src/store/getters.js

@@ -14,5 +14,8 @@ const getters = {
   topbarRouters:state => state.permission.topbarRouters,
   defaultRoutes:state => state.permission.defaultRoutes,
   sidebarRouters:state => state.permission.sidebarRouters,
+  //演示数据
+  //仪器
+  instrument: state => state.localData.instrument,
 }
 export default getters

+ 3 - 1
src/store/index.js

@@ -5,6 +5,7 @@ import user from './modules/user'
 import tagsView from './modules/tagsView'
 import permission from './modules/permission'
 import settings from './modules/settings'
+import localData from './modules/localData'
 import getters from './getters'
 
 Vue.use(Vuex)
@@ -15,7 +16,8 @@ const store = new Vuex.Store({
     user,
     tagsView,
     permission,
-    settings
+    settings,
+    localData
   },
   getters
 })

+ 23 - 0
src/store/modules/localData.js

@@ -0,0 +1,23 @@
+const state = {
+  instrument:[],
+}
+
+const mutations = {
+  // 设置网页标题
+  SET_INSTRUMENT({ commit }, list) {
+    state.instrument = list
+  },
+}
+
+const actions = {
+  // 存储仪器数据
+  setInstrument({ commit }, list) {
+    commit('SET_INSTRUMENT', list)
+  },
+}
+
+export default {
+  state,
+  mutations,
+  actions
+}

+ 226 - 0
src/views/comprehensive/laboratoryManagement/instrument/index.vue

@@ -0,0 +1,226 @@
+<!-- 仪器管理 -->
+<template>
+  <div class="app-container instrument">
+    <div class="page-container instrumentPage" v-if="pageType === 1">
+      <div class="page-form-title-box">
+        <el-form :model="queryParams" class="form-box" ref="queryForm"
+                 :inline="true" style="width:100%;">
+          <el-form-item label="名称" prop="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.value"
+                :label="dict.label"
+                :value="dict.value"
+              />
+            </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-item style="float: right;">
+            <el-col :span="1.5">
+              <p class="add-button-one-120"
+                 style="margin-right:20px;"
+                 @click="tableButton(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-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)"
+                >编辑</p>
+                <p class="table-button-p"
+                   @click="tableButton(2,scope.row)"
+                >查看</p>
+                <p class="table-button-null"></p>
+              </div>
+            </template>
+          </el-table-column>
+        </el-table>
+        <pagination :page-sizes="[20, 30, 40, 50]"
+                    v-show="total>0"
+                    :total="total"
+                    :page.sync="queryParams.page"
+                    :limit.sync="queryParams.pageSize"
+                    @pagination="getList"
+        />
+      </div>
+    </div>
+    <!--<add-page :propsData="propsData" v-if="pageType === 2"></add-page>-->
+  </div>
+</template>
+<script>
+  //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,
+        //页面遮罩
+        loading:false,
+        //下拉列表数据
+        optionList:[{value:true,label:'启用'},{value:false,label:'停用'}],
+        //查询条件
+        queryParams:{
+          page:1,
+          pageSize:20,
+          queryParamsData1:"",
+          queryParamsData2 :null,
+        },
+        //时间数据
+        dateRange:[],
+        //列表数据
+        dataList:[],
+        //数据数量
+        total:0,
+        //组件传参
+        propsData:{},
+      }
+    },
+    created () {
+
+    },
+    mounted () {
+      //this.getList();
+    },
+    methods: {
+      //查询按钮
+      handleQuery(){
+        this.$set(this.queryParams,'page',1);
+        this.getList();
+      },
+      //重置按钮
+      resetQuery(){
+        this.$set(this,'dateRange',[])
+        this.$set(this,'queryParams',{
+          page:1,
+          pageSize:20,
+          queryParamsData1:"",
+          queryParamsData2 :null,
+        });
+        this.getList();
+      },
+      //获取数据列表
+      getList(){
+
+      },
+      //操作按钮
+      tableButton(type,row){
+        let self = this;
+        if(type == 1){
+          //新增
+          this.$set(this,'pageType',2);
+          this.$set(this,'propsData',{});
+        }else if(type == 2){
+          //详情
+          this.$set(this,'pageType',2);
+          let obj = JSON.parse(JSON.stringify(row))
+          obj.showType = true;
+          this.$set(this,'propsData',obj);
+        }else if(type == 3){
+          //编辑
+          this.$set(this,'pageType',2);
+          let obj = JSON.parse(JSON.stringify(row))
+          obj.showType = false;
+          this.$set(this,'propsData',obj);
+        }else if(type == 4){
+          //删除
+          this.$confirm('是否确认删除?', "警告", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning"
+          }).then(function() {
+          }).then(() => {
+            deleteFunction({id:row.id}).then(response => {
+              self.msgSuccess(response.message)
+              self.getList();
+            });
+          }).catch(() => {});
+        }else if(type == 5){
+          //启用&停用
+          let text = row.state  ? "停用" : "启用";
+          this.$confirm('是否确认' + text + '?', "警告", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning"
+          }).then(function() {
+          }).then(() => {
+            stateFunction({id:row.id,state:!row.state,}).then(response => {
+              self.msgSuccess(response.message)
+              self.getList();
+            });
+          }).catch(() => {});
+        }else if(type == 6){
+          //返回并刷新
+          this.$set(this,'pageType',1);
+          this.getList();
+        }
+      },
+    },
+  }
+</script>
+<style scoped lang="scss">
+  .instrument{
+    flex:1;
+    display: flex!important;
+    flex-direction: column;
+    overflow: hidden;
+    .instrumentPage{
+      flex:1;
+      display: flex!important;
+      flex-direction: column;
+      overflow: hidden;
+      padding:20px;
+      .page-content-box{
+        flex:1;
+        display: flex!important;
+        flex-direction: column;
+        overflow: hidden;
+      }
+    }
+  }
+</style>

+ 2 - 1
src/views/comprehensive/laboratoryManagement/subject/addSubject.vue

@@ -721,7 +721,8 @@
       getRandomMobile() {
         const mobilePrefix = ["130", "131", "132", "133", "135", "137", "138", "170", "187", "189"];
         const prefix = mobilePrefix[Math.floor(Math.random() * mobilePrefix.length)];
-        const suffix = Math.floor(Math.random() * 1000000000).toString().padStart(9, "0");
+        const suffix = Math.floor(Math.random() * 10000000).toString().padStart(8, "0");
+        console.log('suffix',suffix);
         return prefix + suffix;
       }
       }

+ 107 - 20
src/views/comprehensive/laboratoryManagement/subject/deviceList.vue

@@ -7,16 +7,24 @@
     </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>
+        <p class="for-title-p">{{subjectData.room}}-{{item.type.name}}传感器{{index+1}}<span style="color:#666;">{{item.repairType?'(维修)':''}}</span></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-text-box">
+          <p>绑定时间:</p>
+          <el-tooltip class="item" effect="dark" :content="item.createTime" placement="top">
+            <p>{{parseTime(item.createTime,'{y}-{m}-{d} {h}:{i}')}}</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="repairButton(item)"><i class="el-icon-setting"></i>维修</p>
+          <p></p>
           <p @click="delSensor(item)"><i class="el-icon-delete"></i>删除</p>
         </div>
       </div>
@@ -27,7 +35,7 @@
     </div>
     <div class="for-max-box" v-if="subjectData.hardwareType==1">
       <div class="for-big-box" v-for="(item,index) in listHK" :key="index" style="width: 350px">
-        <p class="for-title-p">{{item.type.name}}-{{item.name}}</p>
+        <p class="for-title-p">{{item.type.name}}-{{item.name}}<span style="color:#666;">{{item.repairType?'(维修)':''}}</span></p>
         <div class="for-text-box">
           <p>门禁编号:</p>
           <el-tooltip class="item" effect="dark" :content="item.hardwareNum" placement="top">
@@ -35,6 +43,12 @@
           </el-tooltip>
         </div>
         <div class="for-text-box">
+          <p>绑定时间:</p>
+          <el-tooltip class="item" effect="dark" :content="item.createTime" placement="top">
+            <p>{{parseTime(item.createTime,'{y}-{m}-{d} {h}:{i}')}}</p>
+          </el-tooltip>
+        </div>
+        <div class="for-text-box">
           <p>门禁授权:</p>
           <el-checkbox-group v-model="item.controlScope==null?[]:item.controlScope.split(',')" style="margin-top: 6px" disabled>
             <el-checkbox label="1" style="margin-right: 8px">关联安全准入</el-checkbox>
@@ -44,6 +58,8 @@
         <div class="for-button-box">
           <p @click="editData('editEntrance',item)"><i class="el-icon-edit-outline"></i>编辑</p>
           <p></p>
+          <p @click="repairButton(item)"><i class="el-icon-setting"></i>维修</p>
+          <p></p>
           <p @click="delEntrance(item)"><i class="el-icon-delete"></i>删除</p>
         </div>
       </div>
@@ -54,16 +70,24 @@
     </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>
+        <p class="for-title-p">{{subjectData.room}}-{{item.type.name}}{{index+1}}<span style="color:#666;">{{item.repairType?'(维修)':''}}</span></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-text-box">
+          <p>绑定时间:</p>
+          <el-tooltip class="item" effect="dark" :content="item.createTime" placement="top">
+            <p>{{parseTime(item.createTime,'{y}-{m}-{d} {h}:{i}')}}</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="repairButton(item)"><i class="el-icon-setting"></i>维修</p>
+          <p></p>
           <p @click="delHardware(item)"><i class="el-icon-delete"></i>删除</p>
         </div>
       </div>
@@ -74,7 +98,7 @@
     </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>
+        <p class="for-title-p">{{subjectData.room}}-{{item.type.name}}传感器{{index+1}}<span style="color:#666;">{{item.repairType?'(维修)':''}}</span></p>
         <div class="for-text-box">
           <p>设备编号:</p>
           <el-tooltip class="item" effect="dark" :content="item.relayCode" placement="top">
@@ -85,9 +109,17 @@
           <p>设备路由:</p>
           <p>{{item.bit}}</p>
         </div>
+        <div class="for-text-box">
+          <p>绑定时间:</p>
+          <el-tooltip class="item" effect="dark" :content="item.createTime" placement="top">
+            <p>{{parseTime(item.createTime,'{y}-{m}-{d} {h}:{i}')}}</p>
+          </el-tooltip>
+        </div>
         <div class="for-button-box">
           <p @click="editData(7,item)"><i class="el-icon-edit-outline"></i>编辑</p>
           <p></p>
+          <p @click="repairButton(item)"><i class="el-icon-setting"></i>维修</p>
+          <p></p>
           <p @click="delHardwareTwo(item)"><i class="el-icon-delete"></i>删除</p>
         </div>
       </div>
@@ -98,40 +130,52 @@
     </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>
+        <p class="for-title-p">{{subjectData.room}}-{{item.type.name}}{{index+1}}<span style="color:#666;">{{item.repairType?'(维修)':''}}</span></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-text-box">
+          <p>绑定时间:</p>
+          <el-tooltip class="item" effect="dark" :content="item.createTime" placement="top">
+            <p>{{parseTime(item.createTime,'{y}-{m}-{d} {h}:{i}')}}</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="repairButton(item)"><i class="el-icon-setting"></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>
+      <p class="add-for-p" @click="addData(4)"><i class="el-icon-plus"></i>添加摄像头</p>
     </div>
     <div class="title-box" v-if="subjectData.hardwareType==2">
       <p class="left-title">电子信息牌</p>
     </div>
     <div class="for-max-box" v-if="subjectData.hardwareType==2">
       <div class="for-big-box" v-for="(item,index) in listXxp" :key="index">
-        <p class="for-title-p">{{subjectData.room}}-{{item.cardName}}{{index+1}}</p>
+        <p class="for-title-p">{{subjectData.room}}-{{item.cardName}}{{index+1}}<span style="color:#666;">{{item.repairType?'(维修)':''}}</span></p>
         <div class="for-text-box">
           <p>设备编号:</p>
           <el-tooltip class="item" effect="dark" :content="item.cardNum" placement="top">
             <p>{{item.cardNum}}</p>
           </el-tooltip>
         </div>
+        <div class="for-text-box">
+          <p>绑定时间:</p>
+          <el-tooltip class="item" effect="dark" :content="item.createTime" placement="top">
+            <p>{{parseTime(item.createTime,'{y}-{m}-{d} {h}:{i}')}}</p>
+          </el-tooltip>
+        </div>
         <div class="for-button-box">
           <p @click="editData('editSign',item)"><i class="el-icon-edit-outline"></i>编辑</p>
           <p></p>
+          <p @click="repairButton(item)"><i class="el-icon-setting"></i>维修</p>
+          <p></p>
           <p @click="delSign(item)"><i class="el-icon-delete"></i>删除</p>
         </div>
       </div>
@@ -1063,7 +1107,20 @@ export default {
       this.addType = true;
       this.upType = type;
     },
-
+    repairButton(item){
+      this.$confirm('是否提交维修申请?', "警告", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(() => {
+        //  确定
+        item.repairType = true;
+        this.msgSuccess('操作成功')
+        this.$forceUpdate();
+      }).catch(function() {
+        //  取消
+      });
+    },
     //获取列表
     listBySubjectId(){
       console.log(this.subjectData)
@@ -1139,7 +1196,7 @@ export default {
       display: inline-block;
       overflow: hidden;
       width:280px;
-      min-height:130px;
+      min-height:158px;
       padding-bottom:10px;
       border-radius: 6px;
       margin:0 20px 20px 0;
@@ -1162,13 +1219,14 @@ export default {
         p{
           font-size:14px;
           line-height:30px;
-          flex:1;
+          width:100px;
         }
         p:nth-child(1){
           color:#333;
           text-align: left;
         }
         p:nth-child(2){
+          flex:1;
           color:#999;
           text-align: right;
           overflow:hidden;
@@ -1203,6 +1261,20 @@ export default {
           flex:1;
           cursor: pointer;
           i{
+            color:#1d953f;
+            margin-right:10px;
+          }
+        }
+        p:nth-child(4){
+          width:2px;
+          height:14px;
+          margin:6px 0;
+          background: #CCCCCC;
+        }
+        p:nth-child(5){
+          flex:1;
+          cursor: pointer;
+          i{
             color:#ff6868;
             margin-right:10px;
           }
@@ -1214,7 +1286,7 @@ export default {
       display: inline-block;
       overflow: hidden;
       width:280px;
-      min-height:158px;
+      min-height:188px;
       padding-bottom:10px;
       border-radius: 6px;
       margin:0 20px 20px 0;
@@ -1237,7 +1309,7 @@ export default {
         p{
           font-size:14px;
           line-height:30px;
-          flex:1;
+          width:100px;
         }
         p:nth-child(1){
           text-align: left;
@@ -1249,6 +1321,7 @@ export default {
           overflow:hidden;
           text-overflow:ellipsis;
           white-space:nowrap;
+          flex:1;
         }
       }
       .for-button-box{
@@ -1278,6 +1351,20 @@ export default {
           flex:1;
           cursor: pointer;
           i{
+            color:#1d953f;
+            margin-right:10px;
+          }
+        }
+        p:nth-child(4){
+          width:2px;
+          height:14px;
+          margin:6px 0;
+          background: #CCCCCC;
+        }
+        p:nth-child(5){
+          flex:1;
+          cursor: pointer;
+          i{
             color:#ff6868;
             margin-right:10px;
           }
@@ -1290,8 +1377,8 @@ export default {
       display: inline-block;
       overflow: hidden;
       width:280px;
-      height:130px;
-      line-height:130px;
+      height:158px;
+      line-height:158px;
       text-align: center;
       border-radius: 6px;
       color:#999999;
@@ -1307,8 +1394,8 @@ export default {
       display: inline-block;
       overflow: hidden;
       width:280px;
-      height:158px;
-      line-height:158px;
+      height:188px;
+      line-height:188px;
       text-align: center;
       border-radius: 6px;
       color:#999999;

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

@@ -96,7 +96,8 @@
                       <p class="table-button-p">更多>></p>
                       <el-dropdown-menu slot="dropdown" style="margin:0!important;">
                         <el-dropdown-item style="height:36px;line-height:36px;width:90px;text-align: center" command="1" v-hasPermiAnd="['laboratory:subject:query','laboratory:subject:edit']">关联配置</el-dropdown-item>
-                        <el-dropdown-item v-if="versionField() != 'xiBeiNongLinDaXue'" style="height:36px;line-height:36px;width:90px;text-align: center" command="2">物联配置</el-dropdown-item>
+                        <el-dropdown-item v-if="versionField() != 'xiBeiNongLinDaXue'" style="height:36px;line-height:36px;width:90px;text-align: center" command="2">设备管理</el-dropdown-item>
+                        <el-dropdown-item v-if="versionField() != 'xiBeiNongLinDaXue'" style="height:36px;line-height:36px;width:90px;text-align: center" command="6">仪器管理</el-dropdown-item>
                         <el-dropdown-item v-if="versionField() != 'xiBeiNongLinDaXue'" style="height:36px;line-height:36px;width:90px;text-align: center" command="3" v-hasPermi="['laboratory:subjectmaterial:add']">准入配置</el-dropdown-item>
                         <el-dropdown-item style="height:36px;line-height:36px;width:90px;text-align: center" command="4" v-hasPermiAnd="['laboratory:subject:query','laboratory:subject:edit']">编辑</el-dropdown-item>
                         <el-dropdown-item style="height:36px;line-height:36px;width:90px;text-align: center" command="5">删除</el-dropdown-item>
@@ -336,6 +337,7 @@
     <admission-configuration v-if="pageType == 4" :subjectData="subjectData"></admission-configuration>
     <association-configuration v-if="pageType == 5" :subjectData="subjectData"></association-configuration>
     <info-page v-if="pageType == 6" :newData="newData"></info-page>
+    <instrument v-if="pageType == 9" :newData="newData"></instrument>
     <!--播放文字窗口-->
     <el-dialog title="广播系统" :visible.sync="open" width="500px" append-to-body>
       <el-form ref="form" :model="form" :rules="rules" label-width="80px">
@@ -402,6 +404,7 @@ import { listData} from "@/api/system/dict/data";
 import { listDepartments } from "@/api/system/dept";
 import addSubject from "./addSubject.vue";
 import deviceList from "./deviceList.vue";
+import instrument from "./instrument.vue";
 import admissionConfiguration from "./admissionConfiguration.vue";
 import associationConfiguration from "./associationConfiguration.vue";
 import infoPage from "./infoPage.vue";
@@ -426,7 +429,8 @@ export default {
     deviceList,
     admissionConfiguration,
     associationConfiguration,
-    infoPage
+    infoPage,
+    instrument
   },
   data(){
     return{
@@ -707,6 +711,9 @@ export default {
         }else if(type == 7){
           this.subjectInfoTwo(row);
           // this.$set(this,'subjectData',row)
+        }else if(type == 9){
+          this.pageType = type;
+          this.$set(this,'newData',row);
         }
       }
     },
@@ -1060,6 +1067,10 @@ export default {
           console.log('删除');
           this.delSubject(row);
           break;
+        case "6":
+          console.log('仪器管理');
+          this.clickPage(9,row);
+          break;
         default:
           break;
       }

+ 367 - 0
src/views/comprehensive/laboratoryManagement/subject/instrument.vue

@@ -0,0 +1,367 @@
+<template>
+  <div class="instrument scrollbar-box">
+    <div class="title-box">
+      <p></p>
+      <p class="reset-button-one" @click="backPage">返回</p>
+    </div>
+    <div class="for-max-box" v-for="(item,index) in instrumentList" :key="index">
+      <p class="for-name-p">{{item.equipmentName}}</p>
+      <div class="for-big-box">
+        <p class="for-img el-icon-data-line"></p>
+        <div class="for-right-box">
+          <div class="for-text-box">
+            <p>负责人:</p>
+            <p>{{item.userName}}</p>
+          </div>
+          <div class="for-text-box">
+            <p>仪器编号:</p>
+            <p>{{item.equipmentNum}}</p>
+          </div>
+          <div class="for-text-box">
+            <p>仪器型号:</p>
+            <p>{{item.modelNumber}}</p>
+          </div>
+        </div>
+      </div>
+      <div class="for-button-box">
+        <p @click="clickButton(2,item,index)">编辑</p>
+        <p @click="clickButton(3,item,index)">查看</p>
+        <p @click="clickButton(4,item,index)">删除</p>
+      </div>
+    </div>
+    <div class="add-max-box" @click="clickButton(1)">
+      <i class="el-icon-plus"></i> 添加仪器
+    </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="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>
+  </div>
+</template>
+<script>
+  export default {
+    name: 'instrument',
+    props:{
+      newData:{},
+    },
+    data(){
+      return{
+        // 仪器类型
+        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,
+          },
+        ],
+        //弹窗
+        dialogType:false,
+        dialogForm:{},
+        dialogLook:false,
+        dialogIndex:null,
+        dialogTitle:"",
+        // 表单校验
+        rules: {
+          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(){
+
+    },
+    mounted(){
+      this.getVUEX();
+    },
+    methods:{
+      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);
+            self.setVUEX();
+          }).catch(function() {
+            //  取消
+          });
+        }
+      },
+      //本地数据存储
+      setVUEX(){
+        let self = this;
+        let num = 0;
+        for(let i=0;i<self.dataVUEX.length;i++){
+          if(self.newData.id == self.dataVUEX[i].id){
+            self.dataVUEX[i] = {
+              id:self.newData.id,
+              list:self.instrumentList
+            }
+            num++
+          }
+        }
+        if(num == 0){
+          this.dataVUEX.push({
+            id:self.newData.id,
+            list:self.instrumentList
+          })
+        }
+        this.$store.dispatch("setInstrument", this.dataVUEX);
+      },
+      //本地数据读取
+      getVUEX(){
+        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(this,'dataVUEX',list);
+
+      },
+      //返回上一页
+      backPage(){
+        this.$parent.clickPage(1);
+      },
+      //关闭
+      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.setVUEX();
+            this.msgSuccess('操作成功')
+            this.$set(this,'dialogType',false);
+          }
+        })
+      },
+    },
+
+  }
+</script>
+<style scoped lang="scss">
+  .instrument{
+    flex:1;
+    border-radius:10px!important;
+    margin:5px 20px 20px 10px!important;
+    box-shadow: 0 0 8px 1px rgba(0, 0, 0, 0.1) !important;
+    padding:20px;
+    font-weight:500;
+    .title-box{
+      display: flex;
+      p:nth-child(1){
+        flex:1;
+      }
+      p:nth-child(2){
+        margin:0 0 20px 0;
+      }
+    }
+    .for-max-box{
+      width:350px;
+      height:190px;
+      border:1px solid #dedede;
+      border-radius:4px;
+      margin:0 20px 20px 0;
+      display: inline-block;
+      overflow: hidden;
+      .for-name-p{
+        font-size:16px;
+        padding:0 20px;
+        height:40px;
+        line-height:40px;
+        display:block;
+        overflow:hidden;
+        text-overflow:ellipsis;
+        white-space:nowrap;
+        border-bottom:1px solid #dedede;
+      }
+      .for-big-box{
+        display: flex;
+        .for-img{
+          width:70px;
+          height:70px;
+          line-height:70px;
+          text-align: center;
+          font-size:60px;
+          color:#666;
+          margin:20px 30px;
+        }
+        .for-right-box{
+          padding-top:15px;
+          .for-text-box{
+            display: flex;
+            p{
+              font-size:14px;
+              line-height:25px;
+            }
+            p:nth-child(1){
+              width:80px;
+              text-align: right;
+            }
+            p:nth-child(2){
+              width:130px;
+              display:block;
+              overflow:hidden;
+              text-overflow:ellipsis;
+              white-space:nowrap;
+            }
+          }
+        }
+      }
+      .for-button-box{
+        border-top:1px solid #dedede;
+        display: flex;
+        p{
+          line-height:37px;
+          font-size:14px;
+          flex:1;
+          text-align: center;
+          cursor: pointer;
+        }
+        p:hover{
+          color:#fff;
+          background-color: #00a0e9;
+        }
+      }
+    }
+    .add-max-box{
+      display: inline-block;
+      overflow: hidden;
+      margin:0 20px 20px 0;
+      width:350px;
+      height:190px;
+      line-height: 190px;
+      text-align: center;
+      border:1px solid #dedede;
+      cursor: pointer;
+      border-radius:4px;
+    }
+  }
+</style>

+ 2 - 2
src/views/login.vue

@@ -152,7 +152,7 @@ export default {
           //摄像头地址ip段
           localStorage.setItem('ipIdentify',response.data.ipIdentify)
           //摄像头访问地址
-          localStorage.setItem('cameraUrl','wss://'+response.data.cameraExtranetUrl)
+          localStorage.setItem('cameraUrl','ws://'+response.data.cameraExtranetUrl)
           //MQTT地址
           localStorage.setItem('mqttUrl','wss://'+Decrypt(response.data.mqttExtranetUrl))
           //MQTT账号
@@ -169,7 +169,7 @@ export default {
           //摄像头地址ip段
           localStorage.setItem('ipIdentify',response.data.ipIdentify)
           //摄像头访问地址
-          localStorage.setItem('cameraUrl','wss://'+response.data.cameraIntranetUrl)
+          localStorage.setItem('cameraUrl','ws://'+response.data.cameraIntranetUrl)
           //MQTT地址
           localStorage.setItem('mqttUrl','ws://'+Decrypt(response.data.mqttIntranetUrl))
           //MQTT账号