<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">-->
|
|
<!-- <!– <el-switch v-model="value1" :inactive-text="switchtext" @change="switchFun">-->
|
|
<!-- </el-switch> –>-->
|
|
<!-- <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>
|