浏览代码

门禁增加支持海康威视设备。

zhengqiang 4 年之前
父节点
当前提交
28eaf62578
共有 3 个文件被更改,包括 479 次插入100 次删除
  1. 45 10
      src/api/base/deviceInfo.js
  2. 123 30
      src/views/base/deviceInfo-detail.vue
  3. 311 60
      src/views/base/deviceInfo-list.vue

+ 45 - 10
src/api/base/deviceInfo.js

@@ -49,6 +49,10 @@ function list() {
   return request.post(constant.serverUrl + "/base/deviceInfo/list");
 }
 
+function allDevicelist() {
+  return request.post(constant.serverUrl + "/base/deviceInfo/allDevicelist");
+}
+
 function getDeviceRule(formData) {
   return request.post(constant.serverUrl + "/base/deviceInfo/getDeviceRule", formData);
 }
@@ -56,41 +60,72 @@ function getDeviceRule(formData) {
 function saveDeviceRule(formData) {
   return request.post(constant.serverUrl + "/base/deviceInfo/saveDeviceRule", formData);
 }
+
 function query(formData) {
   return request.post(constant.serverUrl + "/base/deviceInfo/query", formData);
 }
 
+function bindDeviceToPerson(formData) {
+  return request.post(constant.serverUrl + "/base/deviceInfo/bindDeviceToPerson", formData);
+}
+
+function queryBindDeviceProgress(deviceId) {
+  return request.get(constant.serverUrl + `/base/deviceInfo/queryBindDeviceProgress?deviceId=${deviceId}`);
+}
+
 function reboot(formData) {
   return request.post(constant.serverUrl + "/base/deviceInfo/reboot", formData);
 }
 
+function channelList() {
+  return request.get(constant.serverUrl + "/base/deviceInfo/channelList");
+}
+
 function personLibList(deviceNo) {
   return request.get(constant.serverUrl + `/devOps/queryPeopleLib?deviceNo=${deviceNo}`);
 }
 
 function personList(formData) {
-  return request.post(constant.serverUrl + "/devOps/queryPeople",formData);
+  return request.post(constant.serverUrl + "/devOps/queryPeople", formData);
 }
 
-function deletePerson(deviceNo,libId,personId){
+function deletePerson(deviceNo, libId, personId) {
   var formData = new FormData();
-  formData.append("deviceNo",deviceNo);
-  formData.append("libId",libId);
-  formData.append("personId",personId);
+  formData.append("deviceNo", deviceNo);
+  formData.append("libId", libId);
+  formData.append("personId", personId);
 
-  return request.post(constant.serverUrl + "/devOps/deletePeople",formData);
+  return request.post(constant.serverUrl + "/devOps/deletePeople", formData);
 }
 
-function channelList() {
-  return request.get(constant.serverUrl + "/base/deviceInfo/channelList");
+function batchDeletePerson(deviceNo, libId,idList) {
+  var formData = new FormData();
+  formData.append("deviceNo", deviceNo);
+  formData.append("libId", libId);
+  formData.append("idList", idList);
+
+  return request.post(constant.serverUrl + "/devOps/batchDeletePeople", formData);
+}
+
+function existPersonImageInDevice(formData) {
+  return request.post(constant.serverUrl + "/base/deviceInfo/existPersonImageInDevice", formData);
 }
 
 function updateDeviceData(formData) {
   return request.post(constant.serverUrl + "/base/deviceInfo/updateDeviceData", formData);
 }
 
+function queryBindCompanyList(formData) {
+  return request.post(constant.serverUrl + "/base/deviceInfo/queryBindCompanyList", formData);
+}
+
+function unbindCompany(formData) {
+  return request.post(constant.serverUrl + "/base/deviceInfo/unbindCompany", formData);
+}
+
 export default {
   create, edit, add, update, remove, batchRemove, pageList, getByIpAddressAndPort, list,
-  getDeviceRule, saveDeviceRule, query, reboot, personLibList,personList,deletePerson,
-  channelList,updateDeviceData
+  getDeviceRule, saveDeviceRule, query, bindDeviceToPerson, queryBindDeviceProgress, reboot,
+  channelList, personLibList, personList, deletePerson, existPersonImageInDevice,
+  updateDeviceData,allDevicelist,batchDeletePerson,queryBindCompanyList,unbindCompany
 }

+ 123 - 30
src/views/base/deviceInfo-detail.vue

@@ -34,14 +34,13 @@
               <el-select-tree
                 :props="props"
                 :options="companyResult"
-                :value="formModel.companyId"
-                @getValue="getSelectedValue($event)"
+                v-model="formModel.companyId"
                 height="200"
               ></el-select-tree>&nbsp;
             </el-form-item>
           </el-col>
         </el-row>
-        <el-row>
+        <!-- <el-row>
           <el-col :span="12">
             <el-form-item label="ip地址" prop="ipAddress">
               <el-input
@@ -62,7 +61,7 @@
               ></el-input>
             </el-form-item>
           </el-col>
-        </el-row>
+        </el-row> -->
         <el-row>
           <el-col :span="12">
             <el-form-item label="设备编号" prop="deviceNo">
@@ -77,20 +76,53 @@
         </el-row>
         <el-row>
           <el-col :span="12">
-            <el-form-item label="类型" prop="type">
-              <el-select v-model="formModel.type" filterable placeholder="请选择" style="width:90%">
+            <el-form-item label="模块类型" prop="type">
+              <el-select v-model="formModel.type" filterable placeholder="请选择" style="width:80%">
                 <el-option
-                  v-for="result in typeData"
+                  v-for="result in moduleTypeList"
                   :key="result.id"
                   :label="result.name"
                   :value="result.value"
                 ></el-option>
               </el-select>
             </el-form-item>
+          </el-col>          
+          <el-col :span="12">
+            <el-form-item label="设备类型" prop="deviceType">
+              <el-select v-model="formModel.deviceType" style="width:80%">
+                <el-option v-for="(item,index) in deviceTypeList" 
+                :label="item.name" :value="item.value" :key="index"></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="12">
+        <el-form-item label="立柱颜色" prop="columnColor">
+          <el-select v-model="formModel.columnColor" style="width:80%">
+            <el-option v-for="(item,index) in columnColorList" 
+            :label="item.name" :value="item.value" :key="index"></el-option>
+          </el-select>
+        </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="立柱高度" prop="columnHeight">
+              <el-select v-model="formModel.columnHeight" style="width:80%">
+                <el-option v-for="(item,index) in columnHeightList" 
+                :label="item.name" :value="item.value" :key="index"></el-option>
+              </el-select>
+            </el-form-item>
           </el-col>
-           <el-col :span="12">
+        </el-row>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="内部编号" prop="code">
+              <el-input type="text" v-model="formModel.code" style="width:80%"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
             <el-form-item label="场景值" prop="type">
-              <el-select v-model="formModel.deviceAddress" filterable placeholder="请选择" style="width:90%">
+              <el-select v-model="formModel.deviceAddress" filterable placeholder="请选择" style="width:80%">
                 <el-option
                   v-for="result in deviceAddressData"
                   :key="result.id"
@@ -102,6 +134,16 @@
           </el-col>
         </el-row>
         <el-row>
+          <el-col :span="12">
+            <el-form-item label="设备厂家" prop="manufacturer">
+              <el-select v-model="formModel.manufacturer" style="width:80%">
+                <el-option v-for="(item,index) in manufacturerList" 
+                :label="item.name" :value="item.value" :key="index"></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <!-- <el-row>
           <el-col :span="12">
             <el-form-item label="开锁密码" prop="unlockPassword">
               <el-input v-model="formModel.unlockPassword" placeholder="请输入开锁密码" style="width:80%"></el-input>
@@ -112,7 +154,7 @@
               <el-input v-model="formModel.codeAddress" placeholder="请输入二维码地址" style="width:80%"></el-input>
             </el-form-item>
           </el-col>
-        </el-row>
+        </el-row> -->
       </el-form>
     </div>
     <span slot="footer" class="dialog-footer">
@@ -129,7 +171,7 @@ import dataDictionaryApi from "@/api/sys/dataDictionary";
 import SelectTree from "@/components/SelectTree";
 
 export default {
-  props: ["businessKey", "title", "typeData", "companyResult"],
+  props: ["businessKey", "title", "companyResult"],
   data() {
     return {
       formModel: {},
@@ -137,24 +179,25 @@ export default {
         aliasName: [
           { required: true, message: "设备别名不能为空", trigger: "blur" }
         ],
-        isOnline: [
-          {
-            required: true,
-            message: "运行状态不能为空",
-            trigger: "blur"
-          }
-        ],
+        // isOnline: [
+        //   {
+        //     required: true,
+        //     message: "运行状态不能为空",
+        //     trigger: "blur"
+        //   }
+        // ],
         // unlockPassword: [
         //   { required: true, message: "开锁密码不能为空", trigger: "blur" }
         // ],
         // codeAddress: [
         //   { required: true, message: "二维码地址不能为空", trigger: "blur" }
         // ],
-        ipAddress: [
-          { required: true, message: "ip地址不能为空", trigger: "blur" }
-        ],
-        port: [{ required: true, message: "端口不能为空", trigger: "blur" }],
-        type: [{ required: true, message: "类型不能为空", trigger: "blur" }]
+        // ipAddress: [
+        //   { required: true, message: "ip地址不能为空", trigger: "blur" }
+        // ],
+        // port: [{ required: true, message: "端口不能为空", trigger: "blur" }],
+        type: [{ required: true, message: "模块类型不能为空", trigger: "blur" }],
+        manufacturer: [{ required: true, message: "设备厂家不能为空", trigger: "blur" }]
       },
       showDialog: true,
       loading: false,
@@ -166,23 +209,61 @@ export default {
         value: "id",
         label: "name",
         children: "children"
-      }
+      },
+      deviceAddressData:[],      
+      columnColorList: [],
+      columnHeightList: [],
+      moduleTypeList: [],
+      deviceTypeList: [],
+      manufacturerList: []
     };
   },
   created() {
     this.loadTree();
 
-    var formData = new FormData();
-    formData.append("catalogName", "设备场景值");
-    dataDictionaryApi.findByCatalogName(formData).then(response => {
+    dataDictionaryApi.findByCatalogName({
+      "catalogName" : "设备场景值"
+    }).then(response => {
       var jsonData = response.data;
       this.deviceAddressData = jsonData.data;
     });
+
+    dataDictionaryApi.findByCatalogName({
+      "catalogName" : "立柱颜色"
+    }).then(response => {
+      var jsonData = response.data;
+      this.columnColorList = jsonData.data;
+    });
+
+    dataDictionaryApi.findByCatalogName({
+      "catalogName" : "立柱高度"
+    }).then(response => {
+      var jsonData = response.data;
+      this.columnHeightList = jsonData.data;
+    });
+
+    dataDictionaryApi.findByCatalogName({
+      "catalogName" : "模块类型"
+    }).then(response => {
+      var jsonData = response.data;
+      this.moduleTypeList = jsonData.data;
+    });
+
+    dataDictionaryApi.findByCatalogName({
+      "catalogName" : "设备类型"
+    }).then(response => {
+      var jsonData = response.data;
+      this.deviceTypeList = jsonData.data;
+    });
+
+    dataDictionaryApi.findByCatalogName({
+      "catalogName" : "设备厂家"
+    }).then(response => {
+      var jsonData = response.data;
+      this.manufacturerList = jsonData.data;
+    });
   },
   methods: {
-    getSelectedValue(value) {
-      this.formModel.companyId = value;
-    },
     loadTree() {
       var formData = new FormData();
 
@@ -223,6 +304,8 @@ export default {
           (function() {
             var id = self.formModel.id;
 
+            self.loading = true;
+
             if (self.formModel.companyId == null) {
               self.formModel.companyId = "";
             }
@@ -233,6 +316,7 @@ export default {
               return deviceInfoApi.update(self.formModel);
             }
           })().then(function(response) {
+            self.loading = false;
             var jsonData = response.data;
 
             if (jsonData.result) {
@@ -280,6 +364,8 @@ export default {
   mounted: function() {
     var self = this;
     (function() {
+      self.loading = true;
+
       if (self.businessKey.length == 0) {
         return deviceInfoApi.create();
       } else {
@@ -292,6 +378,13 @@ export default {
 
         if (jsonData.result) {
           self.formModel = jsonData.data;
+
+          if (self.businessKey.length == 0){
+            self.formModel.columnColor="1";
+            // self.formModel.columnHeight="";
+            self.formModel.moduleType="2";
+            self.formModel.deviceType="1";
+          }
         } else {
           self.$message.error(jsonData.message + "");
         }

+ 311 - 60
src/views/base/deviceInfo-list.vue

@@ -3,7 +3,7 @@
     <el-breadcrumb separator=">">
       <el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>
       <el-breadcrumb-item>
-        <a href="#">系统管理</a>
+        <a href="#">基础信息</a>
       </el-breadcrumb-item>
       <el-breadcrumb-item>
         <a href="/deviceInfo">设备管理</a>
@@ -30,19 +30,55 @@
           ></el-option>
         </el-select>-->
         <el-select-tree
+          size="mini"
           :props="props"
           :options="companyResult"
-          :value="queryModel.companyId"
-          @getValue="getSelectedValue($event)"
+          v-model="queryModel.companyId"
           height="200"
         ></el-select-tree>&nbsp;
       </el-form-item>
+      <el-form-item label="关联单位" prop="companyName">
+        <el-input type="text" size="mini" v-model="queryModel.companyName"></el-input>
+      </el-form-item>
       <el-form-item label="设备编号" prop="deviceNo">
         <el-input type="text" size="mini" v-model="queryModel.deviceNo"></el-input>
       </el-form-item>
       <el-form-item label="设备别名" prop="aliasName">
         <el-input type="text" size="mini" v-model="queryModel.aliasName"></el-input>
       </el-form-item>
+      <el-form-item label="内部编号" prop="code">
+        <el-input type="text" size="mini" v-model="queryModel.code" style="width:100px;"></el-input>
+      </el-form-item>
+      <el-form-item label="立柱颜色" prop="columnColor">
+        <el-select v-model="queryModel.columnColor" size="mini" style="width:100px;" clearable>
+          <el-option v-for="(item,index) in columnColorList" 
+          :label="item.name" :value="item.value" :key="index"></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="立柱高度" prop="columnHeight">
+        <el-select v-model="queryModel.columnHeight" size="mini" style="width:100px;" clearable>
+          <el-option v-for="(item,index) in columnHeightList" 
+          :label="item.name" :value="item.value" :key="index"></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="模块类型" prop="type">
+        <el-select v-model="queryModel.type" size="mini" style="width:100px;" clearable>
+          <el-option v-for="(item,index) in moduleTypeList" 
+          :label="item.name" :value="item.value" :key="index"></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="设备类型" prop="deviceType">
+        <el-select v-model="queryModel.deviceType" size="mini" style="width:100px;" clearable>
+          <el-option v-for="(item,index) in deviceTypeList" 
+          :label="item.name" :value="item.value" :key="index"></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="设备厂家" prop="manufacturer">
+        <el-select v-model="queryModel.manufacturer" size="mini" style="width:100px;" clearable>
+          <el-option v-for="(item,index) in manufacturerList" 
+          :label="item.name" :value="item.value" :key="index"></el-option>
+        </el-select>
+      </el-form-item>
       <el-form-item>
         <el-button
           type="primary"
@@ -77,23 +113,29 @@
         icon="el-icon-search"
         @click="showChannelListModal = true"
       >设备连接列表</el-button>
+      <el-button type="primary" size="small" plain icon="el-icon-download" @click="exportXls()">导出</el-button>
     </el-row>
     <el-table
       ref="formTable"
       :data="tableData"
       v-loading="loading"
+      :element-loading-text="loadingText"
       stripe
       :height="tableHeight"
       @sort-change="sortChange"
       @selection-change="handleSelectionChange"
     >
       <el-table-column type="selection" width="55"></el-table-column>
-      <el-table-column prop="deviceNo" label="设备编号" width="200" fixed="left"></el-table-column>
       <el-table-column type="index" label="序号" :index="indexMethod" width="50"></el-table-column>
-      <el-table-column prop="companyName" label="单位" width="280" show-overflow-tooltip></el-table-column>
-
-      <el-table-column prop="aliasName" label="设备别名" width="250" show-overflow-tooltip></el-table-column>
-      <el-table-column prop="isOnline" label="运行状态" width="80">
+      <el-table-column prop="deviceNo" label="设备编号" width="200" sort-by="a.device_no"
+        sortable="custom"></el-table-column>
+      <el-table-column prop="code" label="内部编号" width="100" sort-by="a.code_"
+        sortable="custom"></el-table-column>
+      <el-table-column prop="companyName" label="单位" width="250" show-overflow-tooltip sort-by="b.name_"
+        sortable="custom"></el-table-column>
+      <el-table-column prop="aliasName" label="设备别名" width="200" show-overflow-tooltip></el-table-column>
+      <el-table-column prop="isOnline" label="运行状态" width="100" sort-by="a.is_online"
+        sortable="custom">
         <template slot-scope="{row}">
           <div
             v-if="row.isOnline"
@@ -105,17 +147,27 @@
           ></div>
         </template>
       </el-table-column>
-      <el-table-column prop="ipAddress" label="ip地址" width="150"></el-table-column>
-      <el-table-column prop="port" label="端口" width="80"></el-table-column>
+      <!-- <el-table-column prop="ipAddress" label="ip地址" width="150"></el-table-column>
+      <el-table-column prop="port" label="端口" width="80"></el-table-column> -->
       <!-- <el-table-column prop="unlockPassword" label="开锁密码" width="150"></el-table-column>
       <el-table-column prop="codeAddress" label="二维码地址" width="180"></el-table-column>-->
-      <el-table-column prop="typeN" label="类型" width="80"></el-table-column>
-      <el-table-column label="照片库">
+      <el-table-column prop="typeN" label="模块类型"></el-table-column>
+      <el-table-column prop="deviceTypeN" label="设备类型"></el-table-column>
+      <el-table-column prop="columnColorN" label="立柱颜色"></el-table-column>
+      <el-table-column prop="columnHeightN" label="立柱高度"></el-table-column>
+      <el-table-column prop="manufacturerN" label="设备厂家"></el-table-column>
+      <el-table-column prop="heartbeatUpdateTime" sort-by="a.heartbeat_update_time"
+        sortable="custom" label="心跳更新时间" width="160"></el-table-column>
+      <el-table-column label="照片库" width="120">
         <template slot-scope="{row}">
-          <el-link type="primary" @click="handleViewPersonLib(row)">查看</el-link>
+          <el-link 
+          v-if="row.manufacturer=='1'"
+          type="primary" @click="handleViewPersonLib(row)" icon="el-icon-view" :disabled="!row.isOnline">查看</el-link>
+          &nbsp;
+          <el-link type="primary" @click="handleExistPersonImageInDevice(row)" icon="el-icon-refresh" :disabled="!row.isOnline">同步</el-link>
         </template>
       </el-table-column>
-      <el-table-column label="操作" width="250">
+      <el-table-column label="操作" width="250" fixed="right">
         <template slot-scope="{row}">
           <el-row>
             <el-col :span="8">
@@ -127,12 +179,15 @@
             <el-col :span="8">
               <el-link type="primary" @click="handlePoint(row)">定位</el-link>
             </el-col>
+            <!-- <el-col :span="6">
+              <el-link type="primary" @click="handleBindCompany(row)">单位关联</el-link>
+            </el-col> -->
           </el-row>
           <el-row>
             <el-col :span="8">
               <el-link type="primary" @click="handleBindPerson(row)">用户关联</el-link>
             </el-col>
-            <el-col :span="8">
+            <el-col :span="8" v-if="row.manufacturer=='1'">
               <el-link type="primary" @click="handleEditRule(row)">验证规则</el-link>
             </el-col>
             <el-col :span="8">
@@ -154,7 +209,6 @@
       v-if="showModal"
       :businessKey="businessKey"
       :title="modalTitle"
-      :typeData="typeData"
       :companyResult="companyResult"
       @close="onDetailModalClose"
     ></deviceInfo-detail>
@@ -174,6 +228,17 @@
         :label-width="'100px'"
         style="text-align:left;"
       >
+        <el-row>
+          <el-col>
+            <el-form-item label="开门模式">
+              <el-radio-group v-model="ruleModel.mode">
+                <el-radio :label="0">校验通过</el-radio>
+                <el-radio :label="1">刷脸</el-radio>
+                <el-radio :label="2">远程</el-radio>
+              </el-radio-group>
+            </el-form-item>
+          </el-col>
+        </el-row>
         <el-row>
           <el-col>
             <el-form-item label="安全帽">
@@ -287,21 +352,19 @@
       v-if="showMapModal"
       :businessKey="businessKey"
       :title="modalTitle"
-      :typeData="typeData"
-      :companyResult="companyResult"
       @close="onDetailModalClose"
     ></deviceInfo-map>
+    <deviceInfo-channelList
+      v-if="showChannelListModal"
+      :companyResult="companyResult"
+      @close="onDetailModalClose"
+    ></deviceInfo-channelList>
     <devicePhoto-list 
       :device="selectedDevice"
       v-if="showPhotoListModal"
       @close="onDevicePhotoListClose"
       >
     </devicePhoto-list>
-    <deviceInfo-channelList
-      v-if="showChannelListModal"
-      :companyResult="companyResult"
-      @close="onDetailModalClose"
-    ></deviceInfo-channelList>
   </div>
 </template>
 <script>
@@ -314,12 +377,12 @@ import deviceInfoApi from "@/api/base/deviceInfo";
 import dataDictionaryApi from "@/api/sys/dataDictionary";
 import companyInfoApi from "@/api/base/companyInfo";
 import SelectTree from "@/components/SelectTree";
-
+import pageUtil from "@/utils/page";
 import NProgress from "nprogress"; // progress bar
 import "nprogress/nprogress.css"; // progress bar style
 
 export default {
-  name: "BaseDeviceInfoList",
+  name: 'BaseDeviceInfoList',
   data() {
     var self = this;
 
@@ -334,9 +397,16 @@ export default {
       queryModel: {
         deviceNo: "",
         aliasName: "",
-        companyId: ""
+        companyId: "",
+        companyName: "",
+        code: "",
+        columnColor: "",
+        columnHeight: "",
+        moduleType: "",
+        deviceType: ""
       },
       loading: false,
+      loadingText: "加载中",
       tableData: [],
       pageIndex: 1,
       pageSize: 10,
@@ -349,14 +419,12 @@ export default {
       showModal: false,
       modalTitle: "",
       businessKey: "",
-      typeData: [],
       companyResult: [],
       tableHeight: 400,
       dialogVisible: false,
       ruleDeviceId: "",
-      // ruleList: [],
-      // temperatureRule: "",
       ruleModel: {
+        mode: "",
         needCap: "",
         needMask: "",
         measureTemperature: "",
@@ -374,17 +442,49 @@ export default {
         children: "children"
       },
       showMapModal: false,
-      showPhotoListModal: false,
       showChannelListModal: false,
-      selectedDevice: {}
+      showPhotoListModal: false,
+      selectedDevice: {},
+      columnColorList: [],
+      columnHeightList: [],
+      moduleTypeList: [],
+      deviceTypeList: [],
+      manufacturerList: []
     };
   },
   created() {
-    var formData = new FormData();
-    formData.append("catalogName", "设备类型");
-    dataDictionaryApi.findByCatalogName(formData).then(response => {
+    dataDictionaryApi.findByCatalogName({
+      "catalogName" : "立柱颜色"
+    }).then(response => {
       var jsonData = response.data;
-      this.typeData = jsonData.data;
+      this.columnColorList = jsonData.data;
+    });
+
+    dataDictionaryApi.findByCatalogName({
+      "catalogName" : "立柱高度"
+    }).then(response => {
+      var jsonData = response.data;
+      this.columnHeightList = jsonData.data;
+    });
+    
+    dataDictionaryApi.findByCatalogName({"catalogName": "模块类型"})
+    .then(response => {
+      var jsonData = response.data;
+      this.moduleTypeList = jsonData.data;
+    });
+
+    dataDictionaryApi.findByCatalogName({
+      "catalogName" : "设备类型"
+    }).then(response => {
+      var jsonData = response.data;
+      this.deviceTypeList = jsonData.data;
+    });
+
+    dataDictionaryApi.findByCatalogName({
+      "catalogName" : "设备厂家"
+    }).then(response => {
+      var jsonData = response.data;
+      this.manufacturerList = jsonData.data;
     });
 
     var self = this;
@@ -401,9 +501,6 @@ export default {
     indexMethod(index) {
       return (this.pageIndex - 1) * this.pageSize + (index + 1);
     },
-    getSelectedValue(value) {
-      this.queryModel.companyId = value;
-    },
     loadTree() {
       var formData = new FormData();
 
@@ -433,24 +530,60 @@ export default {
         }
       });
     },
-    changePage(pageIndex) {
+    changePage(pageIndex,exportFlag) {
       var self = this;
 
       self.loading = true;
+      self.loadingText = "加载中...";
 
       self.pageIndex = pageIndex;
       var formData = new FormData();
 
       formData.append("pageIndex", self.pageIndex);
-      formData.append("pageSize", self.pageSize);
+
+      if(exportFlag!=null) {        
+        formData.append("exportFlag", 1);
+        formData.append("pageSize", 10000);
+      }
+      else{
+        formData.append("pageSize", self.pageSize);
+      }
 
       formData.append("deviceNo", self.queryModel.deviceNo);
       formData.append("aliasName", self.queryModel.aliasName);
-      var companyId = self.queryModel.companyId;
-      if (companyId == null) {
-        companyId = "";
+
+      if (self.queryModel.companyId != null) {
+        formData.append("companyId", self.queryModel.companyId);
+      }
+
+      if (self.queryModel.companyName != null) {
+        formData.append("companyName", self.queryModel.companyName);
+      }
+
+      if (self.queryModel.code != null) {
+        formData.append("code", self.queryModel.code);
+      }
+
+      if (self.queryModel.columnColor != null) {
+        formData.append("columnColor", self.queryModel.columnColor);
+      }
+
+      if (self.queryModel.columnHeight != null) {
+        formData.append("columnHeight", self.queryModel.columnHeight);
+      }
+
+      if (self.queryModel.moduleType != null) {
+        formData.append("moduleType", self.queryModel.moduleType);
+      }
+
+      if (self.queryModel.deviceType != null) {
+        formData.append("deviceType", self.queryModel.deviceType);
+      }
+
+      if (self.queryModel.manufacturer != null) {
+        formData.append("manufacturer", self.queryModel.manufacturer);
       }
-      formData.append("companyId", companyId);
+
 
       if (this.field != null) {
         formData.append("field", this.field);
@@ -464,29 +597,44 @@ export default {
         .pageList(formData)
         .then(function(response) {
           self.loading = false;
+          var jsonData = response.data;
+          
+          if(jsonData.result) {
+            if(exportFlag){
+              //导出
+              self.$message({
+                showClose: true,
+                type: "success",
+                message: `报表已生成,<a href="${jsonData.data}">请点击链接下载</a>`,
+                dangerouslyUseHTMLString: true,
+                duration: 30000
+              });
+            }
+            else{
+              //分页查看
+              var page = jsonData.data;
 
-          var jsonData = response.data.data;
-
-          self.tableData = jsonData.data;
-          self.totalPages = jsonData.totalPages;
-          self.totalElements = jsonData.recordsTotal;
-
-          //45为分页栏的高度
-          //页面高度-列表上面的高度-分页栏高度
-          self.tableHeight =
-            window.innerHeight - self.$refs.formTable.$el.offsetTop - 100;
+              self.tableData = page.data;
+              self.totalPages = page.totalPages;
+              self.totalElements = page.recordsTotal;
+            }
+          }
+          else{
+            self.$message.warning(jsonData.message + "");
+          }
         })
         .catch(error => {
           self.loading = false;
-          // self.$message.error(error + "");
         });
     },
     pageSizeChange(pageSize) {
       this.pageSize = pageSize;
     },
     sortChange(data) {
-      this.field = data.column.field;
-      this.direction = data.order;
+      console.log(data);
+
+      this.field = data.column.sortBy;
+      this.direction = data.order == "ascending" ? "asc" : "desc";
 
       this.changePage(this.pageIndex);
     },
@@ -568,6 +716,15 @@ export default {
         this.changePage(this.pageIndex);
       }
     },
+    handleRestart(record) {
+      //重启
+    },
+    handleClear(record) {
+      //清楚人脸数据
+    },
+    handleQRcode(record) {
+      //二维码地址
+    },
     handleEditRule(record) {
       var self = this;
       self.loading = true;
@@ -598,6 +755,9 @@ export default {
           self.ruleModel.maximum = temperatureRule.Maximum;
           self.ruleModel.preAlarmOffset = temperatureRule.PreAlarmOffset;
           self.ruleModel.alarmThreshold = temperatureRule.AlarmThreshold;
+
+          console.log(jsonData.data);
+          self.ruleModel.mode = jsonData.data.mode;
         } else {
           self.loading = false;
           self.$alert(jsonData.message, "提示", {
@@ -612,6 +772,7 @@ export default {
         if (valid) {
           var formData = new FormData();
           formData.append("deviceInfoId", self.ruleDeviceId);
+          formData.append("mode", self.ruleModel.mode);
           formData.append("needCap", self.ruleModel.needCap);
           formData.append("needMask", self.ruleModel.needMask);
           formData.append(
@@ -645,6 +806,89 @@ export default {
       this.businessKey = record.id;
       this.showMapModal = true;
     },
+    handleBindPerson(record) {
+      var self = this;
+
+      this.$confirm(
+        "将" + record.companyName + "中所有关联用户关联到该设备?",
+        "提示",
+        {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }
+      ).then(() => {
+        self.loading = true;
+        self.loadingText = "关联中...";
+
+        var formData = new FormData();
+        formData.append("deviceId", record.id);
+
+        //增加定时器查询关联进度
+        self.queryBindDeviceProgress(record.id);
+
+        deviceInfoApi.bindDeviceToPerson(formData).then(function(response) {
+          var jsonData = response.data;
+
+          self.loading = false;
+          self.loadingText = "";
+
+          if (jsonData.result) {
+            self.$message.success("关联成功!新增关联用户数:" + jsonData.data);
+          } else {
+            self.$message.warning(jsonData.message);
+          }
+        });
+      });
+    },
+    queryBindDeviceProgress(deviceId) {
+      var self = this;
+
+      deviceInfoApi.queryBindDeviceProgress(deviceId).then(response => {
+        var jsonData = response.data;
+
+        if (jsonData.result) {
+          self.loadingText =
+            "关联人员进度:" +
+            (jsonData.data == "null" ? "..." : jsonData.data);
+        }
+
+        if (self.loading) {
+          //如果没有执行完成则1秒后继续查询
+          setTimeout(() => {
+            self.queryBindDeviceProgress(deviceId);
+          }, 1000);
+        }
+      });
+    },
+    handleExistPersonImageInDevice(record) {
+      var self = this;
+
+      this.$confirm("确定更新【" + record.aliasName + "】关联用户图片是否存在设备中状态?此为耗时操作将在后台进行!", "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(() => {
+        self.loading = true;
+        self.loadingText = "提交中...";
+        var formData = new FormData();
+        formData.append("deviceId", record.id);
+
+        deviceInfoApi.existPersonImageInDevice(formData).then(function(response) {
+          var jsonData = response.data;
+
+          self.loading = false;
+          self.loadingText = "";
+
+          if(jsonData.result) {
+            self.$message.success(jsonData.message + "");
+          }
+          else{
+            self.$message.warning(jsonData.message + "");
+          }
+        });
+      });
+    },
     handleReboot(record) {
       var self = this;
 
@@ -679,18 +923,25 @@ export default {
     },
     onDevicePhotoListClose (){
       this.showPhotoListModal = false;
+    },
+    exportXls() {
+      this.changePage(1,true);
     }
   },
   mounted: function() {
     var self = this;
     this.changePage(1);
+
+    setTimeout(()=>{
+      self.tableHeight = pageUtil.autoAdjustHeight(self.$refs.formTable.$el);
+    },1000);
   },
   components: {
     "deviceInfo-detail": DeviceInfoDetail,
-    "el-select-tree": SelectTree,
+    "deviceInfo-channelList": DeviceInfoChannelList,
     "deviceInfo-map": DeviceInfoMap,
-    "devicePhoto-list": DevicePhotoList,
-    "deviceInfo-channelList": DeviceInfoChannelList
+    "el-select-tree": SelectTree,
+    "devicePhoto-list": DevicePhotoList
   }
 };
 </script>