完成签约之后直接添加人员,录入下发凭证
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

4038 lines
132 KiB

<template>
<div @click="contentSearchShow = false">
<el-row :gutter="20" class="elrow">
<el-col :span="24">
<el-card shadow="hover">
<el-row>
<el-col :span="colNum_6">
<div class="grid-content grid-con-2">
<div class="colposition">
<img src="../assets/img/mszssbgl.png" class="w100" alt="" />
<div class="grid-cont-right">
<div>设备总数</div>
<!-- <div class="grid-num">{{ sumpageTotal }}</div> -->
<div class="font-size-24 grid-num">
<NumberGrow :value="sumpageTotal" class="color-333"></NumberGrow>
</div>
</div>
</div>
</div>
</el-col>
<el-col :span="colNum_6" class="">
<div class="grid-content grid-con-2">
<div class="colposition">
<img src="../assets/img/mszssbgl.png" class="w100" alt="" />
<div class="grid-cont-right">
<div>绑定数量</div>
<!-- <div class="grid-num">{{ analysisData.bingSite }}</div> -->
<div class="font-size-24 grid-num">
<NumberGrow :value="analysisData.bingSite" class="color-333"></NumberGrow>
</div>
</div>
</div>
</div>
</el-col>
<el-col :span="colNum_6" class="">
<div class="grid-content grid-con-2">
<div class="colposition">
<img src="../assets/img/mszssbgl.png" class="w100" alt="" />
<div class="grid-cont-right">
<div>常开数量</div>
<!-- <div class="grid-num">{{ analysisData.isAlwaysOpen }}</div> -->
<div class="font-size-24 grid-num">
<NumberGrow :value="analysisData.isAlwaysOpen" class="color-333"></NumberGrow>
</div>
</div>
</div>
</div>
</el-col>
<el-col :span="colNum_6" class="">
<div class="grid-content grid-con-2">
<div class="colposition">
<img src="../assets/img/mszssbgl.png" class="w100" alt="" />
<div class="grid-cont-right">
<div>报警数量</div>
<div class="grid-num">0</div>
</div>
</div>
</div>
</el-col>
<el-col :span="colNum_6" class="">
<div class="grid-content grid-con-2">
<div class="colposition">
<img src="../assets/img/mszssbgl.png" class="w100" alt="" />
<div class="grid-cont-right">
<div>到期数量</div>
<div class="grid-num">0</div>
</div>
</div>
</div>
</el-col>
<el-col :span="colNum_6" class="">
<div class="grid-content grid-con-2">
<div class="colposition">
<img src="../assets/img/mszssbgl.png" class="w100" alt="" />
<div class="grid-cont-right">
<div>低电数量</div>
<!-- <div class="grid-num">{{ lowBattery }}</div> -->
<div class="font-size-24 grid-num">
<NumberGrow :value="lowBattery" class="color-333"></NumberGrow>
</div>
</div>
</div>
</div>
</el-col>
<el-col :span="colNum_6" class="">
<div class="grid-content grid-con-2">
<div class="colposition">
<img src="../assets/img/wifisbgl.png" class="w100" alt="" />
<div class="grid-cont-right">
<div>在线状态</div>
<!-- <div class="grid-num">{{ online }}</div> -->
<div class="font-size-24 grid-num">
<NumberGrow :value="online" class="color-333"></NumberGrow>
</div>
</div>
</div>
</div>
</el-col>
<el-col :span="colNum_6" class="">
<div class="grid-content grid-con-2">
<div class="colposition">
<img src="../assets/img/wifisbgl1.png" class="w100" alt="" />
<div class="grid-cont-right">
<div>异常状态</div>
<!-- <div class="grid-num">{{ abnormal }}</div> -->
<div class="font-size-24 grid-num">
<NumberGrow :value="abnormal" class="color-333"></NumberGrow>
</div>
</div>
</div>
</div>
</el-col>
</el-row>
</el-card>
</el-col>
</el-row>
<div class="container">
<div class="handle-box">
<selectoption></selectoption>
<el-cascader :options="options" size="small" :props="{ checkStrictly: true }" v-model="searchRoom"
@change="checkNode" :clearable="true">
</el-cascader>
<el-input v-model="search.roomname" size="small" placeholder="房间名称" :clearable="true" @input="changesr($event)"
class="handle-input mr10 width100">
</el-input>
<el-select v-model="search.isOnline" size="small" placeholder="设备状态" class="handle-select mr10" :clearable="true">
<el-option key="1" label="离线" value="0"></el-option>
<el-option key="2" label="在线" value="1"></el-option>
<el-option key="3" label="异常" value="2"></el-option>
</el-select>
<el-button type="primary" size="small" class="mr10 my-2" icon="el-icon-search" @click="handleSearch"
style="background: #FA8E00; border: none;">搜索</el-button>
<el-button type="primary" size="small" class="mr10 my-2" @click="restSearch"
style="background: #FA8E00; border: none;">重置搜索</el-button>
<div class="position-father" @click.stop="contentSearchShow = true">
<div class="el-button mountClickObject el-button--primary mr10 el-button--small"
@click.stop="contentSearchShow = !contentSearchShow" style="background: #FA8E00; border: none;">
高级查询</div>
<div class="contentSearch" v-if="contentSearchShow" id="contentSearch" @click.stop="contentSearchShow = true">
<el-input v-model="search.deviceNum" size="small" placeholder="设备名称" :clearable="true"
@input="changesr($event)" class="handle-input width100">
</el-input>
<el-input v-model="search.imei" size="small" placeholder="IMEI" :clearable="true" @input="changesr($event)"
class="handle-input width100">
</el-input>
<el-select v-model="search.isUsed" size="small" placeholder="请选择" :clearable="true" class="width100">
<el-option key="" label="全部" value="">
</el-option>
<el-option key="0" label="未初始化" value="0">
</el-option>
<el-option key="1" label="初始化" value="1">
</el-option>
</el-select>
<el-select v-model="search.unBind" size="small" placeholder="绑定状态" class="handle-select width100"
:clearable="true">
<el-option key="0" label="已绑定" value="0"></el-option>
<el-option key="1" label="未绑定" value="1"></el-option>
</el-select>
<el-input v-model="search.iccid" size="small" placeholder="ICCID" :clearable="true" @input="changesr($event)"
class="handle-input width100">
</el-input>
<el-input v-model="search.firmwareVersion" size="small" placeholder="版本号" :clearable="true"
@input="changesr($event)" class="handle-input width100">
</el-input>
<el-date-picker v-model="search.createStart" class="width100" size="small" type="datetime"
placeholder="选设备上线开始时间" default-time="00:00:00">
</el-date-picker>
<el-date-picker v-model="search.createEnd" class="width100" size="small" type="datetime" placeholder="选择结束时间"
default-time="00:00:00">
</el-date-picker>
<div class="quantity width100">
电量: <el-input placeholder="" v-model="search.startBattery" :clearable="true"
@input="InputFun($event, 'startBattery')" class="w50" size="mini">
<template slot="append">%</template>
</el-input> - <el-input placeholder="" v-model="search.endBattery" :clearable="true"
@input="InputFun($event, 'endBattery')" class="w50" size="mini">
<template slot="append">%</template>
</el-input>
</div>
<div class="quantity width100">
信号: <el-input placeholder="" v-model="search.rssiStart" :clearable="true"
@input="InputFun($event, 'rssiStart')" class="w50" size="mini">
<template slot="append">%</template>
</el-input> - <el-input placeholder="" v-model="search.rssiEnd" :clearable="true"
@input="InputFun($event, 'rssiEnd')" class="w50" size="mini">
<template slot="append">%</template>
</el-input>
</div>
<div class="searchbutton">
<el-button type="primary" size="small" @click.stop="handleSearch"
style="background: #FA8E00; border: none;">高级搜索</el-button>
<el-button type="primary" size="small" @click.stop="restSearch"
style="background: #FA8E00; border: none;">重置搜索</el-button>
</div>
</div>
</div>
<el-button type="primary" size="small" @click="addequipment" v-if="userInfo.type == 0"
style="background: #FA8E00; border: none;">添加设备</el-button>
<el-button type="primary" size="small" @click="BatchAdd" v-if="userInfo.type == 0"
style="background: #FA8E00; border: none;">批量添加</el-button>
<el-button type="primary" size="small" @click="batchInit" v-if="userInfo.type == 0"
style="background: #FA8E00; border: none;">批量初始化</el-button>
<el-button type="primary" size="small" @click="exportDeviceOrderMethods"
style="background: #FA8E00; border: none;">导出列表</el-button>
<!-- <el-button type="primary" size="small" @click="batchRemoteUnlocking" v-show="userInfo.type == 0">批量远程开锁-->
<!-- </el-button>-->
<el-button type="primary" size="small" @click="batchSetOpenMethods"
style="background: #FA8E00; border: none;">批量设置常开
</el-button>
<el-button type="primary" size="small" @click="refreshFun" v-show="userInfo.type == 0"
style="background: #FA8E00; border: none;">同步设备信息</el-button>
<!-- <el-button type="primary" size="small" @click="syncCommands" v-show="userInfo.type == 0">同步有效凭证</el-button> -->
</div>
<div class="switchiconfont">
<i class="iconfont httpicon-liebiao1" :class="activeiconfont ? 'active' : ''" @click="activeiconfun(true)"
title="切换方块展示"></i>
<i class="iconfont httpicon-liebiao" :class="activeiconfont ? '' : 'active'" @click="activeiconfun(false)"
title="切换表格展示"></i>
</div>
<div class="roomcontent" v-if="activeiconfont">
<div class="roomconli" v-for="(item, index) in tableData" :key="index">
<deviceLi :data="item" :src="deviceImg"></deviceLi>
<div class="button-list">
<div @click="unbindsave(index, item)" v-if="item.roomId ? true : false">
解绑房间
</div>
<div @click="bindRoom(index, item)" v-else>绑定房间</div>
<div @click="detailsFun(index, item)">门锁操作</div>
<div @click="AddAdministrator(index, item)" v-if="item.manufactureId == 101">初始化</div>
<div @click="getEmergence(index, item)" v-if="item.manufactureId == 201 || item.manufactureId == 221">临时密码
</div>
<div @click="deleteLock(index, item)" v-show="userInfo.type == 0">删除</div>
<div @click="RemoteUnlocking(index, item)" v-if="item.manufactureId == 101">远程开锁</div>
<div @click="Reset(index, item)">重置门锁</div>
</div>
</div>
</div>
<el-table :data="tableData" border stripe class="table" ref="multipleTable" header-cell-class-name="table-header"
@selection-change="handleSelectionChange" empty-text="无" v-else height="450">
<el-table-column type="selection" width="55"></el-table-column>
<el-table-column prop="deviceNum" label="设备号" width="200"></el-table-column>
<el-table-column prop="accessPlatformText" label="锁平台"></el-table-column>
<el-table-column prop="manufactureIdText" label="设备类型" width="100"></el-table-column>
<el-table-column prop="imei" label="IMEI" width="150">
<template slot-scope="scope">
<span class="" v-if="scope.row.imei">{{ scope.row.imei }}</span>
<span class="" v-else>空</span>
</template>
</el-table-column>
<el-table-column prop="imsi" label="IMSI" width="150">
<template slot-scope="scope">
<span class="" v-if="scope.row.imsi">{{ scope.row.imsi }}</span>
<span class="" v-else>空</span>
</template>
</el-table-column>
<el-table-column prop="iccid" label="ICCID" width="180">
<template slot-scope="scope">
<span class="" v-if="scope.row.iccid">{{ scope.row.iccid }}</span>
<span class="" v-else>空</span>
</template>
</el-table-column>
<el-table-column prop="" label="信号强度" width="150">
<template slot-scope="scope">
<i class="iconfont httpicon-xinhao38 red" v-if="scope.row.rssi <= 10"></i>
<i class="iconfont httpicon-xinhao38 orange" v-else-if="10 < scope.row.rssi && scope.row.rssi < 20"></i>
<i class="iconfont httpicon-xinhao38 green" v-else-if="20 <= scope.row.rssi && scope.row.rssi <= 100"></i>
<i class="iconfont httpicon-wuxinhao red" v-else></i><span class="spanli dling">
{{ scope.row.rssi || 0 }}</span>
</template>
</el-table-column>
<el-table-column label="电量">
<template slot-scope="scope">
<i class="iconfont httpicon-dianchi-didianliang red" v-if="scope.row.battery <= 15"></i>
<i class="iconfont httpicon-icon-test orange"
v-else-if="15 < scope.row.battery && scope.row.battery < 60"></i>
<i class="iconfont httpicon-icon-test green"
v-else-if="60 <= scope.row.battery && scope.row.battery <= 100"></i>
<i class="iconfont httpicon-icon-test red" v-else></i><span class="spanli dling"> {{ scope.row.battery || 0
}}%</span>
</template>
</el-table-column>
<el-table-column label="在线状态" align="center">
<template #default="scope">
<el-tag :type="scope.row.isOnline == '1'
? 'success'
: scope.row.isOnline == '0'
? 'danger'
: ''
"><span v-if="scope.row.isOnline == 1">在线</span>
<span v-else>离线</span>
</el-tag>
</template>
</el-table-column>
<!-- <el-table-column label="门的状态">
<template slot-scope="scope">
<i class="iconfont httpicon-men" v-if="scope.row.lockStatus == 0"></i>
<i class="iconfont httpicon-mendoor13" v-if="scope.row.lockStatus == 1"></i>
<i class="iconfont httpicon-men" style="color: red" v-if="scope.row.lockStatus == 2"></i>
</template>
</el-table-column> -->
<el-table-column label="绑定房间" width="200">
<template slot-scope="scope">
<span class="blue" v-if="scope.row.roomName">{{
scope.row.roomName
}}</span>
<span class="" v-else>空</span>
</template>
</el-table-column>
<el-table-column prop="firmwareVersion" label="版本" width="160"></el-table-column>
<el-table-column prop="createAt" label="注册时间" width="160"></el-table-column>
<el-table-column prop="lastReportAt" label="上线时间" width="160"></el-table-column>
<el-table-column label="操作" width="500" align="center">
<template #default="scope">
<el-button type="text" @click="unbindsave(scope.$index, scope.row)" v-if="scope.row.roomId" class="red">解绑房间
</el-button>
<el-button type="text" v-else @click="bindRoom(scope.$index, scope.row)">绑定房间</el-button>
<el-button type="text" @click="detailsFun(scope.$index, scope.row)">门锁操作</el-button>
<el-button type="text" @click="AddAdministrator(scope.$index, scope.row)"
v-if="scope.row.manufactureId == 101 && userInfo.type == 0">初始化
</el-button>
<el-button type="text" class="red" @click="deleteLock(scope.$index, scope.row)" v-show="userInfo.type == 0">
删除</el-button>
<el-button type="text" class="red" @click="getEmergence(scope.$index, scope.row)">临时密码
</el-button>
<el-button type="text" @click="RemoteUnlocking(scope.$index, scope.row)"
v-if="scope.row.manufactureId == 101">远程开锁 </el-button>
<el-button type="text" @click="Reset(scope.$index, scope.row)">重置门锁</el-button>
</template>
</el-table-column>
</el-table>
<div class="pagination">
<el-pagination @size-change="handleSizeChange" @current-change="handlePageChange"
:current-page="$store.state.currentPage" :page-sizes="[10, 20, 100]" :page-size="pageSize"
:layout="paginationConfig" :total="pageTotal">
</el-pagination>
</div>
</div>
<!-- 绑定房间 -->
<el-dialog title="绑定房间" :visible.sync="roomVisible" width="30%">
<div class="ztree">
<el-tree :data="zNodes" show-checkbox node-key="id" ref="tree" @check-change="handleCheckChange"
:props="defaultProps"></el-tree>
</div>
<template #footer>
<span class="dialog-footer">
<el-button @click="roomVisible = false">取 消</el-button>
<el-button type="primary" @click="bindsave">确 定</el-button>
</span>
</template>
</el-dialog>
<!-- 远程开锁输入密码 -->
<el-dialog title="远程开锁密码" :visible.sync="Unlocking" width="30%">
<div>
<el-form ref="locking" :model="lockingform" label-width="100px">
<el-form-item label="管理员密码">
<el-input v-model="lockingform.password" show-password :clearable="true"></el-input>
</el-form-item>
</el-form>
</div>
<template #footer>
<span class="dialog-footer">
<el-button @click="Unlocking = false" size="middle">取 消</el-button>
<el-button type="primary" @click="Unlockingsave" size="middle">确 定</el-button>
</span>
</template>
</el-dialog>
<!-- 编辑弹出框 -->
<el-dialog title="编辑" :visible.sync="editVisible" width="30%">
<el-form ref="form" :model="form" label-width="100px">
<el-form-item label="型号">
<el-select v-model="form.manufacturer" size="middle" placeholder="请选择">
<el-option v-for="item in manufacturerList" :key="item.value" :label="item.label" :value="item.value">
</el-option>
</el-select>
</el-form-item>
<div v-if="form.manufacturer == 101 || form.manufacturer == 1201 || form.manufacturer == 1241">
<el-form-item label="设备号">
<el-input v-model="form.deviceNum" size="middle" :clearable="true"></el-input>
</el-form-item>
<el-form-item label="IMEI">
<el-input v-model="form.imei" size="middle" :clearable="true"></el-input>
</el-form-item>
<el-form-item label="超管ID">
<el-input v-model="form.lockerSuperAdminId" size="middle" :clearable="true"></el-input>
</el-form-item>
<el-form-item label="MAC">
<el-input v-model="form.lockMac" size="middle" :clearable="true"></el-input>
</el-form-item>
<el-form-item label="运营商">
<el-select v-model="form.platformId" size="middle" placeholder="请选择">
<el-option v-for="item in accessPlatform.select" :key="item.code" :label="item.desc" :value="item.code">
</el-option>
</el-select>
</el-form-item>
</div>
<div v-else-if="form.manufacturer == 201 || form.manufacturer == 221">
<el-form-item label="设备号">
<el-input v-model="form.lockerId" size="middle" :clearable="true"></el-input>
</el-form-item>
<el-form-item label="IMEI">
<el-input v-model="form.imei" size="middle" :clearable="true"></el-input>
</el-form-item>
<el-form-item label="超管名称">
<el-input v-model="form.lockerSuperAdminId" size="middle" :clearable="true"></el-input>
</el-form-item>
<el-form-item label="超管密码">
<el-input v-model="form.authKey" size="middle" :clearable="true"></el-input>
</el-form-item>
<el-form-item label="客户码">
<el-input v-model="form.customerCode" size="middle" :clearable="true"></el-input>
</el-form-item>
<el-form-item label="连接方式">
<el-select v-model="form.type" placeholder="请选择" size="middle">
<el-option key="0" label="直连" value="0"></el-option>
<el-option key="1" label="aep" value="1"></el-option>
</el-select>
</el-form-item>
</div>
<el-form-item label="选择房间">
<el-cascader :options="options" size="middle" :props="{ checkStrictly: true }" @change="checkNodeOne"
v-model="checkNodeId1" clearable>
</el-cascader>
</el-form-item>
<div
v-if="form.manufacturer == 701 || form.manufacturer == 702 || form.manufacturer == 703 || form.manufacturer == 704 || form.manufacturer == 705 || form.manufacturer == 706 || form.manufacturer == 707">
<el-form-item label="设备号">
<el-input v-model="form.deviceNum" size="middle" :clearable="true"></el-input>
</el-form-item>
<el-form-item label="设备验证码">
<el-input v-model="form.validateCode" size="small" :clearable="true"></el-input>
</el-form-item>
</div>
<div v-else-if="form.manufacturer == 1241">
<el-form-item label="设备号">
<el-input v-model="form.deviceNum" size="middle" :clearable="true"></el-input>
</el-form-item>
</div>
<!-- <el-form-item label="选择房间">
<el-cascader :options="options" size="middle" :props="{ checkStrictly: true }" @change="checkNodeOne"
v-model="checkNodeId1" clearable>
</el-cascader>
</el-form-item> -->
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="editVisible = false" size="small">取 消</el-button>
<el-button type="primary" @click="initialization" size="small">确 定</el-button>
</span>
</template>
</el-dialog>
<el-drawer title="" :visible.sync="drawer" custom-class="operationclass position-relative" :show-close="false"
:size="drawerSize" :before-close="handleClose">
<div class="position-absolute left-15 top-10 color-666" style="width: 40px;cursor: pointer;" @click="handleClose">
<img src="../assets/img/leftjt.svg" alt="" class="width-percentage-100">
</div>
<div class="rltable">
<el-tabs v-model="activeName" border @tab-click="handleClick">
<el-tab-pane label="门锁详情" name="0">
<el-form :inline="true" :model="formInline" class="demo-form-inline">
<el-form-item label="设备号:">
<span class="half">{{ formInline.deviceNum }}</span>
</el-form-item>
<el-form-item label="IMEI:">
<span class="half">{{ formInline.imei }}</span>
</el-form-item>
<el-form-item label="IMSI:">
<span class="half">{{ formInline.imsi }}</span>
</el-form-item>
<el-form-item label="ICCID:">
<span class="half">{{ formInline.iccid }}</span>
</el-form-item>
<el-form-item label="信号强度:">
<span class="half">{{ formInline.rssi }}</span>
</el-form-item>
<el-form-item label="电池电量:">
<span class="half">{{ formInline.battery }}</span>
</el-form-item>
<el-form-item label="在线状态:">
<span class="half" v-if="formInline.isOnline == 1">在线</span>
<span class="half" v-else>离线</span>
</el-form-item>
<!-- <el-form-item label="门的状态:">
<span class="half" v-if="formInline.lockStatus == 0">关闭</span>
<span class="half" v-if="formInline.lockStatus == 1">打开</span>
<span class="half" v-if="formInline.lockStatus == 2">异常</span>
</el-form-item> -->
<el-form-item label="绑定房间:">
<span class="half">{{ formInline.roomName }}</span>
</el-form-item>
<el-form-item label="注册时间:">
<span class="half">{{ formInline.createAt }}</span>
</el-form-item>
<el-form-item label="上线时间:">
<span class="half">{{ formInline.lastReportAt }}</span>
</el-form-item>
<el-form-item label="音量:">
<el-radio-group v-model="formInline.volumeLevel" @input="stepFun" size="mini"
v-if="formInline.manufactureId == 101">
<el-radio-button label="0">静音</el-radio-button>
<el-radio-button label="1">低音</el-radio-button>
<el-radio-button label="2">高音</el-radio-button>
</el-radio-group>
<el-radio-group v-model="formInline.volumeLevel" disabled size="mini"
v-if="formInline.manufactureId == 201 || formInline.manufactureId == 221">
<el-radio-button label="0">静音</el-radio-button>
<el-radio-button label="1">低音</el-radio-button>
<el-radio-button label="2">高音</el-radio-button>
</el-radio-group>
</el-form-item>
<!-- <el-form-item label="常开设置:" v-if="formInline.manufactureId==101">-->
<!-- <el-switch v-model="formInline.isAlwaysOpenStatus" :inactive-text="switchtext" @change="switchFun">-->
<!-- </el-switch>-->
<!-- </el-form-item>-->
<!-- <el-form-item label="常开状态:" v-if="formInline.manufactureId==201">-->
<!-- <el-switch v-model="formInline.isAlwaysOpenStatus" :inactive-text="switchtext" disabled>-->
<!-- </el-switch>-->
<!-- </el-form-item>-->
<el-form-item label="数据同步:">
<!-- <el-input size="mini" placeholder="请填写需要同步数据过来的锁号" v-model="synchroLockNumber" style="display: inline-block;width: 200px;"></el-input> -->
<el-button type="text" size="mini" @click="dataSynchronization(1, formInline)">数据同步</el-button>
</el-form-item>
</el-form>
<!-- <el-form :mode="formInline" class="">-->
<!-- <el-form-item label="常开设置:" v-if="formInline.manufactureId==201">-->
<!-- &lt;!&ndash; <el-switch v-model="value1" :inactive-text="switchtext" @change="switchFun">-->
<!-- </el-switch> &ndash;&gt;-->
<!-- <el-date-picker v-model="opendTime" type="daterange" range-separator="至" class="w-250"-->
<!-- start-placeholder="开始日期" end-placeholder="结束日期" size="mini">-->
<!-- </el-date-picker>-->
<!-- <el-select v-model="startHour" size="mini" placeholder="选择开始时间段">-->
<!-- <el-option v-for="item in optionsTime" :key="item.value" :label="item.label" :value="item.value">-->
<!-- </el-option>-->
<!-- </el-select>-->
<!-- <el-select v-model="endHour" size="mini" placeholder="选择结束时间段">-->
<!-- <el-option v-for="item in optionsTime" :key="item.value" :label="item.label" :value="item.value">-->
<!-- </el-option>-->
<!-- </el-select>-->
<!-- <el-button type="primary" size="mini" @click="setNormallyOpenMethods">确认设置</el-button>-->
<!-- <el-button type="primary" size="mini" @click="UnsetMethods(1)">取消设置</el-button>-->
<!-- </el-form-item>-->
<!-- </el-form>-->
<div class="date-form">
<el-date-picker v-model="dateTime" type="monthrange" size="small" align="right" unlink-panels class="w-250"
@change="getElectricity" range-separator="至" start-placeholder="开始月份" end-placeholder="结束月份"
:picker-options="pickerOptions">
</el-date-picker>
<div class="discount">
<div ref="main" id="myLine" style="width: 100%; height: 400px"></div>
</div>
<el-date-picker v-model="dateTimeOne" type="monthrange" size="small" align="right" unlink-panels
class="w-250" @change="getSignal" range-separator="至" start-placeholder="开始月份" end-placeholder="结束月份"
:picker-options="pickerOptions">
</el-date-picker>
<div class="discount">
<div ref="main1" id="myLineOne" style="width: 100%; height: 400px"></div>
</div>
</div>
</el-tab-pane>
<el-tab-pane label="开锁记录" name="1">
<UnlockRecord :roomId="sendroomId" v-if="sendStatus"></UnlockRecord>
</el-tab-pane>
<el-tab-pane label="警告日志" name="2">
<warningLog :deviceNum="sendDevice" v-if="sendStatus"></warningLog>
</el-tab-pane>
<el-tab-pane label="设备反馈日志" name="3">
<DeviceFeedbackLog :deviceNum="senddeviceNum" v-if="sendStatus">
</DeviceFeedbackLog>
</el-tab-pane>
<el-tab-pane label="凭证记录" name="4">
<voucherCom :deviceNum="senddeviceNum" v-if="sendStatus">
</voucherCom>
</el-tab-pane>
<!-- <el-tab-pane label="常开记录" name="5">-->
<!-- <el-table :data="normallyOpenRecordList" stripe style="width: 100%" height="400">-->
<!-- <el-table-column prop="operateName" label="设置人员" width="180">-->
<!-- </el-table-column>-->
<!-- <el-table-column prop="operate" label="设置状态" width="180" v-if="formInline.manufactureId==101">-->
<!-- <template slot-scope="scope">-->
<!-- <span v-if="scope.row.operate==1">打开</span>-->
<!-- <span v-if="scope.row.operate==0">关闭</span>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column prop="operate" label="设置状态" width="180" v-if="formInline.manufactureId==201">-->
<!-- <template slot-scope="scope">-->
<!-- <span v-if="scope.row.opendDoorType==1">打开</span>-->
<!-- <span v-if="scope.row.opendDoorType==0">关闭</span>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column prop="createTime" label="设置时间">-->
<!-- <template slot-scope="scope">-->
<!-- <span v-if="scope.row.startTime">日期范围:{{scope.row.startTime}} - {{scope.row.endTime}},时间段:{{scope.row.startHour}}:00 - {{scope.row.endHour}}:00</span>-->
<!-- <span v-else>{{scope.row.createTime}}</span>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column prop="updateTime" label="生效时间">-->
<!-- </el-table-column>-->
<!-- </el-table>-->
<!-- <div class="text-center mt-4">-->
<!-- <el-pagination @size-change="normallyHandleSizeChange" @current-change="normallyHandleCurrentChange"-->
<!-- :current-page="normallyPageNum" :page-sizes="[20,100, 200, 300, 400]" :page-size="normallyPageSzie"-->
<!-- layout="total, sizes, prev, pager, next, jumper" :total="normallyTotal">-->
<!-- </el-pagination>-->
<!-- </div>-->
<!-- </el-tab-pane>-->
</el-tabs>
</div>
</el-drawer>
<el-dialog title="批量设置常开" :visible.sync="setopenStatus" width="70%">
<el-form :mode="formInline" class="">
<el-form-item label="常开设置:">
<el-date-picker v-model="opendTime" type="daterange" range-separator="至" start-placeholder="开始日期"
end-placeholder="结束日期" size="mini">
</el-date-picker>
</el-form-item>
<el-form-item label="开始时间段:">
<el-select v-model="startHour" size="mini" placeholder="选择开始时间段">
<el-option v-for="item in optionsTime" :key="item.value" :label="item.label" :value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="结束时间段:">
<el-select v-model="endHour" size="mini" placeholder="选择结束时间段">
<el-option v-for="item in optionsTime" :key="item.value" :label="item.label" :value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="">
<el-button type="primary" size="mini" @click="setNormallyOpenMethodsAll">确认设置</el-button>
<el-button type="primary" size="mini" @click="UnsetMethods(2)">取消设置</el-button>
</el-form-item>
</el-form>
</el-dialog>
<el-dialog title="批量上传" :visible.sync="uploadkj" width="70%">
<input class="input-file" type="file" @change="exportData"
accept=".csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel" />
<el-button type="primary" @click="btnClick" size="mini">导入EXCEL</el-button>
<el-button type="primary" @click="exportBtn" size="mini">下载模板</el-button>
<el-select v-model="batchAccess" placeholder="请选择" size="mini">
<el-option v-for="item in accessPlatform.select" :key="item.code" :label="item.desc" :value="item.code">
</el-option>
</el-select>
<el-select v-model="manufacturer" placeholder="请选择" size="mini">
<el-option v-for="item in manufacturerList" :key="item.value" :label="item.label" :value="item.value">
</el-option>
</el-select>
<el-table :data="userlist2" v-if="userlist1statu" border class="table" ref="multipleTable1" height="200"
header-cell-class-name="table-header" @selection-change="handleSelectionChange1">
<el-table-column type="selection" width="55"> </el-table-column>
<el-table-column prop="deviceNum" label="设备号" align="center"></el-table-column>
<el-table-column prop="mac" label="mac地址" align="center"></el-table-column>
<el-table-column prop="sn" label="sn" align="center"></el-table-column>
<el-table-column prop="imei" label="imei" align="center"></el-table-column>
<el-table-column prop="app" label="app绑定号" align="center"></el-table-column>
<el-table-column prop="write" label="生产写入号" align="center"></el-table-column>
</el-table>
<template #footer>
<span class="dialog-footer">
<el-button @click="uploadkj = false" size="small">取 消</el-button>
<el-button type="primary" @click="batchUploadfun" size="small">确 定</el-button>
</span>
</template>
</el-dialog>
<el-dialog title="紧急密码,每天仅能用一次" :visible.sync="getEmergenceStatus" width="30%">
<el-form ref="Emergence" :model="Emergence" label-width="80px">
<el-form-item label="临时密码">
<el-input v-model="Emergence.password" placeholder="" disabled class="handle-input mr10"></el-input>
</el-form-item>
<el-form-item label="电话">
<el-input v-model="Emergence.EmerPhone" type="number" maxlength="11" placeholder="请输入手机号" :clearable="true"
class="handle-input mr10">
</el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="getEmergenceStatus = false" size="small">取 消</el-button>
<el-button type="primary" @click="sendEmergence" size="small"> </el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import NumberGrow from "../components/visualizcomponent/NumberGrow.vue";
import {
httpGet,
httpPost,
download, downloadPost
} from "../api";
import zTree from "../components/zTree1.vue";
import deviceLi from "../components/deviceLi.vue";
import UnlockRecord from "../components/UnlockRecord.vue"
import DeviceFeedbackLog from "../components/DeviceFeedbackLog.vue"
import warningLog from "../components/warningLog.vue"
import voucherCom from "../components/voucherCom.vue"
import {
uniqueArray,
ztreeToElementTree,
uniqueArray1,
getcurrentTime1
} from "../utils/index";
import XLSX from "xlsx";
import utils from "../utils/util.js";
import ICINLocker from "../utils/equipment.js"
import moment from 'moment'
import RequestSet from "../api/allFun.js"
let nowDate = new Date()
var currentTime = nowDate
var endcurrentTime = getcurrentTime1(1)
export default {
inject: ['reload'],
name: "doorLock",
data() {
return {
lowBattery: 0, // 低电量
normallyOpenRecordList: [],
normallyTotal: 0,
normallyPageNum: 1,
normallyPageSzie: 20,
optionsTime: [{
value: 1,
label: '1:00',
},
{
value: 2,
label: '2:00',
},
{
value: 3,
label: '3:00',
},
{
value: 4,
label: '4:00',
},
{
value: 5,
label: '5:00',
},
{
value: 6,
label: '6:00',
},
{
value: 7,
label: '7:00',
},
{
value: 8,
label: '8:00',
},
{
value: 9,
label: '9:00',
},
{
value: 10,
label: '10:00',
},
{
value: 11,
label: '11:00',
},
{
value: 12,
label: '12:00',
},
{
value: 13,
label: '13:00',
},
{
value: 14,
label: '14:00',
},
{
value: 15,
label: '15:00',
},
{
value: 16,
label: '16:00',
},
{
value: 17,
label: '17:00',
},
{
value: 18,
label: '18:00',
},
{
value: 19,
label: '19:00',
},
{
value: 20,
label: '20:00',
},
{
value: 21,
label: '21:00',
},
{
value: 22,
label: '22:00',
},
{
value: 23,
label: '23:00',
},
{
value: 24,
label: '24:00',
}
],
setopenStatus: false,
opendTime: [currentTime, endcurrentTime],
startHour: 1,
endHour: 24,
synchroLockNumber: "",
contentSearchShow: false,
myLine_option_one: {
title: {
text: "信号曲线",
x: "0",
y: "20",
color: "#333"
},
tooltip: {
trigger: "axis"
},
legend: {
orient: "horizontal",
x: "right",
y: "top",
data: ["门锁近期信号曲线"],
},
dataZoom: [{
type: 'inside', //内置滑动,随鼠标滚轮展示
xAxisIndex: [0],
start: 0, //初始化时,滑动条宽度开始标度
end: 100 //初始化时,滑动条宽度结束标度
}],
grid: {
top: "16%",
left: "0%",
right: "0%",
bottom: "0%",
containLabel: true,
},
xAxis: {
name: "时间",
type: "category",
data: [],
},
yAxis: {},
series: [{
name: "门锁信号",
type: "line",
smooth: true,
data: [],
itemStyle: {
normal: {
color: "#FFAE00",
lineStyle: {
color: "#397FFF",
},
},
},
areaStyle: {
normal: {
color: {
type: "linear", //设置线性渐变
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [{
offset: 0,
color: "rgba(57,127,255,.1)", // 0% 处的颜色
},
{
offset: 1,
color: "#fff", // 100% 处的颜色
},
],
globalCoord: false, // 缺省为 false
},
},
},
},],
},
myLine_option_three: {
title: {
text: "信号曲线",
x: "0",
y: "20",
color: "#333"
},
tooltip: {
trigger: "axis"
},
legend: {
orient: "horizontal",
x: "right",
y: "top",
data: ["门锁近期信号曲线"],
},
dataZoom: [{
type: 'inside', //内置滑动,随鼠标滚轮展示
xAxisIndex: [0],
start: 0, //初始化时,滑动条宽度开始标度
end: 100 //初始化时,滑动条宽度结束标度
}],
grid: {
top: "16%",
left: "0%",
right: "0%",
bottom: "0%",
containLabel: true,
},
xAxis: {
name: "时间",
type: "category",
data: [],
},
yAxis: {},
series: [{
name: "门锁信号",
type: "line",
smooth: true,
data: [],
itemStyle: {
normal: {
color: "#FFAE00",
lineStyle: {
color: "#397FFF",
},
},
},
areaStyle: {
normal: {
color: {
type: "linear", //设置线性渐变
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [{
offset: 0,
color: "rgba(57,127,255,.1)", // 0% 处的颜色
},
{
offset: 1,
color: "#fff", // 100% 处的颜色
},
],
globalCoord: false, // 缺省为 false
},
},
},
},],
},
myLine_option: {
title: {
text: "电量曲线",
x: "0",
y: "20"
},
tooltip: {
trigger: "axis"
},
legend: {
orient: "horizontal",
x: "right",
y: "top",
data: ["门锁近期电量曲线"],
},
dataZoom: [{
type: 'inside', //内置滑动,随鼠标滚轮展示
xAxisIndex: [0],
start: 0, //初始化时,滑动条宽度开始标度
end: 100 //初始化时,滑动条宽度结束标度
}],
grid: {
top: "16%",
left: "0%",
right: "0%",
bottom: "0%",
containLabel: true,
},
xAxis: {
name: "时间",
type: "category",
data: [],
},
yAxis: {},
series: [{
name: "门锁电量",
type: "line",
smooth: true,
data: [],
itemStyle: {
normal: {
color: "#FFAE00",
lineStyle: {
color: "#397FFF",
},
},
},
areaStyle: {
/*normal: { origin: 'start', color: 'rgba(57,127,255,.1)', opacity: 1 },*/
normal: {
color: {
type: "linear", //设置线性渐变
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [{
offset: 0,
color: "rgba(57,127,255,.1)", // 0% 处的颜色
},
{
offset: 1,
color: "#fff", // 100% 处的颜色
},
],
globalCoord: false, // 缺省为 false
},
},
},
},],
},
pickerOptions: {
shortcuts: [{
text: '今天',
onClick(picker) {
const end = new Date();
picker.$emit('pick', [moment().startOf('day').format("YYYY-MM-DD 00:00:00"), end]);
}
}, {
text: '最近一周',
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
picker.$emit('pick', [start, end]);
}
}, {
text: '本月',
onClick(picker) {
const end = new Date();
picker.$emit('pick', [moment().startOf('month').format("YYYY-MM-DD 00:00:00"), end]);
}
}, {
text: '今年至今',
onClick(picker) {
const end = new Date();
const start = new Date(new Date().getFullYear(), 0);
picker.$emit('pick', [start, end]);
}
}, {
text: '最近六个月',
onClick(picker) {
const end = new Date();
const start = new Date();
start.setMonth(start.getMonth() - 6);
picker.$emit('pick', [start, end]);
}
},]
},
dateTime: [moment().subtract(3, 'months').format("YYYY-MM-DD 00:00:00"), moment().format(
"YYYY-MM-DD HH:mm:ss")],
dateTimeOne: [moment().subtract(3, 'months').format("YYYY-MM-DD 00:00:00"), moment().format(
"YYYY-MM-DD HH:mm:ss")],
endDate: moment().format("YYYY-MM-DD HH:mm:ss"),
startDate: moment().subtract(3, 'months').format("YYYY-MM-DD 00:00:00"),
endDateOne: moment().format("YYYY-MM-DD HH:mm:ss"),
startDateOne: moment().subtract(3, 'months').format("YYYY-MM-DD 00:00:00"),
searchRoom: '',
deviceImg: require("../assets/img/lock.2451264a.png"),
selectoption: [],
selectoptionValue: '',
senddeviceNum: '',
sendDevice: {
deviceNum: ''
},
sendroomId: '',
commpontentStatus: true,
Emergence: {
EmerPhone: '',
password: '',
device: '',
name: ''
},
defaultProps: {
children: "children",
label: "name",
},
options: [],
drawer: false,
value1: false,
value2: 0,
marks: {
0: "关",
50: "中",
100: "高",
},
switchtext: "关",
activeName: "0",
formInline: {},
platlist: [{
label: "电信",
value: 1
}, {
label: "移动",
value: 2
}, {
label: "联通",
value: 3
},],
manufacturerList: [],
setting: {
edit: {
enable: true,
drag: {
isMove: true,
},
showRemoveBtn: false,
showRenameBtn: false,
},
check: {
enable: false,
},
data: {
simpleData: {
enable: true,
pIdKey: "pid",
},
},
view: {
showIcon: true,
addHoverDom: this.addHoverDom,
removeHoverDom: this.removeHoverDom,
},
},
zNodes: [],
bromm: {},
query: {
address: "",
name: "",
pageIndex: 1,
pageSize: 20,
options: [],
},
search: {
name: "",
deviceNum: "",
roomname: '',
imei: "",
isOnline: "",
startBattery: '',
endBattery: '',
firmwareVersion: '',
operationStatus: '',
isUsed: '',
iccid: '',
rssiStart: '',
rssiEnd: '',
createStart: '',
createEnd: '',
isAppBind: ''
},
tableData: [],
multipleSelection: [],
delList: [],
editVisible: false,
roomVisible: false,
pageTotal: 0,
sumpageTotal: 0,
currentPage4: 1,
form: {
lockerId: '',
manufacturer: "",
platformId: '',
imei: '',
deviceNum: '',
authKey: '',
validateCode: '',
lockerSuperAdminId: '',
customerCode: '',
type: ''
},
manufacturer: '',
idx: -1,
id: -1,
abnormal: 0,
online: 0,
treedata: [],
unonline: 0,
Unlocking: false,
Unlockingrow: {},
lockingform: {
password: ""
},
activeiconfont: true,
info: [],
uploadkj: false,
userlist1statu: true,
userlist2: [],
multipleSelection1: [],
batchAccess: "",
getEmergenceStatus: false,
getEmergenceNum: '',
checkNodeId: '',
pageSize: 10,
pageNum: 1,
sendStatus: true,
userInfo: {
type: ''
},
checkNodeId1: '',
accessPlatform: {},
paginationConfig: 'total, sizes, prev, pager, next, jumper',
colNum_6: 6,
drawerSize: '90%',
analysisData: { isAlwaysOpen: 0, notAlwaysOpen: 0, bingSite: 0 },
};
},
components: {
zTree,
deviceLi,
UnlockRecord,
warningLog,
DeviceFeedbackLog,
voucherCom,
NumberGrow
},
beforeCreate() {
// var tenantId = JSON.parse(localStorage.getItem('tenantId'))
// if (tenantId == 400) {
// this.$store.commit('defaultsettenantid')
// }
},
created() {
if (this.$route.params.isOnline) {
this.search.isOnline = this.$route.params.isOnline
}
if (this.$route.params.endBattery) {
this.search.startBattery = '0'
this.search.endBattery = 20
}
this.manufacturerList = this.$MANUFACTURER.MANUFACTURER.lock
this.accessPlatform = this.$MANUFACTURER.accessPlatform
this.userInfo = JSON.parse(localStorage.getItem('info'))
if (this.$route.params.isUsed) {
this.search.isUsed = this.$route.params.isUsed
}
if (document.documentElement.clientWidth < 1080) {
this.paginationConfig = 'total, prev, pager, next'
this.colNum_6 = 12
this.drawerSize = '100%'
} else {
this.paginationConfig = 'total, sizes, prev, pager, next, jumper'
this.colNum_6 = 6
this.drawerSize = '90%'
}
},
mounted() {
this.getdevice();
// this.getalllist();
this.$store.commit("increment", 1);
this.getcard()
this.getallTree()
document.addEventListener('keydown', this.keyDown)
},
methods: {
// 设备筛选导出结果
exportDeviceOrderMethods() {
var deviceNum = this.search.deviceNum.replace(/\s*/g, "");
var imei = this.search.imei.replace(/\s*/g, "");
if (this.search.isOnline == 2) {
this.search.isAppBind = 1
} else {
this.search.isAppBind = ''
}
var q = {
deviceNum: deviceNum,
imei: imei,
isOnline: this.search.isOnline,
roomName: this.search.roomname,
roomIds: this.checkNodeId,
startBattery: this.search.startBattery,
endBattery: this.search.endBattery,
lockType: 1,
unBind: this.search.unBind,
firmwareVersion: this.search.firmwareVersion,
isUsed: this.search.isUsed,
iccid: this.search.iccid,
rssiStart: this.search.rssiStart,
rssiEnd: this.search.rssiEnd,
createStart: this.search.createStart,
createEnd: this.search.createEnd,
isAppBind: this.search.isAppBind
};
if (q.isOnline == 2) {
delete q.isOnline
}
var qObject = utils.validObject(q)
var data = {
orderBy: "open_time desc",
q: JSON.stringify(qObject)
}
httpPost(data, this.$api.exportDeviceOrder).then(res => {
if (res.code == 200) {
let exportData = []
//导出数据结构构造
res.data.forEach(item => {
exportData.push({
roomName: item.roomName,
deviceNum: item.deviceNum,
imei: item.imei,
imsi: item.imsi,
isOnline: item.isOnline == 1 ? '在线' : item.isOnline == 2 ? '异常' : '离线',
battery: item.battery,
rssi: item.rssi,
createAt: moment(item.createAt).format("YYYY-MM-DD HH:mm:ss"),
lastReportAt: moment(item.lastReportAt).format("YYYY-MM-DD HH:mm:ss"),
})
})
//导出表头设计
let head = {
roomName: '房间名称',
deviceNum: '设备号',
imei: 'IMEI',
imsi: 'IMSI',
isOnline: '状态',
battery: '电量',
rssi: '信号',
createAt: '注册时间',
lastReportAt: '上线时间',
}
//表头数据切换
const list = exportData.map(item => {
const obj = {}
for (const k in item) {
if (head[k]) {
obj[head[k]] = item[k]
}
}
return obj
})
// 创建工作表
const data = XLSX.utils.json_to_sheet(list)
// 创建工作簿
const wb = XLSX.utils.book_new()
// 将工作表放入工作簿中
XLSX.utils.book_append_sheet(wb, data, 'data')
// 生成文件并下载
XLSX.writeFile(wb, '门锁列表.xlsx')
} else {
this.$message.error(res.message)
}
})
// downloadPost(data, this.$api.exportDeviceOrder).then((res) => {
// const link = document.createElement("a");
// let blob = new Blob([res], {
// type: "application/vnd.ms-excel"
// });
// var objectUrl = URL.createObjectURL(blob);
// link.href = objectUrl;
// link.download = "门锁列表.xlsx";
// link.click();
// URL.revokeObjectURL(objectUrl);
// });
},
// 获取常开记录
getAlwaysOpens() {
var data = {
pageNum: this.normallyPageNum,
pageSize: this.normallyPageSzie,
orderType: "desc",
orderBy: "createTime",
q: JSON.stringify({
deviceNum: this.formInline.deviceNum
})
}
httpPost(data, this.$api.getAlwaysOpensApi).then(res => {
if (res.success) {
res.data.list.map(li => {
li.createTime = moment(li.createTime).format("YYYY-MM-DD HH:mm:ss")
var content = JSON.parse(li.content)
if (content.operate) {
li.operate = content.operate
} else {
li.operate = ''
}
if (content.endTime) {
li.endTime = content.endTime
li.startTime = content.startTime
li.startHour = content.openDoorSegmentList[0].startHour
li.endHour = content.openDoorSegmentList[0].endHour
li.opendDoorType = content.opendDoorType
}
if (li.updateTime) {
li.updateTime = moment(li.updateTime).format("YYYY-MM-DD HH:mm:ss")
}
})
this.normallyOpenRecordList = res.data.list
this.normallyTotal = res.data.total
} else {
this.$message.error(res.message)
}
})
},
// 常开记录分页
normallyHandleSizeChange(val) {
this.normallyPageSzie = val
this.getAlwaysOpens()
},
normallyHandleCurrentChange(val) {
this.normallyPageNum = val
this.getAlwaysOpens()
},
// 电量图表初始化
initChart() {
var myLine = this.$echarts.init(document.getElementById("myLine"));
myLine.setOption(this.myLine_option);
},
initChartOne() {
var myLine = this.$echarts.init(document.getElementById("myLineOne"));
myLine.setOption(this.myLine_option_one);
},
initChartThree() {
var myLine = this.$echarts.init(document.getElementById("myLineThree"));
myLine.setOption(this.myLine_option_three);
},
getElectricity(e) {
this.endDate = moment(this.dateTime[1]).format("YYYY-MM-DD HH:mm:ss")
this.startDate = moment(this.dateTime[0]).format("YYYY-MM-DD HH:mm:ss")
this.quantityFun()
this.dateTimeOne = [this.dateTime[0], this.dateTime[1]]
this.endDateOne = moment(this.dateTime[1]).format("YYYY-MM-DD HH:mm:ss")
this.startDateOne = moment(this.dateTime[0]).format("YYYY-MM-DD HH:mm:ss")
this.quantityFunOne()
},
getSignal(e) {
this.endDateOne = moment(this.dateTimeOne[1]).format("YYYY-MM-DD HH:mm:ss")
this.startDateOne = moment(this.dateTimeOne[0]).format("YYYY-MM-DD HH:mm:ss")
this.quantityFunOne()
},
// 电量图表显示
quantityFun() {
var endDate = this.endDate;
var startDate = this.startDate;
var data = {
code: "logHeartbeat/batteryList",
data: {
pageNum: 1,
pageSize: 100000,
para: {
deviceNum: this.senddeviceNum,
startDate: startDate,
endDate: endDate,
}
},
};
httpPost(data, this.$api.sendCommand).then((res) => {
if (res.success) {
var optiondata = [],
seriesdata = [];
res.data.list.map((li, index) => {
li.createAt = moment(li.createAt).format("YYYY-MM-DD HH:mm:ss")
});
var array = this.factorial(res.data.list, 0);
array.map((li) => {
optiondata.push(li.createAt);
seriesdata.push(li.battery);
});
this.myLine_option.xAxis.data = optiondata;
this.myLine_option.series[0].data = seriesdata;
this.$nextTick(() => {
this.initChart();
});
} else {
this.$message.error("数据错误");
}
});
},
factorial(time, index) {
if (time.length - 1 > index) {
var date = new Date(time[index + 1].createAt).getTime();
var date1 = new Date(time[index].createAt).getTime();
// console.log(parseInt(date),index,parseInt(date1),(parseInt(date)-parseInt(date1)))
if (parseInt(date) - parseInt(date1) > 8640000) {
return this.factorial(time, index + 1);
} else {
time.splice(index, 1);
return this.factorial(time, index);
}
} else {
return time;
}
},
// 信号图表显示
quantityFunOne() {
var endDate = this.endDateOne;
var startDate = this.startDateOne;
var data = {
code: "logHeartbeat/rssiList",
data: {
pageNum: 1,
pageSize: 100000,
para: {
deviceNum: this.senddeviceNum,
startDate: startDate,
endDate: endDate,
}
},
};
httpPost(data, this.$api.sendCommand).then((res) => {
if (res.success) {
var optiondata = [],
seriesdata = [];
res.data.list.map((li, index) => {
li.createAt = moment(li.createAt).format("YYYY-MM-DD HH:mm:ss")
});
var array = this.factorial(res.data.list, 0);
array.map((li) => {
optiondata.push(li.createAt);
seriesdata.push(li.rssi);
});
this.myLine_option_one.xAxis.data = optiondata;
this.myLine_option_one.series[0].data = seriesdata;
this.$nextTick(() => {
this.initChartOne();
});
} else {
this.$message.error("数据错误");
}
});
},
getTimeDate(n) {
var currentDate = new Date()
var preDate = new Date(currentDate.getTime() + n * 24 * 3600 * 1000)
let year = currentDate.getFullYear()
let mon = currentDate.getMonth() + 1
let day = currentDate.getDay()
let s = year + '-' + (mon < 10 ? ('0' + mon) : mon) + '-' + (day < 10 ? ('0' + day) : day)
return s
},
// 信号图表显示
quantityFunThree() {
var data = {
code: "lockOnlineBattery/selectOnline",
data: {
deviceNum: this.senddeviceNum
},
};
httpPost(data, this.$api.sendCommand).then((res) => {
if (res.success) {
var optiondata = [],
seriesdata = [];
for (var i = 0; i < res.data.length; i++) {
var date = this.getTimeDate(i)
optiondata.push(date)
seriesdata.push(res.data.online[i])
}
this.myLine_option_one.xAxis.data = optiondata;
this.myLine_option_one.series[0].data = seriesdata;
this.$nextTick(() => {
this.initChartThree();
});
} else {
this.$message.error("数据错误");
}
});
},
keyDown(e) {
//如果是回车则执行登录方法
if (e.keyCode == 13) {
if (this.$route.name == 'doorLock') {
this.handleSearch();
}
}
},
// 解冻
thawMethods(index, row) {
this.$confirm("是否解冻该门锁?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
}).then(() => {
RequestSet.freeManageMethods(0, row, (callback) => {
if (callback.code == 200) {
this.$message.success("解冻指令下发成功")
} else {
this.$message.error("解冻失败")
}
})
})
},
// 冻结门锁
frozenMethods(index, row) {
RequestSet.freeManageMethods(1, row, (callback) => {
if (callback.code == 200) {
this.$message.success("冻结指令下发成功")
} else {
this.$message.error("冻结失败")
}
})
},
InputFun(e, name) {
if (name == 'startBattery' || name == 'endBattery') {
if (Number(e) < 0) {
e = 0
}
if (Number(e) > 100) {
e = 100
}
}
this.search[name] = e
},
selectTenantId(e) {
localStorage.setItem('tenantId', e)
this.reload()
},
// 重置初始化
resetInitialization(row, callback) {
if (row.manufactureId == 201 || row.manufactureId == 221) {
var data3 = {
code: "zg/deleteAllUsers",
data: {
lockerId: row.deviceNum,
imei: row.imei,
order: 6501,
},
};
httpPost(data3, this.$api.sendCommand).then((res) => {
if (res.success) {
this.$message.success("重置成功");
callback(true)
} else {
callback(false)
}
});
} else if (row.manufactureId == 101) {
var data2 = {
code: "isp/restoreSetting",
data: {
order: 6501,
imei: row.imei,
deviceNum: row.deviceNum,
managerTelephone: "18270949468",
managerPassword: "202108",
},
};
httpPost(data2, this.$api.sendCommand).then((res2) => {
if (res2.success) {
this.$message.success("重置成功");
var str = {
deviceNum: row.deviceNum,
imei: row.imei,
order: 6101,
};
httpPost(str, this.$api.getDeviceRegisterManager).then((res1) => {
var str1 = {
imei: row.imei, //row.imsi,
deviceNum: row.deviceNum, //row.deviceNum,
operateMode: 7,
is: true,
order: 6207,
passwordStartTime: "20210813010101",
passwordEndTime: "20680813010101",
};
httpPost(str1, this.$api.getDeviceOperateUserInfo).then((res2) => { });
var str2 = {
imei: row.imei, //row.imsi,
deviceNum: row.deviceNum, //row.deviceNum,
operateMode: 4,
is: true,
order: 6204,
passwordStartTime: "20210813010101",
passwordEndTime: "20680813010101",
};
httpPost(str2, this.$api.getDeviceOperateUserInfo).then((res3) => {
if (res3.success) {
this.$message.success("初始化成功");
callback(true)
}
});
});
} else {
this.$message.error(res2.msg);
callback(false)
}
});
}
},
getPersonCallback(person, alllist, callback) {
var personlist = []
person.map(li => {
var obj = {
person: li,
data: alllist.filter((item) => {
if (item.deviceNum && item.cardId == li.cardId) {
return item
}
})
}
personlist.push(obj)
})
callback(personlist)
},
setReset(row) {
if (row.manufactureId == 201 || row.manufactureId == 221) {
var data3 = {
code: "zg/deleteAllUsers",
data: {
lockerId: row.deviceNum,
imei: row.imei,
order: 6501,
cardName: this.userInfo.username,
roomName: row.roomName
},
};
httpPost(data3, this.$api.sendCommand).then((res) => {
if (res.success) {
this.$message.success("重置成功");
var q = {
id: row.roomId,
};
var tenant = {
q: JSON.stringify(q),
};
httpGet(tenant, this.$api.getSiteTenant).then((res) => {
Promise.all(
res.data.list.map((element) => {
return new Promise(function (resolve, reject) {
resolve(element.cardId);
});
})
).then((allId) => {
allId.map((li) => {
var str = [{
siteId: row.roomId,
cardId: li,
},];
httpPost(str, this.$api.unbindCard).then((res) => { });
});
})
})
} else {
this.$message.success(res.msg);
}
});
} else if (row.manufactureId == 101) {
var data2 = {
code: "isp/restoreSetting",
data: {
order: 6501,
imei: row.imei,
deviceNum: row.deviceNum,
managerTelephone: "18270949468",
managerPassword: "202108",
cardName: this.userInfo.username,
roomName: row.roomName
},
};
httpPost(data2, this.$api.sendCommand).then((res2) => {
if (res2.success) {
this.$message.success("重置成功");
var q = {
id: row.roomId,
};
var tenant = {
q: JSON.stringify(q),
};
httpGet(tenant, this.$api.getSiteTenant).then((res) => {
Promise.all(
res.data.list.map((element) => {
return new Promise(function (resolve, reject) {
resolve(element.cardId);
});
})
).then((allId) => {
var str = {
deviceNum: row.deviceNum,
imei: row.imei,
order: 6101,
};
httpPost(str, this.$api.getDeviceRegisterManager).then((res1) => {
var str1 = {
imei: row.imei, //row.imsi,
deviceNum: row.deviceNum, //row.deviceNum,
operateMode: 7,
is: true,
order: 6207,
passwordStartTime: "20210813010101",
passwordEndTime: "20680813010101",
};
httpPost(str1, this.$api.getDeviceOperateUserInfo).then((res2) => { });
var str2 = {
imei: row.imei, //row.imsi,
deviceNum: row.deviceNum, //row.deviceNum,
operateMode: 4,
is: true,
order: 6204,
passwordStartTime: "20210813010101",
passwordEndTime: "20680813010101",
};
httpPost(str2, this.$api.getDeviceOperateUserInfo).then((res3) => {
if (res3.success) {
this.$message.success("初始化成功");
}
});
});
allId.map((li) => {
var str = [{
siteId: row.roomId,
cardId: li,
},];
httpPost(str, this.$api.unbindCard).then((res) => { });
});
})
})
} else {
this.$message.error(res2.msg);
}
});
}
},
// 数据同步
dataSynchronization(index, row) {
console.log(row)
this.$confirm("是否确认数据同步?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
}).then(() => {
this.orderDeviceData(row)
})
},
sendPersonCerf(row, setPersonList, alllist) {
setPersonList.forEach(li => {
this.getPersonInfo(li, (callback) => {
if (callback.code == 200) {
if (callback.data.list.length > 0) {
var personli = callback.data.list[0]
if (row.manufactureId == 101) {
var alllistAll = alllist.filter(item => item.cardId == li)
var endTime = alllistAll[0].endTime * 1000
var startTime = alllistAll[0].startTime * 1000
var passwordEndTime = moment(endTime).format("YYYYMMDDHHmmss");
var passwordStartTime = moment(startTime).format("YYYYMMDDHHmmss");
var userTelephone = JSON.parse(personli.info).userTelephone;
var userPassword = JSON.parse(personli.info).userPassword;
var data = {
deviceNum: row.deviceNum,
imei: row.imei,
userTelephone: userTelephone,
userPassword: userPassword,
password: userPassword,
operateMode: 26,
order: 6226,
passwordStartTime: passwordStartTime,
passwordEndTime: passwordEndTime,
cardName: personli.name,
roomName: row.roomName
}
ICINLocker.LDAddUser(data.deviceNum, data.imei, data.userTelephone, data.userPassword, data
.password, passwordStartTime, passwordEndTime, data.operateMode, data.order, data
.cardName, data.roomName, false, (callback) => {
alllistAll.map(ll => {
utils.putCarfidAdd(row, ll)
})
})
} else if (row.manufactureId == 201 || row.manufactureId == 221) {
var alllistAll = alllist.filter(item => item.cardId == li)
var endTime = alllistAll[0].endTime * 1000
var startTime = alllistAll[0].startTime * 1000
var passwordEndTime = moment(endTime).format("YYYYMMDDHHmmss");
var passwordStartTime = moment(startTime).format("YYYYMMDDHHmmss");
var userTelephone = JSON.parse(personli.info).userTelephone;
var userPassword = JSON.parse(personli.info).userPassword;
var data = {
lockerId: row.deviceNum,
imei: row.imei,
lockerUserId: userPassword,
keyId: userPassword,
role: 0,
action: 1,
order: 6226,
cardName: personli.name,
roomName: row.roomName
};
ICINLocker.addUserToLock(data.lockerId, data.imei, data
.lockerUserId, data.role, data.action, data.order, data.cardName, data
.roomName, (callback) => {
console.log(callback, 'callback')
if (callback.success) {
alllistAll.map(ll => {
utils.putCarfidzgAdd(row, ll)
})
}
})
}
}
}
})
})
},
getPersonInfo(li, callback) {
var q = {
id: li,
};
var data = {
pageNum: 1,
pageSize: 10,
orderBy: "create_time desc",
q: JSON.stringify(q),
};
httpPost(data, this.$api.getlistNum).then((res1) => {
callback(res1)
})
},
// 获取指定锁所有非703凭证数据
orderDeviceData(row) {
var _this = this
if (row.roomId) {
var data1 = {
pageNum: 0,
pageSize: 0,
q: {
id: row.roomId
}
}
httpGet(data1, this.$api.getSiteTenant).then(res => {
if (res.success) {
var person = res.data.list
var data = {
pageNum: 0,
pageSize: 0,
orderBy: "create_at desc",
q: {
deviceNum: row.deviceNum,
types: "0,1,2,3,4",
inStatus: "0,1",
}
}
httpGet(data, this.$api.getCertificates).then(res1 => {
if (res1.success) {
var alllist = utils.zlib_unzip(res1.data)
this.getPersonCallback(person, alllist, (callback) => {
console.log(person, alllist, callback)
var personlist = callback
_this.resetInitialization(row, (callback1) => {
console.log(callback1, row)
if (row.manufactureId == 101) {
personlist.map(lt => {
var endTime = new Date(lt.person.endTime).getTime()
var startTime = new Date(lt.person.startTime).getTime()
var passwordEndTime = moment(endTime).format("YYYYMMDDHHmmss");
var passwordStartTime = moment(startTime).format("YYYYMMDDHHmmss");
var userTelephone = JSON.parse(lt.person.info).userTelephone;
var userPassword = JSON.parse(lt.person.info).userPassword;
var data = {
deviceNum: row.deviceNum,
imei: row.imei,
userTelephone: userTelephone,
userPassword: userPassword,
password: userPassword,
operateMode: 26,
order: 6226,
passwordStartTime: passwordStartTime,
passwordEndTime: passwordEndTime,
cardName: lt.person.name,
roomName: row.roomName
}
ICINLocker.LDAddUser(data.deviceNum, data.imei, data.userTelephone, data
.userPassword,
data
.password, passwordStartTime, passwordEndTime, data.operateMode, data
.order,
data
.cardName,
data.roomName, false, (callback) => {
lt.data.map(ll => {
utils.putCarfidAdd(row, ll)
})
})
})
} else if (row.manufactureId == 201 || row.manufactureId == 221) {
personlist.map(lt => {
var endTime = new Date(lt.person.endTime).getTime()
var startTime = new Date(lt.person.startTime).getTime()
var passwordEndTime = moment(endTime).format("YYYYMMDDHHmmss");
var passwordStartTime = moment(startTime).format("YYYYMMDDHHmmss");
var userTelephone = JSON.parse(lt.person.info).userTelephone;
var userPassword = JSON.parse(lt.person.info).userPassword;
var data = {
lockerId: row.deviceNum,
imei: row.imei,
lockerUserId: userPassword,
keyId: userPassword,
role: 0,
action: 1,
order: 6226,
cardName: lt.person.name,
roomName: row.roomName
};
ICINLocker.addUserToLock(data.lockerId, data.imei, data
.lockerUserId, data.role, data.action, data.order, data.cardName, data
.roomName, (
callback2) => {
if (callback2.success) {
lt.data.map(ll => {
utils.putCarfidzgAdd(row, ll)
})
}
})
})
}
})
})
} else {
this.$message.error(res1.msg)
}
})
} else {
this.$message.error(res.msg)
}
})
} else {
this.$message.error("暂无数据")
}
},
// 从paas同步能对应得上的有效凭证
syncCommands() {
httpGet('', this.$api.syncCommands).then(res => { })
},
// 同步刷新
refreshFun() {
httpGet("", this.$api.lockDeviceInfoList).then((res) => {
this.handleSearch()
});
},
// 选择房源
checkNode(e) {
this.checkNodeId = e
var options = this.options
var arr = this.getId(options, e[e.length - 1])
console.log(arr)
var listarr = [arr[0]]
var obj = this.getNodeId(listarr)
this.checkNodeId = obj
},
checkNodeOne(e) {
this.checkNodeId1 = e[e.length - 1]
this.checkRoomDevice(e[e.length - 1])
},
checkRoomDevice(id) {
var q = {
roomIds: [id],
lockType: 1
};
var data = {
q: JSON.stringify(q),
pageNum: 1,
pageSize: this.pageSize,
};
httpPost(data, this.$api.getDeviceItems).then((res) => {
if (res.data.list.length > 0) {
this.$message.error("该房间已绑定锁,请重新选择")
this.checkNodeId1 = ''
}
});
},
getParentId(list, id) {
for (let i in list) {
if (list[i].id == id) {
return [list[i]]
}
if (list[i].children) {
let node = this.getParentId(list[i].children, id);
if (node !== undefined) {
return node.concat(list[i])
}
}
}
},
getId(list, id) {
for (let i in list) {
if (list[i].id == id) {
return [list[i]]
}
if (list[i].children) {
let node = this.getParentId(list[i].children, id);
if (node !== undefined) {
return node;
}
}
}
},
getNodeId(list, newNodeId = []) {
for (let i in list) {
newNodeId.push(list[i].id)
if (list[i].children) {
this.getNodeId(list[i].children, newNodeId);
}
}
return newNodeId;
},
getallTree() {
var data = {};
httpGet(data, this.$api.getTree).then((res) => {
var userlist = [];
var temp = {},
arr = [];
res.data.forEach((item, index) => {
if (!temp[item.id]) {
arr.push(item);
temp[item.id] = true;
}
});
arr.map((li) => {
if (li.expand) {
if (JSON.parse(li.expand).type == "0") {
userlist.push(li);
}
}
});
var list = res.data.sort((pre, cur) => pre.id - cur.id)
var arrdata = uniqueArray1(list, "id")
this.options = ztreeToElementTree(arrdata, {});
this.zNodes = this.options
});
},
// 获取门卡概况
getcard() {
RequestSet.getAnalysis("", 1, (callback) => {
this.analysisData = callback
this.sumpageTotal = callback.total
this.online = callback.onlineTotal
this.unonline = callback.offlineTotal
this.abnormal = callback.isAppBind
this.lowBattery = callback.batteryLevel1
})
},
// 发送离线密码
sendEmergence() {
var re = /^1\d{10}$/
if (re.test(this.Emergence.EmerPhone)) {
var data = {
code: this.Emergence.password,
phone: this.Emergence.EmerPhone,
device: this.Emergence.device,
name: this.Emergence.name
}
httpPost(data, this.$api.sendEmergence).then(res => {
if (res.success) {
this.$message.success('发送成功')
} else {
this.$message.error('发送失败')
}
})
this.getEmergenceStatus = false
} else {
this.$message.error('请填写正确手机号')
}
},
handleCheckChange(data, checked, node) {
if (checked) {
this.treedata = data
} else {
if (this.checkedId == data.id) {
this.$refs.tree.setCheckedKeys([data.id]);
}
}
},
// 临时密码
getEmergence(index, row) {
var data = {
code: "zg/getEmergence",
data: {
lockerId: row.deviceNum
},
}
httpPost(data, this.$api.sendCommand).then(res => {
if (res.success) {
this.$message.success("获取成功")
this.Emergence.password = res.data.data
this.Emergence.device = row.deviceNum
this.Emergence.name = row.roomName
this.getEmergenceStatus = true
} else {
this.$message.error("获取失败")
}
})
},
// input视图刷新
changesr(e) {
this.$forceUpdate();
},
handleSelectionChange1(val) {
this.multipleSelection1 = val;
},
BatchAdd() {
this.uploadkj = true;
},
//批量添加确认
batchUploadfun() {
if (this.batchAccess == "") {
this.$message.error("请选择运营商");
} else if (this.multipleSelection1.length == 0) {
this.$message.error("请勾选要批量添加的设备");
} else {
this.multipleSelection1.map((li, index) => {
var str = {
deviceNum: li.deviceNum,
imei: li.imei,
imsi: li.imei, //row.imsi,
order: 5101,
platformId: this.batchAccess,
enterpriseId: this.userInfo.enterpriseId,
manufactureId: this.manufacturer
};
RequestSet.RegisterDevice(str, (callback) => {
if (callback.success) {
this.$message.success("添加成功")
this.editVisible = false;
this.getdevice();
} else {
this.$message.error(callback.message)
}
})
})
}
},
//音量设置
stepFun(val) {
var operate = "00";
if (val == '0') {
operate = "00";
} else if (val == 1) {
operate = "01";
} else if (val == 2) {
operate = "02";
}
var data = {
code: "isp/volumnSetting",
data: {
imei: this.formInline.imei,
deviceNum: this.formInline.deviceNum,
operate: operate,
order: 61001
},
};
httpPost(data, this.$api.sendCommand).then((res2) => {
if (res2.data.success) {
this.$message.success("设置成功");
} else {
this.$message.error(res.msg);
}
});
},
batchSetOpenMethods() {
this.setopenStatus = true
},
// 取消常开设置
UnsetMethods(e) {
if (this.startHour > 24 || this.startHour < 0) {
this.$message.error('请选择正确的开始时间段');
return
} else if (this.endHour > 24 || this.endHour < 0) {
this.$message.error('请选择正确的结束时间段');
return
}
if (e == 1) {
var multipleSelection = []
multipleSelection.push(this.formInline)
multipleSelection.map(li => {
var data = {
code: "zg/longopen/operation",
data: {
order: 61101,
roomName: li.roomName,
opendDoorType: 0,
imei: li.imei,
lockerId: li.deviceNum,
lockerUserId: li.iotId,
startTime: moment(this.opendTime[0]).format('YYYY-MM-DD HH:mm:ss'),
endTime: moment(this.opendTime[1]).format('YYYY-MM-DD HH:mm:ss'),
openDoorSegmentList: [{
startHour: this.startHour,
endHour: this.endHour
},
// {
// startHour: 23,
// endHour: 24
// },
]
}
}
httpPost(data, this.$api.sendCommand).then((res2) => {
if (res2.success) {
this.$message.success("取消设置成功");
} else {
this.$message.error(res2.msg);
}
});
})
} else if (e == 2) {
var multipleSelection = this.multipleSelection
multipleSelection.map(li => {
var data = {
code: "zg/longopen/operation",
data: {
order: 61101,
roomName: li.roomName,
opendDoorType: 0,
lockerId: li.deviceNum,
lockerUserId: li.iotId,
startTime: moment(this.opendTime[0]).format('YYYY-MM-DD HH:mm:ss'),
endTime: moment(this.opendTime[1]).format('YYYY-MM-DD HH:mm:ss'),
openDoorSegmentList: [{
startHour: this.startHour,
endHour: this.endHour
},
// {
// startHour: 23,
// endHour: 24
// },
]
}
}
httpPost(data, this.$api.sendCommand).then((res2) => {
if (res2.success) {
this.$message.success("取消设置成功");
} else {
this.$message.error(res2.msg);
}
});
})
}
},
setNormallyOpenMethodsAll() {
if (this.startHour > 24 || this.startHour < 0) {
this.$message.error('请选择正确的开始时间段');
return
} else if (this.endHour > 24 || this.endHour < 0) {
this.$message.error('请选择正确的结束时间段');
return
}
if (this.opendTime[0] == '') {
this.$message.error('请选择开始日期');
return
}
if (this.opendTime[1] == '') {
this.$message.error('请选择结束日期');
return
}
if (this.startHour != '' && this.endHour == '') {
this.$message.error('请选择结束时间段');
return
}
if (this.startHour == '' && this.endHour != '') {
this.$message.error('请选择开始时间段');
return
}
this.multipleSelection.map(li => {
if (li.manufactureId == 201 || li.manufactureId == 221) {
if (li.iotId) {
var data = {
code: "zg/longopen/operation",
data: {
order: 61101,
roomName: li.roomName,
opendDoorType: 1,
lockerId: li.deviceNum,
imei: li.imei,
lockerUserId: li.iotId,
startTime: moment(this.opendTime[0]).format('YYYY-MM-DD HH:mm:ss'),
endTime: moment(this.opendTime[1]).format('YYYY-MM-DD HH:mm:ss'),
openDoorSegmentList: [{
startHour: this.startHour,
endHour: this.endHour
},
]
}
}
if (this.startHour == '' && this.endHour == '') {
data.data.openDoorSegmentList = []
}
httpPost(data, this.$api.sendCommand).then((res2) => {
if (res2.success) {
this.$message.success("设置成功");
this.getAlwaysOpens()
} else {
this.$message.error(res2.msg);
}
});
} else {
this.$message.error('需要超管才可设置常开')
}
} else {
this.$message.error('该类型锁不支持此设置!');
}
})
setTimeout(() => {
this.setopenStatus = false
}, 2000)
},
// ZH常开
setNormallyOpenMethods() {
if (this.startHour > 24 || this.startHour < 0) {
this.$message.error('请选择正确的开始时间段');
return
} else if (this.endHour > 24 || this.endHour < 0) {
this.$message.error('请选择正确的结束时间段');
return
}
if (this.formInline.manufactureId == 201 || this.formInline.manufactureId == 221) {
if (this.opendTime[0] == '') {
this.$message.error('请选择开始日期');
return
}
if (this.opendTime[1] == '') {
this.$message.error('请选择结束日期');
return
}
if (this.startHour != '' && this.endHour == '') {
this.$message.error('请选择结束时间段');
return
}
if (this.startHour == '' && this.endHour != '') {
this.$message.error('请选择开始时间段');
return
}
var data = {
code: "zg/longopen/operation",
data: {
order: 61101,
opendDoorType: 1,
roomName: this.formInline.roomName,
lockerUserId: this.formInline.iotId,
lockerId: this.formInline.deviceNum,
startTime: moment(this.opendTime[0]).format('YYYY-MM-DD HH:mm:ss'),
endTime: moment(this.opendTime[1]).format('YYYY-MM-DD HH:mm:ss'),
openDoorSegmentList: [{
startHour: this.startHour,
endHour: this.endHour
},
// {
// startHour: 23,
// endHour: 24
// },
]
}
}
console.log(data)
if (this.startHour == '' && this.endHour == '') {
data.data.openDoorSegmentList = []
}
httpPost(data, this.$api.sendCommand).then((res2) => {
if (res2.success) {
this.$message.success("设置成功");
this.getAlwaysOpens()
} else {
this.$message.error(res2.msg);
}
});
} else {
this.$message.error('该类型锁不支持此设置!');
}
},
// 常开设置
switchFun(e) {
if (this.formInline.manufactureId == 101) {
var data = {};
this.formInline.isAlwaysOpenStatus = e
if (e) {
this.switchtext = "开";
data = {
code: "isp/alwaysOpenSetting",
data: {
imei: this.formInline.imei,
deviceNum: this.formInline.deviceNum,
operate: 1,
roomName: this.formInline.roomName,
order: 61101
},
};
} else {
this.switchtext = "关";
data = {
code: "isp/alwaysOpenSetting",
data: {
imei: this.formInline.imei,
deviceNum: this.formInline.deviceNum,
operate: 0,
roomName: this.formInline.roomName,
order: 61101
},
};
}
httpPost(data, this.$api.sendCommand).then((res2) => {
if (res2.success) {
this.$message.success("设置成功");
this.getAlwaysOpens()
} else {
this.$message.error(res2.msg);
}
});
} else if (this.formInline.manufactureId == 201 || this.formInline.manufactureId == 221) {
// this.$message.success("该类型锁请通过蓝牙设置声音");
}
},
// 关闭侧边栏
handleClose() {
this.drawer = false;
},
// tabs标签页切换
handleClick(tab, event) {
this.commpontentStatus = true
},
//查看门锁详情
detailsFun(index, row) {
this.drawer = true;
if (row.isAlwaysOpen == 0) {
row.isAlwaysOpenStatus = false
} else if (row.isAlwaysOpen == 1) {
row.isAlwaysOpenStatus = true
}
this.formInline = row;
this.sendStatus = false
this.$nextTick(function () {
this.sendroomId = row.deviceNum
this.senddeviceNum = row.deviceNum
this.sendDevice = row
this.sendStatus = true
this.quantityFun()
this.quantityFunOne()
this.getAlwaysOpens()
// this.quantityFunThree()
})
},
Reset1(index, row) {
var data2 = {
code: "isp/restoreSetting",
data: {
order: 6501,
imei: row.imei,
deviceNum: row.deviceNum,
managerTelephone: "18270949468",
managerPassword: "202108",
},
};
httpPost(data2, this.$api.sendCommand).then((res2) => {
// if (res2.data.success) {
// this.$message.success("重置成功");
// } else {
// this.$message.error(res.msg);
// }
});
},
// 重置门锁
Reset(index, row) {
this.$confirm("是否确认重置门锁?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
}).then(() => {
if (row.manufactureId == 201 || row.manufactureId == 221) {
var data3 = {
code: "zg/deleteAllUsers",
data: {
lockerId: row.deviceNum,
imei: row.imei,
order: 6501,
cardName: this.userInfo.username,
roomName: row.roomName
},
};
httpPost(data3, this.$api.sendCommand).then((res) => {
if (res.success) {
this.$message.success("重置成功");
var q = {
id: row.roomId,
};
var tenant = {
q: JSON.stringify(q),
};
httpGet(tenant, this.$api.getSiteTenant).then((res) => {
Promise.all(
res.data.list.map((element) => {
return new Promise(function (resolve, reject) {
resolve(element.cardId);
});
})
).then((allId) => {
allId.map((li) => {
var str = [{
siteId: row.roomId,
cardId: li,
},];
httpPost(str, this.$api.unbindCard).then((res) => { });
});
})
})
} else {
this.$message.success(res.msg);
}
});
} else if (row.manufactureId == 101) {
var data2 = {
code: "isp/restoreSetting",
data: {
order: 6501,
imei: row.imei,
deviceNum: row.deviceNum,
managerTelephone: "18270949468",
managerPassword: "202108",
cardName: this.userInfo.username,
roomName: row.roomName
},
};
httpPost(data2, this.$api.sendCommand).then((res2) => {
if (res2.success) {
this.$message.success("重置成功");
var q = {
id: row.roomId,
};
var tenant = {
q: JSON.stringify(q),
};
httpGet(tenant, this.$api.getSiteTenant).then((res) => {
Promise.all(
res.data.list.map((element) => {
return new Promise(function (resolve, reject) {
resolve(element.cardId);
});
})
).then((allId) => {
allId.map((li) => {
var str = [{
siteId: row.roomId,
cardId: li,
},];
httpPost(str, this.$api.unbindCard).then((res) => { });
});
})
})
} else {
this.$message.error(res2.msg);
}
});
}
});
},
activeiconfun(t) {
this.activeiconfont = t;
},
// 查询设备电量和信号
getresult() {
var data = {};
},
// 输入远程开锁密码确认
Unlockingsave() { },
// 远程开锁
RemoteUnlocking(index, row) {
var str2 = {
imei: row.imei,
openLockType: 2,
is: true,
roomName: row.roomName,
roomId: row.roomId,
cardName: this.userInfo.username
};
httpPost(str2, this.$api.openLock).then((res3) => {
if (res3.success) {
this.$message.success("开锁成功!");
this.Unlocking = false;
} else {
this.$message.error("开锁失败!");
}
});
},
// 批量初始化
batchInit() {
if (this.multipleSelection.length == 0) {
this.$message.error("请选择初始化设备");
return;
}
this.$confirm("确定要批量初始化吗?", "提示", {
type: "warning",
})
.then(() => {
this.multipleSelection.map(row => {
if (row.manufactureId == 101) {
var str = {
deviceNum: row.deviceNum,
imei: row.imei,
order: 6101,
};
httpPost(str, this.$api.getDeviceRegisterManager).then((res1) => {
if (res1.data.success) {
var str1 = {
imei: row.imei, //row.imsi,
deviceNum: row.deviceNum, //row.deviceNum,
operateMode: 7,
is: true,
order: 6207,
pass: false,
passwordStartTime: "20210813010101",
passwordEndTime: "20680813010101",
};
httpPost(str1, this.$api.getDeviceOperateUserInfo).then((res2) => { });
var str2 = {
imei: row.imei, //row.imsi,
deviceNum: row.deviceNum, //row.deviceNum,
operateMode: 4,
is: true,
order: 6204,
pass: false,
passwordStartTime: "20210813010101",
passwordEndTime: "20680813010101",
};
httpPost(str2, this.$api.getDeviceOperateUserInfo).then((res3) => {
if (res3.success) {
this.$message.success("初始化成功");
}
});
} else {
this.$message.error(res1.data.msg)
}
});
}
})
})
},
// 重置添加管理员
AddAdministrator(index, row) {
this.$confirm("确定要初始化吗?", "提示", {
type: "warning",
})
.then(() => {
var str = {
deviceNum: row.deviceNum,
imei: row.imei,
order: 6101,
};
httpPost(str, this.$api.getDeviceRegisterManager).then((res1) => {
if (res1.data.success) {
var str1 = {
imei: row.imei, //row.imsi,
deviceNum: row.deviceNum, //row.deviceNum,
operateMode: 7,
is: true,
order: 6207,
pass: false,
passwordStartTime: "20210813010101",
passwordEndTime: "20680813010101",
};
httpPost(str1, this.$api.getDeviceOperateUserInfo).then((res2) => { });
var str2 = {
imei: row.imei, //row.imsi,
deviceNum: row.deviceNum, //row.deviceNum,
operateMode: 4,
is: true,
order: 6204,
pass: false,
passwordStartTime: "20210813010101",
passwordEndTime: "20680813010101",
};
httpPost(str2, this.$api.getDeviceOperateUserInfo).then((res3) => {
if (res3.success) {
this.$message.success("初始化成功");
}
});
} else {
this.$message.error(res1.data.msg)
}
});
})
},
// 添加设备
initialization() {
if (this.checkNodeId1 == '') {
this.$message.error("请选择房间");
} else {
if (this.form.manufacturer == 101 || this.form.manufacturer == 1201 || this.form.manufacturer == 1241) {
if (
this.form.deviceNum == "" ||
this.form.v == "" ||
this.form.platformId == ""
) {
this.$message.error("请填写完整信息");
} else {
var data = {}
var data = {
deviceNum: this.form.deviceNum,
imei: this.form.imei,
imsi: this.form.imei, //row.imsi,
order: 5101,
enterpriseId: this.userInfo.enterpriseId,
platformId: this.form.platformId,
manufactureId: this.form.manufacturer,
};
RequestSet.RegisterDevice(data, (callback) => {
if (callback.data.success && callback.success) {
var data = [{
siteId: this.checkNodeId1,
deviceId: callback.data.id,
}];
httpPost(data, this.$api.bindDeviceSite).then((res) => {
if (res.success) {
this.$message.success("绑定成功");
this.editVisible = false
if (this.form.manufacturer == 1241) {
let data3 = {
code: "lwj/registerSupperAdmin",
data:{
lockerId: this.form.deviceNum,
lockerSuperAdminId: this.form.TockerSuperAdminId,
bluetoothMac: this.form.LockMac
}
}
httpPost(data3, this.$api.sendCommand).then(res => {
console.log(res);
if(res.success) {
this.$message.success('注册成功')
}else{
this.$message.error('注册失败,请稍后再试')
}
})
}
}
this.getdevice();
}).catch((error) => {
this.$message.error(`绑定失败`);
});
this.$message.success(res.data.msg);
this.editVisible = false;
this.getdevice();
} else {
this.$message.error(callback.data.msg)
}
})
}
} else if(this.form.manufacturer == 201 || this.form.manufacturer == 221) {
var data = {
lockerId: this.form.lockerId,
imei: this.form.imei,
customerCode: this.form.customerCode,
lockerSuperAdminId: this.form.lockerSuperAdminId,
authKey: this.form.authKey,
type: this.form.type,
manufactureId: this.form.manufacturer,
enterpriseId: this.userInfo.enterpriseId,
order: 5101,
};
RequestSet.RegisterDevice(data, (callback) => {
if (callback.data.success && callback.success) {
var data = [{
siteId: this.checkNodeId1,
deviceId: callback.data.id,
}];
httpPost(data, this.$api.bindDeviceSite)
.then((res) => {
if (res.success) {
this.$message.success("绑定成功");
this.editVisible = falsethis.editVisible = false
this.getdevice();
}
})
.catch((error) => {
this.$message.error(`绑定失败`);
});
this.$message.success("添加成功");
this.editVisible = false;
this.getdevice();
} else {
this.$message.error(callback.data.msg);
}
})
} else if (this.form.manufacturer == 701) {
var data = {
deviceNum: this.form.deviceNum,
validateCode: this.form.validateCode,
manufactureId: this.form.manufacturer,
enterpriseId: this.userInfo.enterpriseId,
}
RequestSet.RegisterDevice(data, (callback) => {
if (callback.data.success && callback.success) {
var data = [{
siteId: this.checkNodeId1,
deviceId: callback.data.id,
}];
httpPost(data, this.$api.bindDeviceSite)
.then((res) => {
if (res.success) {
this.$message.success("绑定成功");
this.editVisible = false
this.getdevice();
}
})
.catch((error) => {
this.$message.error(`绑定失败`);
});
this.$message.success("添加成功");
this.editVisible = false;
this.getdevice();
} else {
this.$message.error(callback.data.msg);
}
})
} else if (this.form.manufacturer == 1241) {
if (this.form.deviceNum == "") {
this.$message.error("请填写完整信息")
} else {
var data = {
deviceNum: this.form.deviceNum,
imei: "",
imsi: "",
platformId: 9,
manufactureId: 1241
}
RequestSet.RegisterDevice(data, (callback) => {
if (callback.data.success && callback.success) {
console.log(callback);
var data = [{
siteId: this.checkNodeId1,
deviceId: callback.data.id
}]
httpPost(data, this.$api.bindDeviceSite).then(res => {
console.log(res);
if (res.success) {
this.$message.success("绑定成功")
this.editVisible = false
this.getdevice()
}
}).catch(error => {
this.$message.error("绑定失败", error)
})
// this.$message.success(res.data.msg)
// this.editVisible = false
// this.getdevice();
} else {
this.$message.error(callback.data.msg)
}
})
}
}
}
},
// 选择绑定房间
onClick: function (evt, treeId, treeNode) {
// 点击事件
this.treedata = treeNode;
},
// 获取绑定所有房间
getalllist() {
var data = {};
httpGet(data, this.$api.getTree).then((res) => {
var array = uniqueArray(res.data, "id");
this.zNodes = ztreeToElementTree(array, {});
});
},
// 获取设备
getdevice() {
var q = {
isOnline: this.search.isOnline,
roomName: this.search.roomname,
roomIds: this.checkNodeId,
startBattery: this.search.startBattery,
endBattery: this.search.endBattery,
lockType: 1,
unBind: this.search.unBind,
firmwareVersion: this.search.firmwareVersion,
isUsed: this.search.isUsed,
iccid: this.search.iccid,
rssiStart: this.search.rssiStart,
rssiEnd: this.search.rssiEnd,
createStart: this.search.createStart,
createEnd: this.search.createEnd,
isAppBind: this.search.isAppBind
};
if (q.isOnline == 2) {
delete q.isOnline
}
let qObject = utils.validObject(q)
var data = {
q: JSON.stringify(qObject),
pageNum: 1,
pageSize: 10
};
httpPost(data, this.$api.getDeviceItems).then((res) => {
var online = 0,
unonline = 0,
devIds = "";
res.data.list.map((li) => {
if (li.isOnline == 1) {
online++;
} else if (li.isOnline == 0) {
unonline++;
}
let accessPlatform = this.accessPlatform.show.filter(item => item.code == li.accessPlatform)[0]
if (accessPlatform) {
li['accessPlatformText'] = accessPlatform.desc
} else {
li['accessPlatformText'] = ''
}
let deviceType = this.accessPlatform.deviceType.filter(item => item.code == li.manufactureId)[0]
if (deviceType) {
li['manufactureIdText'] = deviceType.desc
} else {
li['manufactureIdText'] = ''
}
li.createAt = moment(li.createAt).format("YYYY-MM-DD HH:mm:ss");
if (li.lastReportAt) {
li.lastReportAt = moment(li.lastReportAt).format("YYYY-MM-DD HH:mm:ss");
} else {
li['lastReportAt'] = ''
}
devIds += li.deviceNum + ",";
});
var newArr = uniqueArray(res.data.list, "id");
this.tableData = newArr;
this.currentPage4 = 1;
this.pageTotal = res.data.total;
});
},
timestampToTime(cjsj) {
var date = new Date(cjsj); //时间戳为10位需*1000,时间戳为13位的话不需乘1000
var Y = date.getFullYear() + "-";
var M =
(date.getMonth() + 1 < 10 ?
"0" + (date.getMonth() + 1) :
date.getMonth() + 1) + "-";
var D = date.getDate() + " ";
var h = date.getHours() + ":";
var m = date.getMinutes() + ":";
var s = date.getSeconds();
return Y + M + D + h + m + s;
},
handleChange(value) {
console.log(value);
},
restSearch() {
this.search = {
name: "",
deviceNum: "",
roomname: '',
imei: "",
isOnline: "",
unBind: '',
startBattery: '',
endBattery: '',
firmwareVersion: '',
operationStatus: ''
}
this.checkNodeId = ''
this.searchRoom = ''
this.handleSearch()
},
// 设备状态统计筛选
screenStatisticsItemsMethods(data) {
httpPost(data, this.$api.screenStatisticsItems).then(res => {
console.log(res);
if (res.code == 200) {
var sumpageTotal = 0, online = 0, unonline = 0, abnormal = 0
res.data.map(li => {
if (li.isAppBind == 1) {
abnormal++
}
if (li.isOnline == '0') {
unonline++
}
if (li.isOnline == '1') {
online++
}
})
this.sumpageTotal = res.data.length
this.online = online
this.unonline = unonline
this.abnormal = abnormal
}
})
},
// 触发搜索按钮
handleSearch() {
var deviceNum = this.search.deviceNum.replace(/\s*/g, "");
var imei = this.search.imei.replace(/\s*/g, "");
if (this.search.isOnline == 2) {
this.search.isAppBind = 1
} else {
this.search.isAppBind = ''
}
var q = {
deviceNum: deviceNum,
imei: imei,
isOnline: this.search.isOnline,
roomName: this.search.roomname,
roomIds: this.checkNodeId,
startBattery: this.search.startBattery,
endBattery: this.search.endBattery,
lockType: 1,
unBind: this.search.unBind,
firmwareVersion: this.search.firmwareVersion,
isUsed: this.search.isUsed,
iccid: this.search.iccid,
rssiStart: this.search.rssiStart,
rssiEnd: this.search.rssiEnd,
createStart: this.search.createStart,
createEnd: this.search.createEnd,
isAppBind: this.search.isAppBind
};
if (q.isOnline == 2) {
delete q.isOnline
}
let qObject = utils.validObject(q)
let data = {
q: JSON.stringify(qObject),
pageNum: 1,
pageSize: this.pageSize,
};
this.screenStatisticsItemsMethods(data)
httpPost(data, this.$api.getDeviceItems).then((res) => {
if (res.data.list.length > 0) {
res.data.list.map((li) => {
var accessPlatform = this.accessPlatform.show.filter(item => item.code == li.accessPlatform)[0]
if (accessPlatform) {
li['accessPlatformText'] = accessPlatform.desc
} else {
li['accessPlatformText'] = ''
}
let deviceType = this.accessPlatform.deviceType.filter(item => item.code == li.manufactureId)[0]
if (deviceType) {
li['manufactureIdText'] = deviceType.desc
} else {
li['manufactureIdText'] = ''
}
li.createAt = moment(li.createAt).format("YYYY-MM-DD HH:mm:ss");
if (li.lastReportAt) {
li.lastReportAt = moment(li.lastReportAt).format("YYYY-MM-DD HH:mm:ss");
} else {
li['lastReportAt'] = ''
}
});
var newArr = uniqueArray(res.data.list, "id");
this.pageTotal = res.data.total
this.tableData = newArr;
} else {
this.tableData = [];
this.pageTotal = 0
}
this.currentPage4 = 1;
this.$store.commit("increment", 1);
});
// this.$set(this.query, "pageIndex", 1);
},
// 删除操作
handleDelete(index) {
// 二次确认删除
this.$confirm("确定要删除吗?", "提示", {
type: "warning",
})
.then(() => {
this.$message.success("删除成功");
this.tableData.splice(index, 1);
})
.catch(() => { });
},
// 多选操作
handleSelectionChange(val) {
this.multipleSelection = val;
},
// 批量远程开锁
batchRemoteUnlocking() {
this.$confirm("确定要批量远程开锁吗?", "提示", {
type: "warning",
})
.then(() => {
this.multipleSelection.map(li => {
if (li.manufactureId == 101) {
var str2 = {
imei: li.imei,
openLockType: 2,
is: true,
roomName: li.roomName,
roomId: li.roomId,
cardName: this.userInfo.username
};
httpPost(str2, this.$api.openLock).then((res3) => {
if (res3.success) {
this.$message.success("开锁成功!");
} else {
this.$message.error("开锁失败!");
}
});
}
})
})
},
delAllSelection() {
const length = this.multipleSelection.length;
let str = "";
this.delList = this.delList.concat(this.multipleSelection);
for (let i = 0; i < length; i++) {
str += this.multipleSelection[i].name + " ";
}
this.$message.error(`删除了${str}`);
this.multipleSelection = [];
},
// 删除设备
deleteLock(index, row) {
this.$confirm("确定要删除吗?", "提示", {
type: "warning",
})
.then(() => {
// if (row.manufactureId == 101) {
if (row.roomId) {
var q = {
id: row.roomId,
};
var tenant = {
q: JSON.stringify(q),
};
httpGet(tenant, this.$api.getSiteTenant).then((res) => {
Promise.all(
res.data.list.map((element) => {
return new Promise(function (resolve, reject) {
resolve(element.cardId);
});
})
).then((allId) => {
var str = []
allId.map((li) => {
var obj = {
siteId: row.roomId,
cardId: li,
}
str.push(obj)
});
if (str.length > 0) {
httpPost(str, this.$api.unbindCard).then((res) => { });
}
var data1 = [{
siteId: row.roomId,
deviceId: row.id,
}];
httpPost(data1, this.$api.unbindDeviceSite).then((res) => {
if (res.success) {
this.$message.success("解绑成功");
var data = {
deviceNum: row.deviceNum,
imei: row.imei,
order: 5102
}
RequestSet.DeleteDevic(data, row.manufactureId, (callback => {
if (callback.success) {
this.getdevice();
this.$message.success('删除成功');
} else {
this.getdevice();
this.$message.error(callback.msg);
}
}))
} else {
this.getdevice();
this.$message.error(`解绑失败`);
}
});
})
})
} else {
var data = {
deviceNum: row.deviceNum,
imei: row.imei,
order: 5102,
};
RequestSet.DeleteDevic(data, row.manufactureId, (callback) => {
if (callback.success) {
this.$message.success("删除成功");
this.getdevice();
} else {
this.getdevice();
this.$message.error(callback.msg);
}
})
}
}).catch((err) => {
this.getdevice();
this.$message.error(err.msg);
});
},
// 绑定房间
bindRoom(index, row) {
this.bromm = row;
this.roomVisible = true;
this.$refs.tree.setCheckedKeys([]);
},
// 确定绑定
bindsave() {
var treedata = this.treedata;
this.roomVisible = false;
var data = [{
siteId: treedata.id,
deviceId: this.bromm.id,
},];
httpPost(data, this.$api.bindDeviceSite)
.then((res) => {
if (res.success) {
this.$message.success("绑定成功");
this.getdevice();
}
})
.catch((error) => {
this.$message.error(`绑定失败`);
});
},
unbindsave(index, row) {
var data = [{
siteId: row.roomId,
deviceId: row.id,
},];
var q = {
id: row.roomId,
};
var tenant = {
q: JSON.stringify(q),
};
// 二次确认解绑
this.$confirm("确定要解绑吗?", "提示", {
type: "warning",
})
.then(() => {
// this.Reset(index, row)
httpGet(tenant, this.$api.getSiteTenant).then((res) => {
Promise.all(
res.data.list.map((element) => {
return new Promise(function (resolve, reject) {
resolve(element.cardId);
});
})
).then((allId) => {
allId.map((li) => {
var str = [{
siteId: row.roomId,
cardId: li,
},];
httpPost(str, this.$api.unbindCard).then((res) => { });
});
httpPost(data, this.$api.unbindDeviceSite).then((res) => {
if (res.success) {
this.$message.success("解绑成功");
this.getdevice();
} else {
this.$message.error(`解绑失败`);
}
});
});
});
})
.catch(() => { });
},
addequipment() {
this.form.customerCode = this.$store.state.customerCode;
this.editVisible = true;
},
// 编辑操作
handleEdit(index, row) {
this.idx = index;
this.form = row;
this.editVisible = true;
},
// 保存编辑
saveEdit() {
this.editVisible = false;
},
handleSizeChange(val) {
console.log(`每页 ${val}`);
this.$router.replace({
path: this.$route.path,
query: {
page: this.$route.query.page ? this.$route.query.page : 1,
pageSize: val,
},
});
this.pageSize = val
this.getlistNum(0, val);
},
getlistNum(val, size) {
var deviceNum = this.search.deviceNum.replace(/\s*/g, "");
var imei = this.search.imei.replace(/\s*/g, "");
var q = {
deviceNum: deviceNum,
imei: imei,
isOnline: this.search.isOnline,
roomName: this.search.roomname,
roomIds: this.checkNodeId,
startBattery: this.search.startBattery,
endBattery: this.search.endBattery,
lockType: 1,
unBind: this.search.unBind,
firmwareVersion: this.search.firmwareVersion,
isUsed: this.search.isUsed,
iccid: this.search.iccid,
rssiStart: this.search.rssiStart,
rssiEnd: this.search.rssiEnd,
createStart: this.search.createStart,
createEnd: this.search.createEnd,
isAppBind: this.search.isAppBind
};
if (q.isOnline == 2) {
delete q.isOnline
}
var qObject = utils.validObject(q)
var data = {
q: JSON.stringify(qObject),
pageNum: val,
pageSize: size,
};
httpPost(data, this.$api.getDeviceItems).then((res) => {
res.data.list.map((li) => {
var accessPlatform = this.accessPlatform.show.filter(item => item.code == li.accessPlatform)[0]
if (accessPlatform) {
li['accessPlatformText'] = accessPlatform.desc
} else {
li['accessPlatformText'] = ''
}
let deviceType = this.accessPlatform.deviceType.filter(item => item.code == li.manufactureId)[0]
if (deviceType) {
li['manufactureIdText'] = deviceType.desc
} else {
li['manufactureIdText'] = ''
}
li.createAt = moment(li.createAt).format("YYYY-MM-DD HH:mm:ss");
if (li.lastReportAt) {
li.lastReportAt = moment(li.lastReportAt).format("YYYY-MM-DD HH:mm:ss");
} else {
li['lastReportAt'] = ''
}
});
var newArr = uniqueArray(res.data.list, "id");
this.tableData = newArr;
this.pageTotal = res.data.total;
});
},
// 分页导航
handlePageChange(val) {
// this.$router.replace({
// path: this.$route.path,
// query: {
// page: this.$route.query.page ? this.$route.query.page : 1,
// pageSize: val,
// },
// });
this.pageNum = val
this.$store.commit("increment", val);
var q = {
deviceNum: this.search.deviceNum,
imei: this.search.imei,
isOnline: this.search.isOnline,
roomName: this.search.roomname,
roomIds: this.checkNodeId,
startBattery: this.search.startBattery,
endBattery: this.search.endBattery,
lockType: 1,
unBind: this.search.unBind,
firmwareVersion: this.search.firmwareVersion,
isUsed: this.search.isUsed,
iccid: this.search.iccid,
rssiStart: this.search.rssiStart,
rssiEnd: this.search.rssiEnd,
createStart: this.search.createStart,
createEnd: this.search.createEnd,
isAppBind: this.search.isAppBind
};
if (q.isOnline == 2) {
delete q.isOnline
}
var qObject = utils.validObject(q)
var data = {
q: JSON.stringify(qObject),
pageNum: val,
pageSize: this.pageSize,
};
httpPost(data, this.$api.getDeviceItems).then((res) => {
res.data.list.map((li) => {
var accessPlatform = this.accessPlatform.show.filter(item => item.code == li.accessPlatform)[0]
if (accessPlatform) {
li['accessPlatformText'] = accessPlatform.desc
} else {
li['accessPlatformText'] = ''
}
let deviceType = this.accessPlatform.deviceType.filter(item => item.code == li.manufactureId)[0]
if (deviceType) {
li['manufactureIdText'] = deviceType.desc
} else {
li['manufactureIdText'] = ''
}
li.createAt = moment(li.createAt).format("YYYY-MM-DD HH:mm:ss");
if (li.createAt) { }
if (li.lastReportAt) {
li.lastReportAt = moment(li.lastReportAt).format("YYYY-MM-DD HH:mm:ss");
} else {
li['lastReportAt'] = ''
}
});
var newArr = uniqueArray(res.data.list, "id");
this.tableData = newArr;
this.pageTotal = res.data.total;
});
},
btnClick() {
document.querySelector(".input-file").click();
},
exportBtn() {
this.exportExcel()
},
exportExcel() {
let sheet1data = [
['设备号', 'mac地址', 'sn', 'imei', 'app绑定号', '生产写入号']
]
var sheet1 = XLSX.utils.json_to_sheet(sheet1data, {
skipHeader: true,
})
// 创建一个新的空的workbook
var wb = XLSX.utils.book_new()
XLSX.utils.book_append_sheet(wb, sheet1, '设备导入模板')
// XLSX.utils.book_append_sheet(wb, sheet2, '行政部')
// XLSX.utils.book_append_sheet(wb, sheet3, '前端部')
const workbookBlob = this.workbook2blob(wb)
this.openDownloadDialog(workbookBlob, '设备导入模板.xlsx')
},
// 下载模板
workbook2blob(workbook) {
// 生成excel的配置项
var wopts = {
// 要生成的文件类型
bookType: 'xlsx',
// // 是否生成Shared String Table,官方解释是,如果开启生成速度会下降,但在低版本IOS设备上有更好的兼容性
bookSST: false,
type: 'binary'
}
var wbout = XLSX.write(workbook, wopts)
// 将字符串转ArrayBuffer
function s2ab(s) {
var buf = new ArrayBuffer(s.length)
var view = new Uint8Array(buf)
for (var i = 0; i !== s.length; ++i) view[i] = s.charCodeAt(i) & 0xff
return buf
}
let buf = s2ab(wbout)
var blob = new Blob([buf], {
type: 'application/octet-stream'
})
return blob
},
// 将blob对象 创建bloburl,然后用a标签实现弹出下载框
openDownloadDialog(blob, fileName) {
if (typeof blob === 'object' && blob instanceof Blob) {
blob = URL.createObjectURL(blob) // 创建blob地址
}
var aLink = document.createElement('a')
aLink.href = blob
// HTML5新增的属性,指定保存文件名,可以不要后缀,注意,有时候 file:///模式下不会生效
aLink.download = fileName || ''
var event
if (window.MouseEvent) event = new MouseEvent('click')
// 移动端
else {
event = document.createEvent('MouseEvents')
event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null)
}
aLink.dispatchEvent(event)
},
exportData(event) {
if (!event.currentTarget.files.length) {
return;
}
const that = this;
// 拿取文件对象
var f = event.currentTarget.files[0];
// 用FileReader来读取
var reader = new FileReader();
// 重写FileReader上的readAsBinaryString方法
FileReader.prototype.readAsBinaryString = function (f) {
var binary = "";
var wb; // 读取完成的数据
var outdata; // 你需要的数据
var reader = new FileReader();
reader.onload = function (e) {
// 读取成Uint8Array,再转换为Unicode编码(Unicode占两个字节)
var bytes = new Uint8Array(reader.result);
var length = bytes.byteLength;
for (var i = 0; i < length; i++) {
binary += String.fromCharCode(bytes[i]);
}
// 接下来就是xlsx了,具体可看api
wb = XLSX.read(binary, {
type: "binary",
});
outdata = XLSX.utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]]);
// 自定义方法向父组件传递数据
let arr1 = [];
outdata.map((li, index) => {
var str = {};
str.deviceNum = li["设备号"];
str.mac = li["mac地址"];
str.imei = li["imei"];
str.app = li["app绑定号"];
str.write = li["生产写入号"];
arr1.push(str);
});
// this.tableData=arr
that.userlist1statu = false;
that.$nextTick(() => {
that.userlist2 = arr1;
that.userlist1statu = true;
});
};
reader.readAsArrayBuffer(f);
};
reader.readAsBinaryString(f);
},
},
};
</script>
<style scoped>
.handle-box {
position: relative;
margin-bottom: 20px;
}
.handle-select {
width: 120px;
}
.handle-input {
width: 300px;
display: inline-block;
}
.table {
width: 100%;
font-size: 14px;
}
.red {
color: #ff0000;
}
.mr10 {
margin-right: 10px;
}
.mright {
margin-right: 10px;
display: inline-block;
}
.table-td-thumb {
display: block;
margin: auto;
width: 40px;
height: 40px;
}
.elrow {
margin-bottom: 20px;
}
.grid-content {
position: relative;
z-index: 99;
display: flex;
align-items: center;
overflow: hidden;
justify-content: space-around;
-webkit-box-align: center;
}
/* 加的 */
.colposition {
display: flex;
align-items: center;
position: relative;
box-sizing: border-box;
border: 2px solid hsla(0, 0%, 100%, 0.2);
/* width: 100%; */
}
.grid-cont-right {
flex: 1;
text-align: left;
padding-left: 20px;
box-sizing: border-box;
font-size: 16px;
color: #666;
font-size: 14px;
line-height: 32px;
}
.grid-num {
font-size: 24px;
}
.grid-con-icon {
font-size: 50px;
width: 100px;
height: 100px;
text-align: center;
line-height: 100px;
color: #fff;
}
.grid-con-1 {
position: relative;
}
.grid-con-1::before {
position: absolute;
content: "";
top: 50%;
right: 0;
width: 1px;
transform: translateY(-50%);
height: 70px;
-webkit-box-sizing: border-box;
box-sizing: border-box;
border-left: 1px dashed #666;
}
.grid-con-1 .grid-con-icon {
background: rgb(45, 140, 240);
}
.grid-con-1 .grid-num {
/* color: rgb(45, 140, 240); */
color: #333;
}
.grid-con-2 .grid-con-icon {
background: rgb(100, 213, 114);
}
.grid-con-2 .grid-num {
/* color: rgb(45, 140, 240); */
color: #333;
}
.grid-con-3 .grid-con-icon {
background: rgb(242, 94, 67);
}
.grid-con-3 .grid-num {
color: rgb(242, 94, 67);
}
.container {
position: relative;
}
.container .el-table th>.cell {
text-align: center;
font-size: 14px;
}
.container>>>.el-table .cell {
text-align: center;
font-size: 14px;
}
.container>>>.el-table .el-table__row .el-table__cell {
padding: 10px 0;
}
.table .iconfont {
font-size: 24px;
vertical-align: middle;
}
.red {
color: red;
}
.green {
color: #49ce6c;
}
.orange {
color: #ff9602;
}
.blue {
color: #4a90e2;
}
.dling {
min-width: 32px;
display: inline-block;
}
.sapnli {
vertical-align: middle;
}
.spanbg {
padding: 4px 10px;
background: #4a90e2;
color: #fff;
width: 80px;
display: inline-block;
font-size: 12px;
box-sizing: border-box;
border-radius: 4px;
}
.pagelist {
margin-top: 20px;
text-align: right;
}
.ztree {
height: 300px;
overflow-y: auto;
}
.roomcontent {
margin-top: 50px;
height: 450px;
overflow: auto;
}
.roomcontent .roomconli {
display: inline-block;
cursor: pointer;
position: relative;
}
.taball {
width: 100%;
margin-top: 50px;
}
.button-list {
position: absolute;
width: 300px;
height: 200px;
background: rgba(0, 0, 0, 0.5);
top: 0;
left: 0;
border-radius: 10px;
-ms-flex-wrap: wrap;
flex-wrap: wrap;
-webkit-box-sizing: border-box;
box-sizing: border-box;
padding: 0 10px;
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-ms-flex-line-pack: center;
align-content: center;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
-webkit-box-pack: center;
-ms-flex-pack: center;
justify-content: center;
display: none;
}
.button-list div {
/* width: 55px; */
padding: 0 14px;
height: 25px;
background: rgba(0, 0, 0, 0.4);
border-radius: 13px;
margin: 0 5px 10px;
font-size: 14px;
font-family: Microsoft YaHei;
font-weight: 700;
color: #dedede;
cursor: pointer;
text-align: center;
line-height: 25px;
}
.roomcontent .roomconli:hover .button-list {
display: flex;
}
.roomcontentheight {
height: 640px;
overflow-y: auto;
}
.switchiconfont {
position: absolute;
top: 4px;
right: 4px;
background: #fff;
color: #333;
display: flex;
}
.switchiconfont .iconfont {
font-size: 16px;
padding: 4px 6px;
border: 1px solid #dcdfe6;
cursor: pointer;
}
.switchiconfont .active {
color: #fff;
cursor: pointer;
background: #FA8E00;
border: 1px solid #FA8E00;
}
.rltable {
box-sizing: border-box;
margin: 0 20px;
}
.demo-form-inline .el-form-item {
width: 46%;
}
.demo-form-inline>>>.el-form-item .el-form-item__label {
width: 22%;
}
.demo-form-inline>>>.el-form-item .el-form-item__content {
width: 78%;
}
.input-file {
display: none;
}
.width100 {
width: 8vw;
margin-bottom: 10px;
}
.quantity {
display: inline-block;
}
.quantity .w50 {
width: 1.5rem;
}
.position-father {
position: relative;
display: inline-block;
}
.contentSearch {
position: absolute;
padding: .25rem;
left: 50%;
transform: translateX(-50%);
top: .5rem;
z-index: 999;
border: 1px solid #ebeef5;
box-shadow: 0 2px 12px 0 rgb(0 0 0 / 40%);
border-radius: 10px;
background: #fff;
width: 8rem;
cursor: pointer;
display: flex;
flex-wrap: wrap;
justify-content: space-between;
}
.contentSearch .width100 {
width: 49%;
margin-bottom: .25rem;
}
.contentSearch .w80 {
width: 2rem;
margin-bottom: .25rem;
}
.contentSearch .searchbutton {
width: 100%;
display: flex;
flex-wrap: nowrap;
justify-content: space-around;
}
.contentSearch .searchbutton button {
width: 49%;
}
.contentSearch button {
width: 100%;
}
.quantity>>>.el-input-group__append {
padding: 0 10px;
}
.date-form #myLine {
margin-bottom: 20px;
}
.w-250 {
width: 250px;
}
.w-250>>>.el-range-separator {
width: 10%;
}
.adddbtn .el-button+.el-button,
.adddbtn .el-checkbox.is-bordered+.el-checkbox.is-bordered {
margin-left: 0;
}
@media only screen and (max-width: 1024px) {
.demo-form-inline .el-form-item {
width: 100%;
}
}</style>